nira-falcon 0.0.4 → 0.0.5

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.
@@ -246,6 +246,115 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
246
246
  type: Input
247
247
  }] } });
248
248
 
249
+ function toEnglishDigits(num) {
250
+ if (num === null || num === undefined) {
251
+ return '';
252
+ }
253
+ if (typeof num !== 'string' || num.length === 0)
254
+ return num.toString();
255
+ const faDigits = '۰۱۲۳۴۵۶۷۸۹';
256
+ const arDigits = '٠١٢٣٤٥٦٧٨٩';
257
+ let output = '';
258
+ for (let ipos = 0; ipos < num.length; ipos++) {
259
+ let faIndex = faDigits.indexOf(num[ipos]);
260
+ if (faIndex >= 0) {
261
+ output += faIndex.toString();
262
+ continue;
263
+ }
264
+ let arIndex = arDigits.indexOf(num[ipos]);
265
+ if (arIndex >= 0) {
266
+ output += arIndex.toString();
267
+ continue;
268
+ }
269
+ output += num[ipos];
270
+ }
271
+ return output.replace(/,/g, '');
272
+ }
273
+ function WordifyFa(input, level = 0) {
274
+ if (input === null || input === undefined) {
275
+ return '';
276
+ }
277
+ let num = parseInt(toEnglishDigits(input));
278
+ // convert negative number to positive and get wordify value
279
+ if (num < 0) {
280
+ num = num * -1;
281
+ return 'منفی ' + WordifyFa(num, level);
282
+ }
283
+ if (num === 0) {
284
+ if (level === 0) {
285
+ return 'صفر';
286
+ }
287
+ else {
288
+ return '';
289
+ }
290
+ }
291
+ let result = '';
292
+ const yekan = ['یک', 'دو', 'سه', 'چهار', 'پنج', 'شش', 'هفت', 'هشت', 'نه'], dahgan = ['بیست', 'سی', 'چهل', 'پنجاه', 'شصت', 'هفتاد', 'هشتاد', 'نود'], sadgan = [
293
+ 'یکصد',
294
+ 'دویست',
295
+ 'سیصد',
296
+ 'چهارصد',
297
+ 'پانصد',
298
+ 'ششصد',
299
+ 'هفتصد',
300
+ 'هشتصد',
301
+ 'نهصد',
302
+ ], dah = [
303
+ 'ده',
304
+ 'یازده',
305
+ 'دوازده',
306
+ 'سیزده',
307
+ 'چهارده',
308
+ 'پانزده',
309
+ 'شانزده',
310
+ 'هفده',
311
+ 'هیجده',
312
+ 'نوزده',
313
+ ];
314
+ if (level > 0) {
315
+ result += ' و ';
316
+ level -= 1;
317
+ }
318
+ if (num < 10) {
319
+ result += yekan[num - 1];
320
+ }
321
+ else if (num < 20) {
322
+ result += dah[num - 10];
323
+ }
324
+ else if (num < 100) {
325
+ result += dahgan[Math.floor(num / 10) - 2] + WordifyFa(num % 10, level + 1);
326
+ }
327
+ else if (num < 1000) {
328
+ result +=
329
+ sadgan[Math.floor(num / 100) - 1] + WordifyFa(num % 100, level + 1);
330
+ }
331
+ else if (num < 1000000) {
332
+ result +=
333
+ WordifyFa(Math.floor(num / 1000), level) +
334
+ ' هزار' +
335
+ WordifyFa(num % 1000, level + 1);
336
+ }
337
+ else if (num < 1000000000) {
338
+ result +=
339
+ WordifyFa(Math.floor(num / 1000000), level) +
340
+ ' میلیون' +
341
+ WordifyFa(num % 1000000, level + 1);
342
+ }
343
+ else if (num < 1000000000000) {
344
+ result +=
345
+ WordifyFa(Math.floor(num / 1000000000), level) +
346
+ ' میلیارد' +
347
+ WordifyFa(num % 1000000000, level + 1);
348
+ }
349
+ else if (num < 1000000000000000) {
350
+ result +=
351
+ WordifyFa(Math.floor(num / 1000000000000), level) +
352
+ ' تریلیارد' +
353
+ WordifyFa(num % 1000000000000, level + 1);
354
+ }
355
+ return result;
356
+ }
357
+
249
358
  class PersianDigitsPipe {
250
359
  transform(el) {
251
360
  const persian = {
@@ -284,12 +393,77 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
284
393
  }]
285
394
  }] });
286
395
 
