@ngneers/controls 0.0.1-pre5 → 0.0.1-pre7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) hide show
  1. package/fesm2022/ngneers-controls-accordion.mjs +33 -33
  2. package/fesm2022/ngneers-controls-accordion.mjs.map +1 -1
  3. package/fesm2022/ngneers-controls-api-ng.mjs +22 -19
  4. package/fesm2022/ngneers-controls-api-ng.mjs.map +1 -1
  5. package/fesm2022/ngneers-controls-api-resize.mjs +706 -0
  6. package/fesm2022/ngneers-controls-api-resize.mjs.map +1 -0
  7. package/fesm2022/ngneers-controls-avatar.mjs +13 -13
  8. package/fesm2022/ngneers-controls-avatar.mjs.map +1 -1
  9. package/fesm2022/ngneers-controls-base.mjs +89 -64
  10. package/fesm2022/ngneers-controls-base.mjs.map +1 -1
  11. package/fesm2022/ngneers-controls-breadcrumb.mjs +19 -19
  12. package/fesm2022/ngneers-controls-breadcrumb.mjs.map +1 -1
  13. package/fesm2022/ngneers-controls-button-group.mjs +8 -8
  14. package/fesm2022/ngneers-controls-button-group.mjs.map +1 -1
  15. package/fesm2022/ngneers-controls-button.mjs +15 -10
  16. package/fesm2022/ngneers-controls-button.mjs.map +1 -1
  17. package/fesm2022/{ngneers-controls-calendar-time-BEeJIqIX.mjs → ngneers-controls-calendar-time-CKAqRgOP.mjs} +9 -9
  18. package/fesm2022/{ngneers-controls-calendar-time-BEeJIqIX.mjs.map → ngneers-controls-calendar-time-CKAqRgOP.mjs.map} +1 -1
  19. package/fesm2022/ngneers-controls-calendar.mjs +56 -56
  20. package/fesm2022/ngneers-controls-calendar.mjs.map +1 -1
  21. package/fesm2022/ngneers-controls-checkbox.mjs +9 -9
  22. package/fesm2022/ngneers-controls-checkbox.mjs.map +1 -1
  23. package/fesm2022/ngneers-controls-chip.mjs +7 -7
  24. package/fesm2022/ngneers-controls-chip.mjs.map +1 -1
  25. package/fesm2022/ngneers-controls-default-icons.mjs +61 -0
  26. package/fesm2022/ngneers-controls-default-icons.mjs.map +1 -0
  27. package/fesm2022/ngneers-controls-defer.mjs +10 -10
  28. package/fesm2022/ngneers-controls-defer.mjs.map +1 -1
  29. package/fesm2022/ngneers-controls-dialog.mjs +38 -40
  30. package/fesm2022/ngneers-controls-dialog.mjs.map +1 -1
  31. package/fesm2022/ngneers-controls-directives.mjs +45 -39
  32. package/fesm2022/ngneers-controls-directives.mjs.map +1 -1
  33. package/fesm2022/ngneers-controls-drawer.mjs +29 -29
  34. package/fesm2022/ngneers-controls-drawer.mjs.map +1 -1
  35. package/fesm2022/ngneers-controls-edit-inplace.mjs +16 -16
  36. package/fesm2022/ngneers-controls-edit-inplace.mjs.map +1 -1
  37. package/fesm2022/ngneers-controls-filter.mjs +192 -44
  38. package/fesm2022/ngneers-controls-filter.mjs.map +1 -1
  39. package/fesm2022/{ngneers-controls-i18n-de-CdTPeBiR.mjs → ngneers-controls-i18n-de-CF0xTWEX.mjs} +9 -5
  40. package/fesm2022/ngneers-controls-i18n-de-CF0xTWEX.mjs.map +1 -0
  41. package/fesm2022/{ngneers-controls-i18n-en-Cfp2pOLY.mjs → ngneers-controls-i18n-en-8B7xAjH2.mjs} +9 -5
  42. package/fesm2022/ngneers-controls-i18n-en-8B7xAjH2.mjs.map +1 -0
  43. package/fesm2022/ngneers-controls-i18n.mjs +5 -5
  44. package/fesm2022/ngneers-controls-i18n.mjs.map +1 -1
  45. package/fesm2022/ngneers-controls-icon.mjs +111 -47
  46. package/fesm2022/ngneers-controls-icon.mjs.map +1 -1
  47. package/fesm2022/ngneers-controls-inplace.mjs +18 -18
  48. package/fesm2022/ngneers-controls-inplace.mjs.map +1 -1
  49. package/fesm2022/ngneers-controls-input-field.mjs +16 -16
  50. package/fesm2022/ngneers-controls-input-field.mjs.map +1 -1
  51. package/fesm2022/ngneers-controls-input-mask.mjs +8 -8
  52. package/fesm2022/ngneers-controls-input-mask.mjs.map +1 -1
  53. package/fesm2022/ngneers-controls-input.mjs +6 -6
  54. package/fesm2022/ngneers-controls-input.mjs.map +1 -1
  55. package/fesm2022/ngneers-controls-item-view.mjs +33 -33
  56. package/fesm2022/ngneers-controls-item-view.mjs.map +1 -1
  57. package/fesm2022/ngneers-controls-list-box.mjs +31 -31
  58. package/fesm2022/ngneers-controls-list-box.mjs.map +1 -1
  59. package/fesm2022/ngneers-controls-menu.mjs +33 -33
  60. package/fesm2022/ngneers-controls-menu.mjs.map +1 -1
  61. package/fesm2022/ngneers-controls-message.mjs +4 -4
  62. package/fesm2022/ngneers-controls-message.mjs.map +1 -1
  63. package/fesm2022/ngneers-controls-paginator.mjs +13 -13
  64. package/fesm2022/ngneers-controls-paginator.mjs.map +1 -1
  65. package/fesm2022/ngneers-controls-popover.mjs +21 -16
  66. package/fesm2022/ngneers-controls-popover.mjs.map +1 -1
  67. package/fesm2022/ngneers-controls-progress.mjs +16 -16
  68. package/fesm2022/ngneers-controls-progress.mjs.map +1 -1
  69. package/fesm2022/ngneers-controls-scroll-shadow.mjs +54 -0
  70. package/fesm2022/ngneers-controls-scroll-shadow.mjs.map +1 -0
  71. package/fesm2022/ngneers-controls-scroller.mjs +74 -39
  72. package/fesm2022/ngneers-controls-scroller.mjs.map +1 -1
  73. package/fesm2022/ngneers-controls-select-button.mjs +7 -7
  74. package/fesm2022/ngneers-controls-select-button.mjs.map +1 -1
  75. package/fesm2022/ngneers-controls-select.mjs +48 -47
  76. package/fesm2022/ngneers-controls-select.mjs.map +1 -1
  77. package/fesm2022/ngneers-controls-slider.mjs +11 -11
  78. package/fesm2022/ngneers-controls-slider.mjs.map +1 -1
  79. package/fesm2022/ngneers-controls-spinner.mjs +7 -7
  80. package/fesm2022/ngneers-controls-spinner.mjs.map +1 -1
  81. package/fesm2022/ngneers-controls-splitter.mjs +141 -328
  82. package/fesm2022/ngneers-controls-splitter.mjs.map +1 -1
  83. package/fesm2022/ngneers-controls-switch.mjs +3 -3
  84. package/fesm2022/ngneers-controls-switch.mjs.map +1 -1
  85. package/fesm2022/ngneers-controls-table.mjs +1456 -82
  86. package/fesm2022/ngneers-controls-table.mjs.map +1 -1
  87. package/fesm2022/ngneers-controls-tabs.mjs +41 -40
  88. package/fesm2022/ngneers-controls-tabs.mjs.map +1 -1
  89. package/fesm2022/ngneers-controls-tag.mjs +4 -4
  90. package/fesm2022/ngneers-controls-tag.mjs.map +1 -1
  91. package/fesm2022/ngneers-controls-toast.mjs +19 -19
  92. package/fesm2022/ngneers-controls-toast.mjs.map +1 -1
  93. package/fesm2022/ngneers-controls-toggle-button.mjs +10 -10
  94. package/fesm2022/ngneers-controls-toggle-button.mjs.map +1 -1
  95. package/fesm2022/ngneers-controls-tooltip.mjs +74 -38
  96. package/fesm2022/ngneers-controls-tooltip.mjs.map +1 -1
  97. package/fesm2022/ngneers-controls-utils-ng.mjs +9 -9
  98. package/fesm2022/ngneers-controls-utils-ng.mjs.map +1 -1
  99. package/fesm2022/ngneers-controls-utils.mjs +1 -1
  100. package/fesm2022/ngneers-controls-utils.mjs.map +1 -1
  101. package/package.json +34 -12
  102. package/types/ngneers-controls-accordion.d.ts +6 -4
  103. package/types/ngneers-controls-api-ng.d.ts +7 -2
  104. package/types/ngneers-controls-api-resize.d.ts +318 -0
  105. package/types/ngneers-controls-api.d.ts +2 -2
  106. package/types/ngneers-controls-base.d.ts +8 -0
  107. package/types/ngneers-controls-breadcrumb.d.ts +6 -4
  108. package/types/ngneers-controls-button.d.ts +13 -8
  109. package/types/ngneers-controls-calendar.d.ts +5 -1
  110. package/types/ngneers-controls-checkbox.d.ts +6 -4
  111. package/types/ngneers-controls-chip.d.ts +3 -1
  112. package/types/ngneers-controls-default-icons.d.ts +5 -0
  113. package/types/ngneers-controls-directives.d.ts +7 -1
  114. package/types/ngneers-controls-drawer.d.ts +7 -1
  115. package/types/ngneers-controls-edit-inplace.d.ts +4 -0
  116. package/types/ngneers-controls-filter.d.ts +52 -3
  117. package/types/ngneers-controls-i18n.d.ts +4 -0
  118. package/types/ngneers-controls-icon.d.ts +23 -40
  119. package/types/ngneers-controls-input-field.d.ts +7 -1
  120. package/types/ngneers-controls-item-view.d.ts +4 -2
  121. package/types/ngneers-controls-list-box.d.ts +5 -1
  122. package/types/ngneers-controls-menu.d.ts +4 -2
  123. package/types/ngneers-controls-message.d.ts +3 -1
  124. package/types/ngneers-controls-paginator.d.ts +4 -0
  125. package/types/ngneers-controls-popover.d.ts +2 -1
  126. package/types/ngneers-controls-scroll-shadow.d.ts +16 -0
  127. package/types/ngneers-controls-scroller.d.ts +12 -2
  128. package/types/ngneers-controls-select.d.ts +11 -12
  129. package/types/ngneers-controls-spinner.d.ts +1 -1
  130. package/types/ngneers-controls-splitter.d.ts +29 -59
  131. package/types/ngneers-controls-table.d.ts +380 -24
  132. package/types/ngneers-controls-tabs.d.ts +4 -2
  133. package/types/ngneers-controls-tag.d.ts +3 -1
  134. package/types/ngneers-controls-toast.d.ts +5 -3
  135. package/types/ngneers-controls-toggle-button.d.ts +5 -3
  136. package/types/ngneers-controls-tooltip.d.ts +7 -1
  137. package/fesm2022/ngneers-controls-i18n-de-CdTPeBiR.mjs.map +0 -1
  138. package/fesm2022/ngneers-controls-i18n-en-Cfp2pOLY.mjs.map +0 -1
  139. package/fesm2022/ngneers-controls-icon-calendar-z5xA9wTT.mjs +0 -4
  140. package/fesm2022/ngneers-controls-icon-calendar-z5xA9wTT.mjs.map +0 -1
  141. package/fesm2022/ngneers-controls-icon-check-DdAQ9k-T.mjs +0 -4
  142. package/fesm2022/ngneers-controls-icon-check-DdAQ9k-T.mjs.map +0 -1
  143. package/fesm2022/ngneers-controls-icon-chevron_down-HO-z-xOr.mjs +0 -4
  144. package/fesm2022/ngneers-controls-icon-chevron_down-HO-z-xOr.mjs.map +0 -1
  145. package/fesm2022/ngneers-controls-icon-chevron_left-CC5psi16.mjs +0 -4
  146. package/fesm2022/ngneers-controls-icon-chevron_left-CC5psi16.mjs.map +0 -1
  147. package/fesm2022/ngneers-controls-icon-chevron_right-BRxlzx4G.mjs +0 -4
  148. package/fesm2022/ngneers-controls-icon-chevron_right-BRxlzx4G.mjs.map +0 -1
  149. package/fesm2022/ngneers-controls-icon-chevron_up-cqhPO7g2.mjs +0 -4
  150. package/fesm2022/ngneers-controls-icon-chevron_up-cqhPO7g2.mjs.map +0 -1
  151. package/fesm2022/ngneers-controls-icon-ellipsis-DXIGA1sk.mjs +0 -4
  152. package/fesm2022/ngneers-controls-icon-ellipsis-DXIGA1sk.mjs.map +0 -1
  153. package/fesm2022/ngneers-controls-icon-filter-oU7E6Xgr.mjs +0 -4
  154. package/fesm2022/ngneers-controls-icon-filter-oU7E6Xgr.mjs.map +0 -1
  155. package/fesm2022/ngneers-controls-icon-filter_solid-CqIKuR4N.mjs +0 -4
  156. package/fesm2022/ngneers-controls-icon-filter_solid-CqIKuR4N.mjs.map +0 -1
  157. package/fesm2022/ngneers-controls-icon-magnifying_glass-T4Hzbkig.mjs +0 -4
  158. package/fesm2022/ngneers-controls-icon-magnifying_glass-T4Hzbkig.mjs.map +0 -1
  159. package/fesm2022/ngneers-controls-icon-minus-oGDEFO4E.mjs +0 -4
  160. package/fesm2022/ngneers-controls-icon-minus-oGDEFO4E.mjs.map +0 -1
  161. package/fesm2022/ngneers-controls-icon-sort-CRD4tafz.mjs +0 -4
  162. package/fesm2022/ngneers-controls-icon-sort-CRD4tafz.mjs.map +0 -1
  163. package/fesm2022/ngneers-controls-icon-sort_down-DiFB1P6R.mjs +0 -4
  164. package/fesm2022/ngneers-controls-icon-sort_down-DiFB1P6R.mjs.map +0 -1
  165. package/fesm2022/ngneers-controls-icon-sort_up-Bq_q3hIi.mjs +0 -4
  166. package/fesm2022/ngneers-controls-icon-sort_up-Bq_q3hIi.mjs.map +0 -1
  167. package/fesm2022/ngneers-controls-icon-xmark-BZKZORiu.mjs +0 -4
  168. package/fesm2022/ngneers-controls-icon-xmark-BZKZORiu.mjs.map +0 -1
