@stemy/ngx-utils 19.9.38 → 19.9.40

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.
@@ -1,6 +1,6 @@
1
1
  import 'zone.js';
2
2
  import * as i0 from '@angular/core';
3
- import { InjectionToken, runInInjectionContext, PLATFORM_ID, Inject, Injectable, Optional, inject, Injector, untracked, computed, signal, DestroyRef, isDevMode, ErrorHandler, EventEmitter, createComponent, NgZone, Pipe, input, output, ChangeDetectorRef, ElementRef, effect, HostListener, Directive, Input, HostBinding, Output, TemplateRef, ChangeDetectionStrategy, ViewEncapsulation, Component, ViewChild, forwardRef, ContentChild, contentChild, contentChildren, Renderer2, model, ContentChildren, provideAppInitializer, makeEnvironmentProviders, NgModule } from '@angular/core';
3
+ import { InjectionToken, runInInjectionContext, PLATFORM_ID, Inject, Injectable, Optional, inject, Injector, untracked, computed, signal, DestroyRef, isDevMode, ErrorHandler, EventEmitter, createComponent, NgZone, Pipe, input, output, ChangeDetectorRef, ElementRef, effect, HostListener, Directive, Input, HostBinding, Output, TemplateRef, ChangeDetectionStrategy, ViewEncapsulation, Component, model, ViewChild, forwardRef, ContentChild, contentChild, contentChildren, Renderer2, ContentChildren, provideAppInitializer, makeEnvironmentProviders, NgModule } from '@angular/core';
4
4
  import 'reflect-metadata';
5
5
  import * as i2 from '@angular/router';
6
6
  import { ActivatedRouteSnapshot, Scroll, NavigationEnd, UrlTree, Router, DefaultUrlSerializer, UrlSegmentGroup, UrlSegment, UrlSerializer, ROUTES } from '@angular/router';
@@ -762,7 +762,7 @@ class StateService {
762
762
  return this.router.config;
763
763
  }
764
764
  get $observable() {
765
- return this.$snapshot.pipe(skipWhile(snapshot => snapshot === emptySnapshot), debounceTime(25));
765
+ return this.$snapshot.pipe(skipWhile(snapshot => snapshot === emptySnapshot), debounceTime(10));
766
766
  }