396
+ class CoreNumberComponent {
397
+ constructor() {
398
+ this.number = '';
399
+ this.type = 'number';
400
+ this.canSplitNumbers = false;
401
+ this.canShowWordInToolTip = false;
402
+ this.canShowIRR = false;
403
+ }
404
+ wordifyFa(number) {
405
+ if (number === undefined) {
406
+ return '';
407
+ }
408
+ if (this.type === 'number') {
409
+ if (this.canSplitNumbers) {
410
+ return number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
411
+ }
412
+ else {
413
+ return number;
414
+ }
415
+ }
416
+ else {
417
+ const newNumber = Number(number.toString().replaceAll(',', ''));
418
+ if (newNumber > 10) {
419
+ return WordifyFa(newNumber / 10) + ' تومان ';
420
+ }
421
+ else {
422
+ return WordifyFa(number);
423
+ }
424
+ }
425
+ }
426
+ toolTipText(number) {
427
+ if (this.number === undefined)
428
+ return '';
429
+ if (!this.canShowWordInToolTip)
430
+ return '';
431
+ if (number && +number > 10) {
432
+ return WordifyFa(+number / 10) + ' تومان ';
433
+ }
434
+ else {
435
+ return WordifyFa(number);
436
+ }
437
+ }
438
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CoreNumberComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
439
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CoreNumberComponent, selector: "app-core-number", inputs: { number: "number", type: "type", canSplitNumbers: "canSplitNumbers", canShowWordInToolTip: "canShowWordInToolTip", canShowIRR: "canShowIRR" }, ngImport: i0, template: "<span [title]=\"toolTipText(number)\"\r\n >{{ wordifyFa(number) | persianDigits }} {{ canShowIRR ? \"\u0631\u06CC\u0627\u0644\" : \"\" }}\r\n</span>\r\n", styles: [""], dependencies: [{ kind: "pipe", type: PersianDigitsPipe, name: "persianDigits" }] }); }
440
+ }
441
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CoreNumberComponent, decorators: [{
442
+ type: Component,
443
+ args: [{ selector: 'app-core-number', template: "<span [title]=\"toolTipText(number)\"\r\n >{{ wordifyFa(number) | persianDigits }} {{ canShowIRR ? \"\u0631\u06CC\u0627\u0644\" : \"\" }}\r\n</span>\r\n" }]
444
+ }], propDecorators: { number: [{
445
+ type: Input
446
+ }], type: [{
447
+ type: Input
448
+ }], canSplitNumbers: [{
449
+ type: Input
450
+ }], canShowWordInToolTip: [{
451
+ type: Input
452
+ }], canShowIRR: [{
453
+ type: Input
454
+ }] } });
455
+
287
456
  class CoreInputComponent {
288
457
  constructor() {
289
458
  this.isDisable = false;
459
+ this.canShowWordifyFa = false;
460
+ this.canSplitNumber = false;
461
+ this.canHighlightBackground = false;
462
+ this.maxLength = 2000;
290
463
  this.inputFormControl = new FormControl('', []);
291
464
  this.placeholder = '';
292
465
  this.onChange = new EventEmitter();
466
+ this.onBlurEmit = new EventEmitter();
293
467
  }
294
468
  set type(value) {
295
469
  this.inputType = value;
@@ -303,19 +477,85 @@ class CoreInputComponent {
303
477
  this.inputFormControl.enable();
304
478
  }
305
479
  }
306
- change() {
307
- if (!this.inputFormControl.errors) {
308
- this.onChange.emit(this.inputFormControl.value);
480
+ change(event) {
481
+ this.formatPrice(event.srcElement.value);
482
+ }
483
+ onPaste(event) {
484
+ setTimeout(() => {
485
+ const value = event.srcElement.value;
486
+ this.inputFormControl.markAsTouched();
487
+ this.inputFormControl.setValue(value);
488
+ if (this.inputType === 'number' && this.canSplitNumber) {
489
+ this.onChange.emit(value.replaceAll(',', ''));
490
+ }
491
+ else {
492
+ if (!this.inputFormControl.errors) {
493
+ this.onChange.emit(value);
494
+ }
495
+ }
496
+ }, 10);
497
+ }
498
+ onBlur() {
499
+ if (this.inputType === 'number' && this.canSplitNumber) {
500
+ this.onChange.emit(this.inputFormControl.value.replaceAll(',', ''));
501
+ }
502
+ else {
503
+ if (!this.inputFormControl.errors) {
504
+ this.onChange.emit(this.inputFormControl.value);
505
+ }
506
+ }
507
+ this.onBlurEmit.emit(this.inputFormControl.value);
508
+ console.log(this.inputFormControl);
509
+ }
510
+ onKeyPress() {
511
+ if (this.inputFormControl.value.toString().length == this.maxLength) {
512
+ return false;
513
+ }
514
+ else {
515
+ return true;
516
+ }
517
+ }
518
+ formatPrice(event) {
519
+ if (this.inputType === 'number' && this.canSplitNumber) {
520
+ setTimeout(() => {
521
+ let value = event;
522
+ value = Number(value.replaceAll(',', ''));
523
+ if (isNaN(value)) {
524
+ this.inputFormControl.setValue('');
525
+ }
526
+ else {
527
+ const formatValue = value
528
+ .toString()
529
+ .replace(/\B(?=(\d{3})+(?!\d))/g, ',');
530
+ this.inputFormControl.setValue(formatValue);
531
+ }
532
+ if (!this.inputFormControl.errors) {
533
+ this.onChange.emit(this.inputFormControl.value.replaceAll(',', ''));
534
+ }
535
+ }, 10);
536
+ }
537
+ else {
538
+ if (!this.inputFormControl.errors) {
539
+ this.onChange.emit(this.inputFormControl.value);
540
+ }
309
541
  }
310
542
  }
311
543
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CoreInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
312
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CoreInputComponent, selector: "core-input", inputs: { type: "type", inputFormControl: "inputFormControl", disable: "disable", placeholder: "placeholder" }, outputs: { onChange: "onChange" }, ngImport: i0, template: "<div>\r\n <div\r\n class=\"container-input\"\r\n [ngClass]=\"{\r\n error:\r\n (inputFormControl.touched || inputFormControl.dirty) &&\r\n inputFormControl.errors\r\n }\"\r\n >\r\n <input\r\n [type]=\"inputType\"\r\n class=\"a-input-style\"\r\n (ngModelChange)=\"change()\"\r\n [formControl]=\"inputFormControl\"\r\n [ngClass]=\"{\r\n 'have-value': inputFormControl.value,\r\n 'disable-input': isDisable\r\n }\"\r\n />\r\n <label *ngIf=\"placeholder.length > 0\">{{ placeholder }} </label>\r\n <div class=\"label-error overflow-hidden\">\r\n <span\r\n *ngIf=\"\r\n (inputFormControl.touched || inputFormControl.dirty) &&\r\n inputFormControl.errors?.['required']\r\n \"\r\n >\u0627\u06CC\u0646 \u0641\u06CC\u0644\u062F \u062E\u0627\u0644\u06CC \u0627\u0633\u062A</span\r\n >\r\n <span\r\n *ngIf=\"\r\n (inputFormControl.touched || inputFormControl.dirty) &&\r\n inputFormControl.errors?.['prePayment']\r\n \"\r\n >\u0645\u0628\u0644\u063A \u0635\u062D\u06CC\u062D \u0646\u06CC\u0633\u062A</span\r\n >\r\n <span\r\n *ngIf=\"\r\n (inputFormControl.touched || inputFormControl.dirty) &&\r\n inputFormControl.errors?.['minlength']\r\n \"\r\n >\r\n \u062D\u062F\u0627\u0642\u0644 \u062A\u0639\u062F\u0627\u062F \u06A9\u0627\u0631\u06A9\u062A\u0631\r\n {{inputFormControl.errors?.['minlength'].requiredLength|persianDigits}}\r\n \u0639\u062F\u062F \u0628\u0627\u0634\u062F\r\n </span>\r\n <span\r\n *ngIf=\"\r\n (inputFormControl.touched || inputFormControl.dirty) &&\r\n inputFormControl.errors?.['maxlength']\r\n \"\r\n >\r\n \u062D\u062F\u0627\u06A9\u062B\u0631 \u062A\u0639\u062F\u0627\u062F \u06A9\u0627\u0631\u06A9\u062A\u0631\r\n {{inputFormControl.errors?.['maxlength'].requiredLength |persianDigits}}\r\n \u0639\u062F\u062F \u0628\u0627\u0634\u062F\r\n </span>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".container{position:relative}input:focus{border:2px solid var(--blue-input-focus-color)}input{border:1px solid var(--blue-input-border-color);border-radius:.25rem}.icon-style{position:absolute;right:16px;top:16px;cursor:pointer;font-size:16px}.icon-style-email{position:absolute;right:16px;top:16px}.a-input-style{height:42px;width:100%;padding:16px;outline:none;caret-color:#020202b3;background-color:#f2f4f726;color:#000000b3;box-sizing:border-box}.a-input-style:focus{background-color:#f2f4f70d;border-radius:3px;border:1px solid rgba(19,92,175,.397)}.a-input-style::placeholder{height:15px;font-style:normal;font-weight:400;font-size:12px;line-height:15px;letter-spacing:-.03em;color:var(--default-input-placeholder-color)}input:-webkit-autofill,input:-webkit-autofill:hover,input:-webkit-autofill:focus{-webkit-text-fill-color:rgba(255,255,255,0)}input:-webkit-autofill.have-value,input:-webkit-autofill:hover.have-value,input:-webkit-autofill:focus.have-value{-webkit-text-fill-color:#181818!important}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}.label-error{color:var(--red-input-validation-color);font-size:13px;margin-block-start:4px;min-height:21px;width:100%;display:inline-block!important;text-align:start}.error input{border:1px solid var(--red-input-validation-color)}.container-input{background:var(--default-input-background-color);position:relative}.container-input .disable-input{background-color:var(--default-input-disable-background-color);border:1px dashed var(--default-input-disable-border-color);cursor:no-drop}.container-input label{position:absolute;right:20px;top:12px;color:var(--default-input-label-color);font-size:12px;padding:0 8px;border-radius:15px;pointer-events:none;transition:.2s}.container-input input:focus+label,.container-input input.have-value+label{top:-10px;font-size:10px;z-index:3}.container-input input:focus+label:after,.container-input input.have-value+label:after{content:\"\";display:block;background:#fff;position:absolute;width:100%;height:1px;top:10px;right:0;transition:.3s;z-index:-1}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.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: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: PersianDigitsPipe, name: "persianDigits" }] }); }
544
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CoreInputComponent, selector: "core-input", inputs: { type: "type", canShowWordifyFa: "canShowWordifyFa", canSplitNumber: "canSplitNumber", canHighlightBackground: "canHighlightBackground", maxLength: "maxLength", inputFormControl: "inputFormControl", disable: "disable", placeholder: "placeholder" }, outputs: { onChange: "onChange", onBlurEmit: "onBlurEmit" }, ngImport: i0, template: "<div>\r\n <div\r\n class=\"container-input\"\r\n [ngClass]=\"{\r\n error:\r\n (inputFormControl.touched || inputFormControl.dirty) &&\r\n inputFormControl.errors\r\n }\"\r\n >\r\n <input\r\n [type]=\"'text'\"\r\n class=\"a-input-style\"\r\n [formControl]=\"inputFormControl\"\r\n (blur)=\"onBlur()\"\r\n (keyup)=\"change($event)\"\r\n (paste)=\"onPaste($event)\"\r\n [ngClass]=\"{\r\n 'have-value': inputFormControl.value.toString().length > 0,\r\n 'highlight-background':\r\n canHighlightBackground &&\r\n inputFormControl.value.toString().length === 0 &&\r\n !(\r\n (inputFormControl.touched || inputFormControl.dirty) &&\r\n inputFormControl.errors\r\n ),\r\n 'disable-input': isDisable\r\n }\"\r\n (keypress)=\"onKeyPress()\"\r\n />\r\n <label *ngIf=\"placeholder.length > 0\">{{ placeholder }} </label>\r\n <div class=\"label-error overflow-hidden\">\r\n <span\r\n class=\"label-number\"\r\n *ngIf=\"\r\n canShowWordifyFa &&\r\n inputFormControl.value.toString().length > 0 &&\r\n inputType === 'number'\r\n \"\r\n ><app-core-number\r\n [canShowWordInToolTip]=\"false\"\r\n [type]=\"'word'\"\r\n [number]=\"inputFormControl.value\"\r\n ></app-core-number\r\n ></span>\r\n\r\n <span\r\n *ngIf=\"\r\n (inputFormControl.touched || inputFormControl.dirty) &&\r\n inputFormControl.errors?.['required']\r\n \"\r\n >\u0627\u06CC\u0646 \u0641\u06CC\u0644\u062F \u062E\u0627\u0644\u06CC \u0627\u0633\u062A</span\r\n >\r\n <span\r\n *ngIf=\"\r\n (inputFormControl.touched || inputFormControl.dirty) &&\r\n inputFormControl.errors?.['prePayment']\r\n \"\r\n >\u0645\u0628\u0644\u063A \u0635\u062D\u06CC\u062D \u0646\u06CC\u0633\u062A</span\r\n >\r\n <span\r\n *ngIf=\"\r\n (inputFormControl.touched || inputFormControl.dirty) &&\r\n inputFormControl.errors?.['minlength']\r\n \"\r\n >\r\n \u062D\u062F\u0627\u0642\u0644 \u062A\u0639\u062F\u0627\u062F \u06A9\u0627\u0631\u06A9\u062A\u0631\r\n {{inputFormControl.errors?.['minlength'].requiredLength|persianDigits}}\r\n \u0639\u062F\u062F \u0628\u0627\u0634\u062F\r\n </span>\r\n <span\r\n *ngIf=\"\r\n (inputFormControl.touched || inputFormControl.dirty) &&\r\n inputFormControl.errors?.['maxlength']\r\n \"\r\n >\r\n \u062D\u062F\u0627\u06A9\u062B\u0631 \u062A\u0639\u062F\u0627\u062F \u06A9\u0627\u0631\u06A9\u062A\u0631\r\n {{inputFormControl.errors?.['maxlength'].requiredLength |persianDigits}}\r\n \u0639\u062F\u062F \u0628\u0627\u0634\u062F\r\n </span>\r\n <span\r\n *ngIf=\"\r\n (inputFormControl.touched || inputFormControl.dirty) &&\r\n inputFormControl.errors?.['pattern']?.requiredPattern=='^09[0-9]{9}$'\r\n \"\r\n >\r\n \u0634\u0645\u0627\u0631\u0647 \u0647\u0645\u0631\u0627\u0647 \u0627\u0634\u062A\u0628\u0627\u0647 \u0647\u0633\u062A\r\n </span>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".container{position:relative}input:focus{border:2px solid blue}input{border:1px solid #ced4da;border-radius:.25rem}.highlight-background{background-color:#dcf6ff!important}.icon-style{position:absolute;right:16px;top:16px;cursor:pointer;font-size:16px}.icon-style-email{position:absolute;right:16px;top:16px}.a-input-style{height:42px;width:100%;padding:16px;outline:none;caret-color:#020202b3;background-color:#f2f4f726;color:#000000b3;box-sizing:border-box}.a-input-style:focus{background-color:#f2f4f70d;border-radius:3px;border:1px solid rgba(19,92,175,.397)}.a-input-style::placeholder{height:15px;font-style:normal;font-weight:400;font-size:12px;line-height:15px;letter-spacing:-.03em;color:#c2c2c2b3}input:-webkit-autofill,input:-webkit-autofill:hover,input:-webkit-autofill:focus{-webkit-text-fill-color:rgba(255,255,255,0)}input:-webkit-autofill.have-value,input:-webkit-autofill:hover.have-value,input:-webkit-autofill:focus.have-value{-webkit-text-fill-color:#181818!important}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}.label-error{color:red;font-size:13px;margin-block-start:4px;min-height:21px;width:100%;display:inline-block!important;text-align:start}.label-number{color:#6a6a6a}.error input{border:1px solid #fe5f5f}.container-input{background:#fff;position:relative}.container-input .disable-input{background-color:#f7f7f7;border:1px dashed #ced4da;pointer-events:none}.container-input label{position:absolute;right:20px;top:12px;color:gray;font-size:12px;padding:0 8px;border-radius:15px;pointer-events:none;transition:.2s}.container-input input:focus+label,.container-input input.have-value+label{top:-10px;font-size:10px;z-index:3}.container-input input:focus+label:after,.container-input input.have-value+label:after{content:\"\";display:block;background:#fff;position:absolute;width:100%;height:1px;top:10px;right:0;transition:.3s;z-index:-1}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.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: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: CoreNumberComponent, selector: "app-core-number", inputs: ["number", "type", "canSplitNumbers", "canShowWordInToolTip", "canShowIRR"] }, { kind: "pipe", type: PersianDigitsPipe, name: "persianDigits" }] }); }
313
545
  }
314
546
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CoreInputComponent, decorators: [{
315
547
  type: Component,
316
- args: [{ selector: 'core-input', template: "<div>\r\n <div\r\n class=\"container-input\"\r\n [ngClass]=\"{\r\n error:\r\n (inputFormControl.touched || inputFormControl.dirty) &&\r\n inputFormControl.errors\r\n }\"\r\n >\r\n <input\r\n [type]=\"inputType\"\r\n class=\"a-input-style\"\r\n (ngModelChange)=\"change()\"\r\n [formControl]=\"inputFormControl\"\r\n [ngClass]=\"{\r\n 'have-value': inputFormControl.value,\r\n 'disable-input': isDisable\r\n }\"\r\n />\r\n <label *ngIf=\"placeholder.length > 0\">{{ placeholder }} </label>\r\n <div class=\"label-error overflow-hidden\">\r\n <span\r\n *ngIf=\"\r\n (inputFormControl.touched || inputFormControl.dirty) &&\r\n inputFormControl.errors?.['required']\r\n \"\r\n >\u0627\u06CC\u0646 \u0641\u06CC\u0644\u062F \u062E\u0627\u0644\u06CC \u0627\u0633\u062A</span\r\n >\r\n <span\r\n *ngIf=\"\r\n (inputFormControl.touched || inputFormControl.dirty) &&\r\n inputFormControl.errors?.['prePayment']\r\n \"\r\n >\u0645\u0628\u0644\u063A \u0635\u062D\u06CC\u062D \u0646\u06CC\u0633\u062A</span\r\n >\r\n <span\r\n *ngIf=\"\r\n (inputFormControl.touched || inputFormControl.dirty) &&\r\n inputFormControl.errors?.['minlength']\r\n \"\r\n >\r\n \u062D\u062F\u0627\u0642\u0644 \u062A\u0639\u062F\u0627\u062F \u06A9\u0627\u0631\u06A9\u062A\u0631\r\n {{inputFormControl.errors?.['minlength'].requiredLength|persianDigits}}\r\n \u0639\u062F\u062F \u0628\u0627\u0634\u062F\r\n </span>\r\n <span\r\n *ngIf=\"\r\n (inputFormControl.touched || inputFormControl.dirty) &&\r\n inputFormControl.errors?.['maxlength']\r\n \"\r\n >\r\n \u062D\u062F\u0627\u06A9\u062B\u0631 \u062A\u0639\u062F\u0627\u062F \u06A9\u0627\u0631\u06A9\u062A\u0631\r\n {{inputFormControl.errors?.['maxlength'].requiredLength |persianDigits}}\r\n \u0639\u062F\u062F \u0628\u0627\u0634\u062F\r\n </span>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".container{position:relative}input:focus{border:2px solid var(--blue-input-focus-color)}input{border:1px solid var(--blue-input-border-color);border-radius:.25rem}.icon-style{position:absolute;right:16px;top:16px;cursor:pointer;font-size:16px}.icon-style-email{position:absolute;right:16px;top:16px}.a-input-style{height:42px;width:100%;padding:16px;outline:none;caret-color:#020202b3;background-color:#f2f4f726;color:#000000b3;box-sizing:border-box}.a-input-style:focus{background-color:#f2f4f70d;border-radius:3px;border:1px solid rgba(19,92,175,.397)}.a-input-style::placeholder{height:15px;font-style:normal;font-weight:400;font-size:12px;line-height:15px;letter-spacing:-.03em;color:var(--default-input-placeholder-color)}input:-webkit-autofill,input:-webkit-autofill:hover,input:-webkit-autofill:focus{-webkit-text-fill-color:rgba(255,255,255,0)}input:-webkit-autofill.have-value,input:-webkit-autofill:hover.have-value,input:-webkit-autofill:focus.have-value{-webkit-text-fill-color:#181818!important}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}.label-error{color:var(--red-input-validation-color);font-size:13px;margin-block-start:4px;min-height:21px;width:100%;display:inline-block!important;text-align:start}.error input{border:1px solid var(--red-input-validation-color)}.container-input{background:var(--default-input-background-color);position:relative}.container-input .disable-input{background-color:var(--default-input-disable-background-color);border:1px dashed var(--default-input-disable-border-color);cursor:no-drop}.container-input label{position:absolute;right:20px;top:12px;color:var(--default-input-label-color);font-size:12px;padding:0 8px;border-radius:15px;pointer-events:none;transition:.2s}.container-input input:focus+label,.container-input input.have-value+label{top:-10px;font-size:10px;z-index:3}.container-input input:focus+label:after,.container-input input.have-value+label:after{content:\"\";display:block;background:#fff;position:absolute;width:100%;height:1px;top:10px;right:0;transition:.3s;z-index:-1}\n"] }]
548
+ args: [{ selector: 'core-input', template: "<div>\r\n <div\r\n class=\"container-input\"\r\n [ngClass]=\"{\r\n error:\r\n (inputFormControl.touched || inputFormControl.dirty) &&\r\n inputFormControl.errors\r\n }\"\r\n >\r\n <input\r\n [type]=\"'text'\"\r\n class=\"a-input-style\"\r\n [formControl]=\"inputFormControl\"\r\n (blur)=\"onBlur()\"\r\n (keyup)=\"change($event)\"\r\n (paste)=\"onPaste($event)\"\r\n [ngClass]=\"{\r\n 'have-value': inputFormControl.value.toString().length > 0,\r\n 'highlight-background':\r\n canHighlightBackground &&\r\n inputFormControl.value.toString().length === 0 &&\r\n !(\r\n (inputFormControl.touched || inputFormControl.dirty) &&\r\n inputFormControl.errors\r\n ),\r\n 'disable-input': isDisable\r\n }\"\r\n (keypress)=\"onKeyPress()\"\r\n />\r\n <label *ngIf=\"placeholder.length > 0\">{{ placeholder }} </label>\r\n <div class=\"label-error overflow-hidden\">\r\n <span\r\n class=\"label-number\"\r\n *ngIf=\"\r\n canShowWordifyFa &&\r\n inputFormControl.value.toString().length > 0 &&\r\n inputType === 'number'\r\n \"\r\n ><app-core-number\r\n [canShowWordInToolTip]=\"false\"\r\n [type]=\"'word'\"\r\n [number]=\"inputFormControl.value\"\r\n ></app-core-number\r\n ></span>\r\n\r\n <span\r\n *ngIf=\"\r\n (inputFormControl.touched || inputFormControl.dirty) &&\r\n inputFormControl.errors?.['required']\r\n \"\r\n >\u0627\u06CC\u0646 \u0641\u06CC\u0644\u062F \u062E\u0627\u0644\u06CC \u0627\u0633\u062A</span\r\n >\r\n <span\r\n *ngIf=\"\r\n (inputFormControl.touched || inputFormControl.dirty) &&\r\n inputFormControl.errors?.['prePayment']\r\n \"\r\n >\u0645\u0628\u0644\u063A \u0635\u062D\u06CC\u062D \u0646\u06CC\u0633\u062A</span\r\n >\r\n <span\r\n *ngIf=\"\r\n (inputFormControl.touched || inputFormControl.dirty) &&\r\n inputFormControl.errors?.['minlength']\r\n \"\r\n >\r\n \u062D\u062F\u0627\u0642\u0644 \u062A\u0639\u062F\u0627\u062F \u06A9\u0627\u0631\u06A9\u062A\u0631\r\n {{inputFormControl.errors?.['minlength'].requiredLength|persianDigits}}\r\n \u0639\u062F\u062F \u0628\u0627\u0634\u062F\r\n </span>\r\n <span\r\n *ngIf=\"\r\n (inputFormControl.touched || inputFormControl.dirty) &&\r\n inputFormControl.errors?.['maxlength']\r\n \"\r\n >\r\n \u062D\u062F\u0627\u06A9\u062B\u0631 \u062A\u0639\u062F\u0627\u062F \u06A9\u0627\u0631\u06A9\u062A\u0631\r\n {{inputFormControl.errors?.['maxlength'].requiredLength |persianDigits}}\r\n \u0639\u062F\u062F \u0628\u0627\u0634\u062F\r\n </span>\r\n <span\r\n *ngIf=\"\r\n (inputFormControl.touched || inputFormControl.dirty) &&\r\n inputFormControl.errors?.['pattern']?.requiredPattern=='^09[0-9]{9}$'\r\n \"\r\n >\r\n \u0634\u0645\u0627\u0631\u0647 \u0647\u0645\u0631\u0627\u0647 \u0627\u0634\u062A\u0628\u0627\u0647 \u0647\u0633\u062A\r\n </span>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".container{position:relative}input:focus{border:2px solid blue}input{border:1px solid #ced4da;border-radius:.25rem}.highlight-background{background-color:#dcf6ff!important}.icon-style{position:absolute;right:16px;top:16px;cursor:pointer;font-size:16px}.icon-style-email{position:absolute;right:16px;top:16px}.a-input-style{height:42px;width:100%;padding:16px;outline:none;caret-color:#020202b3;background-color:#f2f4f726;color:#000000b3;box-sizing:border-box}.a-input-style:focus{background-color:#f2f4f70d;border-radius:3px;border:1px solid rgba(19,92,175,.397)}.a-input-style::placeholder{height:15px;font-style:normal;font-weight:400;font-size:12px;line-height:15px;letter-spacing:-.03em;color:#c2c2c2b3}input:-webkit-autofill,input:-webkit-autofill:hover,input:-webkit-autofill:focus{-webkit-text-fill-color:rgba(255,255,255,0)}input:-webkit-autofill.have-value,input:-webkit-autofill:hover.have-value,input:-webkit-autofill:focus.have-value{-webkit-text-fill-color:#181818!important}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}.label-error{color:red;font-size:13px;margin-block-start:4px;min-height:21px;width:100%;display:inline-block!important;text-align:start}.label-number{color:#6a6a6a}.error input{border:1px solid #fe5f5f}.container-input{background:#fff;position:relative}.container-input .disable-input{background-color:#f7f7f7;border:1px dashed #ced4da;pointer-events:none}.container-input label{position:absolute;right:20px;top:12px;color:gray;font-size:12px;padding:0 8px;border-radius:15px;pointer-events:none;transition:.2s}.container-input input:focus+label,.container-input input.have-value+label{top:-10px;font-size:10px;z-index:3}.container-input input:focus+label:after,.container-input input.have-value+label:after{content:\"\";display:block;background:#fff;position:absolute;width:100%;height:1px;top:10px;right:0;transition:.3s;z-index:-1}\n"] }]
317
549
  }], propDecorators: { type: [{
318
550
  type: Input
551
+ }], canShowWordifyFa: [{
552
+ type: Input
553
+ }], canSplitNumber: [{
554
+ type: Input
555
+ }], canHighlightBackground: [{
556
+ type: Input
557
+ }], maxLength: [{
558
+ type: Input
319
559
  }], inputFormControl: [{
320
560
  type: Input
321
561
  }], disable: [{
@@ -324,6 +564,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
324
564
  type: Input
325
565
  }], onChange: [{
326
566
  type: Output
567
+ }], onBlurEmit: [{
568
+ type: Output
327
569
  }] } });
328
570
 
329
571
  class CoreDatePickerComponent {
@@ -358,7 +600,7 @@ class CoreDatePickerComponent {
358
600
  });
359
601
  }
360
602
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CoreDatePickerComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
361
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CoreDatePickerComponent, selector: "core-date-picker", inputs: { canSelectToday: "canSelectToday", defaultDate: "defaultDate", label: "label", inputFormControl: "inputFormControl" }, ngImport: i0, template: "<core-input\r\n [placeholder]=\"label\"\r\n [inputFormControl]=\"inputFormControl\"\r\n (click)=\"isOpenCalendar = true\"\r\n>\r\n</core-input>\r\n<lib-nira-date-picker\r\n [(isOpenCalendar)]=\"isOpenCalendar\"\r\n [defaultDate]=\"date ? date : defaultDate\"\r\n (datePickerResult)=\"onDatePickerResult($event)\"\r\n [selectToday]=\"canSelectToday\"\r\n (todayDate)=\"onTodayDate($event)\"\r\n>\r\n</lib-nira-date-picker>\r\n", styles: [""], dependencies: [{ kind: "component", type: i1$3.NiraDatePickerComponent, selector: "lib-nira-date-picker", inputs: ["selectToday", "disable", "changableYears", "theme", "defaultDate", "isOpenCalendar"], outputs: ["isOpenCalendarChange", "todayDate", "datePickerResult"] }, { kind: "component", type: CoreInputComponent, selector: "core-input", inputs: ["type", "inputFormControl", "disable", "placeholder"], outputs: ["onChange"] }] }); }
603
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CoreDatePickerComponent, selector: "core-date-picker", inputs: { canSelectToday: "canSelectToday", defaultDate: "defaultDate", label: "label", inputFormControl: "inputFormControl" }, ngImport: i0, template: "<core-input\r\n [placeholder]=\"label\"\r\n [inputFormControl]=\"inputFormControl\"\r\n (click)=\"isOpenCalendar = true\"\r\n>\r\n</core-input>\r\n<lib-nira-date-picker\r\n [(isOpenCalendar)]=\"isOpenCalendar\"\r\n [defaultDate]=\"date ? date : defaultDate\"\r\n (datePickerResult)=\"onDatePickerResult($event)\"\r\n [selectToday]=\"canSelectToday\"\r\n (todayDate)=\"onTodayDate($event)\"\r\n>\r\n</lib-nira-date-picker>\r\n", styles: [""], dependencies: [{ kind: "component", type: i1$3.NiraDatePickerComponent, selector: "lib-nira-date-picker", inputs: ["selectToday", "disable", "changableYears", "theme", "defaultDate", "isOpenCalendar"], outputs: ["isOpenCalendarChange", "todayDate", "datePickerResult"] }, { kind: "component", type: CoreInputComponent, selector: "core-input", inputs: ["type", "canShowWordifyFa", "canSplitNumber", "canHighlightBackground", "maxLength", "inputFormControl", "disable", "placeholder"], outputs: ["onChange", "onBlurEmit"] }] }); }
362
604
  }
