@ngneers/controls 0.0.1-pre6 → 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 (148) hide show
  1. package/fesm2022/ngneers-controls-accordion.mjs +10 -10
  2. package/fesm2022/ngneers-controls-accordion.mjs.map +1 -1
  3. package/fesm2022/ngneers-controls-api-ng.mjs +12 -9
  4. package/fesm2022/ngneers-controls-api-ng.mjs.map +1 -1
  5. package/fesm2022/ngneers-controls-avatar.mjs +6 -6
  6. package/fesm2022/ngneers-controls-avatar.mjs.map +1 -1
  7. package/fesm2022/ngneers-controls-base.mjs +9 -9
  8. package/fesm2022/ngneers-controls-base.mjs.map +1 -1
  9. package/fesm2022/ngneers-controls-breadcrumb.mjs +7 -7
  10. package/fesm2022/ngneers-controls-breadcrumb.mjs.map +1 -1
  11. package/fesm2022/ngneers-controls-button-group.mjs +3 -3
  12. package/fesm2022/ngneers-controls-button-group.mjs.map +1 -1
  13. package/fesm2022/ngneers-controls-button.mjs +6 -6
  14. package/fesm2022/ngneers-controls-button.mjs.map +1 -1
  15. package/fesm2022/{ngneers-controls-calendar-time-Bzlv9Vkn.mjs → ngneers-controls-calendar-time-CKAqRgOP.mjs} +4 -4
  16. package/fesm2022/{ngneers-controls-calendar-time-Bzlv9Vkn.mjs.map → ngneers-controls-calendar-time-CKAqRgOP.mjs.map} +1 -1
  17. package/fesm2022/ngneers-controls-calendar.mjs +11 -11
  18. package/fesm2022/ngneers-controls-calendar.mjs.map +1 -1
  19. package/fesm2022/ngneers-controls-checkbox.mjs +4 -4
  20. package/fesm2022/ngneers-controls-checkbox.mjs.map +1 -1
  21. package/fesm2022/ngneers-controls-chip.mjs +4 -4
  22. package/fesm2022/ngneers-controls-chip.mjs.map +1 -1
  23. package/fesm2022/ngneers-controls-default-icons.mjs +61 -0
  24. package/fesm2022/ngneers-controls-default-icons.mjs.map +1 -0
  25. package/fesm2022/ngneers-controls-defer.mjs +3 -3
  26. package/fesm2022/ngneers-controls-defer.mjs.map +1 -1
  27. package/fesm2022/ngneers-controls-dialog.mjs +10 -10
  28. package/fesm2022/ngneers-controls-dialog.mjs.map +1 -1
  29. package/fesm2022/ngneers-controls-directives.mjs +21 -21
  30. package/fesm2022/ngneers-controls-directives.mjs.map +1 -1
  31. package/fesm2022/ngneers-controls-drawer.mjs +7 -7
  32. package/fesm2022/ngneers-controls-drawer.mjs.map +1 -1
  33. package/fesm2022/ngneers-controls-edit-inplace.mjs +7 -7
  34. package/fesm2022/ngneers-controls-edit-inplace.mjs.map +1 -1
  35. package/fesm2022/ngneers-controls-filter.mjs +4 -4
  36. package/fesm2022/ngneers-controls-filter.mjs.map +1 -1
  37. package/fesm2022/ngneers-controls-i18n.mjs +3 -3
  38. package/fesm2022/ngneers-controls-i18n.mjs.map +1 -1
  39. package/fesm2022/ngneers-controls-icon.mjs +108 -44
  40. package/fesm2022/ngneers-controls-icon.mjs.map +1 -1
  41. package/fesm2022/ngneers-controls-inplace.mjs +6 -6
  42. package/fesm2022/ngneers-controls-inplace.mjs.map +1 -1
  43. package/fesm2022/ngneers-controls-input-field.mjs +5 -5
  44. package/fesm2022/ngneers-controls-input-field.mjs.map +1 -1
  45. package/fesm2022/ngneers-controls-input-mask.mjs +3 -3
  46. package/fesm2022/ngneers-controls-input-mask.mjs.map +1 -1
  47. package/fesm2022/ngneers-controls-input.mjs +3 -3
  48. package/fesm2022/ngneers-controls-input.mjs.map +1 -1
  49. package/fesm2022/ngneers-controls-item-view.mjs +6 -6
  50. package/fesm2022/ngneers-controls-item-view.mjs.map +1 -1
  51. package/fesm2022/ngneers-controls-list-box.mjs +6 -6
  52. package/fesm2022/ngneers-controls-list-box.mjs.map +1 -1
  53. package/fesm2022/ngneers-controls-menu.mjs +10 -10
  54. package/fesm2022/ngneers-controls-menu.mjs.map +1 -1
  55. package/fesm2022/ngneers-controls-message.mjs +3 -3
  56. package/fesm2022/ngneers-controls-message.mjs.map +1 -1
  57. package/fesm2022/ngneers-controls-paginator.mjs +4 -4
  58. package/fesm2022/ngneers-controls-paginator.mjs.map +1 -1
  59. package/fesm2022/ngneers-controls-popover.mjs +11 -6
  60. package/fesm2022/ngneers-controls-popover.mjs.map +1 -1
  61. package/fesm2022/ngneers-controls-progress.mjs +3 -3
  62. package/fesm2022/ngneers-controls-progress.mjs.map +1 -1
  63. package/fesm2022/ngneers-controls-scroll-shadow.mjs +54 -0
  64. package/fesm2022/ngneers-controls-scroll-shadow.mjs.map +1 -0
  65. package/fesm2022/ngneers-controls-scroller.mjs +9 -9
  66. package/fesm2022/ngneers-controls-scroller.mjs.map +1 -1
  67. package/fesm2022/ngneers-controls-select-button.mjs +4 -4
  68. package/fesm2022/ngneers-controls-select-button.mjs.map +1 -1
  69. package/fesm2022/ngneers-controls-select.mjs +8 -7
  70. package/fesm2022/ngneers-controls-select.mjs.map +1 -1
  71. package/fesm2022/ngneers-controls-slider.mjs +3 -3
  72. package/fesm2022/ngneers-controls-slider.mjs.map +1 -1
  73. package/fesm2022/ngneers-controls-spinner.mjs +3 -3
  74. package/fesm2022/ngneers-controls-spinner.mjs.map +1 -1
  75. package/fesm2022/ngneers-controls-splitter.mjs +10 -10
  76. package/fesm2022/ngneers-controls-splitter.mjs.map +1 -1
  77. package/fesm2022/ngneers-controls-switch.mjs +3 -3
  78. package/fesm2022/ngneers-controls-switch.mjs.map +1 -1
  79. package/fesm2022/ngneers-controls-table.mjs +227 -293
  80. package/fesm2022/ngneers-controls-table.mjs.map +1 -1
  81. package/fesm2022/ngneers-controls-tabs.mjs +10 -10
  82. package/fesm2022/ngneers-controls-tabs.mjs.map +1 -1
  83. package/fesm2022/ngneers-controls-tag.mjs +3 -3
  84. package/fesm2022/ngneers-controls-tag.mjs.map +1 -1
  85. package/fesm2022/ngneers-controls-toast.mjs +10 -10
  86. package/fesm2022/ngneers-controls-toast.mjs.map +1 -1
  87. package/fesm2022/ngneers-controls-toggle-button.mjs +4 -4
  88. package/fesm2022/ngneers-controls-toggle-button.mjs.map +1 -1
  89. package/fesm2022/ngneers-controls-tooltip.mjs +44 -8
  90. package/fesm2022/ngneers-controls-tooltip.mjs.map +1 -1
  91. package/fesm2022/ngneers-controls-utils-ng.mjs +3 -3
  92. package/fesm2022/ngneers-controls-utils-ng.mjs.map +1 -1
  93. package/fesm2022/ngneers-controls-utils.mjs +1 -1
  94. package/fesm2022/ngneers-controls-utils.mjs.map +1 -1
  95. package/package.json +29 -11
  96. package/types/ngneers-controls-accordion.d.ts +6 -4
  97. package/types/ngneers-controls-api-ng.d.ts +5 -0
  98. package/types/ngneers-controls-api.d.ts +2 -2
  99. package/types/ngneers-controls-breadcrumb.d.ts +5 -3
  100. package/types/ngneers-controls-checkbox.d.ts +5 -3
  101. package/types/ngneers-controls-chip.d.ts +3 -1
  102. package/types/ngneers-controls-default-icons.d.ts +5 -0
  103. package/types/ngneers-controls-drawer.d.ts +3 -1
  104. package/types/ngneers-controls-filter.d.ts +1 -1
  105. package/types/ngneers-controls-icon.d.ts +23 -40
  106. package/types/ngneers-controls-input-field.d.ts +3 -1
  107. package/types/ngneers-controls-item-view.d.ts +4 -2
  108. package/types/ngneers-controls-menu.d.ts +3 -1
  109. package/types/ngneers-controls-message.d.ts +3 -1
  110. package/types/ngneers-controls-popover.d.ts +1 -0
  111. package/types/ngneers-controls-scroll-shadow.d.ts +16 -0
  112. package/types/ngneers-controls-select.d.ts +5 -10
  113. package/types/ngneers-controls-table.d.ts +29 -41
  114. package/types/ngneers-controls-tabs.d.ts +4 -2
  115. package/types/ngneers-controls-tag.d.ts +3 -1
  116. package/types/ngneers-controls-toast.d.ts +4 -2
  117. package/types/ngneers-controls-toggle-button.d.ts +5 -3
  118. package/types/ngneers-controls-tooltip.d.ts +7 -1
  119. package/fesm2022/ngneers-controls-icon-calendar-z5xA9wTT.mjs +0 -4
  120. package/fesm2022/ngneers-controls-icon-calendar-z5xA9wTT.mjs.map +0 -1
  121. package/fesm2022/ngneers-controls-icon-check-DdAQ9k-T.mjs +0 -4
  122. package/fesm2022/ngneers-controls-icon-check-DdAQ9k-T.mjs.map +0 -1
  123. package/fesm2022/ngneers-controls-icon-chevron_down-HO-z-xOr.mjs +0 -4
  124. package/fesm2022/ngneers-controls-icon-chevron_down-HO-z-xOr.mjs.map +0 -1
  125. package/fesm2022/ngneers-controls-icon-chevron_left-CC5psi16.mjs +0 -4
  126. package/fesm2022/ngneers-controls-icon-chevron_left-CC5psi16.mjs.map +0 -1
  127. package/fesm2022/ngneers-controls-icon-chevron_right-BRxlzx4G.mjs +0 -4
  128. package/fesm2022/ngneers-controls-icon-chevron_right-BRxlzx4G.mjs.map +0 -1
  129. package/fesm2022/ngneers-controls-icon-chevron_up-cqhPO7g2.mjs +0 -4
  130. package/fesm2022/ngneers-controls-icon-chevron_up-cqhPO7g2.mjs.map +0 -1
  131. package/fesm2022/ngneers-controls-icon-ellipsis-DXIGA1sk.mjs +0 -4
  132. package/fesm2022/ngneers-controls-icon-ellipsis-DXIGA1sk.mjs.map +0 -1
  133. package/fesm2022/ngneers-controls-icon-filter-oU7E6Xgr.mjs +0 -4
  134. package/fesm2022/ngneers-controls-icon-filter-oU7E6Xgr.mjs.map +0 -1
  135. package/fesm2022/ngneers-controls-icon-filter_solid-CqIKuR4N.mjs +0 -4
  136. package/fesm2022/ngneers-controls-icon-filter_solid-CqIKuR4N.mjs.map +0 -1
  137. package/fesm2022/ngneers-controls-icon-magnifying_glass-T4Hzbkig.mjs +0 -4
  138. package/fesm2022/ngneers-controls-icon-magnifying_glass-T4Hzbkig.mjs.map +0 -1
  139. package/fesm2022/ngneers-controls-icon-minus-oGDEFO4E.mjs +0 -4
  140. package/fesm2022/ngneers-controls-icon-minus-oGDEFO4E.mjs.map +0 -1
  141. package/fesm2022/ngneers-controls-icon-sort-CRD4tafz.mjs +0 -4
  142. package/fesm2022/ngneers-controls-icon-sort-CRD4tafz.mjs.map +0 -1
  143. package/fesm2022/ngneers-controls-icon-sort_down-DiFB1P6R.mjs +0 -4
  144. package/fesm2022/ngneers-controls-icon-sort_down-DiFB1P6R.mjs.map +0 -1
  145. package/fesm2022/ngneers-controls-icon-sort_up-Bq_q3hIi.mjs +0 -4
  146. package/fesm2022/ngneers-controls-icon-sort_up-Bq_q3hIi.mjs.map +0 -1
  147. package/fesm2022/ngneers-controls-icon-xmark-BZKZORiu.mjs +0 -4
  148. package/fesm2022/ngneers-controls-icon-xmark-BZKZORiu.mjs.map +0 -1
