@acorex/core 7.5.0 → 7.8.0

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 (70) hide show
  1. package/dateTime/index.d.ts +1 -0
  2. package/dateTime/lib/calendar.service.d.ts +8 -0
  3. package/dateTime/lib/georgian.calendar.d.ts +2 -2
  4. package/dateTime/lib/holidays.loader.d.ts +21 -0
  5. package/esm2022/config/lib/configs.mjs +2 -2
  6. package/esm2022/config/lib/configs.service.mjs +2 -2
  7. package/esm2022/dateTime/index.mjs +2 -1
  8. package/esm2022/dateTime/lib/calendar.service.mjs +25 -7
  9. package/esm2022/dateTime/lib/dateTime.config.mjs +33 -25
  10. package/esm2022/dateTime/lib/datetime.class.mjs +1 -1
  11. package/esm2022/dateTime/lib/datetime.module.mjs +2 -2
  12. package/esm2022/dateTime/lib/datetime.pipe.mjs +1 -1
  13. package/esm2022/dateTime/lib/georgian.calendar.mjs +40 -44
  14. package/esm2022/dateTime/lib/holidays.loader.mjs +13 -0
  15. package/esm2022/dateTime/lib/jalali.calendar.mjs +21 -25
  16. package/esm2022/events/lib/event.service.mjs +4 -4
  17. package/esm2022/file/lib/file-download-ref.class.mjs +1 -1
  18. package/esm2022/file/lib/file-download-result.class.mjs +3 -3
  19. package/esm2022/file/lib/file-upload-ref.class.mjs +1 -1
  20. package/esm2022/file/lib/file.service.mjs +8 -10
  21. package/esm2022/image/lib/image.service.mjs +9 -9
  22. package/esm2022/intl/lib/numbers/number-format-options.mjs +3 -3
  23. package/esm2022/intl/lib/numbers/numbers-utils.mjs +5 -5
  24. package/esm2022/pipes/lib/pipes.module.mjs +2 -2
  25. package/esm2022/pipes/lib/safe.pipe.mjs +15 -9
  26. package/esm2022/translation/lib/translation.module.mjs +1 -1
  27. package/esm2022/translation/lib/translator.pipe.mjs +1 -1
  28. package/esm2022/utils/lib/color-util.mjs +2 -2
  29. package/esm2022/utils/lib/drawing-util.mjs +6 -3
  30. package/esm2022/utils/lib/string-util.mjs +2 -2
  31. package/fesm2022/acorex-core-config.mjs +1 -1
  32. package/fesm2022/acorex-core-config.mjs.map +1 -1
  33. package/fesm2022/acorex-core-dateTime.mjs +271 -242
  34. package/fesm2022/acorex-core-dateTime.mjs.map +1 -1
  35. package/fesm2022/acorex-core-events.mjs +3 -3
  36. package/fesm2022/acorex-core-events.mjs.map +1 -1
  37. package/fesm2022/acorex-core-file.mjs +9 -11
  38. package/fesm2022/acorex-core-file.mjs.map +1 -1
  39. package/fesm2022/acorex-core-image.mjs +8 -8
  40. package/fesm2022/acorex-core-image.mjs.map +1 -1
  41. package/fesm2022/acorex-core-intl.mjs +5 -5
  42. package/fesm2022/acorex-core-intl.mjs.map +1 -1
  43. package/fesm2022/acorex-core-pipes.mjs +14 -8
  44. package/fesm2022/acorex-core-pipes.mjs.map +1 -1
  45. package/fesm2022/acorex-core-translation.mjs.map +1 -1
  46. package/fesm2022/acorex-core-utils.mjs +7 -4
  47. package/fesm2022/acorex-core-utils.mjs.map +1 -1
  48. package/file/lib/file-download-ref.class.d.ts +1 -1
  49. package/image/lib/image.service.d.ts +0 -1
  50. package/intl/lib/numbers/numbers-utils.d.ts +1 -1
  51. package/package.json +1 -7
  52. package/pipes/lib/safe.pipe.d.ts +1 -1
  53. package/esm2022/http/acorex-core-http.mjs +0 -5
  54. package/esm2022/http/index.mjs +0 -7
  55. package/esm2022/http/lib/http-error.class.mjs +0 -2
  56. package/esm2022/http/lib/http-events.interceptor.mjs +0 -3
  57. package/esm2022/http/lib/http-request.class.mjs +0 -2
  58. package/esm2022/http/lib/http-result.class.mjs +0 -21
  59. package/esm2022/http/lib/http.module.mjs +0 -29
  60. package/esm2022/http/lib/http.service.mjs +0 -148
  61. package/fesm2022/acorex-core-http.mjs +0 -201
  62. package/fesm2022/acorex-core-http.mjs.map +0 -1
  63. package/http/README.md +0 -3
  64. package/http/index.d.ts +0 -6
  65. package/http/lib/http-error.class.d.ts +0 -7
  66. package/http/lib/http-events.interceptor.d.ts +0 -10
  67. package/http/lib/http-request.class.d.ts +0 -14
  68. package/http/lib/http-result.class.d.ts +0 -11
  69. package/http/lib/http.module.d.ts +0 -8
  70. package/http/lib/http.service.d.ts +0 -23