363
605
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CoreDatePickerComponent, decorators: [{
364
606
  type: Component,
@@ -1056,175 +1298,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1056
1298
  args: [{ required: true }]
1057
1299
  }] } });
1058
1300
 
1059
- function toEnglishDigits(num) {
1060
- if (num === null || num === undefined) {
1061
- return '';
1062
- }
1063
- if (typeof num !== 'string' || num.length === 0)
1064
- return num.toString();
1065
- const faDigits = '۰۱۲۳۴۵۶۷۸۹';
1066
- const arDigits = '٠١٢٣٤٥٦٧٨٩';
1067
- let output = '';
1068
- for (let ipos = 0; ipos < num.length; ipos++) {
1069
- let faIndex = faDigits.indexOf(num[ipos]);
1070
- if (faIndex >= 0) {
1071
- output += faIndex.toString();
1072
- continue;
1073
- }
1074
- let arIndex = arDigits.indexOf(num[ipos]);
1075
- if (arIndex >= 0) {
1076
- output += arIndex.toString();
1077
- continue;
1078
- }
1079
- output += num[ipos];
1080
- }
1081
- return output.replace(/,/g, '');
1082
- }
1083
- function WordifyFa(input, level = 0) {
1084
- if (input === null || input === undefined) {
1085
- return '';
1086
- }
1087
- let num = parseInt(toEnglishDigits(input));
1088
- // convert negative number to positive and get wordify value
1089
- if (num < 0) {
1090
- num = num * -1;
1091
- return 'منفی ' + WordifyFa(num, level);
1092
- }
1093
- if (num === 0) {
1094
- if (level === 0) {
1095
- return 'صفر';
1096
- }
1097
- else {
1098
- return '';
1099
- }
1100
- }
1101
- let result = '';
1102
- const yekan = ['یک', 'دو', 'سه', 'چهار', 'پنج', 'شش', 'هفت', 'هشت', 'نه'], dahgan = ['بیست', 'سی', 'چهل', 'پنجاه', 'شصت', 'هفتاد', 'هشتاد', 'نود'], sadgan = [
1103
- 'یکصد',
1104
- 'دویست',
1105
- 'سیصد',
1106
- 'چهارصد',
1107
- 'پانصد',
1108
- 'ششصد',
1109
- 'هفتصد',
1110
- 'هشتصد',
1111
- 'نهصد',
1112
- ], dah = [
1113
- 'ده',
1114
- 'یازده',
1115
- 'دوازده',
1116
- 'سیزده',
1117
- 'چهارده',
1118
- 'پانزده',
1119
- 'شانزده',
1120
- 'هفده',
1121
- 'هیجده',
1122
- 'نوزده',
1123
- ];
1124
- if (level > 0) {
1125
- result += ' و ';
1126
- level -= 1;
1127
- }
1128
- if (num < 10) {
1129
- result += yekan[num - 1];
1130
- }
1131
- else if (num < 20) {
1132
- result += dah[num - 10];
1133
- }
1134
- else if (num < 100) {
1135
- result += dahgan[Math.floor(num / 10) - 2] + WordifyFa(num % 10, level + 1);
1136
- }
1137
- else if (num < 1000) {
1138
- result +=
1139
- sadgan[Math.floor(num / 100) - 1] + WordifyFa(num % 100, level + 1);
1140
- }
1141
- else if (num < 1000000) {
1142
- result +=
1143
- WordifyFa(Math.floor(num / 1000), level) +
1144
- ' هزار' +
1145
- WordifyFa(num % 1000, level + 1);
1146
- }
1147
- else if (num < 1000000000) {
1148
- result +=
1149
- WordifyFa(Math.floor(num / 1000000), level) +
1150
- ' میلیون' +
1151
- WordifyFa(num % 1000000, level + 1);
1152
- }
1153
- else if (num < 1000000000000) {
1154
- result +=
1155
- WordifyFa(Math.floor(num / 1000000000), level) +
1156
- ' میلیارد' +
1157
- WordifyFa(num % 1000000000, level + 1);
1158
- }
1159
- else if (num < 1000000000000000) {
1160
- result +=
1161
- WordifyFa(Math.floor(num / 1000000000000), level) +
1162
- ' تریلیارد' +
1163
- WordifyFa(num % 1000000000000, level + 1);
1164
- }
1165
- return result;
1166
- }
1167
-
1168
- class CoreNumberComponent {
1169
- constructor() {
1170
- this.number = '';
1171
- this.type = 'number';
1172
- this.canSplitNumbers = false;
1173
- this.canShowWordInToolTip = false;
1174
- this.canShowIRR = false;
1175
- }
1176
- wordifyFa(number) {
1177
- if (number === undefined) {
1178
- return '';
1179
- }
1180
- if (this.type === 'number') {
1181
- if (this.canSplitNumbers) {
1182
- return number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
1183
- }
1184
- else {
1185
- return number;
1186
- }
1187
- }
1188
- else {
1189
- const newNumber = Number(number.toString().replaceAll(',', ''));
1190
- if (newNumber > 10) {
1191
- return WordifyFa(newNumber / 10) + ' تومان ';
1192
- }
1193
- else {
1194
- return WordifyFa(number);
1195
- }
1196
- }
1197
- }
1198
- toolTipText(number) {
1199
- if (this.number === undefined)
1200
- return '';
1201
- if (!this.canShowWordInToolTip)
1202
- return '';
1203
- if (number && +number > 10) {
1204
- return WordifyFa(+number / 10) + ' تومان ';
1205
- }
1206
- else {
1207
- return WordifyFa(number);
1208
- }
1209
- }
1210
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CoreNumberComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1211
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CoreNumberComponent, selector: "app-core-number", inputs: { number: "number", type: "type", canSplitNumbers: "canSplitNumbers", canShowWordInToolTip: "canShowWordInToolTip", canShowIRR: "canShowIRR" }, ngImport: i0, template: "<span [title]=\"toolTipText(number)\"\r\n >{{ wordifyFa(number) | persianDigits }} {{ canShowIRR ? \"\u0631\u06CC\u0627\u0644\" : \"\" }}\r\n</span>\r\n", styles: [""], dependencies: [{ kind: "pipe", type: PersianDigitsPipe, name: "persianDigits" }] }); }
1212
- }
1213
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CoreNumberComponent, decorators: [{
1214
- type: Component,
1215
- args: [{ selector: 'app-core-number', template: "<span [title]=\"toolTipText(number)\"\r\n >{{ wordifyFa(number) | persianDigits }} {{ canShowIRR ? \"\u0631\u06CC\u0627\u0644\" : \"\" }}\r\n</span>\r\n" }]
1216
- }], propDecorators: { number: [{
1217
- type: Input
1218
- }], type: [{
1219
- type: Input
1220
- }], canSplitNumbers: [{
1221
- type: Input
1222
- }], canShowWordInToolTip: [{
1223
- type: Input
1224
- }], canShowIRR: [{
1225
- type: Input
1226
- }] } });
1227
-
1228
1301
  class CaretUpIconComponent {
1229
1302
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CaretUpIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1230
1303
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CaretUpIconComponent, selector: "app-caret-up-icon", ngImport: i0, template: "<svg\r\n class=\"svg-inline--fa fa-caret-up fa-w-10 me-1\"\r\n aria-hidden=\"true\"\r\n focusable=\"false\"\r\n data-prefix=\"fas\"\r\n data-icon=\"caret-up\"\r\n role=\"img\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 320 512\"\r\n data-fa-i2svg=\"\"\r\n>\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M288.662 352H31.338c-17.818 0-26.741-21.543-14.142-34.142l128.662-128.662c7.81-7.81 20.474-7.81 28.284 0l128.662 128.662c12.6 12.599 3.676 34.142-14.142 34.142z\"\r\n ></path>\r\n</svg>\r\n", styles: [""] }); }