@masterteam/components 0.0.67 → 0.0.68

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 (95) hide show
  1. package/README.md +63 -63
  2. package/assets/cairo.css +70 -70
  3. package/assets/common.css +1 -1
  4. package/assets/i18n/ar.json +36 -36
  5. package/assets/i18n/en.json +36 -36
  6. package/assets/inter.css +418 -418
  7. package/fesm2022/masterteam-components-avatar-text.mjs +2 -2
  8. package/fesm2022/masterteam-components-avatar-text.mjs.map +1 -1
  9. package/fesm2022/masterteam-components-avatar.mjs +2 -2
  10. package/fesm2022/masterteam-components-avatar.mjs.map +1 -1
  11. package/fesm2022/masterteam-components-breadcrumb.mjs +2 -2
  12. package/fesm2022/masterteam-components-breadcrumb.mjs.map +1 -1
  13. package/fesm2022/masterteam-components-button-group.mjs +2 -2
  14. package/fesm2022/masterteam-components-button-group.mjs.map +1 -1
  15. package/fesm2022/masterteam-components-button.mjs +2 -2
  16. package/fesm2022/masterteam-components-button.mjs.map +1 -1
  17. package/fesm2022/masterteam-components-card.mjs +2 -2
  18. package/fesm2022/masterteam-components-card.mjs.map +1 -1
  19. package/fesm2022/masterteam-components-checkbox-field.mjs +2 -2
  20. package/fesm2022/masterteam-components-checkbox-field.mjs.map +1 -1
  21. package/fesm2022/masterteam-components-chip.mjs +2 -2
  22. package/fesm2022/masterteam-components-chip.mjs.map +1 -1
  23. package/fesm2022/masterteam-components-color-picker-field.mjs +2 -2
  24. package/fesm2022/masterteam-components-color-picker-field.mjs.map +1 -1
  25. package/fesm2022/masterteam-components-confirmation.mjs +2 -2
  26. package/fesm2022/masterteam-components-confirmation.mjs.map +1 -1
  27. package/fesm2022/masterteam-components-date-field.mjs +2 -2
  28. package/fesm2022/masterteam-components-date-field.mjs.map +1 -1
  29. package/fesm2022/masterteam-components-dialog.mjs.map +1 -1
  30. package/fesm2022/masterteam-components-drawer.mjs +2 -2
  31. package/fesm2022/masterteam-components-drawer.mjs.map +1 -1
  32. package/fesm2022/masterteam-components-dynamic-drawer.mjs +68 -68
  33. package/fesm2022/masterteam-components-dynamic-drawer.mjs.map +1 -1
  34. package/fesm2022/masterteam-components-editor-field.mjs +2 -2
  35. package/fesm2022/masterteam-components-editor-field.mjs.map +1 -1
  36. package/fesm2022/masterteam-components-field-validation.mjs +20 -20
  37. package/fesm2022/masterteam-components-field-validation.mjs.map +1 -1
  38. package/fesm2022/masterteam-components-formula-builder.mjs +360 -0
  39. package/fesm2022/masterteam-components-formula-builder.mjs.map +1 -0
  40. package/fesm2022/masterteam-components-icon-field.mjs +2 -2
  41. package/fesm2022/masterteam-components-icon-field.mjs.map +1 -1
  42. package/fesm2022/masterteam-components-list.mjs +2 -2
  43. package/fesm2022/masterteam-components-list.mjs.map +1 -1
  44. package/fesm2022/masterteam-components-menu.mjs +2 -2
  45. package/fesm2022/masterteam-components-menu.mjs.map +1 -1
  46. package/fesm2022/masterteam-components-modal.mjs.map +1 -1
  47. package/fesm2022/masterteam-components-module-summary-card.mjs +2 -2
  48. package/fesm2022/masterteam-components-module-summary-card.mjs.map +1 -1
  49. package/fesm2022/masterteam-components-multi-select-field.mjs +2 -2
  50. package/fesm2022/masterteam-components-multi-select-field.mjs.map +1 -1
  51. package/fesm2022/masterteam-components-number-field.mjs +2 -2
  52. package/fesm2022/masterteam-components-number-field.mjs.map +1 -1
  53. package/fesm2022/masterteam-components-page-header.mjs +2 -2
  54. package/fesm2022/masterteam-components-page-header.mjs.map +1 -1
  55. package/fesm2022/masterteam-components-page.mjs +2 -2
  56. package/fesm2022/masterteam-components-page.mjs.map +1 -1
  57. package/fesm2022/masterteam-components-paginator.mjs +2 -2
  58. package/fesm2022/masterteam-components-paginator.mjs.map +1 -1
  59. package/fesm2022/masterteam-components-pick-list-field.mjs +2 -2
  60. package/fesm2022/masterteam-components-pick-list-field.mjs.map +1 -1
  61. package/fesm2022/masterteam-components-radio-button-field.mjs +2 -2
  62. package/fesm2022/masterteam-components-radio-button-field.mjs.map +1 -1
  63. package/fesm2022/masterteam-components-radio-cards-field.mjs +2 -2
  64. package/fesm2022/masterteam-components-radio-cards-field.mjs.map +1 -1
  65. package/fesm2022/masterteam-components-radio-cards.mjs +2 -2
  66. package/fesm2022/masterteam-components-radio-cards.mjs.map +1 -1
  67. package/fesm2022/masterteam-components-select-field.mjs +2 -2
  68. package/fesm2022/masterteam-components-select-field.mjs.map +1 -1
  69. package/fesm2022/masterteam-components-sidebar.mjs +2 -2
  70. package/fesm2022/masterteam-components-sidebar.mjs.map +1 -1
  71. package/fesm2022/masterteam-components-slider-field.mjs +2 -2
  72. package/fesm2022/masterteam-components-slider-field.mjs.map +1 -1
  73. package/fesm2022/masterteam-components-table.mjs +2 -2
  74. package/fesm2022/masterteam-components-table.mjs.map +1 -1
  75. package/fesm2022/masterteam-components-tabs.mjs +2 -2
  76. package/fesm2022/masterteam-components-tabs.mjs.map +1 -1
  77. package/fesm2022/masterteam-components-text-field.mjs +2 -2
  78. package/fesm2022/masterteam-components-text-field.mjs.map +1 -1
  79. package/fesm2022/masterteam-components-textarea-field.mjs +2 -2
  80. package/fesm2022/masterteam-components-textarea-field.mjs.map +1 -1
  81. package/fesm2022/masterteam-components-toast.mjs +2 -2
  82. package/fesm2022/masterteam-components-toast.mjs.map +1 -1
  83. package/fesm2022/masterteam-components-toggle-field.mjs +2 -2
  84. package/fesm2022/masterteam-components-toggle-field.mjs.map +1 -1
  85. package/fesm2022/masterteam-components-tooltip.mjs.map +1 -1
  86. package/fesm2022/masterteam-components-topbar.mjs +2 -2
  87. package/fesm2022/masterteam-components-topbar.mjs.map +1 -1
  88. package/fesm2022/masterteam-components-upload-field.mjs +6 -6
  89. package/fesm2022/masterteam-components-upload-field.mjs.map +1 -1
  90. package/fesm2022/masterteam-components-user-search-field.mjs +2 -2
  91. package/fesm2022/masterteam-components-user-search-field.mjs.map +1 -1
  92. package/fesm2022/masterteam-components.mjs +61 -61
  93. package/fesm2022/masterteam-components.mjs.map +1 -1
  94. package/package.json +11 -7
  95. package/types/masterteam-components-formula-builder.d.ts +69 -0