@@ -1,7 +1,20 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { InjectionToken, inject, Injectable, Pipe, NgModule } from '@angular/core';
3
- import { orderBy, set } from 'lodash-es';
4
3
  import { AX_GLOBAL_CONFIG } from '@acorex/core/config';
4
+ import { orderBy, set } from 'lodash-es';
5
+ import { Subject } from 'rxjs';
6
+
7
+ class AXHolidaysLoaderDefault {
8
+ getHolidays(options) {
9
+ return Promise.resolve([]);
10
+ }
11
+ }
12
+ const AX_DATETIME_HOLIDAYS_LOADER = new InjectionToken('AX_DATETIME_HOLIDAYS_LOADER', {
13
+ providedIn: 'root',
14
+ factory: () => {
15
+ return new AXHolidaysLoaderDefault();
16
+ },
17
+ });
5
18
 
6
19
  class AXCalendar {
7
20
  /**
@@ -269,6 +282,190 @@ class AXDateTimeRange {
269
282
  }
270
283
  }
271
284
 
285
+ class GeorgianCalendar extends AXCalendar {
286
+ /**
287
+ * @ignore
288
+ */
289
+ constructor(config) {
290
+ super(config);
291
+ }
292
+ create(value) {
293
+ return new AXDateTime(new Date(value.year, value.month - 1, value.date, value.hours || 0, value.minutes || 0, value.seconds || 0, value.ms || 0), this);
294
+ }
295
+ name() {
296
+ return 'georgian';
297
+ }
298
+ dayOfMonth(date) {
299
+ return date.getDate();
300
+ }
301
+ dayOfYear(date) {
302
+ let result = 0;
303
+ let m = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
304
+ if (this.isLeap(date)) {
305
+ m[1] = 29;
306
+ }
307
+ for (let i = 0; i < date.getMonth(); i++) {
308
+ result = result + m[i];
309
+ }
310
+ result += date.getDate();
311
+ return result;
312
+ }
313
+ dayOfWeek(date) {
314
+ return date.getDay() + 1;
315
+ }
316
+ weekOfYear(date) {
317
+ const firstDay = new AXDateTime(date, this).startOf('year');
318
+ return Math.ceil(((date.getTime() - firstDay.date.getTime()) / 86400000 + firstDay.date.getDay() + 1) / 7);
319
+ }
320
+ year(date) {
321
+ return date.getFullYear();
322
+ }
323
+ monthOfYear(date) {
324
+ return date.getMonth() + 1;
325
+ }
326
+ add(date, unit, amount) {
327
+ let value = date.valueOf();
328
+ switch (unit) {
329
+ case 'second':
330
+ value += 1000 * amount;
331
+ break;
332
+ case 'minute':
333
+ value += 60000 * amount;
334
+ break;
335
+ case 'hour':
336
+ value += 3600000 * amount;
337
+ break;
338
+ case 'month': {
339
+ const v = new Date(value);
340
+ let mo = date.getMonth();
341
+ let yr = date.getFullYear();
342
+ mo = (mo + amount) % 12;
343
+ if (0 > mo) {
344
+ yr += (date.getMonth() + amount - mo - 12) / 12;
345
+ mo += 12;
346
+ }
347
+ else
348
+ yr += (date.getMonth() + amount - mo) / 12;
349
+ v.setMonth(mo);
350
+ v.setFullYear(yr);
351
+ value = v.valueOf();
352
+ break;
353
+ }
354
+ case 'week':
355
+ value += 7 * 86400000 * amount;
356
+ break;
357
+ case 'year': {
358
+ const yv = new Date(value);
359
+ yv.setFullYear(yv.getFullYear() + amount);
360
+ value = yv.valueOf();
361
+ break;
362
+ }
363
+ case 'day':
364
+ default:
365
+ value += 86400000 * amount;
366
+ }
367
+ return new AXDateTime(new Date(value), this);
368
+ }
369
+ set(date, unit, value) {
370
+ const clone = new Date(date.valueOf());
371
+ switch (unit) {
372
+ case 'second':
373
+ clone.setHours(clone.getHours(), clone.getMinutes(), value, clone.getMilliseconds());
374
+ break;
375
+ case 'minute':
376
+ clone.setHours(clone.getHours(), value, clone.getSeconds(), clone.getMilliseconds());
377
+ break;
378
+ case 'hour':
379
+ clone.setHours(value, clone.getMinutes(), clone.getSeconds(), clone.getMilliseconds());
380
+ break;
381
+ default:
382
+ case 'day':
383
+ clone.setDate(value);
384
+ break;
385
+ case 'week':
386
+ break;
387
+ case 'month':
388
+ clone.setMonth(Math.max(0, value - 1));
389
+ break;
390
+ case 'year':
391
+ clone.setFullYear(value);
392
+ break;
393
+ }
394
+ return new AXDateTime(clone, this);
395
+ }
396
+ startOf(date, unit) {
397
+ const clone = new Date(date.valueOf());
398
+ switch (unit) {
399
+ case 'second':
400
+ clone.setHours(clone.getHours(), clone.getMinutes(), clone.getSeconds(), 0);
401
+ return new AXDateTime(clone, this);
402
+ case 'minute':
403
+ clone.setHours(clone.getHours(), clone.getMinutes(), 0, 0);
404
+ return new AXDateTime(clone, this);
405
+ case 'hour':
406
+ clone.setHours(clone.getHours(), 0, 0, 0);
407
+ return new AXDateTime(clone, this);
408
+ default:
409
+ case 'day':
410
+ clone.setHours(0, 0, 0, 0);
411
+ return new AXDateTime(clone, this);
412
+ case 'week': {
413
+ const index = 0;
414
+ const start = index >= 0 ? index : 0;
415
+ const day = clone.getDay();
416
+ const diff = clone.getDate() - day + (start > day ? start - 7 : start);
417
+ clone.setDate(diff);
418
+ return new AXDateTime(clone, this).startOf('day');
419
+ }
420
+ case 'month':
421
+ clone.setDate(1);
422
+ return new AXDateTime(clone, this).startOf('day');
423
+ case 'year':
424
+ clone.setMonth(0);
425
+ clone.setDate(1);
426
+ return new AXDateTime(clone, this).startOf('day');
427
+ }
428
+ }
429
+ endOf(date, unit) {
430
+ const clone = new Date(date.valueOf());
431
+ switch (unit) {
432
+ case 'second':
433
+ clone.setHours(clone.getHours(), clone.getMinutes(), clone.getSeconds(), 999);
434
+ return new AXDateTime(clone, this);
435
+ case 'minute':
436
+ clone.setHours(clone.getHours(), clone.getMinutes(), 59, 999);
437
+ return new AXDateTime(clone, this);
438
+ case 'hour':
439
+ clone.setHours(clone.getHours(), 59, 59, 999);
440
+ return new AXDateTime(clone, this);
441
+ default:
442
+ case 'day':
443
+ clone.setHours(23, 59, 59, 999);
444
+ return new AXDateTime(clone, this);
445
+ case 'week':
446
+ return this.startOf(date, 'week').add('day', 6).endOf('day');
447
+ case 'month': {
448
+ const dateObj = new Date();
449
+ dateObj.setFullYear(date.getFullYear());
450
+ dateObj.setMonth(date.getMonth() + 1);
451
+ dateObj.setDate(0);
452
+ return new AXDateTime(dateObj, this).endOf('day');
453
+ //return new AXDateTime(new Date(date.getFullYear(), date.getMonth() + 1, 0), this).endOf('day');
454
+ }
455
+ case 'year':
456
+ clone.setMonth(11);
457
+ return new AXDateTime(clone, this).endOf('month');
458
+ }
459
+ }
460
+ isLeap(date) {
461
+ let leapYear = new Date(date.getFullYear(), 1, 29);
462
+ return leapYear.getDate() == 29;
463
+ }
464
+ parse(value) {
465
+ return new AXDateTime(new Date(value), this);
466
+ }
467
+ }
468
+
272
469
  class JalaliCalendar extends AXCalendar {
273
470
  /**
274
471
  * @ignore
@@ -378,26 +575,23 @@ class JalaliCalendar extends AXCalendar {
378
575
  clone.setHours(value, clone.getMinutes(), clone.getSeconds(), clone.getMilliseconds());
379
576
  break;
380
577
  default:
381
- case 'day':
382
- {
383
- const gDate = this.toGregorian(jDate.year, jDate.month, value);
384
- clone.setDate(gDate.getDate());
385
- break;
386
- }
578
+ case 'day': {
579
+ const gDate = this.toGregorian(jDate.year, jDate.month, value);
580
+ clone.setDate(gDate.getDate());
581
+ break;
582
+ }
387
583
  case 'week':
388
584
  break;
389
- case 'month':
390
- {
391
- const gDate2 = this.toGregorian(jDate.year, value, jDate.day);
392
- clone.setMonth(gDate2.getMonth());
393
- break;
394
- }
395
- case 'year':
396
- {
397
- const gDate3 = this.toGregorian(value, jDate.month, jDate.day);
398
- clone.setFullYear(gDate3.getFullYear());
399
- break;
400
- }
585
+ case 'month': {
586
+ const gDate2 = this.toGregorian(jDate.year, value, jDate.day);
587
+ clone.setMonth(gDate2.getMonth());
588
+ break;
589
+ }
590
+ case 'year': {
591
+ const gDate3 = this.toGregorian(value, jDate.month, jDate.day);
592
+ clone.setFullYear(gDate3.getFullYear());
593
+ break;
594
+ }
401
595
  }
402
596
  return new AXDateTime(clone, this);
403
597
  }
@@ -458,12 +652,11 @@ class JalaliCalendar extends AXCalendar {
458
652
  const gDate = this.toGregorian(jy, jm, jd);
459
653
  return new AXDateTime(gDate, this).endOf('day');
460
654
  }
461
- case 'year':
462
- {
463
- const jy = this.year(date);
464
- const gDate = this.toGregorian(jy, 12, this.jalaaliMonthLength(jy, 12));
465
- return new AXDateTime(gDate, this).endOf('day');
466
- }
655
+ case 'year': {
656
+ const jy = this.year(date);
657
+ const gDate = this.toGregorian(jy, 12, this.jalaaliMonthLength(jy, 12));
658
+ return new AXDateTime(gDate, this).endOf('day');
659
+ }
467
660
  }
468
661
  }
469
662
  parse(value) {
@@ -676,207 +869,23 @@ class JalaliCalendar extends AXCalendar {
676
869
  }
677
870
  }
678
871
 
679
- class GeorgianCalendar extends AXCalendar {
680
- /**
681
- * @ignore
682
- */
683
- constructor(config) {
684
- super(config);
685
- }
686
- create(value) {
687
- return new AXDateTime(new Date(value.year, value.month - 1, value.date, value.hours || 0, value.minutes || 0, value.seconds || 0, value.ms || 0), this);
688
- }
689
- name() {
690
- return 'georgian';
691
- }
692
- dayOfMonth(date) {
693
- return date.getDate();
694
- }
695
- dayOfYear(date) {
696
- let result = 0;
697
- let m = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
698
- if (this.isLeap(date)) {
699
- m[1] = 29;
700
- }
701
- for (let i = 0; i < date.getMonth(); i++) {
702
- result = result + m[i];
703
- }
704
- result += date.getDate();
705
- return result;
706
- }
707
- dayOfWeek(date) {
708
- return date.getDay() + 1;
709
- }
710
- weekOfYear(date) {
711
- const firstDay = new AXDateTime(date, this).startOf('year');
712
- return Math.ceil(((date.getTime() - firstDay.date.getTime()) / 86400000 + firstDay.date.getDay() + 1) / 7);
713
- }
714
- year(date) {
715
- return date.getFullYear();
716
- }
717
- monthOfYear(date) {
718
- return date.getMonth() + 1;
719
- }
720
- add(date, unit, amount) {
721
- let value = date.valueOf();
722
- switch (unit) {
723
- case 'second':
724
- value += 1000 * amount;
725
- break;
726
- case 'minute':
727
- value += 60000 * amount;
728
- break;
729
- case 'hour':
730
- value += 3600000 * amount;
731
- break;
732
- case 'month':
733
- {
734
- const v = new Date(value);
735
- let mo = date.getMonth();
736
- let yr = date.getFullYear();
737
- mo = (mo + amount) % 12;
738
- if (0 > mo) {
739
- yr += (date.getMonth() + amount - mo - 12) / 12;
740
- mo += 12;
741
- }
742
- else
743
- yr += (date.getMonth() + amount - mo) / 12;
744
- v.setMonth(mo);
745
- v.setFullYear(yr);
746
- value = v.valueOf();
747
- break;
748
- }
749
- case 'week':
750
- value += 7 * 86400000 * amount;
751
- break;
752
- case 'year':
753
- {
754
- const yv = new Date(value);
755
- yv.setFullYear(yv.getFullYear() + amount);
756
- value = yv.valueOf();
757
- break;
758
- }
759
- case 'day':
760
- default:
761
- value += 86400000 * amount;
762
- }
763
- return new AXDateTime(new Date(value), this);
764
- }
765
- set(date, unit, value) {
766
- const clone = new Date(date.valueOf());
767
- switch (unit) {
768
- case 'second':
769
- clone.setHours(clone.getHours(), clone.getMinutes(), value, clone.getMilliseconds());
770
- break;
771
- case 'minute':
772
- clone.setHours(clone.getHours(), value, clone.getSeconds(), clone.getMilliseconds());
773
- break;
774
- case 'hour':
775
- clone.setHours(value, clone.getMinutes(), clone.getSeconds(), clone.getMilliseconds());
776
- break;
777
- default:
778
- case 'day':
779
- clone.setDate(value);
780
- break;
781
- case 'week':
782
- break;
783
- case 'month':
784
- clone.setMonth(Math.max(0, value - 1));
785
- break;
786
- case 'year':
787
- clone.setFullYear(value);
788
- break;
789
- }
790
- return new AXDateTime(clone, this);
791
- }
792
- startOf(date, unit) {
793
- const clone = new Date(date.valueOf());
794
- switch (unit) {
795
- case 'second':
796
- clone.setHours(clone.getHours(), clone.getMinutes(), clone.getSeconds(), 0);
797
- return new AXDateTime(clone, this);
798
- case 'minute':
799
- clone.setHours(clone.getHours(), clone.getMinutes(), 0, 0);
800
- return new AXDateTime(clone, this);
801
- case 'hour':
802
- clone.setHours(clone.getHours(), 0, 0, 0);
803
- return new AXDateTime(clone, this);
804
- default:
805
- case 'day':
806
- clone.setHours(0, 0, 0, 0);
807
- return new AXDateTime(clone, this);
808
- case 'week':
809
- {
810
- const index = 0;
811
- const start = index >= 0 ? index : 0;
812
- const day = clone.getDay();
813
- const diff = clone.getDate() - day + (start > day ? start - 7 : start);
814
- clone.setDate(diff);
815
- return new AXDateTime(clone, this).startOf('day');
816
- }
817
- case 'month':
818
- clone.setDate(1);
819
- return new AXDateTime(clone, this).startOf('day');
820
- case 'year':
821
- clone.setMonth(0);
822
- clone.setDate(1);
823
- return new AXDateTime(clone, this).startOf('day');
824
- }
825
- }
826
- endOf(date, unit) {
827
- const clone = new Date(date.valueOf());
828
- switch (unit) {
829
- case 'second':
830
- clone.setHours(clone.getHours(), clone.getMinutes(), clone.getSeconds(), 999);
831
- return new AXDateTime(clone, this);
832
- case 'minute':
833
- clone.setHours(clone.getHours(), clone.getMinutes(), 59, 999);
834
- return new AXDateTime(clone, this);
835
- case 'hour':
836
- clone.setHours(clone.getHours(), 59, 59, 999);
837
- return new AXDateTime(clone, this);
838
- default:
839
- case 'day':
840
- clone.setHours(23, 59, 59, 999);
841
- return new AXDateTime(clone, this);
842
- case 'week':
843
- return this.startOf(date, 'week').add('day', 6).endOf('day');
844
- case 'month':
845
- {
846
- const dateObj = new Date();
847
- dateObj.setFullYear(date.getFullYear());
848
- dateObj.setMonth(date.getMonth() + 1);
849
- dateObj.setDate(0);
850
- return new AXDateTime(dateObj, this).endOf('day');
851
- //return new AXDateTime(new Date(date.getFullYear(), date.getMonth() + 1, 0), this).endOf('day');
852
- }
853
- case 'year':
854
- clone.setMonth(11);
855
- return new AXDateTime(clone, this).endOf('month');
856
- }
857
- }
858
- isLeap(date) {
859
- let leapYear = new Date(date.getFullYear(), 1, 29);
860
- return leapYear.getDate() == 29;
861
- }
862
- parse(value) {
863
- return new AXDateTime(new Date(value), this);
864
- }
865
- }
866
-
867
872
  const AX_DATETIME_CONFIG = new InjectionToken('AX_DATETIME_CONFIG', {
868
873
  providedIn: 'root',
869
874
  factory: () => {
870
875
  const global = inject(AX_GLOBAL_CONFIG);
871
- set(global, "dateTime", AX_DATETIME_CONFIG);
876
+ set(global, 'dateTime', AX_DATETIME_CONFIG);
872
877
  return AXDateTimeDefaultConfig;
873
878
  },
874
879
  });
