@ngneers/controls 0.0.1-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/fesm2022/ngneers-controls-accordion.mjs +234 -0
  2. package/fesm2022/ngneers-controls-accordion.mjs.map +1 -0
  3. package/fesm2022/ngneers-controls-api-ng.mjs +959 -0
  4. package/fesm2022/ngneers-controls-api-ng.mjs.map +1 -0
  5. package/fesm2022/ngneers-controls-api-resize.mjs +712 -0
  6. package/fesm2022/ngneers-controls-api-resize.mjs.map +1 -0
  7. package/fesm2022/ngneers-controls-api.mjs +347 -0
  8. package/fesm2022/ngneers-controls-api.mjs.map +1 -0
  9. package/fesm2022/ngneers-controls-avatar.mjs +77 -0
  10. package/fesm2022/ngneers-controls-avatar.mjs.map +1 -0
  11. package/fesm2022/ngneers-controls-base.mjs +620 -0
  12. package/fesm2022/ngneers-controls-base.mjs.map +1 -0
  13. package/fesm2022/ngneers-controls-breadcrumb.mjs +100 -0
  14. package/fesm2022/ngneers-controls-breadcrumb.mjs.map +1 -0
  15. package/fesm2022/ngneers-controls-button-group.mjs +110 -0
  16. package/fesm2022/ngneers-controls-button-group.mjs.map +1 -0
  17. package/fesm2022/ngneers-controls-button.mjs +83 -0
  18. package/fesm2022/ngneers-controls-button.mjs.map +1 -0
  19. package/fesm2022/ngneers-controls-calendar-time-CJT5AFlA.mjs +74 -0
  20. package/fesm2022/ngneers-controls-calendar-time-CJT5AFlA.mjs.map +1 -0
  21. package/fesm2022/ngneers-controls-calendar.mjs +801 -0
  22. package/fesm2022/ngneers-controls-calendar.mjs.map +1 -0
  23. package/fesm2022/ngneers-controls-checkbox.mjs +63 -0
  24. package/fesm2022/ngneers-controls-checkbox.mjs.map +1 -0
  25. package/fesm2022/ngneers-controls-chip.mjs +55 -0
  26. package/fesm2022/ngneers-controls-chip.mjs.map +1 -0
  27. package/fesm2022/ngneers-controls-default-icons.mjs +82 -0
  28. package/fesm2022/ngneers-controls-default-icons.mjs.map +1 -0
  29. package/fesm2022/ngneers-controls-defer.mjs +72 -0
  30. package/fesm2022/ngneers-controls-defer.mjs.map +1 -0
  31. package/fesm2022/ngneers-controls-dialog.mjs +407 -0
  32. package/fesm2022/ngneers-controls-dialog.mjs.map +1 -0
  33. package/fesm2022/ngneers-controls-directives.mjs +498 -0
  34. package/fesm2022/ngneers-controls-directives.mjs.map +1 -0
  35. package/fesm2022/ngneers-controls-drawer.mjs +271 -0
  36. package/fesm2022/ngneers-controls-drawer.mjs.map +1 -0
  37. package/fesm2022/ngneers-controls-edit-inplace.mjs +127 -0
  38. package/fesm2022/ngneers-controls-edit-inplace.mjs.map +1 -0
  39. package/fesm2022/ngneers-controls-errors.mjs +329 -0
  40. package/fesm2022/ngneers-controls-errors.mjs.map +1 -0
  41. package/fesm2022/ngneers-controls-filter.mjs +708 -0
  42. package/fesm2022/ngneers-controls-filter.mjs.map +1 -0
  43. package/fesm2022/ngneers-controls-hint.mjs +153 -0
  44. package/fesm2022/ngneers-controls-hint.mjs.map +1 -0
  45. package/fesm2022/ngneers-controls-i18n-translations-de.mjs +170 -0
  46. package/fesm2022/ngneers-controls-i18n-translations-de.mjs.map +1 -0
  47. package/fesm2022/ngneers-controls-i18n-translations-en.mjs +170 -0
  48. package/fesm2022/ngneers-controls-i18n-translations-en.mjs.map +1 -0
  49. package/fesm2022/ngneers-controls-i18n.mjs +57 -0
  50. package/fesm2022/ngneers-controls-i18n.mjs.map +1 -0
  51. package/fesm2022/ngneers-controls-icon.mjs +195 -0
  52. package/fesm2022/ngneers-controls-icon.mjs.map +1 -0
  53. package/fesm2022/ngneers-controls-inplace.mjs +150 -0
  54. package/fesm2022/ngneers-controls-inplace.mjs.map +1 -0
  55. package/fesm2022/ngneers-controls-input-field.mjs +165 -0
  56. package/fesm2022/ngneers-controls-input-field.mjs.map +1 -0
  57. package/fesm2022/ngneers-controls-input.mjs +72 -0
  58. package/fesm2022/ngneers-controls-input.mjs.map +1 -0
  59. package/fesm2022/ngneers-controls-item-view.mjs +473 -0
  60. package/fesm2022/ngneers-controls-item-view.mjs.map +1 -0
  61. package/fesm2022/ngneers-controls-list-box.mjs +281 -0
  62. package/fesm2022/ngneers-controls-list-box.mjs.map +1 -0
  63. package/fesm2022/ngneers-controls-mask-input.mjs +888 -0
  64. package/fesm2022/ngneers-controls-mask-input.mjs.map +1 -0
  65. package/fesm2022/ngneers-controls-menu.mjs +371 -0
  66. package/fesm2022/ngneers-controls-menu.mjs.map +1 -0
  67. package/fesm2022/ngneers-controls-message.mjs +30 -0
  68. package/fesm2022/ngneers-controls-message.mjs.map +1 -0
  69. package/fesm2022/ngneers-controls-number-input.mjs +366 -0
  70. package/fesm2022/ngneers-controls-number-input.mjs.map +1 -0
  71. package/fesm2022/ngneers-controls-paginator.mjs +129 -0
  72. package/fesm2022/ngneers-controls-paginator.mjs.map +1 -0
  73. package/fesm2022/ngneers-controls-popover.mjs +215 -0
  74. package/fesm2022/ngneers-controls-popover.mjs.map +1 -0
  75. package/fesm2022/ngneers-controls-progress.mjs +98 -0
  76. package/fesm2022/ngneers-controls-progress.mjs.map +1 -0
  77. package/fesm2022/ngneers-controls-radio.mjs +152 -0
  78. package/fesm2022/ngneers-controls-radio.mjs.map +1 -0
  79. package/fesm2022/ngneers-controls-roving-focus.mjs +323 -0
  80. package/fesm2022/ngneers-controls-roving-focus.mjs.map +1 -0
  81. package/fesm2022/ngneers-controls-scroll-shadow.mjs +65 -0
  82. package/fesm2022/ngneers-controls-scroll-shadow.mjs.map +1 -0
  83. package/fesm2022/ngneers-controls-scroller.mjs +308 -0
  84. package/fesm2022/ngneers-controls-scroller.mjs.map +1 -0
  85. package/fesm2022/ngneers-controls-select-button.mjs +58 -0
  86. package/fesm2022/ngneers-controls-select-button.mjs.map +1 -0
  87. package/fesm2022/ngneers-controls-select.mjs +417 -0
  88. package/fesm2022/ngneers-controls-select.mjs.map +1 -0
  89. package/fesm2022/ngneers-controls-slider.mjs +167 -0
  90. package/fesm2022/ngneers-controls-slider.mjs.map +1 -0
  91. package/fesm2022/ngneers-controls-snackbar.mjs +414 -0
  92. package/fesm2022/ngneers-controls-snackbar.mjs.map +1 -0
  93. package/fesm2022/ngneers-controls-spin-buttons.mjs +126 -0
  94. package/fesm2022/ngneers-controls-spin-buttons.mjs.map +1 -0
  95. package/fesm2022/ngneers-controls-spinner.mjs +184 -0
  96. package/fesm2022/ngneers-controls-spinner.mjs.map +1 -0
  97. package/fesm2022/ngneers-controls-splitter.mjs +604 -0
  98. package/fesm2022/ngneers-controls-splitter.mjs.map +1 -0
  99. package/fesm2022/ngneers-controls-state.mjs +185 -0
  100. package/fesm2022/ngneers-controls-state.mjs.map +1 -0
  101. package/fesm2022/ngneers-controls-switch.mjs +39 -0
  102. package/fesm2022/ngneers-controls-switch.mjs.map +1 -0
  103. package/fesm2022/ngneers-controls-table.mjs +2634 -0
  104. package/fesm2022/ngneers-controls-table.mjs.map +1 -0
  105. package/fesm2022/ngneers-controls-tabs.mjs +336 -0
  106. package/fesm2022/ngneers-controls-tabs.mjs.map +1 -0
  107. package/fesm2022/ngneers-controls-tag.mjs +30 -0
  108. package/fesm2022/ngneers-controls-tag.mjs.map +1 -0
  109. package/fesm2022/ngneers-controls-toast.mjs +350 -0
  110. package/fesm2022/ngneers-controls-toast.mjs.map +1 -0
  111. package/fesm2022/ngneers-controls-toggle-button.mjs +70 -0
  112. package/fesm2022/ngneers-controls-toggle-button.mjs.map +1 -0
  113. package/fesm2022/ngneers-controls-tooltip.mjs +506 -0
  114. package/fesm2022/ngneers-controls-tooltip.mjs.map +1 -0
  115. package/fesm2022/ngneers-controls-tree.mjs +599 -0
  116. package/fesm2022/ngneers-controls-tree.mjs.map +1 -0
  117. package/fesm2022/ngneers-controls-upload.mjs +377 -0
  118. package/fesm2022/ngneers-controls-upload.mjs.map +1 -0
  119. package/fesm2022/ngneers-controls-utils-ng.mjs +411 -0
  120. package/fesm2022/ngneers-controls-utils-ng.mjs.map +1 -0
  121. package/fesm2022/ngneers-controls-utils.mjs +261 -0
  122. package/fesm2022/ngneers-controls-utils.mjs.map +1 -0
  123. package/fesm2022/ngneers-controls.mjs +6 -0
  124. package/fesm2022/ngneers-controls.mjs.map +1 -0
  125. package/package.json +302 -0
  126. package/types/ngneers-controls-accordion.d.ts +139 -0
  127. package/types/ngneers-controls-api-ng.d.ts +364 -0
  128. package/types/ngneers-controls-api-resize.d.ts +318 -0
  129. package/types/ngneers-controls-api.d.ts +145 -0
  130. package/types/ngneers-controls-avatar.d.ts +54 -0
  131. package/types/ngneers-controls-base.d.ts +277 -0
  132. package/types/ngneers-controls-breadcrumb.d.ts +272 -0
  133. package/types/ngneers-controls-button-group.d.ts +46 -0
  134. package/types/ngneers-controls-button.d.ts +48 -0
  135. package/types/ngneers-controls-calendar.d.ts +466 -0
  136. package/types/ngneers-controls-checkbox.d.ts +40 -0
  137. package/types/ngneers-controls-chip.d.ts +202 -0
  138. package/types/ngneers-controls-default-icons.d.ts +5 -0
  139. package/types/ngneers-controls-defer.d.ts +48 -0
  140. package/types/ngneers-controls-dialog.d.ts +399 -0
  141. package/types/ngneers-controls-directives.d.ts +171 -0
  142. package/types/ngneers-controls-drawer.d.ts +308 -0
  143. package/types/ngneers-controls-edit-inplace.d.ts +263 -0
  144. package/types/ngneers-controls-errors.d.ts +155 -0
  145. package/types/ngneers-controls-filter.d.ts +609 -0
  146. package/types/ngneers-controls-hint.d.ts +88 -0
  147. package/types/ngneers-controls-i18n-translations-de.d.ts +164 -0
  148. package/types/ngneers-controls-i18n-translations-en.d.ts +164 -0
  149. package/types/ngneers-controls-i18n.d.ts +186 -0
  150. package/types/ngneers-controls-icon.d.ts +68 -0
  151. package/types/ngneers-controls-inplace.d.ts +98 -0
  152. package/types/ngneers-controls-input-field.d.ts +248 -0
  153. package/types/ngneers-controls-input.d.ts +30 -0
  154. package/types/ngneers-controls-item-view.d.ts +215 -0
  155. package/types/ngneers-controls-list-box.d.ts +334 -0
  156. package/types/ngneers-controls-mask-input.d.ts +434 -0
  157. package/types/ngneers-controls-menu.d.ts +192 -0
  158. package/types/ngneers-controls-message.d.ts +21 -0
  159. package/types/ngneers-controls-number-input.d.ts +146 -0
  160. package/types/ngneers-controls-paginator.d.ts +255 -0
  161. package/types/ngneers-controls-popover.d.ts +116 -0
  162. package/types/ngneers-controls-progress.d.ts +49 -0
  163. package/types/ngneers-controls-radio.d.ts +91 -0
  164. package/types/ngneers-controls-roving-focus.d.ts +107 -0
  165. package/types/ngneers-controls-scroll-shadow.d.ts +25 -0
  166. package/types/ngneers-controls-scroller.d.ts +151 -0
  167. package/types/ngneers-controls-select-button.d.ts +51 -0
  168. package/types/ngneers-controls-select.d.ts +409 -0
  169. package/types/ngneers-controls-slider.d.ts +57 -0
  170. package/types/ngneers-controls-snackbar.d.ts +330 -0
  171. package/types/ngneers-controls-spin-buttons.d.ts +69 -0
  172. package/types/ngneers-controls-spinner.d.ts +117 -0
  173. package/types/ngneers-controls-splitter.d.ts +465 -0
  174. package/types/ngneers-controls-state.d.ts +102 -0
  175. package/types/ngneers-controls-switch.d.ts +18 -0
  176. package/types/ngneers-controls-table.d.ts +3127 -0
  177. package/types/ngneers-controls-tabs.d.ts +118 -0
  178. package/types/ngneers-controls-tag.d.ts +21 -0
  179. package/types/ngneers-controls-toast.d.ts +298 -0
  180. package/types/ngneers-controls-toggle-button.d.ts +48 -0
  181. package/types/ngneers-controls-tooltip.d.ts +189 -0
  182. package/types/ngneers-controls-tree.d.ts +409 -0
  183. package/types/ngneers-controls-upload.d.ts +347 -0
  184. package/types/ngneers-controls-utils-ng.d.ts +129 -0
  185. package/types/ngneers-controls-utils.d.ts +130 -0
  186. package/types/ngneers-controls.d.ts +2 -0
