@stemy/ngx-utils 19.9.39 → 19.9.41
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/fesm2022/stemy-ngx-utils.mjs +967 -18
- package/fesm2022/stemy-ngx-utils.mjs.map +1 -1
- package/ngx-utils/components/calendar/calendar.component.d.ts +52 -0
- package/ngx-utils/ngx-utils.imports.d.ts +2 -2
- package/ngx-utils/ngx-utils.module.d.ts +23 -22
- package/ngx-utils/services/constants/calendar-translations.d.ts +2 -0
- package/ngx-utils/services/constants/lang-translations.d.ts +2 -0
- package/ngx-utils/services/language.service.d.ts +0 -1
- package/ngx-utils/services/static-language.service.d.ts +1 -0
- package/ngx-utils/utils/date.utils.d.ts +28 -0
- package/package.json +1 -1
- package/public_api.d.ts +2 -1
|
@@ -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,
|
|
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, ViewEncapsulation, Component, ChangeDetectionStrategy, 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';
|
|
@@ -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
|
|
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;
|
|
@@ -4456,6 +4506,469 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.22", ngImpo
|
|
|
4456
4506
|
type: Injectable
|
|
4457
4507
|
}], ctorParameters: () => [{ type: LocalHttpService }] });
|
|
4458
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
|
+
|
|
4459
4972
|
const EMPTY_DICT = {};
|
|
4460
4973
|
class StaticLanguageService {
|
|
4461
4974
|
get defaultLanguage() {
|
|
@@ -4475,8 +4988,8 @@ class StaticLanguageService {
|
|
|
4475
4988
|
return this.currentLang || this.defaultLanguage;
|
|
4476
4989
|
}
|
|
4477
4990
|
set currentLanguage(lang) {
|
|
4478
|
-
this.currentLang = lang;
|
|
4479
|
-
this.events.languageChanged.next(
|
|
4991
|
+
this.currentLang = this.selectLanguage(lang) || this.languageList[0];
|
|
4992
|
+
this.events.languageChanged.next(this.currentLang);
|
|
4480
4993
|
}
|
|
4481
4994
|
get editLanguage() {
|
|
4482
4995
|
return this.editLang || this.currentLanguage;
|
|
@@ -4526,6 +5039,12 @@ class StaticLanguageService {
|
|
|
4526
5039
|
this.mergedTranslations = this.translations;
|
|
4527
5040
|
this.initService();
|
|
4528
5041
|
}
|
|
5042
|
+
selectLanguage(lang) {
|
|
5043
|
+
if (!lang)
|
|
5044
|
+
return null;
|
|
5045
|
+
return this.languageList.length === 0 || this.languageList.includes(lang)
|
|
5046
|
+
? lang : null;
|
|
5047
|
+
}
|
|
4529
5048
|
initService() {
|
|
4530
5049
|
}
|
|
4531
5050
|
replaceLanguages(languages) {
|
|
@@ -4534,6 +5053,7 @@ class StaticLanguageService {
|
|
|
4534
5053
|
this.languageList.forEach(lang => {
|
|
4535
5054
|
this.translations[lang] = this.translations[lang] || EMPTY_DICT;
|
|
4536
5055
|
});
|
|
5056
|
+
this.mergeTranslations();
|
|
4537
5057
|
}
|
|
4538
5058
|
addLanguages(languages) {
|
|
4539
5059
|
if (!Array.isArray(languages) || languages.length == 0)
|
|
@@ -4547,7 +5067,7 @@ class StaticLanguageService {
|
|
|
4547
5067
|
return;
|
|
4548
5068
|
}
|
|
4549
5069
|
this.overrideTranslations = {};
|
|
4550
|
-
this.
|
|
5070
|
+
this.mergeTranslations();
|
|
4551
5071
|
}
|
|
4552
5072
|
getTranslationSync(key, params = null) {
|
|
4553
5073
|
key = String(key ?? "");
|
|
@@ -4590,7 +5110,7 @@ class StaticLanguageService {
|
|
|
4590
5110
|
return this.interpolate(translation ? translation.translation : "", params);
|
|
4591
5111
|
}
|
|
4592
5112
|
async loadDictionary() {
|
|
4593
|
-
return this.
|
|
5113
|
+
return this.translations[this.currentLanguage] || EMPTY_DICT;
|
|
4594
5114
|
}
|
|
4595
5115
|
setDictionary(lang, dictionary) {
|
|
4596
5116
|
this.translations[lang] = Object.keys(dictionary || {}).reduce((res, key) => {
|
|
@@ -4634,13 +5154,17 @@ class StaticLanguageService {
|
|
|
4634
5154
|
}
|
|
4635
5155
|
mergeTranslations() {
|
|
4636
5156
|
const languages = new Set([
|
|
5157
|
+
...this.languageList,
|
|
4637
5158
|
...Object.keys(this.translations),
|
|
4638
|
-
...Object.keys(this.overrideTranslations)
|
|
5159
|
+
...Object.keys(this.overrideTranslations),
|
|
5160
|
+
...Object.keys(CALENDAR_TRANSLATIONS),
|
|
4639
5161
|
]);
|
|
4640
5162
|
this.mergedTranslations = Array.from(languages).reduce((merged, language) => {
|
|
4641
5163
|
merged[language] = {
|
|
4642
5164
|
...(this.translations[language] || EMPTY_DICT),
|
|
4643
5165
|
...(this.overrideTranslations[language] || EMPTY_DICT),
|
|
5166
|
+
...(CALENDAR_TRANSLATIONS[language] || CALENDAR_TRANSLATIONS.en),
|
|
5167
|
+
...LANG_TRANSLATIONS
|
|
4644
5168
|
};
|
|
4645
5169
|
return merged;
|
|
4646
5170
|
}, {});
|
|
@@ -4722,12 +5246,6 @@ class LanguageService extends StaticLanguageService {
|
|
|
4722
5246
|
await this.useLanguage(lang);
|
|
4723
5247
|
this.events.languageChanged.next(lang);
|
|
4724
5248
|
}
|
|
4725
|
-
selectLanguage(lang) {
|
|
4726
|
-
if (!lang)
|
|
4727
|
-
return null;
|
|
4728
|
-
return this.languageList.length === 0 || this.languageList.includes(lang)
|
|
4729
|
-
? lang : null;
|
|
4730
|
-
}
|
|
4731
5249
|
async useLanguage(lang) {
|
|
4732
5250
|
lang = this.selectLanguage(lang);
|
|
4733
5251
|
this.client.setParam("language", lang);
|
|
@@ -7532,11 +8050,11 @@ class BtnComponent {
|
|
|
7532
8050
|
return !(target instanceof HTMLElement) || this.element.nativeElement?.contains(target);
|
|
7533
8051
|
}
|
|
7534
8052
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.22", ngImport: i0, type: BtnComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
7535
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.22", type: BtnComponent, isStandalone: false, selector: "btn", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, tooltip: { classPropertyName: "tooltip", publicName: "tooltip", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, path: { classPropertyName: "path", publicName: "path", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<ng-container [ngComponentOutlet]=\"buttonType\"\r\n [ngComponentOutletInputs]=\"$any(buttonProps())\"></ng-container>\r\n", dependencies: [{ kind: "directive", type: i1$3.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }],
|
|
8053
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.22", type: BtnComponent, isStandalone: false, selector: "btn", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, tooltip: { classPropertyName: "tooltip", publicName: "tooltip", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, path: { classPropertyName: "path", publicName: "path", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<ng-container [ngComponentOutlet]=\"buttonType\"\r\n [ngComponentOutletInputs]=\"$any(buttonProps())\"></ng-container>\r\n", dependencies: [{ kind: "directive", type: i1$3.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
7536
8054
|
}
|
|
7537
8055
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.22", ngImport: i0, type: BtnComponent, decorators: [{
|
|
7538
8056
|
type: Component,
|
|
7539
|
-
args: [{ standalone: false, encapsulation: ViewEncapsulation.None,
|
|
8057
|
+
args: [{ standalone: false, encapsulation: ViewEncapsulation.None, selector: "btn", template: "<ng-container [ngComponentOutlet]=\"buttonType\"\r\n [ngComponentOutletInputs]=\"$any(buttonProps())\"></ng-container>\r\n" }]
|
|
7540
8058
|
}] });
|
|
7541
8059
|
|
|
7542
8060
|
class IconComponent {
|
|
@@ -7585,6 +8103,436 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.22", ngImpo
|
|
|
7585
8103
|
type: Input
|
|
7586
8104
|
}] } });
|
|
7587
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
|
+
|
|
7588
8536
|
class CloseBtnComponent {
|
|
7589
8537
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.22", ngImport: i0, type: CloseBtnComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
7590
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 }); }
|
|
@@ -9864,6 +10812,7 @@ const directives = [
|
|
|
9864
10812
|
const components = [
|
|
9865
10813
|
BtnComponent,
|
|
9866
10814
|
BtnDefaultComponent,
|
|
10815
|
+
CalendarComponent,
|
|
9867
10816
|
ChipsComponent,
|
|
9868
10817
|
CloseBtnComponent,
|
|
9869
10818
|
CodeEditorComponent,
|
|
@@ -10109,8 +11058,8 @@ class NgxUtilsModule {
|
|
|
10109
11058
|
};
|
|
10110
11059
|
}
|
|
10111
11060
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.22", ngImport: i0, type: NgxUtilsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
10112
|
-
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,
|
|
10113
|
-
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] }); }
|
|
10114
11063
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.22", ngImport: i0, type: NgxUtilsModule, providers: pipes, imports: [CommonModule,
|
|
10115
11064
|
FormsModule, FormsModule] }); }
|
|
10116
11065
|
}
|
|
@@ -10140,5 +11089,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.22", ngImpo
|
|
|
10140
11089
|
* Generated bundle index. Do not edit.
|
|
10141
11090
|
*/
|
|
10142
11091
|
|
|
10143
|
-
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 };
|
|
10144
11093
|
//# sourceMappingURL=stemy-ngx-utils.mjs.map
|