@tft/crispr-forms 14.0.1-rc.2 → 14.0.1

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 (158) hide show
  1. package/esm2020/src/lib/field-component-map.const.mjs +18 -18
  2. package/esm2020/src/lib/field.directive.mjs +2 -2
  3. package/esm2020/ui/autocomplete-chiplist-field/autocomplete-chiplist-field.component.mjs +9 -6
  4. package/esm2020/ui/autocomplete-chiplist-field/public-api.mjs +2 -0
  5. package/esm2020/ui/autocomplete-chiplist-field/tft-crispr-forms-ui-autocomplete-chiplist-field.mjs +5 -0
  6. package/esm2020/ui/autocomplete-field/autocomplete-field.component.mjs +8 -5
  7. package/esm2020/ui/autocomplete-field/public-api.mjs +2 -0
  8. package/esm2020/ui/autocomplete-field/tft-crispr-forms-ui-autocomplete-field.mjs +5 -0
  9. package/esm2020/ui/button/button.component.mjs +5 -2
  10. package/esm2020/ui/button/public-api.mjs +2 -0
  11. package/esm2020/ui/button/tft-crispr-forms-ui-button.mjs +5 -0
  12. package/esm2020/ui/checkbox-field/checkbox-field.component.mjs +7 -7
  13. package/esm2020/ui/checkbox-field/public-api.mjs +2 -0
  14. package/esm2020/ui/checkbox-field/tft-crispr-forms-ui-checkbox-field.mjs +5 -0
  15. package/esm2020/ui/datepicker-field/datepicker-field.component.mjs +8 -5
  16. package/esm2020/ui/datepicker-field/public-api.mjs +2 -0
  17. package/esm2020/ui/datepicker-field/tft-crispr-forms-ui-datepicker-field.mjs +5 -0
  18. package/esm2020/ui/divider/public-api.mjs +2 -0
  19. package/esm2020/ui/divider/tft-crispr-forms-ui-divider.mjs +5 -0
  20. package/esm2020/ui/{file-upload/file-upload.component.mjs → file-upload-field/file-upload-field.component.mjs} +3 -3
  21. package/esm2020/ui/file-upload-field/public-api.mjs +2 -0
  22. package/esm2020/ui/file-upload-field/tft-crispr-forms-ui-file-upload-field.mjs +5 -0
  23. package/esm2020/ui/input-field/input-field.component.mjs +7 -4
  24. package/esm2020/ui/input-field/public-api.mjs +2 -0
  25. package/esm2020/ui/input-field/tft-crispr-forms-ui-input-field.mjs +5 -0
  26. package/esm2020/ui/option/public-api.mjs +2 -0
  27. package/esm2020/ui/option/tft-crispr-forms-ui-option.mjs +5 -0
  28. package/esm2020/ui/public-api.mjs +1 -15
  29. package/esm2020/ui/radio-field/public-api.mjs +2 -0
  30. package/esm2020/ui/radio-field/radio-field.component.mjs +7 -4
  31. package/esm2020/ui/radio-field/tft-crispr-forms-ui-radio-field.mjs +5 -0
  32. package/esm2020/ui/select-field/public-api.mjs +2 -0
  33. package/esm2020/ui/select-field/select-field.component.mjs +9 -10
  34. package/esm2020/ui/select-field/tft-crispr-forms-ui-select-field.mjs +5 -0
  35. package/esm2020/ui/slider-field/public-api.mjs +2 -0
  36. package/esm2020/ui/slider-field/slider-field.component.mjs +8 -5
  37. package/esm2020/ui/slider-field/tft-crispr-forms-ui-slider-field.mjs +5 -0
  38. package/esm2020/ui/textarea-field/public-api.mjs +2 -0
  39. package/esm2020/ui/textarea-field/textarea-field.component.mjs +6 -3
  40. package/esm2020/ui/textarea-field/tft-crispr-forms-ui-textarea-field.mjs +5 -0
  41. package/esm2020/ui/unit-conversion-field/public-api.mjs +2 -0
  42. package/esm2020/ui/unit-conversion-field/tft-crispr-forms-ui-unit-conversion-field.mjs +5 -0
  43. package/esm2020/ui/unit-conversion-field/unit-conversion-field.component.mjs +7 -4
  44. package/esm2020/utils/models/file-upload-field.config.mjs +1 -1
  45. package/fesm2015/tft-crispr-forms-ui-autocomplete-chiplist-field.mjs +138 -0
  46. package/fesm2015/tft-crispr-forms-ui-autocomplete-chiplist-field.mjs.map +1 -0
  47. package/fesm2015/tft-crispr-forms-ui-autocomplete-field.mjs +101 -0
  48. package/fesm2015/tft-crispr-forms-ui-autocomplete-field.mjs.map +1 -0
  49. package/fesm2015/tft-crispr-forms-ui-button.mjs +55 -0
  50. package/fesm2015/tft-crispr-forms-ui-button.mjs.map +1 -0
  51. package/fesm2015/tft-crispr-forms-ui-checkbox-field.mjs +49 -0
  52. package/fesm2015/tft-crispr-forms-ui-checkbox-field.mjs.map +1 -0
  53. package/fesm2015/tft-crispr-forms-ui-datepicker-field.mjs +71 -0
  54. package/fesm2015/tft-crispr-forms-ui-datepicker-field.mjs.map +1 -0
  55. package/fesm2015/tft-crispr-forms-ui-divider.mjs +34 -0
  56. package/fesm2015/tft-crispr-forms-ui-divider.mjs.map +1 -0
  57. package/fesm2015/tft-crispr-forms-ui-file-upload-field.mjs +117 -0
  58. package/fesm2015/tft-crispr-forms-ui-file-upload-field.mjs.map +1 -0
  59. package/fesm2015/tft-crispr-forms-ui-input-field.mjs +48 -0
  60. package/fesm2015/tft-crispr-forms-ui-input-field.mjs.map +1 -0
  61. package/fesm2015/tft-crispr-forms-ui-option.mjs +26 -0
  62. package/fesm2015/tft-crispr-forms-ui-option.mjs.map +1 -0
  63. package/fesm2015/tft-crispr-forms-ui-radio-field.mjs +46 -0
  64. package/fesm2015/tft-crispr-forms-ui-radio-field.mjs.map +1 -0
  65. package/fesm2015/tft-crispr-forms-ui-select-field.mjs +81 -0
  66. package/fesm2015/tft-crispr-forms-ui-select-field.mjs.map +1 -0
  67. package/fesm2015/tft-crispr-forms-ui-slider-field.mjs +51 -0
  68. package/fesm2015/tft-crispr-forms-ui-slider-field.mjs.map +1 -0
  69. package/fesm2015/tft-crispr-forms-ui-textarea-field.mjs +49 -0
  70. package/fesm2015/tft-crispr-forms-ui-textarea-field.mjs.map +1 -0
  71. package/fesm2015/tft-crispr-forms-ui-unit-conversion-field.mjs +93 -0
  72. package/fesm2015/tft-crispr-forms-ui-unit-conversion-field.mjs.map +1 -0
  73. package/fesm2015/tft-crispr-forms-ui.mjs +2 -674
  74. package/fesm2015/tft-crispr-forms-ui.mjs.map +1 -1
  75. package/fesm2015/tft-crispr-forms.mjs +18 -18
  76. package/fesm2015/tft-crispr-forms.mjs.map +1 -1
  77. package/fesm2020/tft-crispr-forms-ui-autocomplete-chiplist-field.mjs +137 -0
  78. package/fesm2020/tft-crispr-forms-ui-autocomplete-chiplist-field.mjs.map +1 -0
  79. package/fesm2020/tft-crispr-forms-ui-autocomplete-field.mjs +100 -0
  80. package/fesm2020/tft-crispr-forms-ui-autocomplete-field.mjs.map +1 -0
  81. package/fesm2020/tft-crispr-forms-ui-button.mjs +55 -0
  82. package/fesm2020/tft-crispr-forms-ui-button.mjs.map +1 -0
  83. package/fesm2020/tft-crispr-forms-ui-checkbox-field.mjs +49 -0
  84. package/fesm2020/tft-crispr-forms-ui-checkbox-field.mjs.map +1 -0
  85. package/fesm2020/tft-crispr-forms-ui-datepicker-field.mjs +70 -0
  86. package/fesm2020/tft-crispr-forms-ui-datepicker-field.mjs.map +1 -0
  87. package/fesm2020/tft-crispr-forms-ui-divider.mjs +34 -0
  88. package/fesm2020/tft-crispr-forms-ui-divider.mjs.map +1 -0
  89. package/fesm2020/tft-crispr-forms-ui-file-upload-field.mjs +115 -0
  90. package/fesm2020/tft-crispr-forms-ui-file-upload-field.mjs.map +1 -0
  91. package/fesm2020/tft-crispr-forms-ui-input-field.mjs +48 -0
  92. package/fesm2020/tft-crispr-forms-ui-input-field.mjs.map +1 -0
  93. package/fesm2020/tft-crispr-forms-ui-option.mjs +26 -0
  94. package/fesm2020/tft-crispr-forms-ui-option.mjs.map +1 -0
  95. package/fesm2020/tft-crispr-forms-ui-radio-field.mjs +46 -0
  96. package/fesm2020/tft-crispr-forms-ui-radio-field.mjs.map +1 -0
  97. package/fesm2020/tft-crispr-forms-ui-select-field.mjs +80 -0
  98. package/fesm2020/tft-crispr-forms-ui-select-field.mjs.map +1 -0
  99. package/fesm2020/tft-crispr-forms-ui-slider-field.mjs +51 -0
  100. package/fesm2020/tft-crispr-forms-ui-slider-field.mjs.map +1 -0
  101. package/fesm2020/tft-crispr-forms-ui-textarea-field.mjs +49 -0
  102. package/fesm2020/tft-crispr-forms-ui-textarea-field.mjs.map +1 -0
  103. package/fesm2020/tft-crispr-forms-ui-unit-conversion-field.mjs +91 -0
  104. package/fesm2020/tft-crispr-forms-ui-unit-conversion-field.mjs.map +1 -0
  105. package/fesm2020/tft-crispr-forms-ui.mjs +2 -666
  106. package/fesm2020/tft-crispr-forms-ui.mjs.map +1 -1
  107. package/fesm2020/tft-crispr-forms.mjs +18 -18
  108. package/fesm2020/tft-crispr-forms.mjs.map +1 -1
  109. package/package.json +113 -2
  110. package/src/lib/field-component-map.const.d.ts +31 -18
  111. package/tft-crispr-forms-14.0.1.tgz +0 -0
  112. package/ui/autocomplete-chiplist-field/index.d.ts +5 -1
  113. package/ui/autocomplete-chiplist-field/public-api.d.ts +1 -0
  114. package/ui/autocomplete-field/index.d.ts +5 -1
  115. package/ui/autocomplete-field/public-api.d.ts +1 -0
  116. package/ui/button/index.d.ts +5 -1
  117. package/ui/button/public-api.d.ts +1 -0
  118. package/ui/checkbox-field/index.d.ts +5 -1
  119. package/ui/checkbox-field/public-api.d.ts +1 -0
  120. package/ui/datepicker-field/index.d.ts +5 -1
  121. package/ui/datepicker-field/public-api.d.ts +1 -0
  122. package/ui/divider/index.d.ts +5 -1
  123. package/ui/divider/public-api.d.ts +1 -0
  124. package/ui/{file-upload/file-upload.component.d.ts → file-upload-field/file-upload-field.component.d.ts} +0 -0
  125. package/ui/file-upload-field/index.d.ts +5 -0
  126. package/ui/file-upload-field/public-api.d.ts +1 -0
  127. package/ui/input-field/index.d.ts +5 -1
  128. package/ui/input-field/public-api.d.ts +1 -0
  129. package/ui/option/index.d.ts +5 -1
  130. package/ui/option/public-api.d.ts +1 -0
  131. package/ui/public-api.d.ts +0 -14
  132. package/ui/radio-field/index.d.ts +5 -1
  133. package/ui/radio-field/public-api.d.ts +1 -0
  134. package/ui/select-field/index.d.ts +5 -1
  135. package/ui/select-field/public-api.d.ts +1 -0
  136. package/ui/slider-field/index.d.ts +5 -1
  137. package/ui/slider-field/public-api.d.ts +1 -0
  138. package/ui/textarea-field/index.d.ts +5 -1
  139. package/ui/textarea-field/public-api.d.ts +1 -0
  140. package/ui/unit-conversion-field/index.d.ts +5 -1
  141. package/ui/unit-conversion-field/public-api.d.ts +1 -0
  142. package/utils/models/file-upload-field.config.d.ts +7 -1
  143. package/esm2020/ui/autocomplete-chiplist-field/index.mjs +0 -2
  144. package/esm2020/ui/autocomplete-field/index.mjs +0 -2
  145. package/esm2020/ui/button/index.mjs +0 -2
  146. package/esm2020/ui/checkbox-field/index.mjs +0 -2
  147. package/esm2020/ui/datepicker-field/index.mjs +0 -2
  148. package/esm2020/ui/divider/index.mjs +0 -2
  149. package/esm2020/ui/file-upload/index.mjs +0 -2
  150. package/esm2020/ui/input-field/index.mjs +0 -2
  151. package/esm2020/ui/option/index.mjs +0 -2
  152. package/esm2020/ui/radio-field/index.mjs +0 -2
  153. package/esm2020/ui/select-field/index.mjs +0 -2
  154. package/esm2020/ui/slider-field/index.mjs +0 -2
  155. package/esm2020/ui/textarea-field/index.mjs +0 -2
  156. package/esm2020/ui/unit-conversion-field/index.mjs +0 -2
  157. package/tft-crispr-forms-14.0.1-rc.2.tgz +0 -0
  158. package/ui/file-upload/index.d.ts +0 -1
