@sd-angular/core 19.0.0-beta.3 → 19.0.0-beta.30

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 (154) hide show
  1. package/assets/scss/ckeditor5.scss +60 -2
  2. package/components/avatar/index.d.ts +1 -0
  3. package/components/avatar/src/avatar.component.d.ts +14 -0
  4. package/components/document-builder/src/document-builder.component.d.ts +29 -7
  5. package/components/document-builder/src/document-builder.config.d.ts +21 -0
  6. package/components/document-builder/src/document-builder.model.d.ts +14 -2
  7. package/components/document-builder/src/document-builder.utils.d.ts +10 -0
  8. package/components/document-builder/src/plugins/block-space/block-space.plugin.d.ts +9 -0
  9. package/components/document-builder/src/plugins/heading/heading.plugin.d.ts +5 -0
  10. package/components/document-builder/src/plugins/highlight-range/highlight-range.plugin.d.ts +4 -0
  11. package/components/document-builder/src/plugins/image-custom/image-custom.plugin.d.ts +31 -0
  12. package/components/document-builder/src/plugins/{image-upload.plugin.d.ts → image-upload/image-upload.plugin.d.ts} +0 -4
  13. package/components/document-builder/src/plugins/index.d.ts +10 -5
  14. package/components/document-builder/src/plugins/{page-orientation.plugin.d.ts → page-orientation/page-orientation.plugin.d.ts} +2 -2
  15. package/components/document-builder/src/plugins/paste-handler/filters/bookmark.d.ts +14 -0
  16. package/components/document-builder/src/plugins/paste-handler/filters/br.d.ts +15 -0
  17. package/components/document-builder/src/plugins/paste-handler/filters/image.d.ts +25 -0
  18. package/components/document-builder/src/plugins/paste-handler/filters/list.d.ts +29 -0
  19. package/components/document-builder/src/plugins/paste-handler/filters/parse.d.ts +35 -0
  20. package/components/document-builder/src/plugins/paste-handler/filters/removeboldwrapper.d.ts +15 -0
  21. package/components/document-builder/src/plugins/paste-handler/filters/removegooglesheetstag.d.ts +15 -0
  22. package/components/document-builder/src/plugins/paste-handler/filters/removeinvalidtablewidth.d.ts +15 -0
  23. package/components/document-builder/src/plugins/paste-handler/filters/removemsattributes.d.ts +15 -0
  24. package/components/document-builder/src/plugins/paste-handler/filters/removestyleblock.d.ts +15 -0
  25. package/components/document-builder/src/plugins/paste-handler/filters/removexmlns.d.ts +15 -0
  26. package/components/document-builder/src/plugins/paste-handler/filters/replacemsfootnotes.d.ts +54 -0
  27. package/components/document-builder/src/plugins/paste-handler/filters/replacetabswithinprewithspaces.d.ts +24 -0
  28. package/components/document-builder/src/plugins/paste-handler/filters/space.d.ts +27 -0
  29. package/components/document-builder/src/plugins/paste-handler/filters/table.d.ts +16 -0
  30. package/components/document-builder/src/plugins/paste-handler/filters/utils.d.ts +25 -0
  31. package/components/document-builder/src/plugins/paste-handler/index.d.ts +35 -0
  32. package/components/document-builder/src/plugins/paste-handler/normalizers/googledocsnormalizer.d.ts +31 -0
  33. package/components/document-builder/src/plugins/paste-handler/normalizers/googlesheetsnormalizer.d.ts +31 -0
  34. package/components/document-builder/src/plugins/paste-handler/normalizers/mswordnormalizer.d.ts +29 -0
  35. package/components/document-builder/src/plugins/paste-handler/types.d.ts +30 -0
  36. package/components/document-builder/src/plugins/table-custom/index.d.ts +34 -0
  37. package/components/index.d.ts +3 -0
  38. package/components/mini-editor/index.d.ts +2 -0
  39. package/components/mini-editor/src/mini-editor.component.d.ts +90 -0
  40. package/components/mini-editor/src/mini-editor.model.d.ts +42 -0
  41. package/components/table/src/directives/index.d.ts +2 -0
  42. package/components/table/src/directives/sd-table-column-filter-def.directive.d.ts +9 -0
  43. package/components/table/src/directives/sticky-shadow.directive.d.ts +17 -0
  44. package/components/table/src/models/table-column.model.d.ts +7 -7
  45. package/components/table/src/models/table-command.model.d.ts +4 -0
  46. package/components/table/src/models/table-item.model.d.ts +2 -1
  47. package/components/table/src/models/table-option-export.model.d.ts +3 -2
  48. package/components/table/src/models/table-option.model.d.ts +10 -8
  49. package/components/table/src/services/table-filter/table-filter.model.d.ts +2 -2
  50. package/components/view/index.d.ts +1 -0
  51. package/components/view/src/view.component.d.ts +16 -0
  52. package/components/workflow/src/models/index.d.ts +1 -0
  53. package/directives/index.d.ts +1 -0
  54. package/directives/src/sd-href.directive.d.ts +9 -0
  55. package/fesm2022/sd-angular-core-components-avatar.mjs +88 -0
  56. package/fesm2022/sd-angular-core-components-avatar.mjs.map +1 -0
  57. package/fesm2022/sd-angular-core-components-badge.mjs +2 -2
  58. package/fesm2022/sd-angular-core-components-badge.mjs.map +1 -1
  59. package/fesm2022/sd-angular-core-components-document-builder.mjs +3187 -552
  60. package/fesm2022/sd-angular-core-components-document-builder.mjs.map +1 -1
  61. package/fesm2022/sd-angular-core-components-mini-editor.mjs +326 -0
  62. package/fesm2022/sd-angular-core-components-mini-editor.mjs.map +1 -0
  63. package/fesm2022/sd-angular-core-components-table.mjs +513 -87
  64. package/fesm2022/sd-angular-core-components-table.mjs.map +1 -1
  65. package/fesm2022/sd-angular-core-components-view.mjs +57 -0
  66. package/fesm2022/sd-angular-core-components-view.mjs.map +1 -0
  67. package/fesm2022/sd-angular-core-components-workflow.mjs +33 -43
  68. package/fesm2022/sd-angular-core-components-workflow.mjs.map +1 -1
  69. package/fesm2022/sd-angular-core-components.mjs +3 -0
  70. package/fesm2022/sd-angular-core-components.mjs.map +1 -1
  71. package/fesm2022/sd-angular-core-directives.mjs +80 -27
  72. package/fesm2022/sd-angular-core-directives.mjs.map +1 -1
  73. package/fesm2022/sd-angular-core-forms-autocomplete.mjs +35 -9
  74. package/fesm2022/sd-angular-core-forms-autocomplete.mjs.map +1 -1
  75. package/fesm2022/sd-angular-core-forms-date.mjs +24 -4
  76. package/fesm2022/sd-angular-core-forms-date.mjs.map +1 -1
  77. package/fesm2022/sd-angular-core-forms-datetime.mjs +27 -9
  78. package/fesm2022/sd-angular-core-forms-datetime.mjs.map +1 -1
  79. package/fesm2022/sd-angular-core-forms-input-number.mjs +37 -10
  80. package/fesm2022/sd-angular-core-forms-input-number.mjs.map +1 -1
  81. package/fesm2022/sd-angular-core-forms-input.mjs +29 -11
  82. package/fesm2022/sd-angular-core-forms-input.mjs.map +1 -1
  83. package/fesm2022/sd-angular-core-forms-radio.mjs +18 -2
  84. package/fesm2022/sd-angular-core-forms-radio.mjs.map +1 -1
  85. package/fesm2022/sd-angular-core-forms-select.mjs +27 -9
  86. package/fesm2022/sd-angular-core-forms-select.mjs.map +1 -1
  87. package/fesm2022/sd-angular-core-forms-textarea.mjs +21 -2
  88. package/fesm2022/sd-angular-core-forms-textarea.mjs.map +1 -1
  89. package/fesm2022/sd-angular-core-modules-auth.mjs +5 -5
  90. package/fesm2022/sd-angular-core-modules-auth.mjs.map +1 -1
  91. package/fesm2022/sd-angular-core-modules-keycloak.mjs +126 -0
  92. package/fesm2022/sd-angular-core-modules-keycloak.mjs.map +1 -0
  93. package/fesm2022/sd-angular-core-modules-layout.mjs +52 -17
  94. package/fesm2022/sd-angular-core-modules-layout.mjs.map +1 -1
  95. package/fesm2022/sd-angular-core-modules.mjs +1 -1
  96. package/fesm2022/sd-angular-core-pipes.mjs +21 -1
  97. package/fesm2022/sd-angular-core-pipes.mjs.map +1 -1
  98. package/fesm2022/sd-angular-core-services-confirm.mjs +2 -2
  99. package/fesm2022/sd-angular-core-services-confirm.mjs.map +1 -1
  100. package/fesm2022/sd-angular-core-services-docx.mjs +173 -0
  101. package/fesm2022/sd-angular-core-services-docx.mjs.map +1 -0
  102. package/fesm2022/sd-angular-core-services-notify.mjs +2 -2
  103. package/fesm2022/sd-angular-core-services-notify.mjs.map +1 -1
  104. package/fesm2022/sd-angular-core-services.mjs +1 -0
  105. package/fesm2022/sd-angular-core-services.mjs.map +1 -1
  106. package/fesm2022/sd-angular-core-utilities-extensions.mjs +74 -7
  107. package/fesm2022/sd-angular-core-utilities-extensions.mjs.map +1 -1
  108. package/fesm2022/sd-angular-core-utilities-models.mjs +8 -2
  109. package/fesm2022/sd-angular-core-utilities-models.mjs.map +1 -1
  110. package/forms/autocomplete/src/autocomplete.component.d.ts +9 -4
  111. package/forms/date/src/date.component.d.ts +7 -2
  112. package/forms/datetime/src/datetime.component.d.ts +8 -4
  113. package/forms/input/src/input.component.d.ts +10 -7
  114. package/forms/input-number/src/input-number.component.d.ts +10 -6
  115. package/forms/radio/src/radio.component.d.ts +5 -1
  116. package/forms/select/src/select.component.d.ts +9 -4
  117. package/forms/textarea/src/textarea.component.d.ts +3 -1
  118. package/modules/auth/guards/portal.guard.d.ts +3 -3
  119. package/modules/index.d.ts +1 -1
  120. package/modules/keycloak/index.d.ts +4 -0
  121. package/modules/keycloak/keycloak.configuration.d.ts +11 -0
  122. package/modules/keycloak/keycloak.interceptor.d.ts +2 -0
  123. package/modules/keycloak/keycloak.module.d.ts +18 -0
  124. package/modules/keycloak/keycloak.service.d.ts +14 -0
  125. package/modules/layout/components/sidebar-v1/components/sidebar/sidebar.component.d.ts +1 -0
  126. package/modules/layout/components/sidebar-v1/components/user/user.component.d.ts +5 -2
  127. package/modules/layout/configurations/layout.configuration.d.ts +3 -0
  128. package/modules/layout/services/storage/storage.service.d.ts +1 -0
  129. package/package.json +82 -64
  130. package/pipes/index.d.ts +1 -0
  131. package/pipes/src/empty.pipe.d.ts +7 -0
  132. package/sd-angular-core-19.0.0-beta.30.tgz +0 -0
  133. package/services/confirm/src/lib/confirm.service.d.ts +1 -0
  134. package/services/docx/index.d.ts +1 -0
  135. package/services/docx/src/lib/docx.model.d.ts +9 -0
  136. package/services/docx/src/lib/docx.service.d.ts +13 -0
  137. package/services/docx/src/public-api.d.ts +2 -0
  138. package/services/index.d.ts +1 -0
  139. package/utilities/extensions/index.d.ts +1 -0
  140. package/utilities/extensions/src/color.extension.d.ts +20 -0
  141. package/utilities/extensions/src/string.extension.d.ts +1 -0
  142. package/utilities/models/index.d.ts +1 -0
  143. package/utilities/models/src/filter.model.d.ts +10 -2
  144. package/utilities/models/src/nested-key-of.model.d.ts +5 -0
  145. package/utilities/models/src/pattern.model.d.ts +3 -3
  146. package/components/document-builder/src/plugins/table-fit.plugin.d.ts +0 -4
  147. package/fesm2022/sd-angular-core-modules-oidc.mjs +0 -127
  148. package/fesm2022/sd-angular-core-modules-oidc.mjs.map +0 -1
  149. package/modules/oidc/dynamic-sts.loader.d.ts +0 -11
  150. package/modules/oidc/index.d.ts +0 -2
  151. package/modules/oidc/oidc.configuration.d.ts +0 -11
  152. package/modules/oidc/oidc.module.d.ts +0 -14
  153. /package/components/document-builder/src/plugins/{comment.plugin.d.ts → comment/comment.plugin.d.ts} +0 -0
  154. /package/components/document-builder/src/plugins/{variable.plugin.d.ts → variable/variable.plugin.d.ts} +0 -0
@@ -14,12 +14,15 @@ import * as i5 from '@angular/material/input';
14
14
  import { MatInputModule } from '@angular/material/input';
