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.
- package/esm2022/lib/core-date-picker/core-date-picker.component.mjs +1 -1
- package/esm2022/lib/core-input/core-input.component.mjs +81 -7
- package/fesm2022/nira-falcon.mjs +248 -175
- package/fesm2022/nira-falcon.mjs.map +1 -1
- package/lib/core-input/core-input.component.d.ts +11 -2
- package/package.json +1 -1
- package/esm2022/utils/types.mjs +0 -2
- package/utils/types.d.ts +0 -10
package/fesm2022/nira-falcon.mjs
CHANGED
|
@@ -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
|
-
|
|
308
|
-
|
|
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]=\"
|
|
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]=\"
|
|
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: [""] }); }
|