@@ -50,7 +50,7 @@ type NgnFilterOutput<T> = NgnFilterConfig & {
50
50
  * @category control
51
51
  */
52
52
  declare class NgnFilter<T = unknown> extends ValueControlBase<'filter', NgnFilterConfig | null> {
53
- protected readonly theme: _ngneers_controls_api_ng.ControlTemplateInfo<_ngneers_controls_themes.ControlTemplate<"filter", ["root", "inline", "input-field", "summary", "icon", "popover-content", "rows", "row", "operator", "value", "row-actions", "match", "footer"], readonly [_ngneers_controls_themes.ControlTemplate<"popover", ["root", "content", "content-closing", "anim-in", "anim-out"], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>, _ngneers_controls_themes.ControlTemplate<"input-field", ["root", "host", "disabled", "readonly", "invalid", "label", "clear-button", `labelKind-${string}`], readonly [_ngneers_controls_themes.ControlTemplate<"input", ["root", "invalid", "empty"], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>]>, _ngneers_controls_themes.ControlTemplate<"input", ["root", "invalid", "empty"], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>, _ngneers_controls_themes.ControlTemplate<"select", ["root", "combobox", "input", "icon", "input-editable", "popover-content", "filter", "filter-icon", "list-box", "list-box-empty"], readonly [_ngneers_controls_themes.ControlTemplate<"popover", ["root", "content", "content-closing", "anim-in", "anim-out"], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>, _ngneers_controls_themes.ControlTemplate<"list-box", ["root", "empty", "invalid", "item", "group", "default-item", "default-group", "scroller", "item-selected", "item-highlighted"], readonly [_ngneers_controls_themes.ControlTemplate<"checkbox", ["root", "input", "box", "box-checked", "box-indeterminate", "box-icon", "anim-box-icon-enter", "anim-box-icon-leave", "invalid"], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>, _ngneers_controls_themes.ControlTemplate<"scroller", ["root", "virtual", "item", "item-sticky"], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>]>, _ngneers_controls_themes.ControlTemplate<"input-field", ["root", "host", "disabled", "readonly", "invalid", "label", "clear-button", `labelKind-${string}`], readonly [_ngneers_controls_themes.ControlTemplate<"input", ["root", "invalid", "empty"], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>]>]>, _ngneers_controls_themes.ControlTemplate<"button", ["root", "inline", "loading", `kind-${string}`, `color-${string}`], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>]>>;
53
+ protected readonly theme: _ngneers_controls_api_ng.ControlTemplateInfo<_ngneers_controls_themes.ControlTemplate<"filter", ["root", "inline", "input-field", "summary", "icon", "popover-content", "rows", "row", "operator", "value", "remove-btn", "condition-divider", "footer", "footer-actions", "active-indicator"], readonly [_ngneers_controls_themes.ControlTemplate<"popover", ["root", "content", "content-closing"], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>, _ngneers_controls_themes.ControlTemplate<"input-field", ["root", "host", "disabled", "readonly", "invalid", "label", "clear-button", `labelKind-${string}`], readonly [_ngneers_controls_themes.ControlTemplate<"input", ["root", "invalid", "empty"], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>]>, _ngneers_controls_themes.ControlTemplate<"input", ["root", "invalid", "empty"], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>, _ngneers_controls_themes.ControlTemplate<"select", ["root", "combobox", "input", "icon", "input-editable", "popover-content", "filter", "filter-icon", "list-box", "list-box-empty"], readonly [_ngneers_controls_themes.ControlTemplate<"popover", ["root", "content", "content-closing"], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>, _ngneers_controls_themes.ControlTemplate<"list-box", ["root", "empty", "invalid", "item", "group", "default-item", "default-group", "scroller", "item-selected", "item-highlighted"], readonly [_ngneers_controls_themes.ControlTemplate<"checkbox", ["root", "input", "box", "box-checked", "box-indeterminate", "box-icon", "box-icon-visible", "invalid"], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>, _ngneers_controls_themes.ControlTemplate<"scroller", ["root", "virtual", "item", "item-sticky"], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>]>, _ngneers_controls_themes.ControlTemplate<"input-field", ["root", "host", "disabled", "readonly", "invalid", "label", "clear-button", `labelKind-${string}`], readonly [_ngneers_controls_themes.ControlTemplate<"input", ["root", "invalid", "empty"], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>]>]>, _ngneers_controls_themes.ControlTemplate<"button", ["root", "inline", "loading", `kind-${string}`, `color-${string}`], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>, _ngneers_controls_themes.ControlTemplate<"calendar", ["root", "inline", "input", "input-field", "details", "header", "navigation", "days", "week-day", "day", "day-selected", "day-today", "day-other-month", "months", "month", "current-month", "current-year", "time", "next", "previous"], readonly [_ngneers_controls_themes.ControlTemplate<"button", ["root", "inline", "loading", `kind-${string}`, `color-${string}`], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>, _ngneers_controls_themes.ControlTemplate<"select", ["root", "combobox", "input", "icon", "input-editable", "popover-content", "filter", "filter-icon", "list-box", "list-box-empty"], readonly [_ngneers_controls_themes.ControlTemplate<"popover", ["root", "content", "content-closing"], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>, _ngneers_controls_themes.ControlTemplate<"list-box", ["root", "empty", "invalid", "item", "group", "default-item", "default-group", "scroller", "item-selected", "item-highlighted"], readonly [_ngneers_controls_themes.ControlTemplate<"checkbox", ["root", "input", "box", "box-checked", "box-indeterminate", "box-icon", "box-icon-visible", "invalid"], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>, _ngneers_controls_themes.ControlTemplate<"scroller", ["root", "virtual", "item", "item-sticky"], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>]>, _ngneers_controls_themes.ControlTemplate<"input-field", ["root", "host", "disabled", "readonly", "invalid", "label", "clear-button", `labelKind-${string}`], readonly [_ngneers_controls_themes.ControlTemplate<"input", ["root", "invalid", "empty"], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>]>]>, _ngneers_controls_themes.ControlTemplate<"input", ["root", "invalid", "empty"], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>, _ngneers_controls_themes.ControlTemplate<"input-field", ["root", "host", "disabled", "readonly", "invalid", "label", "clear-button", `labelKind-${string}`], readonly [_ngneers_controls_themes.ControlTemplate<"input", ["root", "invalid", "empty"], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>]>]>]>>;
54
54
  protected readonly i18n: _ngneers_signal_translate.TranslationsSignal<{
55
55
  calendar: {
56
56
  today: string;
@@ -96,10 +96,14 @@ declare class NgnFilter<T = unknown> extends ValueControlBase<'filter', NgnFilte
96
96
  addCondition: string;
97
97
  removeCondition: string;
98
98
  clear: string;
99
+ apply: string;
100
+ cancel: string;
99
101
  matchModeLabel: string;
100
102
  match: {
101
103
  all: string;
102
104
  any: string;
105
+ and: string;
106
+ or: string;
103
107
  };
104
108
  selected: string;
105
109
  conditions: string;
@@ -136,6 +140,7 @@ declare class NgnFilter<T = unknown> extends ValueControlBase<'filter', NgnFilte
136
140
  };
137
141
  }, "_">;
138
142
  protected readonly unsafeI18n: (key: string) => _angular_core.Signal<string>;
143
+ private readonly _destroyRef;
139
144
  /** Data to filter. */
140
145
  readonly data: _angular_core.InputSignal<readonly T[]>;
141
146
  /** Datatype of the values in {@link data}. */
@@ -164,6 +169,16 @@ declare class NgnFilter<T = unknown> extends ValueControlBase<'filter', NgnFilte
164
169
  * When false, only the filter configuration is emitted (useful for server-side filtering).
165
170
  */
166
171
  readonly filterLocally: _angular_core.InputSignalWithTransform<boolean, unknown>;
172
+ /**
173
+ * When true (default), filters apply automatically as the user types/selects.
174
+ * When false, the user must click "Apply" to commit the filter.
175
+ */
176
+ readonly autoApply: _angular_core.InputSignalWithTransform<boolean, unknown>;
177
+ /**
178
+ * Debounce time in milliseconds for auto-apply mode.
179
+ * Only relevant when {@link autoApply} is `true`.
180
+ */
181
+ readonly autoApplyDebounce: _angular_core.InputSignalWithTransform<number, unknown>;
167
182
  /** Options for the popover (when {@link mode} is not `inline`). */
168
183
  readonly popoverOptions: _angular_core.InputSignal<PopoverOptions>;
169
184
  protected readonly appliedPopoverOptions: _angular_core.Signal<PopoverOptions>;
@@ -172,11 +187,24 @@ declare class NgnFilter<T = unknown> extends ValueControlBase<'filter', NgnFilte
172
187
  /** Emits the filtered data whenever local filtering is enabled. */
173
188
  readonly filterResultChange: _angular_core.OutputEmitterRef<readonly T[]>;
174
189
  private readonly _popover;
190
+ /**
191
+ * Internal working config that the template binds to.
192
+ * In auto-apply mode, this syncs to value() via debounce.
193
+ * In manual mode, only apply() commits this to value().
194
+ */
195
+ protected readonly workingConfig: _angular_core.WritableSignal<NgnFilterConfig | null>;
196
+ /** Snapshot of value() taken when popover opens in manual mode, for cancel to restore. */
197
+ private _snapshotConfig;
198
+ /** Debounce timer handle for auto-apply. */
199
+ private _debounceTimer;
200
+ /** Whether there is an active filter applied. */
201
+ protected readonly hasActiveFilter: _angular_core.Signal<boolean>;
175
202
  private createCondition;
176
203
  private defaultConfig;
177
204
  /**
178
205
  * Config used for UI rendering.
179
- * Falls back to a default config when the actual {@link value} is null.
206
+ * Always reads from workingConfig (the live editing state).
207
+ * Falls back to a default config when null.
180
208
  */
181
209
  protected readonly templateConfig: _angular_core.Signal<NgnFilterConfig>;
182
210
  protected readonly templateListSelection: _angular_core.Signal<readonly string[]>;
@@ -278,18 +306,39 @@ declare class NgnFilter<T = unknown> extends ValueControlBase<'filter', NgnFilte
278
306
  protected readonly resolvedListOptions: _angular_core.Signal<readonly NgnItem[]>;
279
307
  protected readonly matchModeOptions: readonly NgnItem[];
280
308
  protected readonly inputType: _angular_core.Signal<"number" | "date" | "text" | "datetime-local">;
309
+ protected readonly isDateType: _angular_core.Signal<boolean>;
310
+ protected readonly isShowTime: _angular_core.Signal<boolean>;
311
+ /** Parse a rawValue string to a Date for the calendar component. */
312
+ protected parseRawDate(rawValue: string | null): Date | null;
313
+ /** Convert a Date from the calendar to a rawValue string. */
314
+ protected dateToRaw(date: Date | null): string | null;
281
315
  protected readonly summaryText: _angular_core.Signal<string | undefined>;
282
316
  protected readonly activeConditionConfigs: _angular_core.Signal<readonly NgnFilterConditionConfig[]>;
283
317
  protected readonly activeConditions: _angular_core.Signal<readonly NgnFilterCondition[]>;
284
318
  protected readonly filteredData: _angular_core.Signal<readonly T[]>;
319
+ /** The current match mode label for the condition divider */
320
+ protected readonly matchModeLabel: _angular_core.Signal<string>;
285
321
  constructor();
322
+ /**
323
+ * Commits the working config to the actual value, with optional debounce.
324
+ * Called after every working config change.
325
+ */
326
+ private commitWorkingConfig;
327
+ /** Updates the working config and optionally auto-applies. */
328
+ private updateWorkingConfig;
329
+ protected toggleMatchMode(): void;
286
330
  protected setMatchMode(value: unknown): void;
287
331
  protected operatorRequiresValue(operator: NgnFilterOperatorId): boolean;
288
332
  protected setOperator(index: number, operator: NgnFilterOperatorId | null): void;
289
333
  protected setRawValue(index: number, rawValue: string | null): void;
334
+ protected setDateValue(index: number, date: Date | null): void;
290
335
  protected addCondition(): void;
291
336
  protected removeCondition(index: number): void;
292
337
  protected setListSelection(value: unknown): void;
338
+ /** Applies the working config (manual mode). */
339
+ protected apply(): void;
340
+ /** Cancels changes and restores the snapshot (manual mode). */
341
+ protected cancelChanges(): void;
293
342
  protected clear(): void;
294
343
  /** Shows the filter popup. Only works when {@link mode} is not `inline`. */
295
344
  show(): void;
@@ -297,7 +346,7 @@ declare class NgnFilter<T = unknown> extends ValueControlBase<'filter', NgnFilte
297
346
  hide(): void;
298
347
  protected onKeyDown(event: KeyboardEvent): void;
299
348
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgnFilter<any>, never>;
300
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgnFilter<any>, "ngn-filter", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "dataType": { "alias": "dataType"; "required": false; "isSignal": true; }; "allowMultiple": { "alias": "allowMultiple"; "required": false; "isSignal": true; }; "listOptions": { "alias": "listOptions"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "anchor": { "alias": "anchor"; "required": false; "isSignal": true; }; "filterLocally": { "alias": "filterLocally"; "required": false; "isSignal": true; }; "popoverOptions": { "alias": "popoverOptions"; "required": false; "isSignal": true; }; }, { "filterChange": "filterChange"; "filterResultChange": "filterResultChange"; }, never, never, true, never>;
349
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgnFilter<any>, "ngn-filter", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "dataType": { "alias": "dataType"; "required": false; "isSignal": true; }; "allowMultiple": { "alias": "allowMultiple"; "required": false; "isSignal": true; }; "listOptions": { "alias": "listOptions"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "anchor": { "alias": "anchor"; "required": false; "isSignal": true; }; "filterLocally": { "alias": "filterLocally"; "required": false; "isSignal": true; }; "autoApply": { "alias": "autoApply"; "required": false; "isSignal": true; }; "autoApplyDebounce": { "alias": "autoApplyDebounce"; "required": false; "isSignal": true; }; "popoverOptions": { "alias": "popoverOptions"; "required": false; "isSignal": true; }; }, { "filterChange": "filterChange"; "filterResultChange": "filterResultChange"; }, never, never, true, never>;
301
350
  }
302
351
 
303
352
  export { NgnFilter };
@@ -47,10 +47,14 @@ declare const _default: {
47
47
  addCondition: string;
48
48
  removeCondition: string;
49
49
  clear: string;
50
+ apply: string;
51
+ cancel: string;
50
52
  matchModeLabel: string;
51
53
  match: {
52
54
  all: string;
53
55
  any: string;
56
+ and: string;
57
+ or: string;
54
58
  };
55
59
  selected: string;
56
60
  conditions: string;
@@ -1,36 +1,19 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { TemplateRef, OnDestroy } from '@angular/core';
3
- import { IconType } from '@ngneers/controls-custom-types';
2
+ import { OnDestroy, TemplateRef, InjectionToken, Provider } from '@angular/core';
3
+ import { IconType, NgnIconEntry } from '@ngneers/controls-custom-types';
4
+ export { NgnIconEntry } from '@ngneers/controls-custom-types';
4
5
  import * as _ngneers_controls_icon from '@ngneers/controls/icon';
5
- import * as _angular_platform_browser from '@angular/platform-browser';
6
6
  import * as _ngneers_controls_api_ng from '@ngneers/controls/api/ng';
7
7
  import * as _ngneers_controls_themes from '@ngneers/controls-themes';
8
+ import { SafeHtml } from '@angular/platform-browser';
8
9
  import { NgnBase } from '@ngneers/controls/base';
9
-
10
- declare const DEFAULT_ICONS: {
11
- calendar: () => Promise<string>;
12
- check: () => Promise<string>;
13
- chevron_down: () => Promise<string>;
14
- chevron_left: () => Promise<string>;
15
- chevron_right: () => Promise<string>;
16
- chevron_up: () => Promise<string>;
17
- ellipsis: () => Promise<string>;
18
- filter: () => Promise<string>;
19
- filter_solid: () => Promise<string>;
20
- magnifying_glass: () => Promise<string>;
21
- minus: () => Promise<string>;
22
- sort: () => Promise<string>;
23
- sort_down: () => Promise<string>;
24
- sort_up: () => Promise<string>;
25
- xmark: () => Promise<string>;
26
- };
10
+ import { IconifyIcon } from '@iconify/types';
27
11
 
28
12
  type IconTemplateContext = {
29
13
  $implicit: {
30
14
  icon: IconType;
31
15
  };
32
16
  };
33
- type DefaultIcon = keyof typeof DEFAULT_ICONS;
34
17
 
35
18
  type IconTemplateType = TemplateRef<IconTemplateContext>;
36
19
  declare class GlobalIconTemplate implements OnDestroy {
@@ -42,6 +25,14 @@ declare class GlobalIconTemplate implements OnDestroy {
42
25
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<GlobalIconTemplate>;
43
26
  }
44
27
 
28
+ declare const NGN_ICON_KEYS: readonly ["accordion-collapse", "accordion-expand", "breadcrumb-separator", "breadcrumb-overflow", "calendar-trigger", "calendar-previous-month", "calendar-next-month", "checkbox-checked", "checkbox-indeterminate", "chip-remove", "dialog-close", "drawer-close", "dropdown-toggle", "edit-confirm", "filter-active", "filter-inactive", "filter-remove", "input-clear", "menu-submenu", "paginator-previous", "paginator-next", "search", "sort-neutral", "sort-ascending", "sort-descending", "table-group-toggle", "tabs-scroll-left", "tabs-scroll-right", "toast-close"];
29
+ type NgnIconKey = (typeof NGN_ICON_KEYS)[number];
30
+ type NgnIconRegistry = Record<NgnIconKey, IconifyIcon | NgnIconEntry>;
31
+ type NgnCustomIconRegistry = Record<NgnIconKey, IconType>;
32
+ declare const NGN_ICON_REGISTRY: InjectionToken<NgnIconRegistry | NgnCustomIconRegistry>;
33
+ declare const NGN_CUSTOM_ICONS: InjectionToken<boolean>;
34
+ declare function provideNgnCustomIcons(registry: NgnCustomIconRegistry): Provider[];
35
+
45
36
  /**
46
37
  * @category control
47
38
  */
@@ -49,26 +40,18 @@ declare class NgnIcon extends NgnBase<'icon'> {
49
40
  protected readonly theme: _ngneers_controls_api_ng.ControlTemplateInfo<_ngneers_controls_themes.ControlTemplate<"icon", ["root", "default"], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>>;
50
41
  private readonly _globalIconTemplate;
51
42
  private readonly _sanitizer;
52
- readonly defaultIcon: _angular_core.InputSignal<"calendar" | "filter" | "check" | "chevron_down" | "chevron_left" | "chevron_right" | "chevron_up" | "ellipsis" | "filter_solid" | "magnifying_glass" | "minus" | "sort" | "sort_down" | "sort_up" | "xmark" | undefined>;
53
- readonly icon: _angular_core.InputSignal<string | undefined>;
54
- protected readonly templateType: IconTemplateContext & {
55
- $implicit: {
56
- $implicit: Partial<{
57
- icon: IconType;
58
- }>;
59
- };
60
- };
61
- protected readonly defaultIconSvg: {
62
- (): _angular_platform_browser.SafeHtml | null;
63
- isRunning: _angular_core.Signal<boolean>;
64
- firstRunCompleted: _angular_core.Signal<boolean>;
65
- };
66
- private readonly _defaultIconTemplate;
67
- protected readonly usedIconTemplate: _angular_core.Signal<_ngneers_controls_icon.IconTemplateType>;
43
+ private readonly _registry;
44
+ private readonly _isCustom;
45
+ readonly defaultIcon: _angular_core.InputSignal<"accordion-collapse" | "accordion-expand" | "breadcrumb-separator" | "breadcrumb-overflow" | "calendar-trigger" | "calendar-previous-month" | "calendar-next-month" | "checkbox-checked" | "checkbox-indeterminate" | "chip-remove" | "dialog-close" | "drawer-close" | "dropdown-toggle" | "edit-confirm" | "filter-active" | "filter-inactive" | "filter-remove" | "input-clear" | "menu-submenu" | "paginator-previous" | "paginator-next" | "search" | "sort-neutral" | "sort-ascending" | "sort-descending" | "table-group-toggle" | "tabs-scroll-left" | "tabs-scroll-right" | "toast-close" | undefined>;
46
+ readonly icon: _angular_core.InputSignal<IconifyIcon | NgnIconEntry | undefined>;
47
+ protected readonly iconSvg: _angular_core.Signal<SafeHtml | null>;
48
+ protected readonly defaultIconSvg: _angular_core.Signal<SafeHtml | null>;
49
+ protected readonly customDefaultIcon: _angular_core.Signal<IconifyIcon | NgnIconEntry | null>;
50
+ protected readonly iconTemplate: _angular_core.Signal<_ngneers_controls_icon.IconTemplateType>;
68
51
  constructor();
69
52
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgnIcon, never>;
70
53
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgnIcon, "ngn-icon", never, { "defaultIcon": { "alias": "defaultIcon"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
71
54
  }
72
55
 
73
- export { GlobalIconTemplate, NgnIcon };
74
- export type { DefaultIcon, IconTemplateContext, IconTemplateType };
56
+ export { GlobalIconTemplate, NGN_CUSTOM_ICONS, NGN_ICON_KEYS, NGN_ICON_REGISTRY, NgnIcon, provideNgnCustomIcons };
57
+ export type { IconTemplateContext, IconTemplateType, NgnCustomIconRegistry, NgnIconKey, NgnIconRegistry };
@@ -1,3 +1,5 @@
1
+ import * as _ngneers_controls_custom_types from '@ngneers/controls-custom-types';
2
+ import * as _iconify_types from '@iconify/types';
1
3
  import * as _angular_core from '@angular/core';
2
4
  import { InjectionToken } from '@angular/core';
3
5
  import * as _ngneers_signal_translate from '@ngneers/signal-translate';
@@ -55,10 +57,14 @@ declare class NgnInputField extends NgnBase<'inputField'> {
55
57
  addCondition: string;
56
58
  removeCondition: string;
57
59
  clear: string;
60
+ apply: string;
61
+ cancel: string;
58
62
  matchModeLabel: string;
59
63
  match: {
60
64
  all: string;
61
65
  any: string;
66
+ and: string;
67
+ or: string;
62
68
  };
63
69
  selected: string;
64
70
  conditions: string;
@@ -124,7 +130,7 @@ declare class NgnInputField extends NgnBase<'inputField'> {
124
130
  /**
125
131
  * Custom icon for the clear button. Use with `showClearButton`.
126
132
  */
127
- readonly iconClearButton: _angular_core.InputSignal<string | undefined>;
133
+ readonly iconClearButton: _angular_core.InputSignal<_iconify_types.IconifyIcon | _ngneers_controls_custom_types.NgnIconEntry | undefined>;
128
134
  /**
129
135
  * Tabindex for the input field itself.
130
136
  * When another focusable (input) element is present inside the input field, this should be set to -1.
@@ -1,9 +1,11 @@
1
+ import * as _ngneers_controls_custom_types from '@ngneers/controls-custom-types';
2
+ import { IconType } from '@ngneers/controls-custom-types';
3
+ import * as _iconify_types from '@iconify/types';
1
4
  import * as _angular_core from '@angular/core';
2
5
  import { TemplateRef, AfterViewInit } from '@angular/core';
3
6
  import * as _ngneers_controls_api_ng from '@ngneers/controls/api/ng';
4
7
  import * as _ngneers_controls_themes from '@ngneers/controls-themes';
5
8
  import { NgnBase } from '@ngneers/controls/base';
6
- import { IconType } from '@ngneers/controls-custom-types';
7
9
 
8
10
  type OverflowStrategy = 'start' | 'end' | 'center' | 'aroundIndex';
9
11
 
@@ -158,7 +160,7 @@ declare class NgnItemView<T extends object, IdField extends keyof T> extends Ite
158
160
  /**
159
161
  * A separator icon to be displayed between items.
160
162
  */
161
- readonly iconItemSeparator: _angular_core.InputSignal<string | undefined>;
163
+ readonly iconItemSeparator: _angular_core.InputSignal<_iconify_types.IconifyIcon | _ngneers_controls_custom_types.NgnIconEntry | undefined>;
162
164
  /**
163
165
  * Strategy to use when there are more items than can be displayed in the available space.
164
166
  * The value determines where the items should start to overflow.
@@ -126,10 +126,14 @@ declare class NgnListBox<Items extends readonly NgnItem[], Multiple extends bool
126
126
  addCondition: string;
127
127
  removeCondition: string;
128
128
  clear: string;
129
+ apply: string;
130
+ cancel: string;
129
131
  matchModeLabel: string;
130
132
  match: {
131
133
  all: string;
132
134
  any: string;
135
+ and: string;
136
+ or: string;
133
137
  };
134
138
  selected: string;
135
139
  conditions: string;
@@ -165,7 +169,7 @@ declare class NgnListBox<Items extends readonly NgnItem[], Multiple extends bool
165
169
  close: string;
166
170
  };
167
171
  }, "_">;
168
- protected readonly theme: _ngneers_controls_api_ng.ControlTemplateInfo<_ngneers_controls_themes.ControlTemplate<"list-box", ["root", "empty", "invalid", "item", "group", "default-item", "default-group", "scroller", "item-selected", "item-highlighted"], readonly [_ngneers_controls_themes.ControlTemplate<"checkbox", ["root", "input", "box", "box-checked", "box-indeterminate", "box-icon", "anim-box-icon-enter", "anim-box-icon-leave", "invalid"], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>, _ngneers_controls_themes.ControlTemplate<"scroller", ["root", "virtual", "item", "item-sticky"], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>]>>;
172
+ protected readonly theme: _ngneers_controls_api_ng.ControlTemplateInfo<_ngneers_controls_themes.ControlTemplate<"list-box", ["root", "empty", "invalid", "item", "group", "default-item", "default-group", "scroller", "item-selected", "item-highlighted"], readonly [_ngneers_controls_themes.ControlTemplate<"checkbox", ["root", "input", "box", "box-checked", "box-indeterminate", "box-icon", "box-icon-visible", "invalid"], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>, _ngneers_controls_themes.ControlTemplate<"scroller", ["root", "virtual", "item", "item-sticky"], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>]>>;
169
173
  private readonly _scroller;
170
174
  readonly items: _angular_core.InputSignal<Items>;
171
175
  readonly scrollToSelectedItemOnInit: _angular_core.InputSignal<boolean | ScrollLogicalPosition>;
@@ -1,6 +1,8 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { OnDestroy, TemplateRef } from '@angular/core';
3
3
  import { NgnActionItem } from '@ngneers/controls/api';
4
+ import * as _ngneers_controls_custom_types from '@ngneers/controls-custom-types';
5
+ import * as _iconify_types from '@iconify/types';
4
6
  import * as _ngneers_controls_api_ng from '@ngneers/controls/api/ng';
5
7
  import { Openable, Anchor } from '@ngneers/controls/api/ng';
6
8
  import * as _ngneers_controls_themes from '@ngneers/controls-themes';
@@ -84,7 +86,7 @@ declare abstract class MenuTemplates extends NgnBase<'menu'> {
84
86
  * @category control
85
87
  */
86
88
  declare class NgnMenu extends MenuTemplates implements Openable {
87
- protected readonly theme: _ngneers_controls_api_ng.ControlTemplateInfo<_ngneers_controls_themes.ControlTemplate<"menu", ["root", "submenu", "popover", "item", "item-opened", "icon-children", "separator"], readonly [_ngneers_controls_themes.ControlTemplate<"popover", ["root", "content", "content-closing", "anim-in", "anim-out"], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>]>>;
89
+ protected readonly theme: _ngneers_controls_api_ng.ControlTemplateInfo<_ngneers_controls_themes.ControlTemplate<"menu", ["root", "submenu", "popover", "item", "item-opened", "icon-children", "separator"], readonly [_ngneers_controls_themes.ControlTemplate<"popover", ["root", "content", "content-closing"], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>]>>;
88
90
  protected readonly elementId: _angular_core.InputSignal<string>;
89
91
  /**
90
92
  * The element to which the menu is anchored. Required if `popover` is true.
@@ -111,7 +113,7 @@ declare class NgnMenu extends MenuTemplates implements Openable {
111
113
  /**
112
114
  * Icon type for children indicator (submenu indicator). If not set, a default icon will be used.
113
115
  */
114
- readonly iconSubmenuIndicator: _angular_core.InputSignal<string | undefined>;
116
+ readonly iconSubmenuIndicator: _angular_core.InputSignal<_iconify_types.IconifyIcon | _ngneers_controls_custom_types.NgnIconEntry | undefined>;
115
117
  /**
116
118
  * Whether this menu is a submenu. Used internally.
117
119
  * @internal
@@ -1,4 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
+ import * as _ngneers_controls_custom_types from '@ngneers/controls-custom-types';
3
+ import * as _iconify_types from '@iconify/types';
2
4
  import * as _ngneers_controls_api_ng from '@ngneers/controls/api/ng';
3
5
  import * as _ngneers_controls_themes from '@ngneers/controls-themes';
4
6
  import { NgnBase } from '@ngneers/controls/base';
@@ -11,7 +13,7 @@ declare class NgnMessage extends NgnBase<'message'> {
11
13
  /**
12
14
  * Set an icon to display before the text.
13
15
  */
14
- readonly icon: i0.InputSignal<string | undefined>;
16
+ readonly icon: i0.InputSignal<_iconify_types.IconifyIcon | _ngneers_controls_custom_types.NgnIconEntry | undefined>;
15
17
  static ɵfac: i0.ɵɵFactoryDeclaration<NgnMessage, never>;
16
18
  static ɵcmp: i0.ɵɵComponentDeclaration<NgnMessage, "ngn-message", never, { "icon": { "alias": "icon"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
17
19
  }
@@ -76,10 +76,14 @@ declare class NgnPaginator extends NgnBase<'paginator'> {
76
76
  addCondition: string;
77
77
  removeCondition: string;
78
78
  clear: string;
79
+ apply: string;
80
+ cancel: string;
79
81
  matchModeLabel: string;
80
82
  match: {
81
83
  all: string;
82
84
  any: string;
85
+ and: string;
86
+ or: string;
83
87
  };
84
88
  selected: string;
85
89
  conditions: string;
@@ -31,7 +31,7 @@ type PopoverOptions = {
31
31
  * @category control
32
32
  */
33
33
  declare class NgnPopover extends NgnBase<'popover'> implements Openable {
34
- protected readonly theme: _ngneers_controls_api_ng.ControlTemplateInfo<_ngneers_controls_themes.ControlTemplate<"popover", ["root", "content", "content-closing", "anim-in", "anim-out"], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>>;
34
+ protected readonly theme: _ngneers_controls_api_ng.ControlTemplateInfo<_ngneers_controls_themes.ControlTemplate<"popover", ["root", "content", "content-closing"], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>>;
35
35
  /**
36
36
  * Emits when the popover has fully closed.
37
37
  */
@@ -76,6 +76,7 @@ declare class NgnPopover extends NgnBase<'popover'> implements Openable {
76
76
  padding?: number;
77
77
  }>;
78
78
  private readonly _injector;
79
+ private readonly _cdr;
79
80
  private readonly _popoverRef;
80
81
  private readonly _popover;
81
82
  private readonly _autoPos;
@@ -0,0 +1,16 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import * as _ngneers_controls_api_ng from '@ngneers/controls/api/ng';
3
+ import * as _ngneers_controls_themes from '@ngneers/controls-themes';
4
+
5
+ declare class NgnScrollShadow {
6
+ protected readonly theme: _ngneers_controls_api_ng.ControlTemplateInfo<_ngneers_controls_themes.ControlTemplate<"scrollShadow", ["root", "scrolled-start", "scrolled-end", "scrolled-top", "scrolled-bottom"], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>>;
7
+ private readonly _el;
8
+ private readonly _injector;
9
+ readonly ngnScrollShadow: _angular_core.InputSignal<"horizontal" | "vertical" | "both">;
10
+ readonly scrollShadowTarget: _angular_core.InputSignal<HTMLElement | undefined>;
11
+ constructor();
12
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgnScrollShadow, never>;
13
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<NgnScrollShadow, "[ngnScrollShadow]", never, { "ngnScrollShadow": { "alias": "ngnScrollShadow"; "required": false; "isSignal": true; }; "scrollShadowTarget": { "alias": "scrollShadowTarget"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
14
+ }
15
+
16
+ export { NgnScrollShadow };
@@ -86,8 +86,18 @@ declare class NgnScroller<T> extends ScrollerTemplates<T> {
86
86
  * If set, the scroller will stick the items with a truthy value for the specified field to the top of the scroller.
87
87
  */
88
88
  readonly fieldSticky: _angular_core.InputSignal<AllKeysOfUnion<T> | null>;
89
- private readonly _elementSize;
89
+ /**
90
+ * Viewport size — tracks the scroll ancestor's dimensions so that virtual
91
+ * scrolling works when an outer element handles overflow (e.g. table wrapper).
92
+ */
93
+ private readonly _viewportSize;
90
94
  private readonly _itemHeightPx;
95
+ /**
96
+ * Vertical offset between the scroll container's top and the scroller element.
97
+ * Non-zero when a parent (e.g. table wrapper) owns the scroll and the scroller
98
+ * is positioned below other content (e.g. a sticky header row).
99
+ */
100
+ private readonly _scrollOffset;
91
101
  private readonly _visibleItemCount;
92
102
  private readonly _scrollTop;
93
103
  /**
@@ -121,7 +131,7 @@ declare class NgnScroller<T> extends ScrollerTemplates<T> {
121
131
  index: number;
122
132
  }): unknown;
123
133
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgnScroller<any>, never>;
124
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgnScroller<any>, "ngn-scroller, [ngn-scroller]", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "fieldId": { "alias": "fieldId"; "required": false; "isSignal": true; }; "virtual": { "alias": "virtual"; "required": false; "isSignal": true; }; "itemHeight": { "alias": "itemHeight"; "required": false; "isSignal": true; }; "virtualPadding": { "alias": "virtualPadding"; "required": false; "isSignal": true; }; "focusable": { "alias": "focusable"; "required": false; "isSignal": true; }; "fieldSticky": { "alias": "fieldSticky"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1.NgnScrollAmount; inputs: {}; outputs: {}; }]>;
134
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgnScroller<any>, "ngn-scroller, [ngn-scroller]", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "fieldId": { "alias": "fieldId"; "required": false; "isSignal": true; }; "virtual": { "alias": "virtual"; "required": false; "isSignal": true; }; "itemHeight": { "alias": "itemHeight"; "required": false; "isSignal": true; }; "virtualPadding": { "alias": "virtualPadding"; "required": false; "isSignal": true; }; "focusable": { "alias": "focusable"; "required": false; "isSignal": true; }; "fieldSticky": { "alias": "fieldSticky"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1.NgnScrollAmount; inputs: { "scrollContainer": "scrollContainer"; }; outputs: {}; }]>;
125
135
  }
126
136
 
127
137
  declare class NgnScrollerItem implements AfterViewInit {
@@ -1,9 +1,11 @@
1
+ import * as _ngneers_controls_custom_types from '@ngneers/controls-custom-types';
2
+ import * as _iconify_types from '@iconify/types';
1
3
  import * as _angular_core from '@angular/core';
2
4
  import { TemplateRef, Signal } from '@angular/core';
3
5
  import * as _ngneers_signal_translate from '@ngneers/signal-translate';
4
6
  import * as _ngneers_controls_api_ng from '@ngneers/controls/api/ng';
5
7
  import * as _ngneers_controls_themes from '@ngneers/controls-themes';
6
- import { NgnItem, FilterConfig, FilterConfigInternal, FilterFn } from '@ngneers/controls/api';
8
+ import { NgnItem, FilterConfig, FilterFn, FilterConfigInternal } from '@ngneers/controls/api';
7
9
  import { PopoverOptions } from '@ngneers/controls/popover';
8
10
  import { InputGeneric, maybeCallback } from '@ngneers/controls/utils';
9
11
  import { ValueControlBase } from '@ngneers/controls/base';
@@ -106,7 +108,7 @@ type SelectFilterFn<T extends object> = FilterFn<NgnItem<T>>;
106
108
  * @category control
107
109
  */
108
110
  declare class NgnSelect<V, Editable extends boolean = false, Multiple extends boolean = false> extends SelectTemplates<V, Editable, Multiple> {
109
- protected readonly theme: _ngneers_controls_api_ng.ControlTemplateInfo<_ngneers_controls_themes.ControlTemplate<"select", ["root", "combobox", "input", "icon", "input-editable", "popover-content", "filter", "filter-icon", "list-box", "list-box-empty"], readonly [_ngneers_controls_themes.ControlTemplate<"popover", ["root", "content", "content-closing", "anim-in", "anim-out"], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>, _ngneers_controls_themes.ControlTemplate<"list-box", ["root", "empty", "invalid", "item", "group", "default-item", "default-group", "scroller", "item-selected", "item-highlighted"], readonly [_ngneers_controls_themes.ControlTemplate<"checkbox", ["root", "input", "box", "box-checked", "box-indeterminate", "box-icon", "anim-box-icon-enter", "anim-box-icon-leave", "invalid"], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>, _ngneers_controls_themes.ControlTemplate<"scroller", ["root", "virtual", "item", "item-sticky"], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>]>, _ngneers_controls_themes.ControlTemplate<"input-field", ["root", "host", "disabled", "readonly", "invalid", "label", "clear-button", `labelKind-${string}`], readonly [_ngneers_controls_themes.ControlTemplate<"input", ["root", "invalid", "empty"], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>]>]>>;
111
+ protected readonly theme: _ngneers_controls_api_ng.ControlTemplateInfo<_ngneers_controls_themes.ControlTemplate<"select", ["root", "combobox", "input", "icon", "input-editable", "popover-content", "filter", "filter-icon", "list-box", "list-box-empty"], readonly [_ngneers_controls_themes.ControlTemplate<"popover", ["root", "content", "content-closing"], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>, _ngneers_controls_themes.ControlTemplate<"list-box", ["root", "empty", "invalid", "item", "group", "default-item", "default-group", "scroller", "item-selected", "item-highlighted"], readonly [_ngneers_controls_themes.ControlTemplate<"checkbox", ["root", "input", "box", "box-checked", "box-indeterminate", "box-icon", "box-icon-visible", "invalid"], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>, _ngneers_controls_themes.ControlTemplate<"scroller", ["root", "virtual", "item", "item-sticky"], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>]>, _ngneers_controls_themes.ControlTemplate<"input-field", ["root", "host", "disabled", "readonly", "invalid", "label", "clear-button", `labelKind-${string}`], readonly [_ngneers_controls_themes.ControlTemplate<"input", ["root", "invalid", "empty"], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>]>]>>;
110
112
  protected readonly i18n: _ngneers_signal_translate.TranslationsSignal<{
111
113
  calendar: {
112
114
  today: string;
@@ -152,10 +154,14 @@ declare class NgnSelect<V, Editable extends boolean = false, Multiple extends bo
152
154
  addCondition: string;
153
155
  removeCondition: string;
154
156
  clear: string;
157
+ apply: string;
158
+ cancel: string;
155
159
  matchModeLabel: string;
156
160
  match: {
157
161
  all: string;
158
162
  any: string;
163
+ and: string;
164
+ or: string;
159
165
  };
160
166
  selected: string;
161
167
  conditions: string;
@@ -198,14 +204,7 @@ declare class NgnSelect<V, Editable extends boolean = false, Multiple extends bo
198
204
  * Options for the popover.
199
205
  */
200
206
  readonly popoverOptions: _angular_core.InputSignal<PopoverOptions>;
201
- protected readonly appliedPopoverOptions: Signal<{
202
- sizeConstraints: {
203
- width: number;
204
- maxWidth: number;
205
- minHeight: string;
206
- maxHeight: string;
207
- };
208
- } & PopoverOptions>;
207
+ protected readonly appliedPopoverOptions: Signal<PopoverOptions>;
209
208
  /**
210
209
  * The available options to choose from. They can either be
211
210
  * * A list of {@link NgnItem} objects
@@ -225,11 +224,11 @@ declare class NgnSelect<V, Editable extends boolean = false, Multiple extends bo
225
224
  /**
226
225
  * The icon to display in the filter input.
227
226
  */
228
- readonly filterIcon: _angular_core.InputSignal<string | undefined>;
227
+ readonly filterIcon: _angular_core.InputSignal<_iconify_types.IconifyIcon | _ngneers_controls_custom_types.NgnIconEntry | undefined>;
229
228
  /**
230
229
  * The icon to display in the dropdown.
231
230
  */
232
- readonly dropdownIcon: _angular_core.InputSignal<string | undefined>;
231
+ readonly dropdownIcon: _angular_core.InputSignal<_iconify_types.IconifyIcon | _ngneers_controls_custom_types.NgnIconEntry | undefined>;
233
232
  /**
234
233
  * Whether the select is virtualized.
235
234
  * @default `false`
@@ -1,5 +1,5 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { Injector, ElementRef, Signal } from '@angular/core';
2
+ import { ElementRef, Signal, Injector } from '@angular/core';
3
3
  import { CustomColor } from '@ngneers/controls-custom-types';
4
4
  import * as _ngneers_controls_api_ng from '@ngneers/controls/api/ng';
5
5
  import * as _ngneers_controls_themes from '@ngneers/controls-themes';