15
15
  import * as i7 from '@angular/material/tooltip';
16
16
  import { MatTooltipModule } from '@angular/material/tooltip';
17
- import { SdViewDefDirective, SdSuffixDefDirective, SdLabelDefDirective } from '@sd-angular/core/forms/directives';
17
+ import { SdView } from '@sd-angular/core/components/view';
18
+ import { SD_CORE_CONFIGURATION } from '@sd-angular/core/configurations';
19
+ import { SdViewDefDirective, SdSuffixDefDirective } from '@sd-angular/core/forms/directives';
20
+ import { SdLabel } from '@sd-angular/core/forms/label';
18
21
  import { SdFormControl, HandleSdCustomValidator, SD_FORM_CONFIGURATION } from '@sd-angular/core/forms/models';
22
+ import * as i1 from '@sd-angular/core/pipes';
23
+ import { SdFormatNumberPipe } from '@sd-angular/core/pipes';
19
24
  import { NumberUtilities } from '@sd-angular/core/utilities/extensions';
20
25
  import { Subscription } from 'rxjs';
21
- import { SD_CORE_CONFIGURATION } from '@sd-angular/core/configurations';
22
- import * as i1 from '@sd-angular/core/pipes';
23
26
 
24
27
  /* eslint-disable @angular-eslint/component-class-suffix */
25
28
  /* eslint-disable @angular-eslint/no-input-rename */