767
767
  constructor(injector, zone, universal, router = null, contexts = null) {
768
768
  this.injector = injector;
@@ -1619,6 +1619,56 @@ function md5(input) {
1619
1619
  return out;
1620
1620
  }
1621
1621
 
1622
+ /**
1623
+ * Helper function that parses ISO string or Date object to a real Date object if its possible
1624
+ * @param value
1625
+ */
1626
+ function parseValidDate(value) {
1627
+ if (!value)
1628
+ return null;
1629
+ const date = value instanceof Date ? value : new Date(value);
1630
+ return isNaN(date.getTime()) ? null : date;
1631
+ }
1632
+ /**
1633
+ * Function that converts the provided date to midnight
1634
+ * @param value
1635
+ */
1636
+ function toMidnight(value) {
1637
+ value = value instanceof Date ? value : new Date();
1638
+ return new Date(value.getFullYear(), value.getMonth(), value.getDate(), 0, 0, 0);
1639
+ }
1640
+ /**
1641
+ * Compares two dates if they are on the same day
1642
+ * @param a
1643
+ * @param b
1644
+ */
1645
+ function isSameDay(a, b) {
1646
+ return toMidnight(a).getTime() === toMidnight(b).getTime();
1647
+ }
1648
+ /**
1649
+ * Gets the ISO week number of a specified date
1650
+ * @param date
1651
+ */
1652
+ function getISOWeekNumber(date) {
1653
+ const target = new Date(date.valueOf());
1654
+ const dayNr = (date.getDay() + 6) % 7;
1655
+ target.setDate(target.getDate() - dayNr + 3);
1656
+ const firstThursday = target.valueOf();
1657
+ target.setMonth(0, 1);
1658
+ if (target.getDay() !== 4) {
1659
+ target.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);
1660
+ }
1661
+ return 1 + Math.ceil((firstThursday - target.valueOf()) / 604800000);
1662
+ }
1663
+ /**
1664
+ * Adds an amount of units to the specified date
1665
+ * @param date
1666
+ * @param amount
1667
+ * @param unit
1668
+ */
1669
+ function addDate(date, amount = 1, unit = "days") {
1670
+ return DateTime.fromJSDate(date).plus({ [unit]: amount }).toJSDate();
1671
+ }
1622
1672
  class DateUtils {
1623
1673
  static isHoliday(date) {
1624
1674
  return DateTime.fromJSDate(date).isWeekend;
@@ -1627,7 +1677,7 @@ class DateUtils {
1627
1677
  return !DateUtils.isHoliday(date);
1628
1678
  }
1629
1679
  static add(date, amount = 1, unit = "days") {
1630
- return DateTime.fromJSDate(date).plus({ [unit]: amount }).toJSDate();
1680
+ return addDate(date, amount, unit);
1631
1681
  }
1632
1682
  static businessAdd(date, amount = 1, unit = "days", freeDays = []) {
1633
1683
  const signal = amount < 0 ? -1 : 1;
@@ -2761,62 +2811,6 @@ function diffEntities(current, incoming) {
2761
2811
  };
2762
2812
  }
2763
2813
 
2764
- class TimerUtils {
2765
- static createTimeout(func, time) {
2766
- // @dynamic
2767
- const run = (timer) => {
2768
- timer.clear();
2769
- // If the time is zero or less, we run the function immediately because setTimeout puts it into the next "frame"
2770
- if (timer.time <= 0) {
2771
- timer.func();
2772
- return;
2773
- }
2774
- timer.id = setTimeout(() => {
2775
- timer.id = null;
2776
- timer.func();
2777
- }, timer.time);
2778
- };
2779
- // @dynamic
2780
- const clear = (timer) => {
2781
- if (!timer.id)
2782
- return;
2783
- clearTimeout(timer.id);
2784
- timer.id = null;
2785
- };
2786
- return TimerUtils.createTimer(run, clear, func, time);
2787
- }
2788
- static createInterval(func, time) {
2789
- // @dynamic
2790
- const run = (timer) => {
2791
- timer.clear();
2792
- timer.id = setInterval(timer.func, Math.max(timer.time, 5));
2793
- };
2794
- // @dynamic
2795
- const clear = (timer) => {
2796
- if (!timer.id)
2797
- return;
2798
- clearInterval(timer.id);
2799
- timer.id = null;
2800
- };
2801
- return TimerUtils.createTimer(run, clear, func, time);
2802
- }
2803
- static createTimer(run, clear, func, time) {
2804
- const timer = {};
2805
- const setParams = (func, time) => {
2806
- timer.func = !ObjectUtils.isFunction(func) ? (() => { }) : func;
2807
- timer.time = !ObjectUtils.isNumber(time) ? 100 : time;
2808
- };
2809
- timer.run = () => run(timer);
2810
- timer.clear = () => clear(timer);
2811
- timer.set = (func, time) => {
2812
- setParams(func, time);
2813
- timer.run();
2814
- };
2815
- setParams(func, time);
2816
- return timer;
2817
- }
2818
- }
2819
-
2820
2814
  class ObservableUtils {
2821
2815
  static toSearch(search) {
2822
2816
  return mergeMap(
@@ -2839,20 +2833,24 @@ class ObservableUtils {
2839
2833
  static subscribe(...subscribers) {
2840
2834
  const subscriptions = [];
2841
2835
  subscribers.forEach(info => {
2836
+ const timeout = info.timeout ?? 15;
2842
2837
  let alreadyCalled = false;
2843
- const timer = TimerUtils.createTimeout();
2844
2838
  info.subjects.forEach(subject => {
2845
- const ss = subject.subscribe((value) => {
2839
+ const ss = subject
2840
+ .pipe(map(v => {
2846
2841
  alreadyCalled = true;
2847
- timer.set(() => {
2848
- info.cb(subject, value);
2849
- }, info.timeout ?? 0);
2842
+ return v;
2843
+ }), debounceTime(timeout))
2844
+ .subscribe((value) => {
2845
+ info.cb(subject, value);
2850
2846
  });
2851
2847
  subscriptions.push(ss);
2852
2848
  });
2853
- if (alreadyCalled)
2854
- return;
2855
- info.cb();
2849
+ setTimeout(() => {
2850
+ if (alreadyCalled)
2851
+ return;
2852
+ info.cb();
2853
+ }, timeout);
2856
2854
  });
2857
2855
  return ObservableUtils.multiSubscription(...subscriptions);
2858
2856
  }
@@ -3171,6 +3169,62 @@ class SocketClient {
3171
3169
  }
3172
3170
  }
3173
3171
 
3172
+ class TimerUtils {
3173
+ static createTimeout(func, time) {
3174
+ // @dynamic
3175
+ const run = (timer) => {
3176
+ timer.clear();
3177
+ // If the time is zero or less, we run the function immediately because setTimeout puts it into the next "frame"
3178
+ if (timer.time <= 0) {
3179
+ timer.func();
3180
+ return;
3181
+ }
3182
+ timer.id = setTimeout(() => {
3183
+ timer.id = null;
3184
+ timer.func();
3185
+ }, timer.time);
3186
+ };
3187
+ // @dynamic
3188
+ const clear = (timer) => {
3189
+ if (!timer.id)
3190
+ return;
3191
+ clearTimeout(timer.id);
3192
+ timer.id = null;
3193
+ };
3194
+ return TimerUtils.createTimer(run, clear, func, time);
3195
+ }
3196
+ static createInterval(func, time) {
3197
+ // @dynamic
3198
+ const run = (timer) => {
3199
+ timer.clear();
3200
+ timer.id = setInterval(timer.func, Math.max(timer.time, 5));
3201
+ };
3202
+ // @dynamic
3203
+ const clear = (timer) => {
3204
+ if (!timer.id)
3205
+ return;
3206
+ clearInterval(timer.id);
3207
+ timer.id = null;
3208
+ };
3209
+ return TimerUtils.createTimer(run, clear, func, time);
3210
+ }
3211
+ static createTimer(run, clear, func, time) {
3212
+ const timer = {};
3213
+ const setParams = (func, time) => {
3214
+ timer.func = !ObjectUtils.isFunction(func) ? (() => { }) : func;
3215
+ timer.time = !ObjectUtils.isNumber(time) ? 100 : time;
3216
+ };
3217
+ timer.run = () => run(timer);
3218
+ timer.clear = () => clear(timer);
3219
+ timer.set = (func, time) => {
3220
+ setParams(func, time);
3221
+ timer.run();
3222
+ };
3223
+ setParams(func, time);
3224
+ return timer;
3225
+ }
3226
+ }
3227
+
3174
3228
  class UniqueUtils {
3175
3229
  static uuid() {
3176
3230
  if (typeof window !== "undefined" && typeof window.crypto !== "undefined" && typeof window.crypto.getRandomValues !== "undefined") {
@@ -4452,6 +4506,469 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.22", ngImpo
4452
4506
  type: Injectable
4453
4507
  }], ctorParameters: () => [{ type: LocalHttpService }] });
4454
4508
 
4509
+ const CALENDAR_TRANSLATIONS = {
4510
+ en: {
4511
+ "month.jan": "January",
4512
+ "month.feb": "February",
4513
+ "month.mar": "March",
4514
+ "month.apr": "April",
4515
+ "month.may": "May",
4516
+ "month.jun": "June",
4517
+ "month.jul": "July",
4518
+ "month.aug": "August",
4519
+ "month.sep": "September",
4520
+ "month.oct": "October",
4521
+ "month.nov": "November",
4522
+ "month.dec": "December",
4523
+ "day.mon": "Mon",
4524
+ "day.tue": "Tue",
4525
+ "day.wed": "Wed",
4526
+ "day.thu": "Thu",
4527
+ "day.fri": "Fri",
4528
+ "day.sat": "Sat",
4529
+ "day.sun": "Sun"
4530
+ },
4531
+ de: {
4532
+ "month.jan": "Januar",
4533
+ "month.feb": "Februar",
4534
+ "month.mar": "März",
4535
+ "month.apr": "April",
4536
+ "month.may": "Mai",
4537
+ "month.jun": "Juni",
4538
+ "month.jul": "Juli",
4539
+ "month.aug": "August",
4540
+ "month.sep": "September",
4541
+ "month.oct": "Oktober",
4542
+ "month.nov": "November",
4543
+ "month.dec": "Dezember",
4544
+ "day.mon": "Mo",
4545
+ "day.tue": "Di",
4546
+ "day.wed": "Mi",
4547
+ "day.thu": "Do",
4548
+ "day.fri": "Fr",
4549
+ "day.sat": "Sa",
4550
+ "day.sun": "So"
4551
+ },
4552
+ hu: {
4553
+ "month.jan": "Január",
4554
+ "month.feb": "Február",
4555
+ "month.mar": "Március",
4556
+ "month.apr": "Április",
4557
+ "month.may": "Május",
4558
+ "month.jun": "Június",
4559
+ "month.jul": "Július",
4560
+ "month.aug": "Augusztus",
4561
+ "month.sep": "Szeptember",
4562
+ "month.oct": "Október",
4563
+ "month.nov": "November",
4564
+ "month.dec": "December",
4565
+ "day.mon": "Hét",
4566
+ "day.tue": "Kedd",
4567
+ "day.wed": "Sze",
4568
+ "day.thu": "Csüt",
4569
+ "day.fri": "Pén",
4570
+ "day.sat": "Szo",
4571
+ "day.sun": "Vas"
4572
+ },
4573
+ es: {
4574
+ "month.jan": "Enero",
4575
+ "month.feb": "Febrero",
4576
+ "month.mar": "Marzo",
4577
+ "month.apr": "Abril",
4578
+ "month.may": "Mayo",
4579
+ "month.jun": "Junio",
4580
+ "month.jul": "Julio",
4581
+ "month.aug": "Agosto",
4582
+ "month.sep": "Septiembre",
4583
+ "month.oct": "Octubre",
4584
+ "month.nov": "Noviembre",
4585
+ "month.dec": "Diciembre",
4586
+ "day.mon": "Lun",
4587
+ "day.tue": "Mar",
4588
+ "day.wed": "Mié",
4589
+ "day.thu": "Jue",
4590
+ "day.fri": "Vie",
4591
+ "day.sat": "Sáb",
4592
+ "day.sun": "Dom"
4593
+ },
4594
+ fr: {
4595
+ "month.jan": "Janvier",
4596
+ "month.feb": "Février",
4597
+ "month.mar": "Mars",
4598
+ "month.apr": "Avril",
4599
+ "month.may": "Mai",
4600
+ "month.jun": "Juin",
4601
+ "month.jul": "Juillet",
4602
+ "month.aug": "Août",
4603
+ "month.sep": "Septembre",
4604
+ "month.oct": "Octobre",
4605
+ "month.nov": "Novembre",
4606
+ "month.dec": "Décembre",
4607
+ "day.mon": "Lun",
4608
+ "day.tue": "Mar",
4609
+ "day.wed": "Mer",
4610
+ "day.thu": "Jeu",
4611
+ "day.fri": "Ven",
4612
+ "day.sat": "Sam",
4613
+ "day.sun": "Dim"
4614
+ },
4615
+ it: {
4616
+ "month.jan": "Gennaio",
4617
+ "month.feb": "Febbraio",
4618
+ "month.mar": "Marzo",
4619
+ "month.apr": "Aprile",
4620
+ "month.may": "Maggio",
4621
+ "month.jun": "Giugno",
4622
+ "month.jul": "Luglio",
4623
+ "month.aug": "Agosto",
4624
+ "month.sep": "Settembre",
4625
+ "month.oct": "Ottobre",
4626
+ "month.nov": "Novembre",
4627
+ "month.dec": "Dicembre",
4628
+ "day.mon": "Lun",
4629
+ "day.tue": "Mar",
4630
+ "day.wed": "Mer",
4631
+ "day.thu": "Gio",
4632
+ "day.fri": "Ven",
4633
+ "day.sat": "Sab",
4634
+ "day.sun": "Dom"
4635
+ },
4636
+ pt: {
4637
+ "month.jan": "Janeiro",
4638
+ "month.feb": "Fevereiro",
4639
+ "month.mar": "Março",
4640
+ "month.apr": "Abril",
4641
+ "month.may": "Maio",
4642
+ "month.jun": "Junho",
4643
+ "month.jul": "Julho",
4644
+ "month.aug": "Agosto",
4645
+ "month.sep": "Setembro",
4646
+ "month.oct": "Outubro",
4647
+ "month.nov": "Novembro",
4648
+ "month.dec": "Dezembro",
4649
+ "day.mon": "Seg",
4650
+ "day.tue": "Ter",
4651
+ "day.wed": "Qua",
4652
+ "day.thu": "Qui",
4653
+ "day.fri": "Sex",
4654
+ "day.sat": "Sáb",
4655
+ "day.sun": "Dom"
4656
+ },
4657
+ zh: {
4658
+ "month.jan": "一月",
4659
+ "month.feb": "二月",
4660
+ "month.mar": "三月",
4661
+ "month.apr": "四月",
4662
+ "month.may": "五月",
4663
+ "month.jun": "六月",
4664
+ "month.jul": "七月",
4665
+ "month.aug": "八月",
4666
+ "month.sep": "九月",
4667
+ "month.oct": "十月",
4668
+ "month.nov": "十一月",
4669
+ "month.dec": "十二月",
4670
+ "day.mon": "一",
4671
+ "day.tue": "二",
4672
+ "day.wed": "三",
4673
+ "day.thu": "四",
4674
+ "day.fri": "五",
4675
+ "day.sat": "六",
4676
+ "day.sun": "日"
4677
+ },
4678
+ ja: {
4679
+ "month.jan": "1月",
4680
+ "month.feb": "2月",
4681
+ "month.mar": "3月",
4682
+ "month.apr": "4月",
4683
+ "month.may": "5月",
4684
+ "month.jun": "6月",
4685
+ "month.jul": "7月",
4686
+ "month.aug": "8月",
4687
+ "month.sep": "9月",
4688
+ "month.oct": "10月",
4689
+ "month.nov": "11月",
4690
+ "month.dec": "12月",
4691
+ "day.mon": "月",
4692
+ "day.tue": "火",
4693
+ "day.wed": "水",
4694
+ "day.thu": "木",
4695
+ "day.fri": "金",
4696
+ "day.sat": "土",
4697
+ "day.sun": "日"
4698
+ },
4699
+ pl: {
4700
+ "month.jan": "Styczeń",
4701
+ "month.feb": "Luty",
4702
+ "month.mar": "Marzec",
4703
+ "month.apr": "Kwiecień",
4704
+ "month.may": "Maj",
4705
+ "month.jun": "Czerwiec",
4706
+ "month.jul": "Lipiec",
4707
+ "month.aug": "Sierpień",
4708
+ "month.sep": "Wrzesień",
4709
+ "month.oct": "Październik",
4710
+ "month.nov": "Listopad",
4711
+ "month.dec": "Grudzień",
4712
+ "day.mon": "Pn",
4713
+ "day.tue": "Wt",
4714
+ "day.wed": "Śr",
4715
+ "day.thu": "Cz",
4716
+ "day.fri": "Pt",
4717
+ "day.sat": "Sb",
4718
+ "day.sun": "Nd"
4719
+ },
4720
+ cs: {
4721
+ "month.jan": "Leden",
4722
+ "month.feb": "Únor",
4723
+ "month.mar": "Březen",
4724
+ "month.apr": "Duben",
4725
+ "month.may": "Květen",
4726
+ "month.jun": "Červen",
4727
+ "month.jul": "Červenec",
4728
+ "month.aug": "Srpen",
4729
+ "month.sep": "Září",
4730
+ "month.oct": "Říjen",
4731
+ "month.nov": "Listopad",
4732
+ "month.dec": "Prosinec",
4733
+ "day.mon": "Po",
4734
+ "day.tue": "Út",
4735
+ "day.wed": "St",
4736
+ "day.thu": "Čt",
4737
+ "day.fri": "Pá",
4738
+ "day.sat": "So",
4739
+ "day.sun": "Ne"
4740
+ },
4741
+ lt: {
4742
+ "month.jan": "Sausis",
4743
+ "month.feb": "Vasaris",
4744
+ "month.mar": "Kovas",
4745
+ "month.apr": "Balandis",
4746
+ "month.may": "Gegužė",
4747
+ "month.jun": "Birželis",
4748
+ "month.jul": "Liepa",
4749
+ "month.aug": "Rugpjūtis",
4750
+ "month.sep": "Rugsėjis",
4751
+ "month.oct": "Spalis",
4752
+ "month.nov": "Lapkritis",
4753
+ "month.dec": "Gruodis",
4754
+ "day.mon": "Pr",
4755
+ "day.tue": "An",
4756
+ "day.wed": "Tre",
4757
+ "day.thu": "Ket",
4758
+ "day.fri": "Pen",
4759
+ "day.sat": "Še",
4760
+ "day.sun": "Se"
4761
+ },
4762
+ sk: {
4763
+ "month.jan": "Januar",
4764
+ "month.feb": "Februar",
4765
+ "month.mar": "Marec",
4766
+ "month.apr": "Apríl",
4767
+ "month.may": "Maj",
4768
+ "month.jun": "Junij",
4769
+ "month.jul": "Julij",
4770
+ "month.aug": "August",
4771
+ "month.sep": "September",
4772
+ "month.oct": "Oktober",
4773
+ "month.nov": "November",
4774
+ "month.dec": "December",
4775
+ "day.mon": "Po",
4776
+ "day.tue": "Ut",
4777
+ "day.wed": "St",
4778
+ "day.thu": "Št",
4779
+ "day.fri": "Pi",
4780
+ "day.sat": "So",
4781
+ "day.sun": "Ne"
4782
+ }
4783
+ };
4784
+
4785
+ const LANG_TRANSLATIONS = {
4786
+ "lang.aa": "Afar",
4787
+ "lang.ab": "Аҧсшәа",
4788
+ "lang.ae": "Avesta",
4789
+ "lang.af": "Afrikaans",
4790
+ "lang.ak": "Akan",
4791
+ "lang.am": "አማርኛ",
4792
+ "lang.an": "Aragonés",
4793
+ "lang.ar": "العربية",
4794
+ "lang.as": "অসমীয়া",
4795
+ "lang.av": "Авар мацӀ",
4796
+ "lang.ay": "Aymar aru",
4797
+ "lang.az": "Azərbaycanca",
4798
+ "lang.ba": "Башҡортса",
4799
+ "lang.be": "Беларуская",
4800
+ "lang.bg": "Български",
4801
+ "lang.bh": "भोजपुरी",
4802
+ "lang.bi": "Bislama",
4803
+ "lang.bm": "Bamanankan",
4804
+ "lang.bn": "বাংলা",
4805
+ "lang.bo": "Bod skad",
4806
+ "lang.br": "Brezhoneg",
4807
+ "lang.bs": "Bosanski",
4808
+ "lang.ca": "Català",
4809
+ "lang.ce": "Нохчийн",
4810
+ "lang.ch": "Chamoru",
4811
+ "lang.co": "Corsu",
4812
+ "lang.cr": "Nēhiyawēwin",
4813
+ "lang.cs": "Čeština",
4814
+ "lang.cu": "Slavenskъ",
4815
+ "lang.cv": "Чӑвашла",
4816
+ "lang.cy": "Cymraeg",
4817
+ "lang.da": "Dansk",
4818
+ "lang.de": "Deutsch",
4819
+ "lang.dv": "ދިވެހިބަސް",
4820
+ "lang.dz": "རྫོང་ཁ",
4821
+ "lang.ee": "Eʋegbe",
4822
+ "lang.el": "Ελληνικά",
4823
+ "lang.en": "English",
4824
+ "lang.eo": "Esperanto",
4825
+ "lang.es": "Español",
4826
+ "lang.et": "Eesti",
4827
+ "lang.eu": "Euskara",
4828
+ "lang.fa": "فارسی",
4829
+ "lang.ff": "Fulfulde",
4830
+ "lang.fi": "Suomi",
4831
+ "lang.fj": "Na Vosa Vakaviti",
4832
+ "lang.fo": "Føroyskt",
4833
+ "lang.fr": "Français",
4834
+ "lang.fy": "Frysk",
4835
+ "lang.ga": "Gaeilge",
4836
+ "lang.gd": "Gàidhlig",
4837
+ "lang.gl": "Galego",
4838
+ "lang.gn": "Avañe'ẽ",
4839
+ "lang.gu": "ગુજરાતી",
4840
+ "lang.gv": "Gaelg",
4841
+ "lang.ha": "Hausa",
4842
+ "lang.he": "עברית",
4843
+ "lang.hi": "हिन्दी",
4844
+ "lang.ho": "Hiri Motu",
4845
+ "lang.hr": "Hrvatski",
4846
+ "lang.ht": "Kreyòl ayisyen",
4847
+ "lang.hu": "Magyar",
4848
+ "lang.hy": "Հայերեն",
4849
+ "lang.hz": "Otjiherero",
4850
+ "lang.ia": "Interlingua",
4851
+ "lang.id": "Bahasa Indonesia",
4852
+ "lang.ie": "Interlingue",
4853
+ "lang.ig": "Asụsụ Igbo",
4854
+ "lang.ii": "Nuosuhxop",
4855
+ "lang.ik": "Iñupiaq",
4856
+ "lang.io": "Ido",
4857
+ "lang.is": "Íslenska",
4858
+ "lang.it": "Italiano",
4859
+ "lang.iu": "Inuktitut",
4860
+ "lang.ja": "日本語",
4861
+ "lang.jv": "Basa Jawa",
4862
+ "lang.ka": "ქართული",
4863
+ "lang.kg": "Kikongo",
4864
+ "lang.ki": "Gikuyu",
4865
+ "lang.kj": "Kuanyama",
4866
+ "lang.kk": "Қазақ тілі",
4867
+ "lang.kl": "Kalaallisut",
4868
+ "lang.km": "ភាសាខ្មែរ",
4869
+ "lang.kn": "ಕನ್ನಡ",
4870
+ "lang.ko": "한국어",
4871
+ "lang.kr": "Kanuri",
4872
+ "lang.ks": "कश्मीरी",
4873
+ "lang.ku": "Kurdî",
4874
+ "lang.kv": "Коми",
4875
+ "lang.kw": "Kernewek",
4876
+ "lang.ky": "Кыргызча",
4877
+ "lang.la": "Latine",
4878
+ "lang.lb": "Lëtzebuergesch",
4879
+ "lang.lg": "Luganda",
4880
+ "lang.li": "Limburgs",
4881
+ "lang.ln": "Lingála",
4882
+ "lang.lo": "ພາສາລາວ",
4883
+ "lang.lt": "Lietuvių",
4884
+ "lang.lu": "Tshiluba",
4885
+ "lang.lv": "Latviešu",
4886
+ "lang.mg": "Malagasy",
4887
+ "lang.mh": "Kajin M̧ajeļ",
4888
+ "lang.mi": "Te Reo Māori",
4889
+ "lang.mk": "Makedonski",
4890
+ "lang.ml": "മലയാളം",
4891
+ "lang.mn": "Монгол хэл",
4892
+ "lang.mr": "मराठी",
4893
+ "lang.ms": "Bahasa Melayu",
4894
+ "lang.mt": "Malti",
4895
+ "lang.my": "မြန်မာစာ",
4896
+ "lang.na": "Dorerin Naoero",
4897
+ "lang.nb": "Norsk bokmål",
4898
+ "lang.nd": "isiNdebele",
4899
+ "lang.ne": "नेपाली",
4900
+ "lang.ng": "Oshiwambo",
4901
+ "lang.nl": "Nederlands",
4902
+ "lang.nn": "Norsk nynorsk",
4903
+ "lang.no": "Norsk",
4904
+ "lang.nr": "isiNdebele",
4905
+ "lang.nv": "Diné bizaad",
4906
+ "lang.ny": "Chichewa",
4907
+ "lang.oc": "Occitan",
4908
+ "lang.oj": "Anishinaabemowin",
4909
+ "lang.om": "Oromoo",
4910
+ "lang.or": "ଓଡ଼ିଆ",
4911
+ "lang.os": "Ирон",
4912
+ "lang.pa": "ਪੰਜਾਬੀ",
4913
+ "lang.pi": "Pāḷi",
4914
+ "lang.pl": "Polski",
4915
+ "lang.ps": "پښتو",
4916
+ "lang.pt": "Português",
4917
+ "lang.qu": "Runa Simi",
4918
+ "lang.rm": "Rumantsch",
4919
+ "lang.rn": "Kirundi",
4920
+ "lang.ro": "Română",
4921
+ "lang.ru": "Русский",
4922
+ "lang.rw": "Kinyarwanda",
4923
+ "lang.sa": "संस्कृतम्",
4924
+ "lang.sc": "Sardu",
4925
+ "lang.sd": "سنڌي",
4926
+ "lang.se": "Davvisámegiella",
4927
+ "lang.sg": "Sängö",
4928
+ "lang.si": "සිංහල",
4929
+ "lang.sk": "Slovenčina",
4930
+ "lang.sl": "Slovenščina",
4931
+ "lang.sm": "Gagana Samoa",
4932
+ "lang.sn": "chiShona",
4933
+ "lang.so": "Soomaaliga",
4934
+ "lang.sq": "Shqip",
4935
+ "lang.sr": "Српски",
4936
+ "lang.ss": "SiSwati",
4937
+ "lang.st": "Sesotho",
4938
+ "lang.su": "Basa Sunda",
4939
+ "lang.sv": "Svenska",
4940
+ "lang.sw": "Kiswahili",
4941
+ "lang.ta": "தமிழ்",
4942
+ "lang.te": "தெலுங்கு",
4943
+ "lang.tg": "Тоҷикӣ",
4944
+ "lang.th": "ไทย",
4945
+ "lang.ti": "ትግርኛ",
4946
+ "lang.tk": "Türkmençe",
4947
+ "lang.tl": "Tagalog",
4948
+ "lang.tn": "Setswana",
4949
+ "lang.to": "Faka Tonga",
4950
+ "lang.tr": "Türkçe",
4951
+ "lang.ts": "Xitsonga",
4952
+ "lang.tt": "Татарча",
4953
+ "lang.tw": "Twi",
4954
+ "lang.ty": "Reo Tahiti",
4955
+ "lang.ug": "ئۇيغۇرچە",
4956
+ "lang.uk": "Українська",
4957
+ "lang.ur": "اردو",
4958
+ "lang.uz": "Oʻzbekcha",
4959
+ "lang.ve": "Tshivenda",
4960
+ "lang.vi": "Tiếng Việt",
4961
+ "lang.vo": "Volapük",
4962
+ "lang.wa": "Walon",
4963
+ "lang.wo": "Wolof",
4964
+ "lang.xh": "isiXhosa",
4965
+ "lang.yi": "ייִדיש",
4966
+ "lang.yo": "Yorùbá",
4967
+ "lang.za": "Vahcuengh",
4968
+ "lang.zh": "中文",
4969
+ "lang.zu": "isiZulu"
4970
+ };
4971
+
4455
4972
  const EMPTY_DICT = {};
4456
4973
  class StaticLanguageService {
4457
4974
  get defaultLanguage() {
@@ -4471,8 +4988,8 @@ class StaticLanguageService {
4471
4988
  return this.currentLang || this.defaultLanguage;
4472
4989
  }
4473
4990
  set currentLanguage(lang) {
4474
- this.currentLang = lang;
4475
- this.events.languageChanged.next(lang);
4991
+ this.currentLang = this.selectLanguage(lang) || this.languageList[0];
4992
+ this.events.languageChanged.next(this.currentLang);
4476
4993
  }
4477
4994
  get editLanguage() {
4478
4995
  return this.editLang || this.currentLanguage;
@@ -4522,6 +5039,12 @@ class StaticLanguageService {
4522
5039
  this.mergedTranslations = this.translations;
4523
5040
  this.initService();
4524
5041
  }
5042
+ selectLanguage(lang) {
5043
+ if (!lang)
5044
+ return null;
5045
+ return this.languageList.length === 0 || this.languageList.includes(lang)
5046
+ ? lang : null;
5047
+ }
4525
5048
  initService() {
4526
5049
  }
4527
5050
  replaceLanguages(languages) {
@@ -4530,6 +5053,7 @@ class StaticLanguageService {
4530
5053
  this.languageList.forEach(lang => {
4531
5054
  this.translations[lang] = this.translations[lang] || EMPTY_DICT;
4532
5055
  });
5056
+ this.mergeTranslations();
4533
5057
  }
4534
5058
  addLanguages(languages) {
4535
5059
  if (!Array.isArray(languages) || languages.length == 0)
@@ -4630,13 +5154,17 @@ class StaticLanguageService {
4630
5154
  }
4631
5155
  mergeTranslations() {
4632
5156
  const languages = new Set([
5157
+ ...this.languageList,
4633
5158
  ...Object.keys(this.translations),
4634
- ...Object.keys(this.overrideTranslations)
5159
+ ...Object.keys(this.overrideTranslations),
5160
+ ...Object.keys(CALENDAR_TRANSLATIONS),
4635
5161
  ]);
4636
5162
  this.mergedTranslations = Array.from(languages).reduce((merged, language) => {
4637
5163
  merged[language] = {
4638
5164
  ...(this.translations[language] || EMPTY_DICT),
4639
5165
  ...(this.overrideTranslations[language] || EMPTY_DICT),
5166
+ ...(CALENDAR_TRANSLATIONS[language] || CALENDAR_TRANSLATIONS.en),
5167
+ ...LANG_TRANSLATIONS
4640
5168
  };
4641
5169
  return merged;
4642
5170
  }, {});
@@ -4718,12 +5246,6 @@ class LanguageService extends StaticLanguageService {
4718
5246
  await this.useLanguage(lang);
4719
5247
  this.events.languageChanged.next(lang);
4720
5248
  }
4721
- selectLanguage(lang) {
4722
- if (!lang)
4723
- return null;
4724
- return this.languageList.length === 0 || this.languageList.includes(lang)
4725
- ? lang : null;
4726
- }
4727
5249
  async useLanguage(lang) {
4728
5250
  lang = this.selectLanguage(lang);
4729
5251
  this.client.setParam("language", lang);
@@ -7581,6 +8103,436 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.22", ngImpo
7581
8103
  type: Input
7582
8104
  }] } });
7583
8105
 
8106
+ class CalendarComponent {
8107
+ constructor() {
8108
+ this.months = ["jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"];
8109
+ this.daysOfWeek = ["mon", "tue", "wed", "thu", "fri", "sat", "sun"];
8110
+ this.value = model(null);
8111
+ this.min = input(null);
8112
+ this.max = input(null);
8113
+ this.disabledDates = input([]);
8114
+ this.disabledDays = input([]);
8115
+ this.currentMonth = signal(new Date().getMonth());
8116
+ this.currentYear = signal(new Date().getFullYear());
8117
+ this.isDragging = signal(false);
8118
+ this.dragStartCellDate = signal(null);
8119
+ this.dragCurrentCellDate = signal(null);
8120
+ this.initialSelectedStateBeforeDrag = signal(new Map());
8121
+ this.dragTargetState = signal(true);
8122
+ this.isInitialized = false;
8123
+ this.minDate = computed(() => parseValidDate(this.min()));
8124
+ this.maxDate = computed(() => parseValidDate(this.max()));
8125
+ this.disabledTimestamps = computed(() => {
8126
+ return (this.disabledDates() || [])
8127
+ .map(d => parseValidDate(d))
8128
+ .filter((d) => d !== null)
8129
+ .map(d => toMidnight(d).getTime());
8130
+ });
8131
+ this.isMultiSelect = computed(() => Array.isArray(this.value()));
8132
+ // Common Day Validator mapping strategy shared across computed environments
8133
+ this.isDayOfWeekDisabledFn = computed(() => {
8134
+ const disDays = this.disabledDays();
8135
+ return (jsDay) => disDays.some(d => (d === 7 ? 0 : d) === jsDay);
8136
+ });
8137
+ this.validatedValue = computed(() => {
8138
+ const val = this.value();
8139
+ const min = this.minDate();
8140
+ const max = this.maxDate();
8141
+ const disabledTimes = this.disabledTimestamps();
8142
+ const isDayOfWeekDisabled = this.isDayOfWeekDisabledFn();
8143
+ const checkInvalid = (d) => {
8144
+ const midnight = toMidnight(d);
8145
+ if (min && midnight < toMidnight(min))
8146
+ return true;
8147
+ if (max && midnight > toMidnight(max))
8148
+ return true;
8149
+ if (disabledTimes.includes(midnight.getTime()))
8150
+ return true;
8151
+ return isDayOfWeekDisabled(midnight.getDay());
8152
+ };
8153
+ if (Array.isArray(val)) {
8154
+ return val.filter(d => d instanceof Date && !isNaN(d.getTime()) && !checkInvalid(d));
8155
+ }
8156
+ else if (val instanceof Date && !isNaN(val.getTime())) {
8157
+ if (checkInvalid(val)) {
8158
+ return this.findClosestValidDate(val, min, max, disabledTimes, isDayOfWeekDisabled);
8159
+ }
8160
+ return val;
8161
+ }
8162
+ return null;
8163
+ });
8164
+ // --- Computed Navigation States ---
8165
+ this.canGoPrev = computed(() => {
8166
+ const min = this.minDate();
8167
+ if (!min)
8168
+ return true;
8169
+ // Start checking from the month immediately preceding our current view context
8170
+ let testMonth = this.currentMonth() - 1;
8171
+ let testYear = this.currentYear();
8172
+ if (testMonth === -1) {
8173
+ testMonth = 11;
8174
+ testYear--;
8175
+ }
8176
+ const minMidnight = toMidnight(min);
8177
+ // Quick exit if the target month falls completely out of bounding limits
8178
+ const lastDayOfTestMonth = new Date(testYear, testMonth + 1, 0);
8179
+ if (lastDayOfTestMonth < minMidnight)
8180
+ return false;
8181
+ // Perform a deeper scan backwards to see if any valid slot remains reachable
8182
+ while (lastDayOfTestMonth >= minMidnight) {
8183
+ if (this.isMonthAvailable(testYear, testMonth)) {
8184
+ return true;
8185
+ }
8186
+ testMonth--;
8187
+ if (testMonth === -1) {
8188
+ testMonth = 11;
8189
+ testYear--;
8190
+ }
8191
+ lastDayOfTestMonth.setFullYear(testYear, testMonth + 1, 0);
8192
+ }
8193
+ return false;
8194
+ });
8195
+ this.canGoNext = computed(() => {
8196
+ const max = this.maxDate();
8197
+ if (!max)
8198
+ return true;
8199
+ let testMonth = this.currentMonth() + 1;
8200
+ let testYear = this.currentYear();
8201
+ if (testMonth === 12) {
8202
+ testMonth = 0;
8203
+ testYear++;
8204
+ }
8205
+ const maxMidnight = toMidnight(max);
8206
+ const firstDayOfTestMonth = new Date(testYear, testMonth, 1);
8207
+ if (firstDayOfTestMonth > maxMidnight)
8208
+ return false;
8209
+ while (firstDayOfTestMonth <= maxMidnight) {
8210
+ if (this.isMonthAvailable(testYear, testMonth)) {
8211
+ return true;
8212
+ }
8213
+ testMonth++;
8214
+ if (testMonth === 12) {
8215
+ testMonth = 0;
8216
+ testYear++;
8217
+ }
8218
+ firstDayOfTestMonth.setFullYear(testYear, testMonth, 1);
8219
+ }
8220
+ return false;
8221
+ });
8222
+ this.calendarCells = computed(() => {
8223
+ const year = this.currentYear();
8224
+ const month = this.currentMonth();
8225
+ const firstDayOfMonth = new Date(year, month, 1);
8226
+ let startOffset = firstDayOfMonth.getDay() - 1;
8227
+ if (startOffset === -1)
8228
+ startOffset = 6;
8229
+ if (startOffset === 0)
8230
+ startOffset = 7;
8231
+ const gridStartDate = new Date(year, month, 1 - startOffset);
8232
+ const rawCells = [];
8233
+ const min = this.minDate();
8234
+ const max = this.maxDate();
8235
+ const disabledTimes = this.disabledTimestamps();
8236
+ const isDayOfWeekDisabled = this.isDayOfWeekDisabledFn();
8237
+ const currentValue = this.validatedValue();
8238
+ const startDrag = this.dragStartCellDate();
8239
+ const currentDrag = this.dragCurrentCellDate();
8240
+ const dragging = this.isDragging();
8241
+ const dragSnapshot = this.initialSelectedStateBeforeDrag();
8242
+ const targetState = this.dragTargetState();
8243
+ const multiSelectMode = this.isMultiSelect();
8244
+ let dragMinT = Infinity;
8245
+ let dragMaxT = -Infinity;
8246
+ const currentDragT = currentDrag ? toMidnight(currentDrag).getTime() : null;
8247
+ if (multiSelectMode && dragging && startDrag && currentDrag) {
8248
+ const startT = toMidnight(startDrag).getTime();
8249
+ const endT = toMidnight(currentDrag).getTime();
8250
+ dragMinT = Math.min(startT, endT);
8251
+ dragMaxT = Math.max(startT, endT);
8252
+ }
8253
+ const prevMonthLastDayT = toMidnight(new Date(year, month, 0)).getTime();
8254
+ const nextMonthFirstDayT = toMidnight(new Date(year, month + 1, 1)).getTime();
8255
+ for (let row = 0; row < 6; row++) {
8256
+ const firstDateOfRow = new Date(gridStartDate.getFullYear(), gridStartDate.getMonth(), gridStartDate.getDate() + (row * 7));
8257
+ rawCells.push({
8258
+ id: `week-${row}-${firstDateOfRow.getTime()}`,
8259
+ date: null, isCurrentMonth: false, isDisabled: true, isSelected: false, isInDragRange: false,
8260
+ isWeekNum: true, weekNumber: getISOWeekNumber(firstDateOfRow), isRangeStart: false, isRangeEnd: false,
8261
+ isFillerStart: false, isFillerEnd: false
8262
+ });
8263
+ for (let col = 0; col < 7; col++) {
8264
+ const cellDate = new Date(firstDateOfRow.getFullYear(), firstDateOfRow.getMonth(), firstDateOfRow.getDate() + col);
8265
+ const cellMidnight = toMidnight(cellDate);
8266
+ const timestamp = cellMidnight.getTime();
8267
+ let isDisabled = false;
8268
+ if (min && cellMidnight < toMidnight(min))
8269
+ isDisabled = true;
8270
+ if (max && cellMidnight > toMidnight(max))
8271
+ isDisabled = true;
8272
+ if (disabledTimes.includes(timestamp))
8273
+ isDisabled = true;
8274
+ if (isDayOfWeekDisabled(cellMidnight.getDay()))
8275
+ isDisabled = true;
8276
+ let isSelected = false;
8277
+ if (!multiSelectMode) {
8278
+ isSelected = currentValue instanceof Date && isSameDay(currentValue, cellMidnight);
8279
+ }
8280
+ else if (Array.isArray(currentValue)) {
8281
+ isSelected = currentValue.some(d => isSameDay(d, cellMidnight));
8282
+ }
8283
+ let isInDragRange = false;
8284
+ let isRangeStart = false;
8285
+ let isRangeEnd = false;
8286
+ if (dragging) {
8287
+ if (multiSelectMode && startDrag && currentDrag) {
8288
+ if (timestamp >= dragMinT && timestamp <= dragMaxT) {
8289
+ isInDragRange = true;
8290
+ if (!isDisabled)
8291
+ isSelected = targetState;
8292
+ if (timestamp === dragMinT)
8293
+ isRangeStart = true;
8294
+ if (timestamp === dragMaxT)
8295
+ isRangeEnd = true;
8296
+ }
8297
+ else {
8298
+ isSelected = dragSnapshot.get(timestamp) || false;
8299
+ }
8300
+ }
8301
+ else if (!multiSelectMode && currentDragT !== null && timestamp === currentDragT) {
8302
+ isInDragRange = true;
8303
+ if (!isDisabled)
8304
+ isSelected = true;
8305
+ isRangeStart = true;
8306
+ isRangeEnd = true;
8307
+ }
8308
+ }
8309
+ rawCells.push({
8310
+ id: String(timestamp), date: cellDate, isCurrentMonth: cellDate.getMonth() === month,
8311
+ isDisabled, isSelected, isInDragRange, isWeekNum: false, weekNumber: null,
8312
+ isRangeStart, isRangeEnd,
8313
+ isFillerStart: timestamp === nextMonthFirstDayT,
8314
+ isFillerEnd: timestamp === prevMonthLastDayT
8315
+ });
8316
+ }
8317
+ }
8318
+ return rawCells;
8319
+ });
8320
+ effect(() => {
8321
+ const val = this.validatedValue();
8322
+ if (val && !this.isInitialized) {
8323
+ untracked(() => {
8324
+ let referenceDate = null;
8325
+ if (Array.isArray(val) && val.length > 0) {
8326
+ referenceDate = new Date(Math.max(...val.map(d => d.getTime())));
8327
+ }
8328
+ else if (val instanceof Date) {
8329
+ referenceDate = val;
8330
+ }
8331
+ if (referenceDate && !isNaN(referenceDate.getTime())) {
8332
+ this.currentMonth.set(referenceDate.getMonth());
8333
+ this.currentYear.set(referenceDate.getFullYear());
8334
+ this.isInitialized = true;
8335
+ }
8336
+ });
8337
+ }
8338
+ });
8339
+ }
8340
+ // --- Dynamic Month Verification Engine ---
8341
+ isMonthAvailable(year, month) {
8342
+ const min = this.minDate();
8343
+ const max = this.maxDate();
8344
+ const disabledTimes = this.disabledTimestamps();
8345
+ const isDayOfWeekDisabled = this.isDayOfWeekDisabledFn();
8346
+ const loopDate = new Date(year, month, 1);
8347
+ const minMidnight = min ? toMidnight(min).getTime() : -Infinity;
8348
+ const maxMidnight = max ? toMidnight(max).getTime() : Infinity;
8349
+ // March day-by-day through the target month to see if at least one day is selectable
8350
+ while (loopDate.getMonth() === month) {
8351
+ const currentMidnight = toMidnight(loopDate);
8352
+ const currentT = currentMidnight.getTime();
8353
+ if (currentT >= minMidnight && currentT <= maxMidnight) {
8354
+ if (!disabledTimes.includes(currentT) && !isDayOfWeekDisabled(currentMidnight.getDay())) {
8355
+ return true; // Found a valid date slot
8356
+ }
8357
+ }
8358
+ loopDate.setDate(loopDate.getDate() + 1);
8359
+ }
8360
+ return false;
8361
+ }
8362
+ // --- Smart Navigation Control Blocks ---
8363
+ prevMonth() {
8364
+ if (!this.canGoPrev())
8365
+ return;
8366
+ let targetMonth = this.currentMonth() - 1;
8367
+ let targetYear = this.currentYear();
8368
+ if (targetMonth === -1) {
8369
+ targetMonth = 11;
8370
+ targetYear--;
8371
+ }
8372
+ // Leapfrog loop to bypass entirely disabled months
8373
+ while (!this.isMonthAvailable(targetYear, targetMonth)) {
8374
+ targetMonth--;
8375
+ if (targetMonth === -1) {
8376
+ targetMonth = 11;
8377
+ targetYear--;
8378
+ }
8379
+ }
8380
+ this.currentMonth.set(targetMonth);
8381
+ this.currentYear.set(targetYear);
8382
+ }
8383
+ nextMonth() {
8384
+ if (!this.canGoNext())
8385
+ return;
8386
+ let targetMonth = this.currentMonth() + 1;
8387
+ let targetYear = this.currentYear();
8388
+ if (targetMonth === 12) {
8389
+ targetMonth = 0;
8390
+ targetYear++;
8391
+ }
8392
+ // Leapfrog loop to bypass entirely disabled months
8393
+ while (!this.isMonthAvailable(targetYear, targetMonth)) {
8394
+ targetMonth++;
8395
+ if (targetMonth === 12) {
8396
+ targetMonth = 0;
8397
+ targetYear++;
8398
+ }
8399
+ }
8400
+ this.currentMonth.set(targetMonth);
8401
+ this.currentYear.set(targetYear);
8402
+ }
8403
+ onMouseDown(cell, event) {
8404
+ if (cell.isWeekNum || cell.isDisabled || !cell.date)
8405
+ return;
8406
+ this.dragStartCellDate.set(cell.date);
8407
+ this.dragCurrentCellDate.set(cell.date);
8408
+ this.isDragging.set(true);
8409
+ const snapshotMap = new Map();
8410
+ if (!this.isMultiSelect()) {
8411
+ this.dragTargetState.set(true);
8412
+ }
8413
+ else {
8414
+ this.dragTargetState.set(!cell.isSelected);
8415
+ (this.validatedValue() || []).forEach(d => {
8416
+ snapshotMap.set(toMidnight(d).getTime(), true);
8417
+ });
8418
+ }
8419
+ this.initialSelectedStateBeforeDrag.set(snapshotMap);
8420
+ }
8421
+ onMouseEnter(cell) {
8422
+ if (!this.isDragging() || cell.isWeekNum)
8423
+ return;
8424
+ this.dragCurrentCellDate.set(cell.date);
8425
+ }
8426
+ onGridMouseLeave() { }
8427
+ onMouseUpGlobal() {
8428
+ if (!this.isDragging())
8429
+ return;
8430
+ untracked(() => {
8431
+ const startDrag = this.dragStartCellDate();
8432
+ const currentDrag = this.dragCurrentCellDate();
8433
+ if (startDrag && currentDrag) {
8434
+ if (!this.isMultiSelect()) {
8435
+ const cellCells = this.calendarCells();
8436
+ const hoveredCell = cellCells.find(c => c.date && isSameDay(c.date, currentDrag));
8437
+ if (hoveredCell && !hoveredCell.isDisabled) {
8438
+ this.value.set(currentDrag);
8439
+ this.currentMonth.set(currentDrag.getMonth());
8440
+ this.currentYear.set(currentDrag.getFullYear());
8441
+ }
8442
+ }
8443
+ else {
8444
+ const targetState = this.dragTargetState();
8445
+ const startT = toMidnight(startDrag).getTime();
8446
+ const endT = toMidnight(currentDrag).getTime();
8447
+ const minT = Math.min(startT, endT);
8448
+ const maxT = Math.max(startT, endT);
8449
+ const previousSelection = this.validatedValue() || [];
8450
+ const updatedSelectionMap = new Map();
8451
+ previousSelection.forEach(d => {
8452
+ const t = toMidnight(d).getTime();
8453
+ if (t < minT || t > maxT)
8454
+ updatedSelectionMap.set(t, d);
8455
+ });
8456
+ const min = this.minDate();
8457
+ const max = this.maxDate();
8458
+ const disabledTimes = this.disabledTimestamps();
8459
+ const isDayOfWeekDisabled = this.isDayOfWeekDisabledFn();
8460
+ const dynamicDateCursor = new Date(minT);
8461
+ const loopEndMidnight = new Date(maxT);
8462
+ while (dynamicDateCursor <= loopEndMidnight) {
8463
+ const currentT = dynamicDateCursor.getTime();
8464
+ let isDayRestricted = false;
8465
+ if (min && dynamicDateCursor < toMidnight(min))
8466
+ isDayRestricted = true;
8467
+ if (max && dynamicDateCursor > toMidnight(max))
8468
+ isDayRestricted = true;
8469
+ if (disabledTimes.includes(currentT))
8470
+ isDayRestricted = true;
8471
+ if (isDayOfWeekDisabled(dynamicDateCursor.getDay()))
8472
+ isDayRestricted = true;
8473
+ if (!isDayRestricted) {
8474
+ if (targetState) {
8475
+ updatedSelectionMap.set(currentT, new Date(currentT));
8476
+ }
8477
+ else {
8478
+ updatedSelectionMap.delete(currentT);
8479
+ }
8480
+ }
8481
+ dynamicDateCursor.setDate(dynamicDateCursor.getDate() + 1);
8482
+ }
8483
+ this.value.set(Array.from(updatedSelectionMap.values()));
8484
+ this.currentMonth.set(currentDrag.getMonth());
8485
+ this.currentYear.set(currentDrag.getFullYear());
8486
+ }
8487
+ }
8488
+ });
8489
+ this.isDragging.set(false);
8490
+ this.dragStartCellDate.set(null);
8491
+ this.dragCurrentCellDate.set(null);
8492
+ this.initialSelectedStateBeforeDrag.set(new Map());
8493
+ }
8494
+ findClosestValidDate(baseDate, min, max, disabledTimes, isDayOfWeekDisabled = (jsDay) => false) {
8495
+ const midnightBase = toMidnight(baseDate);
8496
+ let direction = 1;
8497
+ let testDate = new Date(midnightBase.getTime());
8498
+ if (min && midnightBase < toMidnight(min)) {
8499
+ testDate = new Date(toMidnight(min).getTime());
8500
+ direction = 1;
8501
+ }
8502
+ else if (max && midnightBase > toMidnight(max)) {
8503
+ testDate = new Date(toMidnight(max).getTime());
8504
+ direction = -1;
8505
+ }
8506
+ let iterations = 0;
8507
+ while (iterations < 365) {
8508
+ const currentT = testDate.getTime();
8509
+ let isInvalid = false;
8510
+ if (min && testDate < toMidnight(min))
8511
+ isInvalid = true;
8512
+ if (max && testDate > toMidnight(max))
8513
+ isInvalid = true;
8514
+ if (disabledTimes.includes(currentT))
8515
+ isInvalid = true;
8516
+ if (isDayOfWeekDisabled(testDate.getDay()))
8517
+ isInvalid = true;
8518
+ if (!isInvalid)
8519
+ return testDate;
8520
+ testDate.setDate(testDate.getDate() + direction);
8521
+ iterations++;
8522
+ }
8523
+ return min ? min : (max ? max : new Date());
8524
+ }
8525
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.22", ngImport: i0, type: CalendarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8526
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.22", type: CalendarComponent, isStandalone: false, selector: "calendar", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, disabledDates: { classPropertyName: "disabledDates", publicName: "disabledDates", isSignal: true, isRequired: false, transformFunction: null }, disabledDays: { classPropertyName: "disabledDays", publicName: "disabledDays", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { listeners: { "window:mouseup": "onMouseUpGlobal($event)" } }, ngImport: i0, template: "<div class=\"calendar-container\">\r\n <div class=\"calendar-header\">\r\n <div class=\"prev\">\r\n @if (canGoPrev()) {\r\n <btn (click)=\"prevMonth()\" icon=\"chevron-left\"></btn>\r\n }\r\n </div>\r\n <div class=\"header-label\">\r\n {{ \"month.\" + months[currentMonth()] | translate }} {{ currentYear() }}\r\n </div>\r\n <div class=\"next\">\r\n @if (canGoNext()) {\r\n <btn (click)=\"nextMonth()\" icon=\"chevron-right\"></btn>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div class=\"calendar-grid days-header\">\r\n <div class=\"day-label\"></div>\r\n @for (day of daysOfWeek; track day) {\r\n <div class=\"day-label\">{{ \"day.\" + day | translate }}</div>\r\n }\r\n </div>\r\n\r\n <div class=\"calendar-grid days-grid\" (mouseleave)=\"onGridMouseLeave()\">\r\n @for (cell of calendarCells(); track cell.id) {\r\n @if (cell.isWeekNum) {\r\n <div class=\"calendar-cell week-number-cell\">\r\n {{ cell.weekNumber }}\r\n </div>\r\n }\r\n\r\n @else {\r\n <div\r\n class=\"calendar-cell\"\r\n [class.filler]=\"!cell.isCurrentMonth\"\r\n [class.filler-start]=\"cell.isFillerStart\"\r\n [class.filler-end]=\"cell.isFillerEnd\"\r\n [class.disabled]=\"cell.isDisabled\"\r\n [class.in-range]=\"cell.isInDragRange\"\r\n [class.range-start]=\"cell.isRangeStart\"\r\n [class.range-end]=\"cell.isRangeEnd\"\r\n [class.active]=\"cell.isSelected\"\r\n (mousedown)=\"onMouseDown(cell, $event)\"\r\n (mouseenter)=\"onMouseEnter(cell)\"\r\n >\r\n <span class=\"cell-number\">{{ cell.date?.getDate() }}</span>\r\n </div>\r\n }\r\n }\r\n </div>\r\n</div>\r\n", styles: [".calendar-container{--calendar-color: var(--primary-color, var(--bs-primary, var(--mat-sys-primary, #666666)));--calendar-secondary-color: #686868;--calendar-padding: 4px;--calendar-cell-padding: 3px;--calendar-num-size: 30px;--calendar-num-radius: calc(var(--calendar-num-size) / 2 + var(--calendar-cell-padding));min-width:300px;margin-bottom:5px;border:1px solid #e0e0e0;padding:var(--calendar-padding);-webkit-user-select:none;user-select:none;background:#fff}.calendar-container *{box-sizing:border-box}.calendar-container .calendar-header{display:grid;grid-template-columns:50px 1fr 50px;justify-content:space-between;align-items:center;background-color:var(--calendar-color);color:#fff;padding:var(--calendar-padding);border-radius:3px;font-weight:700}.calendar-container .calendar-header .header-label{text-align:center}.calendar-container .calendar-header .prev{display:flex;justify-content:flex-start}.calendar-container .calendar-header .next{display:flex;justify-content:flex-end}.calendar-container .calendar-grid{display:grid;gap:5px 0;grid-template-columns:repeat(8,1fr);text-align:center}.calendar-container .days-header{margin-top:12px;font-weight:500;color:#757575;font-size:14px}.calendar-container .day-label{padding:8px 0}.calendar-container .days-grid{margin-top:8px}.calendar-container .calendar-cell{position:relative;padding:var(--calendar-cell-padding);font-size:14px;color:#333;cursor:pointer;display:flex;align-items:center;justify-content:center}.calendar-container .calendar-cell.week-number-cell{color:var(--calendar-color);font-weight:700;cursor:default;pointer-events:none}.calendar-container .calendar-cell.filler{color:#666;background-color:#f6f6f6}.calendar-container .calendar-cell.filler.filler-start{border-top-left-radius:var(--calendar-num-radius);border-bottom-left-radius:var(--calendar-num-radius)}.calendar-container .calendar-cell.filler.filler-end{border-top-right-radius:var(--calendar-num-radius);border-bottom-right-radius:var(--calendar-num-radius)}.calendar-container .calendar-cell.in-range:before{opacity:.5;inset:0;content:\" \";position:absolute;background:var(--calendar-color)}.calendar-container .calendar-cell.in-range.range-start:before{border-top-left-radius:var(--calendar-num-radius);border-bottom-left-radius:var(--calendar-num-radius)}.calendar-container .calendar-cell.in-range.range-end:before{border-top-right-radius:var(--calendar-num-radius);border-bottom-right-radius:var(--calendar-num-radius)}.calendar-container .calendar-cell.disabled{color:#7e7e7e;opacity:.75;cursor:default}.calendar-container .cell-number{position:relative;border-radius:50%;width:var(--calendar-num-size);height:var(--calendar-num-size);display:flex;align-items:center;justify-content:center}.calendar-container .calendar-cell.active .cell-number{background-color:var(--calendar-color);color:#fff}\n"], dependencies: [{ kind: "component", type: BtnComponent, selector: "btn", inputs: ["label", "tooltip", "icon", "disabled", "path", "type", "size"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
8527
+ }
8528
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.22", ngImport: i0, type: CalendarComponent, decorators: [{
8529
+ type: Component,
8530
+ args: [{ standalone: false, encapsulation: ViewEncapsulation.None, selector: "calendar", template: "<div class=\"calendar-container\">\r\n <div class=\"calendar-header\">\r\n <div class=\"prev\">\r\n @if (canGoPrev()) {\r\n <btn (click)=\"prevMonth()\" icon=\"chevron-left\"></btn>\r\n }\r\n </div>\r\n <div class=\"header-label\">\r\n {{ \"month.\" + months[currentMonth()] | translate }} {{ currentYear() }}\r\n </div>\r\n <div class=\"next\">\r\n @if (canGoNext()) {\r\n <btn (click)=\"nextMonth()\" icon=\"chevron-right\"></btn>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div class=\"calendar-grid days-header\">\r\n <div class=\"day-label\"></div>\r\n @for (day of daysOfWeek; track day) {\r\n <div class=\"day-label\">{{ \"day.\" + day | translate }}</div>\r\n }\r\n </div>\r\n\r\n <div class=\"calendar-grid days-grid\" (mouseleave)=\"onGridMouseLeave()\">\r\n @for (cell of calendarCells(); track cell.id) {\r\n @if (cell.isWeekNum) {\r\n <div class=\"calendar-cell week-number-cell\">\r\n {{ cell.weekNumber }}\r\n </div>\r\n }\r\n\r\n @else {\r\n <div\r\n class=\"calendar-cell\"\r\n [class.filler]=\"!cell.isCurrentMonth\"\r\n [class.filler-start]=\"cell.isFillerStart\"\r\n [class.filler-end]=\"cell.isFillerEnd\"\r\n [class.disabled]=\"cell.isDisabled\"\r\n [class.in-range]=\"cell.isInDragRange\"\r\n [class.range-start]=\"cell.isRangeStart\"\r\n [class.range-end]=\"cell.isRangeEnd\"\r\n [class.active]=\"cell.isSelected\"\r\n (mousedown)=\"onMouseDown(cell, $event)\"\r\n (mouseenter)=\"onMouseEnter(cell)\"\r\n >\r\n <span class=\"cell-number\">{{ cell.date?.getDate() }}</span>\r\n </div>\r\n }\r\n }\r\n </div>\r\n</div>\r\n", styles: [".calendar-container{--calendar-color: var(--primary-color, var(--bs-primary, var(--mat-sys-primary, #666666)));--calendar-secondary-color: #686868;--calendar-padding: 4px;--calendar-cell-padding: 3px;--calendar-num-size: 30px;--calendar-num-radius: calc(var(--calendar-num-size) / 2 + var(--calendar-cell-padding));min-width:300px;margin-bottom:5px;border:1px solid #e0e0e0;padding:var(--calendar-padding);-webkit-user-select:none;user-select:none;background:#fff}.calendar-container *{box-sizing:border-box}.calendar-container .calendar-header{display:grid;grid-template-columns:50px 1fr 50px;justify-content:space-between;align-items:center;background-color:var(--calendar-color);color:#fff;padding:var(--calendar-padding);border-radius:3px;font-weight:700}.calendar-container .calendar-header .header-label{text-align:center}.calendar-container .calendar-header .prev{display:flex;justify-content:flex-start}.calendar-container .calendar-header .next{display:flex;justify-content:flex-end}.calendar-container .calendar-grid{display:grid;gap:5px 0;grid-template-columns:repeat(8,1fr);text-align:center}.calendar-container .days-header{margin-top:12px;font-weight:500;color:#757575;font-size:14px}.calendar-container .day-label{padding:8px 0}.calendar-container .days-grid{margin-top:8px}.calendar-container .calendar-cell{position:relative;padding:var(--calendar-cell-padding);font-size:14px;color:#333;cursor:pointer;display:flex;align-items:center;justify-content:center}.calendar-container .calendar-cell.week-number-cell{color:var(--calendar-color);font-weight:700;cursor:default;pointer-events:none}.calendar-container .calendar-cell.filler{color:#666;background-color:#f6f6f6}.calendar-container .calendar-cell.filler.filler-start{border-top-left-radius:var(--calendar-num-radius);border-bottom-left-radius:var(--calendar-num-radius)}.calendar-container .calendar-cell.filler.filler-end{border-top-right-radius:var(--calendar-num-radius);border-bottom-right-radius:var(--calendar-num-radius)}.calendar-container .calendar-cell.in-range:before{opacity:.5;inset:0;content:\" \";position:absolute;background:var(--calendar-color)}.calendar-container .calendar-cell.in-range.range-start:before{border-top-left-radius:var(--calendar-num-radius);border-bottom-left-radius:var(--calendar-num-radius)}.calendar-container .calendar-cell.in-range.range-end:before{border-top-right-radius:var(--calendar-num-radius);border-bottom-right-radius:var(--calendar-num-radius)}.calendar-container .calendar-cell.disabled{color:#7e7e7e;opacity:.75;cursor:default}.calendar-container .cell-number{position:relative;border-radius:50%;width:var(--calendar-num-size);height:var(--calendar-num-size);display:flex;align-items:center;justify-content:center}.calendar-container .calendar-cell.active .cell-number{background-color:var(--calendar-color);color:#fff}\n"] }]
8531
+ }], ctorParameters: () => [], propDecorators: { onMouseUpGlobal: [{
8532
+ type: HostListener,
8533
+ args: ["window:mouseup", ["$event"]]
8534
+ }] } });
8535
+
7584
8536
  class CloseBtnComponent {
7585
8537
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.22", ngImport: i0, type: CloseBtnComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7586
8538
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.22", type: CloseBtnComponent, isStandalone: false, selector: "close-btn", ngImport: i0, template: "", isInline: true, styles: ["close-btn{--close-bg: var(--primary-color, rgba(0, 0, 0, .3));--close-color: #ffffff;--close-size: 18px;--close-distance: 4px;--close-spacing: 8px;position:relative;display:block;width:var(--close-size);height:var(--close-size);cursor:pointer;transition:.2s ease;background-color:var(--close-bg);border-radius:50%}close-btn:before,close-btn:after{--rotation: 45deg;content:\"\";position:absolute;top:50%;left:50%;width:calc(100% - var(--close-spacing));transform:translate(-50%,-50%) rotate(var(--rotation));height:1px;background:var(--close-color);transition:.2s ease}close-btn:after{--rotation: -45deg}\n"], encapsulation: i0.ViewEncapsulation.None }); }
@@ -9860,6 +10812,7 @@ const directives = [
9860
10812
  const components = [
9861
10813
  BtnComponent,
9862
10814
  BtnDefaultComponent,
10815
+ CalendarComponent,
9863
10816
  ChipsComponent,
9864
10817
  CloseBtnComponent,
9865
10818
  CodeEditorComponent,
@@ -10105,8 +11058,8 @@ class NgxUtilsModule {
10105
11058
  };
10106
11059
  }
10107
11060
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.22", ngImport: i0, type: NgxUtilsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
10108
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.22", ngImport: i0, type: NgxUtilsModule, declarations: [ChunkPipe, EntriesPipe, ExtraItemPropertiesPipe, FilterPipe, FindPipe, FormatNumberPipe, GetOffsetPipe, GetTypePipe, GetValuePipe, GlobalTemplatePipe, GroupByPipe, IncludesPipe, IsTypePipe, JoinPipe, KeysPipe, MapPipe, MaxPipe, MinPipe, PopPipe, ReducePipe, RemapPipe, ReplacePipe, ReversePipe, RoundPipe, SafeHtmlPipe, ShiftPipe, SplitPipe, SyncAsyncPipe, TranslatePipe, ValuesPipe, AsyncMethodBase, AsyncMethodDirective, AsyncMethodTargetDirective, BackgroundDirective, ComponentLoaderDirective, DynamicTableTemplateDirective, GlobalTemplateDirective, IconDirective, NgxTemplateOutletDirective, PaginationDirective, PaginationItemDirective, ResourceIfDirective, StickyDirective, StickyClassDirective, DropdownDirective, DropdownContentDirective, DropdownToggleDirective, TabsItemDirective, TabsTemplateDirective, UnorderedListItemDirective, UnorderedListTemplateDirective, BtnComponent, BtnDefaultComponent, ChipsComponent, CloseBtnComponent, CodeEditorComponent, DropListComponent, DropdownBoxComponent, DynamicTableComponent, DynamicTableCellComponent, FakeModuleComponent, PaginationMenuComponent, IconComponent, IconDefaultComponent, InteractiveCanvasComponent, InteractiveItemComponent, InteractiveCircleComponent, InteractiveRectComponent, TabsComponent, UnorderedListComponent, UploadComponent, WysiwygComponent], imports: [CommonModule,
10109
- FormsModule], exports: [ChunkPipe, EntriesPipe, ExtraItemPropertiesPipe, FilterPipe, FindPipe, FormatNumberPipe, GetOffsetPipe, GetTypePipe, GetValuePipe, GlobalTemplatePipe, GroupByPipe, IncludesPipe, IsTypePipe, JoinPipe, KeysPipe, MapPipe, MaxPipe, MinPipe, PopPipe, ReducePipe, RemapPipe, ReplacePipe, ReversePipe, RoundPipe, SafeHtmlPipe, ShiftPipe, SplitPipe, SyncAsyncPipe, TranslatePipe, ValuesPipe, AsyncMethodBase, AsyncMethodDirective, AsyncMethodTargetDirective, BackgroundDirective, ComponentLoaderDirective, DynamicTableTemplateDirective, GlobalTemplateDirective, IconDirective, NgxTemplateOutletDirective, PaginationDirective, PaginationItemDirective, ResourceIfDirective, StickyDirective, StickyClassDirective, DropdownDirective, DropdownContentDirective, DropdownToggleDirective, TabsItemDirective, TabsTemplateDirective, UnorderedListItemDirective, UnorderedListTemplateDirective, BtnComponent, BtnDefaultComponent, ChipsComponent, CloseBtnComponent, CodeEditorComponent, DropListComponent, DropdownBoxComponent, DynamicTableComponent, DynamicTableCellComponent, FakeModuleComponent, PaginationMenuComponent, IconComponent, IconDefaultComponent, InteractiveCanvasComponent, InteractiveItemComponent, InteractiveCircleComponent, InteractiveRectComponent, TabsComponent, UnorderedListComponent, UploadComponent, WysiwygComponent, FormsModule] }); }
11061
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.22", ngImport: i0, type: NgxUtilsModule, declarations: [ChunkPipe, EntriesPipe, ExtraItemPropertiesPipe, FilterPipe, FindPipe, FormatNumberPipe, GetOffsetPipe, GetTypePipe, GetValuePipe, GlobalTemplatePipe, GroupByPipe, IncludesPipe, IsTypePipe, JoinPipe, KeysPipe, MapPipe, MaxPipe, MinPipe, PopPipe, ReducePipe, RemapPipe, ReplacePipe, ReversePipe, RoundPipe, SafeHtmlPipe, ShiftPipe, SplitPipe, SyncAsyncPipe, TranslatePipe, ValuesPipe, AsyncMethodBase, AsyncMethodDirective, AsyncMethodTargetDirective, BackgroundDirective, ComponentLoaderDirective, DynamicTableTemplateDirective, GlobalTemplateDirective, IconDirective, NgxTemplateOutletDirective, PaginationDirective, PaginationItemDirective, ResourceIfDirective, StickyDirective, StickyClassDirective, DropdownDirective, DropdownContentDirective, DropdownToggleDirective, TabsItemDirective, TabsTemplateDirective, UnorderedListItemDirective, UnorderedListTemplateDirective, BtnComponent, BtnDefaultComponent, CalendarComponent, ChipsComponent, CloseBtnComponent, CodeEditorComponent, DropListComponent, DropdownBoxComponent, DynamicTableComponent, DynamicTableCellComponent, FakeModuleComponent, PaginationMenuComponent, IconComponent, IconDefaultComponent, InteractiveCanvasComponent, InteractiveItemComponent, InteractiveCircleComponent, InteractiveRectComponent, TabsComponent, UnorderedListComponent, UploadComponent, WysiwygComponent], imports: [CommonModule,
11062
+ FormsModule], exports: [ChunkPipe, EntriesPipe, ExtraItemPropertiesPipe, FilterPipe, FindPipe, FormatNumberPipe, GetOffsetPipe, GetTypePipe, GetValuePipe, GlobalTemplatePipe, GroupByPipe, IncludesPipe, IsTypePipe, JoinPipe, KeysPipe, MapPipe, MaxPipe, MinPipe, PopPipe, ReducePipe, RemapPipe, ReplacePipe, ReversePipe, RoundPipe, SafeHtmlPipe, ShiftPipe, SplitPipe, SyncAsyncPipe, TranslatePipe, ValuesPipe, AsyncMethodBase, AsyncMethodDirective, AsyncMethodTargetDirective, BackgroundDirective, ComponentLoaderDirective, DynamicTableTemplateDirective, GlobalTemplateDirective, IconDirective, NgxTemplateOutletDirective, PaginationDirective, PaginationItemDirective, ResourceIfDirective, StickyDirective, StickyClassDirective, DropdownDirective, DropdownContentDirective, DropdownToggleDirective, TabsItemDirective, TabsTemplateDirective, UnorderedListItemDirective, UnorderedListTemplateDirective, BtnComponent, BtnDefaultComponent, CalendarComponent, ChipsComponent, CloseBtnComponent, CodeEditorComponent, DropListComponent, DropdownBoxComponent, DynamicTableComponent, DynamicTableCellComponent, FakeModuleComponent, PaginationMenuComponent, IconComponent, IconDefaultComponent, InteractiveCanvasComponent, InteractiveItemComponent, InteractiveCircleComponent, InteractiveRectComponent, TabsComponent, UnorderedListComponent, UploadComponent, WysiwygComponent, FormsModule] }); }
10110
11063
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.22", ngImport: i0, type: NgxUtilsModule, providers: pipes, imports: [CommonModule,
10111
11064
  FormsModule, FormsModule] }); }