@@ -0,0 +1,49 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Component, ChangeDetectionStrategy } from '@angular/core';
3
+ import * as i2 from '@angular/forms';
4
+ import { ReactiveFormsModule } from '@angular/forms';
5
+ import * as i1 from '@angular/common';
6
+ import { CommonModule } from '@angular/common';
7
+ import * as i3 from '@angular/material/form-field';
8
+ import { MatFormFieldModule } from '@angular/material/form-field';
9
+ import * as i4 from '@angular/material/input';
10
+ import { MatInputModule } from '@angular/material/input';
11
+ import * as i5 from '@tft/form-validation-handler';
12
+ import { FormValidationHandlerModule } from '@tft/form-validation-handler';
13
+ import { FieldContainerComponent } from '@tft/crispr-forms/ui/field-container';
14
+ import { InfoComponent } from '@tft/crispr-forms/ui/info';
15
+ import { crisprControlMixin, CrisprFieldComponent } from '@tft/crispr-forms/utils';
16
+
17
+ /* eslint-disable @nrwl/nx/enforce-module-boundaries */
18
+ const defaultConfig = { rows: 5 };
19
+ const TextareaFieldMixin = crisprControlMixin(CrisprFieldComponent);
20
+ class TextareaFieldComponent extends TextareaFieldMixin {
21
+ constructor() {
22
+ super(...arguments);
23
+ this.defaultConfig = defaultConfig;
24
+ }
25
+ ngOnInit() {
26
+ super.ngOnInit();
27
+ }
28
+ }
29
+ TextareaFieldComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: TextareaFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
30
+ TextareaFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.1", type: TextareaFieldComponent, isStandalone: true, selector: "crispr-textarea-field", usesInheritance: true, ngImport: i0, template: "<crispr-field-container\n [config]=\"config\"\n [group]=\"group\">\n <mat-form-field\n [color]=\"config.color\"\n [appearance]=\"config.appearance\"\n [formGroup]=\"group\">\n <mat-label *ngIf=\"config.label\">\n {{config.label}}\n </mat-label>\n <textarea\n [rows]=\"config.rows\"\n matInput\n [placeholder]=\"config.placeholder\"\n [formControlName]=\"config.controlName\">\n </textarea>\n <span *ngIf=\"config.fieldSuffix\" matSuffix>{{config.fieldSuffix}}</span>\n <crispr-info\n *ngIf=\"config.info\"\n matSuffix\n [info]=\"config.info\">\n </crispr-info>\n\n <mat-hint *ngIf=\"config.hint && control.valid\">{{config.hint}}</mat-hint>\n\n </mat-form-field>\n\n</crispr-field-container>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: InfoComponent, selector: "crispr-info", inputs: ["info"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: FieldContainerComponent, selector: "crispr-field-container", inputs: ["config", "group", "inlineField"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix]" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: FormValidationHandlerModule }, { kind: "directive", type: i5.ControlErrorsDirective, selector: "[formControl], [formControlName]" }, { kind: "directive", type: i5.ControlErrorContainerDirective, selector: "[controlErrorContainer], [formGroup]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, preserveWhitespaces: true });
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: TextareaFieldComponent, decorators: [{
32
+ type: Component,
33
+ args: [{ selector: 'crispr-textarea-field', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
34
+ CommonModule,
35
+ InfoComponent,
36
+ ReactiveFormsModule,
37
+ FieldContainerComponent,
38
+ MatFormFieldModule,
39
+ MatInputModule,
40
+ FormValidationHandlerModule,
41
+ ], template: "<crispr-field-container\n [config]=\"config\"\n [group]=\"group\">\n <mat-form-field\n [color]=\"config.color\"\n [appearance]=\"config.appearance\"\n [formGroup]=\"group\">\n <mat-label *ngIf=\"config.label\">\n {{config.label}}\n </mat-label>\n <textarea\n [rows]=\"config.rows\"\n matInput\n [placeholder]=\"config.placeholder\"\n [formControlName]=\"config.controlName\">\n </textarea>\n <span *ngIf=\"config.fieldSuffix\" matSuffix>{{config.fieldSuffix}}</span>\n <crispr-info\n *ngIf=\"config.info\"\n matSuffix\n [info]=\"config.info\">\n </crispr-info>\n\n <mat-hint *ngIf=\"config.hint && control.valid\">{{config.hint}}</mat-hint>\n\n </mat-form-field>\n\n</crispr-field-container>\n" }]
42
+ }] });
43
+
44
+ /**
45
+ * Generated bundle index. Do not edit.
46
+ */
47
+
48
+ export { TextareaFieldComponent };
49
+ //# sourceMappingURL=tft-crispr-forms-ui-textarea-field.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tft-crispr-forms-ui-textarea-field.mjs","sources":["../../../../libs/crispr-forms/ui/textarea-field/textarea-field.component.ts","../../../../libs/crispr-forms/ui/textarea-field/textarea-field.component.html","../../../../libs/crispr-forms/ui/textarea-field/tft-crispr-forms-ui-textarea-field.ts"],"sourcesContent":["/* eslint-disable @nrwl/nx/enforce-module-boundaries */\nimport { Component, OnInit, ChangeDetectionStrategy } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { FormValidationHandlerModule } from '@tft/form-validation-handler';\nimport { FieldContainerComponent } from '@tft/crispr-forms/ui/field-container';\nimport { InfoComponent } from '@tft/crispr-forms/ui/info';\nimport { crisprControlMixin, CrisprFieldComponent, TextareaFieldConfig } from '@tft/crispr-forms/utils';\n\nconst defaultConfig: Partial<TextareaFieldConfig> = {rows: 5};\nconst TextareaFieldMixin = crisprControlMixin<TextareaFieldConfig>(CrisprFieldComponent);\n\n@Component({\n selector: 'crispr-textarea-field',\n templateUrl: './textarea-field.component.html',\n styleUrls: ['./textarea-field.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n CommonModule,\n InfoComponent,\n ReactiveFormsModule,\n FieldContainerComponent,\n MatFormFieldModule,\n MatInputModule,\n FormValidationHandlerModule,\n ],\n})\nexport class TextareaFieldComponent extends TextareaFieldMixin implements OnInit {\n defaultConfig = defaultConfig;\n\n ngOnInit() {\n super.ngOnInit()\n }\n}\n","<crispr-field-container\n [config]=\"config\"\n [group]=\"group\">\n <mat-form-field\n [color]=\"config.color\"\n [appearance]=\"config.appearance\"\n [formGroup]=\"group\">\n <mat-label *ngIf=\"config.label\">\n {{config.label}}\n </mat-label>\n <textarea\n [rows]=\"config.rows\"\n matInput\n [placeholder]=\"config.placeholder\"\n [formControlName]=\"config.controlName\">\n </textarea>\n <span *ngIf=\"config.fieldSuffix\" matSuffix>{{config.fieldSuffix}}</span>\n <crispr-info\n *ngIf=\"config.info\"\n matSuffix\n [info]=\"config.info\">\n </crispr-info>\n\n <mat-hint *ngIf=\"config.hint && control.valid\">{{config.hint}}</mat-hint>\n\n </mat-form-field>\n\n</crispr-field-container>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;AAWA,MAAM,aAAa,GAAiC,EAAC,IAAI,EAAE,CAAC,EAAC,CAAC;AAC9D,MAAM,kBAAkB,GAAG,kBAAkB,CAAsB,oBAAoB,CAAC,CAAC;AAkBnF,MAAO,sBAAuB,SAAQ,kBAAkB,CAAA;AAhB9D,IAAA,WAAA,GAAA;;QAiBE,IAAa,CAAA,aAAA,GAAG,aAAa,CAAC;AAK/B,KAAA;IAHC,QAAQ,GAAA;QACN,KAAK,CAAC,QAAQ,EAAE,CAAA;KACjB;;mHALU,sBAAsB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,sBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EC9BnC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,owBA4BA,EDPI,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,mIACZ,aAAa,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,uBAAuB,EACvB,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,kBAAkB,EAClB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAc,0WACd,2BAA2B,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,8BAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,mBAAA,EAAA,IAAA,EAAA,CAAA,CAAA;2FAGlB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAhBlC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,mBAGhB,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,EACP,OAAA,EAAA;wBACP,YAAY;wBACZ,aAAa;wBACb,mBAAmB;wBACnB,uBAAuB;wBACvB,kBAAkB;wBAClB,cAAc;wBACd,2BAA2B;AAC5B,qBAAA,EAAA,QAAA,EAAA,owBAAA,EAAA,CAAA;;;AE5BH;;AAEG;;;;"}
@@ -0,0 +1,91 @@
1
+ import * as i1 from '@angular/common';
2
+ import { CommonModule } from '@angular/common';
3
+ import * as i0 from '@angular/core';
4
+ import { Component, ChangeDetectionStrategy } from '@angular/core';
5
+ import * as i2 from '@angular/forms';
6
+ import { FormControl, ReactiveFormsModule } from '@angular/forms';
7
+ import * as i6 from '@angular/material/core';
8
+ import { MatOptionModule } from '@angular/material/core';
9
+ import * as i4 from '@angular/material/input';
10
+ import { MatInputModule } from '@angular/material/input';
11
+ import * as i5 from '@angular/material/select';
12
+ import { MatSelectModule } from '@angular/material/select';
13
+ import { combineLatest } from 'rxjs';
14
+ import { startWith } from 'rxjs/operators';
15
+ import { OptionComponent } from '@tft/crispr-forms/ui/option';
16
+ import * as i7 from '@tft/form-validation-handler';
17
+ import { FormValidationHandlerModule } from '@tft/form-validation-handler';
18
+ import { FieldContainerComponent } from '@tft/crispr-forms/ui/field-container';
19
+ import { InfoComponent } from '@tft/crispr-forms/ui/info';
20
+ import { crisprControlMixin, CrisprFieldComponent, observablifyOptions } from '@tft/crispr-forms/utils';
21
+ import * as i3 from '@angular/material/form-field';
22
+
23
+ /* eslint-disable @nrwl/nx/enforce-module-boundaries */
24
+ const defaultConfig = {};
25
+ const UnitConversionFieldMixin = crisprControlMixin(CrisprFieldComponent);
26
+ class UnitConversionFieldComponent extends UnitConversionFieldMixin {
27
+ constructor() {
28
+ super(...arguments);
29
+ this.defaultConfig = defaultConfig;
30
+ this.displayValueControl = new FormControl();
31
+ this.unitSelectControl = new FormControl();
32
+ }
33
+ ngOnInit() {
34
+ super.ngOnInit();
35
+ // TODO: Validators need work. validation is tricky because the input needs to be validated against but the validator will compare against the controls value
36
+ // this.displayValueControl.setValidators(this.config.validators);
37
+ const controlValuePipeline = [
38
+ this.displayValueControl.valueChanges.pipe(startWith(this.displayValueControl.value))
39
+ ];
40
+ // setup all required pieces when showing a field for selecting units
41
+ if (this.config.showUnitSelect) {
42
+ this.unitOptions$ = observablifyOptions(this.config.selectableUnits, this.group);
43
+ controlValuePipeline.push(this.unitSelectControl.valueChanges.pipe(startWith(this.config?.initialDisplayUnit || null)));
44
+ this.unitSelectControl.setValue(this.config?.initialDisplayUnit || null);
45
+ }
46
+ this.transformationSubscription = combineLatest(controlValuePipeline).subscribe(([displayValue, unitValue]) => {
47
+ const computedValue = this.config.storedValueConversion(displayValue, unitValue);
48
+ this.control.setValue(computedValue);
49
+ });
50
+ }
51
+ ngOnDestroy() {
52
+ this.transformationSubscription.unsubscribe();
53
+ }
54
+ setInitialDisplayValue(storedValue, unit) {
55
+ const initialDisplayValue = this.config.initialDisplayValueConversion(storedValue || null, unit);
56
+ this.displayValueControl.setValue(initialDisplayValue);
57
+ }
58
+ /**
59
+ * We override the 'setControlValue' we inherited from crisprControlMixin and add our custom logic,
60
+ * This function gets called onInit because were object oriented. it's so great, so great that I'm
61
+ * typing a paragraph to explain what the hell is going on...
62
+ * @param value the initial value for the control passed down from the form components input
63
+ */
64
+ setControlValue(value) {
65
+ const initialUnitValue = this.config.showUnitSelect ? this.config?.initialDisplayUnit : null;
66
+ this.setInitialDisplayValue(value, initialUnitValue);
67
+ }
68
+ }
69
+ UnitConversionFieldComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: UnitConversionFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
70
+ UnitConversionFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.1", type: UnitConversionFieldComponent, isStandalone: true, selector: "crispr-unit-conversion-field", usesInheritance: true, ngImport: i0, template: "<crispr-field-container\n [config]=\"config\"\n [group]=\"group\">\n <mat-form-field\n [style.width.%]=\"config.showUnitSelect ? 60 : 100\"\n class=\"number-field\"\n [color]=\"config.color\"\n [appearance]=\"config.appearance\">\n <mat-label *ngIf=\"config.label\">\n {{config.label}}\n </mat-label>\n <input\n type=\"number\"\n matInput\n [formControl]=\"displayValueControl\"\n [placeholder]=\"config.placeholder\"\n [min]=\"config.min\"\n [max]=\"config.max\"\n [step]=\"config.step\"\n [autofocus]=\"config.autofocus\">\n <span *ngIf=\"config.fieldSuffix\" matSuffix>{{config.fieldSuffix}}</span>\n <crispr-info\n matSuffix\n *ngIf=\"config.info\"\n [info]=\"config.info\">\n </crispr-info>\n </mat-form-field>\n\n <mat-form-field\n *ngIf=\"config.showUnitSelect\"\n [color]=\"config.color\"\n [appearance]=\"config.appearance\"\n [formGroup]=\"group\"\n class=\"unit-field\">\n <mat-label *ngIf=\"config.label\">\n {{config.label}}\n </mat-label>\n <mat-select\n #selectField\n [formControl]=\"unitSelectControl\">\n\n <mat-option\n *ngFor=\"let option of unitOptions$ | async\"\n [value]=\"option.value\">\n <crispr-option [option]=\"option\">\n </crispr-option>\n </mat-option>\n\n </mat-select>\n\n <mat-hint *ngIf=\"config.hint && (control.valid || !control.touched)\">{{config.hint}}</mat-hint>\n\n </mat-form-field>\n\n</crispr-field-container>\n", styles: [".unit-field{width:40%;margin-left:16px}:host ::ng-deep .field-container{display:flex}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "component", type: InfoComponent, selector: "crispr-info", inputs: ["info"] }, { kind: "component", type: OptionComponent, selector: "crispr-option", inputs: ["option"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i2.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: FieldContainerComponent, selector: "crispr-field-container", inputs: ["config", "group", "inlineField"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix]" }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i5.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: FormValidationHandlerModule }, { kind: "directive", type: i7.ControlErrorsDirective, selector: "[formControl], [formControlName]" }, { kind: "directive", type: i7.ControlErrorContainerDirective, selector: "[controlErrorContainer], [formGroup]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, preserveWhitespaces: true });
71
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: UnitConversionFieldComponent, decorators: [{
72
+ type: Component,
73
+ args: [{ selector: 'crispr-unit-conversion-field', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
74
+ CommonModule,
75
+ InfoComponent,
76
+ OptionComponent,
77
+ ReactiveFormsModule,
78
+ FieldContainerComponent,
79
+ MatInputModule,
80
+ MatSelectModule,
81
+ MatOptionModule,
82
+ FormValidationHandlerModule,
83
+ ], template: "<crispr-field-container\n [config]=\"config\"\n [group]=\"group\">\n <mat-form-field\n [style.width.%]=\"config.showUnitSelect ? 60 : 100\"\n class=\"number-field\"\n [color]=\"config.color\"\n [appearance]=\"config.appearance\">\n <mat-label *ngIf=\"config.label\">\n {{config.label}}\n </mat-label>\n <input\n type=\"number\"\n matInput\n [formControl]=\"displayValueControl\"\n [placeholder]=\"config.placeholder\"\n [min]=\"config.min\"\n [max]=\"config.max\"\n [step]=\"config.step\"\n [autofocus]=\"config.autofocus\">\n <span *ngIf=\"config.fieldSuffix\" matSuffix>{{config.fieldSuffix}}</span>\n <crispr-info\n matSuffix\n *ngIf=\"config.info\"\n [info]=\"config.info\">\n </crispr-info>\n </mat-form-field>\n\n <mat-form-field\n *ngIf=\"config.showUnitSelect\"\n [color]=\"config.color\"\n [appearance]=\"config.appearance\"\n [formGroup]=\"group\"\n class=\"unit-field\">\n <mat-label *ngIf=\"config.label\">\n {{config.label}}\n </mat-label>\n <mat-select\n #selectField\n [formControl]=\"unitSelectControl\">\n\n <mat-option\n *ngFor=\"let option of unitOptions$ | async\"\n [value]=\"option.value\">\n <crispr-option [option]=\"option\">\n </crispr-option>\n </mat-option>\n\n </mat-select>\n\n <mat-hint *ngIf=\"config.hint && (control.valid || !control.touched)\">{{config.hint}}</mat-hint>\n\n </mat-form-field>\n\n</crispr-field-container>\n", styles: [".unit-field{width:40%;margin-left:16px}:host ::ng-deep .field-container{display:flex}\n"] }]
84
+ }] });
85
+
86
+ /**
87
+ * Generated bundle index. Do not edit.
88
+ */
89
+
90
+ export { UnitConversionFieldComponent };
91
+ //# sourceMappingURL=tft-crispr-forms-ui-unit-conversion-field.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tft-crispr-forms-ui-unit-conversion-field.mjs","sources":["../../../../libs/crispr-forms/ui/unit-conversion-field/unit-conversion-field.component.ts","../../../../libs/crispr-forms/ui/unit-conversion-field/unit-conversion-field.component.html","../../../../libs/crispr-forms/ui/unit-conversion-field/tft-crispr-forms-ui-unit-conversion-field.ts"],"sourcesContent":["/* eslint-disable @nrwl/nx/enforce-module-boundaries */\nimport { CommonModule } from '@angular/common';\nimport { Component, OnInit, ChangeDetectionStrategy, OnDestroy } from '@angular/core';\nimport { ReactiveFormsModule, FormControl } from '@angular/forms';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { combineLatest, Observable, Subscription } from 'rxjs';\nimport { startWith } from 'rxjs/operators';\nimport { OptionComponent } from '@tft/crispr-forms/ui/option';\nimport { FormValidationHandlerModule } from '@tft/form-validation-handler';\nimport { FieldContainerComponent } from '@tft/crispr-forms/ui/field-container';\nimport { InfoComponent } from '@tft/crispr-forms/ui/info';\nimport { crisprControlMixin, CrisprFieldComponent, observablifyOptions, SelectOption, UnitConversionFieldConfig } from '@tft/crispr-forms/utils';\n\nconst defaultConfig: Partial<UnitConversionFieldConfig> = {};\nconst UnitConversionFieldMixin = crisprControlMixin<UnitConversionFieldConfig>(CrisprFieldComponent);\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'crispr-unit-conversion-field',\n templateUrl: './unit-conversion-field.component.html',\n styleUrls: ['./unit-conversion-field.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n CommonModule,\n InfoComponent,\n OptionComponent,\n ReactiveFormsModule,\n FieldContainerComponent,\n MatInputModule,\n MatSelectModule,\n MatOptionModule,\n FormValidationHandlerModule,\n ],\n})\nexport class UnitConversionFieldComponent extends UnitConversionFieldMixin implements OnInit, OnDestroy {\n defaultConfig = defaultConfig;\n\n displayValueControl = new FormControl();\n unitSelectControl = new FormControl();\n unitOptions$: Observable<SelectOption[]>;\n\n transformationSubscription: Subscription;\n\n ngOnInit() {\n super.ngOnInit();\n // TODO: Validators need work. validation is tricky because the input needs to be validated against but the validator will compare against the controls value\n // this.displayValueControl.setValidators(this.config.validators);\n\n const controlValuePipeline: Observable<string>[] = [\n this.displayValueControl.valueChanges.pipe(startWith(this.displayValueControl.value))\n ];\n // setup all required pieces when showing a field for selecting units\n if (this.config.showUnitSelect) {\n this.unitOptions$ = observablifyOptions(this.config.selectableUnits, this.group)\n controlValuePipeline.push(this.unitSelectControl.valueChanges.pipe(startWith(this.config?.initialDisplayUnit || null)));\n this.unitSelectControl.setValue(this.config?.initialDisplayUnit || null);\n }\n\n this.transformationSubscription = combineLatest(controlValuePipeline).subscribe(([displayValue, unitValue] )=> {\n const computedValue = this.config.storedValueConversion(displayValue, unitValue);\n this.control.setValue(computedValue);\n });\n }\n\n ngOnDestroy() {\n this.transformationSubscription.unsubscribe();\n }\n\n setInitialDisplayValue(storedValue: any, unit: unknown) {\n const initialDisplayValue = this.config.initialDisplayValueConversion(storedValue || null, unit);\n this.displayValueControl.setValue(initialDisplayValue);\n }\n\n /**\n * We override the 'setControlValue' we inherited from crisprControlMixin and add our custom logic,\n * This function gets called onInit because were object oriented. it's so great, so great that I'm\n * typing a paragraph to explain what the hell is going on...\n * @param value the initial value for the control passed down from the form components input\n */\n setControlValue(value) {\n const initialUnitValue = this.config.showUnitSelect ? this.config?.initialDisplayUnit : null;\n this.setInitialDisplayValue(value, initialUnitValue);\n }\n}\n","<crispr-field-container\n [config]=\"config\"\n [group]=\"group\">\n <mat-form-field\n [style.width.%]=\"config.showUnitSelect ? 60 : 100\"\n class=\"number-field\"\n [color]=\"config.color\"\n [appearance]=\"config.appearance\">\n <mat-label *ngIf=\"config.label\">\n {{config.label}}\n </mat-label>\n <input\n type=\"number\"\n matInput\n [formControl]=\"displayValueControl\"\n [placeholder]=\"config.placeholder\"\n [min]=\"config.min\"\n [max]=\"config.max\"\n [step]=\"config.step\"\n [autofocus]=\"config.autofocus\">\n <span *ngIf=\"config.fieldSuffix\" matSuffix>{{config.fieldSuffix}}</span>\n <crispr-info\n matSuffix\n *ngIf=\"config.info\"\n [info]=\"config.info\">\n </crispr-info>\n </mat-form-field>\n\n <mat-form-field\n *ngIf=\"config.showUnitSelect\"\n [color]=\"config.color\"\n [appearance]=\"config.appearance\"\n [formGroup]=\"group\"\n class=\"unit-field\">\n <mat-label *ngIf=\"config.label\">\n {{config.label}}\n </mat-label>\n <mat-select\n #selectField\n [formControl]=\"unitSelectControl\">\n\n <mat-option\n *ngFor=\"let option of unitOptions$ | async\"\n [value]=\"option.value\">\n <crispr-option [option]=\"option\">\n </crispr-option>\n </mat-option>\n\n </mat-select>\n\n <mat-hint *ngIf=\"config.hint && (control.valid || !control.touched)\">{{config.hint}}</mat-hint>\n\n </mat-form-field>\n\n</crispr-field-container>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}