@@ -66,30 +66,30 @@ class FieldValidation {
66
66
  touched = input(false, { ...(ngDevMode ? { debugName: "touched" } : {}), transform: booleanAttribute });
67
67
  isInvalid = isInvalid;
68
68
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: FieldValidation, deps: [], target: i0.ɵɵFactoryTarget.Component });
69
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: FieldValidation, isStandalone: true, selector: "mt-field-validation", inputs: { control: { classPropertyName: "control", publicName: "control", isSignal: true, isRequired: false, transformFunction: null }, touched: { classPropertyName: "touched", publicName: "touched", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.hidden": "!isInvalid(control())" } }, ngImport: i0, template: `
70
- @if (isInvalid(control())) {
71
- <p-message
72
- severity="error"
73
- variant="simple"
74
- size="small"
75
- [text]="control().errors | errorMessage"
76
- >
77
- </p-message>
78
- }
69
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: FieldValidation, isStandalone: true, selector: "mt-field-validation", inputs: { control: { classPropertyName: "control", publicName: "control", isSignal: true, isRequired: false, transformFunction: null }, touched: { classPropertyName: "touched", publicName: "touched", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.hidden": "!isInvalid(control())" } }, ngImport: i0, template: `
70
+ @if (isInvalid(control())) {
71
+ <p-message
72
+ severity="error"
73
+ variant="simple"
74
+ size="small"
75
+ [text]="control().errors | errorMessage"
76
+ >
77
+ </p-message>
78
+ }
79
79
  `, isInline: true, dependencies: [{ kind: "component", type: Message, selector: "p-message", inputs: ["severity", "text", "escape", "style", "styleClass", "closable", "icon", "closeIcon", "life", "showTransitionOptions", "hideTransitionOptions", "size", "variant", "motionOptions"], outputs: ["onClose"] }, { kind: "pipe", type: ErrorMessagePipe, name: "errorMessage" }] });
80
80
  }
81
81
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: FieldValidation, decorators: [{
82
82
  type: Component,
83
- args: [{ selector: 'mt-field-validation', standalone: true, imports: [Message, ErrorMessagePipe], template: `
84
- @if (isInvalid(control())) {
85
- <p-message
86
- severity="error"
87
- variant="simple"
88
- size="small"
89
- [text]="control().errors | errorMessage"
90
- >
91
- </p-message>
92
- }
83
+ args: [{ selector: 'mt-field-validation', standalone: true, imports: [Message, ErrorMessagePipe], template: `
84
+ @if (isInvalid(control())) {
85
+ <p-message
86
+ severity="error"
87
+ variant="simple"
88
+ size="small"
89
+ [text]="control().errors | errorMessage"
90
+ >
91
+ </p-message>
92
+ }
93
93
  `, host: {
94
94
  '[class.hidden]': '!isInvalid(control())',
95
95
  } }]
@@ -1 +1 @@
1
- {"version":3,"file":"masterteam-components-field-validation.mjs","sources":["../../../../packages/masterteam/components/field-validation/error-message.pipe.ts","../../../../packages/masterteam/components/field-validation/field-validation.ts","../../../../packages/masterteam/components/field-validation/masterteam-components-field-validation.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\r\nimport { ValidationErrors } from '@angular/forms';\r\n\r\n@Pipe({\r\n name: 'errorMessage',\r\n standalone: true,\r\n pure: true,\r\n})\r\nexport class ErrorMessagePipe implements PipeTransform {\r\n transform(errors: ValidationErrors | null): string {\r\n if (!errors) {\r\n return '';\r\n }\r\n\r\n // Handle standard Angular validator errors first\r\n if (errors['required']) {\r\n return 'This field is required';\r\n }\r\n if (errors['email']) {\r\n return 'Please enter a valid email address';\r\n }\r\n if (errors['minlength']) {\r\n const { requiredLength, actualLength } = errors['minlength'];\r\n return `Minimum length is ${requiredLength} characters (current: ${actualLength})`;\r\n }\r\n if (errors['maxlength']) {\r\n const { requiredLength, actualLength } = errors['maxlength'];\r\n return `Maximum length is ${requiredLength} characters (current: ${actualLength})`;\r\n }\r\n if (errors['min']) {\r\n const { min, actual } = errors['min'];\r\n return `Minimum value is ${min} (current: ${actual})`;\r\n }\r\n if (errors['max']) {\r\n const { max, actual } = errors['max'];\r\n return `Maximum value is ${max} (current: ${actual})`;\r\n }\r\n if (errors['pattern']) {\r\n return 'The format is invalid';\r\n }\r\n if (errors['fileSizeLimited']) {\r\n return 'File size exceeds the limit';\r\n }\r\n\r\n // Handle custom errors that provide their own message\r\n // This looks for an error structured like: { myCustomError: { message: '...' } }\r\n for (const key in errors) {\r\n const errorValue = errors[key];\r\n if (errorValue && typeof errorValue === 'object' && errorValue.message) {\r\n return errorValue.message;\r\n }\r\n }\r\n\r\n // Fallback for any other error\r\n const firstErrorKey = Object.keys(errors)[0];\r\n return `Invalid field: ${firstErrorKey}`;\r\n }\r\n}\r\n","import { booleanAttribute, Component, input } from '@angular/core';\r\nimport { Message } from 'primeng/message';\r\nimport { AbstractControl } from '@angular/forms';\r\nimport { ErrorMessagePipe } from './error-message.pipe';\r\nimport { isInvalid } from '@masterteam/components';\r\n\r\n@Component({\r\n selector: 'mt-field-validation',\r\n standalone: true,\r\n imports: [Message, ErrorMessagePipe],\r\n template: `\r\n @if (isInvalid(control())) {\r\n <p-message\r\n severity=\"error\"\r\n variant=\"simple\"\r\n size=\"small\"\r\n [text]=\"control().errors | errorMessage\"\r\n >\r\n </p-message>\r\n }\r\n `,\r\n host: {\r\n '[class.hidden]': '!isInvalid(control())',\r\n },\r\n styles: [],\r\n})\r\nexport class FieldValidation {\r\n readonly control = input<AbstractControl | null>(null);\r\n readonly touched = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n\r\n isInvalid = isInvalid;\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"masterteam-components-field-validation.mjs","sources":["../../../../packages/masterteam/components/field-validation/error-message.pipe.ts","../../../../packages/masterteam/components/field-validation/field-validation.ts","../../../../packages/masterteam/components/field-validation/masterteam-components-field-validation.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\nimport { ValidationErrors } from '@angular/forms';\n\n@Pipe({\n name: 'errorMessage',\n standalone: true,\n pure: true,\n})\nexport class ErrorMessagePipe implements PipeTransform {\n transform(errors: ValidationErrors | null): string {\n if (!errors) {\n return '';\n }\n\n // Handle standard Angular validator errors first\n if (errors['required']) {\n return 'This field is required';\n }\n if (errors['email']) {\n return 'Please enter a valid email address';\n }\n if (errors['minlength']) {\n const { requiredLength, actualLength } = errors['minlength'];\n return `Minimum length is ${requiredLength} characters (current: ${actualLength})`;\n }\n if (errors['maxlength']) {\n const { requiredLength, actualLength } = errors['maxlength'];\n return `Maximum length is ${requiredLength} characters (current: ${actualLength})`;\n }\n if (errors['min']) {\n const { min, actual } = errors['min'];\n return `Minimum value is ${min} (current: ${actual})`;\n }\n if (errors['max']) {\n const { max, actual } = errors['max'];\n return `Maximum value is ${max} (current: ${actual})`;\n }\n if (errors['pattern']) {\n return 'The format is invalid';\n }\n if (errors['fileSizeLimited']) {\n return 'File size exceeds the limit';\n }\n\n // Handle custom errors that provide their own message\n // This looks for an error structured like: { myCustomError: { message: '...' } }\n for (const key in errors) {\n const errorValue = errors[key];\n if (errorValue && typeof errorValue === 'object' && errorValue.message) {\n return errorValue.message;\n }\n }\n\n // Fallback for any other error\n const firstErrorKey = Object.keys(errors)[0];\n return `Invalid field: ${firstErrorKey}`;\n }\n}\n","import { booleanAttribute, Component, input } from '@angular/core';\nimport { Message } from 'primeng/message';\nimport { AbstractControl } from '@angular/forms';\nimport { ErrorMessagePipe } from './error-message.pipe';\nimport { isInvalid } from '@masterteam/components';\n\n@Component({\n selector: 'mt-field-validation',\n standalone: true,\n imports: [Message, ErrorMessagePipe],\n template: `\n @if (isInvalid(control())) {\n <p-message\n severity=\"error\"\n variant=\"simple\"\n size=\"small\"\n [text]=\"control().errors | errorMessage\"\n >\n </p-message>\n }\n `,\n host: {\n '[class.hidden]': '!isInvalid(control())',\n },\n styles: [],\n})\nexport class FieldValidation {\n readonly control = input<AbstractControl | null>(null);\n readonly touched = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n\n isInvalid = isInvalid;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,360 @@
1
+ import * as i0 from '@angular/core';
2
+ import { input, booleanAttribute, inject, signal, computed, Component } from '@angular/core';
3
+ import * as i1 from '@angular/forms';
4
+ import { FormsModule } from '@angular/forms';
5
+ import * as i3 from '@angular/cdk/drag-drop';
6
+ import { moveItemInArray, DragDropModule } from '@angular/cdk/drag-drop';
7
+ import { Button } from '@masterteam/components/button';
8
+ import { InputTextModule } from 'primeng/inputtext';
9
+ import * as i2 from 'primeng/chip';
10
+ import { ChipModule } from 'primeng/chip';
11
+ import { HttpClient } from '@angular/common/http';
12
+ import { map, catchError, EMPTY, of } from 'rxjs';
13
+ import { SelectField } from '@masterteam/components/select-field';
14
+ import * as i4 from 'primeng/inputgroup';
15
+ import { InputGroupModule } from 'primeng/inputgroup';
16
+ import * as i5 from 'primeng/inputgroupaddon';
17
+ import { InputGroupAddonModule } from 'primeng/inputgroupaddon';
18
+ import { TextField } from '@masterteam/components/text-field';
19
+
20
+ const types = {
21
+ function: {
22
+ bg: 'var(--p-green-50)',
23
+ border: 'var(--p-green-500)',
24
+ },
25
+ value: {
26
+ bg: 'var(--p-purple-100)',
27
+ border: 'var(--p-purple-500)',
28
+ },
29
+ field: {
30
+ bg: 'var(--p-orange-50)',
31
+ border: 'var(--p-orange-500)',
32
+ },
33
+ operator: {
34
+ bg: 'var(--p-primary-50)',
35
+ border: 'var(--p-primary-500)',
36
+ },
37
+ };
38
+ const operators = [
39
+ {
40
+ key: '+',
41
+ name: '+',
42
+ type: 'operator',
43
+ },
44
+ {
45
+ key: '-',
46
+ name: '-',
47
+ type: 'operator',
48
+ },
49
+ {
50
+ key: '*',
51
+ name: '×',
52
+ type: 'operator',
53
+ },
54
+ {
55
+ key: '/',
56
+ name: '÷',
57
+ type: 'operator',
58
+ },
59
+ // {
60
+ // key: '==',
61
+ // name: '=',
62
+ // type: 'operator',
63
+ // },
64
+ // {
65
+ // key: '!=',
66
+ // name: '≠',
67
+ // type: 'operator',
68
+ // },
69
+ // {
70
+ // key: '<',
71
+ // name: '<',
72
+ // type: 'operator',
73
+ // },
74
+ // {
75
+ // key: '<=',
76
+ // name: '≤',
77
+ // type: 'operator',
78
+ // },
79
+ // {
80
+ // key: '>',
81
+ // name: '>',
82
+ // type: 'operator',
83
+ // },
84
+ // {
85
+ // key: '>=',
86
+ // name: '≥',
87
+ // type: 'operator',
88
+ // },
89
+ // {
90
+ // key: '||',
91
+ // name: '||',
92
+ // type: 'operator',
93
+ // },
94
+ // {
95
+ // key: '&&',
96
+ // name: '&&',
97
+ // type: 'operator',
98
+ // },
99
+ {
100
+ key: '(',
101
+ name: '(',
102
+ type: 'operator',
103
+ },
104
+ {
105
+ key: ')',
106
+ name: ')',
107
+ type: 'operator',
108
+ },
109
+ {
110
+ key: ',',
111
+ name: ',',
112
+ type: 'operator',
113
+ },
114
+ {
115
+ key: ';',
116
+ name: ';',
117
+ type: 'operator',
118
+ },
119
+ ];
120
+
121
+ class FormulaBuilder {
122
+ hideTitle = input(false, { ...(ngDevMode ? { debugName: "hideTitle" } : {}), transform: booleanAttribute });
123
+ properties = input([], ...(ngDevMode ? [{ debugName: "properties" }] : []));
124
+ // validationUrl = input<string>('app/checkformula');
125
+ validationUrl = input(...(ngDevMode ? [undefined, { debugName: "validationUrl" }] : []));
126
+ httpClient = inject(HttpClient);
127
+ // translateService: TranslateService = inject(TranslateService);
128
+ // functions = computed(() => []);
129
+ functions = [
130
+ {
131
+ // name: this.translateService.instant('formula-builder.count'),
132
+ name: 'formula-builder.count',
133
+ key: 'count',
134
+ hint: '',
135
+ },
136
+ {
137
+ // name: this.translateService.instant('formula-builder.sum'),
138
+ name: 'formula-builder.sum',
139
+ key: 'sum',
140
+ hint: '',
141
+ },
142
+ {
143
+ // name: this.translateService.instant('formula-builder.average'),
144
+ name: 'formula-builder.average',
145
+ key: 'average',
146
+ hint: '',
147
+ },
148
+ {
149
+ // name: this.translateService.instant('formula-builder.count-value'),
150
+ name: 'formula-builder.count-value',
151
+ key: 'countvalue',
152
+ // hint: this.translateService.instant('formula-builder.count-value-hint'),
153
+ hint: 'formula-builder.count-value-hint',
154
+ },
155
+ {
156
+ // name: this.translateService.instant('formula-builder.average-count'),
157
+ name: 'formula-builder.average-count',
158
+ key: 'averagecount',
159
+ // hint: this.translateService.instant('formula-builder.average-count-hint'),
160
+ hint: 'formula-builder.average-count-hint',
161
+ },
162
+ {
163
+ // name: this.translateService.instant('formula-builder.mode'),
164
+ name: 'formula-builder.mode',
165
+ key: 'mode',
166
+ // hint: this.translateService.instant('formula-builder.mode-hint'),
167
+ hint: 'formula-builder.mode-hint',
168
+ },
169
+ {
170
+ // name: this.translateService.instant('formula-builder.median'),
171
+ name: 'formula-builder.median',
172
+ key: 'median',
173
+ // hint: this.translateService.instant('formula-builder.median-hint'),
174
+ hint: 'formula-builder.median-hint',
175
+ },
176
+ {
177
+ // name: this.translateService.instant('formula-builder.standard-deviation'),
178
+ name: 'formula-builder.standard-deviation',
179
+ key: 'stddev',
180
+ hint: '',
181
+ },
182
+ {
183
+ // name: this.translateService.instant('formula-builder.min-max'),
184
+ name: 'formula-builder.min-max',
185
+ key: 'range',
186
+ // hint: this.translateService.instant('formula-builder.min-max-hint'),
187
+ hint: 'formula-builder.min-max-hint',
188
+ },
189
+ ];
190
+ selectedLookup = signal(null, ...(ngDevMode ? [{ debugName: "selectedLookup" }] : []));
191
+ formula = signal([], ...(ngDevMode ? [{ debugName: "formula" }] : []));
192
+ disabled = signal(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
193
+ touched = signal(false, ...(ngDevMode ? [{ debugName: "touched" }] : []));
194
+ types = types;
195
+ operators = operators;
196
+ formulaText = computed(() => {
197
+ return '';
198
+ }, ...(ngDevMode ? [{ debugName: "formulaText" }] : []));
199
+ onChange(_formula) { }
200
+ onTouched() { }
201
+ emitChange() {
202
+ const str = this.formula()
203
+ .map((x) => x.key)
204
+ .join(' ');
205
+ this.onChange(str);
206
+ }
207
+ onAdd(item) {
208
+ this.markAsTouched();
209
+ if (!this.disabled()) {
210
+ this.formula.update((formula) => [...formula, item]);
211
+ this.emitChange();
212
+ }
213
+ }
214
+ onRemove(index) {
215
+ this.markAsTouched();
216
+ if (!this.disabled()) {
217
+ this.formula.update((formula) => {
218
+ formula.splice(index, 1);
219
+ return formula;
220
+ });
221
+ this.emitChange();
222
+ }
223
+ }
224
+ onAddProperty(property, dropdown) {
225
+ if (!property?.key)
226
+ return;
227
+ this.onAdd({
228
+ key: property.key,
229
+ name: property.name,
230
+ type: 'field',
231
+ dataType: property?.dataType,
232
+ });
233
+ // TODO: fix input clearing
234
+ dropdown?.clearSelection();
235
+ this.selectedLookup.set(null);
236
+ }
237
+ onAddValue(el) {
238
+ this.onAdd({
239
+ key: el.value(),
240
+ name: el.value(),
241
+ type: 'value',
242
+ });
243
+ el.value.set('');
244
+ }
245
+ onAddFunction(func, dropdown) {
246
+ if (!func?.key)
247
+ return;
248
+ this.onAdd({
249
+ key: func.key,
250
+ name: func.name,
251
+ type: 'function',
252
+ });
253
+ dropdown?.clearSelection();
254
+ }
255
+ writeValue(formulaString) {
256
+ if (formulaString) {
257
+ this.formula.set(this.parseStringToItems(formulaString));
258
+ }
259
+ }
260
+ registerOnChange(onChange) {
261
+ this.onChange = onChange;
262
+ }
263
+ registerOnTouched(onTouched) {
264
+ this.onTouched = onTouched;
265
+ }
266
+ setDisabledState(isDisabled) {
267
+ this.disabled.set(isDisabled);
268
+ }
269
+ markAsTouched() {
270
+ if (!this.touched()) {
271
+ this.onTouched();
272
+ this.touched.set(true);
273
+ }
274
+ }
275
+ validate(control) {
276
+ const formula = control.value;
277
+ if (this.validationUrl()) {
278
+ const res$ = this.httpClient.post(this.validationUrl(), {
279
+ formula,
280
+ });
281
+ return res$.pipe(map(({ data }) => {
282
+ return data ? null : { mustBeValidFormula: formula };
283
+ }), catchError(() => {
284
+ return EMPTY;
285
+ }));
286
+ }
287
+ else {
288
+ return of(null);
289
+ }
290
+ }
291
+ drop(event) {
292
+ this.formula.update((formula) => {
293
+ moveItemInArray(formula, event.previousIndex, event.currentIndex);
294
+ return formula;
295
+ });
296
+ }
297
+ parseStringToItems(strValue) {
298
+ if (!strValue || !strValue.trim())
299
+ return [];
300
+ const tokens = strValue.split(/\s+/);
301
+ const results = [];
302
+ tokens.forEach((token) => {
303
+ let found = this.operators.find((el) => el.key === token);
304
+ if (found) {
305
+ results.push(found);
306
+ return;
307
+ }
308
+ found = this.functions.find((el) => el.key === token);
309
+ if (found) {
310
+ results.push({
311
+ key: token,
312
+ name: found.name,
313
+ type: 'function',
314
+ });
315
+ return;
316
+ }
317
+ found = this.properties().find((el) => el.key === token);
318
+ if (found) {
319
+ results.push({
320
+ key: token,
321
+ name: found.name,
322
+ type: 'field',
323
+ });
324
+ return;
325
+ }
326
+ results.push({
327
+ key: token,
328
+ name: token,
329
+ type: 'value',
330
+ });
331
+ });
332
+ return results;
333
+ }
334
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: FormulaBuilder, deps: [], target: i0.ɵɵFactoryTarget.Component });
335
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: FormulaBuilder, isStandalone: true, selector: "mt-formula-builder", inputs: { hideTitle: { classPropertyName: "hideTitle", publicName: "hideTitle", isSignal: true, isRequired: false, transformFunction: null }, properties: { classPropertyName: "properties", publicName: "properties", isSignal: true, isRequired: false, transformFunction: null }, validationUrl: { classPropertyName: "validationUrl", publicName: "validationUrl", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"@container w-full flex flex-col gap-2\">\n @if (!hideTitle()) {\n <h6 class=\"m-0\" translate>formula-builder.formula-builder</h6>\n }\n @if (!disabled()) {\n <div class=\"grid grid-cols-6 gap-2\">\n @if (properties()?.length) {\n <div class=\"col-span-6 @md:col-span-3 @2xl:col-span-2\">\n <mt-select-field\n #propertyDropdown=\"\"\n (onChange)=\"onAddProperty($event, propertyDropdown)\"\n label=\"formula-builder.property\"\n selectId=\"-1\"\n placeholder=\"{{ 'formula-builder.select-property' }}\"\n styleClass=\"w-full\"\n [filter]=\"true\"\n filterBy=\"name\"\n [ngModel]=\"null\"\n [options]=\"properties()\"\n optionLabel=\"name\"\n dataKey=\"key\"\n appendTo=\"body\"\n ></mt-select-field>\n </div>\n }\n @if (functions?.length) {\n <div class=\"col-span-6 @md:col-span-3 @2xl:col-span-2\">\n <mt-select-field\n #functionDropdown=\"\"\n label=\"formula-builder.function\"\n (onChange)=\"onAddFunction($event, functionDropdown)\"\n selectId=\"-1\"\n placeholder=\"{{ 'formula-builder.select-function' }}\"\n styleClass=\"w-full\"\n [filter]=\"true\"\n filterBy=\"name\"\n [ngModel]=\"null\"\n [options]=\"functions\"\n optionLabel=\"name\"\n dataKey=\"key\"\n appendTo=\"body\"\n ></mt-select-field>\n </div>\n }\n <div class=\"col-span-6 @md:col-span-3 @2xl:col-span-2\">\n <label for=\"configuration\" translate>formula-builder.operators</label>\n <div dir=\"ltr\" class=\"flex flex-wrap gap-1\">\n @for (operator of operators; track operator) {\n <mt-button\n type=\"button\"\n [outlined]=\"true\"\n [label]=\"operator.name\"\n (click)=\"onAdd(operator)\"\n >\n </mt-button>\n }\n </div>\n </div>\n <div class=\"col-span-6 @md:col-span-3 @2xl:col-span-2\">\n <label for=\"configuration\" translate\n >formula-builder.custom-value</label\n >\n <p-input-group>\n <mt-text-field\n #customInput\n type=\"text\"\n [field]=\"false\"\n [placeholder]=\"'formula-builder.custom-value'\"\n style=\"width: 100%\"\n ></mt-text-field>\n <p-inputgroup-addon>\n <mt-button\n class=\"\"\n type=\"button\"\n (click)=\"onAddValue(customInput)\"\n [disabled]=\"disabled() || !customInput.value()\"\n label=\"\"\n icon=\"general.plus\"\n ></mt-button>\n </p-inputgroup-addon>\n </p-input-group>\n </div>\n </div>\n }\n <div>\n <label for=\"configuration\" translate>formula-builder.formula</label>\n <div\n dir=\"ltr\"\n cdkDropList=\"\"\n cdkDropListOrientation=\"mixed\"\n [cdkDropListData]=\"formula()\"\n (cdkDropListDropped)=\"drop($event)\"\n [cdkDropListDisabled]=\"disabled()\"\n class=\"flex flex-wrap gap-1 rounded-lg border-1 border-gray-500 bg-gray-50 p-2 formula-preview\"\n >\n @for (item of formula(); track item; let i = $index) {\n <p-chip\n [style]=\"{\n background: types[item.type]?.bg ?? 'var(--p-gary-50)',\n borderColor: types[item.type]?.border ?? 'var(--p-gary-500)',\n }\"\n styleClass=\"text-black-alpha-90 border-1 border-round cursor-grab\"\n [label]=\"item.name\"\n [removable]=\"!disabled()\"\n (onRemove)=\"onRemove(i)\"\n [cdkDragDisabled]=\"disabled()\"\n cdkDrag=\"\"\n ></p-chip>\n }\n </div>\n </div>\n</div>\n", styles: [":host .formula-preview{border-color:var(--p-gray-500);min-height:60px}:host.ng-valid .formula-preview{border-color:var(--p-green-500)}:host.ng-invalid .formula-preview{border-color:var(--p-red-500)}:host ::ng-deep .cdk-drop-list{display:flex}:host ::ng-deep .cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f;z-index:1000}:host ::ng-deep .cdk-drag-placeholder{opacity:.5}:host ::ng-deep .cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}:host ::ng-deep .formula-preview.cdk-drop-list-dragging .formula-preview:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}::ng-deep .p-inputgroupaddon:first-child .p-inputtext,::ng-deep .p-inputgroup>mt-text-field:first-child .p-inputtext{height:100%;width:100%;border-radius:0;border-start-start-radius:var(--p-inputgroup-addon-border-radius);border-end-start-radius:var(--p-inputgroup-addon-border-radius)}::ng-deep .p-inputgroupaddon:first-child,::ng-deep .p-inputgroup>p-autocomplete:first-child{width:100%}::ng-deep .p-inputgroupaddon:first-child>div,::ng-deep .p-inputgroup>p-autocomplete:first-child>div{width:100%;height:100%}::ng-deep .p-inputgroupaddon:first-child>div ul,::ng-deep .p-inputgroup>p-autocomplete:first-child>div ul{border-radius:0;border-start-start-radius:var(--p-inputgroup-addon-border-radius);border-end-start-radius:var(--p-inputgroup-addon-border-radius)}\n"], dependencies: [{ 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: SelectField, selector: "mt-select-field", inputs: ["field", "label", "placeholder", "hasPlaceholderPrefix", "class", "readonly", "pInputs", "options", "optionValue", "optionLabel", "filter", "filterBy", "dataKey", "showClear", "clearAfterSelect", "required", "group", "optionGroupLabel", "optionGroupChildren", "loading"], outputs: ["onChange"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "component", type: Button, selector: "mt-button", inputs: ["icon", "label", "tooltip", "class", "type", "styleClass", "severity", "badge", "variant", "badgeSeverity", "size", "iconPos", "autofocus", "fluid", "raised", "rounded", "text", "plain", "outlined", "link", "disabled", "loading", "pInputs"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: ChipModule }, { kind: "component", type: i2.Chip, selector: "p-chip", inputs: ["label", "icon", "image", "alt", "styleClass", "disabled", "removable", "removeIcon", "chipProps"], outputs: ["onRemove", "onImageError"] }, { kind: "ngmodule", type:
336
+ // TranslateModule,
337
+ DragDropModule }, { kind: "directive", type: i3.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i3.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "ngmodule", type: InputGroupModule }, { kind: "component", type: i4.InputGroup, selector: "p-inputgroup, p-inputGroup, p-input-group", inputs: ["styleClass"] }, { kind: "ngmodule", type: InputGroupAddonModule }, { kind: "component", type: i5.InputGroupAddon, selector: "p-inputgroup-addon, p-inputGroupAddon", inputs: ["style", "styleClass"] }, { kind: "component", type: TextField, selector: "mt-text-field", inputs: ["field", "hint", "label", "placeholder", "class", "type", "readonly", "pInputs", "required", "icon", "iconPosition"] }] });
338
+ }
339
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: FormulaBuilder, decorators: [{
340
+ type: Component,
341
+ args: [{ selector: 'mt-formula-builder', standalone: true, imports: [
342
+ FormsModule,
343
+ SelectField,
344
+ InputTextModule,
345
+ Button,
346
+ ChipModule,
347
+ // TranslateModule,
348
+ DragDropModule,
349
+ InputGroupModule,
350
+ InputGroupAddonModule,
351
+ TextField,
352
+ ], template: "<div class=\"@container w-full flex flex-col gap-2\">\n @if (!hideTitle()) {\n <h6 class=\"m-0\" translate>formula-builder.formula-builder</h6>\n }\n @if (!disabled()) {\n <div class=\"grid grid-cols-6 gap-2\">\n @if (properties()?.length) {\n <div class=\"col-span-6 @md:col-span-3 @2xl:col-span-2\">\n <mt-select-field\n #propertyDropdown=\"\"\n (onChange)=\"onAddProperty($event, propertyDropdown)\"\n label=\"formula-builder.property\"\n selectId=\"-1\"\n placeholder=\"{{ 'formula-builder.select-property' }}\"\n styleClass=\"w-full\"\n [filter]=\"true\"\n filterBy=\"name\"\n [ngModel]=\"null\"\n [options]=\"properties()\"\n optionLabel=\"name\"\n dataKey=\"key\"\n appendTo=\"body\"\n ></mt-select-field>\n </div>\n }\n @if (functions?.length) {\n <div class=\"col-span-6 @md:col-span-3 @2xl:col-span-2\">\n <mt-select-field\n #functionDropdown=\"\"\n label=\"formula-builder.function\"\n (onChange)=\"onAddFunction($event, functionDropdown)\"\n selectId=\"-1\"\n placeholder=\"{{ 'formula-builder.select-function' }}\"\n styleClass=\"w-full\"\n [filter]=\"true\"\n filterBy=\"name\"\n [ngModel]=\"null\"\n [options]=\"functions\"\n optionLabel=\"name\"\n dataKey=\"key\"\n appendTo=\"body\"\n ></mt-select-field>\n </div>\n }\n <div class=\"col-span-6 @md:col-span-3 @2xl:col-span-2\">\n <label for=\"configuration\" translate>formula-builder.operators</label>\n <div dir=\"ltr\" class=\"flex flex-wrap gap-1\">\n @for (operator of operators; track operator) {\n <mt-button\n type=\"button\"\n [outlined]=\"true\"\n [label]=\"operator.name\"\n (click)=\"onAdd(operator)\"\n >\n </mt-button>\n }\n </div>\n </div>\n <div class=\"col-span-6 @md:col-span-3 @2xl:col-span-2\">\n <label for=\"configuration\" translate\n >formula-builder.custom-value</label\n >\n <p-input-group>\n <mt-text-field\n #customInput\n type=\"text\"\n [field]=\"false\"\n [placeholder]=\"'formula-builder.custom-value'\"\n style=\"width: 100%\"\n ></mt-text-field>\n <p-inputgroup-addon>\n <mt-button\n class=\"\"\n type=\"button\"\n (click)=\"onAddValue(customInput)\"\n [disabled]=\"disabled() || !customInput.value()\"\n label=\"\"\n icon=\"general.plus\"\n ></mt-button>\n </p-inputgroup-addon>\n </p-input-group>\n </div>\n </div>\n }\n <div>\n <label for=\"configuration\" translate>formula-builder.formula</label>\n <div\n dir=\"ltr\"\n cdkDropList=\"\"\n cdkDropListOrientation=\"mixed\"\n [cdkDropListData]=\"formula()\"\n (cdkDropListDropped)=\"drop($event)\"\n [cdkDropListDisabled]=\"disabled()\"\n class=\"flex flex-wrap gap-1 rounded-lg border-1 border-gray-500 bg-gray-50 p-2 formula-preview\"\n >\n @for (item of formula(); track item; let i = $index) {\n <p-chip\n [style]=\"{\n background: types[item.type]?.bg ?? 'var(--p-gary-50)',\n borderColor: types[item.type]?.border ?? 'var(--p-gary-500)',\n }\"\n styleClass=\"text-black-alpha-90 border-1 border-round cursor-grab\"\n [label]=\"item.name\"\n [removable]=\"!disabled()\"\n (onRemove)=\"onRemove(i)\"\n [cdkDragDisabled]=\"disabled()\"\n cdkDrag=\"\"\n ></p-chip>\n }\n </div>\n </div>\n</div>\n", styles: [":host .formula-preview{border-color:var(--p-gray-500);min-height:60px}:host.ng-valid .formula-preview{border-color:var(--p-green-500)}:host.ng-invalid .formula-preview{border-color:var(--p-red-500)}:host ::ng-deep .cdk-drop-list{display:flex}:host ::ng-deep .cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f;z-index:1000}:host ::ng-deep .cdk-drag-placeholder{opacity:.5}:host ::ng-deep .cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}:host ::ng-deep .formula-preview.cdk-drop-list-dragging .formula-preview:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}::ng-deep .p-inputgroupaddon:first-child .p-inputtext,::ng-deep .p-inputgroup>mt-text-field:first-child .p-inputtext{height:100%;width:100%;border-radius:0;border-start-start-radius:var(--p-inputgroup-addon-border-radius);border-end-start-radius:var(--p-inputgroup-addon-border-radius)}::ng-deep .p-inputgroupaddon:first-child,::ng-deep .p-inputgroup>p-autocomplete:first-child{width:100%}::ng-deep .p-inputgroupaddon:first-child>div,::ng-deep .p-inputgroup>p-autocomplete:first-child>div{width:100%;height:100%}::ng-deep .p-inputgroupaddon:first-child>div ul,::ng-deep .p-inputgroup>p-autocomplete:first-child>div ul{border-radius:0;border-start-start-radius:var(--p-inputgroup-addon-border-radius);border-end-start-radius:var(--p-inputgroup-addon-border-radius)}\n"] }]
353
+ }], propDecorators: { hideTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideTitle", required: false }] }], properties: [{ type: i0.Input, args: [{ isSignal: true, alias: "properties", required: false }] }], validationUrl: [{ type: i0.Input, args: [{ isSignal: true, alias: "validationUrl", required: false }] }] } });
354
+
355
+ /**
356
+ * Generated bundle index. Do not edit.
357
+ */
358
+
359
+ export { FormulaBuilder };
360
+ //# sourceMappingURL=masterteam-components-formula-builder.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"masterteam-components-formula-builder.mjs","sources":["../../../../packages/masterteam/components/formula-builder/formula-builder.utils.ts","../../../../packages/masterteam/components/formula-builder/formula-builder.ts","../../../../packages/masterteam/components/formula-builder/formula-builder.html","../../../../packages/masterteam/components/formula-builder/masterteam-components-formula-builder.ts"],"sourcesContent":["export const types = {\n function: {\n bg: 'var(--p-green-50)',\n border: 'var(--p-green-500)',\n },\n value: {\n bg: 'var(--p-purple-100)',\n border: 'var(--p-purple-500)',\n },\n field: {\n bg: 'var(--p-orange-50)',\n border: 'var(--p-orange-500)',\n },\n operator: {\n bg: 'var(--p-primary-50)',\n border: 'var(--p-primary-500)',\n },\n};\n\nexport const operators = [\n {\n key: '+',\n name: '+',\n type: 'operator',\n },\n {\n key: '-',\n name: '-',\n type: 'operator',\n },\n {\n key: '*',\n name: '×',\n type: 'operator',\n },\n {\n key: '/',\n name: '÷',\n type: 'operator',\n },\n // {\n // key: '==',\n // name: '=',\n // type: 'operator',\n // },\n // {\n // key: '!=',\n // name: '≠',\n // type: 'operator',\n // },\n // {\n // key: '<',\n // name: '<',\n // type: 'operator',\n // },\n // {\n // key: '<=',\n // name: '≤',\n // type: 'operator',\n // },\n // {\n // key: '>',\n // name: '>',\n // type: 'operator',\n // },\n // {\n // key: '>=',\n // name: '≥',\n // type: 'operator',\n // },\n // {\n // key: '||',\n // name: '||',\n // type: 'operator',\n // },\n // {\n // key: '&&',\n // name: '&&',\n // type: 'operator',\n // },\n {\n key: '(',\n name: '(',\n type: 'operator',\n },\n {\n key: ')',\n name: ')',\n type: 'operator',\n },\n {\n key: ',',\n name: ',',\n type: 'operator',\n },\n {\n key: ';',\n name: ';',\n type: 'operator',\n },\n];\n","import {\n booleanAttribute,\n Component,\n computed,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormsModule,\n // NG_ASYNC_VALIDATORS,\n // NG_VALUE_ACCESSOR,\n ValidationErrors,\n} from '@angular/forms';\nimport {\n CdkDragDrop,\n DragDropModule,\n moveItemInArray,\n} from '@angular/cdk/drag-drop';\nimport { Button } from '@masterteam/components/button';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { ChipModule } from 'primeng/chip';\n// import { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { HttpClient } from '@angular/common/http';\nimport { catchError, EMPTY, map, Observable, of } from 'rxjs';\nimport { operators, types } from './formula-builder.utils';\nimport { SelectField } from '@masterteam/components/select-field';\nimport { InputGroupModule } from 'primeng/inputgroup';\nimport { InputGroupAddonModule } from 'primeng/inputgroupaddon';\nimport { TextField } from '@masterteam/components/text-field';\n\nexport interface FormulaBuilderProperty {\n key: string;\n name: string;\n dataType: string;\n}\n\n@Component({\n selector: 'mt-formula-builder',\n standalone: true,\n imports: [\n FormsModule,\n SelectField,\n InputTextModule,\n Button,\n ChipModule,\n // TranslateModule,\n DragDropModule,\n InputGroupModule,\n InputGroupAddonModule,\n TextField,\n ],\n // providers: [\n // {\n // provide: NG_VALUE_ACCESSOR,\n // multi: true,\n // useExisting: FormulaBuilder,\n // },\n // {\n // provide: NG_ASYNC_VALIDATORS,\n // multi: true,\n // useExisting: FormulaBuilder,\n // },\n // ],\n templateUrl: './formula-builder.html',\n styleUrls: ['./formula-builder.scss'],\n})\nexport class FormulaBuilder implements ControlValueAccessor {\n hideTitle = input<boolean, unknown>(false, { transform: booleanAttribute });\n properties = input<FormulaBuilderProperty[]>([]);\n // validationUrl = input<string>('app/checkformula');\n validationUrl = input<string>();\n\n httpClient: HttpClient = inject(HttpClient);\n // translateService: TranslateService = inject(TranslateService);\n\n // functions = computed(() => []);\n protected readonly functions: any[] = [\n {\n // name: this.translateService.instant('formula-builder.count'),\n name: 'formula-builder.count',\n key: 'count',\n hint: '',\n },\n {\n // name: this.translateService.instant('formula-builder.sum'),\n name: 'formula-builder.sum',\n key: 'sum',\n hint: '',\n },\n {\n // name: this.translateService.instant('formula-builder.average'),\n name: 'formula-builder.average',\n key: 'average',\n hint: '',\n },\n {\n // name: this.translateService.instant('formula-builder.count-value'),\n name: 'formula-builder.count-value',\n key: 'countvalue',\n // hint: this.translateService.instant('formula-builder.count-value-hint'),\n hint: 'formula-builder.count-value-hint',\n },\n {\n // name: this.translateService.instant('formula-builder.average-count'),\n name: 'formula-builder.average-count',\n key: 'averagecount',\n // hint: this.translateService.instant('formula-builder.average-count-hint'),\n hint: 'formula-builder.average-count-hint',\n },\n {\n // name: this.translateService.instant('formula-builder.mode'),\n name: 'formula-builder.mode',\n key: 'mode',\n // hint: this.translateService.instant('formula-builder.mode-hint'),\n hint: 'formula-builder.mode-hint',\n },\n {\n // name: this.translateService.instant('formula-builder.median'),\n name: 'formula-builder.median',\n key: 'median',\n // hint: this.translateService.instant('formula-builder.median-hint'),\n hint: 'formula-builder.median-hint',\n },\n {\n // name: this.translateService.instant('formula-builder.standard-deviation'),\n name: 'formula-builder.standard-deviation',\n key: 'stddev',\n hint: '',\n },\n {\n // name: this.translateService.instant('formula-builder.min-max'),\n name: 'formula-builder.min-max',\n key: 'range',\n // hint: this.translateService.instant('formula-builder.min-max-hint'),\n hint: 'formula-builder.min-max-hint',\n },\n ];\n selectedLookup = signal<any>(null);\n formula = signal<any[]>([]);\n disabled = signal<boolean>(false);\n touched = signal<boolean>(false);\n types = types;\n operators = operators;\n\n formulaText = computed<string>(() => {\n return '';\n });\n\n onChange(_formula: string) {}\n\n onTouched() {}\n\n emitChange() {\n const str = this.formula()\n .map((x) => x.key)\n .join(' ');\n this.onChange(str);\n }\n\n onAdd(item: any) {\n this.markAsTouched();\n if (!this.disabled()) {\n this.formula.update((formula) => [...formula, item]);\n this.emitChange();\n }\n }\n\n onRemove(index: number) {\n this.markAsTouched();\n if (!this.disabled()) {\n this.formula.update((formula) => {\n formula.splice(index, 1);\n return formula;\n });\n\n this.emitChange();\n }\n }\n\n onAddProperty(property: any, dropdown: SelectField) {\n if (!property?.key) return;\n this.onAdd({\n key: property.key,\n name: property.name,\n type: 'field',\n dataType: property?.dataType,\n });\n // TODO: fix input clearing\n dropdown?.clearSelection();\n this.selectedLookup.set(null);\n }\n\n onAddValue(el: TextField) {\n this.onAdd({\n key: el.value(),\n name: el.value(),\n type: 'value',\n });\n el.value.set('');\n }\n\n onAddFunction(func: any, dropdown: SelectField) {\n if (!func?.key) return;\n this.onAdd({\n key: func.key,\n name: func.name,\n type: 'function',\n });\n dropdown?.clearSelection();\n }\n\n writeValue(formulaString: string): void {\n if (formulaString) {\n this.formula.set(this.parseStringToItems(formulaString));\n }\n }\n\n registerOnChange(onChange: any) {\n this.onChange = onChange;\n }\n\n registerOnTouched(onTouched: any) {\n this.onTouched = onTouched;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n markAsTouched() {\n if (!this.touched()) {\n this.onTouched();\n this.touched.set(true);\n }\n }\n\n validate(control: AbstractControl): Observable<ValidationErrors | null> {\n const formula = control.value;\n\n if (this.validationUrl()) {\n const res$ = this.httpClient.post<any>(this.validationUrl() as string, {\n formula,\n });\n return res$.pipe(\n map(({ data }) => {\n return data ? null : { mustBeValidFormula: formula };\n }),\n catchError(() => {\n return EMPTY;\n }),\n );\n } else {\n return of(null);\n }\n }\n\n drop(event: CdkDragDrop<any[]>) {\n this.formula.update((formula) => {\n moveItemInArray(formula, event.previousIndex, event.currentIndex);\n return formula;\n });\n }\n\n parseStringToItems(strValue: string): any[] {\n if (!strValue || !strValue.trim()) return [];\n\n const tokens = strValue.split(/\\s+/);\n const results: any[] = [];\n\n tokens.forEach((token) => {\n let found: any = this.operators.find((el) => el.key === token);\n\n if (found) {\n results.push(found);\n return;\n }\n\n found = this.functions.find((el) => el.key === token);\n\n if (found) {\n results.push({\n key: token,\n name: found.name,\n type: 'function',\n });\n\n return;\n }\n\n found = this.properties().find((el) => el.key === token);\n\n if (found) {\n results.push({\n key: token,\n name: found.name,\n type: 'field',\n });\n return;\n }\n\n results.push({\n key: token,\n name: token,\n type: 'value',\n });\n });\n\n return results;\n }\n}\n","<div class=\"@container w-full flex flex-col gap-2\">\n @if (!hideTitle()) {\n <h6 class=\"m-0\" translate>formula-builder.formula-builder</h6>\n }\n @if (!disabled()) {\n <div class=\"grid grid-cols-6 gap-2\">\n @if (properties()?.length) {\n <div class=\"col-span-6 @md:col-span-3 @2xl:col-span-2\">\n <mt-select-field\n #propertyDropdown=\"\"\n (onChange)=\"onAddProperty($event, propertyDropdown)\"\n label=\"formula-builder.property\"\n selectId=\"-1\"\n placeholder=\"{{ 'formula-builder.select-property' }}\"\n styleClass=\"w-full\"\n [filter]=\"true\"\n filterBy=\"name\"\n [ngModel]=\"null\"\n [options]=\"properties()\"\n optionLabel=\"name\"\n dataKey=\"key\"\n appendTo=\"body\"\n ></mt-select-field>\n </div>\n }\n @if (functions?.length) {\n <div class=\"col-span-6 @md:col-span-3 @2xl:col-span-2\">\n <mt-select-field\n #functionDropdown=\"\"\n label=\"formula-builder.function\"\n (onChange)=\"onAddFunction($event, functionDropdown)\"\n selectId=\"-1\"\n placeholder=\"{{ 'formula-builder.select-function' }}\"\n styleClass=\"w-full\"\n [filter]=\"true\"\n filterBy=\"name\"\n [ngModel]=\"null\"\n [options]=\"functions\"\n optionLabel=\"name\"\n dataKey=\"key\"\n appendTo=\"body\"\n ></mt-select-field>\n </div>\n }\n <div class=\"col-span-6 @md:col-span-3 @2xl:col-span-2\">\n <label for=\"configuration\" translate>formula-builder.operators</label>\n <div dir=\"ltr\" class=\"flex flex-wrap gap-1\">\n @for (operator of operators; track operator) {\n <mt-button\n type=\"button\"\n [outlined]=\"true\"\n [label]=\"operator.name\"\n (click)=\"onAdd(operator)\"\n >\n </mt-button>\n }\n </div>\n </div>\n <div class=\"col-span-6 @md:col-span-3 @2xl:col-span-2\">\n <label for=\"configuration\" translate\n >formula-builder.custom-value</label\n >\n <p-input-group>\n <mt-text-field\n #customInput\n type=\"text\"\n [field]=\"false\"\n [placeholder]=\"'formula-builder.custom-value'\"\n style=\"width: 100%\"\n ></mt-text-field>\n <p-inputgroup-addon>\n <mt-button\n class=\"\"\n type=\"button\"\n (click)=\"onAddValue(customInput)\"\n [disabled]=\"disabled() || !customInput.value()\"\n label=\"\"\n icon=\"general.plus\"\n ></mt-button>\n </p-inputgroup-addon>\n </p-input-group>\n </div>\n </div>\n }\n <div>\n <label for=\"configuration\" translate>formula-builder.formula</label>\n <div\n dir=\"ltr\"\n cdkDropList=\"\"\n cdkDropListOrientation=\"mixed\"\n [cdkDropListData]=\"formula()\"\n (cdkDropListDropped)=\"drop($event)\"\n [cdkDropListDisabled]=\"disabled()\"\n class=\"flex flex-wrap gap-1 rounded-lg border-1 border-gray-500 bg-gray-50 p-2 formula-preview\"\n >\n @for (item of formula(); track item; let i = $index) {\n <p-chip\n [style]=\"{\n background: types[item.type]?.bg ?? 'var(--p-gary-50)',\n borderColor: types[item.type]?.border ?? 'var(--p-gary-500)',\n }\"\n styleClass=\"text-black-alpha-90 border-1 border-round cursor-grab\"\n [label]=\"item.name\"\n [removable]=\"!disabled()\"\n (onRemove)=\"onRemove(i)\"\n [cdkDragDisabled]=\"disabled()\"\n cdkDrag=\"\"\n ></p-chip>\n }\n </div>\n </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -46,13 +46,13 @@ class IconField {
46
46
  return c.errors;
47
47
  }
48
48
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: IconField, deps: [], target: i0.ɵɵFactoryTarget.Component });
49
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: IconField, isStandalone: true, selector: "mt-icon-field", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "grid gap-1" }, ngImport: i0, template: "@if (label()) {\r\n <label\r\n (click)=\"dropdown.show(); dropdown.focus()\"\r\n [class.required]=\"ngControl?.control?.hasValidator(requiredValidator)\"\r\n [for]=\"ngControl?.name || label()\"\r\n >{{ label() }}</label\r\n >\r\n}\r\n<p-select\r\n #dropdown\r\n [options]=\"icons\"\r\n [filter]=\"false\"\r\n filterBy=\"name\"\r\n [inputId]=\"ngControl?.name ? ngControl?.name?.toString() : label()\"\r\n appendTo=\"body\"\r\n (onBlur)=\"onTouched()\"\r\n (ngModelChange)=\"onChangeIcon($event)\"\r\n [ngModel]=\"selectedIcon()\"\r\n [invalid]=\"isInvalid(ngControl?.control)\"\r\n placeholder=\"Select Icon\"\r\n styleClass=\"w-full\"\r\n panelStyleClass=\"icon-select-panel\"\r\n>\r\n <ng-template let-icon #selectedItem>\r\n @if (icon) {\r\n <div class=\"flex items-center justify-center text-2xl\">\r\n <mt-icon [icon]=\"icon\" />\r\n </div>\r\n } @else {\r\n <div class=\"flex items-center justify-center\">Select Icon</div>\r\n }\r\n </ng-template>\r\n <ng-template let-icon #item>\r\n <div class=\"w-full h-full flex items-center justify-center text-lg\">\r\n <mt-icon [icon]=\"icon\" />\r\n </div>\r\n </ng-template>\r\n</p-select>\r\n\r\n<mt-field-validation [control]=\"ngControl?.control\"></mt-field-validation>\r\n", styles: ["::ng-deep .icon-select-panel .p-select-list-container .p-select-list{display:grid;grid-template-columns:repeat(7,1fr);padding-inline:calc(var(--spacing) * 2);gap:.5rem}::ng-deep .icon-select-panel .p-select-list-container .p-select-list .p-select-option{padding:.25rem;border-radius:var(--p-select-option-border-radius);width:2.5rem;height:2.5rem}\n"], dependencies: [{ 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: Select, selector: "p-select", inputs: ["id", "scrollHeight", "filter", "panelStyle", "styleClass", "panelStyleClass", "readonly", "editable", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "filterValue", "options", "appendTo", "motionOptions"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "component", type: Icon, selector: "mt-icon", inputs: ["icon"] }, { kind: "component", type: FieldValidation, selector: "mt-field-validation", inputs: ["control", "touched"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
49
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: IconField, isStandalone: true, selector: "mt-icon-field", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "grid gap-1" }, ngImport: i0, template: "@if (label()) {\n <label\n (click)=\"dropdown.show(); dropdown.focus()\"\n [class.required]=\"ngControl?.control?.hasValidator(requiredValidator)\"\n [for]=\"ngControl?.name || label()\"\n >{{ label() }}</label\n >\n}\n<p-select\n #dropdown\n [options]=\"icons\"\n [filter]=\"false\"\n filterBy=\"name\"\n [inputId]=\"ngControl?.name ? ngControl?.name?.toString() : label()\"\n appendTo=\"body\"\n (onBlur)=\"onTouched()\"\n (ngModelChange)=\"onChangeIcon($event)\"\n [ngModel]=\"selectedIcon()\"\n [invalid]=\"isInvalid(ngControl?.control)\"\n placeholder=\"Select Icon\"\n styleClass=\"w-full\"\n panelStyleClass=\"icon-select-panel\"\n>\n <ng-template let-icon #selectedItem>\n @if (icon) {\n <div class=\"flex items-center justify-center text-2xl\">\n <mt-icon [icon]=\"icon\" />\n </div>\n } @else {\n <div class=\"flex items-center justify-center\">Select Icon</div>\n }\n </ng-template>\n <ng-template let-icon #item>\n <div class=\"w-full h-full flex items-center justify-center text-lg\">\n <mt-icon [icon]=\"icon\" />\n </div>\n </ng-template>\n</p-select>\n\n<mt-field-validation [control]=\"ngControl?.control\"></mt-field-validation>\n", styles: ["::ng-deep .icon-select-panel .p-select-list-container .p-select-list{display:grid;grid-template-columns:repeat(7,1fr);padding-inline:calc(var(--spacing) * 2);gap:.5rem}::ng-deep .icon-select-panel .p-select-list-container .p-select-list .p-select-option{padding:.25rem;border-radius:var(--p-select-option-border-radius);width:2.5rem;height:2.5rem}\n"], dependencies: [{ 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: Select, selector: "p-select", inputs: ["id", "scrollHeight", "filter", "panelStyle", "styleClass", "panelStyleClass", "readonly", "editable", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "filterValue", "options", "appendTo", "motionOptions"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "component", type: Icon, selector: "mt-icon", inputs: ["icon"] }, { kind: "component", type: FieldValidation, selector: "mt-field-validation", inputs: ["control", "touched"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
50
50
  }
51
51
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: IconField, decorators: [{
52
52
  type: Component,
53
53
  args: [{ selector: 'mt-icon-field', imports: [FormsModule, Select, Icon, FieldValidation], changeDetection: ChangeDetectionStrategy.OnPush, host: {
54
54
  class: 'grid gap-1',
55
- }, template: "@if (label()) {\r\n <label\r\n (click)=\"dropdown.show(); dropdown.focus()\"\r\n [class.required]=\"ngControl?.control?.hasValidator(requiredValidator)\"\r\n [for]=\"ngControl?.name || label()\"\r\n >{{ label() }}</label\r\n >\r\n}\r\n<p-select\r\n #dropdown\r\n [options]=\"icons\"\r\n [filter]=\"false\"\r\n filterBy=\"name\"\r\n [inputId]=\"ngControl?.name ? ngControl?.name?.toString() : label()\"\r\n appendTo=\"body\"\r\n (onBlur)=\"onTouched()\"\r\n (ngModelChange)=\"onChangeIcon($event)\"\r\n [ngModel]=\"selectedIcon()\"\r\n [invalid]=\"isInvalid(ngControl?.control)\"\r\n placeholder=\"Select Icon\"\r\n styleClass=\"w-full\"\r\n panelStyleClass=\"icon-select-panel\"\r\n>\r\n <ng-template let-icon #selectedItem>\r\n @if (icon) {\r\n <div class=\"flex items-center justify-center text-2xl\">\r\n <mt-icon [icon]=\"icon\" />\r\n </div>\r\n } @else {\r\n <div class=\"flex items-center justify-center\">Select Icon</div>\r\n }\r\n </ng-template>\r\n <ng-template let-icon #item>\r\n <div class=\"w-full h-full flex items-center justify-center text-lg\">\r\n <mt-icon [icon]=\"icon\" />\r\n </div>\r\n </ng-template>\r\n</p-select>\r\n\r\n<mt-field-validation [control]=\"ngControl?.control\"></mt-field-validation>\r\n", styles: ["::ng-deep .icon-select-panel .p-select-list-container .p-select-list{display:grid;grid-template-columns:repeat(7,1fr);padding-inline:calc(var(--spacing) * 2);gap:.5rem}::ng-deep .icon-select-panel .p-select-list-container .p-select-list .p-select-option{padding:.25rem;border-radius:var(--p-select-option-border-radius);width:2.5rem;height:2.5rem}\n"] }]
55
+ }, template: "@if (label()) {\n <label\n (click)=\"dropdown.show(); dropdown.focus()\"\n [class.required]=\"ngControl?.control?.hasValidator(requiredValidator)\"\n [for]=\"ngControl?.name || label()\"\n >{{ label() }}</label\n >\n}\n<p-select\n #dropdown\n [options]=\"icons\"\n [filter]=\"false\"\n filterBy=\"name\"\n [inputId]=\"ngControl?.name ? ngControl?.name?.toString() : label()\"\n appendTo=\"body\"\n (onBlur)=\"onTouched()\"\n (ngModelChange)=\"onChangeIcon($event)\"\n [ngModel]=\"selectedIcon()\"\n [invalid]=\"isInvalid(ngControl?.control)\"\n placeholder=\"Select Icon\"\n styleClass=\"w-full\"\n panelStyleClass=\"icon-select-panel\"\n>\n <ng-template let-icon #selectedItem>\n @if (icon) {\n <div class=\"flex items-center justify-center text-2xl\">\n <mt-icon [icon]=\"icon\" />\n </div>\n } @else {\n <div class=\"flex items-center justify-center\">Select Icon</div>\n }\n </ng-template>\n <ng-template let-icon #item>\n <div class=\"w-full h-full flex items-center justify-center text-lg\">\n <mt-icon [icon]=\"icon\" />\n </div>\n </ng-template>\n</p-select>\n\n<mt-field-validation [control]=\"ngControl?.control\"></mt-field-validation>\n", styles: ["::ng-deep .icon-select-panel .p-select-list-container .p-select-list{display:grid;grid-template-columns:repeat(7,1fr);padding-inline:calc(var(--spacing) * 2);gap:.5rem}::ng-deep .icon-select-panel .p-select-list-container .p-select-list .p-select-option{padding:.25rem;border-radius:var(--p-select-option-border-radius);width:2.5rem;height:2.5rem}\n"] }]
56
56
  }], ctorParameters: () => [], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }] } });
57
57
 
58
58
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"masterteam-components-icon-field.mjs","sources":["../../../../packages/masterteam/components/icon-field/icon-field.ts","../../../../packages/masterteam/components/icon-field/icon-field.html","../../../../packages/masterteam/components/icon-field/masterteam-components-icon-field.ts"],"sourcesContent":["import {\r\n Component,\r\n signal,\r\n inject,\r\n input,\r\n ChangeDetectionStrategy,\r\n effect,\r\n} from '@angular/core';\r\nimport {\r\n ControlValueAccessor,\r\n FormControl,\r\n FormsModule,\r\n NgControl,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { Select } from 'primeng/select';\r\nimport * as mtIcons from '@masterteam/icons/assets/select-icons.json';\r\nimport { Icon, MTIcon } from '@masterteam/icons';\r\nimport { FieldValidation } from '@masterteam/components/field-validation';\r\nimport { isInvalid } from '@masterteam/components';\r\n\r\n@Component({\r\n selector: 'mt-icon-field',\r\n imports: [FormsModule, Select, Icon, FieldValidation],\r\n templateUrl: './icon-field.html',\r\n styleUrls: ['./icon-field.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'grid gap-1',\r\n },\r\n})\r\nexport class IconField implements ControlValueAccessor {\r\n readonly label = input<string>('');\r\n readonly required = input<boolean>(false);\r\n\r\n icons: MTIcon[] = (mtIcons?.regular as MTIcon[]) ?? [];\r\n selectedIcon = signal<string | null>(null);\r\n requiredValidator = Validators.required;\r\n\r\n public ngControl = inject(NgControl, { self: true });\r\n\r\n isInvalid = isInvalid;\r\n\r\n constructor() {\r\n if (this.ngControl) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n effect(() => {\r\n if (this.ngControl.control && this.required()) {\r\n this.ngControl.control.addValidators(Validators.required);\r\n this.ngControl.control.updateValueAndValidity();\r\n }\r\n });\r\n }\r\n\r\n protected onTouched: () => void = () => {};\r\n private onChange: (icon: string) => void = () => {};\r\n\r\n writeValue(value: string) {\r\n this.selectedIcon.set(value);\r\n }\r\n\r\n registerOnChange(fn: any) {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any) {\r\n this.onTouched = fn;\r\n }\r\n\r\n onChangeIcon(icon: string) {\r\n this.selectedIcon.set(icon);\r\n this.onChange(icon);\r\n }\r\n\r\n public validate(c: FormControl) {\r\n return c.errors;\r\n }\r\n}\r\n","@if (label()) {\r\n <label\r\n (click)=\"dropdown.show(); dropdown.focus()\"\r\n [class.required]=\"ngControl?.control?.hasValidator(requiredValidator)\"\r\n [for]=\"ngControl?.name || label()\"\r\n >{{ label() }}</label\r\n >\r\n}\r\n<p-select\r\n #dropdown\r\n [options]=\"icons\"\r\n [filter]=\"false\"\r\n filterBy=\"name\"\r\n [inputId]=\"ngControl?.name ? ngControl?.name?.toString() : label()\"\r\n appendTo=\"body\"\r\n (onBlur)=\"onTouched()\"\r\n (ngModelChange)=\"onChangeIcon($event)\"\r\n [ngModel]=\"selectedIcon()\"\r\n [invalid]=\"isInvalid(ngControl?.control)\"\r\n placeholder=\"Select Icon\"\r\n styleClass=\"w-full\"\r\n panelStyleClass=\"icon-select-panel\"\r\n>\r\n <ng-template let-icon #selectedItem>\r\n @if (icon) {\r\n <div class=\"flex items-center justify-center text-2xl\">\r\n <mt-icon [icon]=\"icon\" />\r\n </div>\r\n } @else {\r\n <div class=\"flex items-center justify-center\">Select Icon</div>\r\n }\r\n </ng-template>\r\n <ng-template let-icon #item>\r\n <div class=\"w-full h-full flex items-center justify-center text-lg\">\r\n <mt-icon [icon]=\"icon\" />\r\n </div>\r\n </ng-template>\r\n</p-select>\r\n\r\n<mt-field-validation [control]=\"ngControl?.control\"></mt-field-validation>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"masterteam-components-icon-field.mjs","sources":["../../../../packages/masterteam/components/icon-field/icon-field.ts","../../../../packages/masterteam/components/icon-field/icon-field.html","../../../../packages/masterteam/components/icon-field/masterteam-components-icon-field.ts"],"sourcesContent":["import {\n Component,\n signal,\n inject,\n input,\n ChangeDetectionStrategy,\n effect,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormControl,\n FormsModule,\n NgControl,\n Validators,\n} from '@angular/forms';\nimport { Select } from 'primeng/select';\nimport * as mtIcons from '@masterteam/icons/assets/select-icons.json';\nimport { Icon, MTIcon } from '@masterteam/icons';\nimport { FieldValidation } from '@masterteam/components/field-validation';\nimport { isInvalid } from '@masterteam/components';\n\n@Component({\n selector: 'mt-icon-field',\n imports: [FormsModule, Select, Icon, FieldValidation],\n templateUrl: './icon-field.html',\n styleUrls: ['./icon-field.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'grid gap-1',\n },\n})\nexport class IconField implements ControlValueAccessor {\n readonly label = input<string>('');\n readonly required = input<boolean>(false);\n\n icons: MTIcon[] = (mtIcons?.regular as MTIcon[]) ?? [];\n selectedIcon = signal<string | null>(null);\n requiredValidator = Validators.required;\n\n public ngControl = inject(NgControl, { self: true });\n\n isInvalid = isInvalid;\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n effect(() => {\n if (this.ngControl.control && this.required()) {\n this.ngControl.control.addValidators(Validators.required);\n this.ngControl.control.updateValueAndValidity();\n }\n });\n }\n\n protected onTouched: () => void = () => {};\n private onChange: (icon: string) => void = () => {};\n\n writeValue(value: string) {\n this.selectedIcon.set(value);\n }\n\n registerOnChange(fn: any) {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any) {\n this.onTouched = fn;\n }\n\n onChangeIcon(icon: string) {\n this.selectedIcon.set(icon);\n this.onChange(icon);\n }\n\n public validate(c: FormControl) {\n return c.errors;\n }\n}\n","@if (label()) {\n <label\n (click)=\"dropdown.show(); dropdown.focus()\"\n [class.required]=\"ngControl?.control?.hasValidator(requiredValidator)\"\n [for]=\"ngControl?.name || label()\"\n >{{ label() }}</label\n >\n}\n<p-select\n #dropdown\n [options]=\"icons\"\n [filter]=\"false\"\n filterBy=\"name\"\n [inputId]=\"ngControl?.name ? ngControl?.name?.toString() : label()\"\n appendTo=\"body\"\n (onBlur)=\"onTouched()\"\n (ngModelChange)=\"onChangeIcon($event)\"\n [ngModel]=\"selectedIcon()\"\n [invalid]=\"isInvalid(ngControl?.control)\"\n placeholder=\"Select Icon\"\n styleClass=\"w-full\"\n panelStyleClass=\"icon-select-panel\"\n>\n <ng-template let-icon #selectedItem>\n @if (icon) {\n <div class=\"flex items-center justify-center text-2xl\">\n <mt-icon [icon]=\"icon\" />\n </div>\n } @else {\n <div class=\"flex items-center justify-center\">Select Icon</div>\n }\n </ng-template>\n <ng-template let-icon #item>\n <div class=\"w-full h-full flex items-center justify-center text-lg\">\n <mt-icon [icon]=\"icon\" />\n </div>\n </ng-template>\n</p-select>\n\n<mt-field-validation [control]=\"ngControl?.control\"></mt-field-validation>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}