@@ -0,0 +1,609 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import * as _ngneers_signal_translate from '@ngneers/signal-translate';
3
+ import * as _ngneers_controls_api_ng from '@ngneers/controls/api/ng';
4
+ import { Anchor } from '@ngneers/controls/api/ng';
5
+ import * as _ngneers_controls_themes from '@ngneers/controls-themes';
6
+ import { NgnItem } from '@ngneers/controls/api';
7
+ import { ValueControlBase } from '@ngneers/controls/base';
8
+ import { PopoverOptions } from '@ngneers/controls/popover';
9
+
10
+ type NgnFilterDataType = 'string' | 'number' | 'date' | 'dateTime' | 'boolean' | 'custom' | 'list';
11
+ type NgnFilterMode = 'inline' | 'input' | 'headless';
12
+ type NgnFilterMatchMode = 'any' | 'all';
13
+ type NgnFilterOperatorId = 'isEqual' | 'isNotEqual' | 'contains' | 'startsWith' | 'endsWith' | 'in' | 'isEmpty' | 'isNotEmpty' | 'greaterThan' | 'greaterThanOrEqual' | 'lessThan' | 'lessThanOrEqual' | 'isTrue' | 'isFalse' | 'custom';
14
+ /**
15
+ * A single configured filter condition.
16
+ * This is intentionally data-free and serializable (useful for server-side filtering).
17
+ */
18
+ type NgnFilterConditionConfig = {
19
+ operator: NgnFilterOperatorId;
20
+ /** Raw user-entered value (string from the input), or null when empty. */
21
+ rawValue: string | null;
22
+ };
23
+ /**
24
+ * Complete filter configuration without any actual dataset/result.
25
+ */
26
+ type NgnFilterConfig = {
27
+ /** The chosen datatype for the filter value. */
28
+ dataType: NgnFilterDataType;
29
+ /** How multiple conditions should be combined. */
30
+ matchMode: NgnFilterMatchMode;
31
+ /** Configured conditions (may include empty values depending on operator). */
32
+ conditions: readonly NgnFilterConditionConfig[];
33
+ };
34
+ type NgnFilterCondition = {
35
+ operator: NgnFilterOperatorId;
36
+ value: unknown;
37
+ };
38
+ /**
39
+ * Full client-side filter result (configuration + filtered dataset).
40
+ * Prefer {@link NgnFilterConfig} when you only need the config.
41
+ */
42
+ type NgnFilterOutput<T> = NgnFilterConfig & {
43
+ /** The active (parsed) conditions used for local evaluation. */
44
+ activeConditions: readonly NgnFilterCondition[];
45
+ /** The filtered data result. */
46
+ filtered: readonly T[];
47
+ };
48
+
49
+ /**
50
+ * @category control
51
+ */
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", "summary", "icon", "popover-content", "rows", "row", "condition-divider", "footer", "footer-actions", "active-indicator"], readonly [{
54
+ readonly class: "popover";
55
+ readonly template: _ngneers_controls_themes.ControlTemplate<"popover", ["root", "content", "content-closing"], readonly []>;
56
+ }, {
57
+ readonly class: "input-field";
58
+ readonly template: _ngneers_controls_themes.ControlTemplate<"input-field", ["root", "host", "disabled", "readonly", "invalid", "label", "clear-button", `labelKind-${string}`], readonly [{
59
+ readonly class: "input";
60
+ readonly template: _ngneers_controls_themes.ControlTemplate<"input", ["root", "invalid", "empty"], readonly []>;
61
+ readonly projected: true;
62
+ }]>;
63
+ }, {
64
+ readonly class: "value";
65
+ readonly template: _ngneers_controls_themes.ControlTemplate<"input-field", ["root", "host", "disabled", "readonly", "invalid", "label", "clear-button", `labelKind-${string}`], readonly [{
66
+ readonly class: "input";
67
+ readonly template: _ngneers_controls_themes.ControlTemplate<"input", ["root", "invalid", "empty"], readonly []>;
68
+ readonly projected: true;
69
+ }]>;
70
+ }, {
71
+ readonly class: "operator";
72
+ readonly template: _ngneers_controls_themes.ControlTemplate<"input-field", ["root", "host", "disabled", "readonly", "invalid", "label", "clear-button", `labelKind-${string}`], readonly [{
73
+ readonly class: "input";
74
+ readonly template: _ngneers_controls_themes.ControlTemplate<"input", ["root", "invalid", "empty"], readonly []>;
75
+ readonly projected: true;
76
+ }]>;
77
+ }, {
78
+ readonly class: "list-select";
79
+ readonly template: _ngneers_controls_themes.ControlTemplate<"select", ["root", "combobox", "input", "icon", "input-editable", "popover-content", "filter-icon", "list-box-empty"], readonly [{
80
+ readonly class: "popover";
81
+ readonly template: _ngneers_controls_themes.ControlTemplate<"popover", ["root", "content", "content-closing"], readonly []>;
82
+ }, {
83
+ readonly class: "list-box";
84
+ readonly template: _ngneers_controls_themes.ControlTemplate<"list-box", ["root", "empty", "invalid", "item", "group", "default-item", "default-group", "item-selected", "item-highlighted", "item-disabled"], readonly [{
85
+ readonly class: "checkbox";
86
+ readonly template: _ngneers_controls_themes.ControlTemplate<"checkbox", ["root", "input", "box", "box-checked", "box-indeterminate", "box-icon", "box-icon-visible", "invalid"], readonly []>;
87
+ }, {
88
+ readonly class: "scroller";
89
+ readonly template: _ngneers_controls_themes.ControlTemplate<"scroller", ["root", "virtual", "item", "item-sticky"], readonly []>;
90
+ }]>;
91
+ }, {
92
+ readonly class: "filter";
93
+ readonly template: _ngneers_controls_themes.ControlTemplate<"input-field", ["root", "host", "disabled", "readonly", "invalid", "label", "clear-button", `labelKind-${string}`], readonly [{
94
+ readonly class: "input";
95
+ readonly template: _ngneers_controls_themes.ControlTemplate<"input", ["root", "invalid", "empty"], readonly []>;
96
+ readonly projected: true;
97
+ }]>;
98
+ }]>;
99
+ }, {
100
+ readonly class: "operator-select";
101
+ readonly template: _ngneers_controls_themes.ControlTemplate<"select", ["root", "combobox", "input", "icon", "input-editable", "popover-content", "filter-icon", "list-box-empty"], readonly [{
102
+ readonly class: "popover";
103
+ readonly template: _ngneers_controls_themes.ControlTemplate<"popover", ["root", "content", "content-closing"], readonly []>;
104
+ }, {
105
+ readonly class: "list-box";
106
+ readonly template: _ngneers_controls_themes.ControlTemplate<"list-box", ["root", "empty", "invalid", "item", "group", "default-item", "default-group", "item-selected", "item-highlighted", "item-disabled"], readonly [{
107
+ readonly class: "checkbox";
108
+ readonly template: _ngneers_controls_themes.ControlTemplate<"checkbox", ["root", "input", "box", "box-checked", "box-indeterminate", "box-icon", "box-icon-visible", "invalid"], readonly []>;
109
+ }, {
110
+ readonly class: "scroller";
111
+ readonly template: _ngneers_controls_themes.ControlTemplate<"scroller", ["root", "virtual", "item", "item-sticky"], readonly []>;
112
+ }]>;
113
+ }, {
114
+ readonly class: "filter";
115
+ readonly template: _ngneers_controls_themes.ControlTemplate<"input-field", ["root", "host", "disabled", "readonly", "invalid", "label", "clear-button", `labelKind-${string}`], readonly [{
116
+ readonly class: "input";
117
+ readonly template: _ngneers_controls_themes.ControlTemplate<"input", ["root", "invalid", "empty"], readonly []>;
118
+ readonly projected: true;
119
+ }]>;
120
+ }]>;
121
+ }, {
122
+ readonly class: "calendar";
123
+ readonly template: _ngneers_controls_themes.ControlTemplate<"calendar", ["root", "inline", "invalid", "details", "header", "navigation", "days", "week-day", "day", "day-selected", "day-today", "day-other-month", "months", "month", "time", "input-field"], readonly [{
124
+ readonly class: "input";
125
+ readonly template: _ngneers_controls_themes.ControlTemplate<"mask-input", ["root", "section", "section-active", "section-placeholder", "separator", "proxy", "sr-only"], readonly []>;
126
+ }, {
127
+ readonly class: "trigger-icon";
128
+ readonly template: _ngneers_controls_themes.ControlTemplate<"icon", ["root", "default"], readonly []>;
129
+ }, {
130
+ readonly class: "popover";
131
+ readonly template: _ngneers_controls_themes.ControlTemplate<"popover", ["root", "content", "content-closing"], readonly []>;
132
+ }, {
133
+ readonly class: "previous";
134
+ readonly template: _ngneers_controls_themes.ControlTemplate<"button", ["root", "inline", "loading", `kind-${string}`, `color-${string}`], readonly []>;
135
+ }, {
136
+ readonly class: "next";
137
+ readonly template: _ngneers_controls_themes.ControlTemplate<"button", ["root", "inline", "loading", `kind-${string}`, `color-${string}`], readonly []>;
138
+ }, {
139
+ readonly class: "current-month";
140
+ readonly template: _ngneers_controls_themes.ControlTemplate<"select", ["root", "combobox", "input", "icon", "input-editable", "popover-content", "filter-icon", "list-box-empty"], readonly [{
141
+ readonly class: "popover";
142
+ readonly template: _ngneers_controls_themes.ControlTemplate<"popover", ["root", "content", "content-closing"], readonly []>;
143
+ }, {
144
+ readonly class: "list-box";
145
+ readonly template: _ngneers_controls_themes.ControlTemplate<"list-box", ["root", "empty", "invalid", "item", "group", "default-item", "default-group", "item-selected", "item-highlighted", "item-disabled"], readonly [{
146
+ readonly class: "checkbox";
147
+ readonly template: _ngneers_controls_themes.ControlTemplate<"checkbox", ["root", "input", "box", "box-checked", "box-indeterminate", "box-icon", "box-icon-visible", "invalid"], readonly []>;
148
+ }, {
149
+ readonly class: "scroller";
150
+ readonly template: _ngneers_controls_themes.ControlTemplate<"scroller", ["root", "virtual", "item", "item-sticky"], readonly []>;
151
+ }]>;
152
+ }, {
153
+ readonly class: "filter";
154
+ readonly template: _ngneers_controls_themes.ControlTemplate<"input-field", ["root", "host", "disabled", "readonly", "invalid", "label", "clear-button", `labelKind-${string}`], readonly [{
155
+ readonly class: "input";
156
+ readonly template: _ngneers_controls_themes.ControlTemplate<"input", ["root", "invalid", "empty"], readonly []>;
157
+ readonly projected: true;
158
+ }]>;
159
+ }]>;
160
+ }, {
161
+ readonly class: "current-year";
162
+ readonly template: _ngneers_controls_themes.ControlTemplate<"select", ["root", "combobox", "input", "icon", "input-editable", "popover-content", "filter-icon", "list-box-empty"], readonly [{
163
+ readonly class: "popover";
164
+ readonly template: _ngneers_controls_themes.ControlTemplate<"popover", ["root", "content", "content-closing"], readonly []>;
165
+ }, {
166
+ readonly class: "list-box";
167
+ readonly template: _ngneers_controls_themes.ControlTemplate<"list-box", ["root", "empty", "invalid", "item", "group", "default-item", "default-group", "item-selected", "item-highlighted", "item-disabled"], readonly [{
168
+ readonly class: "checkbox";
169
+ readonly template: _ngneers_controls_themes.ControlTemplate<"checkbox", ["root", "input", "box", "box-checked", "box-indeterminate", "box-icon", "box-icon-visible", "invalid"], readonly []>;
170
+ }, {
171
+ readonly class: "scroller";
172
+ readonly template: _ngneers_controls_themes.ControlTemplate<"scroller", ["root", "virtual", "item", "item-sticky"], readonly []>;
173
+ }]>;
174
+ }, {
175
+ readonly class: "filter";
176
+ readonly template: _ngneers_controls_themes.ControlTemplate<"input-field", ["root", "host", "disabled", "readonly", "invalid", "label", "clear-button", `labelKind-${string}`], readonly [{
177
+ readonly class: "input";
178
+ readonly template: _ngneers_controls_themes.ControlTemplate<"input", ["root", "invalid", "empty"], readonly []>;
179
+ readonly projected: true;
180
+ }]>;
181
+ }]>;
182
+ }, {
183
+ readonly class: "current-month-field";
184
+ readonly template: _ngneers_controls_themes.ControlTemplate<"input-field", ["root", "host", "disabled", "readonly", "invalid", "label", "clear-button", `labelKind-${string}`], readonly [{
185
+ readonly class: "input";
186
+ readonly template: _ngneers_controls_themes.ControlTemplate<"input", ["root", "invalid", "empty"], readonly []>;
187
+ readonly projected: true;
188
+ }]>;
189
+ }, {
190
+ readonly class: "current-year-field";
191
+ readonly template: _ngneers_controls_themes.ControlTemplate<"input-field", ["root", "host", "disabled", "readonly", "invalid", "label", "clear-button", `labelKind-${string}`], readonly [{
192
+ readonly class: "input";
193
+ readonly template: _ngneers_controls_themes.ControlTemplate<"input", ["root", "invalid", "empty"], readonly []>;
194
+ readonly projected: true;
195
+ }]>;
196
+ }]>;
197
+ }, {
198
+ readonly class: "input";
199
+ readonly template: _ngneers_controls_themes.ControlTemplate<"input", ["root", "invalid", "empty"], readonly []>;
200
+ }, {
201
+ readonly class: "remove-btn";
202
+ readonly template: _ngneers_controls_themes.ControlTemplate<"button", ["root", "inline", "loading", `kind-${string}`, `color-${string}`], readonly []>;
203
+ }, {
204
+ readonly class: "add-button";
205
+ readonly template: _ngneers_controls_themes.ControlTemplate<"button", ["root", "inline", "loading", `kind-${string}`, `color-${string}`], readonly []>;
206
+ }, {
207
+ readonly class: "cancel-button";
208
+ readonly template: _ngneers_controls_themes.ControlTemplate<"button", ["root", "inline", "loading", `kind-${string}`, `color-${string}`], readonly []>;
209
+ }, {
210
+ readonly class: "apply-button";
211
+ readonly template: _ngneers_controls_themes.ControlTemplate<"button", ["root", "inline", "loading", `kind-${string}`, `color-${string}`], readonly []>;
212
+ }, {
213
+ readonly class: "clear-button";
214
+ readonly template: _ngneers_controls_themes.ControlTemplate<"button", ["root", "inline", "loading", `kind-${string}`, `color-${string}`], readonly []>;
215
+ }]>>;
216
+ private readonly _i18n;
217
+ protected readonly i18n: _ngneers_signal_translate.TranslationsSignal<{
218
+ calendar: {
219
+ today: string;
220
+ input: string;
221
+ selectYear: string;
222
+ selectMonth: string;
223
+ previousMonth: string;
224
+ nextMonth: string;
225
+ weekdays: {
226
+ monday: string;
227
+ tuesday: string;
228
+ wednesday: string;
229
+ thursday: string;
230
+ friday: string;
231
+ saturday: string;
232
+ sunday: string;
233
+ };
234
+ weekdaysShort: {
235
+ monday: string;
236
+ tuesday: string;
237
+ wednesday: string;
238
+ thursday: string;
239
+ friday: string;
240
+ saturday: string;
241
+ sunday: string;
242
+ };
243
+ months: {
244
+ january: string;
245
+ february: string;
246
+ march: string;
247
+ april: string;
248
+ may: string;
249
+ june: string;
250
+ july: string;
251
+ august: string;
252
+ september: string;
253
+ october: string;
254
+ november: string;
255
+ december: string;
256
+ };
257
+ };
258
+ editInplace: {
259
+ placeholder: string;
260
+ confirm: string;
261
+ };
262
+ filter: {
263
+ noFilter: string;
264
+ addCondition: string;
265
+ removeCondition: string;
266
+ operator: string;
267
+ value: string;
268
+ clear: string;
269
+ apply: string;
270
+ cancel: string;
271
+ matchModeLabel: string;
272
+ match: {
273
+ all: string;
274
+ any: string;
275
+ and: string;
276
+ or: string;
277
+ };
278
+ selected: string;
279
+ conditions: string;
280
+ operators: {
281
+ isEqual: string;
282
+ isNotEqual: string;
283
+ contains: string;
284
+ startsWith: string;
285
+ endsWith: string;
286
+ in: string;
287
+ isEmpty: string;
288
+ isNotEmpty: string;
289
+ greaterThan: string;
290
+ greaterThanOrEqual: string;
291
+ lessThan: string;
292
+ lessThanOrEqual: string;
293
+ after: string;
294
+ onOrAfter: string;
295
+ before: string;
296
+ onOrBefore: string;
297
+ isTrue: string;
298
+ isFalse: string;
299
+ custom: string;
300
+ };
301
+ };
302
+ splitter: {
303
+ handleLabel: string;
304
+ };
305
+ inputField: {
306
+ clearInput: string;
307
+ };
308
+ maskInput: {
309
+ roleDescription: string;
310
+ segmentRange: string;
311
+ optionSeparator: string;
312
+ };
313
+ drawer: {
314
+ close: string;
315
+ };
316
+ dialog: {
317
+ close: string;
318
+ };
319
+ chip: {
320
+ close: string;
321
+ };
322
+ breadcrumb: {
323
+ overflow: string;
324
+ };
325
+ toast: {
326
+ close: string;
327
+ region: string;
328
+ };
329
+ snackbar: {
330
+ close: string;
331
+ region: string;
332
+ severity: {
333
+ error: string;
334
+ warning: string;
335
+ success: string;
336
+ info: string;
337
+ };
338
+ };
339
+ upload: {
340
+ upload: string;
341
+ uploadNamed: string;
342
+ retryNamed: string;
343
+ cancelNamed: string;
344
+ removeNamed: string;
345
+ progressNamed: string;
346
+ };
347
+ select: {
348
+ filterOptions: string;
349
+ };
350
+ paginator: {
351
+ previousPage: string;
352
+ nextPage: string;
353
+ };
354
+ listBox: {
355
+ noItemsFound: string;
356
+ };
357
+ tree: {
358
+ noItemsFound: string;
359
+ };
360
+ table: {
361
+ selectAllRows: string;
362
+ selectRow: string;
363
+ sortedBy: string;
364
+ sortAscending: string;
365
+ sortDescending: string;
366
+ sortCleared: string;
367
+ selectedCount: string;
368
+ page: string;
369
+ resultCount: string;
370
+ };
371
+ state: {
372
+ loading: string;
373
+ success: string;
374
+ warning: string;
375
+ error: string;
376
+ cancelled: string;
377
+ };
378
+ }, "_">;
379
+ protected readonly unsafeI18n: (key: string) => _angular_core.Signal<string>;
380
+ private readonly _destroyRef;
381
+ /**
382
+ * Data to filter.
383
+ * @default []
384
+ */
385
+ readonly data: _angular_core.InputSignal<readonly T[]>;
386
+ /**
387
+ * Datatype of the values in {@link data}. Determines the available operators and editor UI.
388
+ * @default 'string'
389
+ */
390
+ readonly dataType: _angular_core.InputSignal<NgnFilterDataType>;
391
+ /**
392
+ * Allows multiple conditions and a match mode (any/all).
393
+ * @default false
394
+ */
395
+ readonly allowMultiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
396
+ /**
397
+ * Options for `dataType="list"`.
398
+ * When provided, they are used as-is. When `null` or `undefined`, options are derived from {@link data}.
399
+ * @default undefined
400
+ */
401
+ readonly listOptions: _angular_core.InputSignal<readonly string[] | null | undefined>;
402
+ /**
403
+ * Controls how the filter is rendered.
404
+ * - `inline`: renders the filter rows directly
405
+ * - `input`: renders an input-like trigger that opens a popover (default)
406
+ * - `headless`: renders only the popover and can be opened programmatically via {@link show}
407
+ * @default 'input'
408
+ */
409
+ readonly mode: _angular_core.InputSignal<NgnFilterMode>;
410
+ /**
411
+ * Popover anchor used only in `headless` mode.
412
+ * In `input` mode the anchor is the internal input-field.
413
+ * @default null
414
+ */
415
+ readonly anchor: _angular_core.InputSignal<Anchor | null>;
416
+ /**
417
+ * When true, the component will filter {@link data} locally and emit the filtered result
418
+ * via {@link filterResultChange}. When false, only the filter configuration is emitted
419
+ * (useful for server-side filtering).
420
+ * @default true
421
+ */
422
+ readonly filterLocally: _angular_core.InputSignalWithTransform<boolean, unknown>;
423
+ /**
424
+ * When true, filters apply automatically as the user types/selects.
425
+ * When false, the user must click "Apply" to commit the filter.
426
+ * @default true
427
+ */
428
+ readonly autoApply: _angular_core.InputSignalWithTransform<boolean, unknown>;
429
+ /**
430
+ * Debounce time in milliseconds for auto-apply mode.
431
+ * Only relevant when {@link autoApply} is `true`.
432
+ * @default 300
433
+ */
434
+ readonly autoApplyDebounce: _angular_core.InputSignalWithTransform<number, unknown>;
435
+ /**
436
+ * Options for the popover (when {@link mode} is not `inline`).
437
+ * @default {}
438
+ */
439
+ readonly popoverOptions: _angular_core.InputSignal<PopoverOptions>;
440
+ protected readonly appliedPopoverOptions: _angular_core.Signal<PopoverOptions>;
441
+ /** Emits whenever the filter configuration changes. */
442
+ readonly filterChange: _angular_core.OutputEmitterRef<NgnFilterConfig | null>;
443
+ /** Emits the filtered data whenever local filtering is enabled. */
444
+ readonly filterResultChange: _angular_core.OutputEmitterRef<readonly T[]>;
445
+ private readonly _popover;
446
+ /**
447
+ * Internal working config that the template binds to.
448
+ * In auto-apply mode, this syncs to value() via debounce.
449
+ * In manual mode, only apply() commits this to value().
450
+ */
451
+ protected readonly workingConfig: _angular_core.WritableSignal<NgnFilterConfig | null>;
452
+ /** Snapshot of value() taken when popover opens in manual mode, for cancel to restore. */
453
+ private _snapshotConfig;
454
+ /** Debounce timer handle for auto-apply. */
455
+ private _debounceTimer;
456
+ /** Whether there is an active filter applied. */
457
+ protected readonly hasActiveFilter: _angular_core.Signal<boolean>;
458
+ private createCondition;
459
+ private defaultConfig;
460
+ /**
461
+ * Config used for UI rendering.
462
+ * Always reads from workingConfig (the live editing state).
463
+ * Falls back to a default config when null.
464
+ */
465
+ protected readonly templateConfig: _angular_core.Signal<NgnFilterConfig>;
466
+ protected readonly templateListSelection: _angular_core.Signal<readonly string[]>;
467
+ protected readonly operatorDefs: _angular_core.Signal<[{
468
+ readonly id: "isEqual";
469
+ readonly labelKey: "filter_operators_isEqual";
470
+ readonly requiresValue: true;
471
+ }, {
472
+ readonly id: "isNotEqual";
473
+ readonly labelKey: "filter_operators_isNotEqual";
474
+ readonly requiresValue: true;
475
+ }, {
476
+ readonly id: "contains";
477
+ readonly labelKey: "filter_operators_contains";
478
+ readonly requiresValue: true;
479
+ }, {
480
+ readonly id: "startsWith";
481
+ readonly labelKey: "filter_operators_startsWith";
482
+ readonly requiresValue: true;
483
+ }, {
484
+ readonly id: "endsWith";
485
+ readonly labelKey: "filter_operators_endsWith";
486
+ readonly requiresValue: true;
487
+ }, {
488
+ readonly id: "isEmpty";
489
+ readonly labelKey: "filter_operators_isEmpty";
490
+ readonly requiresValue: false;
491
+ }, {
492
+ readonly id: "isNotEmpty";
493
+ readonly labelKey: "filter_operators_isNotEmpty";
494
+ readonly requiresValue: false;
495
+ }] | [{
496
+ readonly id: "isEqual";
497
+ readonly labelKey: "filter_operators_isEqual";
498
+ readonly requiresValue: true;
499
+ }, {
500
+ readonly id: "isNotEqual";
501
+ readonly labelKey: "filter_operators_isNotEqual";
502
+ readonly requiresValue: true;
503
+ }, {
504
+ readonly id: "greaterThan";
505
+ readonly labelKey: "filter_operators_greaterThan";
506
+ readonly requiresValue: true;
507
+ }, {
508
+ readonly id: "greaterThanOrEqual";
509
+ readonly labelKey: "filter_operators_greaterThanOrEqual";
510
+ readonly requiresValue: true;
511
+ }, {
512
+ readonly id: "lessThan";
513
+ readonly labelKey: "filter_operators_lessThan";
514
+ readonly requiresValue: true;
515
+ }, {
516
+ readonly id: "lessThanOrEqual";
517
+ readonly labelKey: "filter_operators_lessThanOrEqual";
518
+ readonly requiresValue: true;
519
+ }] | [{
520
+ readonly id: "isEqual";
521
+ readonly labelKey: "filter_operators_isEqual";
522
+ readonly requiresValue: true;
523
+ }, {
524
+ readonly id: "isNotEqual";
525
+ readonly labelKey: "filter_operators_isNotEqual";
526
+ readonly requiresValue: true;
527
+ }, {
528
+ readonly id: "greaterThan";
529
+ readonly labelKey: "filter_operators_after";
530
+ readonly requiresValue: true;
531
+ }, {
532
+ readonly id: "greaterThanOrEqual";
533
+ readonly labelKey: "filter_operators_onOrAfter";
534
+ readonly requiresValue: true;
535
+ }, {
536
+ readonly id: "lessThan";
537
+ readonly labelKey: "filter_operators_before";
538
+ readonly requiresValue: true;
539
+ }, {
540
+ readonly id: "lessThanOrEqual";
541
+ readonly labelKey: "filter_operators_onOrBefore";
542
+ readonly requiresValue: true;
543
+ }] | [{
544
+ readonly id: "isTrue";
545
+ readonly labelKey: "filter_operators_isTrue";
546
+ readonly requiresValue: false;
547
+ }, {
548
+ readonly id: "isFalse";
549
+ readonly labelKey: "filter_operators_isFalse";
550
+ readonly requiresValue: false;
551
+ }] | [{
552
+ readonly id: "custom";
553
+ readonly labelKey: "filter_operators_custom";
554
+ readonly requiresValue: true;
555
+ }] | [{
556
+ readonly id: "in";
557
+ readonly labelKey: "filter_operators_in";
558
+ readonly requiresValue: true;
559
+ }]>;
560
+ protected readonly operatorOptions: _angular_core.Signal<NgnItem[]>;
561
+ protected readonly autoListOptions: _angular_core.Signal<readonly NgnItem[]>;
562
+ protected readonly resolvedListOptions: _angular_core.Signal<readonly NgnItem[]>;
563
+ protected readonly matchModeOptions: readonly NgnItem[];
564
+ protected readonly inputType: _angular_core.Signal<"number" | "date" | "text" | "datetime-local">;
565
+ protected readonly isDateType: _angular_core.Signal<boolean>;
566
+ protected readonly isShowTime: _angular_core.Signal<boolean>;
567
+ /** Parse a rawValue string to a Date for the calendar component. */
568
+ protected parseRawDate(rawValue: string | null): Date | null;
569
+ /** Convert a Date from the calendar to a rawValue string. */
570
+ protected dateToRaw(date: Date | null): string | null;
571
+ protected readonly summaryText: _angular_core.Signal<string | undefined>;
572
+ protected readonly activeConditionConfigs: _angular_core.Signal<readonly NgnFilterConditionConfig[]>;
573
+ protected readonly activeConditions: _angular_core.Signal<readonly NgnFilterCondition[]>;
574
+ protected readonly filteredData: _angular_core.Signal<readonly T[]>;
575
+ /** The current match mode label for the condition divider */
576
+ protected readonly matchModeLabel: _angular_core.Signal<string>;
577
+ constructor();
578
+ /**
579
+ * Commits the working config to the actual value, with optional debounce.
580
+ * Called after every working config change.
581
+ */
582
+ private commitWorkingConfig;
583
+ /** Updates the working config and optionally auto-applies. */
584
+ private updateWorkingConfig;
585
+ protected toggleMatchMode(): void;
586
+ protected setMatchMode(value: unknown): void;
587
+ protected operatorRequiresValue(operator: NgnFilterOperatorId): boolean;
588
+ protected setOperator(index: number, operator: NgnFilterOperatorId | null): void;
589
+ protected setRawValue(index: number, rawValue: string | null): void;
590
+ protected setDateValue(index: number, date: Date | null): void;
591
+ protected addCondition(): void;
592
+ protected removeCondition(index: number): void;
593
+ protected setListSelection(value: unknown): void;
594
+ /** Applies the working config (manual mode). */
595
+ protected apply(): void;
596
+ /** Cancels changes and restores the snapshot (manual mode). */
597
+ protected cancelChanges(): void;
598
+ protected clear(): void;
599
+ /** Shows the filter popup. Only works when {@link mode} is not `inline`. */
600
+ show(): void;
601
+ /** Hides the filter popup. Only works when {@link mode} is not `inline`. */
602
+ hide(): void;
603
+ protected onKeyDown(event: KeyboardEvent): void;
604
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgnFilter<any>, never>;
605
+ 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>;
606
+ }
607
+
608
+ export { NgnFilter };
609
+ export type { NgnFilterCondition, NgnFilterConditionConfig, NgnFilterConfig, NgnFilterDataType, NgnFilterMatchMode, NgnFilterMode, NgnFilterOperatorId, NgnFilterOutput };