@nanahoshi/mona-ui 0.1.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 (134) hide show
  1. package/README.md +25 -0
  2. package/fesm2022/nanahoshi-mona-ui-auto-complete.mjs +590 -0
  3. package/fesm2022/nanahoshi-mona-ui-avatar.mjs +168 -0
  4. package/fesm2022/nanahoshi-mona-ui-breadcrumb.mjs +220 -0
  5. package/fesm2022/nanahoshi-mona-ui-button-group.mjs +225 -0
  6. package/fesm2022/nanahoshi-mona-ui-button.mjs +497 -0
  7. package/fesm2022/nanahoshi-mona-ui-calendar.mjs +1569 -0
  8. package/fesm2022/nanahoshi-mona-ui-check-box.mjs +339 -0
  9. package/fesm2022/nanahoshi-mona-ui-chip.mjs +453 -0
  10. package/fesm2022/nanahoshi-mona-ui-circular-progress-bar.mjs +200 -0
  11. package/fesm2022/nanahoshi-mona-ui-color-gradient.mjs +853 -0
  12. package/fesm2022/nanahoshi-mona-ui-color-palette.mjs +923 -0
  13. package/fesm2022/nanahoshi-mona-ui-color-picker.mjs +495 -0
  14. package/fesm2022/nanahoshi-mona-ui-combo-box.mjs +686 -0
  15. package/fesm2022/nanahoshi-mona-ui-common.mjs +642 -0
  16. package/fesm2022/nanahoshi-mona-ui-contextmenu.mjs +485 -0
  17. package/fesm2022/nanahoshi-mona-ui-date-input.mjs +132 -0
  18. package/fesm2022/nanahoshi-mona-ui-date-picker.mjs +460 -0
  19. package/fesm2022/nanahoshi-mona-ui-datetime-picker.mjs +659 -0
  20. package/fesm2022/nanahoshi-mona-ui-dialog.mjs +828 -0
  21. package/fesm2022/nanahoshi-mona-ui-dropdown-button.mjs +523 -0
  22. package/fesm2022/nanahoshi-mona-ui-dropdown-list.mjs +615 -0
  23. package/fesm2022/nanahoshi-mona-ui-dropdowns.mjs +701 -0
  24. package/fesm2022/nanahoshi-mona-ui-editor.mjs +1400 -0
  25. package/fesm2022/nanahoshi-mona-ui-expansion-panel.mjs +245 -0
  26. package/fesm2022/nanahoshi-mona-ui-fieldset.mjs +170 -0
  27. package/fesm2022/nanahoshi-mona-ui-filter.mjs +680 -0
  28. package/fesm2022/nanahoshi-mona-ui-grid-grid-footer-cell.component-B9SQH5N-.mjs +105 -0
  29. package/fesm2022/nanahoshi-mona-ui-grid-grid-footer-table-cell.directive-DlLwcCFT.mjs +42 -0
  30. package/fesm2022/nanahoshi-mona-ui-grid-grid-list.component-Dgea-O0X.mjs +130 -0
  31. package/fesm2022/nanahoshi-mona-ui-grid-grid-toggle.component-DIUutx9s.mjs +773 -0
  32. package/fesm2022/nanahoshi-mona-ui-grid-grid-virtual-list.component-DRHycGIh.mjs +240 -0
  33. package/fesm2022/nanahoshi-mona-ui-grid-nanahoshi-mona-ui-grid-C3eZIaJK.mjs +5374 -0
  34. package/fesm2022/nanahoshi-mona-ui-grid.mjs +2 -0
  35. package/fesm2022/nanahoshi-mona-ui-internal-filter-input.mjs +87 -0
  36. package/fesm2022/nanahoshi-mona-ui-internal-indicator-icon.mjs +154 -0
  37. package/fesm2022/nanahoshi-mona-ui-internal-list.mjs +1356 -0
  38. package/fesm2022/nanahoshi-mona-ui-internal-tree.mjs +2263 -0
  39. package/fesm2022/nanahoshi-mona-ui-internal.mjs +379 -0
  40. package/fesm2022/nanahoshi-mona-ui-list-box.mjs +630 -0
  41. package/fesm2022/nanahoshi-mona-ui-list-view.mjs +527 -0
  42. package/fesm2022/nanahoshi-mona-ui-list.mjs +4 -0
  43. package/fesm2022/nanahoshi-mona-ui-menubar.mjs +966 -0
  44. package/fesm2022/nanahoshi-mona-ui-multi-select.mjs +641 -0
  45. package/fesm2022/nanahoshi-mona-ui-notification.mjs +536 -0
  46. package/fesm2022/nanahoshi-mona-ui-numeric-text-box.mjs +597 -0
  47. package/fesm2022/nanahoshi-mona-ui-pager.mjs +790 -0
  48. package/fesm2022/nanahoshi-mona-ui-placeholder.mjs +83 -0
  49. package/fesm2022/nanahoshi-mona-ui-popover.mjs +325 -0
  50. package/fesm2022/nanahoshi-mona-ui-popup-menu.mjs +1559 -0
  51. package/fesm2022/nanahoshi-mona-ui-popup.mjs +1321 -0
  52. package/fesm2022/nanahoshi-mona-ui-progress-bar.mjs +294 -0
  53. package/fesm2022/nanahoshi-mona-ui-query.mjs +175 -0
  54. package/fesm2022/nanahoshi-mona-ui-radio-button.mjs +339 -0
  55. package/fesm2022/nanahoshi-mona-ui-scroll-view.mjs +565 -0
  56. package/fesm2022/nanahoshi-mona-ui-slider.mjs +1049 -0
  57. package/fesm2022/nanahoshi-mona-ui-split-button.mjs +636 -0
  58. package/fesm2022/nanahoshi-mona-ui-splitter.mjs +843 -0
  59. package/fesm2022/nanahoshi-mona-ui-stepper.mjs +537 -0
  60. package/fesm2022/nanahoshi-mona-ui-switch.mjs +308 -0
  61. package/fesm2022/nanahoshi-mona-ui-tabs.mjs +664 -0
  62. package/fesm2022/nanahoshi-mona-ui-text-area.mjs +111 -0
  63. package/fesm2022/nanahoshi-mona-ui-text-box.mjs +369 -0
  64. package/fesm2022/nanahoshi-mona-ui-theme.mjs +314 -0
  65. package/fesm2022/nanahoshi-mona-ui-time-picker.mjs +450 -0
  66. package/fesm2022/nanahoshi-mona-ui-time-selector.mjs +723 -0
  67. package/fesm2022/nanahoshi-mona-ui-tooltip.mjs +716 -0
  68. package/fesm2022/nanahoshi-mona-ui-tree-view.mjs +733 -0
  69. package/fesm2022/nanahoshi-mona-ui-window.mjs +1329 -0
  70. package/fesm2022/nanahoshi-mona-ui.mjs +9 -0
  71. package/package.json +289 -0
  72. package/types/nanahoshi-mona-ui-auto-complete.d.ts +223 -0
  73. package/types/nanahoshi-mona-ui-avatar.d.ts +642 -0
  74. package/types/nanahoshi-mona-ui-breadcrumb.d.ts +70 -0
  75. package/types/nanahoshi-mona-ui-button-group.d.ts +77 -0
  76. package/types/nanahoshi-mona-ui-button.d.ts +111 -0
  77. package/types/nanahoshi-mona-ui-calendar.d.ts +262 -0
  78. package/types/nanahoshi-mona-ui-check-box.d.ts +133 -0
  79. package/types/nanahoshi-mona-ui-chip.d.ts +130 -0
  80. package/types/nanahoshi-mona-ui-circular-progress-bar.d.ts +113 -0
  81. package/types/nanahoshi-mona-ui-color-gradient.d.ts +201 -0
  82. package/types/nanahoshi-mona-ui-color-palette.d.ts +102 -0
  83. package/types/nanahoshi-mona-ui-color-picker.d.ts +156 -0
  84. package/types/nanahoshi-mona-ui-combo-box.d.ts +232 -0
  85. package/types/nanahoshi-mona-ui-common.d.ts +386 -0
  86. package/types/nanahoshi-mona-ui-contextmenu.d.ts +129 -0
  87. package/types/nanahoshi-mona-ui-date-input.d.ts +60 -0
  88. package/types/nanahoshi-mona-ui-date-picker.d.ts +177 -0
  89. package/types/nanahoshi-mona-ui-datetime-picker.d.ts +199 -0
  90. package/types/nanahoshi-mona-ui-dialog.d.ts +261 -0
  91. package/types/nanahoshi-mona-ui-dropdown-button.d.ts +159 -0
  92. package/types/nanahoshi-mona-ui-dropdown-list.d.ts +219 -0
  93. package/types/nanahoshi-mona-ui-dropdowns.d.ts +176 -0
  94. package/types/nanahoshi-mona-ui-editor.d.ts +113 -0
  95. package/types/nanahoshi-mona-ui-expansion-panel.d.ts +87 -0
  96. package/types/nanahoshi-mona-ui-fieldset.d.ts +68 -0
  97. package/types/nanahoshi-mona-ui-filter.d.ts +115 -0
  98. package/types/nanahoshi-mona-ui-grid.d.ts +1114 -0
  99. package/types/nanahoshi-mona-ui-internal-filter-input.d.ts +25 -0
  100. package/types/nanahoshi-mona-ui-internal-indicator-icon.d.ts +28 -0
  101. package/types/nanahoshi-mona-ui-internal-list.d.ts +269 -0
  102. package/types/nanahoshi-mona-ui-internal-tree.d.ts +391 -0
  103. package/types/nanahoshi-mona-ui-internal.d.ts +136 -0
  104. package/types/nanahoshi-mona-ui-list-box.d.ts +225 -0
  105. package/types/nanahoshi-mona-ui-list-view.d.ts +188 -0
  106. package/types/nanahoshi-mona-ui-list.d.ts +1 -0
  107. package/types/nanahoshi-mona-ui-menubar.d.ts +198 -0
  108. package/types/nanahoshi-mona-ui-multi-select.d.ts +247 -0
  109. package/types/nanahoshi-mona-ui-notification.d.ts +106 -0
  110. package/types/nanahoshi-mona-ui-numeric-text-box.d.ts +161 -0
  111. package/types/nanahoshi-mona-ui-pager.d.ts +238 -0
  112. package/types/nanahoshi-mona-ui-placeholder.d.ts +35 -0
  113. package/types/nanahoshi-mona-ui-popover.d.ts +130 -0
  114. package/types/nanahoshi-mona-ui-popup-menu.d.ts +412 -0
  115. package/types/nanahoshi-mona-ui-popup.d.ts +485 -0
  116. package/types/nanahoshi-mona-ui-progress-bar.d.ts +139 -0
  117. package/types/nanahoshi-mona-ui-query.d.ts +89 -0
  118. package/types/nanahoshi-mona-ui-radio-button.d.ts +128 -0
  119. package/types/nanahoshi-mona-ui-scroll-view.d.ts +166 -0
  120. package/types/nanahoshi-mona-ui-slider.d.ts +305 -0
  121. package/types/nanahoshi-mona-ui-split-button.d.ts +182 -0
  122. package/types/nanahoshi-mona-ui-splitter.d.ts +70 -0
  123. package/types/nanahoshi-mona-ui-stepper.d.ts +173 -0
  124. package/types/nanahoshi-mona-ui-switch.d.ts +125 -0
  125. package/types/nanahoshi-mona-ui-tabs.d.ts +158 -0
  126. package/types/nanahoshi-mona-ui-text-area.d.ts +42 -0
  127. package/types/nanahoshi-mona-ui-text-box.d.ts +164 -0
  128. package/types/nanahoshi-mona-ui-theme.d.ts +23 -0
  129. package/types/nanahoshi-mona-ui-time-picker.d.ts +184 -0
  130. package/types/nanahoshi-mona-ui-time-selector.d.ts +143 -0
  131. package/types/nanahoshi-mona-ui-tooltip.d.ts +130 -0
  132. package/types/nanahoshi-mona-ui-tree-view.d.ts +274 -0
  133. package/types/nanahoshi-mona-ui-window.d.ts +295 -0
  134. package/types/nanahoshi-mona-ui.d.ts +2 -0