875
880
  const AXDateTimeDefaultConfig = {
876
881
  calendar: 'georgian',
877
882
  calendars: {
878
- "georgian": new GeorgianCalendar({
879
- dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'].map(d => ({ long: d, short: d.substring(0, 3), letter: d[0] })),
883
+ georgian: new GeorgianCalendar({
884
+ dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'].map((d) => ({
885
+ long: d,
886
+ short: d.substring(0, 3),
887
+ letter: d[0],
888
+ })),
880
889
  monthNames: [
881
890
  'January',
882
891
  'February',
@@ -890,30 +899,34 @@ const AXDateTimeDefaultConfig = {
890
899
  'October',
891
900
  'November',
892
901
  'December',
893
- ].map(d => ({ long: d, short: d.substring(0, 3), letter: d[0] })),
902
+ ].map((d) => ({ long: d, short: d.substring(0, 3), letter: d[0] })),
894
903
  weekend: [6, 7],
895
904
  formats: {
896
- dateInput: "yyyy/MM/dd",
897
- timeInput: "HH:mm",
898
- dateTimeInput: "yyyy/MM/dd HH:mm",
899
- dateDisplay: "DDDD, d MMM yyyy",
900
- timeDisplay: "HH:mm",
901
- dateTimeDisplay: "DDDD, d MMM yyyy HH:mm"
902
- }
905
+ dateInput: 'yyyy/MM/dd',
906
+ timeInput: 'HH:mm',
907
+ dateTimeInput: 'yyyy/MM/dd HH:mm',
908
+ dateDisplay: 'DDDD, d MMM yyyy',
909
+ timeDisplay: 'HH:mm',
910
+ dateTimeDisplay: 'DDDD, d MMM yyyy HH:mm',
911
+ },
903
912
  }),