@@ -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.2.2", ngImport: i0, type: NgnAccordion, deps: [], target: i0.ɵɵFactoryTarget.Component });
48
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.2", 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.2.2", 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),
@@ -100,10 +100,10 @@ class AccordionTemplates extends NgnBase {
100
100
  * Types for the dialog templates.
101
101
  */
102
102
  templateTypes = templateTypesFn();
103
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: AccordionTemplates, deps: null, target: i0.ɵɵFactoryTarget.Directive });
104
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.2.2", 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.2.2", 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
 
@@ -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.2.2", ngImport: i0, type: NgnAccordionPanel, deps: [], target: i0.ɵɵFactoryTarget.Component });
182
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.2", 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.2.2", 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
  },
@@ -334,10 +337,10 @@ class Platform {
334
337
  isTouchDevice = computed(() => {
335
338
  return this._deviceType() === 'mobile' || this._deviceType() === 'tablet';
336
339
  }, ...(ngDevMode ? [{ debugName: "isTouchDevice" }] : /* istanbul ignore next */ []));
337
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: Platform, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
338
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: Platform });
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.2.2", 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
 
@@ -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.2.2", ngImport: i0, type: ThemeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
617
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.2", 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.2.2", 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
 
@@ -636,10 +639,10 @@ class NgnTemplate {
636
639
  static ngTemplateContextGuard(dir, ctx) {
637
640
  return true;
638
641
  }
639
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NgnTemplate, deps: [], target: i0.ɵɵFactoryTarget.Directive });
640
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.2", 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.2.2", 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]',
@@ -1 +1 @@
1
- {"version":3,"file":"ngneers-controls-api-ng.mjs","sources":["../../src/api/ng/config/config.ts","../../src/api/ng/closable.ts","../../src/api/ng/components.ts","../../src/api/ng/dom.ts","../../src/api/ng/kinds.ts","../../src/api/ng/platform.ts","../../src/api/ng/positioning.ts","../../src/api/ng/theme-service.ts","../../src/api/ng/provider.ts","../../src/api/ng/template.ts","../../src/api/ng/ngneers-controls-api-ng.ts"],"sourcesContent":["import { inject, InjectionToken, provideAppInitializer, type Provider } from '@angular/core';\r\nimport { registerCustomLanguages, type Translations } from '@ngneers/controls/i18n';\r\nimport { type DeepPartial, Logger, type LogLevel } from '@ngneers/controls/utils';\r\n\r\nimport type { TooltipOptions } from './tooltip';\r\nimport type { NgnStateStorage } from '@ngneers/controls/utils-ng';\r\nimport type { StyleScope, Theme } from '@ngneers/controls-themes';\r\n\r\nexport const NGN_CONFIG = new InjectionToken<NgnConfig>('NGN_CONFIG');\r\n\r\nexport type NgnConfig = {\r\n readonly logLevel: LogLevel;\r\n readonly customTranslations?: Record<string, () => Promise<Translations>>;\r\n readonly disableAnimations: boolean;\r\n readonly theme: {\r\n readonly preset: Theme | null;\r\n readonly lazyLoaded: boolean;\r\n readonly styleScope: StyleScope | null;\r\n readonly cssLayer: string | null;\r\n readonly namePrefix: string;\r\n };\r\n readonly defaults: {\r\n readonly stateStorage: NgnStateStorage;\r\n readonly splitter: {\r\n readonly stateStorage: NgnStateStorage;\r\n };\r\n readonly tooltip: TooltipOptions;\r\n };\r\n};\r\n\r\nexport type NgnConfigInit = DeepPartial<\r\n NgnConfig,\r\n 'theme.preset.*' | 'theme.styleScope.*' | 'customTranslations.*'\r\n>;\r\n\r\nexport const defaultNgnConfig: NgnConfig = {\r\n logLevel: 'info',\r\n disableAnimations: false,\r\n theme: {\r\n preset: null,\r\n lazyLoaded: false,\r\n styleScope: null,\r\n cssLayer: 'ngn-controls',\r\n namePrefix: 'ngn-',\r\n },\r\n defaults: {\r\n stateStorage: 'session',\r\n splitter: {\r\n stateStorage: 'session',\r\n },\r\n tooltip: {\r\n placement: 'bottom',\r\n offset: 4,\r\n showDelay: '0.5s',\r\n hideDelay: '0.1s',\r\n showArrow: true,\r\n showOnHover: true,\r\n showOnFocus: true,\r\n hideOnTooltipHover: false,\r\n hideOnClick: true,\r\n },\r\n },\r\n};\r\n\r\nexport function provideNgnConfig(config?: NgnConfigInit): Provider {\r\n return [\r\n {\r\n provide: NGN_CONFIG,\r\n useValue: {\r\n logLevel: config?.logLevel ?? defaultNgnConfig.logLevel,\r\n customTranslations: config?.customTranslations,\r\n disableAnimations: config?.disableAnimations ?? defaultNgnConfig.disableAnimations,\r\n theme: {\r\n preset: config?.theme?.preset ?? defaultNgnConfig.theme.preset,\r\n lazyLoaded: config?.theme?.lazyLoaded ?? defaultNgnConfig.theme.lazyLoaded,\r\n styleScope: config?.theme?.styleScope ?? defaultNgnConfig.theme.styleScope,\r\n cssLayer:\r\n config?.theme?.cssLayer === undefined\r\n ? defaultNgnConfig.theme.cssLayer\r\n : config?.theme?.cssLayer,\r\n namePrefix: config?.theme?.namePrefix ?? defaultNgnConfig.theme.namePrefix,\r\n },\r\n defaults: {\r\n stateStorage: config?.defaults?.stateStorage ?? defaultNgnConfig.defaults.stateStorage,\r\n splitter: {\r\n stateStorage:\r\n config?.defaults?.splitter?.stateStorage ??\r\n config?.defaults?.stateStorage ??\r\n defaultNgnConfig.defaults.splitter.stateStorage,\r\n },\r\n tooltip: {\r\n placement:\r\n config?.defaults?.tooltip?.placement ?? defaultNgnConfig.defaults.tooltip.placement,\r\n offset: config?.defaults?.tooltip?.offset ?? defaultNgnConfig.defaults.tooltip.offset,\r\n showDelay:\r\n config?.defaults?.tooltip?.showDelay ?? defaultNgnConfig.defaults.tooltip.showDelay,\r\n hideDelay:\r\n config?.defaults?.tooltip?.hideDelay ?? defaultNgnConfig.defaults.tooltip.hideDelay,\r\n showArrow:\r\n config?.defaults?.tooltip?.showArrow ?? defaultNgnConfig.defaults.tooltip.showArrow,\r\n showOnHover:\r\n config?.defaults?.tooltip?.showOnHover ??\r\n defaultNgnConfig.defaults.tooltip.showOnHover,\r\n showOnFocus:\r\n config?.defaults?.tooltip?.showOnFocus ??\r\n defaultNgnConfig.defaults.tooltip.showOnFocus,\r\n hideOnTooltipHover:\r\n config?.defaults?.tooltip?.hideOnTooltipHover ??\r\n defaultNgnConfig.defaults.tooltip.hideOnTooltipHover,\r\n hideOnClick:\r\n config?.defaults?.tooltip?.hideOnClick ??\r\n defaultNgnConfig.defaults.tooltip.hideOnClick,\r\n },\r\n },\r\n } satisfies NgnConfig,\r\n },\r\n provideAppInitializer(() => {\r\n const config = inject(NGN_CONFIG);\r\n if (config?.customTranslations) {\r\n registerCustomLanguages(config.customTranslations);\r\n }\r\n Logger.logLevel = config.logLevel ?? Logger.logLevel;\r\n }),\r\n ];\r\n}\r\n","import { type ModelSignal, OutputEmitterRef } from '@angular/core';\r\n\r\nexport type PopoverCloseBy = 'any' | 'none';\r\nexport type CloseBy = PopoverCloseBy | 'escape';\r\n\r\nexport function toPopoverCloseBy(closeBy: CloseBy): 'auto' | 'manual' {\r\n switch (closeBy) {\r\n case 'any':\r\n return 'auto';\r\n case 'escape':\r\n case 'none':\r\n return 'manual';\r\n }\r\n}\r\n\r\nexport function toModalCloseBy(closeBy: CloseBy): 'any' | 'closerequest' | 'none' {\r\n switch (closeBy) {\r\n case 'any':\r\n return 'any';\r\n case 'escape':\r\n return 'closerequest';\r\n case 'none':\r\n return 'none';\r\n }\r\n}\r\n\r\nexport interface Openable {\r\n show(): void;\r\n hide(): void;\r\n toggle(): void;\r\n open: ModelSignal<boolean>;\r\n closed: OutputEmitterRef<void>;\r\n}\r\n","import { ComponentRef, type InputSignal, type InputSignalWithTransform } from '@angular/core';\r\n\r\ntype ComponentFromRef<T extends ComponentRef<any>> = T extends ComponentRef<infer C> ? C : never;\r\ntype InputsFromComponent<T> = {\r\n [K in keyof T]: T[K] extends InputSignal<infer V>\r\n ? V\r\n : T[K] extends InputSignalWithTransform<infer V, infer _>\r\n ? V\r\n : never;\r\n};\r\n\r\nexport function setComponentInput<\r\n T extends ComponentRef<C>,\r\n C,\r\n Input extends InputsFromComponent<ComponentFromRef<T>>,\r\n I extends keyof Input & string,\r\n>(componentRef: T, inputName: I, value: Input[I]): void {\r\n componentRef.setInput(inputName, value);\r\n}\r\n","import {\r\n afterRenderEffect,\r\n computed,\r\n DestroyRef,\r\n effect,\r\n ElementRef,\r\n inject,\r\n Injector,\r\n runInInjectionContext,\r\n signal,\r\n type Signal,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { deepCopy } from '@ngneers/controls/utils';\r\nimport { signalWithPrevious } from '@ngneers/controls/utils-ng';\r\nimport { fromEvent, Observable, Subject, Subscription } from 'rxjs';\r\n\r\nexport type Size = { width: number; height: number };\r\n\r\ntype ElementArray =\r\n | Signal<ReadonlyArray<HTMLElement | ElementRef<HTMLElement>>>\r\n | ReadonlyArray<HTMLElement | ElementRef<HTMLElement>>;\r\ntype ElementSingle =\r\n | Signal<HTMLElement | ElementRef<HTMLElement> | undefined>\r\n | HTMLElement\r\n | Document\r\n | ElementRef<HTMLElement>;\r\n\r\nfunction getElement(el: ElementSingle): HTMLElement | Document | undefined {\r\n const rawElement = typeof el === 'function' ? el() : el;\r\n const element = rawElement instanceof ElementRef ? rawElement.nativeElement : rawElement;\r\n return element;\r\n}\r\n\r\nexport function elementSizeSignal(element: ElementSingle, active?: Signal<boolean>): Signal<Size> {\r\n const val = elementsSizesSignalInt(element, active);\r\n return computed(() => val()[0] ?? { width: 0, height: 0 });\r\n}\r\n\r\nexport function elementsSizesSignal(\r\n element: ElementArray,\r\n active?: Signal<boolean>\r\n): Signal<readonly Size[]> {\r\n return elementsSizesSignalInt(element, active);\r\n}\r\n\r\nfunction elementsSizesSignalInt(\r\n element: ElementArray | ElementSingle,\r\n active?: Signal<boolean>\r\n): Signal<readonly Size[]> {\r\n const sizeSignal = signal<readonly Size[]>([], {\r\n equal: (a, b) => JSON.stringify(a) === JSON.stringify(b),\r\n });\r\n\r\n let elements: HTMLElement[];\r\n afterRenderEffect(() => {\r\n resizeObserver.disconnect();\r\n if (active && !active()) {\r\n return;\r\n }\r\n const rawElement = typeof element === 'function' ? element() : element;\r\n const arrayElement = Array.isArray(rawElement) ? rawElement : rawElement ? [rawElement] : [];\r\n elements = arrayElement.map(el => (el instanceof ElementRef ? el.nativeElement : el));\r\n\r\n if (!elements.length) {\r\n return;\r\n }\r\n sizeSignal.set(\r\n elements.map(el => {\r\n const rect = el.getBoundingClientRect();\r\n return {\r\n width: rect.width,\r\n height: rect.height,\r\n };\r\n })\r\n );\r\n elements.forEach(el => {\r\n resizeObserver.observe(el, { box: 'border-box' });\r\n });\r\n });\r\n const destroyRef = inject(DestroyRef);\r\n if (typeof ResizeObserver === 'undefined') {\r\n return sizeSignal; // ResizeObserver is not supported, return initial size\r\n }\r\n const resizeObserver = new ResizeObserver(entries => {\r\n entries.forEach(entry => {\r\n const index = elements.findIndex(el => el === entry.target);\r\n sizeSignal.update(s => {\r\n const copy = deepCopy(s);\r\n const borderBoxSize = entry.borderBoxSize[0];\r\n if (!borderBoxSize) {\r\n return s;\r\n }\r\n copy[index] = {\r\n width: borderBoxSize.inlineSize,\r\n height: borderBoxSize.blockSize,\r\n };\r\n return copy;\r\n });\r\n });\r\n });\r\n destroyRef.onDestroy(() => {\r\n resizeObserver.disconnect();\r\n });\r\n return sizeSignal;\r\n}\r\n\r\nconst ABORT_SIGNAL_SYMBOL = Symbol('AbortSignal');\r\nexport function abortSignalOnDestroy(options?: { injector?: Injector }): AbortSignal {\r\n const destroyRef = options?.injector?.get(DestroyRef) ?? inject(DestroyRef);\r\n if (ABORT_SIGNAL_SYMBOL in destroyRef) {\r\n return destroyRef[ABORT_SIGNAL_SYMBOL] as AbortSignal;\r\n }\r\n const abortController = new AbortController();\r\n destroyRef.onDestroy(() => {\r\n abortController.abort();\r\n });\r\n (destroyRef as any)[ABORT_SIGNAL_SYMBOL] = abortController.signal;\r\n return abortController.signal;\r\n}\r\n\r\n/**\r\n * Creates an Observable that emits the latest event of the specified type from the given DOM element.\r\n *\r\n * ⚠️ Cannot be used to cancel or call preventDefault on the event, as the event is emitted after the event handler phase.\r\n * @param element The target DOM element or ElementRef. Either can be provided directly or via a Signal.\r\n * @param eventName The name of the event to listen for.\r\n * @param injector Optional injector to use for lifecycle management. If not provided, the current injector is used.\r\n * @returns An Observable that emits the latest event of the specified type. Does not complete until the injector is destroyed.\r\n */\r\nexport function domEventObservable<EventName extends keyof GlobalEventHandlersEventMap>(\r\n element: ElementSingle,\r\n eventName: EventName,\r\n injector?: Injector\r\n): Observable<GlobalEventHandlersEventMap[EventName]> {\r\n const inj = injector ?? inject(Injector);\r\n\r\n const result = new Subject<GlobalEventHandlersEventMap[EventName]>();\r\n const destroyRef = inj.get(DestroyRef);\r\n\r\n let subscription: Subscription | undefined;\r\n runInInjectionContext(inj, () => {\r\n afterRenderEffect(() => {\r\n subscription?.unsubscribe();\r\n const el = getElement(element);\r\n if (!el) {\r\n return;\r\n }\r\n subscription = fromEvent(el, eventName)\r\n .pipe(takeUntilDestroyed(destroyRef))\r\n .subscribe(e => result.next(e as GlobalEventHandlersEventMap[EventName]));\r\n });\r\n });\r\n return result.asObservable().pipe(takeUntilDestroyed(destroyRef));\r\n}\r\n\r\n/**\r\n * Creates a Signal that emits the latest event of the specified type from the given DOM element.\r\n *\r\n * ⚠️ Cannot be used to cancel or call preventDefault on the event, as the event is emitted after the event handler phase.\r\n * @param element The target DOM element or ElementRef. Either can be provided directly or via a Signal.\r\n * @param eventName The name of the event to listen for.\r\n * @param injector Optional injector to use for lifecycle management. If not provided, the current injector is used.\r\n * @returns A Signal that emits the latest event of the specified type or null if no event has occurred.\r\n */\r\nexport function domEventSignal<EventName extends keyof GlobalEventHandlersEventMap>(\r\n element: ElementSingle,\r\n eventName: EventName,\r\n injector?: Injector\r\n): Signal<GlobalEventHandlersEventMap[EventName] | null> {\r\n const inj = injector ?? inject(Injector);\r\n const res = runInInjectionContext(inj, () => {\r\n const sig = signal<GlobalEventHandlersEventMap[EventName] | null>(null);\r\n domEventObservable(element, eventName, inj).subscribe(value => {\r\n sig.set(value as GlobalEventHandlersEventMap[EventName]);\r\n });\r\n return sig;\r\n });\r\n return res;\r\n}\r\n\r\n/**\r\n * Attaches an event handler to a DOM element that is automatically removed when the injector is destroyed.\r\n * @param element The target DOM element or ElementRef. Either can be provided directly or via a Signal.\r\n * @param eventName The name of the event to listen for.\r\n * @param handler The function to handle the event.\r\n * @param injector Optional injector to use for lifecycle management. If not provided, the current injector is used.\r\n */\r\nexport function domEventHandler<EventName extends keyof GlobalEventHandlersEventMap>(\r\n element: ElementSingle,\r\n eventName: EventName,\r\n handler: (event: GlobalEventHandlersEventMap[EventName]) => void,\r\n injector?: Injector\r\n): void {\r\n const inj = injector ?? inject(Injector);\r\n const destroyRef = inj.get(DestroyRef);\r\n runInInjectionContext(inj, () => {\r\n const destroyed = signal(false);\r\n destroyRef.onDestroy(() => {\r\n destroyed.set(true);\r\n });\r\n const elSig = computed(() => (destroyed() ? null : getElement(element)));\r\n const elSigWithPrev = signalWithPrevious(elSig);\r\n\r\n effect(() => {\r\n const element = elSigWithPrev();\r\n const previousElement = element.previous;\r\n if (previousElement) {\r\n previousElement.removeEventListener(\r\n eventName,\r\n handler as EventListenerOrEventListenerObject\r\n );\r\n }\r\n if (element.current) {\r\n element.current.addEventListener(eventName, handler as EventListenerOrEventListenerObject);\r\n }\r\n });\r\n });\r\n}\r\n","import { inject } from '@angular/core';\r\n\r\nimport { NGN_CONFIG } from './config';\r\n\r\nimport type { CustomColor, CustomKind } from '@ngneers/controls-custom-types';\r\n\r\n/**\r\n * Retrieves the available kinds for a given control from the theme configuration.\r\n * Does **not** return custom kinds defined by the user in `NgnCustomTypes`.\r\n * @param controlName The name of the control to get kinds for.\r\n * @returns A tuple of available kinds for the specified control.\r\n * @todo make reactive (signal)\r\n */\r\nexport function injectThemeControlKinds<T extends string>(controlName: T): CustomKind<T>[] {\r\n const val = inject(NGN_CONFIG).theme.preset?.meta.kinds?.[controlName] ?? [];\r\n return val as CustomKind<T>[];\r\n}\r\n\r\n/**\r\n * Retrieves the available colors from the theme configuration.\r\n * Does **not** return custom colors defined by the user in `NgnCustomTypes`.\r\n * @returns A tuple of available colors.\r\n * @todo make reactive (signal)\r\n */\r\nexport function injectThemeColors(controlName?: string): CustomColor[] {\r\n const theme = inject(NGN_CONFIG).theme;\r\n if (controlName) {\r\n const classNames = theme.preset?.parts.find(x => x.scope === controlName)?.controlTemplate\r\n ?.classNames;\r\n const hasColor = classNames?.includes('color-*');\r\n if (!hasColor) {\r\n return [];\r\n }\r\n }\r\n const val = theme.preset?.meta.colors ?? [];\r\n return val as CustomColor[];\r\n}\r\n","import { isPlatformBrowser } from '@angular/common';\r\nimport {\r\n computed,\r\n DOCUMENT,\r\n inject,\r\n Injectable,\r\n PLATFORM_ID,\r\n type Signal,\r\n signal,\r\n} from '@angular/core';\r\n\r\nimport { elementSizeSignal, type Size } from './dom';\r\n\r\nexport type DeviceType = 'mobile' | 'desktop' | 'tablet';\r\n\r\n@Injectable()\r\nexport class Platform {\r\n private readonly _deviceType = signal<DeviceType>('desktop');\r\n\r\n public readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n\r\n public readonly windowSize: Signal<Size> = this.isBrowser\r\n ? elementSizeSignal(document.body)\r\n : signal({ width: 0, height: 0 });\r\n public readonly width = computed(() => this.windowSize().width);\r\n public readonly height = computed(() => this.windowSize().height);\r\n\r\n constructor() {\r\n const doc = inject(DOCUMENT);\r\n const win = doc.defaultView;\r\n if (!win) {\r\n return;\r\n }\r\n if (typeof win.matchMedia !== 'function') {\r\n return;\r\n }\r\n const hasMouse = win.matchMedia('(any-hover: hover)').matches;\r\n if (hasMouse) {\r\n this._deviceType.set('desktop');\r\n return;\r\n }\r\n const isSmallScreen =\r\n window.matchMedia('(max-width: 768px)').matches ||\r\n window.matchMedia('(max-height: 768px)').matches;\r\n if (isSmallScreen) {\r\n this._deviceType.set('mobile');\r\n } else {\r\n this._deviceType.set('tablet');\r\n }\r\n }\r\n\r\n public readonly isTouchDevice = computed(() => {\r\n return this._deviceType() === 'mobile' || this._deviceType() === 'tablet';\r\n });\r\n}\r\n","import { DestroyRef, inject, Injector } from '@angular/core';\r\nimport {\r\n type Alignment,\r\n autoUpdate,\r\n computePosition,\r\n type ComputePositionReturn,\r\n flip,\r\n type Middleware,\r\n offset,\r\n type Placement,\r\n type ReferenceElement,\r\n shift,\r\n type Side,\r\n size,\r\n type Strategy,\r\n} from '@floating-ui/dom';\r\n\r\nexport type Point = {\r\n x: number;\r\n y: number;\r\n};\r\n\r\nexport type Anchor = HTMLElement | Point;\r\n\r\nexport type PositioningSizeConstraints = {\r\n /**\r\n * The minimum width of the floating element. When a string is provided, it is used as the CSS min-width value.\r\n */\r\n minWidth?: string;\r\n /**\r\n * The width of the floating element. When a number is provided, it is relative to the width of the reference element.\r\n * When a string is provided, it is used as the CSS width value.\r\n */\r\n width?: number | string;\r\n /**\r\n * The maximum width of the floating element. When a number is provided, it is relative to the width of the reference element.\r\n * When a string is provided, it is used as the CSS max-width value.\r\n */\r\n maxWidth?: number | string;\r\n /**\r\n * The height of the floating element. When a string is provided, it is used as the CSS height value.\r\n */\r\n height?: string;\r\n /**\r\n * The maximum height of the floating element. When a string is provided, it is used as the CSS max-height value.\r\n */\r\n maxHeight?: string;\r\n /**\r\n * The minimum height of the floating element. When a string is provided, it is used as the CSS min-height value.\r\n */\r\n minHeight?: string;\r\n};\r\n\r\nexport type PositioningOptions = {\r\n injector?: Injector;\r\n placement?: Placement;\r\n flip?: boolean;\r\n resize?: boolean;\r\n shift?: boolean;\r\n offset?: number;\r\n stopped?: boolean;\r\n sizeConstraints?: PositioningSizeConstraints;\r\n strategy?: Strategy;\r\n middleware?: Middleware[];\r\n disableSettingStyles?: boolean;\r\n hasShrinkableContent?: boolean;\r\n onPositionChange?: (position: ComputePositionReturn) => void;\r\n};\r\n\r\nexport type AutoPositioningHandle = {\r\n stop: () => void;\r\n start: () => void;\r\n isRunning: () => boolean;\r\n};\r\n\r\nfunction filterNonNullishKeys<T extends Record<string, unknown>>(obj: T): Partial<T> {\r\n return Object.fromEntries(Object.entries(obj).filter(([, value]) => value != null)) as Partial<T>;\r\n}\r\n\r\nfunction mergeWithDefaults(options: PositioningOptions): PositioningOptions {\r\n return {\r\n placement: 'bottom',\r\n flip: true,\r\n resize: true,\r\n shift: true,\r\n offset: 4,\r\n stopped: false,\r\n ...filterNonNullishKeys(options),\r\n };\r\n}\r\n\r\nexport function positionElement(\r\n anchor: Anchor,\r\n floatingEl: HTMLElement,\r\n options: PositioningOptions = {}\r\n) {\r\n options = mergeWithDefaults(options);\r\n\r\n const referenceElement = toReferenceElement(anchor);\r\n\r\n const flipMiddleware = options.flip\r\n ? flip(options.shift ? { crossAxis: 'alignment', fallbackAxisSideDirection: 'end' } : undefined)\r\n : undefined;\r\n const shiftMiddleware = options.shift ? shift() : undefined;\r\n\r\n if (options.sizeConstraints) {\r\n if (options.sizeConstraints.width || options.sizeConstraints.maxWidth) {\r\n const refWidth = referenceElement.getBoundingClientRect().width;\r\n if (options.sizeConstraints.width) {\r\n if (typeof options.sizeConstraints.width === 'string') {\r\n floatingEl.style.width = options.sizeConstraints.width;\r\n } else {\r\n const widthConstraints = options.sizeConstraints.width * refWidth;\r\n floatingEl.style.width = `min(100%, ${widthConstraints}px)`;\r\n }\r\n }\r\n if (options.sizeConstraints.maxWidth) {\r\n if (typeof options.sizeConstraints.maxWidth === 'string') {\r\n floatingEl.style.maxWidth = options.sizeConstraints.maxWidth;\r\n } else {\r\n const maxWidthConstraints = options.sizeConstraints.maxWidth * refWidth;\r\n floatingEl.style.maxWidth = `min(100%, ${maxWidthConstraints}px)`;\r\n }\r\n }\r\n }\r\n if (options.sizeConstraints.height || options.sizeConstraints.maxHeight) {\r\n if (options.sizeConstraints.height) {\r\n floatingEl.style.height = options.sizeConstraints.height;\r\n }\r\n if (options.sizeConstraints.maxHeight) {\r\n floatingEl.style.maxHeight = options.sizeConstraints.maxHeight;\r\n }\r\n }\r\n if (options.sizeConstraints.minWidth) {\r\n floatingEl.style.minWidth = options.sizeConstraints.minWidth;\r\n }\r\n }\r\n\r\n computePosition(referenceElement, floatingEl, {\r\n placement: options.placement,\r\n strategy: options.strategy,\r\n middleware: [\r\n options.offset ? offset(options.offset) : undefined,\r\n options.resize\r\n ? size({\r\n apply({ availableHeight }) {\r\n const maxHeightConstraint = options.sizeConstraints?.maxHeight;\r\n const maxHeightInPx = maxHeightConstraint?.replace(/px$/, '');\r\n const maxHeight = maxHeightInPx\r\n ? Math.min(availableHeight, parseInt(maxHeightInPx))\r\n : availableHeight;\r\n if (options.hasShrinkableContent) {\r\n Object.assign(floatingEl.style, {\r\n height: `${maxHeight - 1}px`,\r\n });\r\n }\r\n },\r\n })\r\n : undefined,\r\n ...(options.placement?.includes('-')\r\n ? [flipMiddleware, shiftMiddleware]\r\n : [shiftMiddleware, flipMiddleware]),\r\n ...(options.middleware || []),\r\n ].filter(Boolean),\r\n }).then(pos => {\r\n if (!options.disableSettingStyles) {\r\n const flipped = pos.middlewareData.flip?.index;\r\n const flippedToLREnd =\r\n flipped &&\r\n (pos.placement.startsWith('left-') || pos.placement.startsWith('right-')) &&\r\n pos.placement.endsWith('-end');\r\n const flippedToTop = flipped && pos.placement.startsWith('top');\r\n\r\n Object.assign(floatingEl.style, {\r\n left: `${pos.x}px`,\r\n top: `${pos.y}px`,\r\n justifyContent: flippedToLREnd || flippedToTop ? 'flex-end' : 'flex-start',\r\n });\r\n }\r\n options.onPositionChange?.(pos);\r\n });\r\n}\r\n\r\nfunction toReferenceElement(anchor: Anchor): ReferenceElement {\r\n const referenceElement: ReferenceElement =\r\n anchor instanceof HTMLElement\r\n ? anchor\r\n : {\r\n getBoundingClientRect: () => ({\r\n x: anchor.x,\r\n y: anchor.y,\r\n width: 1,\r\n height: 1,\r\n top: anchor.y,\r\n right: anchor.x + 1,\r\n bottom: anchor.y + 1,\r\n left: anchor.x,\r\n }),\r\n };\r\n return referenceElement;\r\n}\r\n\r\nexport function autoPositionElement(\r\n anchor: Anchor,\r\n floatingEl: HTMLElement,\r\n options: PositioningOptions = {}\r\n): AutoPositioningHandle {\r\n options = mergeWithDefaults(options);\r\n\r\n let cleanup: (() => void) | undefined;\r\n const destroyRef = options.injector?.get(DestroyRef) ?? inject(DestroyRef);\r\n\r\n function startAutoUpdate() {\r\n cleanup = autoUpdate(toReferenceElement(anchor), floatingEl, () => {\r\n positionElement(anchor, floatingEl, options);\r\n });\r\n return cleanup;\r\n }\r\n\r\n destroyRef.onDestroy(() => {\r\n cleanup?.();\r\n cleanup = undefined;\r\n });\r\n return {\r\n start: () => {\r\n cleanup?.();\r\n startAutoUpdate();\r\n },\r\n stop: () => {\r\n cleanup?.();\r\n cleanup = undefined;\r\n },\r\n isRunning: () => !!cleanup,\r\n };\r\n}\r\n\r\nexport function splitPlacement(placement: Placement): [Side, Alignment | undefined] {\r\n return placement.split('-') as [Side, Alignment | undefined];\r\n}\r\n","import {\r\n DOCUMENT,\r\n inject,\r\n Injectable,\r\n Injector,\r\n type OnDestroy,\r\n signal,\r\n untracked,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\r\nimport { Logger } from '@ngneers/controls/utils';\r\nimport {\r\n applyGlobalStyles,\r\n applyTheme,\r\n type ControlName,\r\n type ControlTemplate,\r\n getClassName,\r\n type Theme,\r\n type ThemeClasses,\r\n type ThemeTemplate,\r\n} from '@ngneers/controls-themes';\r\nimport { globalStyles } from '@ngneers/controls-themes/base/global';\r\nimport { skip } from 'rxjs';\r\n\r\nimport { NGN_CONFIG, type NgnConfig } from './config';\r\n\r\nexport type AppliedThemeClassCfg<T extends ControlName> =\r\n | keyof ThemeClasses<ThemeTemplate[T]>\r\n | Partial<Record<keyof ThemeClasses<ThemeTemplate[T]>, boolean | (() => boolean)>>;\r\n\r\nexport type ControlTemplateInfo<T extends ControlTemplate<string, string[]>> = {\r\n scope: string;\r\n class: (className: T['classNames'][number]) => string;\r\n classes: (classes: {\r\n [K in T['classNames'][number]]?: boolean;\r\n }) => string;\r\n};\r\n\r\nexport function themeTemplateToTemplateInfo<T extends ControlTemplate<string, string[]>>(\r\n config: NgnConfig,\r\n template: T,\r\n options?: { unstyled?: () => boolean }\r\n): ControlTemplateInfo<T> {\r\n return {\r\n scope: template.scope,\r\n class: (className: T['classNames'][number]) =>\r\n getClassName(config.theme.namePrefix, template.scope, className, options?.unstyled?.()),\r\n classes: (classes: {\r\n [K in T['classNames'][number]]?: boolean;\r\n }): string => {\r\n let result = '';\r\n for (const className in classes) {\r\n if ((classes as any)[className]) {\r\n if (result) result += ' ';\r\n result += getClassName(\r\n config.theme.namePrefix,\r\n template.scope,\r\n className,\r\n options?.unstyled?.()\r\n );\r\n }\r\n }\r\n return result;\r\n },\r\n };\r\n}\r\n\r\nexport function injectThemeTemplate<T extends ControlTemplate<string, string[]>>(\r\n template: T,\r\n options?: { injector?: Injector; unstyled?: () => boolean }\r\n): ControlTemplateInfo<T> {\r\n const config = options?.injector?.get(NGN_CONFIG) ?? inject(NGN_CONFIG);\r\n const themeService = options?.injector?.get(ThemeService) ?? inject(ThemeService);\r\n themeService.loadScope(template.scope);\r\n return themeTemplateToTemplateInfo(config, template, { unstyled: options?.unstyled });\r\n}\r\n\r\nexport function injectTheme<T extends ControlName>(\r\n controlName: T,\r\n options?: { injector?: Injector }\r\n): ControlTemplate<T, string[]> {\r\n const themeService = options?.injector?.get(ThemeService) ?? inject(ThemeService);\r\n const theme = themeService.activeTheme();\r\n if (!theme) {\r\n throw new Error(\r\n `No active theme is set. Cannot inject theme for control \"${controlName}\". Please provide a theme in the configuration or set lazyLoaded to true if you plan to load themes dynamically.`\r\n );\r\n }\r\n const template = theme.parts.find(part => part.scope === controlName)?.controlTemplate as\r\n | ControlTemplate<T, string[]>\r\n | undefined;\r\n if (!template) {\r\n throw new Error(\r\n `The active theme \"${theme.name}\" does not contain a template for control \"${controlName}\".`\r\n );\r\n }\r\n return template;\r\n}\r\n\r\nexport function getAppliedClasses<T extends ControlName>(\r\n klass: AppliedThemeClassCfg<T>,\r\n themeTemplateInfo: Omit<ControlTemplateInfo<ControlTemplate<T, string[]>>, 'class' | 'classes'>\r\n): Array<{ class: string; name: string }> {\r\n function suffixes() {\r\n if (typeof klass === 'string') {\r\n return [klass];\r\n } else if (typeof klass === 'object' && klass !== null) {\r\n return Object.entries(klass)\r\n .filter(([_, value]) => (typeof value === 'function' ? value() : value))\r\n .map(([key, _]) => key);\r\n }\r\n return [];\r\n }\r\n const classes = suffixes().map(suffix => ({\r\n class: (themeTemplateInfo as ControlTemplateInfo<ControlTemplate<T, string[]>>).class(suffix),\r\n name: suffix,\r\n }));\r\n return classes;\r\n}\r\n\r\n@Injectable()\r\nexport class ThemeService implements OnDestroy {\r\n private readonly _config = inject(NGN_CONFIG);\r\n private readonly _loadedScopes = new Set<string>();\r\n private readonly _document = inject(DOCUMENT);\r\n\r\n public readonly activeTheme = signal(this._config.theme?.preset);\r\n\r\n constructor() {\r\n if (!this._config.theme?.preset && !this._config.theme?.lazyLoaded) {\r\n console.warn(\r\n 'No active theme found. Please provide a theme in the configuration or set lazyLoaded to true if you plan to load themes dynamically.'\r\n );\r\n }\r\n\r\n if (this._config.disableAnimations) {\r\n const style = this._document.createElement('style');\r\n style.setAttribute('ngn-style', '');\r\n // we set the durations instead of setting animation/transition to none,\r\n // so that the animation starts/ends are still applied & the events are still fired\r\n style.innerHTML = `.ngn-control, .ngn-control * {\r\n animation-duration: 0s !important;\r\n transition-duration: 0s !important;\r\n }`;\r\n this._document.head.appendChild(style);\r\n Logger.debug('Animations have been disabled via configuration.');\r\n }\r\n\r\n toObservable(this.activeTheme)\r\n .pipe(takeUntilDestroyed(), skip(1))\r\n .subscribe(this.onThemeChange.bind(this));\r\n }\r\n\r\n public loadScope(scope: string): void {\r\n if (this._loadedScopes.has(scope)) {\r\n Logger.debug(`Theme scope \"${scope}\" is already loaded.`);\r\n return;\r\n }\r\n\r\n const activeTheme = untracked(() => this.activeTheme());\r\n if (!activeTheme) {\r\n Logger.debug(\r\n `No active theme set. Cannot load theme scope \"${scope}\". Scope will be loaded when the theme is set.`\r\n );\r\n return;\r\n } else {\r\n Logger.debug(`Loading theme scope \"${scope}\" for active theme \"${activeTheme.name}\".`);\r\n this.applyTheme(activeTheme, [scope]);\r\n }\r\n\r\n this._loadedScopes.add(scope);\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n Logger.debug('ThemeService is being destroyed. Unloading all theme scopes...');\r\n this.unloadAllScopes();\r\n this._loadedScopes.clear();\r\n }\r\n\r\n private onThemeChange(newTheme: Theme | null): void {\r\n if (!newTheme) {\r\n Logger.warn('The active theme has been set to null.');\r\n this.unloadAllScopes();\r\n return;\r\n }\r\n\r\n Logger.debug(`Active theme changed to \"${newTheme.name}\". Reloading scopes...`);\r\n this._loadedScopes.forEach(scope => {\r\n Logger.debug(`Reloading theme scope \"${scope}\" for active theme \"${newTheme.name}\".`);\r\n this.applyTheme(newTheme, [scope]);\r\n });\r\n }\r\n\r\n private unloadAllScopes(): void {\r\n Logger.warn('Unloading all theme scopes is not implemented yet. This is a placeholder method.');\r\n }\r\n\r\n private applyTheme(theme: Theme, scopes: string[]): void {\r\n applyTheme(theme, scopes, {\r\n document: this._document,\r\n layer: this._config.theme.cssLayer ?? undefined,\r\n styleScope: this._config.theme.styleScope ?? undefined,\r\n namePrefix: this._config.theme.namePrefix,\r\n });\r\n applyGlobalStyles(globalStyles, {\r\n document: this._document,\r\n layer: this._config.theme.cssLayer ?? undefined,\r\n styleScope: this._config.theme.styleScope ?? undefined,\r\n namePrefix: this._config.theme.namePrefix,\r\n });\r\n }\r\n}\r\n","import { I18n } from '@ngneers/controls/i18n';\r\nimport { NgnGlobal } from '@ngneers/controls/utils-ng';\r\n\r\nimport { type NgnConfigInit, provideNgnConfig } from './config';\r\nimport { Platform } from './platform';\r\nimport { ThemeService } from './theme-service';\r\n\r\nimport type { Provider } from '@angular/core';\r\n\r\nexport type NgnFeature = {\r\n providers: Provider[];\r\n};\r\n\r\nexport function provideNgnControls(config?: NgnConfigInit, ...features: NgnFeature[]): Provider[] {\r\n return [\r\n NgnGlobal,\r\n ThemeService,\r\n I18n,\r\n Platform,\r\n provideNgnConfig(config),\r\n ...features.map(f => f.providers).flat(),\r\n ];\r\n}\r\n","import { Directive, input } from '@angular/core';\r\n\r\n@Directive({\r\n selector: 'ng-template[ngnTemplate]',\r\n})\r\nexport class NgnTemplate<T> {\r\n public readonly ngnTemplate = input.required<T>();\r\n\r\n public static ngTemplateContextGuard<T>(dir: NgnTemplate<T>, ctx: unknown): ctx is T {\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * A noop with return type T.\r\n * This function is used to define typed properties to use in a template.\r\n */\r\nexport function templateTypesFn<T extends Record<string, Record<string, any>>>() {\r\n return {} as T & { $implicit: { [K in keyof T]: Partial<T[K]> } };\r\n}\r\n\r\n/**\r\n * A noop with return type `{ $implicit: Implicit } & Named`.\r\n * This function is used to define a typed property to use in a template.\r\n */\r\nexport function templateTypeFn<Implicit, Named extends Record<string, any> = object>() {\r\n return {} as ([Implicit] extends [undefined] ? unknown : { $implicit: Implicit }) & Named;\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-api-ng.mjs","sources":["../../src/api/ng/config/config.ts","../../src/api/ng/closable.ts","../../src/api/ng/components.ts","../../src/api/ng/dom.ts","../../src/api/ng/kinds.ts","../../src/api/ng/platform.ts","../../src/api/ng/positioning.ts","../../src/api/ng/theme-service.ts","../../src/api/ng/provider.ts","../../src/api/ng/template.ts","../../src/api/ng/ngneers-controls-api-ng.ts"],"sourcesContent":["import { inject, InjectionToken, provideAppInitializer, type Provider } from '@angular/core';\r\nimport { registerCustomLanguages, type Translations } from '@ngneers/controls/i18n';\r\nimport { type DeepPartial, Logger, type LogLevel } from '@ngneers/controls/utils';\r\n\r\nimport type { TooltipOptions } from './tooltip';\r\nimport type { NgnStateStorage } from '@ngneers/controls/utils-ng';\r\nimport type { StyleScope, Theme } from '@ngneers/controls-themes';\r\n\r\nexport const NGN_CONFIG = new InjectionToken<NgnConfig>('NGN_CONFIG');\r\n\r\nexport type NgnConfig = {\r\n readonly logLevel: LogLevel;\r\n readonly customTranslations?: Record<string, () => Promise<Translations>>;\r\n readonly disableAnimations: boolean;\r\n readonly theme: {\r\n readonly preset: Theme | null;\r\n readonly lazyLoaded: boolean;\r\n readonly styleScope: StyleScope | null;\r\n readonly cssLayer: string | null;\r\n readonly namePrefix: string;\r\n };\r\n readonly defaults: {\r\n readonly stateStorage: NgnStateStorage;\r\n readonly splitter: {\r\n readonly stateStorage: NgnStateStorage;\r\n };\r\n readonly tooltip: TooltipOptions;\r\n };\r\n};\r\n\r\nexport type NgnConfigInit = DeepPartial<\r\n NgnConfig,\r\n 'theme.preset.*' | 'theme.styleScope.*' | 'customTranslations.*'\r\n>;\r\n\r\nexport const defaultNgnConfig: NgnConfig = {\r\n logLevel: 'info',\r\n disableAnimations: false,\r\n theme: {\r\n preset: null,\r\n lazyLoaded: false,\r\n styleScope: null,\r\n cssLayer: 'ngn-controls',\r\n namePrefix: 'ngn-',\r\n },\r\n defaults: {\r\n stateStorage: 'session',\r\n splitter: {\r\n stateStorage: 'session',\r\n },\r\n tooltip: {\r\n placement: 'bottom',\r\n offset: 4,\r\n showDelay: '0.5s',\r\n hideDelay: '0.1s',\r\n showArrow: true,\r\n showOnHover: true,\r\n showOnFocus: true,\r\n hideOnTooltipHover: false,\r\n hideOnClick: true,\r\n autoAriaMode: 'description',\r\n },\r\n },\r\n};\r\n\r\nexport function provideNgnConfig(config?: NgnConfigInit): Provider {\r\n return [\r\n {\r\n provide: NGN_CONFIG,\r\n useValue: {\r\n logLevel: config?.logLevel ?? defaultNgnConfig.logLevel,\r\n customTranslations: config?.customTranslations,\r\n disableAnimations: config?.disableAnimations ?? defaultNgnConfig.disableAnimations,\r\n theme: {\r\n preset: config?.theme?.preset ?? defaultNgnConfig.theme.preset,\r\n lazyLoaded: config?.theme?.lazyLoaded ?? defaultNgnConfig.theme.lazyLoaded,\r\n styleScope: config?.theme?.styleScope ?? defaultNgnConfig.theme.styleScope,\r\n cssLayer:\r\n config?.theme?.cssLayer === undefined\r\n ? defaultNgnConfig.theme.cssLayer\r\n : config?.theme?.cssLayer,\r\n namePrefix: config?.theme?.namePrefix ?? defaultNgnConfig.theme.namePrefix,\r\n },\r\n defaults: {\r\n stateStorage: config?.defaults?.stateStorage ?? defaultNgnConfig.defaults.stateStorage,\r\n splitter: {\r\n stateStorage:\r\n config?.defaults?.splitter?.stateStorage ??\r\n config?.defaults?.stateStorage ??\r\n defaultNgnConfig.defaults.splitter.stateStorage,\r\n },\r\n tooltip: {\r\n placement:\r\n config?.defaults?.tooltip?.placement ?? defaultNgnConfig.defaults.tooltip.placement,\r\n offset: config?.defaults?.tooltip?.offset ?? defaultNgnConfig.defaults.tooltip.offset,\r\n showDelay:\r\n config?.defaults?.tooltip?.showDelay ?? defaultNgnConfig.defaults.tooltip.showDelay,\r\n hideDelay:\r\n config?.defaults?.tooltip?.hideDelay ?? defaultNgnConfig.defaults.tooltip.hideDelay,\r\n showArrow:\r\n config?.defaults?.tooltip?.showArrow ?? defaultNgnConfig.defaults.tooltip.showArrow,\r\n showOnHover:\r\n config?.defaults?.tooltip?.showOnHover ??\r\n defaultNgnConfig.defaults.tooltip.showOnHover,\r\n showOnFocus:\r\n config?.defaults?.tooltip?.showOnFocus ??\r\n defaultNgnConfig.defaults.tooltip.showOnFocus,\r\n hideOnTooltipHover:\r\n config?.defaults?.tooltip?.hideOnTooltipHover ??\r\n defaultNgnConfig.defaults.tooltip.hideOnTooltipHover,\r\n hideOnClick:\r\n config?.defaults?.tooltip?.hideOnClick ??\r\n defaultNgnConfig.defaults.tooltip.hideOnClick,\r\n autoAriaMode:\r\n config?.defaults?.tooltip?.autoAriaMode ??\r\n defaultNgnConfig.defaults.tooltip.autoAriaMode,\r\n },\r\n },\r\n } satisfies NgnConfig,\r\n },\r\n provideAppInitializer(() => {\r\n const config = inject(NGN_CONFIG);\r\n if (config?.customTranslations) {\r\n registerCustomLanguages(config.customTranslations);\r\n }\r\n Logger.logLevel = config.logLevel ?? Logger.logLevel;\r\n }),\r\n ];\r\n}\r\n","import { type ModelSignal, OutputEmitterRef } from '@angular/core';\r\n\r\nexport type PopoverCloseBy = 'any' | 'none';\r\nexport type CloseBy = PopoverCloseBy | 'escape';\r\n\r\nexport function toPopoverCloseBy(closeBy: CloseBy): 'auto' | 'manual' {\r\n switch (closeBy) {\r\n case 'any':\r\n return 'auto';\r\n case 'escape':\r\n case 'none':\r\n return 'manual';\r\n }\r\n}\r\n\r\nexport function toModalCloseBy(closeBy: CloseBy): 'any' | 'closerequest' | 'none' {\r\n switch (closeBy) {\r\n case 'any':\r\n return 'any';\r\n case 'escape':\r\n return 'closerequest';\r\n case 'none':\r\n return 'none';\r\n }\r\n}\r\n\r\nexport interface Openable {\r\n show(): void;\r\n hide(): void;\r\n toggle(): void;\r\n open: ModelSignal<boolean>;\r\n closed: OutputEmitterRef<void>;\r\n}\r\n","import { ComponentRef, type InputSignal, type InputSignalWithTransform } from '@angular/core';\r\n\r\ntype ComponentFromRef<T extends ComponentRef<any>> = T extends ComponentRef<infer C> ? C : never;\r\ntype InputsFromComponent<T> = {\r\n [K in keyof T]: T[K] extends InputSignal<infer V>\r\n ? V\r\n : T[K] extends InputSignalWithTransform<infer V, infer _>\r\n ? V\r\n : never;\r\n};\r\n\r\nexport function setComponentInput<\r\n T extends ComponentRef<C>,\r\n C,\r\n Input extends InputsFromComponent<ComponentFromRef<T>>,\r\n I extends keyof Input & string,\r\n>(componentRef: T, inputName: I, value: Input[I]): void {\r\n componentRef.setInput(inputName, value);\r\n}\r\n","import {\r\n afterRenderEffect,\r\n computed,\r\n DestroyRef,\r\n effect,\r\n ElementRef,\r\n inject,\r\n Injector,\r\n runInInjectionContext,\r\n signal,\r\n type Signal,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { deepCopy } from '@ngneers/controls/utils';\r\nimport { signalWithPrevious } from '@ngneers/controls/utils-ng';\r\nimport { fromEvent, Observable, Subject, Subscription } from 'rxjs';\r\n\r\nexport type Size = { width: number; height: number };\r\n\r\ntype ElementArray =\r\n | Signal<ReadonlyArray<HTMLElement | ElementRef<HTMLElement>>>\r\n | ReadonlyArray<HTMLElement | ElementRef<HTMLElement>>;\r\ntype ElementSingle =\r\n | Signal<HTMLElement | ElementRef<HTMLElement> | undefined>\r\n | HTMLElement\r\n | Document\r\n | ElementRef<HTMLElement>;\r\n\r\nfunction getElement(el: ElementSingle): HTMLElement | Document | undefined {\r\n const rawElement = typeof el === 'function' ? el() : el;\r\n const element = rawElement instanceof ElementRef ? rawElement.nativeElement : rawElement;\r\n return element;\r\n}\r\n\r\nexport function elementSizeSignal(element: ElementSingle, active?: Signal<boolean>): Signal<Size> {\r\n const val = elementsSizesSignalInt(element, active);\r\n return computed(() => val()[0] ?? { width: 0, height: 0 });\r\n}\r\n\r\nexport function elementsSizesSignal(\r\n element: ElementArray,\r\n active?: Signal<boolean>\r\n): Signal<readonly Size[]> {\r\n return elementsSizesSignalInt(element, active);\r\n}\r\n\r\nfunction elementsSizesSignalInt(\r\n element: ElementArray | ElementSingle,\r\n active?: Signal<boolean>\r\n): Signal<readonly Size[]> {\r\n const sizeSignal = signal<readonly Size[]>([], {\r\n equal: (a, b) => JSON.stringify(a) === JSON.stringify(b),\r\n });\r\n\r\n let elements: HTMLElement[];\r\n afterRenderEffect(() => {\r\n resizeObserver.disconnect();\r\n if (active && !active()) {\r\n return;\r\n }\r\n const rawElement = typeof element === 'function' ? element() : element;\r\n const arrayElement = Array.isArray(rawElement) ? rawElement : rawElement ? [rawElement] : [];\r\n elements = arrayElement.map(el => (el instanceof ElementRef ? el.nativeElement : el));\r\n\r\n if (!elements.length) {\r\n return;\r\n }\r\n sizeSignal.set(\r\n elements.map(el => {\r\n const rect = el.getBoundingClientRect();\r\n return {\r\n width: rect.width,\r\n height: rect.height,\r\n };\r\n })\r\n );\r\n elements.forEach(el => {\r\n resizeObserver.observe(el, { box: 'border-box' });\r\n });\r\n });\r\n const destroyRef = inject(DestroyRef);\r\n if (typeof ResizeObserver === 'undefined') {\r\n return sizeSignal; // ResizeObserver is not supported, return initial size\r\n }\r\n const resizeObserver = new ResizeObserver(entries => {\r\n entries.forEach(entry => {\r\n const index = elements.findIndex(el => el === entry.target);\r\n sizeSignal.update(s => {\r\n const copy = deepCopy(s);\r\n const borderBoxSize = entry.borderBoxSize[0];\r\n if (!borderBoxSize) {\r\n return s;\r\n }\r\n copy[index] = {\r\n width: borderBoxSize.inlineSize,\r\n height: borderBoxSize.blockSize,\r\n };\r\n return copy;\r\n });\r\n });\r\n });\r\n destroyRef.onDestroy(() => {\r\n resizeObserver.disconnect();\r\n });\r\n return sizeSignal;\r\n}\r\n\r\nconst ABORT_SIGNAL_SYMBOL = Symbol('AbortSignal');\r\nexport function abortSignalOnDestroy(options?: { injector?: Injector }): AbortSignal {\r\n const destroyRef = options?.injector?.get(DestroyRef) ?? inject(DestroyRef);\r\n if (ABORT_SIGNAL_SYMBOL in destroyRef) {\r\n return destroyRef[ABORT_SIGNAL_SYMBOL] as AbortSignal;\r\n }\r\n const abortController = new AbortController();\r\n destroyRef.onDestroy(() => {\r\n abortController.abort();\r\n });\r\n (destroyRef as any)[ABORT_SIGNAL_SYMBOL] = abortController.signal;\r\n return abortController.signal;\r\n}\r\n\r\n/**\r\n * Creates an Observable that emits the latest event of the specified type from the given DOM element.\r\n *\r\n * ⚠️ Cannot be used to cancel or call preventDefault on the event, as the event is emitted after the event handler phase.\r\n * @param element The target DOM element or ElementRef. Either can be provided directly or via a Signal.\r\n * @param eventName The name of the event to listen for.\r\n * @param injector Optional injector to use for lifecycle management. If not provided, the current injector is used.\r\n * @returns An Observable that emits the latest event of the specified type. Does not complete until the injector is destroyed.\r\n */\r\nexport function domEventObservable<EventName extends keyof GlobalEventHandlersEventMap>(\r\n element: ElementSingle,\r\n eventName: EventName,\r\n injector?: Injector\r\n): Observable<GlobalEventHandlersEventMap[EventName]> {\r\n const inj = injector ?? inject(Injector);\r\n\r\n const result = new Subject<GlobalEventHandlersEventMap[EventName]>();\r\n const destroyRef = inj.get(DestroyRef);\r\n\r\n let subscription: Subscription | undefined;\r\n runInInjectionContext(inj, () => {\r\n afterRenderEffect(() => {\r\n subscription?.unsubscribe();\r\n const el = getElement(element);\r\n if (!el) {\r\n return;\r\n }\r\n subscription = fromEvent(el, eventName)\r\n .pipe(takeUntilDestroyed(destroyRef))\r\n .subscribe(e => result.next(e as GlobalEventHandlersEventMap[EventName]));\r\n });\r\n });\r\n return result.asObservable().pipe(takeUntilDestroyed(destroyRef));\r\n}\r\n\r\n/**\r\n * Creates a Signal that emits the latest event of the specified type from the given DOM element.\r\n *\r\n * ⚠️ Cannot be used to cancel or call preventDefault on the event, as the event is emitted after the event handler phase.\r\n * @param element The target DOM element or ElementRef. Either can be provided directly or via a Signal.\r\n * @param eventName The name of the event to listen for.\r\n * @param injector Optional injector to use for lifecycle management. If not provided, the current injector is used.\r\n * @returns A Signal that emits the latest event of the specified type or null if no event has occurred.\r\n */\r\nexport function domEventSignal<EventName extends keyof GlobalEventHandlersEventMap>(\r\n element: ElementSingle,\r\n eventName: EventName,\r\n injector?: Injector\r\n): Signal<GlobalEventHandlersEventMap[EventName] | null> {\r\n const inj = injector ?? inject(Injector);\r\n const res = runInInjectionContext(inj, () => {\r\n const sig = signal<GlobalEventHandlersEventMap[EventName] | null>(null);\r\n domEventObservable(element, eventName, inj).subscribe(value => {\r\n sig.set(value as GlobalEventHandlersEventMap[EventName]);\r\n });\r\n return sig;\r\n });\r\n return res;\r\n}\r\n\r\n/**\r\n * Attaches an event handler to a DOM element that is automatically removed when the injector is destroyed.\r\n * @param element The target DOM element or ElementRef. Either can be provided directly or via a Signal.\r\n * @param eventName The name of the event to listen for.\r\n * @param handler The function to handle the event.\r\n * @param injector Optional injector to use for lifecycle management. If not provided, the current injector is used.\r\n */\r\nexport function domEventHandler<EventName extends keyof GlobalEventHandlersEventMap>(\r\n element: ElementSingle,\r\n eventName: EventName,\r\n handler: (event: GlobalEventHandlersEventMap[EventName]) => void,\r\n injector?: Injector\r\n): void {\r\n const inj = injector ?? inject(Injector);\r\n const destroyRef = inj.get(DestroyRef);\r\n runInInjectionContext(inj, () => {\r\n const destroyed = signal(false);\r\n destroyRef.onDestroy(() => {\r\n destroyed.set(true);\r\n });\r\n const elSig = computed(() => (destroyed() ? null : getElement(element)));\r\n const elSigWithPrev = signalWithPrevious(elSig);\r\n\r\n effect(() => {\r\n const element = elSigWithPrev();\r\n const previousElement = element.previous;\r\n if (previousElement) {\r\n previousElement.removeEventListener(\r\n eventName,\r\n handler as EventListenerOrEventListenerObject\r\n );\r\n }\r\n if (element.current) {\r\n element.current.addEventListener(eventName, handler as EventListenerOrEventListenerObject);\r\n }\r\n });\r\n });\r\n}\r\n","import { inject } from '@angular/core';\r\n\r\nimport { NGN_CONFIG } from './config';\r\n\r\nimport type { CustomColor, CustomKind } from '@ngneers/controls-custom-types';\r\n\r\n/**\r\n * Retrieves the available kinds for a given control from the theme configuration.\r\n * Does **not** return custom kinds defined by the user in `NgnCustomTypes`.\r\n * @param controlName The name of the control to get kinds for.\r\n * @returns A tuple of available kinds for the specified control.\r\n * @todo make reactive (signal)\r\n */\r\nexport function injectThemeControlKinds<T extends string>(controlName: T): CustomKind<T>[] {\r\n const val = inject(NGN_CONFIG).theme.preset?.meta.kinds?.[controlName] ?? [];\r\n return val as CustomKind<T>[];\r\n}\r\n\r\n/**\r\n * Retrieves the available colors from the theme configuration.\r\n * Does **not** return custom colors defined by the user in `NgnCustomTypes`.\r\n * @returns A tuple of available colors.\r\n * @todo make reactive (signal)\r\n */\r\nexport function injectThemeColors(controlName?: string): CustomColor[] {\r\n const theme = inject(NGN_CONFIG).theme;\r\n if (controlName) {\r\n const classNames = theme.preset?.parts.find(x => x.scope === controlName)?.controlTemplate\r\n ?.classNames;\r\n const hasColor = classNames?.includes('color-*');\r\n if (!hasColor) {\r\n return [];\r\n }\r\n }\r\n const val = theme.preset?.meta.colors ?? [];\r\n return val as CustomColor[];\r\n}\r\n","import { isPlatformBrowser } from '@angular/common';\r\nimport {\r\n computed,\r\n DOCUMENT,\r\n inject,\r\n Injectable,\r\n PLATFORM_ID,\r\n type Signal,\r\n signal,\r\n} from '@angular/core';\r\n\r\nimport { elementSizeSignal, type Size } from './dom';\r\n\r\nexport type DeviceType = 'mobile' | 'desktop' | 'tablet';\r\n\r\n@Injectable()\r\nexport class Platform {\r\n private readonly _deviceType = signal<DeviceType>('desktop');\r\n\r\n public readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n\r\n public readonly windowSize: Signal<Size> = this.isBrowser\r\n ? elementSizeSignal(document.body)\r\n : signal({ width: 0, height: 0 });\r\n public readonly width = computed(() => this.windowSize().width);\r\n public readonly height = computed(() => this.windowSize().height);\r\n\r\n constructor() {\r\n const doc = inject(DOCUMENT);\r\n const win = doc.defaultView;\r\n if (!win) {\r\n return;\r\n }\r\n if (typeof win.matchMedia !== 'function') {\r\n return;\r\n }\r\n const hasMouse = win.matchMedia('(any-hover: hover)').matches;\r\n if (hasMouse) {\r\n this._deviceType.set('desktop');\r\n return;\r\n }\r\n const isSmallScreen =\r\n window.matchMedia('(max-width: 768px)').matches ||\r\n window.matchMedia('(max-height: 768px)').matches;\r\n if (isSmallScreen) {\r\n this._deviceType.set('mobile');\r\n } else {\r\n this._deviceType.set('tablet');\r\n }\r\n }\r\n\r\n public readonly isTouchDevice = computed(() => {\r\n return this._deviceType() === 'mobile' || this._deviceType() === 'tablet';\r\n });\r\n}\r\n","import { DestroyRef, inject, Injector } from '@angular/core';\r\nimport {\r\n type Alignment,\r\n autoUpdate,\r\n computePosition,\r\n type ComputePositionReturn,\r\n flip,\r\n type Middleware,\r\n offset,\r\n type Placement,\r\n type ReferenceElement,\r\n shift,\r\n type Side,\r\n size,\r\n type Strategy,\r\n} from '@floating-ui/dom';\r\n\r\nexport type Point = {\r\n x: number;\r\n y: number;\r\n};\r\n\r\nexport type Anchor = HTMLElement | Point;\r\n\r\nexport type PositioningSizeConstraints = {\r\n /**\r\n * The minimum width of the floating element. When a string is provided, it is used as the CSS min-width value.\r\n */\r\n minWidth?: string;\r\n /**\r\n * The width of the floating element. When a number is provided, it is relative to the width of the reference element.\r\n * When a string is provided, it is used as the CSS width value.\r\n */\r\n width?: number | string;\r\n /**\r\n * The maximum width of the floating element. When a number is provided, it is relative to the width of the reference element.\r\n * When a string is provided, it is used as the CSS max-width value.\r\n */\r\n maxWidth?: number | string;\r\n /**\r\n * The height of the floating element. When a string is provided, it is used as the CSS height value.\r\n */\r\n height?: string;\r\n /**\r\n * The maximum height of the floating element. When a string is provided, it is used as the CSS max-height value.\r\n */\r\n maxHeight?: string;\r\n /**\r\n * The minimum height of the floating element. When a string is provided, it is used as the CSS min-height value.\r\n */\r\n minHeight?: string;\r\n};\r\n\r\nexport type PositioningOptions = {\r\n injector?: Injector;\r\n placement?: Placement;\r\n flip?: boolean;\r\n resize?: boolean;\r\n shift?: boolean;\r\n offset?: number;\r\n stopped?: boolean;\r\n sizeConstraints?: PositioningSizeConstraints;\r\n strategy?: Strategy;\r\n middleware?: Middleware[];\r\n disableSettingStyles?: boolean;\r\n hasShrinkableContent?: boolean;\r\n onPositionChange?: (position: ComputePositionReturn) => void;\r\n};\r\n\r\nexport type AutoPositioningHandle = {\r\n stop: () => void;\r\n start: () => void;\r\n isRunning: () => boolean;\r\n};\r\n\r\nfunction filterNonNullishKeys<T extends Record<string, unknown>>(obj: T): Partial<T> {\r\n return Object.fromEntries(Object.entries(obj).filter(([, value]) => value != null)) as Partial<T>;\r\n}\r\n\r\nfunction mergeWithDefaults(options: PositioningOptions): PositioningOptions {\r\n return {\r\n placement: 'bottom',\r\n flip: true,\r\n resize: true,\r\n shift: true,\r\n offset: 4,\r\n stopped: false,\r\n ...filterNonNullishKeys(options),\r\n };\r\n}\r\n\r\nexport function positionElement(\r\n anchor: Anchor,\r\n floatingEl: HTMLElement,\r\n options: PositioningOptions = {}\r\n) {\r\n options = mergeWithDefaults(options);\r\n\r\n const referenceElement = toReferenceElement(anchor);\r\n\r\n const flipMiddleware = options.flip\r\n ? flip(options.shift ? { crossAxis: 'alignment', fallbackAxisSideDirection: 'end' } : undefined)\r\n : undefined;\r\n const shiftMiddleware = options.shift ? shift() : undefined;\r\n\r\n if (options.sizeConstraints) {\r\n if (options.sizeConstraints.width || options.sizeConstraints.maxWidth) {\r\n const refWidth = referenceElement.getBoundingClientRect().width;\r\n if (options.sizeConstraints.width) {\r\n if (typeof options.sizeConstraints.width === 'string') {\r\n floatingEl.style.width = options.sizeConstraints.width;\r\n } else {\r\n const widthConstraints = options.sizeConstraints.width * refWidth;\r\n floatingEl.style.width = `min(100%, ${widthConstraints}px)`;\r\n }\r\n }\r\n if (options.sizeConstraints.maxWidth) {\r\n if (typeof options.sizeConstraints.maxWidth === 'string') {\r\n floatingEl.style.maxWidth = options.sizeConstraints.maxWidth;\r\n } else {\r\n const maxWidthConstraints = options.sizeConstraints.maxWidth * refWidth;\r\n floatingEl.style.maxWidth = `min(100%, ${maxWidthConstraints}px)`;\r\n }\r\n }\r\n }\r\n if (options.sizeConstraints.height || options.sizeConstraints.maxHeight) {\r\n if (options.sizeConstraints.height) {\r\n floatingEl.style.height = options.sizeConstraints.height;\r\n }\r\n if (options.sizeConstraints.maxHeight) {\r\n floatingEl.style.maxHeight = options.sizeConstraints.maxHeight;\r\n }\r\n }\r\n if (options.sizeConstraints.minWidth) {\r\n floatingEl.style.minWidth = options.sizeConstraints.minWidth;\r\n }\r\n }\r\n\r\n computePosition(referenceElement, floatingEl, {\r\n placement: options.placement,\r\n strategy: options.strategy,\r\n middleware: [\r\n options.offset ? offset(options.offset) : undefined,\r\n options.resize\r\n ? size({\r\n apply({ availableHeight }) {\r\n const maxHeightConstraint = options.sizeConstraints?.maxHeight;\r\n const maxHeightInPx = maxHeightConstraint?.replace(/px$/, '');\r\n const maxHeight = maxHeightInPx\r\n ? Math.min(availableHeight, parseInt(maxHeightInPx))\r\n : availableHeight;\r\n if (options.hasShrinkableContent) {\r\n Object.assign(floatingEl.style, {\r\n height: `${maxHeight - 1}px`,\r\n });\r\n }\r\n },\r\n })\r\n : undefined,\r\n ...(options.placement?.includes('-')\r\n ? [flipMiddleware, shiftMiddleware]\r\n : [shiftMiddleware, flipMiddleware]),\r\n ...(options.middleware || []),\r\n ].filter(Boolean),\r\n }).then(pos => {\r\n if (!options.disableSettingStyles) {\r\n const flipped = pos.middlewareData.flip?.index;\r\n const flippedToLREnd =\r\n flipped &&\r\n (pos.placement.startsWith('left-') || pos.placement.startsWith('right-')) &&\r\n pos.placement.endsWith('-end');\r\n const flippedToTop = flipped && pos.placement.startsWith('top');\r\n\r\n Object.assign(floatingEl.style, {\r\n left: `${pos.x}px`,\r\n top: `${pos.y}px`,\r\n justifyContent: flippedToLREnd || flippedToTop ? 'flex-end' : 'flex-start',\r\n });\r\n }\r\n options.onPositionChange?.(pos);\r\n });\r\n}\r\n\r\nfunction toReferenceElement(anchor: Anchor): ReferenceElement {\r\n const referenceElement: ReferenceElement =\r\n anchor instanceof HTMLElement\r\n ? anchor\r\n : {\r\n getBoundingClientRect: () => ({\r\n x: anchor.x,\r\n y: anchor.y,\r\n width: 1,\r\n height: 1,\r\n top: anchor.y,\r\n right: anchor.x + 1,\r\n bottom: anchor.y + 1,\r\n left: anchor.x,\r\n }),\r\n };\r\n return referenceElement;\r\n}\r\n\r\nexport function autoPositionElement(\r\n anchor: Anchor,\r\n floatingEl: HTMLElement,\r\n options: PositioningOptions = {}\r\n): AutoPositioningHandle {\r\n options = mergeWithDefaults(options);\r\n\r\n let cleanup: (() => void) | undefined;\r\n const destroyRef = options.injector?.get(DestroyRef) ?? inject(DestroyRef);\r\n\r\n function startAutoUpdate() {\r\n cleanup = autoUpdate(toReferenceElement(anchor), floatingEl, () => {\r\n positionElement(anchor, floatingEl, options);\r\n });\r\n return cleanup;\r\n }\r\n\r\n destroyRef.onDestroy(() => {\r\n cleanup?.();\r\n cleanup = undefined;\r\n });\r\n return {\r\n start: () => {\r\n cleanup?.();\r\n startAutoUpdate();\r\n },\r\n stop: () => {\r\n cleanup?.();\r\n cleanup = undefined;\r\n },\r\n isRunning: () => !!cleanup,\r\n };\r\n}\r\n\r\nexport function splitPlacement(placement: Placement): [Side, Alignment | undefined] {\r\n return placement.split('-') as [Side, Alignment | undefined];\r\n}\r\n","import {\r\n DOCUMENT,\r\n inject,\r\n Injectable,\r\n Injector,\r\n type OnDestroy,\r\n signal,\r\n untracked,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\r\nimport { Logger } from '@ngneers/controls/utils';\r\nimport {\r\n applyGlobalStyles,\r\n applyTheme,\r\n type ControlName,\r\n type ControlTemplate,\r\n getClassName,\r\n type Theme,\r\n type ThemeClasses,\r\n type ThemeTemplate,\r\n} from '@ngneers/controls-themes';\r\nimport { globalStyles } from '@ngneers/controls-themes/base/global';\r\nimport { skip } from 'rxjs';\r\n\r\nimport { NGN_CONFIG, type NgnConfig } from './config';\r\n\r\nexport type AppliedThemeClassCfg<T extends ControlName> =\r\n | keyof ThemeClasses<ThemeTemplate[T]>\r\n | Partial<Record<keyof ThemeClasses<ThemeTemplate[T]>, boolean | (() => boolean)>>;\r\n\r\nexport type ControlTemplateInfo<T extends ControlTemplate<string, string[]>> = {\r\n scope: string;\r\n class: (className: T['classNames'][number]) => string;\r\n classes: (classes: {\r\n [K in T['classNames'][number]]?: boolean;\r\n }) => string;\r\n};\r\n\r\nexport function themeTemplateToTemplateInfo<T extends ControlTemplate<string, string[]>>(\r\n config: NgnConfig,\r\n template: T,\r\n options?: { unstyled?: () => boolean }\r\n): ControlTemplateInfo<T> {\r\n return {\r\n scope: template.scope,\r\n class: (className: T['classNames'][number]) =>\r\n getClassName(config.theme.namePrefix, template.scope, className, options?.unstyled?.()),\r\n classes: (classes: {\r\n [K in T['classNames'][number]]?: boolean;\r\n }): string => {\r\n let result = '';\r\n for (const className in classes) {\r\n if ((classes as any)[className]) {\r\n if (result) result += ' ';\r\n result += getClassName(\r\n config.theme.namePrefix,\r\n template.scope,\r\n className,\r\n options?.unstyled?.()\r\n );\r\n }\r\n }\r\n return result;\r\n },\r\n };\r\n}\r\n\r\nexport function injectThemeTemplate<T extends ControlTemplate<string, string[]>>(\r\n template: T,\r\n options?: { injector?: Injector; unstyled?: () => boolean }\r\n): ControlTemplateInfo<T> {\r\n const config = options?.injector?.get(NGN_CONFIG) ?? inject(NGN_CONFIG);\r\n const themeService = options?.injector?.get(ThemeService) ?? inject(ThemeService);\r\n themeService.loadScope(template.scope);\r\n return themeTemplateToTemplateInfo(config, template, { unstyled: options?.unstyled });\r\n}\r\n\r\nexport function injectTheme<T extends ControlName>(\r\n controlName: T,\r\n options?: { injector?: Injector }\r\n): ControlTemplate<T, string[]> {\r\n const themeService = options?.injector?.get(ThemeService) ?? inject(ThemeService);\r\n const theme = themeService.activeTheme();\r\n if (!theme) {\r\n throw new Error(\r\n `No active theme is set. Cannot inject theme for control \"${controlName}\". Please provide a theme in the configuration or set lazyLoaded to true if you plan to load themes dynamically.`\r\n );\r\n }\r\n const template = theme.parts.find(part => part.scope === controlName)?.controlTemplate as\r\n | ControlTemplate<T, string[]>\r\n | undefined;\r\n if (!template) {\r\n throw new Error(\r\n `The active theme \"${theme.name}\" does not contain a template for control \"${controlName}\".`\r\n );\r\n }\r\n return template;\r\n}\r\n\r\nexport function getAppliedClasses<T extends ControlName>(\r\n klass: AppliedThemeClassCfg<T>,\r\n themeTemplateInfo: Omit<ControlTemplateInfo<ControlTemplate<T, string[]>>, 'class' | 'classes'>\r\n): Array<{ class: string; name: string }> {\r\n function suffixes() {\r\n if (typeof klass === 'string') {\r\n return [klass];\r\n } else if (typeof klass === 'object' && klass !== null) {\r\n return Object.entries(klass)\r\n .filter(([_, value]) => (typeof value === 'function' ? value() : value))\r\n .map(([key, _]) => key);\r\n }\r\n return [];\r\n }\r\n const classes = suffixes().map(suffix => ({\r\n class: (themeTemplateInfo as ControlTemplateInfo<ControlTemplate<T, string[]>>).class(suffix),\r\n name: suffix,\r\n }));\r\n return classes;\r\n}\r\n\r\n@Injectable()\r\nexport class ThemeService implements OnDestroy {\r\n private readonly _config = inject(NGN_CONFIG);\r\n private readonly _loadedScopes = new Set<string>();\r\n private readonly _document = inject(DOCUMENT);\r\n\r\n public readonly activeTheme = signal(this._config.theme?.preset);\r\n\r\n constructor() {\r\n if (!this._config.theme?.preset && !this._config.theme?.lazyLoaded) {\r\n console.warn(\r\n 'No active theme found. Please provide a theme in the configuration or set lazyLoaded to true if you plan to load themes dynamically.'\r\n );\r\n }\r\n\r\n if (this._config.disableAnimations) {\r\n const style = this._document.createElement('style');\r\n style.setAttribute('ngn-style', '');\r\n // we set the durations instead of setting animation/transition to none,\r\n // so that the animation starts/ends are still applied & the events are still fired\r\n style.innerHTML = `.ngn-control, .ngn-control * {\r\n animation-duration: 0s !important;\r\n transition-duration: 0s !important;\r\n }`;\r\n this._document.head.appendChild(style);\r\n Logger.debug('Animations have been disabled via configuration.');\r\n }\r\n\r\n toObservable(this.activeTheme)\r\n .pipe(takeUntilDestroyed(), skip(1))\r\n .subscribe(this.onThemeChange.bind(this));\r\n }\r\n\r\n public loadScope(scope: string): void {\r\n if (this._loadedScopes.has(scope)) {\r\n Logger.debug(`Theme scope \"${scope}\" is already loaded.`);\r\n return;\r\n }\r\n\r\n const activeTheme = untracked(() => this.activeTheme());\r\n if (!activeTheme) {\r\n Logger.debug(\r\n `No active theme set. Cannot load theme scope \"${scope}\". Scope will be loaded when the theme is set.`\r\n );\r\n return;\r\n } else {\r\n Logger.debug(`Loading theme scope \"${scope}\" for active theme \"${activeTheme.name}\".`);\r\n this.applyTheme(activeTheme, [scope]);\r\n }\r\n\r\n this._loadedScopes.add(scope);\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n Logger.debug('ThemeService is being destroyed. Unloading all theme scopes...');\r\n this.unloadAllScopes();\r\n this._loadedScopes.clear();\r\n }\r\n\r\n private onThemeChange(newTheme: Theme | null): void {\r\n if (!newTheme) {\r\n Logger.warn('The active theme has been set to null.');\r\n this.unloadAllScopes();\r\n return;\r\n }\r\n\r\n Logger.debug(`Active theme changed to \"${newTheme.name}\". Reloading scopes...`);\r\n this._loadedScopes.forEach(scope => {\r\n Logger.debug(`Reloading theme scope \"${scope}\" for active theme \"${newTheme.name}\".`);\r\n this.applyTheme(newTheme, [scope]);\r\n });\r\n }\r\n\r\n private unloadAllScopes(): void {\r\n Logger.warn('Unloading all theme scopes is not implemented yet. This is a placeholder method.');\r\n }\r\n\r\n private applyTheme(theme: Theme, scopes: string[]): void {\r\n applyTheme(theme, scopes, {\r\n document: this._document,\r\n layer: this._config.theme.cssLayer ?? undefined,\r\n styleScope: this._config.theme.styleScope ?? undefined,\r\n namePrefix: this._config.theme.namePrefix,\r\n });\r\n applyGlobalStyles(globalStyles, {\r\n document: this._document,\r\n layer: this._config.theme.cssLayer ?? undefined,\r\n styleScope: this._config.theme.styleScope ?? undefined,\r\n namePrefix: this._config.theme.namePrefix,\r\n });\r\n }\r\n}\r\n","import { I18n } from '@ngneers/controls/i18n';\r\nimport { NgnGlobal } from '@ngneers/controls/utils-ng';\r\n\r\nimport { type NgnConfigInit, provideNgnConfig } from './config';\r\nimport { Platform } from './platform';\r\nimport { ThemeService } from './theme-service';\r\n\r\nimport type { Provider } from '@angular/core';\r\n\r\nexport type NgnFeature = {\r\n providers: Provider[];\r\n};\r\n\r\nexport function provideNgnControls(config?: NgnConfigInit, ...features: NgnFeature[]): Provider[] {\r\n return [\r\n NgnGlobal,\r\n ThemeService,\r\n I18n,\r\n Platform,\r\n provideNgnConfig(config),\r\n ...features.map(f => f.providers).flat(),\r\n ];\r\n}\r\n","import { Directive, input } from '@angular/core';\r\n\r\n@Directive({\r\n selector: 'ng-template[ngnTemplate]',\r\n})\r\nexport class NgnTemplate<T> {\r\n public readonly ngnTemplate = input.required<T>();\r\n\r\n public static ngTemplateContextGuard<T>(dir: NgnTemplate<T>, ctx: unknown): ctx is T {\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * A noop with return type T.\r\n * This function is used to define typed properties to use in a template.\r\n */\r\nexport function templateTypesFn<T extends Record<string, Record<string, any>>>() {\r\n return {} as T & { $implicit: { [K in keyof T]: Partial<T[K]> } };\r\n}\r\n\r\n/**\r\n * A noop with return type `{ $implicit: Implicit } & Named`.\r\n * This function is used to define a typed property to use in a template.\r\n */\r\nexport function templateTypeFn<Implicit, Named extends Record<string, any> = object>() {\r\n return {} as ([Implicit] extends [undefined] ? unknown : { $implicit: Implicit }) & Named;\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -35,10 +35,10 @@ class NgnAvatar extends NgnBase {
35
35
  constructor() {
36
36
  super();
37
37
  }
38
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NgnAvatar, deps: [], target: i0.ɵɵFactoryTarget.Component });
39
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.2", type: NgnAvatar, isStandalone: true, selector: "ngn-avatar", inputs: { initials: { classPropertyName: "initials", publicName: "initials", isSignal: true, isRequired: false, transformFunction: null }, bgColor: { classPropertyName: "bgColor", publicName: "bgColor", isSignal: true, isRequired: false, transformFunction: null }, image: { classPropertyName: "image", publicName: "image", isSignal: true, isRequired: false, transformFunction: null }, alt: { classPropertyName: "alt", publicName: "alt", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.--size.px": "size()", "style.--color": "bgColor()" } }, providers: [provideSelf(NgnAvatar)], usesInheritance: true, ngImport: i0, template: "<ng-content>\r\n @if (!image() || imageLoadFailed()) {\r\n <span\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'initials'\"\r\n [style.--letterCount]=\"initialsLimited()?.length || 1\"\r\n >\r\n {{ initialsLimited() }}\r\n </span>\r\n } @else {\r\n <img\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'image'\"\r\n [src]=\"image()\"\r\n [alt]=\"alt() ?? ''\"\r\n (error)=\"imageLoadFailed.set(true)\"\r\n />\r\n }\r\n</ng-content>\r\n", dependencies: [{ kind: "directive", type: NgnPt, selector: "[ptInt]", inputs: ["ptInt", "ptClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
38
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: NgnAvatar, deps: [], target: i0.ɵɵFactoryTarget.Component });
39
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.10", type: NgnAvatar, isStandalone: true, selector: "ngn-avatar", inputs: { initials: { classPropertyName: "initials", publicName: "initials", isSignal: true, isRequired: false, transformFunction: null }, bgColor: { classPropertyName: "bgColor", publicName: "bgColor", isSignal: true, isRequired: false, transformFunction: null }, image: { classPropertyName: "image", publicName: "image", isSignal: true, isRequired: false, transformFunction: null }, alt: { classPropertyName: "alt", publicName: "alt", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.--size.px": "size()", "style.--color": "bgColor()" } }, providers: [provideSelf(NgnAvatar)], usesInheritance: true, ngImport: i0, template: "<ng-content>\r\n @if (!image() || imageLoadFailed()) {\r\n <span\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'initials'\"\r\n [style.--letterCount]=\"initialsLimited()?.length || 1\"\r\n >\r\n {{ initialsLimited() }}\r\n </span>\r\n } @else {\r\n <img\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'image'\"\r\n [src]=\"image()\"\r\n [alt]=\"alt() ?? ''\"\r\n (error)=\"imageLoadFailed.set(true)\"\r\n />\r\n }\r\n</ng-content>\r\n", dependencies: [{ kind: "directive", type: NgnPt, selector: "[ptInt]", inputs: ["ptInt", "ptClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
40
40
  }
41
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NgnAvatar, decorators: [{
41
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: NgnAvatar, decorators: [{
42
42
  type: Component,
43
43
  args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'ngn-avatar', imports: [NgnPt], host: {
44
44
  '[style.--size.px]': 'size()',
@@ -54,10 +54,10 @@ class NgnAvatarGroup extends NgnBase {
54
54
  constructor() {
55
55
  super();
56
56
  }
57
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NgnAvatarGroup, deps: [], target: i0.ɵɵFactoryTarget.Component });
58
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.2", type: NgnAvatarGroup, isStandalone: true, selector: "ngn-avatar-group", providers: [provideSelf(NgnAvatarGroup)], usesInheritance: true, ngImport: i0, template: "<div [ptInt]=\"this\" [ptClass]=\"'root'\">\r\n <ng-content></ng-content>\r\n</div>\r\n", dependencies: [{ kind: "directive", type: NgnPt, selector: "[ptInt]", inputs: ["ptInt", "ptClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
57
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: NgnAvatarGroup, deps: [], target: i0.ɵɵFactoryTarget.Component });
58
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.10", type: NgnAvatarGroup, isStandalone: true, selector: "ngn-avatar-group", providers: [provideSelf(NgnAvatarGroup)], usesInheritance: true, ngImport: i0, template: "<div [ptInt]=\"this\" [ptClass]=\"'root'\">\r\n <ng-content></ng-content>\r\n</div>\r\n", dependencies: [{ kind: "directive", type: NgnPt, selector: "[ptInt]", inputs: ["ptInt", "ptClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
59
59
  }
60
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NgnAvatarGroup, decorators: [{
60
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: NgnAvatarGroup, decorators: [{
61
61
  type: Component,
62
62
  args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'ngn-avatar-group', imports: [NgnPt], providers: [provideSelf(NgnAvatarGroup)], template: "<div [ptInt]=\"this\" [ptClass]=\"'root'\">\r\n <ng-content></ng-content>\r\n</div>\r\n" }]
63
63
  }], ctorParameters: () => [] });