10112
11065
  }
@@ -10136,5 +11089,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.22", ngImpo
10136
11089
  * Generated bundle index. Do not edit.
10137
11090
  */
10138
11091
 
10139
- export { API_SERVICE, APP_BASE_URL, AUTH_SERVICE, AclService, AjaxRequestHandler, ApiService, ArrayUtils, AsyncMethodBase, AsyncMethodDirective, AsyncMethodTargetDirective, AuthGuard, BASE_CONFIG, BUTTON_TYPE, BackgroundDirective, BaseDialogService, BaseHttpClient, BaseHttpService, BaseToasterService, BtnComponent, BtnDefaultComponent, CONFIG_SERVICE, CacheService, CanvasColor, CanvasUtils, ChipsComponent, ChunkPipe, Circle, CloseBtnComponent, CodeEditorComponent, ComponentLoaderDirective, ComponentLoaderService, ConfigService, DIALOG_SERVICE, DateUtils, DragDropEventPlugin, DropListComponent, DropdownBoxComponent, DropdownContentDirective, DropdownDirective, DropdownToggleDirective, DynamicTableCellComponent, DynamicTableComponent, DynamicTableTemplateDirective, EDITOR_TYPES, EPSILON, ERROR_HANDLER, EXPRESS_REQUEST, EntriesPipe, Enum, ErrorHandlerService, EventsService, ExclusionsRenderer, ExtraItemPropertiesPipe, FactoryDependencies, FakeModuleComponent, FileSystemEntry, FileUtils, FilterPipe, FindPipe, ForbiddenZone, FormatNumberPipe, FormatterService, GenericValue, GetOffsetPipe, GetTypePipe, GetValuePipe, GlobalTemplateDirective, GlobalTemplatePipe, GlobalTemplateService, GroupByPipe, HitZoneRenderer, HrefSerializer, ICON_MAP, ICON_SERVICE, ICON_TYPE, IConfiguration, IconComponent, IconDefaultComponent, IconDirective, IconService, IncludesPipe, Initializer, InteractiveCanvasComponent, InteractiveCircleComponent, InteractiveItemComponent, InteractiveRectComponent, IsTypePipe, JoinPipe, KeysPipe, LANGUAGE_SERVICE, LanguageService, LoaderUtils, LocalHttpService, MapPipe, MathUtils, MaxPipe, MinPipe, NgxTemplateOutletDirective, NgxUtilsModule, OPTIONS_TOKEN, ObjectType, ObjectUtils, ObservableUtils, OpenApiService, Oval, PROMISE_SERVICE, PaginationDirective, PaginationItemContext, PaginationItemDirective, PaginationMenuComponent, Point, PopPipe, PromiseService, RESIZE_DELAY, RESIZE_STRATEGY, ROOT_ELEMENT, Rect, ReducePipe, ReflectUtils, RemapPipe, ReplacePipe, RequestBag, ResizeEventPlugin, ResourceIfContext, ResourceIfDirective, ReversePipe, RoundPipe, RulerCanvasRenderer, SCHEMA_SELECTOR, SCRIPT_PARAMS, STATIC_SCHEMAS, SafeHtmlPipe, ScrollEventPlugin, SetUtils, ShapeGroup, ShiftPipe, SocketClient, SocketService, SplitPipe, StateService, StaticAuthService, StaticLanguageService, StickyClassDirective, StickyDirective, StorageMode, StorageService, StringUtils, SyncAsyncPipe, TOASTER_SERVICE, TabsComponent, TabsItemDirective, TabsTemplateDirective, TimerUtils, TranslatePipe, TranslatedUrlSerializer, UniqueUtils, UniversalService, UnorderedListComponent, UnorderedListItemDirective, UnorderedListTemplateDirective, UploadComponent, ValuedPromise, ValuesPipe, WysiwygComponent, addPts, cachedFactory, cancelablePromise, checkTransitions, clamp, computedPrevious, createTypedProvider, cssStyles, cssVariables, diffEntities, distance, distanceSq, dividePts, dotProduct, ensurePoint, eqPts, getComponentDef, getCssVariables, getRoot, getType, impatientPromise, injectOptions, isBrowser, isEqual, isFunction, isObject, isPoint, isString, isStringWithValue, isZero, lengthOfPt, lengthSq, lerpPts, md5, multiplyPts, negatePt, normalizePt, normalizeRange, overflow, parseSelector, perpendicular, promiseTimeout, provideEntryComponents, provideOptions, provideWithOptions, rotateDeg, rotateRad, scalePt, selectorMatchesList, stringify, subPts, svgToDataUri, switchClass, toDegrees, toRadians, toStringArray, tripleProduct };
11092
+ export { API_SERVICE, APP_BASE_URL, AUTH_SERVICE, AclService, AjaxRequestHandler, ApiService, ArrayUtils, AsyncMethodBase, AsyncMethodDirective, AsyncMethodTargetDirective, AuthGuard, BASE_CONFIG, BUTTON_TYPE, BackgroundDirective, BaseDialogService, BaseHttpClient, BaseHttpService, BaseToasterService, BtnComponent, BtnDefaultComponent, CONFIG_SERVICE, CacheService, CalendarComponent, CanvasColor, CanvasUtils, ChipsComponent, ChunkPipe, Circle, CloseBtnComponent, CodeEditorComponent, ComponentLoaderDirective, ComponentLoaderService, ConfigService, DIALOG_SERVICE, DateUtils, DragDropEventPlugin, DropListComponent, DropdownBoxComponent, DropdownContentDirective, DropdownDirective, DropdownToggleDirective, DynamicTableCellComponent, DynamicTableComponent, DynamicTableTemplateDirective, EDITOR_TYPES, EPSILON, ERROR_HANDLER, EXPRESS_REQUEST, EntriesPipe, Enum, ErrorHandlerService, EventsService, ExclusionsRenderer, ExtraItemPropertiesPipe, FactoryDependencies, FakeModuleComponent, FileSystemEntry, FileUtils, FilterPipe, FindPipe, ForbiddenZone, FormatNumberPipe, FormatterService, GenericValue, GetOffsetPipe, GetTypePipe, GetValuePipe, GlobalTemplateDirective, GlobalTemplatePipe, GlobalTemplateService, GroupByPipe, HitZoneRenderer, HrefSerializer, ICON_MAP, ICON_SERVICE, ICON_TYPE, IConfiguration, IconComponent, IconDefaultComponent, IconDirective, IconService, IncludesPipe, Initializer, InteractiveCanvasComponent, InteractiveCircleComponent, InteractiveItemComponent, InteractiveRectComponent, IsTypePipe, JoinPipe, KeysPipe, LANGUAGE_SERVICE, LanguageService, LoaderUtils, LocalHttpService, MapPipe, MathUtils, MaxPipe, MinPipe, NgxTemplateOutletDirective, NgxUtilsModule, OPTIONS_TOKEN, ObjectType, ObjectUtils, ObservableUtils, OpenApiService, Oval, PROMISE_SERVICE, PaginationDirective, PaginationItemContext, PaginationItemDirective, PaginationMenuComponent, Point, PopPipe, PromiseService, RESIZE_DELAY, RESIZE_STRATEGY, ROOT_ELEMENT, Rect, ReducePipe, ReflectUtils, RemapPipe, ReplacePipe, RequestBag, ResizeEventPlugin, ResourceIfContext, ResourceIfDirective, ReversePipe, RoundPipe, RulerCanvasRenderer, SCHEMA_SELECTOR, SCRIPT_PARAMS, STATIC_SCHEMAS, SafeHtmlPipe, ScrollEventPlugin, SetUtils, ShapeGroup, ShiftPipe, SocketClient, SocketService, SplitPipe, StateService, StaticAuthService, StaticLanguageService, StickyClassDirective, StickyDirective, StorageMode, StorageService, StringUtils, SyncAsyncPipe, TOASTER_SERVICE, TabsComponent, TabsItemDirective, TabsTemplateDirective, TimerUtils, TranslatePipe, TranslatedUrlSerializer, UniqueUtils, UniversalService, UnorderedListComponent, UnorderedListItemDirective, UnorderedListTemplateDirective, UploadComponent, ValuedPromise, ValuesPipe, WysiwygComponent, addDate, addPts, cachedFactory, cancelablePromise, checkTransitions, clamp, computedPrevious, createTypedProvider, cssStyles, cssVariables, diffEntities, distance, distanceSq, dividePts, dotProduct, ensurePoint, eqPts, getComponentDef, getCssVariables, getISOWeekNumber, getRoot, getType, impatientPromise, injectOptions, isBrowser, isEqual, isFunction, isObject, isPoint, isSameDay, isString, isStringWithValue, isZero, lengthOfPt, lengthSq, lerpPts, md5, multiplyPts, negatePt, normalizePt, normalizeRange, overflow, parseSelector, parseValidDate, perpendicular, promiseTimeout, provideEntryComponents, provideOptions, provideWithOptions, rotateDeg, rotateRad, scalePt, selectorMatchesList, stringify, subPts, svgToDataUri, switchClass, toDegrees, toMidnight, toRadians, toStringArray, tripleProduct };
10140
11093
  //# sourceMappingURL=stemy-ngx-utils.mjs.map