@@ -39,6 +42,8 @@ class SdInputNumber {
39
42
  coreConfiguration;
40
43
  formatNumberPipe;
41
44
  formConfig;
45
+ sdLabelTemplate;
46
+ sdValueTemplate;
42
47
  id = `I${uuid.v4()}`;
43
48
  autoId;
44
49
  set _autoId(val) {
@@ -146,6 +151,11 @@ class SdInputNumber {
146
151
  this.formControl.enable();
147
152
  }
148
153
  }
154
+ viewed = false;
155
+ set _viewed(val) {
156
+ this.viewed = val === '' || !!val;
157
+ }
158
+ hyperlink;
149
159
  appearance = 'outline';
150
160
  sdChange = new EventEmitter();
151
161
  sdFocus = new EventEmitter();
@@ -160,7 +170,6 @@ class SdInputNumber {
160
170
  #preCompositionValue;
161
171
  sdViewDef;
162
172
  sdSuffixDef;
163
- sdLabelDef;
164
173
  isFocused = false;
165
174
  constructor(ref, coreConfiguration, formatNumberPipe, formConfig) {
166
175
  this.ref = ref;
@@ -373,6 +382,13 @@ class SdInputNumber {
373
382
  onBlur = () => {
374
383
  this.isFocused = false;
375
384
  const val = (this.inputControl.value ?? '').toString();
385
+ // If value is empty, set to empty string and emit to model
386
+ if (!val || val.trim() === '') {
387
+ this.inputControl.setValue('', { emitEvent: false });
388
+ this.#onChange(null);
389
+ this.sdBlur.emit(null);
390
+ return;
391
+ }
376
392
  const arrayValue = val.split(this.#decimalSeparator);
377
393
  if (arrayValue.length >= 2 && arrayValue[1] == '') {
378
394
  this.inputControl.setValue(this.#formatNumber(arrayValue[0]));
@@ -401,7 +417,7 @@ class SdInputNumber {
401
417
  }, 100);
402
418
  };
403
419
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: SdInputNumber, deps: [{ token: i0.ChangeDetectorRef }, { token: SD_CORE_CONFIGURATION, optional: true }, { token: i1.SdFormatNumberPipe }, { token: SD_FORM_CONFIGURATION, optional: true }], target: i0.ɵɵFactoryTarget.Component });
404
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.17", type: SdInputNumber, isStandalone: true, selector: "sd-input-number", inputs: { _autoId: ["autoId", "_autoId"], name: "name", size: "size", form: "form", _label: ["label", "_label"], _helperText: ["helperText", "_helperText"], placeholder: "placeholder", _hideInlineError: ["hideInlineError", "_hideInlineError"], _blurOnEnter: ["blurOnEnter", "_blurOnEnter"], model: "model", _required: ["required", "_required"], type: "type", precision: "precision", _readonly: ["readonly", "_readonly"], _min: ["min", "_min"], _max: ["max", "_max"], validator: "validator", _inlineError: ["inlineError", "_inlineError"], disabled: "disabled", appearance: "appearance" }, outputs: { modelChange: "modelChange", sdChange: "sdChange", sdFocus: "sdFocus", sdBlur: "sdBlur", sdFocusForceBlur: "sdFocusForceBlur", keyupEnter: "keyupEnter" }, queries: [{ propertyName: "sdViewDef", first: true, predicate: SdViewDefDirective, descendants: true }, { propertyName: "sdSuffixDef", first: true, predicate: SdSuffixDefDirective, descendants: true }, { propertyName: "sdLabelDef", first: true, predicate: SdLabelDefDirective, descendants: true }], viewQueries: [{ propertyName: "control", first: true, predicate: ["control"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"!appearance && sdLabelDef?.templateRef\">\r\n <ng-container *ngTemplateOutlet=\"sdLabelDef?.templateRef ?? null\"> </ng-container>\r\n</ng-container>\r\n<span *ngIf=\"!appearance && label && !sdLabelDef?.templateRef\" class=\"d-block mb-0 T14M\"\r\n >{{ label }} <span class=\"text-error mb-2\" *ngIf=\"required\">*</span></span\r\n>\r\n<div\r\n class=\"d-flex align-items-center\"\r\n [class.sd-view]=\"!!sdViewDef?.templateRef\"\r\n [class.c-focused]=\"isFocused\"\r\n [class.c-disabled]=\"formControl.disabled\"\r\n (click)=\"onClick()\"\r\n aria-hidden=\"true\">\r\n @if (sdViewDef?.templateRef && !isFocused) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n sdViewDef!.templateRef;\r\n context: {\r\n value: formControl.value\r\n }\r\n \">\r\n </ng-container>\r\n } @else {\r\n <mat-form-field\r\n [class.sd-md]=\"size === 'md'\"\r\n [class.sd-sm]=\"size === 'sm'\"\r\n [class.hide-inline-error]=\"hideInlineError\"\r\n [appearance]=\"appearance\">\r\n @if (appearance && label) {\r\n <mat-label style=\"display: inline-block\">\r\n <div style=\"display: flex; align-items: center; gap: 4px\">\r\n <span>{{ label }}</span>\r\n @if (helperText) {\r\n <mat-icon [matTooltip]=\"helperText\" matTooltipPosition=\"below\">info_outline</mat-icon>\r\n }\r\n </div>\r\n </mat-label>\r\n }\r\n <input\r\n aria-hidden=\"true\"\r\n [id]=\"id\"\r\n [formControl]=\"inputControl\"\r\n #control\r\n matInput\r\n [placeholder]=\"placeholder || label || ''\"\r\n [errorStateMatcher]=\"matcher\"\r\n (keyup.enter)=\"onKeyupEnter()\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\"\r\n (keydown)=\"onKeydown($event)\"\r\n (compositionstart)=\"onCompositionStart($event)\"\r\n (compositionend)=\"onCompositionEnd($event)\"\r\n [required]=\"required\"\r\n [readonly]=\"readonly\"\r\n [autocomplete]=\"id\"\r\n (paste)=\"onPaste($event)\"\r\n autocorrect=\"off\"\r\n [attr.data-autoId]=\"autoId\" />\r\n <ng-container *ngIf=\"sdSuffixDef?.templateRef\" matSuffix>\r\n <ng-container *ngTemplateOutlet=\"sdSuffixDef?.templateRef ?? null\"> </ng-container>\r\n </ng-container>\r\n <mat-error *ngIf=\"formControl?.errors?.['required']\">\r\n <ng-container *ngIf=\"!hideInlineError\">{{ 'Vui l\u00F2ng nh\u1EADp th\u00F4ng tin' }}</ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl.errors?.['min']\">\r\n <ng-container *ngIf=\"!hideInlineError\"\r\n >{{ 'Kh\u00F4ng nh\u1EADp b\u00E9 h\u01A1n ' }} <strong>{{ min }}</strong></ng-container\r\n >\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl.errors?.['max']\">\r\n <ng-container *ngIf=\"!hideInlineError\"\r\n >{{ 'Kh\u00F4ng nh\u1EADp l\u1EDBn h\u01A1n ' }} <strong>{{ max }}</strong></ng-container\r\n >\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl.errors?.['customValidator']\">\r\n <ng-container *ngIf=\"!hideInlineError\">{{ formControl.errors?.['customValidator'] }}</ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl.errors?.['inlineError']\">\r\n <ng-container *ngIf=\"!hideInlineError\">{{ inlineError }}</ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n }\r\n</div>\r\n<!-- <sd-popover #error=\"sdPopover\" type=\"danger\" width=\"300px\">\r\n <span *ngIf=\"formControl.errors?.required\">\r\n {{ \"Vui l\u00F2ng nh\u1EADp th\u00F4ng tin\" | sdTranslate }}\r\n </span>\r\n <span *ngIf=\"formControl.errors?.customValidator\">\r\n {{formControl.errors?.customValidator}}\r\n </span>\r\n</sd-popover> -->\r\n", styles: [".text-primary{color:var(--sd-primary)!important}.bg-primary{background:var(--sd-primary)!important}.border-primary{border-color:var(--sd-primary)!important}.text-primary-light{color:var(--sd-primary-light)!important}.bg-primary-light{background:var(--sd-primary-light)!important}.border-primary-light{border-color:var(--sd-primary-light)!important}.text-primary-dark{color:var(--sd-primary-dark)!important}.bg-primary-dark{background:var(--sd-primary-dark)!important}.border-primary-dark{border-color:var(--sd-primary-dark)!important}.text-info{color:var(--sd-info)!important}.bg-info{background:var(--sd-info)!important}.border-info{border-color:var(--sd-info)!important}.text-info-light{color:var(--sd-info-light)!important}.bg-info-light{background:var(--sd-info-light)!important}.border-info-light{border-color:var(--sd-info-light)!important}.text-info-dark{color:var(--sd-info-dark)!important}.bg-info-dark{background:var(--sd-info-dark)!important}.border-info-dark{border-color:var(--sd-info-dark)!important}.text-success{color:var(--sd-success)!important}.bg-success{background:var(--sd-success)!important}.border-success{border-color:var(--sd-success)!important}.text-success-light{color:var(--sd-success-light)!important}.bg-success-light{background:var(--sd-success-light)!important}.border-success-light{border-color:var(--sd-success-light)!important}.text-success-dark{color:var(--sd-success-dark)!important}.bg-success-dark{background:var(--sd-success-dark)!important}.border-success-dark{border-color:var(--sd-success-dark)!important}.text-warning{color:var(--sd-warning)!important}.bg-warning{background:var(--sd-warning)!important}.border-warning{border-color:var(--sd-warning)!important}.text-warning-light{color:var(--sd-warning-light)!important}.bg-warning-light{background:var(--sd-warning-light)!important}.border-warning-light{border-color:var(--sd-warning-light)!important}.text-warning-dark{color:var(--sd-warning-dark)!important}.bg-warning-dark{background:var(--sd-warning-dark)!important}.border-warning-dark{border-color:var(--sd-warning-dark)!important}.text-error{color:var(--sd-error)!important}.bg-error{background:var(--sd-error)!important}.border-error{border-color:var(--sd-error)!important}.text-error-light{color:var(--sd-error-light)!important}.bg-error-light{background:var(--sd-error-light)!important}.border-error-light{border-color:var(--sd-error-light)!important}.text-error-dark{color:var(--sd-error-dark)!important}.bg-error-dark{background:var(--sd-error-dark)!important}.border-error-dark{border-color:var(--sd-error-dark)!important}.text-secondary{color:var(--sd-secondary)!important}.bg-secondary{background:var(--sd-secondary)!important}.border-secondary{border-color:var(--sd-secondary)!important}.text-secondary-light{color:var(--sd-secondary-light)!important}.bg-secondary-light{background:var(--sd-secondary-light)!important}.border-secondary-light{border-color:var(--sd-secondary-light)!important}.text-secondary-dark{color:var(--sd-secondary-dark)!important}.bg-secondary-dark{background:var(--sd-secondary-dark)!important}.border-secondary-dark{border-color:var(--sd-secondary-dark)!important}.text-light{color:var(--sd-light)!important}.bg-light{background:var(--sd-light)!important}.border-light{border-color:var(--sd-light)!important}.text-dark{color:var(--sd-dark)!important}.bg-dark{background:var(--sd-dark)!important}.border-dark{border-color:var(--sd-dark)!important}.text-black500{color:var(--sd-black500)!important}.bg-black500{background:var(--sd-black500)!important}.border-black500{border-color:var(--sd-black500)!important}.text-black400{color:var(--sd-black400)!important}.bg-black400{background:var(--sd-black400)!important}.border-black400{border-color:var(--sd-black400)!important}.text-black300{color:var(--sd-black300)!important}.bg-black300{background:var(--sd-black300)!important}.border-black300{border-color:var(--sd-black300)!important}.text-black200{color:var(--sd-black200)!important}.bg-black200{background:var(--sd-black200)!important}.border-black200{border-color:var(--sd-black200)!important}.text-black100{color:var(--sd-black100)!important}.bg-black100{background:var(--sd-black100)!important}.border-black100{border-color:var(--sd-black100)!important}.text-white{color:#fff!important}.bg-white{background:#fff!important}.border-white{border-color:#fff!important}.text-black{color:#000!important}.bg-black{background:#000!important}.border-black{border-color:#000!important}:host ::ng-deep .mat-mdc-form-field.sd-form-tooltip{width:calc(100% - 30px)}:host ::ng-deep .mat-mdc-form-field.mat-form-field-appearance-outline.mat-form-field-disabled .mat-mdc-text-field-wrapper{background:var(--sd-black100)}:host ::ng-deep .mat-mdc-form-field input.mat-mdc-input-element:disabled{color:var(--sd-black400)!important}:host ::ng-deep .mat-mdc-form-field .mat-mdc-placeholder-required{color:var(--sd-error)}.sd-view:not(.c-focused):not(.c-disabled):hover{background-color:#ebecf0}.sd-tooltip{display:inline-block;text-align:center;margin:auto;width:30px}:host{padding-top:5px;display:block}.sd-md:hover .btn-copy{visibility:visible}.btn-copy{visibility:hidden;background:#e9e9e9!important;line-height:26px!important;margin-bottom:3px;font-size:12px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatButtonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
420
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.17", type: SdInputNumber, isStandalone: true, selector: "sd-input-number", inputs: { _autoId: ["autoId", "_autoId"], name: "name", size: "size", form: "form", _label: ["label", "_label"], _helperText: ["helperText", "_helperText"], placeholder: "placeholder", _hideInlineError: ["hideInlineError", "_hideInlineError"], _blurOnEnter: ["blurOnEnter", "_blurOnEnter"], model: "model", _required: ["required", "_required"], type: "type", precision: "precision", _readonly: ["readonly", "_readonly"], _min: ["min", "_min"], _max: ["max", "_max"], validator: "validator", _inlineError: ["inlineError", "_inlineError"], disabled: "disabled", _viewed: ["viewed", "_viewed"], hyperlink: "hyperlink", appearance: "appearance" }, outputs: { modelChange: "modelChange", sdChange: "sdChange", sdFocus: "sdFocus", sdBlur: "sdBlur", sdFocusForceBlur: "sdFocusForceBlur", keyupEnter: "keyupEnter" }, queries: [{ propertyName: "sdLabelTemplate", first: true, predicate: ["sdLabel"], descendants: true }, { propertyName: "sdValueTemplate", first: true, predicate: ["sdValue"], descendants: true }, { propertyName: "sdViewDef", first: true, predicate: SdViewDefDirective, descendants: true }, { propertyName: "sdSuffixDef", first: true, predicate: SdSuffixDefDirective, descendants: true }], viewQueries: [{ propertyName: "control", first: true, predicate: ["control"], descendants: true }], ngImport: i0, template: "@if (viewed) {\r\n <sd-view\r\n [label]=\"label\"\r\n [labelTemplate]=\"sdLabelTemplate\"\r\n [value]=\"formControl.value\"\r\n [display]=\"formControl.value | sdFormatNumber\"\r\n [hyperlink]=\"hyperlink\"\r\n [valueTemplate]=\"sdValueTemplate\">\r\n </sd-view>\r\n} @else {\r\n @if (!appearance) {\r\n <ng-content select=\"[sdLabel]\">\r\n @if (label) {\r\n <sd-label [label]=\"label\" [required]=\"required\"></sd-label>\r\n }\r\n </ng-content>\r\n }\r\n <div\r\n class=\"d-flex align-items-center\"\r\n [class.sd-view]=\"!!sdViewDef?.templateRef\"\r\n [class.c-focused]=\"isFocused\"\r\n [class.c-disabled]=\"formControl.disabled\"\r\n (click)=\"onClick()\"\r\n aria-hidden=\"true\">\r\n @if (sdViewDef?.templateRef && !isFocused) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n sdViewDef!.templateRef;\r\n context: {\r\n value: formControl.value\r\n }\r\n \">\r\n </ng-container>\r\n } @else {\r\n <mat-form-field\r\n [class.sd-md]=\"size === 'md'\"\r\n [class.sd-sm]=\"size === 'sm'\"\r\n [class.hide-inline-error]=\"hideInlineError\"\r\n [appearance]=\"appearance\">\r\n @if (appearance && label) {\r\n <mat-label style=\"display: inline-block\">\r\n <div style=\"display: flex; align-items: center; gap: 4px\">\r\n <span>{{ label }}</span>\r\n @if (helperText) {\r\n <mat-icon [matTooltip]=\"helperText\" matTooltipPosition=\"below\">info_outline</mat-icon>\r\n }\r\n </div>\r\n </mat-label>\r\n }\r\n <input\r\n aria-hidden=\"true\"\r\n [id]=\"id\"\r\n [formControl]=\"inputControl\"\r\n #control\r\n matInput\r\n [placeholder]=\"placeholder || label || ''\"\r\n [errorStateMatcher]=\"matcher\"\r\n (keyup.enter)=\"onKeyupEnter()\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\"\r\n (keydown)=\"onKeydown($event)\"\r\n (compositionstart)=\"onCompositionStart($event)\"\r\n (compositionend)=\"onCompositionEnd($event)\"\r\n [required]=\"required\"\r\n [readonly]=\"readonly\"\r\n [autocomplete]=\"id\"\r\n (paste)=\"onPaste($event)\"\r\n autocorrect=\"off\"\r\n [attr.data-autoId]=\"autoId\" />\r\n @if (sdSuffixDef?.templateRef) {\r\n <ng-container matSuffix>\r\n <ng-container [ngTemplateOutlet]=\"sdSuffixDef?.templateRef ?? null\"></ng-container>\r\n </ng-container>\r\n }\r\n\r\n @if (formControl.errors?.['required']) {\r\n <mat-error>\r\n @if (!hideInlineError) {\r\n {{ 'Vui l\u00F2ng nh\u1EADp th\u00F4ng tin' }}\r\n }\r\n </mat-error>\r\n }\r\n\r\n @if (formControl.errors?.['min']) {\r\n <mat-error>\r\n @if (!hideInlineError) {\r\n {{ 'Gi\u00E1 tr\u1ECB kh\u00F4ng \u0111\u01B0\u1EE3c nh\u1ECF h\u01A1n ' }} <strong>{{ min }}</strong>\r\n }\r\n </mat-error>\r\n }\r\n\r\n @if (formControl.errors?.['max']) {\r\n <mat-error>\r\n @if (!hideInlineError) {\r\n {{ 'Gi\u00E1 tr\u1ECB kh\u00F4ng \u0111\u01B0\u1EE3c l\u1EDBn h\u01A1n ' }} <strong>{{ max }}</strong>\r\n }\r\n </mat-error>\r\n }\r\n\r\n @if (formControl.errors?.['customValidator']) {\r\n <mat-error>\r\n @if (!hideInlineError) {\r\n {{ formControl.errors?.['customValidator'] }}\r\n }\r\n </mat-error>\r\n }\r\n\r\n @if (formControl.errors?.['inlineError']) {\r\n <mat-error>\r\n @if (!hideInlineError) {\r\n {{ inlineError }}\r\n }\r\n </mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n </div>\r\n <!-- <sd-popover #error=\"sdPopover\" type=\"danger\" width=\"300px\">\r\n <span *ngIf=\"formControl.errors?.required\">\r\n {{ \"Vui l\u00F2ng nh\u1EADp th\u00F4ng tin\" | sdTranslate }}\r\n </span>\r\n <span *ngIf=\"formControl.errors?.customValidator\">\r\n {{formControl.errors?.customValidator}}\r\n </span>\r\n</sd-popover> -->\r\n}\r\n", styles: [".text-primary{color:var(--sd-primary)!important}.bg-primary{background:var(--sd-primary)!important}.border-primary{border-color:var(--sd-primary)!important}.text-primary-light{color:var(--sd-primary-light)!important}.bg-primary-light{background:var(--sd-primary-light)!important}.border-primary-light{border-color:var(--sd-primary-light)!important}.text-primary-dark{color:var(--sd-primary-dark)!important}.bg-primary-dark{background:var(--sd-primary-dark)!important}.border-primary-dark{border-color:var(--sd-primary-dark)!important}.text-info{color:var(--sd-info)!important}.bg-info{background:var(--sd-info)!important}.border-info{border-color:var(--sd-info)!important}.text-info-light{color:var(--sd-info-light)!important}.bg-info-light{background:var(--sd-info-light)!important}.border-info-light{border-color:var(--sd-info-light)!important}.text-info-dark{color:var(--sd-info-dark)!important}.bg-info-dark{background:var(--sd-info-dark)!important}.border-info-dark{border-color:var(--sd-info-dark)!important}.text-success{color:var(--sd-success)!important}.bg-success{background:var(--sd-success)!important}.border-success{border-color:var(--sd-success)!important}.text-success-light{color:var(--sd-success-light)!important}.bg-success-light{background:var(--sd-success-light)!important}.border-success-light{border-color:var(--sd-success-light)!important}.text-success-dark{color:var(--sd-success-dark)!important}.bg-success-dark{background:var(--sd-success-dark)!important}.border-success-dark{border-color:var(--sd-success-dark)!important}.text-warning{color:var(--sd-warning)!important}.bg-warning{background:var(--sd-warning)!important}.border-warning{border-color:var(--sd-warning)!important}.text-warning-light{color:var(--sd-warning-light)!important}.bg-warning-light{background:var(--sd-warning-light)!important}.border-warning-light{border-color:var(--sd-warning-light)!important}.text-warning-dark{color:var(--sd-warning-dark)!important}.bg-warning-dark{background:var(--sd-warning-dark)!important}.border-warning-dark{border-color:var(--sd-warning-dark)!important}.text-error{color:var(--sd-error)!important}.bg-error{background:var(--sd-error)!important}.border-error{border-color:var(--sd-error)!important}.text-error-light{color:var(--sd-error-light)!important}.bg-error-light{background:var(--sd-error-light)!important}.border-error-light{border-color:var(--sd-error-light)!important}.text-error-dark{color:var(--sd-error-dark)!important}.bg-error-dark{background:var(--sd-error-dark)!important}.border-error-dark{border-color:var(--sd-error-dark)!important}.text-secondary{color:var(--sd-secondary)!important}.bg-secondary{background:var(--sd-secondary)!important}.border-secondary{border-color:var(--sd-secondary)!important}.text-secondary-light{color:var(--sd-secondary-light)!important}.bg-secondary-light{background:var(--sd-secondary-light)!important}.border-secondary-light{border-color:var(--sd-secondary-light)!important}.text-secondary-dark{color:var(--sd-secondary-dark)!important}.bg-secondary-dark{background:var(--sd-secondary-dark)!important}.border-secondary-dark{border-color:var(--sd-secondary-dark)!important}.text-light{color:var(--sd-light)!important}.bg-light{background:var(--sd-light)!important}.border-light{border-color:var(--sd-light)!important}.text-dark{color:var(--sd-dark)!important}.bg-dark{background:var(--sd-dark)!important}.border-dark{border-color:var(--sd-dark)!important}.text-black500{color:var(--sd-black500)!important}.bg-black500{background:var(--sd-black500)!important}.border-black500{border-color:var(--sd-black500)!important}.text-black400{color:var(--sd-black400)!important}.bg-black400{background:var(--sd-black400)!important}.border-black400{border-color:var(--sd-black400)!important}.text-black300{color:var(--sd-black300)!important}.bg-black300{background:var(--sd-black300)!important}.border-black300{border-color:var(--sd-black300)!important}.text-black200{color:var(--sd-black200)!important}.bg-black200{background:var(--sd-black200)!important}.border-black200{border-color:var(--sd-black200)!important}.text-black100{color:var(--sd-black100)!important}.bg-black100{background:var(--sd-black100)!important}.border-black100{border-color:var(--sd-black100)!important}.text-white{color:#fff!important}.bg-white{background:#fff!important}.border-white{border-color:#fff!important}.text-black{color:#000!important}.bg-black{background:#000!important}.border-black{border-color:#000!important}:host ::ng-deep .mat-mdc-form-field.sd-form-tooltip{width:calc(100% - 30px)}:host ::ng-deep .mat-mdc-form-field.mat-form-field-appearance-outline.mat-form-field-disabled .mat-mdc-text-field-wrapper{background:var(--sd-black100)}:host ::ng-deep .mat-mdc-form-field input.mat-mdc-input-element:disabled{color:var(--sd-black400)!important}:host ::ng-deep .mat-mdc-form-field .mat-mdc-placeholder-required{color:var(--sd-error)}.sd-view:not(.c-focused):not(.c-disabled):hover{background-color:#ebecf0}.sd-tooltip{display:inline-block;text-align:center;margin:auto;width:30px}:host{padding-top:5px;display:block}.sd-md:hover .btn-copy{visibility:visible}.btn-copy{visibility:hidden;background:#e9e9e9!important;line-height:26px!important;margin-bottom:3px;font-size:12px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: SdLabel, selector: "sd-label", inputs: ["label", "description", "required", "helperText"] }, { kind: "pipe", type: SdFormatNumberPipe, name: "sdFormatNumber" }, { kind: "component", type: SdView, selector: "sd-view", inputs: ["label", "value", "display", "hyperlink", "labelTemplate", "valueTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
405
421
  }
406
422
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: SdInputNumber, decorators: [{
407
423
  type: Component,
@@ -414,7 +430,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
414
430
  MatIconModule,
415
431
  MatTooltipModule,
416
432
  MatButtonModule,
417
- ], template: "<ng-container *ngIf=\"!appearance && sdLabelDef?.templateRef\">\r\n <ng-container *ngTemplateOutlet=\"sdLabelDef?.templateRef ?? null\"> </ng-container>\r\n</ng-container>\r\n<span *ngIf=\"!appearance && label && !sdLabelDef?.templateRef\" class=\"d-block mb-0 T14M\"\r\n >{{ label }} <span class=\"text-error mb-2\" *ngIf=\"required\">*</span></span\r\n>\r\n<div\r\n class=\"d-flex align-items-center\"\r\n [class.sd-view]=\"!!sdViewDef?.templateRef\"\r\n [class.c-focused]=\"isFocused\"\r\n [class.c-disabled]=\"formControl.disabled\"\r\n (click)=\"onClick()\"\r\n aria-hidden=\"true\">\r\n @if (sdViewDef?.templateRef && !isFocused) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n sdViewDef!.templateRef;\r\n context: {\r\n value: formControl.value\r\n }\r\n \">\r\n </ng-container>\r\n } @else {\r\n <mat-form-field\r\n [class.sd-md]=\"size === 'md'\"\r\n [class.sd-sm]=\"size === 'sm'\"\r\n [class.hide-inline-error]=\"hideInlineError\"\r\n [appearance]=\"appearance\">\r\n @if (appearance && label) {\r\n <mat-label style=\"display: inline-block\">\r\n <div style=\"display: flex; align-items: center; gap: 4px\">\r\n <span>{{ label }}</span>\r\n @if (helperText) {\r\n <mat-icon [matTooltip]=\"helperText\" matTooltipPosition=\"below\">info_outline</mat-icon>\r\n }\r\n </div>\r\n </mat-label>\r\n }\r\n <input\r\n aria-hidden=\"true\"\r\n [id]=\"id\"\r\n [formControl]=\"inputControl\"\r\n #control\r\n matInput\r\n [placeholder]=\"placeholder || label || ''\"\r\n [errorStateMatcher]=\"matcher\"\r\n (keyup.enter)=\"onKeyupEnter()\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\"\r\n (keydown)=\"onKeydown($event)\"\r\n (compositionstart)=\"onCompositionStart($event)\"\r\n (compositionend)=\"onCompositionEnd($event)\"\r\n [required]=\"required\"\r\n [readonly]=\"readonly\"\r\n [autocomplete]=\"id\"\r\n (paste)=\"onPaste($event)\"\r\n autocorrect=\"off\"\r\n [attr.data-autoId]=\"autoId\" />\r\n <ng-container *ngIf=\"sdSuffixDef?.templateRef\" matSuffix>\r\n <ng-container *ngTemplateOutlet=\"sdSuffixDef?.templateRef ?? null\"> </ng-container>\r\n </ng-container>\r\n <mat-error *ngIf=\"formControl?.errors?.['required']\">\r\n <ng-container *ngIf=\"!hideInlineError\">{{ 'Vui l\u00F2ng nh\u1EADp th\u00F4ng tin' }}</ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl.errors?.['min']\">\r\n <ng-container *ngIf=\"!hideInlineError\"\r\n >{{ 'Kh\u00F4ng nh\u1EADp b\u00E9 h\u01A1n ' }} <strong>{{ min }}</strong></ng-container\r\n >\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl.errors?.['max']\">\r\n <ng-container *ngIf=\"!hideInlineError\"\r\n >{{ 'Kh\u00F4ng nh\u1EADp l\u1EDBn h\u01A1n ' }} <strong>{{ max }}</strong></ng-container\r\n >\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl.errors?.['customValidator']\">\r\n <ng-container *ngIf=\"!hideInlineError\">{{ formControl.errors?.['customValidator'] }}</ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl.errors?.['inlineError']\">\r\n <ng-container *ngIf=\"!hideInlineError\">{{ inlineError }}</ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n }\r\n</div>\r\n<!-- <sd-popover #error=\"sdPopover\" type=\"danger\" width=\"300px\">\r\n <span *ngIf=\"formControl.errors?.required\">\r\n {{ \"Vui l\u00F2ng nh\u1EADp th\u00F4ng tin\" | sdTranslate }}\r\n </span>\r\n <span *ngIf=\"formControl.errors?.customValidator\">\r\n {{formControl.errors?.customValidator}}\r\n </span>\r\n</sd-popover> -->\r\n", styles: [".text-primary{color:var(--sd-primary)!important}.bg-primary{background:var(--sd-primary)!important}.border-primary{border-color:var(--sd-primary)!important}.text-primary-light{color:var(--sd-primary-light)!important}.bg-primary-light{background:var(--sd-primary-light)!important}.border-primary-light{border-color:var(--sd-primary-light)!important}.text-primary-dark{color:var(--sd-primary-dark)!important}.bg-primary-dark{background:var(--sd-primary-dark)!important}.border-primary-dark{border-color:var(--sd-primary-dark)!important}.text-info{color:var(--sd-info)!important}.bg-info{background:var(--sd-info)!important}.border-info{border-color:var(--sd-info)!important}.text-info-light{color:var(--sd-info-light)!important}.bg-info-light{background:var(--sd-info-light)!important}.border-info-light{border-color:var(--sd-info-light)!important}.text-info-dark{color:var(--sd-info-dark)!important}.bg-info-dark{background:var(--sd-info-dark)!important}.border-info-dark{border-color:var(--sd-info-dark)!important}.text-success{color:var(--sd-success)!important}.bg-success{background:var(--sd-success)!important}.border-success{border-color:var(--sd-success)!important}.text-success-light{color:var(--sd-success-light)!important}.bg-success-light{background:var(--sd-success-light)!important}.border-success-light{border-color:var(--sd-success-light)!important}.text-success-dark{color:var(--sd-success-dark)!important}.bg-success-dark{background:var(--sd-success-dark)!important}.border-success-dark{border-color:var(--sd-success-dark)!important}.text-warning{color:var(--sd-warning)!important}.bg-warning{background:var(--sd-warning)!important}.border-warning{border-color:var(--sd-warning)!important}.text-warning-light{color:var(--sd-warning-light)!important}.bg-warning-light{background:var(--sd-warning-light)!important}.border-warning-light{border-color:var(--sd-warning-light)!important}.text-warning-dark{color:var(--sd-warning-dark)!important}.bg-warning-dark{background:var(--sd-warning-dark)!important}.border-warning-dark{border-color:var(--sd-warning-dark)!important}.text-error{color:var(--sd-error)!important}.bg-error{background:var(--sd-error)!important}.border-error{border-color:var(--sd-error)!important}.text-error-light{color:var(--sd-error-light)!important}.bg-error-light{background:var(--sd-error-light)!important}.border-error-light{border-color:var(--sd-error-light)!important}.text-error-dark{color:var(--sd-error-dark)!important}.bg-error-dark{background:var(--sd-error-dark)!important}.border-error-dark{border-color:var(--sd-error-dark)!important}.text-secondary{color:var(--sd-secondary)!important}.bg-secondary{background:var(--sd-secondary)!important}.border-secondary{border-color:var(--sd-secondary)!important}.text-secondary-light{color:var(--sd-secondary-light)!important}.bg-secondary-light{background:var(--sd-secondary-light)!important}.border-secondary-light{border-color:var(--sd-secondary-light)!important}.text-secondary-dark{color:var(--sd-secondary-dark)!important}.bg-secondary-dark{background:var(--sd-secondary-dark)!important}.border-secondary-dark{border-color:var(--sd-secondary-dark)!important}.text-light{color:var(--sd-light)!important}.bg-light{background:var(--sd-light)!important}.border-light{border-color:var(--sd-light)!important}.text-dark{color:var(--sd-dark)!important}.bg-dark{background:var(--sd-dark)!important}.border-dark{border-color:var(--sd-dark)!important}.text-black500{color:var(--sd-black500)!important}.bg-black500{background:var(--sd-black500)!important}.border-black500{border-color:var(--sd-black500)!important}.text-black400{color:var(--sd-black400)!important}.bg-black400{background:var(--sd-black400)!important}.border-black400{border-color:var(--sd-black400)!important}.text-black300{color:var(--sd-black300)!important}.bg-black300{background:var(--sd-black300)!important}.border-black300{border-color:var(--sd-black300)!important}.text-black200{color:var(--sd-black200)!important}.bg-black200{background:var(--sd-black200)!important}.border-black200{border-color:var(--sd-black200)!important}.text-black100{color:var(--sd-black100)!important}.bg-black100{background:var(--sd-black100)!important}.border-black100{border-color:var(--sd-black100)!important}.text-white{color:#fff!important}.bg-white{background:#fff!important}.border-white{border-color:#fff!important}.text-black{color:#000!important}.bg-black{background:#000!important}.border-black{border-color:#000!important}:host ::ng-deep .mat-mdc-form-field.sd-form-tooltip{width:calc(100% - 30px)}:host ::ng-deep .mat-mdc-form-field.mat-form-field-appearance-outline.mat-form-field-disabled .mat-mdc-text-field-wrapper{background:var(--sd-black100)}:host ::ng-deep .mat-mdc-form-field input.mat-mdc-input-element:disabled{color:var(--sd-black400)!important}:host ::ng-deep .mat-mdc-form-field .mat-mdc-placeholder-required{color:var(--sd-error)}.sd-view:not(.c-focused):not(.c-disabled):hover{background-color:#ebecf0}.sd-tooltip{display:inline-block;text-align:center;margin:auto;width:30px}:host{padding-top:5px;display:block}.sd-md:hover .btn-copy{visibility:visible}.btn-copy{visibility:hidden;background:#e9e9e9!important;line-height:26px!important;margin-bottom:3px;font-size:12px}\n"] }]
433
+ SdLabel,
434
+ SdFormatNumberPipe,
435
+ SdView
436
+ ], template: "@if (viewed) {\r\n <sd-view\r\n [label]=\"label\"\r\n [labelTemplate]=\"sdLabelTemplate\"\r\n [value]=\"formControl.value\"\r\n [display]=\"formControl.value | sdFormatNumber\"\r\n [hyperlink]=\"hyperlink\"\r\n [valueTemplate]=\"sdValueTemplate\">\r\n </sd-view>\r\n} @else {\r\n @if (!appearance) {\r\n <ng-content select=\"[sdLabel]\">\r\n @if (label) {\r\n <sd-label [label]=\"label\" [required]=\"required\"></sd-label>\r\n }\r\n </ng-content>\r\n }\r\n <div\r\n class=\"d-flex align-items-center\"\r\n [class.sd-view]=\"!!sdViewDef?.templateRef\"\r\n [class.c-focused]=\"isFocused\"\r\n [class.c-disabled]=\"formControl.disabled\"\r\n (click)=\"onClick()\"\r\n aria-hidden=\"true\">\r\n @if (sdViewDef?.templateRef && !isFocused) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n sdViewDef!.templateRef;\r\n context: {\r\n value: formControl.value\r\n }\r\n \">\r\n </ng-container>\r\n } @else {\r\n <mat-form-field\r\n [class.sd-md]=\"size === 'md'\"\r\n [class.sd-sm]=\"size === 'sm'\"\r\n [class.hide-inline-error]=\"hideInlineError\"\r\n [appearance]=\"appearance\">\r\n @if (appearance && label) {\r\n <mat-label style=\"display: inline-block\">\r\n <div style=\"display: flex; align-items: center; gap: 4px\">\r\n <span>{{ label }}</span>\r\n @if (helperText) {\r\n <mat-icon [matTooltip]=\"helperText\" matTooltipPosition=\"below\">info_outline</mat-icon>\r\n }\r\n </div>\r\n </mat-label>\r\n }\r\n <input\r\n aria-hidden=\"true\"\r\n [id]=\"id\"\r\n [formControl]=\"inputControl\"\r\n #control\r\n matInput\r\n [placeholder]=\"placeholder || label || ''\"\r\n [errorStateMatcher]=\"matcher\"\r\n (keyup.enter)=\"onKeyupEnter()\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\"\r\n (keydown)=\"onKeydown($event)\"\r\n (compositionstart)=\"onCompositionStart($event)\"\r\n (compositionend)=\"onCompositionEnd($event)\"\r\n [required]=\"required\"\r\n [readonly]=\"readonly\"\r\n [autocomplete]=\"id\"\r\n (paste)=\"onPaste($event)\"\r\n autocorrect=\"off\"\r\n [attr.data-autoId]=\"autoId\" />\r\n @if (sdSuffixDef?.templateRef) {\r\n <ng-container matSuffix>\r\n <ng-container [ngTemplateOutlet]=\"sdSuffixDef?.templateRef ?? null\"></ng-container>\r\n </ng-container>\r\n }\r\n\r\n @if (formControl.errors?.['required']) {\r\n <mat-error>\r\n @if (!hideInlineError) {\r\n {{ 'Vui l\u00F2ng nh\u1EADp th\u00F4ng tin' }}\r\n }\r\n </mat-error>\r\n }\r\n\r\n @if (formControl.errors?.['min']) {\r\n <mat-error>\r\n @if (!hideInlineError) {\r\n {{ 'Gi\u00E1 tr\u1ECB kh\u00F4ng \u0111\u01B0\u1EE3c nh\u1ECF h\u01A1n ' }} <strong>{{ min }}</strong>\r\n }\r\n </mat-error>\r\n }\r\n\r\n @if (formControl.errors?.['max']) {\r\n <mat-error>\r\n @if (!hideInlineError) {\r\n {{ 'Gi\u00E1 tr\u1ECB kh\u00F4ng \u0111\u01B0\u1EE3c l\u1EDBn h\u01A1n ' }} <strong>{{ max }}</strong>\r\n }\r\n </mat-error>\r\n }\r\n\r\n @if (formControl.errors?.['customValidator']) {\r\n <mat-error>\r\n @if (!hideInlineError) {\r\n {{ formControl.errors?.['customValidator'] }}\r\n }\r\n </mat-error>\r\n }\r\n\r\n @if (formControl.errors?.['inlineError']) {\r\n <mat-error>\r\n @if (!hideInlineError) {\r\n {{ inlineError }}\r\n }\r\n </mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n </div>\r\n <!-- <sd-popover #error=\"sdPopover\" type=\"danger\" width=\"300px\">\r\n <span *ngIf=\"formControl.errors?.required\">\r\n {{ \"Vui l\u00F2ng nh\u1EADp th\u00F4ng tin\" | sdTranslate }}\r\n </span>\r\n <span *ngIf=\"formControl.errors?.customValidator\">\r\n {{formControl.errors?.customValidator}}\r\n </span>\r\n</sd-popover> -->\r\n}\r\n", styles: [".text-primary{color:var(--sd-primary)!important}.bg-primary{background:var(--sd-primary)!important}.border-primary{border-color:var(--sd-primary)!important}.text-primary-light{color:var(--sd-primary-light)!important}.bg-primary-light{background:var(--sd-primary-light)!important}.border-primary-light{border-color:var(--sd-primary-light)!important}.text-primary-dark{color:var(--sd-primary-dark)!important}.bg-primary-dark{background:var(--sd-primary-dark)!important}.border-primary-dark{border-color:var(--sd-primary-dark)!important}.text-info{color:var(--sd-info)!important}.bg-info{background:var(--sd-info)!important}.border-info{border-color:var(--sd-info)!important}.text-info-light{color:var(--sd-info-light)!important}.bg-info-light{background:var(--sd-info-light)!important}.border-info-light{border-color:var(--sd-info-light)!important}.text-info-dark{color:var(--sd-info-dark)!important}.bg-info-dark{background:var(--sd-info-dark)!important}.border-info-dark{border-color:var(--sd-info-dark)!important}.text-success{color:var(--sd-success)!important}.bg-success{background:var(--sd-success)!important}.border-success{border-color:var(--sd-success)!important}.text-success-light{color:var(--sd-success-light)!important}.bg-success-light{background:var(--sd-success-light)!important}.border-success-light{border-color:var(--sd-success-light)!important}.text-success-dark{color:var(--sd-success-dark)!important}.bg-success-dark{background:var(--sd-success-dark)!important}.border-success-dark{border-color:var(--sd-success-dark)!important}.text-warning{color:var(--sd-warning)!important}.bg-warning{background:var(--sd-warning)!important}.border-warning{border-color:var(--sd-warning)!important}.text-warning-light{color:var(--sd-warning-light)!important}.bg-warning-light{background:var(--sd-warning-light)!important}.border-warning-light{border-color:var(--sd-warning-light)!important}.text-warning-dark{color:var(--sd-warning-dark)!important}.bg-warning-dark{background:var(--sd-warning-dark)!important}.border-warning-dark{border-color:var(--sd-warning-dark)!important}.text-error{color:var(--sd-error)!important}.bg-error{background:var(--sd-error)!important}.border-error{border-color:var(--sd-error)!important}.text-error-light{color:var(--sd-error-light)!important}.bg-error-light{background:var(--sd-error-light)!important}.border-error-light{border-color:var(--sd-error-light)!important}.text-error-dark{color:var(--sd-error-dark)!important}.bg-error-dark{background:var(--sd-error-dark)!important}.border-error-dark{border-color:var(--sd-error-dark)!important}.text-secondary{color:var(--sd-secondary)!important}.bg-secondary{background:var(--sd-secondary)!important}.border-secondary{border-color:var(--sd-secondary)!important}.text-secondary-light{color:var(--sd-secondary-light)!important}.bg-secondary-light{background:var(--sd-secondary-light)!important}.border-secondary-light{border-color:var(--sd-secondary-light)!important}.text-secondary-dark{color:var(--sd-secondary-dark)!important}.bg-secondary-dark{background:var(--sd-secondary-dark)!important}.border-secondary-dark{border-color:var(--sd-secondary-dark)!important}.text-light{color:var(--sd-light)!important}.bg-light{background:var(--sd-light)!important}.border-light{border-color:var(--sd-light)!important}.text-dark{color:var(--sd-dark)!important}.bg-dark{background:var(--sd-dark)!important}.border-dark{border-color:var(--sd-dark)!important}.text-black500{color:var(--sd-black500)!important}.bg-black500{background:var(--sd-black500)!important}.border-black500{border-color:var(--sd-black500)!important}.text-black400{color:var(--sd-black400)!important}.bg-black400{background:var(--sd-black400)!important}.border-black400{border-color:var(--sd-black400)!important}.text-black300{color:var(--sd-black300)!important}.bg-black300{background:var(--sd-black300)!important}.border-black300{border-color:var(--sd-black300)!important}.text-black200{color:var(--sd-black200)!important}.bg-black200{background:var(--sd-black200)!important}.border-black200{border-color:var(--sd-black200)!important}.text-black100{color:var(--sd-black100)!important}.bg-black100{background:var(--sd-black100)!important}.border-black100{border-color:var(--sd-black100)!important}.text-white{color:#fff!important}.bg-white{background:#fff!important}.border-white{border-color:#fff!important}.text-black{color:#000!important}.bg-black{background:#000!important}.border-black{border-color:#000!important}:host ::ng-deep .mat-mdc-form-field.sd-form-tooltip{width:calc(100% - 30px)}:host ::ng-deep .mat-mdc-form-field.mat-form-field-appearance-outline.mat-form-field-disabled .mat-mdc-text-field-wrapper{background:var(--sd-black100)}:host ::ng-deep .mat-mdc-form-field input.mat-mdc-input-element:disabled{color:var(--sd-black400)!important}:host ::ng-deep .mat-mdc-form-field .mat-mdc-placeholder-required{color:var(--sd-error)}.sd-view:not(.c-focused):not(.c-disabled):hover{background-color:#ebecf0}.sd-tooltip{display:inline-block;text-align:center;margin:auto;width:30px}:host{padding-top:5px;display:block}.sd-md:hover .btn-copy{visibility:visible}.btn-copy{visibility:hidden;background:#e9e9e9!important;line-height:26px!important;margin-bottom:3px;font-size:12px}\n"] }]
418
437
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
419
438
  type: Inject,
420
439
  args: [SD_CORE_CONFIGURATION]
@@ -425,7 +444,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
425
444
  args: [SD_FORM_CONFIGURATION]
426
445
  }, {
427
446
  type: Optional
428
- }] }], propDecorators: { _autoId: [{
447
+ }] }], propDecorators: { sdLabelTemplate: [{
448
+ type: ContentChild,
449
+ args: ['sdLabel']
450
+ }], sdValueTemplate: [{
451
+ type: ContentChild,
452
+ args: ['sdValue']
453
+ }], _autoId: [{
429
454
  type: Input,
430
455
  args: ['autoId']
431
456
  }], name: [{
@@ -475,6 +500,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
475
500
  args: ['inlineError']
476
501
  }], disabled: [{
477
502
  type: Input
503
+ }], _viewed: [{
504
+ type: Input,
505
+ args: ['viewed']
506
+ }], hyperlink: [{
507
+ type: Input
478
508
  }], appearance: [{
479
509
  type: Input
480
510
  }], sdChange: [{
@@ -496,9 +526,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
496
526
  }], sdSuffixDef: [{
497
527
  type: ContentChild,
498
528
  args: [SdSuffixDefDirective]
499
- }], sdLabelDef: [{
500
- type: ContentChild,
501
- args: [SdLabelDefDirective]
502
529
  }] } });