@@ -0,0 +1,680 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Pipe, Injectable, inject, computed, signal, output, input, model, effect, untracked, Component } from '@angular/core';
3
+ import * as i1 from '@angular/forms';
4
+ import { FormsModule } from '@angular/forms';
5
+ import { ButtonDirective } from '@nanahoshi/mona-ui/button';
6
+ import { ButtonGroupComponent } from '@nanahoshi/mona-ui/button-group';
7
+ import { DatePickerComponent } from '@nanahoshi/mona-ui/date-picker';
8
+ import { DropdownListComponent } from '@nanahoshi/mona-ui/dropdown-list';
9
+ import { NumericTextBoxComponent } from '@nanahoshi/mona-ui/numeric-text-box';
10
+ import { TextBoxComponent } from '@nanahoshi/mona-ui/text-box';
11
+ import { ThemeService } from '@nanahoshi/mona-ui/theme';
12
+ import { cva } from 'class-variance-authority';
13
+
14
+ class OperatorFilterPipe {
15
+ transform(value, visibleOperators) {
16
+ if (!visibleOperators) {
17
+ return value;
18
+ }
19
+ const operators = Array.from(visibleOperators);
20
+ if (!operators.length) {
21
+ return value;
22
+ }
23
+ return value
24
+ .filter(item => operators.includes(item.value))
25
+ .sort((a, b) => {
26
+ return operators.indexOf(a.value) - operators.indexOf(b.value);
27
+ });
28
+ }
29
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: OperatorFilterPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
30
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.6", ngImport: i0, type: OperatorFilterPipe, isStandalone: true, name: "operatorFilter" }); }
31
+ }
32
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: OperatorFilterPipe, decorators: [{
33
+ type: Pipe,
34
+ args: [{
35
+ name: "operatorFilter"
36
+ }]
37
+ }] });
38
+
39
+ class ValuelessOperatorPipe {
40
+ transform(value) {
41
+ return (value === "isnull" ||
42
+ value === "isnotnull" ||
43
+ value === "isempty" ||
44
+ value === "isnotempty" ||
45
+ value === "isnullorempty" ||
46
+ value === "isnotnullorempty");
47
+ }
48
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: ValuelessOperatorPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
49
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.6", ngImport: i0, type: ValuelessOperatorPipe, isStandalone: true, name: "valuelessOperator" }); }
50
+ }
51
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: ValuelessOperatorPipe, decorators: [{
52
+ type: Pipe,
53
+ args: [{
54
+ name: "valuelessOperator"
55
+ }]
56
+ }] });
57
+
58
+ class FilterService {
59
+ constructor() {
60
+ this.booleanFilterMenuItems = [
61
+ { text: "Is true", value: "istrue" },
62
+ { text: "Is false", value: "isfalse" },
63
+ { text: "Is null", value: "isnull" },
64
+ { text: "Is not null", value: "isnotnull" }
65
+ ];
66
+ this.dateFilterMenuItems = [
67
+ { text: "Is equal to", value: "eq" },
68
+ { text: "Is not equal to", value: "neq" },
69
+ { text: "Is after", value: "gt" },
70
+ { text: "Is after or equal to", value: "gte" },
71
+ { text: "Is before", value: "lt" },
72
+ { text: "Is before or equal to", value: "lte" },
73
+ { text: "Is null", value: "isnull" },
74
+ { text: "Is not null", value: "isnotnull" }
75
+ ];
76
+ // TODO: Add null and empty filter operators
77
+ this.numericFilterMenuItems = [
78
+ { text: "Is equal to", value: "eq" },
79
+ { text: "Is not equal to", value: "neq" },
80
+ { text: "Is greater than", value: "gt" },
81
+ { text: "Is greater than or equal to", value: "gte" },
82
+ { text: "Is less than", value: "lt" },
83
+ { text: "Is less than or equal to", value: "lte" },
84
+ { text: "Is null", value: "isnull" },
85
+ { text: "Is not null", value: "isnotnull" }
86
+ ];
87
+ this.stringFilterMenuItems = [
88
+ { text: "Contains", value: "contains" },
89
+ { text: "Does not contain", value: "doesnotcontain" },
90
+ { text: "Ends with", value: "endswith" },
91
+ { text: "Starts with", value: "startswith" },
92
+ { text: "Is equal to", value: "eq" },
93
+ { text: "Is not equal to", value: "neq" },
94
+ { text: "Is empty", value: "isempty" },
95
+ { text: "Is not empty", value: "isnotempty" },
96
+ { text: "Is null", value: "isnull" },
97
+ { text: "Is not null", value: "isnotnull" },
98
+ { text: "Is null or empty", value: "isnullorempty" },
99
+ { text: "Is not null or empty", value: "isnotnullorempty" }
100
+ ];
101
+ }
102
+ buildBooleanFilterDescriptor(args) {
103
+ const descriptors = [];
104
+ const descriptor1 = this.getBooleanDescriptor(args.operator1, args.field);
105
+ if (descriptor1) {
106
+ descriptors.push(descriptor1);
107
+ }
108
+ if (args.logic) {
109
+ const descriptor2 = this.getBooleanDescriptor(args.operator2, args.field);
110
+ if (descriptor2) {
111
+ descriptors.push(descriptor2);
112
+ }
113
+ }
114
+ return {
115
+ logic: args.logic || "and",
116
+ filters: descriptors
117
+ };
118
+ }
119
+ buildDateFilterDescriptor(args) {
120
+ const descriptors = [];
121
+ const descriptor1 = this.getDateDescriptor(args.operator1, args.field, args.value1);
122
+ if (descriptor1) {
123
+ descriptors.push(descriptor1);
124
+ }
125
+ if (args.logic) {
126
+ const descriptor2 = this.getDateDescriptor(args.operator2, args.field, args.value2);
127
+ if (descriptor2) {
128
+ descriptors.push(descriptor2);
129
+ }
130
+ }
131
+ return {
132
+ logic: args.logic || "and",
133
+ filters: descriptors
134
+ };
135
+ }
136
+ buildNumberFilterDescriptor(args) {
137
+ const descriptors = [];
138
+ const descriptor1 = this.getNumberDescriptor(args.operator1, args.field, args.value1);
139
+ if (descriptor1) {
140
+ descriptors.push(descriptor1);
141
+ }
142
+ if (args.logic) {
143
+ const descriptor2 = this.getNumberDescriptor(args.operator2, args.field, args.value2);
144
+ if (descriptor2) {
145
+ descriptors.push(descriptor2);
146
+ }
147
+ }
148
+ return {
149
+ logic: args.logic || "and",
150
+ filters: descriptors
151
+ };
152
+ }
153
+ buildStringFilterDescriptor(args) {
154
+ const descriptors = [];
155
+ const descriptor1 = this.getStringDescriptor(args.operator1, args.field, args.value1);
156
+ if (descriptor1) {
157
+ descriptors.push(descriptor1);
158
+ }
159
+ if (args.logic) {
160
+ const descriptor2 = this.getStringDescriptor(args.operator2, args.field, args.value2);
161
+ if (descriptor2) {
162
+ descriptors.push(descriptor2);
163
+ }
164
+ }
165
+ return {
166
+ logic: args.logic || "and",
167
+ filters: descriptors
168
+ };
169
+ }
170
+ getBooleanDescriptor(operator, field) {
171
+ if (operator === "isnotnull" || operator === "isnull") {
172
+ return { field, operator };
173
+ }
174
+ else if (operator === "istrue") {
175
+ return { field, operator };
176
+ }
177
+ else if (operator === "isfalse") {
178
+ return { field, operator };
179
+ }
180
+ return null;
181
+ }
182
+ getDateDescriptor(operator, field, value) {
183
+ if (operator === "isnotnull" || operator === "isnull") {
184
+ return { field, operator };
185
+ }
186
+ else if (value != null) {
187
+ return { field, operator, value };
188
+ }
189
+ return null;
190
+ }
191
+ getNumberDescriptor(operator, field, value) {
192
+ if (operator === "isnotnull" || operator === "isnull") {
193
+ return { field, operator };
194
+ }
195
+ else if (value != null) {
196
+ return { field, operator, value };
197
+ }
198
+ return null;
199
+ }
200
+ getStringDescriptor(operator, field, value) {
201
+ if (operator === "isnotnull" || operator === "isnull") {
202
+ return { field, operator };
203
+ }
204
+ else if (operator === "isempty" || operator === "isnotempty") {
205
+ return { field, operator };
206
+ }
207
+ else if (operator === "isnullorempty" || operator === "isnotnullorempty") {
208
+ return { field, operator };
209
+ }
210
+ else if (value != null) {
211
+ return { field, operator, value };
212
+ }
213
+ return null;
214
+ }
215
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: FilterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
216
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: FilterService }); }
217
+ }
218
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: FilterService, decorators: [{
219
+ type: Injectable
220
+ }] });
221
+
222
+ const filterMenuBaseVariants = cva(`
223
+ w-full flex flex-col
224
+ p-1 gap-2
225
+ bg-background-dark border border-border
226
+ shadow-lg
227
+ `, {
228
+ variants: {
229
+ rounded: {
230
+ none: "rounded-none",
231
+ small: "rounded-sm",
232
+ medium: "rounded-md",
233
+ large: "rounded-lg"
234
+ },
235
+ size: {
236
+ small: "",
237
+ medium: "",
238
+ large: ""
239
+ }
240
+ }
241
+ });
242
+ const filterMenuItemVariants = cva(`
243
+ flex flex-col gap-1
244
+ [&>mona-button-group>button]:flex-1
245
+ `);
246
+ const filterMenuActionVariants = cva(`
247
+ flex flex-row
248
+ items-center justify-center
249
+ gap-1 [&>button]:flex-1
250
+ `);
251
+
252
+ const filterMenuBaseThemeVariants = (theme) => {
253
+ switch (theme) {
254
+ case "mona":
255
+ return filterMenuBaseVariants;
256
+ default:
257
+ return filterMenuBaseVariants;
258
+ }
259
+ };
260
+ const filterMenuActionsThemeVariants = (theme) => {
261
+ switch (theme) {
262
+ case "mona":
263
+ return filterMenuActionVariants;
264
+ default:
265
+ return filterMenuActionVariants;
266
+ }
267
+ };
268
+ const filterMenuItemThemeVariants = (theme) => {
269
+ switch (theme) {
270
+ case "mona":
271
+ return filterMenuItemVariants;
272
+ default:
273
+ return filterMenuItemVariants;
274
+ }
275
+ };
276
+
277
+ class FilterMenuComponent {
278
+ #booleanFilterValues;
279
+ #filterService;
280
+ #themeService;
281
+ constructor() {
282
+ this.#booleanFilterValues = [null, null];
283
+ this.#filterService = inject(FilterService);
284
+ this.#themeService = inject(ThemeService);
285
+ this.applyDisabled = computed(() => {
286
+ if (!this.firstFilterValid()) {
287
+ return true;
288
+ }
289
+ return !!(this.selectedConnectorItem() && !this.secondFilterValid());
290
+ }, /* @ts-ignore */
291
+ ...(ngDevMode ? [{ debugName: "applyDisabled" }] : /* istanbul ignore next */ []));
292
+ this.baseClass = computed(() => {
293
+ const theme = this.#themeService.theme();
294
+ return filterMenuBaseThemeVariants(theme)();
295
+ }, /* @ts-ignore */
296
+ ...(ngDevMode ? [{ debugName: "baseClass" }] : /* istanbul ignore next */ []));
297
+ this.booleanFilterMenuDataItems = this.#filterService.booleanFilterMenuItems;
298
+ this.connectorDataItems = [
299
+ { text: "AND", value: "and" },
300
+ { text: "OR", value: "or" }
301
+ ];
302
+ this.dateFilterMenuDataItems = this.#filterService.dateFilterMenuItems;
303
+ this.dateFilterValues = signal([null, null], /* @ts-ignore */
304
+ ...(ngDevMode ? [{ debugName: "dateFilterValues" }] : /* istanbul ignore next */ []));
305
+ this.effectiveDateOptions = computed(() => {
306
+ const type = this.type();
307
+ const dateOptions = this.dateOptions();
308
+ if (type !== "date") {
309
+ return dateOptions;
310
+ }
311
+ if (dateOptions.type === type) {
312
+ return dateOptions;
313
+ }
314
+ return {
315
+ format: this.getDefaultDateFormat(type),
316
+ type
317
+ };
318
+ }, /* @ts-ignore */
319
+ ...(ngDevMode ? [{ debugName: "effectiveDateOptions" }] : /* istanbul ignore next */ []));
320
+ this.filterMenuActionsClass = computed(() => {
321
+ const theme = this.#themeService.theme();
322
+ return filterMenuActionsThemeVariants(theme)();
323
+ }, /* @ts-ignore */
324
+ ...(ngDevMode ? [{ debugName: "filterMenuActionsClass" }] : /* istanbul ignore next */ []));
325
+ this.filterMenuItemClass = computed(() => {
326
+ const theme = this.#themeService.theme();
327
+ return filterMenuItemThemeVariants(theme)();
328
+ }, /* @ts-ignore */
329
+ ...(ngDevMode ? [{ debugName: "filterMenuItemClass" }] : /* istanbul ignore next */ []));
330
+ this.firstFilterValid = computed(() => {
331
+ const operator = this.selectedFilterMenuDataItemList()[0]?.value;
332
+ const type = this.type();
333
+ const stringFilterValues = this.stringFilterValues();
334
+ const numberFilterValues = this.numberFilterValues();
335
+ const dateFilterValues = this.dateFilterValues();
336
+ if (!operator) {
337
+ return false;
338
+ }
339
+ if (operator === "isnull" || operator === "isnotnull") {
340
+ return true;
341
+ }
342
+ switch (type) {
343
+ case "string":
344
+ if (operator === "isempty" ||
345
+ operator === "isnotempty" ||
346
+ operator === "isnullorempty" ||
347
+ operator === "isnotnullorempty") {
348
+ return true;
349
+ }
350
+ return stringFilterValues[0] !== "";
351
+ case "number":
352
+ return numberFilterValues[0] !== null;
353
+ case "date":
354
+ return dateFilterValues[0] !== null;
355
+ case "boolean":
356
+ return true;
357
+ default:
358
+ return false;
359
+ }
360
+ }, /* @ts-ignore */
361
+ ...(ngDevMode ? [{ debugName: "firstFilterValid" }] : /* istanbul ignore next */ []));
362
+ this.numberFilterValues = signal([null, null], /* @ts-ignore */
363
+ ...(ngDevMode ? [{ debugName: "numberFilterValues" }] : /* istanbul ignore next */ []));
364
+ this.numericFilterMenuDataItems = this.#filterService.numericFilterMenuItems;
365
+ this.secondFilterValid = computed(() => {
366
+ const operator = this.selectedFilterMenuDataItemList()[1]?.value;
367
+ const type = this.type();
368
+ const stringFilterValues = this.stringFilterValues();
369
+ const numberFilterValues = this.numberFilterValues();
370
+ const dateFilterValues = this.dateFilterValues();
371
+ if (!operator) {
372
+ return false;
373
+ }
374
+ if (operator === "isnull" || operator === "isnotnull") {
375
+ return true;
376
+ }
377
+ switch (type) {
378
+ case "string":
379
+ if (operator === "isempty" ||
380
+ operator === "isnotempty" ||
381
+ operator === "isnullorempty" ||
382
+ operator === "isnotnullorempty") {
383
+ return true;
384
+ }
385
+ return stringFilterValues[1] !== "";
386
+ case "number":
387
+ return numberFilterValues[1] !== null;
388
+ case "date":
389
+ return dateFilterValues[1] !== null;
390
+ case "boolean":
391
+ return true;
392
+ default:
393
+ return false;
394
+ }
395
+ }, /* @ts-ignore */
396
+ ...(ngDevMode ? [{ debugName: "secondFilterValid" }] : /* istanbul ignore next */ []));
397
+ this.selectedConnectorItem = signal(null, /* @ts-ignore */
398
+ ...(ngDevMode ? [{ debugName: "selectedConnectorItem" }] : /* istanbul ignore next */ []));
399
+ this.selectedFilterMenuDataItemList = signal([
400
+ undefined,
401
+ undefined
402
+ ], /* @ts-ignore */
403
+ ...(ngDevMode ? [{ debugName: "selectedFilterMenuDataItemList" }] : /* istanbul ignore next */ []));
404
+ this.stringFilterMenuDataItems = this.#filterService.stringFilterMenuItems;
405
+ this.stringFilterValues = signal(["", ""], /* @ts-ignore */
406
+ ...(ngDevMode ? [{ debugName: "stringFilterValues" }] : /* istanbul ignore next */ []));
407
+ this.apply = output();
408
+ this.dateOptions = input({
409
+ format: "dd/MM/yyyy",
410
+ type: "date"
411
+ }, /* @ts-ignore */
412
+ ...(ngDevMode ? [{ debugName: "dateOptions" }] : /* istanbul ignore next */ []));
413
+ this.field = model("", /* @ts-ignore */
414
+ ...(ngDevMode ? [{ debugName: "field" }] : /* istanbul ignore next */ []));
415
+ this.operators = model([], /* @ts-ignore */
416
+ ...(ngDevMode ? [{ debugName: "operators" }] : /* istanbul ignore next */ []));
417
+ this.rounded = input("medium", /* @ts-ignore */
418
+ ...(ngDevMode ? [{ debugName: "rounded" }] : /* istanbul ignore next */ []));
419
+ this.size = input("medium", /* @ts-ignore */
420
+ ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
421
+ this.type = model("string", /* @ts-ignore */
422
+ ...(ngDevMode ? [{ debugName: "type" }] : /* istanbul ignore next */ []));
423
+ this.value = model(/* @ts-ignore */
424
+ ...(ngDevMode ? [undefined, { debugName: "value" }] : /* istanbul ignore next */ []));
425
+ effect(() => {
426
+ const value = this.value();
427
+ if (value) {
428
+ untracked(() => {
429
+ this.setFilterValues(value);
430
+ });
431
+ }
432
+ });
433
+ }
434
+ onConnectorChange(item, selected) {
435
+ if (selected) {
436
+ this.selectedConnectorItem.set(item);
437
+ }
438
+ else if (item.value === this.selectedConnectorItem()?.value) {
439
+ this.selectedConnectorItem.set(null);
440
+ }
441
+ }
442
+ onFilterApply() {
443
+ if (!this.selectedConnectorItem()) {
444
+ this.clearSecondFilterValues();
445
+ }
446
+ if (this.type() === "string") {
447
+ this.applyStringFilters();
448
+ }
449
+ else if (this.type() === "number") {
450
+ this.applyNumberFilters();
451
+ }
452
+ else if (this.type() === "date") {
453
+ this.applyDateFilters();
454
+ }
455
+ else if (this.type() === "boolean") {
456
+ this.applyBooleanFilters();
457
+ }
458
+ }
459
+ onFilterClear() {
460
+ this.numberFilterValues.set([null, null]);
461
+ this.stringFilterValues.set(["", ""]);
462
+ this.dateFilterValues.set([null, null]);
463
+ this.#booleanFilterValues = [null, null];
464
+ this.selectedFilterMenuDataItemList.set([undefined, undefined]);
465
+ this.selectedConnectorItem.set(null);
466
+ this.apply.emit({
467
+ logic: "and",
468
+ filters: []
469
+ });
470
+ }
471
+ onFilterOperatorChange(index, item) {
472
+ this.selectedFilterMenuDataItemList.update(list => {
473
+ list[index] = item;
474
+ return [...list];
475
+ });
476
+ }
477
+ getFilterValues() {
478
+ const filterValue = (target) => {
479
+ return {
480
+ operator1: this.selectedFilterMenuDataItemList()[0]?.value,
481
+ value1: target[0],
482
+ logic: this.selectedConnectorItem()?.value,
483
+ operator2: this.selectedFilterMenuDataItemList()[1]?.value,
484
+ value2: target[1]
485
+ };
486
+ };
487
+ switch (this.type()) {
488
+ case "string":
489
+ return filterValue(this.stringFilterValues());
490
+ case "number":
491
+ return filterValue(this.numberFilterValues());
492
+ case "date":
493
+ return filterValue(this.dateFilterValues());
494
+ case "boolean":
495
+ return filterValue(this.#booleanFilterValues);
496
+ default:
497
+ return {
498
+ operator1: undefined,
499
+ value1: null,
500
+ logic: undefined,
501
+ operator2: undefined,
502
+ value2: null
503
+ };
504
+ }
505
+ }
506
+ applyBooleanFilters() {
507
+ const operator1 = this.selectedFilterMenuDataItemList()[0]?.value;
508
+ const operator2 = this.selectedFilterMenuDataItemList()[1]?.value;
509
+ const field = this.field();
510
+ const logic = this.selectedConnectorItem()?.value ?? null;
511
+ const descriptor = this.#filterService.buildBooleanFilterDescriptor({
512
+ field,
513
+ logic,
514
+ operator1,
515
+ operator2,
516
+ value1: true,
517
+ value2: true
518
+ });
519
+ this.apply.emit(descriptor);
520
+ }
521
+ applyDateFilters() {
522
+ const value1 = this.dateFilterValues()[0];
523
+ const value2 = this.dateFilterValues()[1];
524
+ const operator1 = this.selectedFilterMenuDataItemList()[0]?.value;
525
+ const operator2 = this.selectedFilterMenuDataItemList()[1]?.value;
526
+ const field = this.field();
527
+ const logic = this.selectedConnectorItem()?.value ?? null;
528
+ const descriptor = this.#filterService.buildDateFilterDescriptor({
529
+ field,
530
+ logic,
531
+ operator1,
532
+ operator2,
533
+ value1,
534
+ value2
535
+ });
536
+ this.apply.emit(descriptor);
537
+ }
538
+ applyNumberFilters() {
539
+ const value1 = this.numberFilterValues()[0];
540
+ const value2 = this.numberFilterValues()[1];
541
+ const operator1 = this.selectedFilterMenuDataItemList()[0]?.value;
542
+ const operator2 = this.selectedFilterMenuDataItemList()[1]?.value;
543
+ const field = this.field();
544
+ const logic = this.selectedConnectorItem()?.value ?? null;
545
+ const descriptor = this.#filterService.buildNumberFilterDescriptor({
546
+ field,
547
+ logic,
548
+ operator1,
549
+ operator2,
550
+ value1,
551
+ value2
552
+ });
553
+ this.apply.emit(descriptor);
554
+ }
555
+ applyStringFilters() {
556
+ const value1 = this.stringFilterValues()[0];
557
+ const value2 = this.stringFilterValues()[1];
558
+ const operator1 = this.selectedFilterMenuDataItemList()[0]?.value;
559
+ const operator2 = this.selectedFilterMenuDataItemList()[1]?.value;
560
+ const field = this.field();
561
+ const logic = this.selectedConnectorItem()?.value ?? null;
562
+ const descriptor = this.#filterService.buildStringFilterDescriptor({
563
+ field,
564
+ logic,
565
+ operator1,
566
+ operator2,
567
+ value1,
568
+ value2
569
+ });
570
+ this.apply.emit(descriptor);
571
+ }
572
+ clearSecondFilterValues() {
573
+ this.selectedFilterMenuDataItemList.set([this.selectedFilterMenuDataItemList()[0], undefined]);
574
+ switch (this.type()) {
575
+ case "string":
576
+ this.stringFilterValues.set([this.stringFilterValues()[0], ""]);
577
+ break;
578
+ case "number":
579
+ this.numberFilterValues.set([this.numberFilterValues()[0], null]);
580
+ break;
581
+ case "date":
582
+ this.dateFilterValues.set([this.dateFilterValues()[0], null]);
583
+ break;
584
+ case "boolean":
585
+ this.#booleanFilterValues[1] = null;
586
+ break;
587
+ default:
588
+ break;
589
+ }
590
+ }
591
+ setFilterValues(values) {
592
+ let filterMenuDataItems;
593
+ let filterValues;
594
+ switch (this.type()) {
595
+ case "string":
596
+ filterMenuDataItems = this.stringFilterMenuDataItems;
597
+ filterValues = [values.value1 ?? "", values.value2 ?? ""];
598
+ break;
599
+ case "number":
600
+ filterMenuDataItems = this.numericFilterMenuDataItems;
601
+ filterValues = [values.value1 ?? null, values.value2 ?? null];
602
+ break;
603
+ case "date":
604
+ case "boolean":
605
+ filterMenuDataItems =
606
+ this.type() !== "boolean" ? this.dateFilterMenuDataItems : this.booleanFilterMenuDataItems;
607
+ filterValues = [values.value1 ?? null, values.value2 ?? null];
608
+ break;
609
+ default:
610
+ filterMenuDataItems = [];
611
+ filterValues = [null, null];
612
+ break;
613
+ }
614
+ this.selectedFilterMenuDataItemList.set([
615
+ filterMenuDataItems.find(f => f.value === values.operator1) ?? undefined,
616
+ filterMenuDataItems.find(f => f.value === values.operator2) ?? undefined
617
+ ]);
618
+ switch (this.type()) {
619
+ case "string":
620
+ this.stringFilterValues.set(filterValues);
621
+ break;
622
+ case "number":
623
+ this.numberFilterValues.set(filterValues);
624
+ break;
625
+ case "date":
626
+ this.dateFilterValues.set(filterValues);
627
+ break;
628
+ case "boolean":
629
+ this.#booleanFilterValues = filterValues;
630
+ break;
631
+ default:
632
+ break;
633
+ }
634
+ const selectedConnectorItem = values.operator2 && values.logic
635
+ ? (this.connectorDataItems.find(c => c.value === values.logic) ?? null)
636
+ : null;
637
+ this.selectedConnectorItem.set(selectedConnectorItem);
638
+ }
639
+ getDefaultDateFormat(type) {
640
+ switch (type) {
641
+ case "datetime":
642
+ return "dd/MM/yyyy HH:mm";
643
+ case "time":
644
+ return "HH:mm";
645
+ case "date":
646
+ return "dd/MM/yyyy";
647
+ default:
648
+ return "dd/MM/yyyy";
649
+ }
650
+ }
651
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: FilterMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
652
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: FilterMenuComponent, isStandalone: true, selector: "mona-filter-menu", inputs: { dateOptions: { classPropertyName: "dateOptions", publicName: "dateOptions", isSignal: true, isRequired: false, transformFunction: null }, field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: false, transformFunction: null }, operators: { classPropertyName: "operators", publicName: "operators", isSignal: true, isRequired: false, transformFunction: null }, rounded: { classPropertyName: "rounded", publicName: "rounded", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { apply: "apply", field: "fieldChange", operators: "operatorsChange", type: "typeChange", value: "valueChange" }, host: { properties: { "class": "baseClass()" } }, ngImport: i0, template: "<div [class]=\"filterMenuItemClass()\">\r\n @if (type() === \"string\") {\r\n <mona-dropdown-list\r\n [data]=\"stringFilterMenuDataItems | operatorFilter: operators()\"\r\n textField=\"text\"\r\n valueField=\"value\"\r\n [size]=\"size()\"\r\n [rounded]=\"rounded()\"\r\n [ngModel]=\"selectedFilterMenuDataItemList()[0]\"\r\n (ngModelChange)=\"onFilterOperatorChange(0, $event)\"></mona-dropdown-list>\r\n <mona-text-box\r\n [ngModel]=\"stringFilterValues()[0]\"\r\n (ngModelChange)=\"stringFilterValues.set([$event, stringFilterValues()[1]])\"\r\n [size]=\"size()\"\r\n [disabled]=\"selectedFilterMenuDataItemList()[0]?.value | valuelessOperator\"></mona-text-box>\r\n }\r\n\r\n @if (type() === \"number\") {\r\n <mona-dropdown-list\r\n [data]=\"numericFilterMenuDataItems | operatorFilter: operators()\"\r\n textField=\"text\"\r\n valueField=\"value\"\r\n [size]=\"size()\"\r\n [rounded]=\"rounded()\"\r\n [ngModel]=\"selectedFilterMenuDataItemList()[0]\"\r\n (ngModelChange)=\"onFilterOperatorChange(0, $event)\"></mona-dropdown-list>\r\n <mona-numeric-text-box\r\n [ngModel]=\"numberFilterValues()[0]\"\r\n (ngModelChange)=\"numberFilterValues.set([$event, numberFilterValues()[1]])\"\r\n [size]=\"size()\"\r\n [rounded]=\"rounded()\"\r\n [disabled]=\"selectedFilterMenuDataItemList()[0]?.value | valuelessOperator\"></mona-numeric-text-box>\r\n }\r\n\r\n @if (type() === \"date\") {\r\n <mona-dropdown-list\r\n [data]=\"dateFilterMenuDataItems | operatorFilter: operators()\"\r\n textField=\"text\"\r\n valueField=\"value\"\r\n [size]=\"size()\"\r\n [rounded]=\"rounded()\"\r\n [ngModel]=\"selectedFilterMenuDataItemList()[0]\"\r\n (ngModelChange)=\"onFilterOperatorChange(0, $event)\"></mona-dropdown-list>\r\n\r\n @if (type() === \"date\") {\r\n <mona-date-picker\r\n [ngModel]=\"dateFilterValues()[0]\"\r\n (ngModelChange)=\"dateFilterValues.set([$event, dateFilterValues()[1]])\"\r\n [format]=\"effectiveDateOptions().format\"\r\n [size]=\"size()\"\r\n [rounded]=\"rounded()\"\r\n [disabled]=\"selectedFilterMenuDataItemList()[0]?.value | valuelessOperator\"></mona-date-picker>\r\n }\r\n }\r\n\r\n @if (type() === \"boolean\") {\r\n <mona-dropdown-list\r\n [data]=\"booleanFilterMenuDataItems | operatorFilter: operators()\"\r\n textField=\"text\"\r\n valueField=\"value\"\r\n [ngModel]=\"selectedFilterMenuDataItemList()[0]\"\r\n [size]=\"size()\"\r\n [rounded]=\"rounded()\"\r\n (ngModelChange)=\"onFilterOperatorChange(0, $event)\"></mona-dropdown-list>\r\n }\r\n</div>\r\n@if (firstFilterValid()) {\r\n <div [class]=\"filterMenuItemClass()\">\r\n <mona-button-group selection=\"single\" [size]=\"size()\" [rounded]=\"rounded()\" [disabled]=\"!firstFilterValid()\">\r\n @for (item of connectorDataItems; track item) {\r\n <button\r\n monaButton\r\n [selected]=\"item.value === selectedConnectorItem()?.value\"\r\n (selectedChange)=\"onConnectorChange(item, $event)\">\r\n {{ item.text }}\r\n </button>\r\n }\r\n </mona-button-group>\r\n </div>\r\n}\r\n@if (!!selectedConnectorItem()) {\r\n <div [class]=\"filterMenuItemClass()\">\r\n @if (type() === \"string\") {\r\n <mona-dropdown-list\r\n [data]=\"stringFilterMenuDataItems | operatorFilter: operators()\"\r\n textField=\"text\"\r\n valueField=\"value\"\r\n [size]=\"size()\"\r\n [rounded]=\"rounded()\"\r\n [ngModel]=\"selectedFilterMenuDataItemList()[1]\"\r\n (ngModelChange)=\"onFilterOperatorChange(1, $event)\"></mona-dropdown-list>\r\n <mona-text-box\r\n [ngModel]=\"stringFilterValues()[1]\"\r\n (ngModelChange)=\"stringFilterValues.set([stringFilterValues()[0], $event])\"\r\n [disabled]=\"selectedFilterMenuDataItemList()[1]?.value | valuelessOperator\"></mona-text-box>\r\n }\r\n\r\n @if (type() === \"number\") {\r\n <mona-dropdown-list\r\n [data]=\"numericFilterMenuDataItems | operatorFilter: operators()\"\r\n textField=\"text\"\r\n valueField=\"value\"\r\n [size]=\"size()\"\r\n [rounded]=\"rounded()\"\r\n [ngModel]=\"selectedFilterMenuDataItemList()[1]\"\r\n (ngModelChange)=\"onFilterOperatorChange(1, $event)\"></mona-dropdown-list>\r\n\r\n <mona-numeric-text-box\r\n [size]=\"size()\"\r\n [rounded]=\"rounded()\"\r\n [ngModel]=\"numberFilterValues()[1]\"\r\n (ngModelChange)=\"numberFilterValues.set([numberFilterValues()[0], $event])\"\r\n [disabled]=\"selectedFilterMenuDataItemList()[1]?.value | valuelessOperator\"></mona-numeric-text-box>\r\n }\r\n\r\n @if (type() === \"date\") {\r\n <mona-dropdown-list\r\n [data]=\"dateFilterMenuDataItems | operatorFilter: operators()\"\r\n textField=\"text\"\r\n valueField=\"value\"\r\n [size]=\"size()\"\r\n [rounded]=\"rounded()\"\r\n [ngModel]=\"selectedFilterMenuDataItemList()[1]\"\r\n (ngModelChange)=\"onFilterOperatorChange(1, $event)\"></mona-dropdown-list>\r\n\r\n @if (type() === \"date\") {\r\n <mona-date-picker\r\n [ngModel]=\"dateFilterValues()[1]\"\r\n (ngModelChange)=\"dateFilterValues.set([dateFilterValues()[0], $event])\"\r\n [format]=\"effectiveDateOptions().format\"\r\n [size]=\"size()\"\r\n [rounded]=\"rounded()\"\r\n [disabled]=\"selectedFilterMenuDataItemList()[1]?.value | valuelessOperator\"></mona-date-picker>\r\n }\r\n }\r\n\r\n @if (type() === \"boolean\") {\r\n <mona-dropdown-list\r\n [data]=\"booleanFilterMenuDataItems | operatorFilter: operators()\"\r\n textField=\"text\"\r\n valueField=\"value\"\r\n [size]=\"size()\"\r\n [rounded]=\"rounded()\"\r\n [ngModel]=\"selectedFilterMenuDataItemList()[1]\"\r\n (ngModelChange)=\"onFilterOperatorChange(1, $event)\"></mona-dropdown-list>\r\n }\r\n </div>\r\n}\r\n<div [class]=\"`${filterMenuItemClass()} ${filterMenuActionsClass()}`\">\r\n <button\r\n monaButton\r\n (click)=\"onFilterApply()\"\r\n [look]=\"'primary'\"\r\n [size]=\"size()\"\r\n [rounded]=\"rounded()\"\r\n [disabled]=\"applyDisabled()\">\r\n Apply\r\n </button>\r\n <button monaButton (click)=\"onFilterClear()\" [look]=\"'default'\" [size]=\"size()\" [rounded]=\"rounded()\">Clear</button>\r\n</div>\r\n", dependencies: [{ kind: "component", type: DropdownListComponent, selector: "mona-dropdown-list", inputs: ["aria-label", "aria-labelledby", "data", "disabled", "itemDisabled", "invalid", "loading", "placeholder", "popupClass", "popupHeight", "popupWidth", "readonly", "required", "rounded", "showClearButton", "size", "textField", "touched", "class", "valueField", "value"], outputs: ["close", "closed", "disabledChange", "open", "opened", "touch", "valueChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: TextBoxComponent, selector: "mona-text-box", inputs: ["clearButton", "disabled", "inputAttributes", "inputClass", "inputStyle", "invalid", "placeholder", "readonly", "required", "rounded", "size", "touched", "type", "class", "value"], outputs: ["inputBlur", "inputFocus", "touch", "valueChange"] }, { kind: "component", type: NumericTextBoxComponent, selector: "mona-numeric-text-box", inputs: ["aria-label", "decimals", "disabled", "formatter", "maxValue", "minValue", "nullable", "readonly", "required", "invalid", "rounded", "size", "spinners", "step", "tabindex", "touched", "class", "value"], outputs: ["inputBlur", "inputFocus", "inputFocusOut", "touch", "valueChange"] }, { kind: "component", type: DatePickerComponent, selector: "mona-date-picker", inputs: ["disabled", "disabledDates", "firstDay", "format", "invalid", "max", "min", "placeholder", "popupClass", "popupHeight", "popupWidth", "readonly", "readonlyInput", "required", "rounded", "showClearButton", "size", "touched", "class", "value", "weekNumber"], outputs: ["close", "closed", "open", "opened", "touch", "valueChange"] }, { kind: "component", type: ButtonGroupComponent, selector: "mona-button-group", inputs: ["allowEmpty", "aria-label", "disabled", "look", "rounded", "selection", "size", "class"], outputs: ["buttonClick", "disabledChange", "selectionChange"] }, { kind: "directive", type: ButtonDirective, selector: "button[monaButton]", inputs: ["aria-haspopup", "disabled", "iconOnly", "loading", "look", "rounded", "selected", "size", "tabindex", "toggleable", "class"], outputs: ["disabledChange", "loadingChange", "lookChange", "selectedChange"] }, { kind: "pipe", type: ValuelessOperatorPipe, name: "valuelessOperator" }, { kind: "pipe", type: OperatorFilterPipe, name: "operatorFilter" }] }); }
653
+ }
654
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: FilterMenuComponent, decorators: [{
655
+ type: Component,
656
+ args: [{ selector: "mona-filter-menu", imports: [
657
+ DropdownListComponent,
658
+ FormsModule,
659
+ TextBoxComponent,
660
+ NumericTextBoxComponent,
661
+ DatePickerComponent,
662
+ ButtonGroupComponent,
663
+ ButtonDirective,
664
+ ValuelessOperatorPipe,
665
+ OperatorFilterPipe
666
+ ], host: {
667
+ "[class]": "baseClass()"
668
+ }, template: "<div [class]=\"filterMenuItemClass()\">\r\n @if (type() === \"string\") {\r\n <mona-dropdown-list\r\n [data]=\"stringFilterMenuDataItems | operatorFilter: operators()\"\r\n textField=\"text\"\r\n valueField=\"value\"\r\n [size]=\"size()\"\r\n [rounded]=\"rounded()\"\r\n [ngModel]=\"selectedFilterMenuDataItemList()[0]\"\r\n (ngModelChange)=\"onFilterOperatorChange(0, $event)\"></mona-dropdown-list>\r\n <mona-text-box\r\n [ngModel]=\"stringFilterValues()[0]\"\r\n (ngModelChange)=\"stringFilterValues.set([$event, stringFilterValues()[1]])\"\r\n [size]=\"size()\"\r\n [disabled]=\"selectedFilterMenuDataItemList()[0]?.value | valuelessOperator\"></mona-text-box>\r\n }\r\n\r\n @if (type() === \"number\") {\r\n <mona-dropdown-list\r\n [data]=\"numericFilterMenuDataItems | operatorFilter: operators()\"\r\n textField=\"text\"\r\n valueField=\"value\"\r\n [size]=\"size()\"\r\n [rounded]=\"rounded()\"\r\n [ngModel]=\"selectedFilterMenuDataItemList()[0]\"\r\n (ngModelChange)=\"onFilterOperatorChange(0, $event)\"></mona-dropdown-list>\r\n <mona-numeric-text-box\r\n [ngModel]=\"numberFilterValues()[0]\"\r\n (ngModelChange)=\"numberFilterValues.set([$event, numberFilterValues()[1]])\"\r\n [size]=\"size()\"\r\n [rounded]=\"rounded()\"\r\n [disabled]=\"selectedFilterMenuDataItemList()[0]?.value | valuelessOperator\"></mona-numeric-text-box>\r\n }\r\n\r\n @if (type() === \"date\") {\r\n <mona-dropdown-list\r\n [data]=\"dateFilterMenuDataItems | operatorFilter: operators()\"\r\n textField=\"text\"\r\n valueField=\"value\"\r\n [size]=\"size()\"\r\n [rounded]=\"rounded()\"\r\n [ngModel]=\"selectedFilterMenuDataItemList()[0]\"\r\n (ngModelChange)=\"onFilterOperatorChange(0, $event)\"></mona-dropdown-list>\r\n\r\n @if (type() === \"date\") {\r\n <mona-date-picker\r\n [ngModel]=\"dateFilterValues()[0]\"\r\n (ngModelChange)=\"dateFilterValues.set([$event, dateFilterValues()[1]])\"\r\n [format]=\"effectiveDateOptions().format\"\r\n [size]=\"size()\"\r\n [rounded]=\"rounded()\"\r\n [disabled]=\"selectedFilterMenuDataItemList()[0]?.value | valuelessOperator\"></mona-date-picker>\r\n }\r\n }\r\n\r\n @if (type() === \"boolean\") {\r\n <mona-dropdown-list\r\n [data]=\"booleanFilterMenuDataItems | operatorFilter: operators()\"\r\n textField=\"text\"\r\n valueField=\"value\"\r\n [ngModel]=\"selectedFilterMenuDataItemList()[0]\"\r\n [size]=\"size()\"\r\n [rounded]=\"rounded()\"\r\n (ngModelChange)=\"onFilterOperatorChange(0, $event)\"></mona-dropdown-list>\r\n }\r\n</div>\r\n@if (firstFilterValid()) {\r\n <div [class]=\"filterMenuItemClass()\">\r\n <mona-button-group selection=\"single\" [size]=\"size()\" [rounded]=\"rounded()\" [disabled]=\"!firstFilterValid()\">\r\n @for (item of connectorDataItems; track item) {\r\n <button\r\n monaButton\r\n [selected]=\"item.value === selectedConnectorItem()?.value\"\r\n (selectedChange)=\"onConnectorChange(item, $event)\">\r\n {{ item.text }}\r\n </button>\r\n }\r\n </mona-button-group>\r\n </div>\r\n}\r\n@if (!!selectedConnectorItem()) {\r\n <div [class]=\"filterMenuItemClass()\">\r\n @if (type() === \"string\") {\r\n <mona-dropdown-list\r\n [data]=\"stringFilterMenuDataItems | operatorFilter: operators()\"\r\n textField=\"text\"\r\n valueField=\"value\"\r\n [size]=\"size()\"\r\n [rounded]=\"rounded()\"\r\n [ngModel]=\"selectedFilterMenuDataItemList()[1]\"\r\n (ngModelChange)=\"onFilterOperatorChange(1, $event)\"></mona-dropdown-list>\r\n <mona-text-box\r\n [ngModel]=\"stringFilterValues()[1]\"\r\n (ngModelChange)=\"stringFilterValues.set([stringFilterValues()[0], $event])\"\r\n [disabled]=\"selectedFilterMenuDataItemList()[1]?.value | valuelessOperator\"></mona-text-box>\r\n }\r\n\r\n @if (type() === \"number\") {\r\n <mona-dropdown-list\r\n [data]=\"numericFilterMenuDataItems | operatorFilter: operators()\"\r\n textField=\"text\"\r\n valueField=\"value\"\r\n [size]=\"size()\"\r\n [rounded]=\"rounded()\"\r\n [ngModel]=\"selectedFilterMenuDataItemList()[1]\"\r\n (ngModelChange)=\"onFilterOperatorChange(1, $event)\"></mona-dropdown-list>\r\n\r\n <mona-numeric-text-box\r\n [size]=\"size()\"\r\n [rounded]=\"rounded()\"\r\n [ngModel]=\"numberFilterValues()[1]\"\r\n (ngModelChange)=\"numberFilterValues.set([numberFilterValues()[0], $event])\"\r\n [disabled]=\"selectedFilterMenuDataItemList()[1]?.value | valuelessOperator\"></mona-numeric-text-box>\r\n }\r\n\r\n @if (type() === \"date\") {\r\n <mona-dropdown-list\r\n [data]=\"dateFilterMenuDataItems | operatorFilter: operators()\"\r\n textField=\"text\"\r\n valueField=\"value\"\r\n [size]=\"size()\"\r\n [rounded]=\"rounded()\"\r\n [ngModel]=\"selectedFilterMenuDataItemList()[1]\"\r\n (ngModelChange)=\"onFilterOperatorChange(1, $event)\"></mona-dropdown-list>\r\n\r\n @if (type() === \"date\") {\r\n <mona-date-picker\r\n [ngModel]=\"dateFilterValues()[1]\"\r\n (ngModelChange)=\"dateFilterValues.set([dateFilterValues()[0], $event])\"\r\n [format]=\"effectiveDateOptions().format\"\r\n [size]=\"size()\"\r\n [rounded]=\"rounded()\"\r\n [disabled]=\"selectedFilterMenuDataItemList()[1]?.value | valuelessOperator\"></mona-date-picker>\r\n }\r\n }\r\n\r\n @if (type() === \"boolean\") {\r\n <mona-dropdown-list\r\n [data]=\"booleanFilterMenuDataItems | operatorFilter: operators()\"\r\n textField=\"text\"\r\n valueField=\"value\"\r\n [size]=\"size()\"\r\n [rounded]=\"rounded()\"\r\n [ngModel]=\"selectedFilterMenuDataItemList()[1]\"\r\n (ngModelChange)=\"onFilterOperatorChange(1, $event)\"></mona-dropdown-list>\r\n }\r\n </div>\r\n}\r\n<div [class]=\"`${filterMenuItemClass()} ${filterMenuActionsClass()}`\">\r\n <button\r\n monaButton\r\n (click)=\"onFilterApply()\"\r\n [look]=\"'primary'\"\r\n [size]=\"size()\"\r\n [rounded]=\"rounded()\"\r\n [disabled]=\"applyDisabled()\">\r\n Apply\r\n </button>\r\n <button monaButton (click)=\"onFilterClear()\" [look]=\"'default'\" [size]=\"size()\" [rounded]=\"rounded()\">Clear</button>\r\n</div>\r\n" }]
669
+ }], ctorParameters: () => [], propDecorators: { apply: [{ type: i0.Output, args: ["apply"] }], dateOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "dateOptions", required: false }] }], field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: false }] }, { type: i0.Output, args: ["fieldChange"] }], operators: [{ type: i0.Input, args: [{ isSignal: true, alias: "operators", required: false }] }, { type: i0.Output, args: ["operatorsChange"] }], rounded: [{ type: i0.Input, args: [{ isSignal: true, alias: "rounded", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }, { type: i0.Output, args: ["typeChange"] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }] } });
670
+
671
+ /*
672
+ * Public API Surface of @nanahoshi/mona-ui/filter
673
+ */
674
+
675
+ /**
676
+ * Generated bundle index. Do not edit.
677
+ */
678
+
679
+ export { FilterMenuComponent, FilterService };
680
+ //# sourceMappingURL=nanahoshi-mona-ui-filter.mjs.map