ecabs-components 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/README.md +24 -0
  2. package/esm2020/ecabs-components.mjs +5 -0
  3. package/esm2020/lib/base/directives/digits-only.directive.mjs +130 -0
  4. package/esm2020/lib/base/element-base.mjs +100 -0
  5. package/esm2020/lib/base/element-wrapper/element-wrapper.component.mjs +53 -0
  6. package/esm2020/lib/base/element-wrapper/element-wrapper.module.mjs +52 -0
  7. package/esm2020/lib/base/hint/hint.component.mjs +21 -0
  8. package/esm2020/lib/base/hint/hint.module.mjs +20 -0
  9. package/esm2020/lib/base/validation/validation.component.mjs +158 -0
  10. package/esm2020/lib/base/validation/validation.module.mjs +20 -0
  11. package/esm2020/lib/ecabs-buttons/ecabs-buttons.component.mjs +65 -0
  12. package/esm2020/lib/ecabs-buttons/ecabs-buttons.module.mjs +21 -0
  13. package/esm2020/lib/ecabs-input/ecabs-input.component.mjs +81 -0
  14. package/esm2020/lib/ecabs-input/ecabs-input.module.mjs +22 -0
  15. package/esm2020/lib/ecabs-loading/ecabs-loading.component.mjs +24 -0
  16. package/esm2020/lib/ecabs-loading/ecabs-loading.module.mjs +19 -0
  17. package/esm2020/lib/ecabs-loading/spinner/spinner.component.mjs +16 -0
  18. package/esm2020/public-api.mjs +8 -0
  19. package/fesm2015/ecabs-components.mjs +744 -0
  20. package/fesm2015/ecabs-components.mjs.map +1 -0
  21. package/fesm2020/ecabs-components.mjs +742 -0
  22. package/fesm2020/ecabs-components.mjs.map +1 -0
  23. package/index.d.ts +5 -0
  24. package/lib/base/directives/digits-only.directive.d.ts +26 -0
  25. package/lib/base/directives/digits-only.directive.ts +129 -0
  26. package/lib/base/element-base.d.ts +28 -0
  27. package/lib/base/element-base.ts +72 -0
  28. package/lib/base/element-wrapper/element-wrapper.component.d.ts +19 -0
  29. package/lib/base/element-wrapper/element-wrapper.component.html +30 -0
  30. package/lib/base/element-wrapper/element-wrapper.component.ts +33 -0
  31. package/lib/base/element-wrapper/element-wrapper.module.d.ts +16 -0
  32. package/lib/base/element-wrapper/element-wrapper.module.ts +30 -0
  33. package/lib/base/hint/hint.component.d.ts +8 -0
  34. package/lib/base/hint/hint.component.html +1 -0
  35. package/lib/base/hint/hint.component.scss +0 -0
  36. package/lib/base/hint/hint.component.ts +12 -0
  37. package/lib/base/hint/hint.module.d.ts +10 -0
  38. package/lib/base/hint/hint.module.ts +13 -0
  39. package/lib/base/validation/validation.component.d.ts +22 -0
  40. package/lib/base/validation/validation.component.html +8 -0
  41. package/lib/base/validation/validation.component.scss +0 -0
  42. package/lib/base/validation/validation.component.ts +171 -0
  43. package/lib/base/validation/validation.module.d.ts +10 -0
  44. package/lib/base/validation/validation.module.ts +12 -0
  45. package/lib/ecabs-buttons/ecabs-buttons.component.d.ts +21 -0
  46. package/lib/ecabs-buttons/ecabs-buttons.component.html +18 -0
  47. package/lib/ecabs-buttons/ecabs-buttons.component.ts +54 -0
  48. package/lib/ecabs-buttons/ecabs-buttons.module.d.ts +11 -0
  49. package/lib/ecabs-buttons/ecabs-buttons.module.ts +13 -0
  50. package/lib/ecabs-input/ecabs-input.component.d.ts +27 -0
  51. package/lib/ecabs-input/ecabs-input.component.html +26 -0
  52. package/lib/ecabs-input/ecabs-input.component.ts +83 -0
  53. package/lib/ecabs-input/ecabs-input.module.d.ts +12 -0
  54. package/lib/ecabs-input/ecabs-input.module.ts +14 -0
  55. package/lib/ecabs-loading/ecabs-loading.component.d.ts +8 -0
  56. package/lib/ecabs-loading/ecabs-loading.component.html +7 -0
  57. package/lib/ecabs-loading/ecabs-loading.component.spec.ts +24 -0
  58. package/lib/ecabs-loading/ecabs-loading.component.ts +11 -0
  59. package/lib/ecabs-loading/ecabs-loading.module.d.ts +9 -0
  60. package/lib/ecabs-loading/ecabs-loading.module.ts +11 -0
  61. package/lib/ecabs-loading/spinner/spinner.component.d.ts +6 -0
  62. package/lib/ecabs-loading/spinner/spinner.component.html +5 -0
  63. package/lib/ecabs-loading/spinner/spinner.component.scss +61 -0
  64. package/lib/ecabs-loading/spinner/spinner.component.spec.ts +24 -0
  65. package/lib/ecabs-loading/spinner/spinner.component.ts +11 -0
  66. package/package.json +33 -0
  67. package/public-api.d.ts +7 -0
  68. package/public-api.ts +7 -0
  69. package/styles/material/_theme.scss +99 -0
  70. package/styles/material/overrides/_autocomplete.scss +11 -0
  71. package/styles/material/overrides/_button.scss +81 -0
  72. package/styles/material/overrides/_card.scss +17 -0
  73. package/styles/material/overrides/_chip.scss +108 -0
  74. package/styles/material/overrides/_datepicker.scss +145 -0
  75. package/styles/material/overrides/_dialog.scss +8 -0
  76. package/styles/material/overrides/_divider.scss +3 -0
  77. package/styles/material/overrides/_expansion.scss +31 -0
  78. package/styles/material/overrides/_form.scss +47 -0
  79. package/styles/material/overrides/_icon.scss +3 -0
  80. package/styles/material/overrides/_menu.scss +3 -0
  81. package/styles/material/overrides/_paginator.scss +0 -0
  82. package/styles/material/overrides/_phone.scss +24 -0
  83. package/styles/material/overrides/_select.scss +36 -0
  84. package/styles/material/overrides/_tab.scss +23 -0
  85. package/styles/material/overrides/_table.scss +12 -0
  86. package/styles/material/overrides/_toaster.scss +38 -0
  87. package/styles/material/overrides/_toggle.scss +10 -0
  88. package/styles/material/overrides/_tooltip.scss +3 -0
  89. package/styles/material/overrides/index.scss +19 -0
  90. package/styles/scss/base/_heading.scss +17 -0
  91. package/styles/scss/base/_normalize.scss +78 -0
  92. package/styles/scss/base/index.scss +2 -0
  93. package/styles/scss/modules/_autocomplete.scss +29 -0
  94. package/styles/scss/modules/_button.scss +221 -0
  95. package/styles/scss/modules/_card.scss +23 -0
  96. package/styles/scss/modules/_chip.scss +56 -0
  97. package/styles/scss/modules/_datepicker.scss +422 -0
  98. package/styles/scss/modules/_dialog.scss +14 -0
  99. package/styles/scss/modules/_divider.scss +3 -0
  100. package/styles/scss/modules/_form.scss +221 -0
  101. package/styles/scss/modules/_icon.scss +30 -0
  102. package/styles/scss/modules/_img.scss +32 -0
  103. package/styles/scss/modules/_legend.scss +64 -0
  104. package/styles/scss/modules/_list.scss +17 -0
  105. package/styles/scss/modules/_map.scss +112 -0
  106. package/styles/scss/modules/_percentage.scss +33 -0
  107. package/styles/scss/modules/_phone.scss +21 -0
  108. package/styles/scss/modules/_select.scss +21 -0
  109. package/styles/scss/modules/_statuses.scss +31 -0
  110. package/styles/scss/modules/_tab.scss +16 -0
  111. package/styles/scss/modules/_table.scss +107 -0
  112. package/styles/scss/modules/_timepicker.scss +96 -0
  113. package/styles/scss/modules/_toaster.scss +53 -0
  114. package/styles/scss/modules/_tooltip.scss +7 -0
  115. package/styles/scss/modules/drag-drop.scss +31 -0
  116. package/styles/scss/modules/index.scss +23 -0
  117. package/styles/scss/utilities/_colors.scss +52 -0
  118. package/styles/scss/utilities/_fonts.scss +26 -0
  119. package/styles/scss/utilities/_functions.scss +27 -0
  120. package/styles/scss/utilities/_helpers.scss +5 -0
  121. package/styles/scss/utilities/_mixins.scss +65 -0
  122. package/styles/scss/utilities/_variables.scss +19 -0
  123. package/styles/scss/utilities/index.scss +6 -0
  124. package/styles/styles.scss +5 -0
  125. package/test.ts +27 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ecabs-components.mjs","sources":["../../../projects/ecabs-components/src/lib/ecabs-loading/spinner/spinner.component.ts","../../../projects/ecabs-components/src/lib/ecabs-loading/spinner/spinner.component.html","../../../projects/ecabs-components/src/lib/ecabs-buttons/ecabs-buttons.component.ts","../../../projects/ecabs-components/src/lib/ecabs-buttons/ecabs-buttons.component.html","../../../projects/ecabs-components/src/lib/ecabs-loading/ecabs-loading.component.ts","../../../projects/ecabs-components/src/lib/ecabs-loading/ecabs-loading.component.html","../../../projects/ecabs-components/src/lib/ecabs-loading/ecabs-loading.module.ts","../../../projects/ecabs-components/src/lib/ecabs-buttons/ecabs-buttons.module.ts","../../../projects/ecabs-components/src/lib/base/element-base.ts","../../../projects/ecabs-components/src/lib/base/validation/validation.component.ts","../../../projects/ecabs-components/src/lib/base/validation/validation.component.html","../../../projects/ecabs-components/src/lib/base/hint/hint.component.ts","../../../projects/ecabs-components/src/lib/base/hint/hint.component.html","../../../projects/ecabs-components/src/lib/base/element-wrapper/element-wrapper.component.ts","../../../projects/ecabs-components/src/lib/base/element-wrapper/element-wrapper.component.html","../../../projects/ecabs-components/src/lib/base/directives/digits-only.directive.ts","../../../projects/ecabs-components/src/lib/ecabs-input/ecabs-input.component.ts","../../../projects/ecabs-components/src/lib/ecabs-input/ecabs-input.component.html","../../../projects/ecabs-components/src/lib/base/hint/hint.module.ts","../../../projects/ecabs-components/src/lib/base/validation/validation.module.ts","../../../projects/ecabs-components/src/lib/base/element-wrapper/element-wrapper.module.ts","../../../projects/ecabs-components/src/lib/ecabs-input/ecabs-input.module.ts","../../../projects/ecabs-components/src/ecabs-components.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'ecabs-loading-spinner',\r\n templateUrl: './spinner.component.html',\r\n styleUrls: ['./spinner.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class EcabsSpinnerComponent {\r\n @Input() size: 'large' | 'medium' | 'tiny' = 'medium';\r\n}\r\n","<div class=\"loadingio-spinner-rolling {{ size }}\">\r\n <div class=\"ldio-inner\">\r\n <div></div>\r\n </div>\r\n</div>\r\n","import { Component, HostBinding, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\r\nimport { ThemePalette } from '@angular/material/core';\r\n\r\n@Component({\r\n selector: 'ecabs-buttons',\r\n templateUrl: './ecabs-buttons.component.html',\r\n})\r\nexport class ButtonsComponent implements OnInit, OnChanges {\r\n @Input()\r\n label!: string;\r\n\r\n @Input()\r\n disabled!: boolean;\r\n\r\n @Input()\r\n loading!: boolean;\r\n\r\n @Input()\r\n form!: string;\r\n\r\n @Input()\r\n size: 'default' | 'large' = 'default';\r\n\r\n @Input()\r\n type: 'button' | 'submit' = 'button';\r\n\r\n @Input() raised = false;\r\n @Input() stroked = false;\r\n @Input() full = false;\r\n @Input()\r\n color: ThemePalette | 'success' = 'primary';\r\n\r\n @HostBinding('style.width')\r\n borderWidth = '';\r\n @HostBinding('class')\r\n classAttr = '';\r\n\r\n ngOnInit(): void {\r\n if (this.full) {\r\n this.borderWidth = '100%';\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n const disabled = changes['disabled']?.currentValue !== undefined ? changes['disabled'].currentValue : this.disabled;\r\n const loading = changes['loading']?.currentValue !== undefined ? changes['loading'].currentValue : this.loading;\r\n\r\n if (disabled || loading) {\r\n this.classAttr = 'pointer-events-none';\r\n } else {\r\n this.classAttr = '';\r\n }\r\n }\r\n}\r\n","<button\r\n mat-button\r\n [ngClass]=\"{\r\n '!w-full': full,\r\n 'mat-stroked-button': stroked,\r\n 'mat-raised-button': raised\r\n }\"\r\n [color]=\"color\"\r\n [disabled]=\"disabled\"\r\n [type]=\"type\"\r\n [attr.form]=\"form\"\r\n>\r\n <ecabs-loading-spinner size=\"tiny\" *ngIf=\"loading\"></ecabs-loading-spinner>\r\n <ng-container *ngIf=\"!loading\">\r\n <ng-content select=\"mat-icon\"></ng-content>\r\n <ng-content></ng-content>\r\n </ng-container>\r\n</button>\r\n","import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'ecabs-ecabs-loading',\r\n templateUrl: './ecabs-loading.component.html',\r\n})\r\nexport class EcabsLoadingComponent {\r\n @Input() loading = false;\r\n @Input() backgroundColor = 'white';\r\n @Input() size: 'large' | 'medium' | 'tiny' = 'medium';\r\n}\r\n","<div\r\n class=\"flex absolute left-0 top-0 right-0 bottom-0 z-50 items-center justify-center\"\r\n [ngStyle]=\"{ backgroundColor: backgroundColor }\"\r\n *ngIf=\"loading\"\r\n>\r\n <ecabs-loading-spinner [size]=\"size\" *ngIf=\"loading\"></ecabs-loading-spinner>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { EcabsLoadingComponent } from './ecabs-loading.component';\r\nimport { EcabsSpinnerComponent } from './spinner/spinner.component';\r\n\r\n@NgModule({\r\n declarations: [EcabsLoadingComponent, EcabsSpinnerComponent],\r\n imports: [CommonModule],\r\n exports: [EcabsLoadingComponent, EcabsSpinnerComponent],\r\n})\r\nexport class EcabsLoadingModule {}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ButtonsComponent } from './ecabs-buttons.component';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { EcabsLoadingModule } from '../ecabs-loading/ecabs-loading.module';\r\n\r\n@NgModule({\r\n declarations: [ButtonsComponent],\r\n imports: [CommonModule, MatButtonModule, EcabsLoadingModule, MatIconModule],\r\n exports: [ButtonsComponent],\r\n})\r\nexport class EcabsButtonsModule {}\r\n","import { Input, Output, EventEmitter, Component } from '@angular/core';\r\nimport { AbstractControl, UntypedFormControl } from '@angular/forms';\r\n\r\n@Component({\r\n template: '',\r\n})\r\nexport default class ElementBaseComponent {\r\n @Input() type!:string;\r\n @Input() name!:string;\r\n @Input() label!:string;\r\n @Input() placeholder = '';\r\n @Input() validationLabel!:string;\r\n @Input() disabled = false;\r\n @Input() showValidation = true;\r\n @Input() showValidationOnNotTouched = false;\r\n @Input() hideValidationMessage = false;\r\n @Input() iconClass = '';\r\n @Input() loading = false;\r\n @Input() showHint: boolean = false;\r\n @Input() maxLength!: number;\r\n @Input() tooltip!: string;\r\n @Input() showAsterisk: boolean = true;\r\n\r\n @Output() focused = new EventEmitter<any>();\r\n @Output() focusOuted = new EventEmitter<any>();\r\n\r\n control!: UntypedFormControl;\r\n required: boolean = false;\r\n\r\n getData(): any {\r\n return {\r\n type: this.type || 'text',\r\n label: this.label,\r\n placeholder: this.placeholder,\r\n validationLabel: this.validationLabel,\r\n disabled: this.disabled,\r\n showValidation: this.showValidation,\r\n showValidationOnNotTouched: this.showValidationOnNotTouched,\r\n hideValidationMessage: this.hideValidationMessage,\r\n iconClass: this.iconClass,\r\n control: this.control,\r\n loading: this.loading,\r\n showHint: this.showHint,\r\n maxLength: this.maxLength,\r\n tooltip: this.tooltip,\r\n name: this.name,\r\n required: this.isRequired(this.control),\r\n showAsterisk: this.showAsterisk,\r\n };\r\n }\r\n\r\n private isRequired = (ctrl: any): boolean => {\r\n if (ctrl?.validator) {\r\n const validator = ctrl.validator({} as AbstractControl);\r\n if (validator && validator['required']) {\r\n return true;\r\n }\r\n }\r\n\r\n if (ctrl?.['controls']) {\r\n for (const name in ctrl['controls']) {\r\n if (ctrl['controls'][name]) {\r\n if (this.isRequired(ctrl['controls'][name])) {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n };\r\n}\r\n","import {\r\n Component,\r\n OnInit,\r\n Input,\r\n OnChanges,\r\n SimpleChanges,\r\n} from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-validations-messages',\r\n templateUrl: './validation.component.html',\r\n styleUrls: ['./validation.component.scss'],\r\n})\r\nexport class ValidationComponent implements OnInit, OnChanges {\r\n @Input() element!: any;\r\n @Input() label!: string;\r\n @Input() showValidationOnNotTouched = false;\r\n @Input() updatedErrors!: { type: string; message: string }[];\r\n errorMessages: any[]=[];\r\n\r\n private _messages: any = {};\r\n\r\n get messages(): any {\r\n if (this.element) {\r\n for (const errorKey in this.element.errors) {\r\n for (const key in this.element.errors[errorKey]) {\r\n if (this._messages[errorKey]) {\r\n this._messages[errorKey] = this._messages[errorKey].replace(\r\n `[${key}]`,\r\n this.element.errors[errorKey][key]\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n return this._messages;\r\n }\r\n\r\n set messages(m) {\r\n this._messages = m;\r\n }\r\n\r\n constructor() {\r\n // this.errorMessages = [\r\n // {\r\n // type: 'required',\r\n // message: this.translateService.instant(\r\n // 'FORMS.VALIDATION.LABEL_REQUIRED'\r\n // ),\r\n // },\r\n // {\r\n // type: 'minlength',\r\n // message: this.translateService.instant('FORMS.VALIDATION.MIN_LENGTH'),\r\n // },\r\n // {\r\n // type: 'maxlength',\r\n // message: this.translateService.instant('FORMS.VALIDATION.MAX_LENGTH'),\r\n // },\r\n // {\r\n // type: 'min',\r\n // message: this.translateService.instant('FORMS.VALIDATION.MIN'),\r\n // },\r\n // {\r\n // type: 'max',\r\n // message: this.translateService.instant('FORMS.VALIDATION.MAX'),\r\n // },\r\n // {\r\n // type: 'minValue',\r\n // message: this.translateService.instant('FORMS.VALIDATION.MIN_VALUE'),\r\n // },\r\n // {\r\n // type: 'maxValue',\r\n // message: this.translateService.instant('FORMS.VALIDATION.MAX_VALUE'),\r\n // },\r\n // {\r\n // type: 'validatePhoneNumber',\r\n // message: this.translateService.instant(\r\n // 'FORMS.VALIDATION.VALIDATE_PHONE_NUMBER'\r\n // ),\r\n // },\r\n // {\r\n // type: 'pastDate',\r\n // message: this.translateService.instant('FORMS.VALIDATION.PAST_DATE'),\r\n // },\r\n // {\r\n // type: 'affectsError',\r\n // message: this.translateService.instant(\r\n // 'FORMS.VALIDATION.AFFECTS_ERROR'\r\n // ),\r\n // },\r\n // {\r\n // type: 'moreThan',\r\n // message: this.translateService.instant('FORMS.VALIDATION.MORE_THAN'),\r\n // },\r\n // {\r\n // type: 'lessThan',\r\n // message: this.translateService.instant('FORMS.VALIDATION.LESS_THAN'),\r\n // },\r\n // {\r\n // type: 'iban',\r\n // message: this.translateService.instant('FORMS.VALIDATION.INVALID'),\r\n // },\r\n // {\r\n // type: 'email',\r\n // message: this.translateService.instant('FORMS.VALIDATION.EMAIL'),\r\n // },\r\n // {\r\n // type: 'numberMoreThan',\r\n // message: this.translateService.instant(\r\n // 'FORMS.VALIDATION.VALUE_MORE_THAN'\r\n // ),\r\n // },\r\n // {\r\n // type: 'numberLessThan',\r\n // message: this.translateService.instant(\r\n // 'FORMS.VALIDATION.VALUE_LESS_THAN'\r\n // ),\r\n // },\r\n // {\r\n // type: 'outOfRange',\r\n // message: this.translateService.instant('FORMS.VALIDATION.OUT_OF_RANGE'),\r\n // },\r\n // {\r\n // type: 'iban',\r\n // message: this.translateService.instant('FORMS.VALIDATION.IBAN'),\r\n // },\r\n // {\r\n // type: 'timeIsAfter',\r\n // message: this.translateService.instant(\r\n // 'FORMS.VALIDATION.LESS_THAN_TIME'\r\n // ),\r\n // },\r\n // ];\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n const { updatedErrors } = changes;\r\n\r\n if (\r\n updatedErrors &&\r\n updatedErrors.currentValue &&\r\n updatedErrors.currentValue.length > 0\r\n ) {\r\n for (const error of updatedErrors.currentValue) {\r\n this.messages[error.type] = error.message;\r\n }\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n for (const error of this.errorMessages) {\r\n this.messages[error.type] = this.replaceTokens(error.message);\r\n }\r\n }\r\n\r\n replaceTokens(message: string): string {\r\n let retMessage: string;\r\n if (this.label) {\r\n retMessage = message.replace('[label]', this.label);\r\n } else {\r\n retMessage = message;\r\n }\r\n\r\n return retMessage;\r\n }\r\n\r\n getMessageDetail(key: any): string {\r\n return this.messages[key];\r\n }\r\n}\r\n","<div\r\n class=\"form-field__validation\"\r\n *ngIf=\"element && (element?.touched || showValidationOnNotTouched) && element?.invalid\"\r\n>\r\n <div class=\"form-field__validation__item\" *ngFor=\"let item of element?.errors | keyvalue\">\r\n {{ getMessageDetail(item.key) }}\r\n </div>\r\n</div>\r\n","import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-hint',\r\n templateUrl: './hint.component.html',\r\n styleUrls: ['./hint.component.scss'],\r\n})\r\nexport class HintComponent {\r\n @Input() element!:any;\r\n @Input() maxValue!:number;\r\n @Input() showHint = false;\r\n}\r\n","<div class=\"hint\" *ngIf=\"element && showHint\">{{ element?.value?.length || 0 }}/{{ this.maxValue }}</div>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-element-wrapper',\r\n templateUrl: './element-wrapper.component.html',\r\n})\r\nexport class ElementWrapperComponent {\r\n @Input() data!:any;\r\n @Input() showCloseIcon!:boolean;\r\n @Input() focusedFlag!:any;\r\n @Input() showPassword!:boolean;\r\n @Input() control!:any;\r\n @Output() showHidePassword = new EventEmitter<any>();\r\n @Output() clear = new EventEmitter<any>();\r\n @Output() increase = new EventEmitter<any>();\r\n @Output() decrease = new EventEmitter<any>();\r\n\r\n showHidePasswordFn(event:any): void {\r\n this.showHidePassword.emit(event);\r\n }\r\n\r\n clearFn(): void {\r\n this.clear.emit();\r\n }\r\n\r\n increaseFn(): void {\r\n this.increase.emit();\r\n }\r\n\r\n decreaseFn(): void {\r\n this.decrease.emit();\r\n }\r\n}\r\n","<div\r\n class=\"form-field\"\r\n [ngClass]=\"{\r\n 'form-field--invalid':\r\n data?.showValidation && (data?.control?.touched || data?.showValidationOnNotTouched) && data?.control?.invalid,\r\n disabled: data?.disabled,\r\n 'form-field--required': data?.required && data?.showAsterisk\r\n }\"\r\n>\r\n <div>\r\n <label class=\"form-field__label\" [attr.for]=\"data?.name\" *ngIf=\"data?.label\">\r\n <span [innerHTML]=\"data?.label\"></span>\r\n <mat-icon class=\"icon\" *ngIf=\"data?.tooltip\" [matTooltip]=\"data?.tooltip\">error_outline</mat-icon>\r\n </label>\r\n </div>\r\n\r\n <ng-content></ng-content>\r\n\r\n <ecabs-loading-spinner class=\"spinner\" size=\"tiny\" *ngIf=\"data.loading\"></ecabs-loading-spinner>\r\n\r\n <app-hint [element]=\"data?.control\" [showHint]=\"data?.showHint\" [maxValue]=\"data?.maxLength\"></app-hint>\r\n\r\n <app-validations-messages\r\n *ngIf=\"data?.showValidation && !data?.hideValidationMessage\"\r\n [element]=\"data?.control\"\r\n [label]=\"data?.label ? data?.label : data?.placeholder ? data.placeholder : data?.validationLabel\"\r\n [showValidationOnNotTouched]=\"data?.showValidationOnNotTouched\"\r\n >\r\n </app-validations-messages>\r\n</div>\r\n","import { Directive, ElementRef, HostListener, Input, OnInit } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[appDigitsOnly]',\r\n})\r\nexport class DigitsOnlyDirective implements OnInit {\r\n @Input()\r\n digitsOnly = false;\r\n\r\n @Input()\r\n allowHyphen = false;\r\n\r\n @Input() decimal? = false;\r\n @Input() decimalSeparator? = '.';\r\n @Input() unit? = 0;\r\n\r\n inputElement: HTMLInputElement;\r\n minus = '-';\r\n minusCounter = 0;\r\n regex!: RegExp;\r\n\r\n private decimalCounter = 0;\r\n private readonly navigationKeys = [\r\n 'Backspace',\r\n 'Delete',\r\n 'Tab',\r\n 'Escape',\r\n 'Enter',\r\n 'Home',\r\n 'End',\r\n 'ArrowLeft',\r\n 'ArrowRight',\r\n 'Clear',\r\n 'Copy',\r\n 'Paste',\r\n ];\r\n\r\n constructor(public el: ElementRef) {\r\n this.inputElement = el.nativeElement;\r\n }\r\n\r\n @HostListener('keydown', ['$event'])\r\n onKeyDown(e: KeyboardEvent): void {\r\n if (this.digitsOnly) {\r\n if (\r\n this.navigationKeys.indexOf(e.key) > -1 || // Allow: navigation keys: backspace, delete, arrows etc.\r\n (e.key === 'a' && e.ctrlKey) || // Allow: Ctrl+A\r\n (e.key === 'c' && e.ctrlKey) || // Allow: Ctrl+C\r\n (e.key === 'v' && e.ctrlKey) || // Allow: Ctrl+V\r\n (e.key === 'x' && e.ctrlKey) || // Allow: Ctrl+X\r\n (e.key === 'a' && e.metaKey) || // Allow: Cmd+A (Mac)\r\n (e.key === 'c' && e.metaKey) || // Allow: Cmd+C (Mac)\r\n (e.key === 'v' && e.metaKey) || // Allow: Cmd+V (Mac)\r\n (e.key === 'x' && e.metaKey) || // Allow: Cmd+X (Mac)\r\n (this.decimal && e.key === this.decimalSeparator && this.decimalCounter < 1) || // Allow: only one decimal point\r\n (this.decimal && e.key === this.minus && this.minusCounter < 1) // Allow: only one minus\r\n ) {\r\n return;\r\n }\r\n\r\n // Ensure that it is a number and stop the keypress\r\n if (e.key === ' ' || !this.regex.test(e.key)) {\r\n e.preventDefault();\r\n }\r\n }\r\n }\r\n\r\n @HostListener('keyup', ['$event'])\r\n onKeyUp(): void {\r\n if (this.digitsOnly) {\r\n if (!this.decimal) {\r\n return;\r\n }\r\n\r\n this.decimalCounter = this.el.nativeElement.value.split(this.decimalSeparator).length - 1;\r\n this.minusCounter = this.el.nativeElement.value.split(this.minus).length - 1;\r\n\r\n if (isNaN(+this.inputElement.value)) {\r\n this.inputElement.value = this.sanitizeInput(this.inputElement.value);\r\n }\r\n }\r\n }\r\n\r\n @HostListener('paste', ['$event'])\r\n onPaste(event: ClipboardEvent): void {\r\n if (this.digitsOnly) {\r\n const pastedInput = event.clipboardData?.getData('text/plain') as string;\r\n this.pasteData(pastedInput);\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.regex = new RegExp(this.allowHyphen ? '^[\\\\d -]+$' : '\\\\d');\r\n }\r\n\r\n private pasteData(pastedContent: string): void {\r\n const sanitizedContent = isNaN(+pastedContent) ? this.sanitizeInput(pastedContent) : pastedContent;\r\n const pasted = document.execCommand('insertText', false, sanitizedContent);\r\n if (!pasted) {\r\n const { selectionStart: start, selectionEnd: end } = this.inputElement;\r\n this.inputElement.setRangeText(sanitizedContent, start as number, end as number, 'end');\r\n }\r\n }\r\n\r\n private sanitizeInput(input: string): string {\r\n let result = '';\r\n if (this.decimal && this.isValidDecimal(input)) {\r\n const regex = new RegExp(`^[\\d -${this.decimalSeparator}]+$`, 'g');\r\n result = input.replace(regex, '');\r\n } else {\r\n result = input.replace(`/${this.regex}/g`, '');\r\n }\r\n\r\n const maxLength = this.inputElement.maxLength;\r\n\r\n if (maxLength > 0) {\r\n // the input element has maxLength limit\r\n const allowedLength = maxLength - this.inputElement.value.length;\r\n result = allowedLength > 0 ? result.substring(0, allowedLength) : '';\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private isValidDecimal(inputString: string): boolean {\r\n return inputString.split(this.decimalSeparator as string).length <= 2;\r\n }\r\n}\r\n","import { AfterViewInit, Component, EventEmitter, Injector, Input, OnInit, Output } from '@angular/core';\r\nimport { ControlValueAccessor, UntypedFormControl, NgControl, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport ElementBaseComponent from '../base/element-base';\r\n\r\n@Component({\r\n selector: 'ecabs-input',\r\n templateUrl: './ecabs-input.component.html',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: EcabsInputComponent,\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class EcabsInputComponent\r\n extends ElementBaseComponent\r\n implements ControlValueAccessor, AfterViewInit, OnInit\r\n{\r\n @Input()\r\n digitsOnly!: boolean;\r\n\r\n @Input()\r\n allowDecimal!: boolean;\r\n\r\n @Input()\r\n allowHyphen!: boolean;\r\n\r\n @Input() max!: number;\r\n @Input() step!: number;\r\n\r\n @Output() onblur = new EventEmitter<any>();\r\n val!: string | number;\r\n\r\n get value(): string | number {\r\n return this.val;\r\n }\r\n\r\n set value(val) {\r\n if (val !== undefined && this.val !== val) {\r\n this.val = val;\r\n this.onChange(val);\r\n this.onTouch(val);\r\n }\r\n }\r\n\r\n constructor(private injector: Injector) {\r\n super();\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.type === 'number') {\r\n this.digitsOnly = true;\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n const ngControl: NgControl = this.injector.get(NgControl, null) as NgControl;\r\n if (ngControl) {\r\n this.control = ngControl.control as UntypedFormControl;\r\n }\r\n }\r\n\r\n onChange: any = () => {};\r\n\r\n onTouch: any = () => {};\r\n\r\n writeValue(value: any): void {\r\n this.value = value;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouch = fn;\r\n }\r\n\r\n blurChange(e:any): void {\r\n this.onblur.emit(e);\r\n }\r\n}\r\n","<app-element-wrapper [data]=\"getData()\">\r\n <div class=\"form-field__input--wrapper\">\r\n <input\r\n appDigitsOnly\r\n [digitsOnly]=\"digitsOnly\"\r\n [decimal]=\"allowDecimal\"\r\n [allowHyphen]=\"allowHyphen\"\r\n class=\"form-field__input\"\r\n [type]=\"type\"\r\n [id]=\"name\"\r\n [(ngModel)]=\"value\"\r\n [placeholder]=\"placeholder\"\r\n (blur)=\"onTouch()\"\r\n [disabled]=\"disabled\"\r\n [maxlength]=\"maxLength\"\r\n [max]=\"max\"\r\n [step]=\"step\"\r\n (blur)=\"blurChange($event)\"\r\n />\r\n\r\n <div class=\"form-field__input--suffix\" *ngIf=\"type !== 'number'\">\r\n <ng-content select=\"mat-icon\"></ng-content>\r\n <ng-content select=\".suffix\"></ng-content>\r\n </div>\r\n </div>\r\n</app-element-wrapper>\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\n\r\nimport { HintComponent } from './hint.component';\r\n\r\n@NgModule({\r\n declarations: [HintComponent],\r\n imports: [CommonModule, FormsModule, MatFormFieldModule],\r\n exports: [HintComponent],\r\n})\r\nexport class HintModule {}\r\n","import { NgModule } from '@angular/core';\r\nimport { ValidationComponent } from './validation.component';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\n\r\n@NgModule({\r\n declarations: [ValidationComponent],\r\n imports: [CommonModule, FormsModule, MatFormFieldModule],\r\n exports: [ValidationComponent],\r\n})\r\nexport class ValidationModule {}\r\n","\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\n\r\nimport { HintModule } from '../hint/hint.module';\r\nimport { ValidationModule } from '../validation/validation.module';\r\nimport { ElementWrapperComponent } from './element-wrapper.component';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { EcabsLoadingModule } from '../../ecabs-loading/ecabs-loading.module';\r\n\r\n@NgModule({\r\n declarations: [ElementWrapperComponent],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n EcabsLoadingModule,\r\n ValidationModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatIconModule,\r\n MatTooltipModule,\r\n HintModule,\r\n ],\r\n exports: [ElementWrapperComponent],\r\n})\r\nexport class ElementWrapperModule {}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { EcabsInputComponent } from './ecabs-input.component';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { ElementWrapperModule } from '../base/element-wrapper/element-wrapper.module';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { DigitsOnlyDirective } from '../base/directives/digits-only.directive';\r\n\r\n@NgModule({\r\n declarations: [EcabsInputComponent, DigitsOnlyDirective],\r\n imports: [CommonModule, MatInputModule, ElementWrapperModule, FormsModule],\r\n exports: [EcabsInputComponent],\r\n})\r\nexport class EcabsInputModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3.EcabsSpinnerComponent","i2.EcabsSpinnerComponent","i3.ValidationComponent","i6.HintComponent","i2.ElementWrapperComponent","i4.DigitsOnlyDirective"],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="ecabs-components" />
5
+ export * from './public-api';
@@ -0,0 +1,26 @@
1
+ import { ElementRef, OnInit } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class DigitsOnlyDirective implements OnInit {
4
+ el: ElementRef;
5
+ digitsOnly: boolean;
6
+ allowHyphen: boolean;
7
+ decimal?: boolean | undefined;
8
+ decimalSeparator?: string | undefined;
9
+ unit?: number | undefined;
10
+ inputElement: HTMLInputElement;
11
+ minus: string;
12
+ minusCounter: number;
13
+ regex: RegExp;
14
+ private decimalCounter;
15
+ private readonly navigationKeys;
16
+ constructor(el: ElementRef);
17
+ onKeyDown(e: KeyboardEvent): void;
18
+ onKeyUp(): void;
19
+ onPaste(event: ClipboardEvent): void;
20
+ ngOnInit(): void;
21
+ private pasteData;
22
+ private sanitizeInput;
23
+ private isValidDecimal;
24
+ static ɵfac: i0.ɵɵFactoryDeclaration<DigitsOnlyDirective, never>;
25
+ static ɵdir: i0.ɵɵDirectiveDeclaration<DigitsOnlyDirective, "[appDigitsOnly]", never, { "digitsOnly": "digitsOnly"; "allowHyphen": "allowHyphen"; "decimal": "decimal"; "decimalSeparator": "decimalSeparator"; "unit": "unit"; }, {}, never, never, false>;
26
+ }
@@ -0,0 +1,129 @@
1
+ import { Directive, ElementRef, HostListener, Input, OnInit } from '@angular/core';
2
+
3
+ @Directive({
4
+ selector: '[appDigitsOnly]',
5
+ })
6
+ export class DigitsOnlyDirective implements OnInit {
7
+ @Input()
8
+ digitsOnly = false;
9
+
10
+ @Input()
11
+ allowHyphen = false;
12
+
13
+ @Input() decimal? = false;
14
+ @Input() decimalSeparator? = '.';
15
+ @Input() unit? = 0;
16
+
17
+ inputElement: HTMLInputElement;
18
+ minus = '-';
19
+ minusCounter = 0;
20
+ regex!: RegExp;
21
+
22
+ private decimalCounter = 0;
23
+ private readonly navigationKeys = [
24
+ 'Backspace',
25
+ 'Delete',
26
+ 'Tab',
27
+ 'Escape',
28
+ 'Enter',
29
+ 'Home',
30
+ 'End',
31
+ 'ArrowLeft',
32
+ 'ArrowRight',
33
+ 'Clear',
34
+ 'Copy',
35
+ 'Paste',
36
+ ];
37
+
38
+ constructor(public el: ElementRef) {
39
+ this.inputElement = el.nativeElement;
40
+ }
41
+
42
+ @HostListener('keydown', ['$event'])
43
+ onKeyDown(e: KeyboardEvent): void {
44
+ if (this.digitsOnly) {
45
+ if (
46
+ this.navigationKeys.indexOf(e.key) > -1 || // Allow: navigation keys: backspace, delete, arrows etc.
47
+ (e.key === 'a' && e.ctrlKey) || // Allow: Ctrl+A
48
+ (e.key === 'c' && e.ctrlKey) || // Allow: Ctrl+C
49
+ (e.key === 'v' && e.ctrlKey) || // Allow: Ctrl+V
50
+ (e.key === 'x' && e.ctrlKey) || // Allow: Ctrl+X
51
+ (e.key === 'a' && e.metaKey) || // Allow: Cmd+A (Mac)
52
+ (e.key === 'c' && e.metaKey) || // Allow: Cmd+C (Mac)
53
+ (e.key === 'v' && e.metaKey) || // Allow: Cmd+V (Mac)
54
+ (e.key === 'x' && e.metaKey) || // Allow: Cmd+X (Mac)
55
+ (this.decimal && e.key === this.decimalSeparator && this.decimalCounter < 1) || // Allow: only one decimal point
56
+ (this.decimal && e.key === this.minus && this.minusCounter < 1) // Allow: only one minus
57
+ ) {
58
+ return;
59
+ }
60
+
61
+ // Ensure that it is a number and stop the keypress
62
+ if (e.key === ' ' || !this.regex.test(e.key)) {
63
+ e.preventDefault();
64
+ }
65
+ }
66
+ }
67
+
68
+ @HostListener('keyup', ['$event'])
69
+ onKeyUp(): void {
70
+ if (this.digitsOnly) {
71
+ if (!this.decimal) {
72
+ return;
73
+ }
74
+
75
+ this.decimalCounter = this.el.nativeElement.value.split(this.decimalSeparator).length - 1;
76
+ this.minusCounter = this.el.nativeElement.value.split(this.minus).length - 1;
77
+
78
+ if (isNaN(+this.inputElement.value)) {
79
+ this.inputElement.value = this.sanitizeInput(this.inputElement.value);
80
+ }
81
+ }
82
+ }
83
+
84
+ @HostListener('paste', ['$event'])
85
+ onPaste(event: ClipboardEvent): void {
86
+ if (this.digitsOnly) {
87
+ const pastedInput = event.clipboardData?.getData('text/plain') as string;
88
+ this.pasteData(pastedInput);
89
+ event.preventDefault();
90
+ }
91
+ }
92
+
93
+ ngOnInit(): void {
94
+ this.regex = new RegExp(this.allowHyphen ? '^[\\d -]+$' : '\\d');
95
+ }
96
+
97
+ private pasteData(pastedContent: string): void {
98
+ const sanitizedContent = isNaN(+pastedContent) ? this.sanitizeInput(pastedContent) : pastedContent;
99
+ const pasted = document.execCommand('insertText', false, sanitizedContent);
100
+ if (!pasted) {
101
+ const { selectionStart: start, selectionEnd: end } = this.inputElement;
102
+ this.inputElement.setRangeText(sanitizedContent, start as number, end as number, 'end');
103
+ }
104
+ }
105
+
106
+ private sanitizeInput(input: string): string {
107
+ let result = '';
108
+ if (this.decimal && this.isValidDecimal(input)) {
109
+ const regex = new RegExp(`^[\d -${this.decimalSeparator}]+$`, 'g');
110
+ result = input.replace(regex, '');
111
+ } else {
112
+ result = input.replace(`/${this.regex}/g`, '');
113
+ }
114
+
115
+ const maxLength = this.inputElement.maxLength;
116
+
117
+ if (maxLength > 0) {
118
+ // the input element has maxLength limit
119
+ const allowedLength = maxLength - this.inputElement.value.length;
120
+ result = allowedLength > 0 ? result.substring(0, allowedLength) : '';
121
+ }
122
+
123
+ return result;
124
+ }
125
+
126
+ private isValidDecimal(inputString: string): boolean {
127
+ return inputString.split(this.decimalSeparator as string).length <= 2;
128
+ }
129
+ }
@@ -0,0 +1,28 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import { UntypedFormControl } from '@angular/forms';
3
+ import * as i0 from "@angular/core";
4
+ export default class ElementBaseComponent {
5
+ type: string;
6
+ name: string;
7
+ label: string;
8
+ placeholder: string;
9
+ validationLabel: string;
10
+ disabled: boolean;
11
+ showValidation: boolean;
12
+ showValidationOnNotTouched: boolean;
13
+ hideValidationMessage: boolean;
14
+ iconClass: string;
15
+ loading: boolean;
16
+ showHint: boolean;
17
+ maxLength: number;
18
+ tooltip: string;
19
+ showAsterisk: boolean;
20
+ focused: EventEmitter<any>;
21
+ focusOuted: EventEmitter<any>;
22
+ control: UntypedFormControl;
23
+ required: boolean;
24
+ getData(): any;
25
+ private isRequired;
26
+ static ɵfac: i0.ɵɵFactoryDeclaration<ElementBaseComponent, never>;
27
+ static ɵcmp: i0.ɵɵComponentDeclaration<ElementBaseComponent, "ng-component", never, { "type": "type"; "name": "name"; "label": "label"; "placeholder": "placeholder"; "validationLabel": "validationLabel"; "disabled": "disabled"; "showValidation": "showValidation"; "showValidationOnNotTouched": "showValidationOnNotTouched"; "hideValidationMessage": "hideValidationMessage"; "iconClass": "iconClass"; "loading": "loading"; "showHint": "showHint"; "maxLength": "maxLength"; "tooltip": "tooltip"; "showAsterisk": "showAsterisk"; }, { "focused": "focused"; "focusOuted": "focusOuted"; }, never, never, false>;
28
+ }
@@ -0,0 +1,72 @@
1
+ import { Input, Output, EventEmitter, Component } from '@angular/core';
2
+ import { AbstractControl, UntypedFormControl } from '@angular/forms';
3
+
4
+ @Component({
5
+ template: '',
6
+ })
7
+ export default class ElementBaseComponent {
8
+ @Input() type!:string;
9
+ @Input() name!:string;
10
+ @Input() label!:string;
11
+ @Input() placeholder = '';
12
+ @Input() validationLabel!:string;
13
+ @Input() disabled = false;
14
+ @Input() showValidation = true;
15
+ @Input() showValidationOnNotTouched = false;
16
+ @Input() hideValidationMessage = false;
17
+ @Input() iconClass = '';
18
+ @Input() loading = false;
19
+ @Input() showHint: boolean = false;
20
+ @Input() maxLength!: number;
21
+ @Input() tooltip!: string;
22
+ @Input() showAsterisk: boolean = true;
23
+
24
+ @Output() focused = new EventEmitter<any>();
25
+ @Output() focusOuted = new EventEmitter<any>();
26
+
27
+ control!: UntypedFormControl;
28
+ required: boolean = false;
29
+
30
+ getData(): any {
31
+ return {
32
+ type: this.type || 'text',
33
+ label: this.label,
34
+ placeholder: this.placeholder,
35
+ validationLabel: this.validationLabel,
36
+ disabled: this.disabled,
37
+ showValidation: this.showValidation,
38
+ showValidationOnNotTouched: this.showValidationOnNotTouched,
39
+ hideValidationMessage: this.hideValidationMessage,
40
+ iconClass: this.iconClass,
41
+ control: this.control,
42
+ loading: this.loading,
43
+ showHint: this.showHint,
44
+ maxLength: this.maxLength,
45
+ tooltip: this.tooltip,
46
+ name: this.name,
47
+ required: this.isRequired(this.control),
48
+ showAsterisk: this.showAsterisk,
49
+ };
50
+ }
51
+
52
+ private isRequired = (ctrl: any): boolean => {
53
+ if (ctrl?.validator) {
54
+ const validator = ctrl.validator({} as AbstractControl);
55
+ if (validator && validator['required']) {
56
+ return true;
57
+ }
58
+ }
59
+
60
+ if (ctrl?.['controls']) {
61
+ for (const name in ctrl['controls']) {
62
+ if (ctrl['controls'][name]) {
63
+ if (this.isRequired(ctrl['controls'][name])) {
64
+ return true;
65
+ }
66
+ }
67
+ }
68
+ }
69
+
70
+ return false;
71
+ };
72
+ }
@@ -0,0 +1,19 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class ElementWrapperComponent {
4
+ data: any;
5
+ showCloseIcon: boolean;
6
+ focusedFlag: any;
7
+ showPassword: boolean;
8
+ control: any;
9
+ showHidePassword: EventEmitter<any>;
10
+ clear: EventEmitter<any>;
11
+ increase: EventEmitter<any>;
12
+ decrease: EventEmitter<any>;
13
+ showHidePasswordFn(event: any): void;
14
+ clearFn(): void;
15
+ increaseFn(): void;
16
+ decreaseFn(): void;
17
+ static ɵfac: i0.ɵɵFactoryDeclaration<ElementWrapperComponent, never>;
18
+ static ɵcmp: i0.ɵɵComponentDeclaration<ElementWrapperComponent, "app-element-wrapper", never, { "data": "data"; "showCloseIcon": "showCloseIcon"; "focusedFlag": "focusedFlag"; "showPassword": "showPassword"; "control": "control"; }, { "showHidePassword": "showHidePassword"; "clear": "clear"; "increase": "increase"; "decrease": "decrease"; }, never, ["*"], false>;
19
+ }
@@ -0,0 +1,30 @@
1
+ <div
2
+ class="form-field"
3
+ [ngClass]="{
4
+ 'form-field--invalid':
5
+ data?.showValidation && (data?.control?.touched || data?.showValidationOnNotTouched) && data?.control?.invalid,
6
+ disabled: data?.disabled,
7
+ 'form-field--required': data?.required && data?.showAsterisk
8
+ }"
9
+ >
10
+ <div>
11
+ <label class="form-field__label" [attr.for]="data?.name" *ngIf="data?.label">
12
+ <span [innerHTML]="data?.label"></span>
13
+ <mat-icon class="icon" *ngIf="data?.tooltip" [matTooltip]="data?.tooltip">error_outline</mat-icon>
14
+ </label>
15
+ </div>
16
+
17
+ <ng-content></ng-content>
18
+
19
+ <ecabs-loading-spinner class="spinner" size="tiny" *ngIf="data.loading"></ecabs-loading-spinner>
20
+
21
+ <app-hint [element]="data?.control" [showHint]="data?.showHint" [maxValue]="data?.maxLength"></app-hint>
22
+
23
+ <app-validations-messages
24
+ *ngIf="data?.showValidation && !data?.hideValidationMessage"
25
+ [element]="data?.control"
26
+ [label]="data?.label ? data?.label : data?.placeholder ? data.placeholder : data?.validationLabel"
27
+ [showValidationOnNotTouched]="data?.showValidationOnNotTouched"
28
+ >
29
+ </app-validations-messages>
30
+ </div>
@@ -0,0 +1,33 @@
1
+ import { Component, Input, Output, EventEmitter } from '@angular/core';
2
+
3
+ @Component({
4
+ selector: 'app-element-wrapper',
5
+ templateUrl: './element-wrapper.component.html',
6
+ })
7
+ export class ElementWrapperComponent {
8
+ @Input() data!:any;
9
+ @Input() showCloseIcon!:boolean;
10
+ @Input() focusedFlag!:any;
11
+ @Input() showPassword!:boolean;
12
+ @Input() control!:any;
13
+ @Output() showHidePassword = new EventEmitter<any>();
14
+ @Output() clear = new EventEmitter<any>();
15
+ @Output() increase = new EventEmitter<any>();
16
+ @Output() decrease = new EventEmitter<any>();
17
+
18
+ showHidePasswordFn(event:any): void {
19
+ this.showHidePassword.emit(event);
20
+ }
21
+
22
+ clearFn(): void {
23
+ this.clear.emit();
24
+ }
25
+
26
+ increaseFn(): void {
27
+ this.increase.emit();
28
+ }
29
+
30
+ decreaseFn(): void {
31
+ this.decrease.emit();
32
+ }
33
+ }
@@ -0,0 +1,16 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./element-wrapper.component";
3
+ import * as i2 from "@angular/common";
4
+ import * as i3 from "@angular/forms";
5
+ import * as i4 from "../../ecabs-loading/ecabs-loading.module";
6
+ import * as i5 from "../validation/validation.module";
7
+ import * as i6 from "@angular/material/form-field";
8
+ import * as i7 from "@angular/material/input";
9
+ import * as i8 from "@angular/material/icon";
10
+ import * as i9 from "@angular/material/tooltip";
11
+ import * as i10 from "../hint/hint.module";
12
+ export declare class ElementWrapperModule {
13
+ static ɵfac: i0.ɵɵFactoryDeclaration<ElementWrapperModule, never>;
14
+ static ɵmod: i0.ɵɵNgModuleDeclaration<ElementWrapperModule, [typeof i1.ElementWrapperComponent], [typeof i2.CommonModule, typeof i3.FormsModule, typeof i4.EcabsLoadingModule, typeof i5.ValidationModule, typeof i6.MatFormFieldModule, typeof i7.MatInputModule, typeof i8.MatIconModule, typeof i9.MatTooltipModule, typeof i10.HintModule], [typeof i1.ElementWrapperComponent]>;
15
+ static ɵinj: i0.ɵɵInjectorDeclaration<ElementWrapperModule>;
16
+ }
@@ -0,0 +1,30 @@
1
+
2
+ import { CommonModule } from '@angular/common';
3
+ import { NgModule } from '@angular/core';
4
+ import { FormsModule } from '@angular/forms';
5
+ import { MatFormFieldModule } from '@angular/material/form-field';
6
+ import { MatInputModule } from '@angular/material/input';
7
+
8
+ import { HintModule } from '../hint/hint.module';
9
+ import { ValidationModule } from '../validation/validation.module';
10
+ import { ElementWrapperComponent } from './element-wrapper.component';
11
+ import { MatIconModule } from '@angular/material/icon';
12
+ import { MatTooltipModule } from '@angular/material/tooltip';
13
+ import { EcabsLoadingModule } from '../../ecabs-loading/ecabs-loading.module';
14
+
15
+ @NgModule({
16
+ declarations: [ElementWrapperComponent],
17
+ imports: [
18
+ CommonModule,
19
+ FormsModule,
20
+ EcabsLoadingModule,
21
+ ValidationModule,
22
+ MatFormFieldModule,
23
+ MatInputModule,
24
+ MatIconModule,
25
+ MatTooltipModule,
26
+ HintModule,
27
+ ],
28
+ exports: [ElementWrapperComponent],
29
+ })
30
+ export class ElementWrapperModule {}
@@ -0,0 +1,8 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class HintComponent {
3
+ element: any;
4
+ maxValue: number;
5
+ showHint: boolean;
6
+ static ɵfac: i0.ɵɵFactoryDeclaration<HintComponent, never>;
7
+ static ɵcmp: i0.ɵɵComponentDeclaration<HintComponent, "app-hint", never, { "element": "element"; "maxValue": "maxValue"; "showHint": "showHint"; }, {}, never, never, false>;
8
+ }
@@ -0,0 +1 @@
1
+ <div class="hint" *ngIf="element && showHint">{{ element?.value?.length || 0 }}/{{ this.maxValue }}</div>
File without changes
@@ -0,0 +1,12 @@
1
+ import { Component, Input } from '@angular/core';
2
+
3
+ @Component({
4
+ selector: 'app-hint',
5
+ templateUrl: './hint.component.html',
6
+ styleUrls: ['./hint.component.scss'],
7
+ })
8
+ export class HintComponent {
9
+ @Input() element!:any;
10
+ @Input() maxValue!:number;
11
+ @Input() showHint = false;
12
+ }
@@ -0,0 +1,10 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./hint.component";
3
+ import * as i2 from "@angular/common";
4
+ import * as i3 from "@angular/forms";
5
+ import * as i4 from "@angular/material/form-field";
6
+ export declare class HintModule {
7
+ static ɵfac: i0.ɵɵFactoryDeclaration<HintModule, never>;
8
+ static ɵmod: i0.ɵɵNgModuleDeclaration<HintModule, [typeof i1.HintComponent], [typeof i2.CommonModule, typeof i3.FormsModule, typeof i4.MatFormFieldModule], [typeof i1.HintComponent]>;
9
+ static ɵinj: i0.ɵɵInjectorDeclaration<HintModule>;
10
+ }
@@ -0,0 +1,13 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { NgModule } from '@angular/core';
3
+ import { FormsModule } from '@angular/forms';
4
+ import { MatFormFieldModule } from '@angular/material/form-field';
5
+
6
+ import { HintComponent } from './hint.component';
7
+
8
+ @NgModule({
9
+ declarations: [HintComponent],
10
+ imports: [CommonModule, FormsModule, MatFormFieldModule],
11
+ exports: [HintComponent],
12
+ })
13
+ export class HintModule {}
@@ -0,0 +1,22 @@
1
+ import { OnInit, OnChanges, SimpleChanges } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class ValidationComponent implements OnInit, OnChanges {
4
+ element: any;
5
+ label: string;
6
+ showValidationOnNotTouched: boolean;
7
+ updatedErrors: {
8
+ type: string;
9
+ message: string;
10
+ }[];
11
+ errorMessages: any[];
12
+ private _messages;
13
+ get messages(): any;
14
+ set messages(m: any);
15
+ constructor();
16
+ ngOnChanges(changes: SimpleChanges): void;
17
+ ngOnInit(): void;
18
+ replaceTokens(message: string): string;
19
+ getMessageDetail(key: any): string;
20
+ static ɵfac: i0.ɵɵFactoryDeclaration<ValidationComponent, never>;
21
+ static ɵcmp: i0.ɵɵComponentDeclaration<ValidationComponent, "app-validations-messages", never, { "element": "element"; "label": "label"; "showValidationOnNotTouched": "showValidationOnNotTouched"; "updatedErrors": "updatedErrors"; }, {}, never, never, false>;
22
+ }
@@ -0,0 +1,8 @@
1
+ <div
2
+ class="form-field__validation"
3
+ *ngIf="element && (element?.touched || showValidationOnNotTouched) && element?.invalid"
4
+ >
5
+ <div class="form-field__validation__item" *ngFor="let item of element?.errors | keyvalue">
6
+ {{ getMessageDetail(item.key) }}
7
+ </div>
8
+ </div>
File without changes