904
- "jalali": new JalaliCalendar({
905
- monthNames: 'فروردین_اردیبهشت_خرداد_تیر_مرداد_شهریور_مهر_آبان_آذر_دی_بهمن_اسفند'.split('_').map(d => ({ long: d, short: d, letter: d[0] })),
906
- dayNames: 'شنبه_یکشنبه_دوشنبه_سه شنبه_چهارشنبه_پنج شنبه_جمعه'.split('_').map(d => ({ long: d, short: d[0], letter: d[0] })),
913
+ jalali: new JalaliCalendar({
914
+ monthNames: 'فروردین_اردیبهشت_خرداد_تیر_مرداد_شهریور_مهر_آبان_آذر_دی_بهمن_اسفند'
915
+ .split('_')
916
+ .map((d) => ({ long: d, short: d, letter: d[0] })),
917
+ dayNames: 'شنبه_یکشنبه_دوشنبه_سه شنبه_چهارشنبه_پنج شنبه_جمعه'
918
+ .split('_')
919
+ .map((d) => ({ long: d, short: d[0], letter: d[0] })),
907
920
  weekend: [7, 1],
908
921
  formats: {
909
- dateInput: "yyyy/MM/dd",
910
- timeInput: "HH:mm",
911
- dateTimeInput: "yyyy/MM/dd HH:mm",
912
- dateDisplay: "DDDD, d MMM yyyy",
913
- timeDisplay: "HH:mm",
914
- dateTimeDisplay: "DDDD, d MMM yyyy HH:mm"
915
- }
916
- })
922
+ dateInput: 'yyyy/MM/dd',
923
+ timeInput: 'HH:mm',
924
+ dateTimeInput: 'yyyy/MM/dd HH:mm',
925
+ dateDisplay: 'DDDD, d MMM yyyy',
926
+ timeDisplay: 'HH:mm',
927
+ dateTimeDisplay: 'DDDD, d MMM yyyy HH:mm',
928
+ },
929
+ }),
917
930
  }