503
530
 
504
531
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"sd-angular-core-forms-input-number.mjs","sources":["../../../projects/sd-angular/forms/input-number/src/input-number.component.ts","../../../projects/sd-angular/forms/input-number/src/input-number.component.html","../../../projects/sd-angular/forms/input-number/sd-angular-core-forms-input-number.ts"],"sourcesContent":["/* eslint-disable @angular-eslint/component-class-suffix */\r\n/* eslint-disable @angular-eslint/no-input-rename */\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChild,\r\n ElementRef,\r\n EventEmitter,\r\n Inject,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n Output,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport {\r\n AsyncValidatorFn,\r\n FormControl,\r\n FormGroup,\r\n FormGroupDirective,\r\n FormsModule,\r\n NgForm,\r\n ReactiveFormsModule,\r\n ValidatorFn,\r\n Validators,\r\n} from '@angular/forms';\r\nimport * as uuid from 'uuid';\r\n\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { ErrorStateMatcher } from '@angular/material/core';\r\nimport { MatFormFieldAppearance, MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { SdLabelDefDirective, SdSuffixDefDirective, SdViewDefDirective } from '@sd-angular/core/forms/directives';\r\nimport {\r\n HandleSdCustomValidator,\r\n ISdFormConfiguration,\r\n SD_FORM_CONFIGURATION,\r\n SdCustomValidator,\r\n SdFormControl,\r\n} from '@sd-angular/core/forms/models';\r\nimport { NumberUtilities } from '@sd-angular/core/utilities/extensions';\r\nimport { SdSize } from '@sd-angular/core/utilities/models';\r\nimport { Subscription } from 'rxjs';\r\nimport { SdFormatNumberPipe } from '@sd-angular/core/pipes';\r\nimport { ISdCoreConfiguration, SD_CORE_CONFIGURATION } from '@sd-angular/core/configurations';\r\nclass SdInputNumberErrotStateMatcher implements ErrorStateMatcher {\r\n constructor(private formControl: FormControl) {}\r\n isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {\r\n const isSubmitted = form && form.submitted;\r\n return !!(this.formControl?.invalid && (this.formControl?.dirty || this.formControl?.touched || isSubmitted));\r\n }\r\n}\r\n@Component({\r\n selector: 'sd-input-number',\r\n templateUrl: './input-number.component.html',\r\n styleUrls: ['./input-number.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatIconModule,\r\n MatTooltipModule,\r\n MatButtonModule,\r\n ],\r\n})\r\nexport class SdInputNumber implements OnDestroy, OnInit, AfterViewInit {\r\n id = `I${uuid.v4()}`;\r\n autoId?: string;\r\n @Input('autoId') set _autoId(val: string | undefined | null) {\r\n if (!val) {\r\n return;\r\n }\r\n this.autoId = `forms-input-number-${val}`;\r\n }\r\n #name = uuid.v4();\r\n @Input() set name(val: string | undefined) {\r\n if (val) {\r\n this.#name = val;\r\n }\r\n }\r\n @Input() size: SdSize = 'md';\r\n #form?: FormGroup;\r\n @Input() set form(val: NgForm | FormGroup | undefined | null) {\r\n if (val) {\r\n if (val instanceof NgForm) {\r\n this.#form = val.form;\r\n } else {\r\n this.#form = val;\r\n }\r\n }\r\n }\r\n label?: string;\r\n @Input('label') set _label(val: string | undefined) {\r\n this.label = val;\r\n }\r\n\r\n helperText?: string;\r\n @Input('helperText') set _helperText(val: string | undefined) {\r\n this.helperText = val;\r\n }\r\n\r\n @Input() placeholder?: string;\r\n hideInlineError = false;\r\n @Input('hideInlineError') set _hideInlineError(val: boolean | '') {\r\n this.hideInlineError = val === '' || val;\r\n }\r\n #blurOnEnter = false;\r\n @Input('blurOnEnter') set _blurOnEnter(val: boolean | '') {\r\n this.#blurOnEnter = val === '' || val;\r\n }\r\n #model: any;\r\n @Input() set model(value: any) {\r\n if (this.#model !== value) {\r\n this.#model = value;\r\n this.formControl.setValue(this.#model, {\r\n emitEvent: false,\r\n });\r\n if (value || value === 0) {\r\n const val = value.toString().replace(/\\./g, this.#decimalSeparator);\r\n this.inputControl.setValue(this.#getValueWithFormat(val), {\r\n emitEvent: false,\r\n });\r\n } else {\r\n this.inputControl.setValue('', {\r\n emitEvent: false,\r\n });\r\n }\r\n }\r\n }\r\n @Output() modelChange = new EventEmitter();\r\n\r\n // Validator\r\n required = false;\r\n @Input('required') set _required(val: boolean | '' | undefined | null) {\r\n this.required = val === '' || !!val;\r\n this.#updateValidator();\r\n }\r\n @Input() type?: 'negative' | 'positive'; //negative: chỉ nhập số âm, positive: chỉ số dương\r\n @Input() precision = 3; //số chữ số thập phân\r\n\r\n readonly = false;\r\n @Input('readonly') set _readonly(val: boolean | '') {\r\n this.readonly = val === '' || val;\r\n }\r\n\r\n min?: number;\r\n @Input('min') set _min(val: number | undefined | null) {\r\n this.min = val ?? undefined;\r\n this.#updateValidator();\r\n }\r\n\r\n max?: number;\r\n @Input('max') set _max(val: number | undefined | null) {\r\n this.max = val ?? undefined;\r\n this.#updateValidator();\r\n }\r\n\r\n #validator?: SdCustomValidator;\r\n @Input() set validator(validator: SdCustomValidator | undefined) {\r\n this.#validator = validator;\r\n this.#updateValidator();\r\n }\r\n\r\n inlineError?: string;\r\n @Input('inlineError') set _inlineError(val: string) {\r\n this.inlineError = val;\r\n this.#updateValidator();\r\n }\r\n\r\n @Input() set disabled(val: boolean | '' | undefined | null) {\r\n val = val === '' || val;\r\n if (val) {\r\n this.inputControl.disable();\r\n this.formControl.disable();\r\n } else {\r\n this.inputControl.enable();\r\n this.formControl.enable();\r\n }\r\n }\r\n @Input() appearance: MatFormFieldAppearance = 'outline';\r\n\r\n @Output() sdChange = new EventEmitter<any>();\r\n @Output() sdFocus = new EventEmitter<any>();\r\n @Output() sdBlur = new EventEmitter<any>();\r\n @Output() sdFocusForceBlur = new EventEmitter<any>();\r\n @Output() keyupEnter = new EventEmitter();\r\n\r\n @ViewChild('control') control?: ElementRef;\r\n formControl = new SdFormControl();\r\n inputControl = new SdFormControl();\r\n #subscription = new Subscription();\r\n matcher = new SdInputNumberErrotStateMatcher(this.formControl);\r\n #preCompositionValue?: string;\r\n\r\n @ContentChild(SdViewDefDirective) sdViewDef?: SdViewDefDirective;\r\n @ContentChild(SdSuffixDefDirective) sdSuffixDef?: SdSuffixDefDirective;\r\n @ContentChild(SdLabelDefDirective) sdLabelDef?: SdLabelDefDirective;\r\n isFocused = false;\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n @Inject(SD_CORE_CONFIGURATION) @Optional() private readonly coreConfiguration: ISdCoreConfiguration | undefined,\r\n private readonly formatNumberPipe: SdFormatNumberPipe,\r\n @Inject(SD_FORM_CONFIGURATION)\r\n @Optional()\r\n private formConfig: ISdFormConfiguration\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.appearance = this.appearance || this.formConfig?.appearance;\r\n this.#subscription.add(\r\n this.inputControl.touchChanges.subscribe(() => {\r\n this.formControl.markAsTouched();\r\n this.ref.markForCheck();\r\n })\r\n );\r\n this.#subscription.add(\r\n this.formControl.sdChanges.subscribe(() => {\r\n this.ref.markForCheck();\r\n })\r\n );\r\n this.#subscription.add(\r\n this.inputControl.sdChanges.subscribe(() => {\r\n this.ref.markForCheck();\r\n })\r\n );\r\n }\r\n\r\n get #decimalSeparator() {\r\n if (this.coreConfiguration?.format?.number === '1.234.567,89') {\r\n return ',';\r\n }\r\n return '.';\r\n }\r\n\r\n get #thousandsSeparator() {\r\n if (this.coreConfiguration?.format?.number === '1.234.567,89') {\r\n return '.';\r\n }\r\n return ',';\r\n }\r\n\r\n get #regex(): string {\r\n const decimal = this.#decimalSeparator;\r\n const thousand = this.#thousandsSeparator;\r\n\r\n const escDecimal = decimal === '.' ? '\\\\.' : decimal;\r\n const escThousand = thousand === '.' ? '\\\\.' : thousand;\r\n\r\n // Phần nguyên: có thể có hoặc không có phân cách hàng nghìn\r\n const integerPart = `(([0-9]+(${escThousand}[0-9])?)+)`; //`([0-9]{1,3}(${escThousand}[0-9]{3})*|[0-9]+)`;\r\n\r\n // Phần thập phân: có hoặc không, tùy theo precision\r\n const decimalPart = this.precision > 0 ? `(${escDecimal}[0-9]{0,${this.precision}})?` : '';\r\n let result = `${integerPart}${decimalPart}$`;\r\n if (this.type === 'negative') {\r\n result = `[-]${integerPart}${decimalPart}$`;\r\n } else if (!this.type) {\r\n result = `[-]?${integerPart}${decimalPart}$`;\r\n }\r\n return result;\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.#subscription.add(\r\n this.inputControl.valueChanges.subscribe(() => {\r\n const val = this.inputControl.value;\r\n if (!val) {\r\n this.#onChange(undefined);\r\n return;\r\n }\r\n const value = this.#toNumber(val);\r\n if (!isNaN(value)) {\r\n this.inputControl.setValue(this.#getValueWithFormat(val), {\r\n emitEvent: false,\r\n });\r\n this.#onChange(value);\r\n }\r\n })\r\n );\r\n this.#form?.addControl(this.#name, this.formControl);\r\n this.ref.detectChanges();\r\n }\r\n\r\n #getValueWithFormat = (value: string) => {\r\n const arrayNext = value.split(this.#decimalSeparator);\r\n if (arrayNext.length >= 2) {\r\n return `${this.#formatNumber(arrayNext[0])}${this.#decimalSeparator}${arrayNext[1]}`;\r\n }\r\n return this.#formatNumber(value);\r\n };\r\n\r\n #formatNumber = (text: any) => {\r\n if (this.coreConfiguration?.format?.number === '1.234.567,89') {\r\n return NumberUtilities.toVN((text?.toString() || '').replace(/\\./g, ''));\r\n } else {\r\n return NumberUtilities.toISO((text?.toString() || '').replace(/\\,/g, ''));\r\n }\r\n };\r\n\r\n #toNumber = (text: any): number => {\r\n const raw = text?.toString() || '';\r\n const value = raw\r\n .split(this.#thousandsSeparator)\r\n .join('') // Xóa dấu phân cách phần nghìn\r\n .replace(this.#decimalSeparator, '.'); // Chuyển dấu phân cách thập phân về dấu .\r\n return +value;\r\n };\r\n\r\n ngOnDestroy() {\r\n this.#form?.removeControl(this.#name);\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n reValidate = () => {\r\n this.formControl.updateValueAndValidity();\r\n };\r\n\r\n #updateValidator = () => {\r\n this.formControl.clearValidators();\r\n this.formControl.clearAsyncValidators();\r\n const validators: ValidatorFn[] = [];\r\n const asyncValidators: AsyncValidatorFn[] = [];\r\n if (this.required) {\r\n validators.push(Validators.required);\r\n }\r\n if (this.min || this.min === 0) {\r\n validators.push(Validators.min(this.min));\r\n }\r\n if (this.max || this.max === 0) {\r\n validators.push(Validators.max(this.max));\r\n }\r\n if (this.#validator) {\r\n asyncValidators.push(HandleSdCustomValidator(this.#validator));\r\n }\r\n if (this.inlineError) {\r\n validators.push(this.customInlineErrorValidator());\r\n }\r\n this.formControl.setValidators(validators);\r\n this.formControl.setAsyncValidators(asyncValidators);\r\n this.formControl.updateValueAndValidity();\r\n };\r\n\r\n // Hàm tạo Validators tùy chỉnh cho inlineError\r\n customInlineErrorValidator(): ValidatorFn {\r\n return (): Record<string, any> | null => {\r\n return { inlineError: true };\r\n };\r\n }\r\n\r\n #onChange = (value: any) => {\r\n this.#model = value ?? null;\r\n this.modelChange.emit(this.#model);\r\n this.sdChange.emit(this.#model);\r\n this.formControl.setValue(this.#model);\r\n };\r\n\r\n onKeyupEnter = () => {\r\n const val: string = (this.inputControl.value ?? '').toString();\r\n if (val.length > val.trim().length) {\r\n this.inputControl.setValue(val.trim());\r\n }\r\n this.keyupEnter.emit(this.inputControl.value);\r\n if (this.#blurOnEnter) {\r\n this.blur();\r\n }\r\n };\r\n\r\n onKeydown = (event: KeyboardEvent) => {\r\n if (event.ctrlKey && event.key == 'v') {\r\n this.#checkValue(event, '');\r\n return;\r\n }\r\n const key = event.keyCode || event.charCode;\r\n if (key == 8 || key == 46 || key == 37 || key == 39 || key == 35 || key == 36 || key == 9) {\r\n return;\r\n }\r\n if (event.ctrlKey && (event.key == 'c' || event.key == 'x' || event.key == 'a')) {\r\n return;\r\n }\r\n if (event.shiftKey && key == 9) {\r\n return;\r\n }\r\n this.#checkValue(event, event.key);\r\n };\r\n\r\n onPaste(event: ClipboardEvent) {\r\n const nextKey = event?.clipboardData?.getData('text');\r\n this.#checkValue(event, nextKey);\r\n }\r\n\r\n onCompositionEnd(event: CompositionEvent) {\r\n const compositionValue = event.data;\r\n const regExp = new RegExp(`^${this.#regex}`, 'g');\r\n if (compositionValue && !String(compositionValue).match(regExp)) {\r\n this.inputControl.setValue(this.#preCompositionValue || '');\r\n }\r\n this.#preCompositionValue = undefined;\r\n }\r\n\r\n onCompositionStart(event: CompositionEvent) {\r\n this.#preCompositionValue = this.inputControl.value;\r\n }\r\n\r\n #checkValue = (event: any, nextKey?: string) => {\r\n const current: string = event?.target?.value;\r\n // if(this.maxNumber === +current.toString().replace(/\\./g, '').replace(/,/g, '.')){\r\n // event.preventDefault();\r\n // return;\r\n // }\r\n const curval_arr = current.split('');\r\n curval_arr.splice(event.target.selectionStart, event.target.selectionEnd - event.target.selectionStart, nextKey || '');\r\n const newval = curval_arr.join('');\r\n if (this.type !== 'positive' && newval === '-') {\r\n return;\r\n }\r\n const regExp = new RegExp(`^${this.#regex}`, 'g');\r\n if (newval && !String(newval).match(regExp)) {\r\n event.preventDefault();\r\n return;\r\n }\r\n // const value = (newval.toString().replace(/\\./g, '').replace(/,/g, '.'));\r\n // if ((this.maxNumber || this.maxNumber === 0) && +value > this.maxNumber) {\r\n // setTimeout(() => {\r\n // this.inputControl.setValue(this.#getValueWithFormat(this.maxNumber.toString().replace(/\\./g, ',')));\r\n // }, 10);\r\n // event.preventDefault();\r\n // }\r\n };\r\n\r\n onFocus = () => {\r\n this.isFocused = true;\r\n this.sdFocus.emit();\r\n if (this.sdFocusForceBlur.observers?.length > 0) {\r\n this.blur();\r\n this.sdFocusForceBlur.emit();\r\n }\r\n };\r\n\r\n onBlur = () => {\r\n this.isFocused = false;\r\n const val: string = (this.inputControl.value ?? '').toString();\r\n const arrayValue = val.split(this.#decimalSeparator);\r\n if (arrayValue.length >= 2 && arrayValue[1] == '') {\r\n this.inputControl.setValue(this.#formatNumber(arrayValue[0]));\r\n return;\r\n }\r\n if (val.length > val.trim().length) {\r\n this.inputControl.setValue(val.trim());\r\n }\r\n this.sdBlur.emit(this.formControl.value);\r\n };\r\n\r\n onClick = () => {\r\n if (this.sdViewDef?.templateRef) {\r\n if (!this.formControl.disabled && !this.isFocused) {\r\n this.focus();\r\n }\r\n }\r\n };\r\n\r\n blur = () => {\r\n this.isFocused = false;\r\n this.control?.nativeElement?.blur();\r\n };\r\n\r\n focus = () => {\r\n this.isFocused = true;\r\n setTimeout(() => {\r\n this.control?.nativeElement?.focus();\r\n }, 100);\r\n };\r\n}\r\n","<ng-container *ngIf=\"!appearance && sdLabelDef?.templateRef\">\r\n <ng-container *ngTemplateOutlet=\"sdLabelDef?.templateRef ?? null\"> </ng-container>\r\n</ng-container>\r\n<span *ngIf=\"!appearance && label && !sdLabelDef?.templateRef\" class=\"d-block mb-0 T14M\"\r\n >{{ label }} <span class=\"text-error mb-2\" *ngIf=\"required\">*</span></span\r\n>\r\n<div\r\n class=\"d-flex align-items-center\"\r\n [class.sd-view]=\"!!sdViewDef?.templateRef\"\r\n [class.c-focused]=\"isFocused\"\r\n [class.c-disabled]=\"formControl.disabled\"\r\n (click)=\"onClick()\"\r\n aria-hidden=\"true\">\r\n @if (sdViewDef?.templateRef && !isFocused) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n sdViewDef!.templateRef;\r\n context: {\r\n value: formControl.value\r\n }\r\n \">\r\n </ng-container>\r\n } @else {\r\n <mat-form-field\r\n [class.sd-md]=\"size === 'md'\"\r\n [class.sd-sm]=\"size === 'sm'\"\r\n [class.hide-inline-error]=\"hideInlineError\"\r\n [appearance]=\"appearance\">\r\n @if (appearance && label) {\r\n <mat-label style=\"display: inline-block\">\r\n <div style=\"display: flex; align-items: center; gap: 4px\">\r\n <span>{{ label }}</span>\r\n @if (helperText) {\r\n <mat-icon [matTooltip]=\"helperText\" matTooltipPosition=\"below\">info_outline</mat-icon>\r\n }\r\n </div>\r\n </mat-label>\r\n }\r\n <input\r\n aria-hidden=\"true\"\r\n [id]=\"id\"\r\n [formControl]=\"inputControl\"\r\n #control\r\n matInput\r\n [placeholder]=\"placeholder || label || ''\"\r\n [errorStateMatcher]=\"matcher\"\r\n (keyup.enter)=\"onKeyupEnter()\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\"\r\n (keydown)=\"onKeydown($event)\"\r\n (compositionstart)=\"onCompositionStart($event)\"\r\n (compositionend)=\"onCompositionEnd($event)\"\r\n [required]=\"required\"\r\n [readonly]=\"readonly\"\r\n [autocomplete]=\"id\"\r\n (paste)=\"onPaste($event)\"\r\n autocorrect=\"off\"\r\n [attr.data-autoId]=\"autoId\" />\r\n <ng-container *ngIf=\"sdSuffixDef?.templateRef\" matSuffix>\r\n <ng-container *ngTemplateOutlet=\"sdSuffixDef?.templateRef ?? null\"> </ng-container>\r\n </ng-container>\r\n <mat-error *ngIf=\"formControl?.errors?.['required']\">\r\n <ng-container *ngIf=\"!hideInlineError\">{{ 'Vui lòng nhập thông tin' }}</ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl.errors?.['min']\">\r\n <ng-container *ngIf=\"!hideInlineError\"\r\n >{{ 'Không nhập bé hơn ' }} <strong>{{ min }}</strong></ng-container\r\n >\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl.errors?.['max']\">\r\n <ng-container *ngIf=\"!hideInlineError\"\r\n >{{ 'Không nhập lớn hơn ' }} <strong>{{ max }}</strong></ng-container\r\n >\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl.errors?.['customValidator']\">\r\n <ng-container *ngIf=\"!hideInlineError\">{{ formControl.errors?.['customValidator'] }}</ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl.errors?.['inlineError']\">\r\n <ng-container *ngIf=\"!hideInlineError\">{{ inlineError }}</ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n }\r\n</div>\r\n<!-- <sd-popover #error=\"sdPopover\" type=\"danger\" width=\"300px\">\r\n <span *ngIf=\"formControl.errors?.required\">\r\n {{ \"Vui lòng nhập thông tin\" | sdTranslate }}\r\n </span>\r\n <span *ngIf=\"formControl.errors?.customValidator\">\r\n {{formControl.errors?.customValidator}}\r\n </span>\r\n</sd-popover> -->\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sd-angular-core-forms-input-number.mjs","sources":["../../../projects/sd-angular/forms/input-number/src/input-number.component.ts","../../../projects/sd-angular/forms/input-number/src/input-number.component.html","../../../projects/sd-angular/forms/input-number/sd-angular-core-forms-input-number.ts"],"sourcesContent":["/* eslint-disable @angular-eslint/component-class-suffix */\r\n/* eslint-disable @angular-eslint/no-input-rename */\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChild,\r\n ElementRef,\r\n EventEmitter,\r\n Inject,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n Output,\r\n TemplateRef,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport {\r\n AsyncValidatorFn,\r\n FormControl,\r\n FormGroup,\r\n FormGroupDirective,\r\n FormsModule,\r\n NgForm,\r\n ReactiveFormsModule,\r\n ValidatorFn,\r\n Validators,\r\n} from '@angular/forms';\r\nimport * as uuid from 'uuid';\r\n\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { ErrorStateMatcher } from '@angular/material/core';\r\nimport { MatFormFieldAppearance, MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { SdView } from '@sd-angular/core/components/view';\r\nimport { ISdCoreConfiguration, SD_CORE_CONFIGURATION } from '@sd-angular/core/configurations';\r\nimport { SdSuffixDefDirective, SdViewDefDirective } from '@sd-angular/core/forms/directives';\r\nimport { SdLabel } from '@sd-angular/core/forms/label';\r\nimport {\r\n HandleSdCustomValidator,\r\n ISdFormConfiguration,\r\n SD_FORM_CONFIGURATION,\r\n SdCustomValidator,\r\n SdFormControl,\r\n} from '@sd-angular/core/forms/models';\r\nimport { SdFormatNumberPipe } from '@sd-angular/core/pipes';\r\nimport { NumberUtilities } from '@sd-angular/core/utilities/extensions';\r\nimport { SdSize } from '@sd-angular/core/utilities/models';\r\nimport { Subscription } from 'rxjs';\r\nclass SdInputNumberErrotStateMatcher implements ErrorStateMatcher {\r\n constructor(private formControl: FormControl) {}\r\n isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {\r\n const isSubmitted = form && form.submitted;\r\n return !!(this.formControl?.invalid && (this.formControl?.dirty || this.formControl?.touched || isSubmitted));\r\n }\r\n}\r\n@Component({\r\n selector: 'sd-input-number',\r\n templateUrl: './input-number.component.html',\r\n styleUrls: ['./input-number.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatIconModule,\r\n MatTooltipModule,\r\n MatButtonModule,\r\n SdLabel,\r\n SdFormatNumberPipe,\r\n SdView\r\n],\r\n})\r\nexport class SdInputNumber implements OnDestroy, OnInit, AfterViewInit {\r\n @ContentChild('sdLabel') sdLabelTemplate?: TemplateRef<any>;\r\n @ContentChild('sdValue') sdValueTemplate?: TemplateRef<any>;\r\n id = `I${uuid.v4()}`;\r\n autoId?: string;\r\n @Input('autoId') set _autoId(val: string | undefined | null) {\r\n if (!val) {\r\n return;\r\n }\r\n this.autoId = `forms-input-number-${val}`;\r\n }\r\n #name = uuid.v4();\r\n @Input() set name(val: string | undefined) {\r\n if (val) {\r\n this.#name = val;\r\n }\r\n }\r\n @Input() size: SdSize = 'md';\r\n #form?: FormGroup;\r\n @Input() set form(val: NgForm | FormGroup | undefined | null) {\r\n if (val) {\r\n if (val instanceof NgForm) {\r\n this.#form = val.form;\r\n } else {\r\n this.#form = val;\r\n }\r\n }\r\n }\r\n label?: string;\r\n @Input('label') set _label(val: string | undefined) {\r\n this.label = val;\r\n }\r\n\r\n helperText?: string;\r\n @Input('helperText') set _helperText(val: string | undefined) {\r\n this.helperText = val;\r\n }\r\n\r\n @Input() placeholder?: string;\r\n hideInlineError = false;\r\n @Input('hideInlineError') set _hideInlineError(val: boolean | '') {\r\n this.hideInlineError = val === '' || val;\r\n }\r\n #blurOnEnter = false;\r\n @Input('blurOnEnter') set _blurOnEnter(val: boolean | '') {\r\n this.#blurOnEnter = val === '' || val;\r\n }\r\n #model: any;\r\n @Input() set model(value: any) {\r\n if (this.#model !== value) {\r\n this.#model = value;\r\n this.formControl.setValue(this.#model, {\r\n emitEvent: false,\r\n });\r\n if (value || value === 0) {\r\n const val = value.toString().replace(/\\./g, this.#decimalSeparator);\r\n this.inputControl.setValue(this.#getValueWithFormat(val), {\r\n emitEvent: false,\r\n });\r\n } else {\r\n this.inputControl.setValue('', {\r\n emitEvent: false,\r\n });\r\n }\r\n }\r\n }\r\n @Output() modelChange = new EventEmitter();\r\n\r\n // Validator\r\n required = false;\r\n @Input('required') set _required(val: boolean | '' | undefined | null) {\r\n this.required = val === '' || !!val;\r\n this.#updateValidator();\r\n }\r\n @Input() type?: 'negative' | 'positive'; //negative: chỉ nhập số âm, positive: chỉ số dương\r\n @Input() precision = 3; //số chữ số thập phân\r\n\r\n readonly = false;\r\n @Input('readonly') set _readonly(val: boolean | '') {\r\n this.readonly = val === '' || val;\r\n }\r\n\r\n min?: number;\r\n @Input('min') set _min(val: number | undefined | null) {\r\n this.min = val ?? undefined;\r\n this.#updateValidator();\r\n }\r\n\r\n max?: number;\r\n @Input('max') set _max(val: number | undefined | null) {\r\n this.max = val ?? undefined;\r\n this.#updateValidator();\r\n }\r\n\r\n #validator?: SdCustomValidator;\r\n @Input() set validator(validator: SdCustomValidator | undefined) {\r\n this.#validator = validator;\r\n this.#updateValidator();\r\n }\r\n\r\n inlineError?: string;\r\n @Input('inlineError') set _inlineError(val: string) {\r\n this.inlineError = val;\r\n this.#updateValidator();\r\n }\r\n\r\n @Input() set disabled(val: boolean | '' | undefined | null) {\r\n val = val === '' || val;\r\n if (val) {\r\n this.inputControl.disable();\r\n this.formControl.disable();\r\n } else {\r\n this.inputControl.enable();\r\n this.formControl.enable();\r\n }\r\n }\r\n viewed = false;\r\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\r\n this.viewed = val === '' || !!val;\r\n }\r\n @Input() hyperlink?: string | null;\r\n\r\n @Input() appearance: MatFormFieldAppearance = 'outline';\r\n\r\n @Output() sdChange = new EventEmitter<any>();\r\n @Output() sdFocus = new EventEmitter<any>();\r\n @Output() sdBlur = new EventEmitter<any>();\r\n @Output() sdFocusForceBlur = new EventEmitter<any>();\r\n @Output() keyupEnter = new EventEmitter();\r\n\r\n @ViewChild('control') control?: ElementRef;\r\n formControl = new SdFormControl();\r\n inputControl = new SdFormControl();\r\n #subscription = new Subscription();\r\n matcher = new SdInputNumberErrotStateMatcher(this.formControl);\r\n #preCompositionValue?: string;\r\n\r\n @ContentChild(SdViewDefDirective) sdViewDef?: SdViewDefDirective;\r\n @ContentChild(SdSuffixDefDirective) sdSuffixDef?: SdSuffixDefDirective;\r\n isFocused = false;\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n @Inject(SD_CORE_CONFIGURATION) @Optional() private readonly coreConfiguration: ISdCoreConfiguration | undefined,\r\n private readonly formatNumberPipe: SdFormatNumberPipe,\r\n @Inject(SD_FORM_CONFIGURATION)\r\n @Optional()\r\n private formConfig: ISdFormConfiguration\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.appearance = this.appearance || this.formConfig?.appearance;\r\n this.#subscription.add(\r\n this.inputControl.touchChanges.subscribe(() => {\r\n this.formControl.markAsTouched();\r\n this.ref.markForCheck();\r\n })\r\n );\r\n this.#subscription.add(\r\n this.formControl.sdChanges.subscribe(() => {\r\n this.ref.markForCheck();\r\n })\r\n );\r\n this.#subscription.add(\r\n this.inputControl.sdChanges.subscribe(() => {\r\n this.ref.markForCheck();\r\n })\r\n );\r\n }\r\n\r\n get #decimalSeparator() {\r\n if (this.coreConfiguration?.format?.number === '1.234.567,89') {\r\n return ',';\r\n }\r\n return '.';\r\n }\r\n\r\n get #thousandsSeparator() {\r\n if (this.coreConfiguration?.format?.number === '1.234.567,89') {\r\n return '.';\r\n }\r\n return ',';\r\n }\r\n\r\n get #regex(): string {\r\n const decimal = this.#decimalSeparator;\r\n const thousand = this.#thousandsSeparator;\r\n\r\n const escDecimal = decimal === '.' ? '\\\\.' : decimal;\r\n const escThousand = thousand === '.' ? '\\\\.' : thousand;\r\n\r\n // Phần nguyên: có thể có hoặc không có phân cách hàng nghìn\r\n const integerPart = `(([0-9]+(${escThousand}[0-9])?)+)`; //`([0-9]{1,3}(${escThousand}[0-9]{3})*|[0-9]+)`;\r\n\r\n // Phần thập phân: có hoặc không, tùy theo precision\r\n const decimalPart = this.precision > 0 ? `(${escDecimal}[0-9]{0,${this.precision}})?` : '';\r\n let result = `${integerPart}${decimalPart}$`;\r\n if (this.type === 'negative') {\r\n result = `[-]${integerPart}${decimalPart}$`;\r\n } else if (!this.type) {\r\n result = `[-]?${integerPart}${decimalPart}$`;\r\n }\r\n return result;\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.#subscription.add(\r\n this.inputControl.valueChanges.subscribe(() => {\r\n const val = this.inputControl.value;\r\n if (!val) {\r\n this.#onChange(undefined);\r\n return;\r\n }\r\n const value = this.#toNumber(val);\r\n if (!isNaN(value)) {\r\n this.inputControl.setValue(this.#getValueWithFormat(val), {\r\n emitEvent: false,\r\n });\r\n this.#onChange(value);\r\n }\r\n })\r\n );\r\n this.#form?.addControl(this.#name, this.formControl);\r\n this.ref.detectChanges();\r\n }\r\n\r\n #getValueWithFormat = (value: string) => {\r\n const arrayNext = value.split(this.#decimalSeparator);\r\n if (arrayNext.length >= 2) {\r\n return `${this.#formatNumber(arrayNext[0])}${this.#decimalSeparator}${arrayNext[1]}`;\r\n }\r\n return this.#formatNumber(value);\r\n };\r\n\r\n #formatNumber = (text: any) => {\r\n if (this.coreConfiguration?.format?.number === '1.234.567,89') {\r\n return NumberUtilities.toVN((text?.toString() || '').replace(/\\./g, ''));\r\n } else {\r\n return NumberUtilities.toISO((text?.toString() || '').replace(/\\,/g, ''));\r\n }\r\n };\r\n\r\n #toNumber = (text: any): number => {\r\n const raw = text?.toString() || '';\r\n const value = raw\r\n .split(this.#thousandsSeparator)\r\n .join('') // Xóa dấu phân cách phần nghìn\r\n .replace(this.#decimalSeparator, '.'); // Chuyển dấu phân cách thập phân về dấu .\r\n return +value;\r\n };\r\n\r\n ngOnDestroy() {\r\n this.#form?.removeControl(this.#name);\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n reValidate = () => {\r\n this.formControl.updateValueAndValidity();\r\n };\r\n\r\n #updateValidator = () => {\r\n this.formControl.clearValidators();\r\n this.formControl.clearAsyncValidators();\r\n const validators: ValidatorFn[] = [];\r\n const asyncValidators: AsyncValidatorFn[] = [];\r\n if (this.required) {\r\n validators.push(Validators.required);\r\n }\r\n if (this.min || this.min === 0) {\r\n validators.push(Validators.min(this.min));\r\n }\r\n if (this.max || this.max === 0) {\r\n validators.push(Validators.max(this.max));\r\n }\r\n if (this.#validator) {\r\n asyncValidators.push(HandleSdCustomValidator(this.#validator));\r\n }\r\n if (this.inlineError) {\r\n validators.push(this.customInlineErrorValidator());\r\n }\r\n this.formControl.setValidators(validators);\r\n this.formControl.setAsyncValidators(asyncValidators);\r\n this.formControl.updateValueAndValidity();\r\n };\r\n\r\n // Hàm tạo Validators tùy chỉnh cho inlineError\r\n customInlineErrorValidator(): ValidatorFn {\r\n return (): Record<string, any> | null => {\r\n return { inlineError: true };\r\n };\r\n }\r\n\r\n #onChange = (value: any) => {\r\n this.#model = value ?? null;\r\n this.modelChange.emit(this.#model);\r\n this.sdChange.emit(this.#model);\r\n this.formControl.setValue(this.#model);\r\n };\r\n\r\n onKeyupEnter = () => {\r\n const val: string = (this.inputControl.value ?? '').toString();\r\n if (val.length > val.trim().length) {\r\n this.inputControl.setValue(val.trim());\r\n }\r\n this.keyupEnter.emit(this.inputControl.value);\r\n if (this.#blurOnEnter) {\r\n this.blur();\r\n }\r\n };\r\n\r\n onKeydown = (event: KeyboardEvent) => {\r\n if (event.ctrlKey && event.key == 'v') {\r\n this.#checkValue(event, '');\r\n return;\r\n }\r\n const key = event.keyCode || event.charCode;\r\n if (key == 8 || key == 46 || key == 37 || key == 39 || key == 35 || key == 36 || key == 9) {\r\n return;\r\n }\r\n if (event.ctrlKey && (event.key == 'c' || event.key == 'x' || event.key == 'a')) {\r\n return;\r\n }\r\n if (event.shiftKey && key == 9) {\r\n return;\r\n }\r\n this.#checkValue(event, event.key);\r\n };\r\n\r\n onPaste(event: ClipboardEvent) {\r\n const nextKey = event?.clipboardData?.getData('text');\r\n this.#checkValue(event, nextKey);\r\n }\r\n\r\n onCompositionEnd(event: CompositionEvent) {\r\n const compositionValue = event.data;\r\n const regExp = new RegExp(`^${this.#regex}`, 'g');\r\n if (compositionValue && !String(compositionValue).match(regExp)) {\r\n this.inputControl.setValue(this.#preCompositionValue || '');\r\n }\r\n this.#preCompositionValue = undefined;\r\n }\r\n\r\n onCompositionStart(event: CompositionEvent) {\r\n this.#preCompositionValue = this.inputControl.value;\r\n }\r\n\r\n #checkValue = (event: any, nextKey?: string) => {\r\n const current: string = event?.target?.value;\r\n // if(this.maxNumber === +current.toString().replace(/\\./g, '').replace(/,/g, '.')){\r\n // event.preventDefault();\r\n // return;\r\n // }\r\n const curval_arr = current.split('');\r\n curval_arr.splice(event.target.selectionStart, event.target.selectionEnd - event.target.selectionStart, nextKey || '');\r\n const newval = curval_arr.join('');\r\n if (this.type !== 'positive' && newval === '-') {\r\n return;\r\n }\r\n const regExp = new RegExp(`^${this.#regex}`, 'g');\r\n if (newval && !String(newval).match(regExp)) {\r\n event.preventDefault();\r\n return;\r\n }\r\n // const value = (newval.toString().replace(/\\./g, '').replace(/,/g, '.'));\r\n // if ((this.maxNumber || this.maxNumber === 0) && +value > this.maxNumber) {\r\n // setTimeout(() => {\r\n // this.inputControl.setValue(this.#getValueWithFormat(this.maxNumber.toString().replace(/\\./g, ',')));\r\n // }, 10);\r\n // event.preventDefault();\r\n // }\r\n };\r\n\r\n onFocus = () => {\r\n this.isFocused = true;\r\n this.sdFocus.emit();\r\n if (this.sdFocusForceBlur.observers?.length > 0) {\r\n this.blur();\r\n this.sdFocusForceBlur.emit();\r\n }\r\n };\r\n\r\n onBlur = () => {\r\n this.isFocused = false;\r\n const val: string = (this.inputControl.value ?? '').toString();\r\n // If value is empty, set to empty string and emit to model\r\n if (!val || val.trim() === '') {\r\n this.inputControl.setValue('', { emitEvent: false });\r\n this.#onChange(null);\r\n this.sdBlur.emit(null);\r\n return;\r\n }\r\n const arrayValue = val.split(this.#decimalSeparator);\r\n if (arrayValue.length >= 2 && arrayValue[1] == '') {\r\n this.inputControl.setValue(this.#formatNumber(arrayValue[0]));\r\n return;\r\n }\r\n if (val.length > val.trim().length) {\r\n this.inputControl.setValue(val.trim());\r\n }\r\n this.sdBlur.emit(this.formControl.value);\r\n };\r\n\r\n onClick = () => {\r\n if (this.sdViewDef?.templateRef) {\r\n if (!this.formControl.disabled && !this.isFocused) {\r\n this.focus();\r\n }\r\n }\r\n };\r\n\r\n blur = () => {\r\n this.isFocused = false;\r\n this.control?.nativeElement?.blur();\r\n };\r\n\r\n focus = () => {\r\n this.isFocused = true;\r\n setTimeout(() => {\r\n this.control?.nativeElement?.focus();\r\n }, 100);\r\n };\r\n}\r\n","@if (viewed) {\r\n <sd-view\r\n [label]=\"label\"\r\n [labelTemplate]=\"sdLabelTemplate\"\r\n [value]=\"formControl.value\"\r\n [display]=\"formControl.value | sdFormatNumber\"\r\n [hyperlink]=\"hyperlink\"\r\n [valueTemplate]=\"sdValueTemplate\">\r\n </sd-view>\r\n} @else {\r\n @if (!appearance) {\r\n <ng-content select=\"[sdLabel]\">\r\n @if (label) {\r\n <sd-label [label]=\"label\" [required]=\"required\"></sd-label>\r\n }\r\n </ng-content>\r\n }\r\n <div\r\n class=\"d-flex align-items-center\"\r\n [class.sd-view]=\"!!sdViewDef?.templateRef\"\r\n [class.c-focused]=\"isFocused\"\r\n [class.c-disabled]=\"formControl.disabled\"\r\n (click)=\"onClick()\"\r\n aria-hidden=\"true\">\r\n @if (sdViewDef?.templateRef && !isFocused) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n sdViewDef!.templateRef;\r\n context: {\r\n value: formControl.value\r\n }\r\n \">\r\n </ng-container>\r\n } @else {\r\n <mat-form-field\r\n [class.sd-md]=\"size === 'md'\"\r\n [class.sd-sm]=\"size === 'sm'\"\r\n [class.hide-inline-error]=\"hideInlineError\"\r\n [appearance]=\"appearance\">\r\n @if (appearance && label) {\r\n <mat-label style=\"display: inline-block\">\r\n <div style=\"display: flex; align-items: center; gap: 4px\">\r\n <span>{{ label }}</span>\r\n @if (helperText) {\r\n <mat-icon [matTooltip]=\"helperText\" matTooltipPosition=\"below\">info_outline</mat-icon>\r\n }\r\n </div>\r\n </mat-label>\r\n }\r\n <input\r\n aria-hidden=\"true\"\r\n [id]=\"id\"\r\n [formControl]=\"inputControl\"\r\n #control\r\n matInput\r\n [placeholder]=\"placeholder || label || ''\"\r\n [errorStateMatcher]=\"matcher\"\r\n (keyup.enter)=\"onKeyupEnter()\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\"\r\n (keydown)=\"onKeydown($event)\"\r\n (compositionstart)=\"onCompositionStart($event)\"\r\n (compositionend)=\"onCompositionEnd($event)\"\r\n [required]=\"required\"\r\n [readonly]=\"readonly\"\r\n [autocomplete]=\"id\"\r\n (paste)=\"onPaste($event)\"\r\n autocorrect=\"off\"\r\n [attr.data-autoId]=\"autoId\" />\r\n @if (sdSuffixDef?.templateRef) {\r\n <ng-container matSuffix>\r\n <ng-container [ngTemplateOutlet]=\"sdSuffixDef?.templateRef ?? null\"></ng-container>\r\n </ng-container>\r\n }\r\n\r\n @if (formControl.errors?.['required']) {\r\n <mat-error>\r\n @if (!hideInlineError) {\r\n {{ 'Vui lòng nhập thông tin' }}\r\n }\r\n </mat-error>\r\n }\r\n\r\n @if (formControl.errors?.['min']) {\r\n <mat-error>\r\n @if (!hideInlineError) {\r\n {{ 'Giá trị không được nhỏ hơn ' }} <strong>{{ min }}</strong>\r\n }\r\n </mat-error>\r\n }\r\n\r\n @if (formControl.errors?.['max']) {\r\n <mat-error>\r\n @if (!hideInlineError) {\r\n {{ 'Giá trị không được lớn hơn ' }} <strong>{{ max }}</strong>\r\n }\r\n </mat-error>\r\n }\r\n\r\n @if (formControl.errors?.['customValidator']) {\r\n <mat-error>\r\n @if (!hideInlineError) {\r\n {{ formControl.errors?.['customValidator'] }}\r\n }\r\n </mat-error>\r\n }\r\n\r\n @if (formControl.errors?.['inlineError']) {\r\n <mat-error>\r\n @if (!hideInlineError) {\r\n {{ inlineError }}\r\n }\r\n </mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n </div>\r\n <!-- <sd-popover #error=\"sdPopover\" type=\"danger\" width=\"300px\">\r\n <span *ngIf=\"formControl.errors?.required\">\r\n {{ \"Vui lòng nhập thông tin\" | sdTranslate }}\r\n </span>\r\n <span *ngIf=\"formControl.errors?.customValidator\">\r\n {{formControl.errors?.customValidator}}\r\n </span>\r\n</sd-popover> -->\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}