918
931
  };
919
932
  function dateTimeConfig(config = {}) {
@@ -925,12 +938,28 @@ function dateTimeConfig(config = {}) {
925
938
  }
926
939
 
927
940
  class AXCalendarService {
928
- constructor() {
929
- this._config = inject(AX_DATETIME_CONFIG);
930
- }
931
941
  get calendar() {
932
942
  return this._config.calendars[this._config.calendar];
933
943
  }
944
+ get holidays() {
945
+ return this._holidays;
946
+ }
947
+ ;
948
+ constructor() {
949
+ this._config = inject(AX_DATETIME_CONFIG);
950
+ this._holidaysLoader = inject(AX_DATETIME_HOLIDAYS_LOADER);
951
+ this.onHolidaysChanged = new Subject();
952
+ this._holidays = [];
953
+ this.loadHolidays();
954
+ }
955
+ loadHolidays(options) {
956
+ return this._holidaysLoader
957
+ .getHolidays(options)
958
+ .then((value) => {
959
+ this._holidays = value;
960
+ this.onHolidaysChanged.next(this._holidays);
961
+ });
962
+ }
934
963
  create(value, calendarName) {
935
964
  const calendar = calendarName ? this.resolveCalendar(calendarName) : this.calendar;
936
965
  if (value instanceof Date) {
@@ -958,11 +987,11 @@ class AXCalendarService {
958
987
  // const d = new Date(val);
959
988
  // return !Number.isNaN(d.valueOf()) && d.toISOString() === val;
960
989
  // };
961
- const isISOString = str => {
990
+ const isISOString = (str) => {
962
991
  if (!/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(.\d{3}Z)?/.test(str))
963
992
  return false;
964
993
  const d = new Date(str);
965
- return d instanceof Date && !isNaN(d.getTime()); // valid date
994
+ return d instanceof Date && !isNaN(d.getTime()); // valid date
966
995
  };
967
996
  //
968
997
  const calendar = calendarName ? this.resolveCalendar(calendarName) : this.calendar;
@@ -981,7 +1010,7 @@ class AXCalendarService {
981
1010
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.9", ngImport: i0, type: AXCalendarService, decorators: [{
982
1011
  type: Injectable,
983
1012
  args: [{ providedIn: 'root' }]
984
- }] });
1013
+ }], ctorParameters: function () { return []; } });
985
1014
 
986
1015
  class AXDateTimePipe {
987
1016
  constructor() {
@@ -1030,5 +1059,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.9", ngImpor
1030
1059
  * Generated bundle index. Do not edit.
1031
1060
  */
1032
1061
 
1033
- export { AXCalendar, AXCalendarMonth, AXCalendarService, AXDateTime, AXDateTimeDefaultConfig, AXDateTimeModule, AXDateTimePipe, AXDateTimeRange, AX_DATETIME_CONFIG, GeorgianCalendar, JalaliCalendar, dateTimeConfig };
1062
+ export { AXCalendar, AXCalendarMonth, AXCalendarService, AXDateTime, AXDateTimeDefaultConfig, AXDateTimeModule, AXDateTimePipe, AXDateTimeRange, AXHolidaysLoaderDefault, AX_DATETIME_CONFIG, AX_DATETIME_HOLIDAYS_LOADER, GeorgianCalendar, JalaliCalendar, dateTimeConfig };
1034
1063
  //# sourceMappingURL=acorex-core-dateTime.mjs.map