@eagami/ui 4.8.1 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/eagami-ui.mjs +805 -45
- package/fesm2022/eagami-ui.mjs.map +1 -1
- package/package.json +1 -1
- package/types/eagami-ui.d.ts +1761 -1671
package/fesm2022/eagami-ui.mjs
CHANGED
|
@@ -425,6 +425,8 @@ const messages$e = {
|
|
|
425
425
|
zoom: 'تكبير/تصغير',
|
|
426
426
|
zoomIn: 'تكبير',
|
|
427
427
|
remove: 'إزالة الصورة',
|
|
428
|
+
invalidType: 'يجب أن يكون الملف صورة',
|
|
429
|
+
tooLarge: (maxMb) => `الملف يتجاوز حد ${maxMb} MB`,
|
|
428
430
|
},
|
|
429
431
|
breadcrumbs: {
|
|
430
432
|
label: 'مسار التنقل',
|
|
@@ -452,6 +454,11 @@ const messages$e = {
|
|
|
452
454
|
dataTable: {
|
|
453
455
|
noData: 'لا توجد بيانات متاحة',
|
|
454
456
|
},
|
|
457
|
+
numberFormat: {
|
|
458
|
+
decimal: '.',
|
|
459
|
+
group: ',',
|
|
460
|
+
grouping: [3],
|
|
461
|
+
},
|
|
455
462
|
datePicker: {
|
|
456
463
|
placeholder: 'اختر التاريخ…',
|
|
457
464
|
clear: 'مسح التاريخ',
|
|
@@ -460,6 +467,29 @@ const messages$e = {
|
|
|
460
467
|
nextMonth: 'الشهر التالي',
|
|
461
468
|
nextYear: 'السنة التالية',
|
|
462
469
|
today: 'اليوم',
|
|
470
|
+
weekdaysShort: [
|
|
471
|
+
'الأحد',
|
|
472
|
+
'الاثنين',
|
|
473
|
+
'الثلاثاء',
|
|
474
|
+
'الأربعاء',
|
|
475
|
+
'الخميس',
|
|
476
|
+
'الجمعة',
|
|
477
|
+
'السبت',
|
|
478
|
+
],
|
|
479
|
+
months: [
|
|
480
|
+
'يناير',
|
|
481
|
+
'فبراير',
|
|
482
|
+
'مارس',
|
|
483
|
+
'أبريل',
|
|
484
|
+
'مايو',
|
|
485
|
+
'يونيو',
|
|
486
|
+
'يوليو',
|
|
487
|
+
'أغسطس',
|
|
488
|
+
'سبتمبر',
|
|
489
|
+
'أكتوبر',
|
|
490
|
+
'نوفمبر',
|
|
491
|
+
'ديسمبر',
|
|
492
|
+
],
|
|
463
493
|
},
|
|
464
494
|
dialog: {
|
|
465
495
|
close: 'إغلاق مربع الحوار',
|
|
@@ -595,6 +625,8 @@ const messages$d = {
|
|
|
595
625
|
zoom: 'Zoom',
|
|
596
626
|
zoomIn: 'Vergrößern',
|
|
597
627
|
remove: 'Bild entfernen',
|
|
628
|
+
invalidType: 'Datei muss ein Bild sein',
|
|
629
|
+
tooLarge: (maxMb) => `Datei überschreitet das Limit von ${maxMb} MB`,
|
|
598
630
|
},
|
|
599
631
|
breadcrumbs: {
|
|
600
632
|
label: 'Brotkrümelnavigation',
|
|
@@ -622,6 +654,11 @@ const messages$d = {
|
|
|
622
654
|
dataTable: {
|
|
623
655
|
noData: 'Keine Daten verfügbar',
|
|
624
656
|
},
|
|
657
|
+
numberFormat: {
|
|
658
|
+
decimal: ',',
|
|
659
|
+
group: '.',
|
|
660
|
+
grouping: [3],
|
|
661
|
+
},
|
|
625
662
|
datePicker: {
|
|
626
663
|
placeholder: 'Datum auswählen…',
|
|
627
664
|
clear: 'Datum löschen',
|
|
@@ -630,6 +667,21 @@ const messages$d = {
|
|
|
630
667
|
nextMonth: 'Nächster Monat',
|
|
631
668
|
nextYear: 'Nächstes Jahr',
|
|
632
669
|
today: 'Heute',
|
|
670
|
+
weekdaysShort: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],
|
|
671
|
+
months: [
|
|
672
|
+
'Januar',
|
|
673
|
+
'Februar',
|
|
674
|
+
'März',
|
|
675
|
+
'April',
|
|
676
|
+
'Mai',
|
|
677
|
+
'Juni',
|
|
678
|
+
'Juli',
|
|
679
|
+
'August',
|
|
680
|
+
'September',
|
|
681
|
+
'Oktober',
|
|
682
|
+
'November',
|
|
683
|
+
'Dezember',
|
|
684
|
+
],
|
|
633
685
|
},
|
|
634
686
|
dialog: {
|
|
635
687
|
close: 'Dialog schließen',
|
|
@@ -765,6 +817,8 @@ const messages$c = {
|
|
|
765
817
|
zoom: 'Ζουμ',
|
|
766
818
|
zoomIn: 'Μεγέθυνση',
|
|
767
819
|
remove: 'Αφαίρεση εικόνας',
|
|
820
|
+
invalidType: 'Το αρχείο πρέπει να είναι εικόνα',
|
|
821
|
+
tooLarge: (maxMb) => `Το αρχείο υπερβαίνει το όριο των ${maxMb} MB`,
|
|
768
822
|
},
|
|
769
823
|
breadcrumbs: {
|
|
770
824
|
label: 'Διαδρομή πλοήγησης',
|
|
@@ -792,6 +846,11 @@ const messages$c = {
|
|
|
792
846
|
dataTable: {
|
|
793
847
|
noData: 'Δεν υπάρχουν διαθέσιμα δεδομένα',
|
|
794
848
|
},
|
|
849
|
+
numberFormat: {
|
|
850
|
+
decimal: ',',
|
|
851
|
+
group: '.',
|
|
852
|
+
grouping: [3],
|
|
853
|
+
},
|
|
795
854
|
datePicker: {
|
|
796
855
|
placeholder: 'Επιλέξτε ημερομηνία…',
|
|
797
856
|
clear: 'Εκκαθάριση ημερομηνίας',
|
|
@@ -800,6 +859,21 @@ const messages$c = {
|
|
|
800
859
|
nextMonth: 'Επόμενος μήνας',
|
|
801
860
|
nextYear: 'Επόμενο έτος',
|
|
802
861
|
today: 'Σήμερα',
|
|
862
|
+
weekdaysShort: ['Κυρ', 'Δευ', 'Τρί', 'Τετ', 'Πέμ', 'Παρ', 'Σάβ'],
|
|
863
|
+
months: [
|
|
864
|
+
'Ιανουαρίου',
|
|
865
|
+
'Φεβρουαρίου',
|
|
866
|
+
'Μαρτίου',
|
|
867
|
+
'Απριλίου',
|
|
868
|
+
'Μαΐου',
|
|
869
|
+
'Ιουνίου',
|
|
870
|
+
'Ιουλίου',
|
|
871
|
+
'Αυγούστου',
|
|
872
|
+
'Σεπτεμβρίου',
|
|
873
|
+
'Οκτωβρίου',
|
|
874
|
+
'Νοεμβρίου',
|
|
875
|
+
'Δεκεμβρίου',
|
|
876
|
+
],
|
|
803
877
|
},
|
|
804
878
|
dialog: {
|
|
805
879
|
close: 'Κλείσιμο παραθύρου διαλόγου',
|
|
@@ -935,6 +1009,8 @@ const messages$b = {
|
|
|
935
1009
|
zoom: 'Zoom',
|
|
936
1010
|
zoomIn: 'Zoom in',
|
|
937
1011
|
remove: 'Remove image',
|
|
1012
|
+
invalidType: 'File must be an image',
|
|
1013
|
+
tooLarge: (maxMb) => `File exceeds ${maxMb} MB limit`,
|
|
938
1014
|
},
|
|
939
1015
|
breadcrumbs: {
|
|
940
1016
|
label: 'Breadcrumb',
|
|
@@ -962,6 +1038,11 @@ const messages$b = {
|
|
|
962
1038
|
dataTable: {
|
|
963
1039
|
noData: 'No data available',
|
|
964
1040
|
},
|
|
1041
|
+
numberFormat: {
|
|
1042
|
+
decimal: '.',
|
|
1043
|
+
group: ',',
|
|
1044
|
+
grouping: [3],
|
|
1045
|
+
},
|
|
965
1046
|
datePicker: {
|
|
966
1047
|
placeholder: 'Select date…',
|
|
967
1048
|
clear: 'Clear date',
|
|
@@ -970,6 +1051,21 @@ const messages$b = {
|
|
|
970
1051
|
nextMonth: 'Next month',
|
|
971
1052
|
nextYear: 'Next year',
|
|
972
1053
|
today: 'Today',
|
|
1054
|
+
weekdaysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
|
|
1055
|
+
months: [
|
|
1056
|
+
'January',
|
|
1057
|
+
'February',
|
|
1058
|
+
'March',
|
|
1059
|
+
'April',
|
|
1060
|
+
'May',
|
|
1061
|
+
'June',
|
|
1062
|
+
'July',
|
|
1063
|
+
'August',
|
|
1064
|
+
'September',
|
|
1065
|
+
'October',
|
|
1066
|
+
'November',
|
|
1067
|
+
'December',
|
|
1068
|
+
],
|
|
973
1069
|
},
|
|
974
1070
|
dialog: {
|
|
975
1071
|
close: 'Close dialog',
|
|
@@ -1105,6 +1201,8 @@ const messages$a = {
|
|
|
1105
1201
|
zoom: 'Ampliación',
|
|
1106
1202
|
zoomIn: 'Acercar',
|
|
1107
1203
|
remove: 'Eliminar imagen',
|
|
1204
|
+
invalidType: 'El archivo debe ser una imagen',
|
|
1205
|
+
tooLarge: (maxMb) => `El archivo supera el límite de ${maxMb} MB`,
|
|
1108
1206
|
},
|
|
1109
1207
|
breadcrumbs: {
|
|
1110
1208
|
label: 'Ruta de navegación',
|
|
@@ -1132,6 +1230,11 @@ const messages$a = {
|
|
|
1132
1230
|
dataTable: {
|
|
1133
1231
|
noData: 'No hay datos disponibles',
|
|
1134
1232
|
},
|
|
1233
|
+
numberFormat: {
|
|
1234
|
+
decimal: ',',
|
|
1235
|
+
group: '.',
|
|
1236
|
+
grouping: [3],
|
|
1237
|
+
},
|
|
1135
1238
|
datePicker: {
|
|
1136
1239
|
placeholder: 'Seleccionar fecha…',
|
|
1137
1240
|
clear: 'Borrar fecha',
|
|
@@ -1140,6 +1243,21 @@ const messages$a = {
|
|
|
1140
1243
|
nextMonth: 'Mes siguiente',
|
|
1141
1244
|
nextYear: 'Año siguiente',
|
|
1142
1245
|
today: 'Hoy',
|
|
1246
|
+
weekdaysShort: ['dom', 'lun', 'mar', 'mié', 'jue', 'vie', 'sáb'],
|
|
1247
|
+
months: [
|
|
1248
|
+
'enero',
|
|
1249
|
+
'febrero',
|
|
1250
|
+
'marzo',
|
|
1251
|
+
'abril',
|
|
1252
|
+
'mayo',
|
|
1253
|
+
'junio',
|
|
1254
|
+
'julio',
|
|
1255
|
+
'agosto',
|
|
1256
|
+
'septiembre',
|
|
1257
|
+
'octubre',
|
|
1258
|
+
'noviembre',
|
|
1259
|
+
'diciembre',
|
|
1260
|
+
],
|
|
1143
1261
|
},
|
|
1144
1262
|
dialog: {
|
|
1145
1263
|
close: 'Cerrar diálogo',
|
|
@@ -1275,6 +1393,8 @@ const messages$9 = {
|
|
|
1275
1393
|
zoom: 'Zoom',
|
|
1276
1394
|
zoomIn: 'Zoomer',
|
|
1277
1395
|
remove: "Supprimer l'image",
|
|
1396
|
+
invalidType: 'Le fichier doit être une image',
|
|
1397
|
+
tooLarge: (maxMb) => `Le fichier dépasse la limite de ${maxMb} MB`,
|
|
1278
1398
|
},
|
|
1279
1399
|
breadcrumbs: {
|
|
1280
1400
|
label: "Fil d'Ariane",
|
|
@@ -1302,6 +1422,11 @@ const messages$9 = {
|
|
|
1302
1422
|
dataTable: {
|
|
1303
1423
|
noData: 'Aucune donnée disponible',
|
|
1304
1424
|
},
|
|
1425
|
+
numberFormat: {
|
|
1426
|
+
decimal: ',',
|
|
1427
|
+
group: '\u202F',
|
|
1428
|
+
grouping: [3],
|
|
1429
|
+
},
|
|
1305
1430
|
datePicker: {
|
|
1306
1431
|
placeholder: 'Sélectionner une date…',
|
|
1307
1432
|
clear: 'Effacer la date',
|
|
@@ -1310,6 +1435,21 @@ const messages$9 = {
|
|
|
1310
1435
|
nextMonth: 'Mois suivant',
|
|
1311
1436
|
nextYear: 'Année suivante',
|
|
1312
1437
|
today: "Aujourd'hui",
|
|
1438
|
+
weekdaysShort: ['dim.', 'lun.', 'mar.', 'mer.', 'jeu.', 'ven.', 'sam.'],
|
|
1439
|
+
months: [
|
|
1440
|
+
'janvier',
|
|
1441
|
+
'février',
|
|
1442
|
+
'mars',
|
|
1443
|
+
'avril',
|
|
1444
|
+
'mai',
|
|
1445
|
+
'juin',
|
|
1446
|
+
'juillet',
|
|
1447
|
+
'août',
|
|
1448
|
+
'septembre',
|
|
1449
|
+
'octobre',
|
|
1450
|
+
'novembre',
|
|
1451
|
+
'décembre',
|
|
1452
|
+
],
|
|
1313
1453
|
},
|
|
1314
1454
|
dialog: {
|
|
1315
1455
|
close: 'Fermer la boîte de dialogue',
|
|
@@ -1445,6 +1585,8 @@ const messages$8 = {
|
|
|
1445
1585
|
zoom: 'זום',
|
|
1446
1586
|
zoomIn: 'התקרבות',
|
|
1447
1587
|
remove: 'הסרת תמונה',
|
|
1588
|
+
invalidType: 'הקובץ חייב להיות תמונה',
|
|
1589
|
+
tooLarge: (maxMb) => `הקובץ חורג ממגבלת ${maxMb} MB`,
|
|
1448
1590
|
},
|
|
1449
1591
|
breadcrumbs: {
|
|
1450
1592
|
label: 'נתיב ניווט',
|
|
@@ -1472,6 +1614,11 @@ const messages$8 = {
|
|
|
1472
1614
|
dataTable: {
|
|
1473
1615
|
noData: 'אין נתונים זמינים',
|
|
1474
1616
|
},
|
|
1617
|
+
numberFormat: {
|
|
1618
|
+
decimal: '.',
|
|
1619
|
+
group: ',',
|
|
1620
|
+
grouping: [3],
|
|
1621
|
+
},
|
|
1475
1622
|
datePicker: {
|
|
1476
1623
|
placeholder: 'בחר תאריך…',
|
|
1477
1624
|
clear: 'ניקוי תאריך',
|
|
@@ -1480,6 +1627,21 @@ const messages$8 = {
|
|
|
1480
1627
|
nextMonth: 'חודש הבא',
|
|
1481
1628
|
nextYear: 'שנה הבאה',
|
|
1482
1629
|
today: 'היום',
|
|
1630
|
+
weekdaysShort: ['יום א׳', 'יום ב׳', 'יום ג׳', 'יום ד׳', 'יום ה׳', 'יום ו׳', 'שבת'],
|
|
1631
|
+
months: [
|
|
1632
|
+
'ינואר',
|
|
1633
|
+
'פברואר',
|
|
1634
|
+
'מרץ',
|
|
1635
|
+
'אפריל',
|
|
1636
|
+
'מאי',
|
|
1637
|
+
'יוני',
|
|
1638
|
+
'יולי',
|
|
1639
|
+
'אוגוסט',
|
|
1640
|
+
'ספטמבר',
|
|
1641
|
+
'אוקטובר',
|
|
1642
|
+
'נובמבר',
|
|
1643
|
+
'דצמבר',
|
|
1644
|
+
],
|
|
1483
1645
|
},
|
|
1484
1646
|
dialog: {
|
|
1485
1647
|
close: 'סגירת חלון',
|
|
@@ -1615,6 +1777,8 @@ const messages$7 = {
|
|
|
1615
1777
|
zoom: 'ज़ूम',
|
|
1616
1778
|
zoomIn: 'ज़ूम इन',
|
|
1617
1779
|
remove: 'छवि हटाएं',
|
|
1780
|
+
invalidType: 'फ़ाइल एक छवि होनी चाहिए',
|
|
1781
|
+
tooLarge: (maxMb) => `फ़ाइल ${maxMb} MB की सीमा से अधिक है`,
|
|
1618
1782
|
},
|
|
1619
1783
|
breadcrumbs: {
|
|
1620
1784
|
label: 'ब्रेडक्रंब',
|
|
@@ -1642,6 +1806,11 @@ const messages$7 = {
|
|
|
1642
1806
|
dataTable: {
|
|
1643
1807
|
noData: 'कोई डेटा उपलब्ध नहीं',
|
|
1644
1808
|
},
|
|
1809
|
+
numberFormat: {
|
|
1810
|
+
decimal: '.',
|
|
1811
|
+
group: ',',
|
|
1812
|
+
grouping: [3, 2],
|
|
1813
|
+
},
|
|
1645
1814
|
datePicker: {
|
|
1646
1815
|
placeholder: 'तारीख चुनें…',
|
|
1647
1816
|
clear: 'तारीख साफ़ करें',
|
|
@@ -1650,6 +1819,21 @@ const messages$7 = {
|
|
|
1650
1819
|
nextMonth: 'अगला महीना',
|
|
1651
1820
|
nextYear: 'अगला वर्ष',
|
|
1652
1821
|
today: 'आज',
|
|
1822
|
+
weekdaysShort: ['रवि', 'सोम', 'मंगल', 'बुध', 'गुरु', 'शुक्र', 'शनि'],
|
|
1823
|
+
months: [
|
|
1824
|
+
'जनवरी',
|
|
1825
|
+
'फ़रवरी',
|
|
1826
|
+
'मार्च',
|
|
1827
|
+
'अप्रैल',
|
|
1828
|
+
'मई',
|
|
1829
|
+
'जून',
|
|
1830
|
+
'जुलाई',
|
|
1831
|
+
'अगस्त',
|
|
1832
|
+
'सितंबर',
|
|
1833
|
+
'अक्टूबर',
|
|
1834
|
+
'नवंबर',
|
|
1835
|
+
'दिसंबर',
|
|
1836
|
+
],
|
|
1653
1837
|
},
|
|
1654
1838
|
dialog: {
|
|
1655
1839
|
close: 'संवाद बंद करें',
|
|
@@ -1785,6 +1969,8 @@ const messages$6 = {
|
|
|
1785
1969
|
zoom: 'Aðdráttur',
|
|
1786
1970
|
zoomIn: 'Auka aðdrátt',
|
|
1787
1971
|
remove: 'Fjarlægja mynd',
|
|
1972
|
+
invalidType: 'Skráin verður að vera mynd',
|
|
1973
|
+
tooLarge: (maxMb) => `Skráin fer yfir ${maxMb} MB mörkin`,
|
|
1788
1974
|
},
|
|
1789
1975
|
breadcrumbs: {
|
|
1790
1976
|
label: 'Brauðmolaslóð',
|
|
@@ -1812,6 +1998,11 @@ const messages$6 = {
|
|
|
1812
1998
|
dataTable: {
|
|
1813
1999
|
noData: 'Engin gögn til staðar',
|
|
1814
2000
|
},
|
|
2001
|
+
numberFormat: {
|
|
2002
|
+
decimal: ',',
|
|
2003
|
+
group: '.',
|
|
2004
|
+
grouping: [3],
|
|
2005
|
+
},
|
|
1815
2006
|
datePicker: {
|
|
1816
2007
|
placeholder: 'Veldu dagsetningu…',
|
|
1817
2008
|
clear: 'Hreinsa dagsetningu',
|
|
@@ -1820,6 +2011,21 @@ const messages$6 = {
|
|
|
1820
2011
|
nextMonth: 'Næsti mánuður',
|
|
1821
2012
|
nextYear: 'Næsta ár',
|
|
1822
2013
|
today: 'Í dag',
|
|
2014
|
+
weekdaysShort: ['sun.', 'mán.', 'þri.', 'mið.', 'fim.', 'fös.', 'lau.'],
|
|
2015
|
+
months: [
|
|
2016
|
+
'janúar',
|
|
2017
|
+
'febrúar',
|
|
2018
|
+
'mars',
|
|
2019
|
+
'apríl',
|
|
2020
|
+
'maí',
|
|
2021
|
+
'júní',
|
|
2022
|
+
'júlí',
|
|
2023
|
+
'ágúst',
|
|
2024
|
+
'september',
|
|
2025
|
+
'október',
|
|
2026
|
+
'nóvember',
|
|
2027
|
+
'desember',
|
|
2028
|
+
],
|
|
1823
2029
|
},
|
|
1824
2030
|
dialog: {
|
|
1825
2031
|
close: 'Loka glugga',
|
|
@@ -1955,6 +2161,8 @@ const messages$5 = {
|
|
|
1955
2161
|
zoom: 'Zoom',
|
|
1956
2162
|
zoomIn: 'Inzoomen',
|
|
1957
2163
|
remove: 'Afbeelding verwijderen',
|
|
2164
|
+
invalidType: 'Bestand moet een afbeelding zijn',
|
|
2165
|
+
tooLarge: (maxMb) => `Bestand overschrijdt de limiet van ${maxMb} MB`,
|
|
1958
2166
|
},
|
|
1959
2167
|
breadcrumbs: {
|
|
1960
2168
|
label: 'Broodkruimelnavigatie',
|
|
@@ -1982,6 +2190,11 @@ const messages$5 = {
|
|
|
1982
2190
|
dataTable: {
|
|
1983
2191
|
noData: 'Geen gegevens beschikbaar',
|
|
1984
2192
|
},
|
|
2193
|
+
numberFormat: {
|
|
2194
|
+
decimal: ',',
|
|
2195
|
+
group: '.',
|
|
2196
|
+
grouping: [3],
|
|
2197
|
+
},
|
|
1985
2198
|
datePicker: {
|
|
1986
2199
|
placeholder: 'Selecteer datum…',
|
|
1987
2200
|
clear: 'Datum wissen',
|
|
@@ -1990,6 +2203,21 @@ const messages$5 = {
|
|
|
1990
2203
|
nextMonth: 'Volgende maand',
|
|
1991
2204
|
nextYear: 'Volgend jaar',
|
|
1992
2205
|
today: 'Vandaag',
|
|
2206
|
+
weekdaysShort: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],
|
|
2207
|
+
months: [
|
|
2208
|
+
'januari',
|
|
2209
|
+
'februari',
|
|
2210
|
+
'maart',
|
|
2211
|
+
'april',
|
|
2212
|
+
'mei',
|
|
2213
|
+
'juni',
|
|
2214
|
+
'juli',
|
|
2215
|
+
'augustus',
|
|
2216
|
+
'september',
|
|
2217
|
+
'oktober',
|
|
2218
|
+
'november',
|
|
2219
|
+
'december',
|
|
2220
|
+
],
|
|
1993
2221
|
},
|
|
1994
2222
|
dialog: {
|
|
1995
2223
|
close: 'Dialoogvenster sluiten',
|
|
@@ -2125,6 +2353,8 @@ const messages$4 = {
|
|
|
2125
2353
|
zoom: 'Powiększenie',
|
|
2126
2354
|
zoomIn: 'Powiększ',
|
|
2127
2355
|
remove: 'Usuń obraz',
|
|
2356
|
+
invalidType: 'Plik musi być obrazem',
|
|
2357
|
+
tooLarge: (maxMb) => `Plik przekracza limit ${maxMb} MB`,
|
|
2128
2358
|
},
|
|
2129
2359
|
breadcrumbs: {
|
|
2130
2360
|
label: 'Ścieżka nawigacji',
|
|
@@ -2152,6 +2382,11 @@ const messages$4 = {
|
|
|
2152
2382
|
dataTable: {
|
|
2153
2383
|
noData: 'Brak dostępnych danych',
|
|
2154
2384
|
},
|
|
2385
|
+
numberFormat: {
|
|
2386
|
+
decimal: ',',
|
|
2387
|
+
group: '\u00A0',
|
|
2388
|
+
grouping: [3],
|
|
2389
|
+
},
|
|
2155
2390
|
datePicker: {
|
|
2156
2391
|
placeholder: 'Wybierz datę…',
|
|
2157
2392
|
clear: 'Wyczyść datę',
|
|
@@ -2160,6 +2395,21 @@ const messages$4 = {
|
|
|
2160
2395
|
nextMonth: 'Następny miesiąc',
|
|
2161
2396
|
nextYear: 'Następny rok',
|
|
2162
2397
|
today: 'Dzisiaj',
|
|
2398
|
+
weekdaysShort: ['niedz.', 'pon.', 'wt.', 'śr.', 'czw.', 'pt.', 'sob.'],
|
|
2399
|
+
months: [
|
|
2400
|
+
'styczeń',
|
|
2401
|
+
'luty',
|
|
2402
|
+
'marzec',
|
|
2403
|
+
'kwiecień',
|
|
2404
|
+
'maj',
|
|
2405
|
+
'czerwiec',
|
|
2406
|
+
'lipiec',
|
|
2407
|
+
'sierpień',
|
|
2408
|
+
'wrzesień',
|
|
2409
|
+
'październik',
|
|
2410
|
+
'listopad',
|
|
2411
|
+
'grudzień',
|
|
2412
|
+
],
|
|
2163
2413
|
},
|
|
2164
2414
|
dialog: {
|
|
2165
2415
|
close: 'Zamknij okno dialogowe',
|
|
@@ -2295,6 +2545,8 @@ const messages$3 = {
|
|
|
2295
2545
|
zoom: 'Zoom',
|
|
2296
2546
|
zoomIn: 'Aumentar zoom',
|
|
2297
2547
|
remove: 'Remover imagem',
|
|
2548
|
+
invalidType: 'O arquivo deve ser uma imagem',
|
|
2549
|
+
tooLarge: (maxMb) => `O arquivo excede o limite de ${maxMb} MB`,
|
|
2298
2550
|
},
|
|
2299
2551
|
breadcrumbs: {
|
|
2300
2552
|
label: 'Trilha de navegação',
|
|
@@ -2322,6 +2574,11 @@ const messages$3 = {
|
|
|
2322
2574
|
dataTable: {
|
|
2323
2575
|
noData: 'Nenhum dado disponível',
|
|
2324
2576
|
},
|
|
2577
|
+
numberFormat: {
|
|
2578
|
+
decimal: ',',
|
|
2579
|
+
group: '.',
|
|
2580
|
+
grouping: [3],
|
|
2581
|
+
},
|
|
2325
2582
|
datePicker: {
|
|
2326
2583
|
placeholder: 'Selecione a data…',
|
|
2327
2584
|
clear: 'Limpar data',
|
|
@@ -2330,6 +2587,21 @@ const messages$3 = {
|
|
|
2330
2587
|
nextMonth: 'Próximo mês',
|
|
2331
2588
|
nextYear: 'Próximo ano',
|
|
2332
2589
|
today: 'Hoje',
|
|
2590
|
+
weekdaysShort: ['dom.', 'seg.', 'ter.', 'qua.', 'qui.', 'sex.', 'sáb.'],
|
|
2591
|
+
months: [
|
|
2592
|
+
'janeiro',
|
|
2593
|
+
'fevereiro',
|
|
2594
|
+
'março',
|
|
2595
|
+
'abril',
|
|
2596
|
+
'maio',
|
|
2597
|
+
'junho',
|
|
2598
|
+
'julho',
|
|
2599
|
+
'agosto',
|
|
2600
|
+
'setembro',
|
|
2601
|
+
'outubro',
|
|
2602
|
+
'novembro',
|
|
2603
|
+
'dezembro',
|
|
2604
|
+
],
|
|
2333
2605
|
},
|
|
2334
2606
|
dialog: {
|
|
2335
2607
|
close: 'Fechar diálogo',
|
|
@@ -2465,6 +2737,8 @@ const messages$2 = {
|
|
|
2465
2737
|
zoom: 'Масштаб',
|
|
2466
2738
|
zoomIn: 'Увеличить',
|
|
2467
2739
|
remove: 'Удалить изображение',
|
|
2740
|
+
invalidType: 'Файл должен быть изображением',
|
|
2741
|
+
tooLarge: (maxMb) => `Файл превышает лимит ${maxMb} MB`,
|
|
2468
2742
|
},
|
|
2469
2743
|
breadcrumbs: {
|
|
2470
2744
|
label: 'Навигационная цепочка',
|
|
@@ -2492,6 +2766,11 @@ const messages$2 = {
|
|
|
2492
2766
|
dataTable: {
|
|
2493
2767
|
noData: 'Нет доступных данных',
|
|
2494
2768
|
},
|
|
2769
|
+
numberFormat: {
|
|
2770
|
+
decimal: ',',
|
|
2771
|
+
group: '\u00A0',
|
|
2772
|
+
grouping: [3],
|
|
2773
|
+
},
|
|
2495
2774
|
datePicker: {
|
|
2496
2775
|
placeholder: 'Выберите дату…',
|
|
2497
2776
|
clear: 'Очистить дату',
|
|
@@ -2500,6 +2779,21 @@ const messages$2 = {
|
|
|
2500
2779
|
nextMonth: 'Следующий месяц',
|
|
2501
2780
|
nextYear: 'Следующий год',
|
|
2502
2781
|
today: 'Сегодня',
|
|
2782
|
+
weekdaysShort: ['вс', 'пн', 'вт', 'ср', 'чт', 'пт', 'сб'],
|
|
2783
|
+
months: [
|
|
2784
|
+
'январь',
|
|
2785
|
+
'февраль',
|
|
2786
|
+
'март',
|
|
2787
|
+
'апрель',
|
|
2788
|
+
'май',
|
|
2789
|
+
'июнь',
|
|
2790
|
+
'июль',
|
|
2791
|
+
'август',
|
|
2792
|
+
'сентябрь',
|
|
2793
|
+
'октябрь',
|
|
2794
|
+
'ноябрь',
|
|
2795
|
+
'декабрь',
|
|
2796
|
+
],
|
|
2503
2797
|
},
|
|
2504
2798
|
dialog: {
|
|
2505
2799
|
close: 'Закрыть диалог',
|
|
@@ -2635,6 +2929,8 @@ const messages$1 = {
|
|
|
2635
2929
|
zoom: 'Масштаб',
|
|
2636
2930
|
zoomIn: 'Збільшити',
|
|
2637
2931
|
remove: 'Видалити зображення',
|
|
2932
|
+
invalidType: 'Файл має бути зображенням',
|
|
2933
|
+
tooLarge: (maxMb) => `Файл перевищує ліміт ${maxMb} MB`,
|
|
2638
2934
|
},
|
|
2639
2935
|
breadcrumbs: {
|
|
2640
2936
|
label: 'Навігаційний ланцюжок',
|
|
@@ -2662,6 +2958,11 @@ const messages$1 = {
|
|
|
2662
2958
|
dataTable: {
|
|
2663
2959
|
noData: 'Дані відсутні',
|
|
2664
2960
|
},
|
|
2961
|
+
numberFormat: {
|
|
2962
|
+
decimal: ',',
|
|
2963
|
+
group: '\u00A0',
|
|
2964
|
+
grouping: [3],
|
|
2965
|
+
},
|
|
2665
2966
|
datePicker: {
|
|
2666
2967
|
placeholder: 'Виберіть дату…',
|
|
2667
2968
|
clear: 'Очистити дату',
|
|
@@ -2670,6 +2971,21 @@ const messages$1 = {
|
|
|
2670
2971
|
nextMonth: 'Наступний місяць',
|
|
2671
2972
|
nextYear: 'Наступний рік',
|
|
2672
2973
|
today: 'Сьогодні',
|
|
2974
|
+
weekdaysShort: ['нд', 'пн', 'вт', 'ср', 'чт', 'пт', 'сб'],
|
|
2975
|
+
months: [
|
|
2976
|
+
'січень',
|
|
2977
|
+
'лютий',
|
|
2978
|
+
'березень',
|
|
2979
|
+
'квітень',
|
|
2980
|
+
'травень',
|
|
2981
|
+
'червень',
|
|
2982
|
+
'липень',
|
|
2983
|
+
'серпень',
|
|
2984
|
+
'вересень',
|
|
2985
|
+
'жовтень',
|
|
2986
|
+
'листопад',
|
|
2987
|
+
'грудень',
|
|
2988
|
+
],
|
|
2673
2989
|
},
|
|
2674
2990
|
dialog: {
|
|
2675
2991
|
close: 'Закрити діалог',
|
|
@@ -2805,6 +3121,8 @@ const messages = {
|
|
|
2805
3121
|
zoom: '缩放',
|
|
2806
3122
|
zoomIn: '放大',
|
|
2807
3123
|
remove: '移除图片',
|
|
3124
|
+
invalidType: '文件必须是图片',
|
|
3125
|
+
tooLarge: (maxMb) => `文件超过 ${maxMb} MB 限制`,
|
|
2808
3126
|
},
|
|
2809
3127
|
breadcrumbs: {
|
|
2810
3128
|
label: '面包屑导航',
|
|
@@ -2832,6 +3150,11 @@ const messages = {
|
|
|
2832
3150
|
dataTable: {
|
|
2833
3151
|
noData: '暂无数据',
|
|
2834
3152
|
},
|
|
3153
|
+
numberFormat: {
|
|
3154
|
+
decimal: '.',
|
|
3155
|
+
group: ',',
|
|
3156
|
+
grouping: [3],
|
|
3157
|
+
},
|
|
2835
3158
|
datePicker: {
|
|
2836
3159
|
placeholder: '选择日期…',
|
|
2837
3160
|
clear: '清除日期',
|
|
@@ -2840,6 +3163,21 @@ const messages = {
|
|
|
2840
3163
|
nextMonth: '下个月',
|
|
2841
3164
|
nextYear: '下一年',
|
|
2842
3165
|
today: '今天',
|
|
3166
|
+
weekdaysShort: ['周日', '周一', '周二', '周三', '周四', '周五', '周六'],
|
|
3167
|
+
months: [
|
|
3168
|
+
'一月',
|
|
3169
|
+
'二月',
|
|
3170
|
+
'三月',
|
|
3171
|
+
'四月',
|
|
3172
|
+
'五月',
|
|
3173
|
+
'六月',
|
|
3174
|
+
'七月',
|
|
3175
|
+
'八月',
|
|
3176
|
+
'九月',
|
|
3177
|
+
'十月',
|
|
3178
|
+
'十一月',
|
|
3179
|
+
'十二月',
|
|
3180
|
+
],
|
|
2843
3181
|
},
|
|
2844
3182
|
dialog: {
|
|
2845
3183
|
close: '关闭对话框',
|
|
@@ -5409,12 +5747,12 @@ class AvatarEditorComponent {
|
|
|
5409
5747
|
}
|
|
5410
5748
|
loadFile(file) {
|
|
5411
5749
|
if (!file.type.startsWith('image/')) {
|
|
5412
|
-
this.errored.emit(
|
|
5750
|
+
this.errored.emit(this.i18n.messages().avatarEditor.invalidType);
|
|
5413
5751
|
return;
|
|
5414
5752
|
}
|
|
5415
5753
|
if (file.size > this.maxFileSize()) {
|
|
5416
5754
|
const maxMb = Math.round(this.maxFileSize() / (1024 * 1024));
|
|
5417
|
-
this.errored.emit(
|
|
5755
|
+
this.errored.emit(this.i18n.messages().avatarEditor.tooLarge(maxMb));
|
|
5418
5756
|
return;
|
|
5419
5757
|
}
|
|
5420
5758
|
this.isAtOriginal.set(false);
|
|
@@ -7985,6 +8323,24 @@ class DatePickerComponent {
|
|
|
7985
8323
|
showHint = computed(() => !!this.hint() && !this.hasError(), ...(ngDevMode ? [{ debugName: "showHint" }] : /* istanbul ignore next */ []));
|
|
7986
8324
|
/** Locale used for date formatting: explicit `locale` input, else the global locale. */
|
|
7987
8325
|
effectiveLocale = computed(() => this.locale() ?? this.i18n.locale(), ...(ngDevMode ? [{ debugName: "effectiveLocale" }] : /* istanbul ignore next */ []));
|
|
8326
|
+
/** True when the active date locale is a registered locale we ship a bundle
|
|
8327
|
+
* for (no distinct per-instance `locale` override), so the bundled calendar
|
|
8328
|
+
* names apply and the calendar stays localized regardless of the runtime's
|
|
8329
|
+
* `Intl` locale coverage. */
|
|
8330
|
+
bundleCalendarApplies = computed(() => this.effectiveLocale() === this.i18n.locale(), ...(ngDevMode ? [{ debugName: "bundleCalendarApplies" }] : /* istanbul ignore next */ []));
|
|
8331
|
+
/** Whether the runtime's `Intl` actually has date data for the active locale.
|
|
8332
|
+
* Some browsers ship a reduced ICU that silently falls back to English for
|
|
8333
|
+
* less common locales, so a matching request is not a given. */
|
|
8334
|
+
intlLocalizesEffectiveLocale = computed(() => {
|
|
8335
|
+
const requested = this.effectiveLocale();
|
|
8336
|
+
try {
|
|
8337
|
+
const resolved = new Intl.DateTimeFormat(requested).resolvedOptions().locale;
|
|
8338
|
+
return resolved.split('-')[0] === requested.split('-')[0];
|
|
8339
|
+
}
|
|
8340
|
+
catch {
|
|
8341
|
+
return false;
|
|
8342
|
+
}
|
|
8343
|
+
}, ...(ngDevMode ? [{ debugName: "intlLocalizesEffectiveLocale" }] : /* istanbul ignore next */ []));
|
|
7988
8344
|
/** Placeholder text: explicit `placeholder` input, else the active locale's default. */
|
|
7989
8345
|
resolvedPlaceholder = computed(() => this.placeholder() ?? this.i18n.messages().datePicker.placeholder, ...(ngDevMode ? [{ debugName: "resolvedPlaceholder" }] : /* istanbul ignore next */ []));
|
|
7990
8346
|
triggerClasses = computed(() => ({
|
|
@@ -7996,34 +8352,54 @@ class DatePickerComponent {
|
|
|
7996
8352
|
wrapperClasses = computed(() => ({
|
|
7997
8353
|
[`ea-date-picker__trigger-wrapper--${this.size()}`]: true,
|
|
7998
8354
|
}), ...(ngDevMode ? [{ debugName: "wrapperClasses" }] : /* istanbul ignore next */ []));
|
|
8355
|
+
// The calendar popover is portaled to the document body, so it cannot inherit
|
|
8356
|
+
// the trigger's font-size; this size class carries the scale over to it.
|
|
8357
|
+
popoverClasses = computed(() => ({
|
|
8358
|
+
[`ea-date-picker__popover--${this.size()}`]: true,
|
|
8359
|
+
}), ...(ngDevMode ? [{ debugName: "popoverClasses" }] : /* istanbul ignore next */ []));
|
|
7999
8360
|
displayValue = computed(() => {
|
|
8000
8361
|
const val = this.value();
|
|
8001
8362
|
if (!val) {
|
|
8002
8363
|
return '';
|
|
8003
8364
|
}
|
|
8365
|
+
if (this.bundleCalendarApplies() && !this.intlLocalizesEffectiveLocale()) {
|
|
8366
|
+
const months = this.i18n.messages().datePicker.months;
|
|
8367
|
+
return `${val.getDate()} ${months[val.getMonth()]} ${val.getFullYear()}`;
|
|
8368
|
+
}
|
|
8004
8369
|
return new Intl.DateTimeFormat(this.effectiveLocale(), this.formatOptions()).format(val);
|
|
8005
8370
|
}, ...(ngDevMode ? [{ debugName: "displayValue" }] : /* istanbul ignore next */ []));
|
|
8006
8371
|
monthYearLabel = computed(() => {
|
|
8007
|
-
const
|
|
8372
|
+
const year = this.viewYear();
|
|
8373
|
+
const month = this.viewMonth();
|
|
8374
|
+
// Defer to the bundle only when Intl can't localize this locale: the
|
|
8375
|
+
// month/year heading carries locale-specific patterns (element order, era
|
|
8376
|
+
// markers, connective words) that Intl composes and a plain join cannot.
|
|
8377
|
+
if (this.bundleCalendarApplies() && !this.intlLocalizesEffectiveLocale()) {
|
|
8378
|
+
return `${this.i18n.messages().datePicker.months[month]} ${year}`;
|
|
8379
|
+
}
|
|
8008
8380
|
return new Intl.DateTimeFormat(this.effectiveLocale(), {
|
|
8009
8381
|
month: 'long',
|
|
8010
8382
|
year: 'numeric',
|
|
8011
|
-
}).format(
|
|
8383
|
+
}).format(new Date(year, month, 1));
|
|
8012
8384
|
}, ...(ngDevMode ? [{ debugName: "monthYearLabel" }] : /* istanbul ignore next */ []));
|
|
8013
8385
|
weekdayLabels = computed(() => {
|
|
8014
8386
|
const start = this.weekStartsOn();
|
|
8387
|
+
// Weekday indices in display order; bundle names are Sunday-first (index 0)
|
|
8388
|
+
const order = Array.from({ length: 7 }, (_, i) => (i + start) % 7);
|
|
8389
|
+
if (this.bundleCalendarApplies()) {
|
|
8390
|
+
const short = this.i18n.messages().datePicker.weekdaysShort;
|
|
8391
|
+
return order.map(index => short[index]);
|
|
8392
|
+
}
|
|
8393
|
+
// A known Sunday (2024-01-07) anchors the offset into locale weekday names
|
|
8394
|
+
const base = new Date(2024, 0, 7);
|
|
8015
8395
|
const formatter = new Intl.DateTimeFormat(this.effectiveLocale(), {
|
|
8016
8396
|
weekday: 'short',
|
|
8017
8397
|
});
|
|
8018
|
-
|
|
8019
|
-
|
|
8020
|
-
|
|
8021
|
-
|
|
8022
|
-
|
|
8023
|
-
d.setDate(base.getDate() + ((i + start) % 7));
|
|
8024
|
-
labels.push(formatter.format(d));
|
|
8025
|
-
}
|
|
8026
|
-
return labels;
|
|
8398
|
+
return order.map(index => {
|
|
8399
|
+
const date = new Date(base);
|
|
8400
|
+
date.setDate(base.getDate() + index);
|
|
8401
|
+
return formatter.format(date);
|
|
8402
|
+
});
|
|
8027
8403
|
}, ...(ngDevMode ? [{ debugName: "weekdayLabels" }] : /* istanbul ignore next */ []));
|
|
8028
8404
|
weeks = computed(() => {
|
|
8029
8405
|
const year = this.viewYear();
|
|
@@ -8318,7 +8694,7 @@ class DatePickerComponent {
|
|
|
8318
8694
|
useExisting: forwardRef(() => DatePickerComponent),
|
|
8319
8695
|
multi: true,
|
|
8320
8696
|
},
|
|
8321
|
-
], viewQueries: [{ propertyName: "triggerEl", first: true, predicate: ["triggerEl"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"ea-date-picker-field\">\n @if (label(); as labelText) {\n <ea-field-label\n [text]=\"labelText\"\n [forId]=\"id()\"\n [required]=\"required()\" />\n }\n\n <div class=\"ea-date-picker\">\n <div\n class=\"ea-date-picker__trigger-wrapper\"\n [ngClass]=\"wrapperClasses()\">\n <button\n #triggerEl\n type=\"button\"\n class=\"ea-date-picker__trigger\"\n [ngClass]=\"triggerClasses()\"\n [id]=\"id()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-required]=\"required() || null\"\n [attr.aria-invalid]=\"hasError() || null\"\n [attr.aria-describedby]=\"\n showError() ? id() + '-error' : showHint() ? id() + '-hint' : null\n \"\n (click)=\"toggle()\"\n (keydown)=\"handleTriggerKeydown($event)\">\n <ea-icon-calendar\n class=\"ea-date-picker__trigger-icon\"\n aria-hidden=\"true\" />\n <span\n class=\"ea-date-picker__trigger-value\"\n [class.ea-date-picker__trigger-value--placeholder]=\"!displayValue()\">\n <bdi>{{ displayValue() || resolvedPlaceholder() }}</bdi>\n </span>\n </button>\n @if (value() && !isDisabled() && !readonly()) {\n <button\n type=\"button\"\n class=\"ea-date-picker__clear\"\n [attr.aria-label]=\"i18n.messages().datePicker.clear\"\n (click)=\"clear($event)\">\n <ea-icon-x\n class=\"ea-date-picker__clear-icon\"\n aria-hidden=\"true\" />\n </button>\n }\n </div>\n\n <ea-popover\n [anchor]=\"triggerEl\"\n [open]=\"isOpen()\"\n placement=\"bottom-start\"\n role=\"dialog\"\n [closeOnEscape]=\"false\"\n scrollBehavior=\"close\"\n (closeRequested)=\"onPopoverCloseRequested()\">\n <div\n class=\"ea-date-picker__popover\"\n [attr.aria-labelledby]=\"id() + '-label'\"\n (keydown)=\"handleGridKeydown($event)\">\n <div class=\"ea-date-picker__header\">\n <button\n type=\"button\"\n class=\"ea-date-picker__nav-btn\"\n [attr.aria-label]=\"i18n.messages().datePicker.previousYear\"\n (click)=\"goToPrevYear()\">\n <ea-icon-chevron-left\n class=\"ea-rtl-flip\"\n aria-hidden=\"true\" />\n <ea-icon-chevron-left\n class=\"ea-rtl-flip\"\n aria-hidden=\"true\" />\n </button>\n <button\n type=\"button\"\n class=\"ea-date-picker__nav-btn\"\n [attr.aria-label]=\"i18n.messages().datePicker.previousMonth\"\n (click)=\"goToPrevMonth()\">\n <ea-icon-chevron-left\n class=\"ea-rtl-flip\"\n aria-hidden=\"true\" />\n </button>\n <span\n class=\"ea-date-picker__month-label\"\n [id]=\"id() + '-label'\"\n aria-live=\"polite\">\n {{ monthYearLabel() }}\n </span>\n <button\n type=\"button\"\n class=\"ea-date-picker__nav-btn\"\n [attr.aria-label]=\"i18n.messages().datePicker.nextMonth\"\n (click)=\"goToNextMonth()\">\n <ea-icon-chevron-right\n class=\"ea-rtl-flip\"\n aria-hidden=\"true\" />\n </button>\n <button\n type=\"button\"\n class=\"ea-date-picker__nav-btn\"\n [attr.aria-label]=\"i18n.messages().datePicker.nextYear\"\n (click)=\"goToNextYear()\">\n <ea-icon-chevron-right\n class=\"ea-rtl-flip\"\n aria-hidden=\"true\" />\n <ea-icon-chevron-right\n class=\"ea-rtl-flip\"\n aria-hidden=\"true\" />\n </button>\n </div>\n\n <div\n class=\"ea-date-picker__grid\"\n role=\"grid\">\n <div\n class=\"ea-date-picker__weekday-row\"\n role=\"row\">\n @for (label of weekdayLabels(); track label) {\n <div\n class=\"ea-date-picker__weekday\"\n role=\"columnheader\">\n {{ label }}\n </div>\n }\n </div>\n @for (week of weeks(); track $index) {\n <div\n class=\"ea-date-picker__week\"\n role=\"row\">\n @for (day of week; track day.date.getTime()) {\n <button\n type=\"button\"\n class=\"ea-date-picker__day\"\n role=\"gridcell\"\n [class.ea-date-picker__day--outside]=\"!day.isCurrentMonth\"\n [class.ea-date-picker__day--today]=\"day.isToday\"\n [class.ea-date-picker__day--selected]=\"day.isSelected\"\n [class.ea-date-picker__day--focused]=\"day.isFocused\"\n [class.ea-date-picker__day--disabled]=\"day.isDisabled\"\n [disabled]=\"day.isDisabled\"\n [attr.aria-selected]=\"day.isSelected\"\n [attr.aria-current]=\"day.isToday ? 'date' : null\"\n [attr.tabindex]=\"day.isFocused ? 0 : -1\"\n (click)=\"selectDay(day)\">\n {{ day.day }}\n </button>\n }\n </div>\n }\n </div>\n\n <div class=\"ea-date-picker__footer\">\n <button\n type=\"button\"\n class=\"ea-date-picker__today-btn\"\n (click)=\"goToToday()\">\n {{ i18n.messages().datePicker.today }}\n </button>\n </div>\n </div>\n </ea-popover>\n </div>\n\n <ea-field-messages\n [id]=\"id()\"\n [error]=\"errorText()\"\n [hint]=\"showHint() ? hint() : null\" />\n</div>\n", styles: [".ea-date-picker-field{display:flex;flex-direction:column;gap:var(--space-1-5)}.ea-date-picker,.ea-date-picker__trigger-wrapper{position:relative}.ea-date-picker__trigger-wrapper--xs{font-size:var(--font-size-xs)}.ea-date-picker__trigger-wrapper--sm{font-size:var(--font-size-sm)}.ea-date-picker__trigger-wrapper--md{font-size:var(--font-size-md)}.ea-date-picker__trigger-wrapper--lg{font-size:var(--font-size-lg)}.ea-date-picker__trigger-wrapper--xl{font-size:var(--font-size-xl)}.ea-date-picker__trigger{display:flex;align-items:center;gap:.5em;width:100%;min-height:2.5em;padding:.5em .75em;padding-inline-end:calc(var(--ea-icon-button-size) + var(--space-2) * 2);font-family:var(--font-family-sans);text-align:start;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-md);background-color:var(--color-bg-base);color:var(--color-text-primary);cursor:pointer;transition:var(--transition-colors),var(--transition-shadow)}.ea-date-picker__trigger:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-date-picker__trigger:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-date-picker__trigger--xs{font-size:var(--font-size-xs)}.ea-date-picker__trigger--sm{font-size:var(--font-size-sm)}.ea-date-picker__trigger--md{font-size:var(--font-size-md)}.ea-date-picker__trigger--lg{font-size:var(--font-size-lg)}.ea-date-picker__trigger--xl{font-size:var(--font-size-xl)}.ea-date-picker__trigger--open{border-color:var(--color-border-focus);box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-date-picker__trigger--open{outline:2px solid Highlight;outline-offset:2px}}.ea-date-picker__trigger--error{border-color:var(--color-error-default)}.ea-date-picker__trigger--error.ea-date-picker__trigger--open{box-shadow:var(--shadow-focus-ring-error)}@media(forced-colors:active){.ea-date-picker__trigger--error.ea-date-picker__trigger--open{outline:2px solid Highlight;outline-offset:2px}}.ea-date-picker__trigger--disabled{background-color:var(--color-bg-muted);opacity:.6;cursor:not-allowed}.ea-date-picker__trigger-icon{flex-shrink:0;width:1em;height:1em;color:var(--color-text-secondary)}.ea-date-picker__trigger-value{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ea-date-picker__trigger-value--placeholder{color:var(--color-text-tertiary)}.ea-date-picker__clear{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:var(--ea-icon-button-size, 1.75em);height:var(--ea-icon-button-size, 1.75em);padding:0;border:none;border-radius:var(--radius-sm);background:none;color:var(--color-text-secondary);cursor:pointer;transition:var(--transition-colors)}.ea-date-picker__clear>*{font-size:1.25em}.ea-date-picker__clear:hover{background-color:var(--color-state-hover);color:var(--color-text-primary)}.ea-date-picker__clear:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-date-picker__clear:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-date-picker__clear:disabled{cursor:not-allowed;opacity:.5}.ea-date-picker__clear{z-index:1;position:absolute;top:50%;inset-inline-end:var(--space-2);transform:translateY(-50%)}.ea-date-picker__clear-icon{width:1em;height:1em}.ea-date-picker__popover{display:flex;flex-direction:column;gap:var(--space-2);min-width:17.5rem;padding:var(--space-3);border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);background-color:var(--ea-date-picker-popover-background-color, var(--color-bg-elevated))}@media(forced-colors:active){.ea-date-picker__popover{border:1px solid CanvasText}}.ea-date-picker__header{display:flex;align-items:center;gap:var(--space-1)}.ea-date-picker__nav-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:var(--ea-icon-button-size, 1.75em);height:var(--ea-icon-button-size, 1.75em);padding:0;border:none;border-radius:var(--radius-sm);background:none;color:var(--color-text-secondary);cursor:pointer;transition:var(--transition-colors)}.ea-date-picker__nav-btn>*{font-size:1.25em}.ea-date-picker__nav-btn:hover{background-color:var(--color-state-hover);color:var(--color-text-primary)}.ea-date-picker__nav-btn:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-date-picker__nav-btn:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-date-picker__nav-btn:disabled{cursor:not-allowed;opacity:.5}.ea-date-picker__nav-btn ea-icon-chevron-left,.ea-date-picker__nav-btn ea-icon-chevron-right{width:1em;height:1em}.ea-date-picker__nav-btn ea-icon-chevron-left+ea-icon-chevron-left,.ea-date-picker__nav-btn ea-icon-chevron-right+ea-icon-chevron-right{margin-inline-start:-.375em}.ea-date-picker__month-label{flex:1;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);text-align:center;color:var(--color-text-primary)}.ea-date-picker__grid{display:flex;flex-direction:column;gap:var(--space-1)}.ea-date-picker__weekday-row,.ea-date-picker__week{display:grid;grid-template-columns:repeat(7,1fr);gap:var(--space-1)}.ea-date-picker__weekday{display:flex;align-items:center;justify-content:center;height:1.5rem;font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);text-transform:uppercase;color:var(--color-text-tertiary)}.ea-date-picker__day{display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;padding:0;border:none;border-radius:var(--radius-sm);background:none;font-family:var(--font-family-sans);font-size:var(--font-size-sm);color:var(--color-text-primary);cursor:pointer;transition:var(--transition-colors)}.ea-date-picker__day:hover:not(:disabled){background-color:var(--color-state-hover)}.ea-date-picker__day:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-date-picker__day:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-date-picker__day--outside{color:var(--color-text-tertiary)}.ea-date-picker__day--today{font-weight:var(--font-weight-semibold);color:var(--color-brand-text)}.ea-date-picker__day--focused:not(.ea-date-picker__day--selected){background-color:var(--color-state-active)}.ea-date-picker__day--selected{background-color:var(--color-brand-default);color:var(--color-text-inverse);font-weight:var(--font-weight-medium)}.ea-date-picker__day--selected:hover{background-color:var(--color-brand-hover)}@media(forced-colors:active){.ea-date-picker__day--selected{background-color:Highlight;border-color:Highlight;color:HighlightText}}.ea-date-picker__day--disabled{color:var(--color-text-disabled);cursor:not-allowed}.ea-date-picker__day--disabled:hover{background-color:transparent}.ea-date-picker__footer{display:flex;justify-content:flex-end;padding-top:var(--space-2);border-top:var(--border-width-thin) solid var(--color-border-default)}.ea-date-picker__today-btn{padding:var(--space-1) var(--space-2);border:none;border-radius:var(--radius-sm);background:none;font-family:var(--font-family-sans);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-brand-text);cursor:pointer;transition:var(--transition-colors)}.ea-date-picker__today-btn:hover{background-color:var(--color-brand-subtle)}.ea-date-picker__today-btn:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-date-picker__today-btn:focus-visible{outline:2px solid Highlight;outline-offset:2px}}\n"], dependencies: [{ kind: "component", type: CalendarIconComponent, selector: "ea-icon-calendar" }, { kind: "component", type: ChevronLeftIconComponent, selector: "ea-icon-chevron-left" }, { kind: "component", type: ChevronRightIconComponent, selector: "ea-icon-chevron-right" }, { kind: "component", type: FieldLabelComponent, selector: "ea-field-label", inputs: ["text", "forId", "required", "labelId"] }, { kind: "component", type: FieldMessagesComponent, selector: "ea-field-messages", inputs: ["id", "error", "hint"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: PopoverComponent, selector: "ea-popover", inputs: ["anchor", "open", "placement", "role", "aria-label", "surfaceId", "offset", "flip", "clamp", "matchAnchorWidth", "closeOnOutsideClick", "closeOnEscape", "scrollBehavior"], outputs: ["closeRequested"] }, { kind: "component", type: XIconComponent, selector: "ea-icon-x" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
8697
|
+
], viewQueries: [{ propertyName: "triggerEl", first: true, predicate: ["triggerEl"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"ea-date-picker-field\">\n @if (label(); as labelText) {\n <ea-field-label\n [text]=\"labelText\"\n [forId]=\"id()\"\n [required]=\"required()\" />\n }\n\n <div class=\"ea-date-picker\">\n <div\n class=\"ea-date-picker__trigger-wrapper\"\n [ngClass]=\"wrapperClasses()\">\n <button\n #triggerEl\n type=\"button\"\n class=\"ea-date-picker__trigger\"\n [ngClass]=\"triggerClasses()\"\n [id]=\"id()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-required]=\"required() || null\"\n [attr.aria-invalid]=\"hasError() || null\"\n [attr.aria-describedby]=\"\n showError() ? id() + '-error' : showHint() ? id() + '-hint' : null\n \"\n (click)=\"toggle()\"\n (keydown)=\"handleTriggerKeydown($event)\">\n <ea-icon-calendar\n class=\"ea-date-picker__trigger-icon\"\n aria-hidden=\"true\" />\n <span\n class=\"ea-date-picker__trigger-value\"\n [class.ea-date-picker__trigger-value--placeholder]=\"!displayValue()\">\n <bdi>{{ displayValue() || resolvedPlaceholder() }}</bdi>\n </span>\n </button>\n @if (value() && !isDisabled() && !readonly()) {\n <button\n type=\"button\"\n class=\"ea-date-picker__clear\"\n [attr.aria-label]=\"i18n.messages().datePicker.clear\"\n (click)=\"clear($event)\">\n <ea-icon-x\n class=\"ea-date-picker__clear-icon\"\n aria-hidden=\"true\" />\n </button>\n }\n </div>\n\n <ea-popover\n [anchor]=\"triggerEl\"\n [open]=\"isOpen()\"\n placement=\"bottom-start\"\n role=\"dialog\"\n [closeOnEscape]=\"false\"\n scrollBehavior=\"close\"\n (closeRequested)=\"onPopoverCloseRequested()\">\n <div\n class=\"ea-date-picker__popover\"\n [ngClass]=\"popoverClasses()\"\n [attr.aria-labelledby]=\"id() + '-label'\"\n (keydown)=\"handleGridKeydown($event)\">\n <div class=\"ea-date-picker__header\">\n <button\n type=\"button\"\n class=\"ea-date-picker__nav-btn\"\n [attr.aria-label]=\"i18n.messages().datePicker.previousYear\"\n (click)=\"goToPrevYear()\">\n <ea-icon-chevron-left\n class=\"ea-rtl-flip\"\n aria-hidden=\"true\" />\n <ea-icon-chevron-left\n class=\"ea-rtl-flip\"\n aria-hidden=\"true\" />\n </button>\n <button\n type=\"button\"\n class=\"ea-date-picker__nav-btn\"\n [attr.aria-label]=\"i18n.messages().datePicker.previousMonth\"\n (click)=\"goToPrevMonth()\">\n <ea-icon-chevron-left\n class=\"ea-rtl-flip\"\n aria-hidden=\"true\" />\n </button>\n <span\n class=\"ea-date-picker__month-label\"\n [id]=\"id() + '-label'\"\n aria-live=\"polite\">\n {{ monthYearLabel() }}\n </span>\n <button\n type=\"button\"\n class=\"ea-date-picker__nav-btn\"\n [attr.aria-label]=\"i18n.messages().datePicker.nextMonth\"\n (click)=\"goToNextMonth()\">\n <ea-icon-chevron-right\n class=\"ea-rtl-flip\"\n aria-hidden=\"true\" />\n </button>\n <button\n type=\"button\"\n class=\"ea-date-picker__nav-btn\"\n [attr.aria-label]=\"i18n.messages().datePicker.nextYear\"\n (click)=\"goToNextYear()\">\n <ea-icon-chevron-right\n class=\"ea-rtl-flip\"\n aria-hidden=\"true\" />\n <ea-icon-chevron-right\n class=\"ea-rtl-flip\"\n aria-hidden=\"true\" />\n </button>\n </div>\n\n <div\n class=\"ea-date-picker__grid\"\n role=\"grid\">\n <div\n class=\"ea-date-picker__weekday-row\"\n role=\"row\">\n @for (label of weekdayLabels(); track label) {\n <div\n class=\"ea-date-picker__weekday\"\n role=\"columnheader\">\n {{ label }}\n </div>\n }\n </div>\n @for (week of weeks(); track $index) {\n <div\n class=\"ea-date-picker__week\"\n role=\"row\">\n @for (day of week; track day.date.getTime()) {\n <button\n type=\"button\"\n class=\"ea-date-picker__day\"\n role=\"gridcell\"\n [class.ea-date-picker__day--outside]=\"!day.isCurrentMonth\"\n [class.ea-date-picker__day--today]=\"day.isToday\"\n [class.ea-date-picker__day--selected]=\"day.isSelected\"\n [class.ea-date-picker__day--focused]=\"day.isFocused\"\n [class.ea-date-picker__day--disabled]=\"day.isDisabled\"\n [disabled]=\"day.isDisabled\"\n [attr.aria-selected]=\"day.isSelected\"\n [attr.aria-current]=\"day.isToday ? 'date' : null\"\n [attr.tabindex]=\"day.isFocused ? 0 : -1\"\n (click)=\"selectDay(day)\">\n {{ day.day }}\n </button>\n }\n </div>\n }\n </div>\n\n <div class=\"ea-date-picker__footer\">\n <button\n type=\"button\"\n class=\"ea-date-picker__today-btn\"\n (click)=\"goToToday()\">\n {{ i18n.messages().datePicker.today }}\n </button>\n </div>\n </div>\n </ea-popover>\n </div>\n\n <ea-field-messages\n [id]=\"id()\"\n [error]=\"errorText()\"\n [hint]=\"showHint() ? hint() : null\" />\n</div>\n", styles: [".ea-date-picker-field{display:flex;flex-direction:column;gap:var(--space-1-5)}.ea-date-picker,.ea-date-picker__trigger-wrapper{position:relative}.ea-date-picker__trigger-wrapper--xs{font-size:var(--font-size-xs)}.ea-date-picker__trigger-wrapper--sm{font-size:var(--font-size-sm)}.ea-date-picker__trigger-wrapper--md{font-size:var(--font-size-md)}.ea-date-picker__trigger-wrapper--lg{font-size:var(--font-size-lg)}.ea-date-picker__trigger-wrapper--xl{font-size:var(--font-size-xl)}.ea-date-picker__trigger{display:flex;align-items:center;gap:.5em;width:100%;min-height:2.5em;padding:.5em .75em;padding-inline-end:calc(var(--ea-icon-button-size) + var(--space-2) * 2);font-family:var(--font-family-sans);text-align:start;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-md);background-color:var(--color-bg-base);color:var(--color-text-primary);cursor:pointer;transition:var(--transition-colors),var(--transition-shadow)}.ea-date-picker__trigger:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-date-picker__trigger:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-date-picker__trigger--xs{font-size:var(--font-size-xs)}.ea-date-picker__trigger--sm{font-size:var(--font-size-sm)}.ea-date-picker__trigger--md{font-size:var(--font-size-md)}.ea-date-picker__trigger--lg{font-size:var(--font-size-lg)}.ea-date-picker__trigger--xl{font-size:var(--font-size-xl)}.ea-date-picker__trigger--open{border-color:var(--color-border-focus);box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-date-picker__trigger--open{outline:2px solid Highlight;outline-offset:2px}}.ea-date-picker__trigger--error{border-color:var(--color-error-default)}.ea-date-picker__trigger--error.ea-date-picker__trigger--open{box-shadow:var(--shadow-focus-ring-error)}@media(forced-colors:active){.ea-date-picker__trigger--error.ea-date-picker__trigger--open{outline:2px solid Highlight;outline-offset:2px}}.ea-date-picker__trigger--disabled{background-color:var(--color-bg-muted);opacity:.6;cursor:not-allowed}.ea-date-picker__trigger-icon{flex-shrink:0;width:1em;height:1em;color:var(--color-text-secondary)}.ea-date-picker__trigger-value{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ea-date-picker__trigger-value--placeholder{color:var(--color-text-tertiary)}.ea-date-picker__clear{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:var(--ea-icon-button-size, 1.75em);height:var(--ea-icon-button-size, 1.75em);padding:0;border:none;border-radius:var(--radius-sm);background:none;color:var(--color-text-secondary);cursor:pointer;transition:var(--transition-colors)}.ea-date-picker__clear>*{font-size:1.25em}.ea-date-picker__clear:hover{background-color:var(--color-state-hover);color:var(--color-text-primary)}.ea-date-picker__clear:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-date-picker__clear:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-date-picker__clear:disabled{cursor:not-allowed;opacity:.5}.ea-date-picker__clear{z-index:1;position:absolute;top:50%;inset-inline-end:var(--space-2);transform:translateY(-50%)}.ea-date-picker__clear-icon{width:1em;height:1em}.ea-date-picker__popover{display:flex;flex-direction:column;gap:.5em;min-width:17.5em;padding:.75em;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);background-color:var(--ea-date-picker-popover-background-color, var(--color-bg-elevated))}@media(forced-colors:active){.ea-date-picker__popover{border:1px solid CanvasText}}.ea-date-picker__popover--xs{font-size:var(--font-size-xs)}.ea-date-picker__popover--sm{font-size:var(--font-size-sm)}.ea-date-picker__popover--md{font-size:var(--font-size-md)}.ea-date-picker__popover--lg{font-size:var(--font-size-lg)}.ea-date-picker__popover--xl{font-size:var(--font-size-xl)}.ea-date-picker__header{display:flex;align-items:center;gap:.25em}.ea-date-picker__nav-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:var(--ea-icon-button-size, 1.75em);height:var(--ea-icon-button-size, 1.75em);padding:0;border:none;border-radius:var(--radius-sm);background:none;color:var(--color-text-secondary);cursor:pointer;transition:var(--transition-colors)}.ea-date-picker__nav-btn>*{font-size:1.25em}.ea-date-picker__nav-btn:hover{background-color:var(--color-state-hover);color:var(--color-text-primary)}.ea-date-picker__nav-btn:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-date-picker__nav-btn:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-date-picker__nav-btn:disabled{cursor:not-allowed;opacity:.5}.ea-date-picker__nav-btn ea-icon-chevron-left,.ea-date-picker__nav-btn ea-icon-chevron-right{width:1em;height:1em}.ea-date-picker__nav-btn ea-icon-chevron-left+ea-icon-chevron-left,.ea-date-picker__nav-btn ea-icon-chevron-right+ea-icon-chevron-right{margin-inline-start:-.375em}.ea-date-picker__month-label{flex:1;font-size:.875em;font-weight:var(--font-weight-medium);text-align:center;color:var(--color-text-primary)}.ea-date-picker__grid{display:flex;flex-direction:column;gap:.25em}.ea-date-picker__weekday-row,.ea-date-picker__week{display:grid;grid-template-columns:repeat(7,1fr);gap:.25em}.ea-date-picker__weekday{display:flex;align-items:center;justify-content:center;height:2em;font-size:.75em;font-weight:var(--font-weight-medium);text-transform:uppercase;color:var(--color-text-tertiary)}.ea-date-picker__day{display:flex;align-items:center;justify-content:center;width:2.25em;height:2.25em;padding:0;border:none;border-radius:var(--radius-sm);background:none;font-family:var(--font-family-sans);font-size:.875em;color:var(--color-text-primary);cursor:pointer;transition:var(--transition-colors)}.ea-date-picker__day:hover:not(:disabled){background-color:var(--color-state-hover)}.ea-date-picker__day:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-date-picker__day:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-date-picker__day--outside{color:var(--color-text-tertiary)}.ea-date-picker__day--today{font-weight:var(--font-weight-semibold);color:var(--color-brand-text)}.ea-date-picker__day--focused:not(.ea-date-picker__day--selected){background-color:var(--color-state-active)}.ea-date-picker__day--selected{background-color:var(--color-brand-default);color:var(--color-text-inverse);font-weight:var(--font-weight-medium)}.ea-date-picker__day--selected:hover{background-color:var(--color-brand-hover)}@media(forced-colors:active){.ea-date-picker__day--selected{background-color:Highlight;border-color:Highlight;color:HighlightText}}.ea-date-picker__day--disabled{color:var(--color-text-disabled);cursor:not-allowed}.ea-date-picker__day--disabled:hover{background-color:transparent}.ea-date-picker__footer{display:flex;justify-content:flex-end;padding-top:.5em;border-top:var(--border-width-thin) solid var(--color-border-default)}.ea-date-picker__today-btn{padding:.25em .5em;border:none;border-radius:var(--radius-sm);background:none;font-family:var(--font-family-sans);font-size:.875em;font-weight:var(--font-weight-medium);color:var(--color-brand-text);cursor:pointer;transition:var(--transition-colors)}.ea-date-picker__today-btn:hover{background-color:var(--color-brand-subtle)}.ea-date-picker__today-btn:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-date-picker__today-btn:focus-visible{outline:2px solid Highlight;outline-offset:2px}}\n"], dependencies: [{ kind: "component", type: CalendarIconComponent, selector: "ea-icon-calendar" }, { kind: "component", type: ChevronLeftIconComponent, selector: "ea-icon-chevron-left" }, { kind: "component", type: ChevronRightIconComponent, selector: "ea-icon-chevron-right" }, { kind: "component", type: FieldLabelComponent, selector: "ea-field-label", inputs: ["text", "forId", "required", "labelId"] }, { kind: "component", type: FieldMessagesComponent, selector: "ea-field-messages", inputs: ["id", "error", "hint"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: PopoverComponent, selector: "ea-popover", inputs: ["anchor", "open", "placement", "role", "aria-label", "surfaceId", "offset", "flip", "clamp", "matchAnchorWidth", "closeOnOutsideClick", "closeOnEscape", "scrollBehavior"], outputs: ["closeRequested"] }, { kind: "component", type: XIconComponent, selector: "ea-icon-x" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
8322
8698
|
}
|
|
8323
8699
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: DatePickerComponent, decorators: [{
|
|
8324
8700
|
type: Component,
|
|
@@ -8337,7 +8713,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
|
|
|
8337
8713
|
useExisting: forwardRef(() => DatePickerComponent),
|
|
8338
8714
|
multi: true,
|
|
8339
8715
|
},
|
|
8340
|
-
], template: "<div class=\"ea-date-picker-field\">\n @if (label(); as labelText) {\n <ea-field-label\n [text]=\"labelText\"\n [forId]=\"id()\"\n [required]=\"required()\" />\n }\n\n <div class=\"ea-date-picker\">\n <div\n class=\"ea-date-picker__trigger-wrapper\"\n [ngClass]=\"wrapperClasses()\">\n <button\n #triggerEl\n type=\"button\"\n class=\"ea-date-picker__trigger\"\n [ngClass]=\"triggerClasses()\"\n [id]=\"id()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-required]=\"required() || null\"\n [attr.aria-invalid]=\"hasError() || null\"\n [attr.aria-describedby]=\"\n showError() ? id() + '-error' : showHint() ? id() + '-hint' : null\n \"\n (click)=\"toggle()\"\n (keydown)=\"handleTriggerKeydown($event)\">\n <ea-icon-calendar\n class=\"ea-date-picker__trigger-icon\"\n aria-hidden=\"true\" />\n <span\n class=\"ea-date-picker__trigger-value\"\n [class.ea-date-picker__trigger-value--placeholder]=\"!displayValue()\">\n <bdi>{{ displayValue() || resolvedPlaceholder() }}</bdi>\n </span>\n </button>\n @if (value() && !isDisabled() && !readonly()) {\n <button\n type=\"button\"\n class=\"ea-date-picker__clear\"\n [attr.aria-label]=\"i18n.messages().datePicker.clear\"\n (click)=\"clear($event)\">\n <ea-icon-x\n class=\"ea-date-picker__clear-icon\"\n aria-hidden=\"true\" />\n </button>\n }\n </div>\n\n <ea-popover\n [anchor]=\"triggerEl\"\n [open]=\"isOpen()\"\n placement=\"bottom-start\"\n role=\"dialog\"\n [closeOnEscape]=\"false\"\n scrollBehavior=\"close\"\n (closeRequested)=\"onPopoverCloseRequested()\">\n <div\n class=\"ea-date-picker__popover\"\n [attr.aria-labelledby]=\"id() + '-label'\"\n (keydown)=\"handleGridKeydown($event)\">\n <div class=\"ea-date-picker__header\">\n <button\n type=\"button\"\n class=\"ea-date-picker__nav-btn\"\n [attr.aria-label]=\"i18n.messages().datePicker.previousYear\"\n (click)=\"goToPrevYear()\">\n <ea-icon-chevron-left\n class=\"ea-rtl-flip\"\n aria-hidden=\"true\" />\n <ea-icon-chevron-left\n class=\"ea-rtl-flip\"\n aria-hidden=\"true\" />\n </button>\n <button\n type=\"button\"\n class=\"ea-date-picker__nav-btn\"\n [attr.aria-label]=\"i18n.messages().datePicker.previousMonth\"\n (click)=\"goToPrevMonth()\">\n <ea-icon-chevron-left\n class=\"ea-rtl-flip\"\n aria-hidden=\"true\" />\n </button>\n <span\n class=\"ea-date-picker__month-label\"\n [id]=\"id() + '-label'\"\n aria-live=\"polite\">\n {{ monthYearLabel() }}\n </span>\n <button\n type=\"button\"\n class=\"ea-date-picker__nav-btn\"\n [attr.aria-label]=\"i18n.messages().datePicker.nextMonth\"\n (click)=\"goToNextMonth()\">\n <ea-icon-chevron-right\n class=\"ea-rtl-flip\"\n aria-hidden=\"true\" />\n </button>\n <button\n type=\"button\"\n class=\"ea-date-picker__nav-btn\"\n [attr.aria-label]=\"i18n.messages().datePicker.nextYear\"\n (click)=\"goToNextYear()\">\n <ea-icon-chevron-right\n class=\"ea-rtl-flip\"\n aria-hidden=\"true\" />\n <ea-icon-chevron-right\n class=\"ea-rtl-flip\"\n aria-hidden=\"true\" />\n </button>\n </div>\n\n <div\n class=\"ea-date-picker__grid\"\n role=\"grid\">\n <div\n class=\"ea-date-picker__weekday-row\"\n role=\"row\">\n @for (label of weekdayLabels(); track label) {\n <div\n class=\"ea-date-picker__weekday\"\n role=\"columnheader\">\n {{ label }}\n </div>\n }\n </div>\n @for (week of weeks(); track $index) {\n <div\n class=\"ea-date-picker__week\"\n role=\"row\">\n @for (day of week; track day.date.getTime()) {\n <button\n type=\"button\"\n class=\"ea-date-picker__day\"\n role=\"gridcell\"\n [class.ea-date-picker__day--outside]=\"!day.isCurrentMonth\"\n [class.ea-date-picker__day--today]=\"day.isToday\"\n [class.ea-date-picker__day--selected]=\"day.isSelected\"\n [class.ea-date-picker__day--focused]=\"day.isFocused\"\n [class.ea-date-picker__day--disabled]=\"day.isDisabled\"\n [disabled]=\"day.isDisabled\"\n [attr.aria-selected]=\"day.isSelected\"\n [attr.aria-current]=\"day.isToday ? 'date' : null\"\n [attr.tabindex]=\"day.isFocused ? 0 : -1\"\n (click)=\"selectDay(day)\">\n {{ day.day }}\n </button>\n }\n </div>\n }\n </div>\n\n <div class=\"ea-date-picker__footer\">\n <button\n type=\"button\"\n class=\"ea-date-picker__today-btn\"\n (click)=\"goToToday()\">\n {{ i18n.messages().datePicker.today }}\n </button>\n </div>\n </div>\n </ea-popover>\n </div>\n\n <ea-field-messages\n [id]=\"id()\"\n [error]=\"errorText()\"\n [hint]=\"showHint() ? hint() : null\" />\n</div>\n", styles: [".ea-date-picker-field{display:flex;flex-direction:column;gap:var(--space-1-5)}.ea-date-picker,.ea-date-picker__trigger-wrapper{position:relative}.ea-date-picker__trigger-wrapper--xs{font-size:var(--font-size-xs)}.ea-date-picker__trigger-wrapper--sm{font-size:var(--font-size-sm)}.ea-date-picker__trigger-wrapper--md{font-size:var(--font-size-md)}.ea-date-picker__trigger-wrapper--lg{font-size:var(--font-size-lg)}.ea-date-picker__trigger-wrapper--xl{font-size:var(--font-size-xl)}.ea-date-picker__trigger{display:flex;align-items:center;gap:.5em;width:100%;min-height:2.5em;padding:.5em .75em;padding-inline-end:calc(var(--ea-icon-button-size) + var(--space-2) * 2);font-family:var(--font-family-sans);text-align:start;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-md);background-color:var(--color-bg-base);color:var(--color-text-primary);cursor:pointer;transition:var(--transition-colors),var(--transition-shadow)}.ea-date-picker__trigger:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-date-picker__trigger:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-date-picker__trigger--xs{font-size:var(--font-size-xs)}.ea-date-picker__trigger--sm{font-size:var(--font-size-sm)}.ea-date-picker__trigger--md{font-size:var(--font-size-md)}.ea-date-picker__trigger--lg{font-size:var(--font-size-lg)}.ea-date-picker__trigger--xl{font-size:var(--font-size-xl)}.ea-date-picker__trigger--open{border-color:var(--color-border-focus);box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-date-picker__trigger--open{outline:2px solid Highlight;outline-offset:2px}}.ea-date-picker__trigger--error{border-color:var(--color-error-default)}.ea-date-picker__trigger--error.ea-date-picker__trigger--open{box-shadow:var(--shadow-focus-ring-error)}@media(forced-colors:active){.ea-date-picker__trigger--error.ea-date-picker__trigger--open{outline:2px solid Highlight;outline-offset:2px}}.ea-date-picker__trigger--disabled{background-color:var(--color-bg-muted);opacity:.6;cursor:not-allowed}.ea-date-picker__trigger-icon{flex-shrink:0;width:1em;height:1em;color:var(--color-text-secondary)}.ea-date-picker__trigger-value{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ea-date-picker__trigger-value--placeholder{color:var(--color-text-tertiary)}.ea-date-picker__clear{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:var(--ea-icon-button-size, 1.75em);height:var(--ea-icon-button-size, 1.75em);padding:0;border:none;border-radius:var(--radius-sm);background:none;color:var(--color-text-secondary);cursor:pointer;transition:var(--transition-colors)}.ea-date-picker__clear>*{font-size:1.25em}.ea-date-picker__clear:hover{background-color:var(--color-state-hover);color:var(--color-text-primary)}.ea-date-picker__clear:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-date-picker__clear:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-date-picker__clear:disabled{cursor:not-allowed;opacity:.5}.ea-date-picker__clear{z-index:1;position:absolute;top:50%;inset-inline-end:var(--space-2);transform:translateY(-50%)}.ea-date-picker__clear-icon{width:1em;height:1em}.ea-date-picker__popover{display:flex;flex-direction:column;gap:var(--space-2);min-width:17.5rem;padding:var(--space-3);border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);background-color:var(--ea-date-picker-popover-background-color, var(--color-bg-elevated))}@media(forced-colors:active){.ea-date-picker__popover{border:1px solid CanvasText}}.ea-date-picker__header{display:flex;align-items:center;gap:var(--space-1)}.ea-date-picker__nav-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:var(--ea-icon-button-size, 1.75em);height:var(--ea-icon-button-size, 1.75em);padding:0;border:none;border-radius:var(--radius-sm);background:none;color:var(--color-text-secondary);cursor:pointer;transition:var(--transition-colors)}.ea-date-picker__nav-btn>*{font-size:1.25em}.ea-date-picker__nav-btn:hover{background-color:var(--color-state-hover);color:var(--color-text-primary)}.ea-date-picker__nav-btn:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-date-picker__nav-btn:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-date-picker__nav-btn:disabled{cursor:not-allowed;opacity:.5}.ea-date-picker__nav-btn ea-icon-chevron-left,.ea-date-picker__nav-btn ea-icon-chevron-right{width:1em;height:1em}.ea-date-picker__nav-btn ea-icon-chevron-left+ea-icon-chevron-left,.ea-date-picker__nav-btn ea-icon-chevron-right+ea-icon-chevron-right{margin-inline-start:-.375em}.ea-date-picker__month-label{flex:1;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);text-align:center;color:var(--color-text-primary)}.ea-date-picker__grid{display:flex;flex-direction:column;gap:var(--space-1)}.ea-date-picker__weekday-row,.ea-date-picker__week{display:grid;grid-template-columns:repeat(7,1fr);gap:var(--space-1)}.ea-date-picker__weekday{display:flex;align-items:center;justify-content:center;height:1.5rem;font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);text-transform:uppercase;color:var(--color-text-tertiary)}.ea-date-picker__day{display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;padding:0;border:none;border-radius:var(--radius-sm);background:none;font-family:var(--font-family-sans);font-size:var(--font-size-sm);color:var(--color-text-primary);cursor:pointer;transition:var(--transition-colors)}.ea-date-picker__day:hover:not(:disabled){background-color:var(--color-state-hover)}.ea-date-picker__day:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-date-picker__day:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-date-picker__day--outside{color:var(--color-text-tertiary)}.ea-date-picker__day--today{font-weight:var(--font-weight-semibold);color:var(--color-brand-text)}.ea-date-picker__day--focused:not(.ea-date-picker__day--selected){background-color:var(--color-state-active)}.ea-date-picker__day--selected{background-color:var(--color-brand-default);color:var(--color-text-inverse);font-weight:var(--font-weight-medium)}.ea-date-picker__day--selected:hover{background-color:var(--color-brand-hover)}@media(forced-colors:active){.ea-date-picker__day--selected{background-color:Highlight;border-color:Highlight;color:HighlightText}}.ea-date-picker__day--disabled{color:var(--color-text-disabled);cursor:not-allowed}.ea-date-picker__day--disabled:hover{background-color:transparent}.ea-date-picker__footer{display:flex;justify-content:flex-end;padding-top:var(--space-2);border-top:var(--border-width-thin) solid var(--color-border-default)}.ea-date-picker__today-btn{padding:var(--space-1) var(--space-2);border:none;border-radius:var(--radius-sm);background:none;font-family:var(--font-family-sans);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-brand-text);cursor:pointer;transition:var(--transition-colors)}.ea-date-picker__today-btn:hover{background-color:var(--color-brand-subtle)}.ea-date-picker__today-btn:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-date-picker__today-btn:focus-visible{outline:2px solid Highlight;outline-offset:2px}}\n"] }]
|
|
8716
|
+
], template: "<div class=\"ea-date-picker-field\">\n @if (label(); as labelText) {\n <ea-field-label\n [text]=\"labelText\"\n [forId]=\"id()\"\n [required]=\"required()\" />\n }\n\n <div class=\"ea-date-picker\">\n <div\n class=\"ea-date-picker__trigger-wrapper\"\n [ngClass]=\"wrapperClasses()\">\n <button\n #triggerEl\n type=\"button\"\n class=\"ea-date-picker__trigger\"\n [ngClass]=\"triggerClasses()\"\n [id]=\"id()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-required]=\"required() || null\"\n [attr.aria-invalid]=\"hasError() || null\"\n [attr.aria-describedby]=\"\n showError() ? id() + '-error' : showHint() ? id() + '-hint' : null\n \"\n (click)=\"toggle()\"\n (keydown)=\"handleTriggerKeydown($event)\">\n <ea-icon-calendar\n class=\"ea-date-picker__trigger-icon\"\n aria-hidden=\"true\" />\n <span\n class=\"ea-date-picker__trigger-value\"\n [class.ea-date-picker__trigger-value--placeholder]=\"!displayValue()\">\n <bdi>{{ displayValue() || resolvedPlaceholder() }}</bdi>\n </span>\n </button>\n @if (value() && !isDisabled() && !readonly()) {\n <button\n type=\"button\"\n class=\"ea-date-picker__clear\"\n [attr.aria-label]=\"i18n.messages().datePicker.clear\"\n (click)=\"clear($event)\">\n <ea-icon-x\n class=\"ea-date-picker__clear-icon\"\n aria-hidden=\"true\" />\n </button>\n }\n </div>\n\n <ea-popover\n [anchor]=\"triggerEl\"\n [open]=\"isOpen()\"\n placement=\"bottom-start\"\n role=\"dialog\"\n [closeOnEscape]=\"false\"\n scrollBehavior=\"close\"\n (closeRequested)=\"onPopoverCloseRequested()\">\n <div\n class=\"ea-date-picker__popover\"\n [ngClass]=\"popoverClasses()\"\n [attr.aria-labelledby]=\"id() + '-label'\"\n (keydown)=\"handleGridKeydown($event)\">\n <div class=\"ea-date-picker__header\">\n <button\n type=\"button\"\n class=\"ea-date-picker__nav-btn\"\n [attr.aria-label]=\"i18n.messages().datePicker.previousYear\"\n (click)=\"goToPrevYear()\">\n <ea-icon-chevron-left\n class=\"ea-rtl-flip\"\n aria-hidden=\"true\" />\n <ea-icon-chevron-left\n class=\"ea-rtl-flip\"\n aria-hidden=\"true\" />\n </button>\n <button\n type=\"button\"\n class=\"ea-date-picker__nav-btn\"\n [attr.aria-label]=\"i18n.messages().datePicker.previousMonth\"\n (click)=\"goToPrevMonth()\">\n <ea-icon-chevron-left\n class=\"ea-rtl-flip\"\n aria-hidden=\"true\" />\n </button>\n <span\n class=\"ea-date-picker__month-label\"\n [id]=\"id() + '-label'\"\n aria-live=\"polite\">\n {{ monthYearLabel() }}\n </span>\n <button\n type=\"button\"\n class=\"ea-date-picker__nav-btn\"\n [attr.aria-label]=\"i18n.messages().datePicker.nextMonth\"\n (click)=\"goToNextMonth()\">\n <ea-icon-chevron-right\n class=\"ea-rtl-flip\"\n aria-hidden=\"true\" />\n </button>\n <button\n type=\"button\"\n class=\"ea-date-picker__nav-btn\"\n [attr.aria-label]=\"i18n.messages().datePicker.nextYear\"\n (click)=\"goToNextYear()\">\n <ea-icon-chevron-right\n class=\"ea-rtl-flip\"\n aria-hidden=\"true\" />\n <ea-icon-chevron-right\n class=\"ea-rtl-flip\"\n aria-hidden=\"true\" />\n </button>\n </div>\n\n <div\n class=\"ea-date-picker__grid\"\n role=\"grid\">\n <div\n class=\"ea-date-picker__weekday-row\"\n role=\"row\">\n @for (label of weekdayLabels(); track label) {\n <div\n class=\"ea-date-picker__weekday\"\n role=\"columnheader\">\n {{ label }}\n </div>\n }\n </div>\n @for (week of weeks(); track $index) {\n <div\n class=\"ea-date-picker__week\"\n role=\"row\">\n @for (day of week; track day.date.getTime()) {\n <button\n type=\"button\"\n class=\"ea-date-picker__day\"\n role=\"gridcell\"\n [class.ea-date-picker__day--outside]=\"!day.isCurrentMonth\"\n [class.ea-date-picker__day--today]=\"day.isToday\"\n [class.ea-date-picker__day--selected]=\"day.isSelected\"\n [class.ea-date-picker__day--focused]=\"day.isFocused\"\n [class.ea-date-picker__day--disabled]=\"day.isDisabled\"\n [disabled]=\"day.isDisabled\"\n [attr.aria-selected]=\"day.isSelected\"\n [attr.aria-current]=\"day.isToday ? 'date' : null\"\n [attr.tabindex]=\"day.isFocused ? 0 : -1\"\n (click)=\"selectDay(day)\">\n {{ day.day }}\n </button>\n }\n </div>\n }\n </div>\n\n <div class=\"ea-date-picker__footer\">\n <button\n type=\"button\"\n class=\"ea-date-picker__today-btn\"\n (click)=\"goToToday()\">\n {{ i18n.messages().datePicker.today }}\n </button>\n </div>\n </div>\n </ea-popover>\n </div>\n\n <ea-field-messages\n [id]=\"id()\"\n [error]=\"errorText()\"\n [hint]=\"showHint() ? hint() : null\" />\n</div>\n", styles: [".ea-date-picker-field{display:flex;flex-direction:column;gap:var(--space-1-5)}.ea-date-picker,.ea-date-picker__trigger-wrapper{position:relative}.ea-date-picker__trigger-wrapper--xs{font-size:var(--font-size-xs)}.ea-date-picker__trigger-wrapper--sm{font-size:var(--font-size-sm)}.ea-date-picker__trigger-wrapper--md{font-size:var(--font-size-md)}.ea-date-picker__trigger-wrapper--lg{font-size:var(--font-size-lg)}.ea-date-picker__trigger-wrapper--xl{font-size:var(--font-size-xl)}.ea-date-picker__trigger{display:flex;align-items:center;gap:.5em;width:100%;min-height:2.5em;padding:.5em .75em;padding-inline-end:calc(var(--ea-icon-button-size) + var(--space-2) * 2);font-family:var(--font-family-sans);text-align:start;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-md);background-color:var(--color-bg-base);color:var(--color-text-primary);cursor:pointer;transition:var(--transition-colors),var(--transition-shadow)}.ea-date-picker__trigger:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-date-picker__trigger:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-date-picker__trigger--xs{font-size:var(--font-size-xs)}.ea-date-picker__trigger--sm{font-size:var(--font-size-sm)}.ea-date-picker__trigger--md{font-size:var(--font-size-md)}.ea-date-picker__trigger--lg{font-size:var(--font-size-lg)}.ea-date-picker__trigger--xl{font-size:var(--font-size-xl)}.ea-date-picker__trigger--open{border-color:var(--color-border-focus);box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-date-picker__trigger--open{outline:2px solid Highlight;outline-offset:2px}}.ea-date-picker__trigger--error{border-color:var(--color-error-default)}.ea-date-picker__trigger--error.ea-date-picker__trigger--open{box-shadow:var(--shadow-focus-ring-error)}@media(forced-colors:active){.ea-date-picker__trigger--error.ea-date-picker__trigger--open{outline:2px solid Highlight;outline-offset:2px}}.ea-date-picker__trigger--disabled{background-color:var(--color-bg-muted);opacity:.6;cursor:not-allowed}.ea-date-picker__trigger-icon{flex-shrink:0;width:1em;height:1em;color:var(--color-text-secondary)}.ea-date-picker__trigger-value{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ea-date-picker__trigger-value--placeholder{color:var(--color-text-tertiary)}.ea-date-picker__clear{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:var(--ea-icon-button-size, 1.75em);height:var(--ea-icon-button-size, 1.75em);padding:0;border:none;border-radius:var(--radius-sm);background:none;color:var(--color-text-secondary);cursor:pointer;transition:var(--transition-colors)}.ea-date-picker__clear>*{font-size:1.25em}.ea-date-picker__clear:hover{background-color:var(--color-state-hover);color:var(--color-text-primary)}.ea-date-picker__clear:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-date-picker__clear:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-date-picker__clear:disabled{cursor:not-allowed;opacity:.5}.ea-date-picker__clear{z-index:1;position:absolute;top:50%;inset-inline-end:var(--space-2);transform:translateY(-50%)}.ea-date-picker__clear-icon{width:1em;height:1em}.ea-date-picker__popover{display:flex;flex-direction:column;gap:.5em;min-width:17.5em;padding:.75em;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);background-color:var(--ea-date-picker-popover-background-color, var(--color-bg-elevated))}@media(forced-colors:active){.ea-date-picker__popover{border:1px solid CanvasText}}.ea-date-picker__popover--xs{font-size:var(--font-size-xs)}.ea-date-picker__popover--sm{font-size:var(--font-size-sm)}.ea-date-picker__popover--md{font-size:var(--font-size-md)}.ea-date-picker__popover--lg{font-size:var(--font-size-lg)}.ea-date-picker__popover--xl{font-size:var(--font-size-xl)}.ea-date-picker__header{display:flex;align-items:center;gap:.25em}.ea-date-picker__nav-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:var(--ea-icon-button-size, 1.75em);height:var(--ea-icon-button-size, 1.75em);padding:0;border:none;border-radius:var(--radius-sm);background:none;color:var(--color-text-secondary);cursor:pointer;transition:var(--transition-colors)}.ea-date-picker__nav-btn>*{font-size:1.25em}.ea-date-picker__nav-btn:hover{background-color:var(--color-state-hover);color:var(--color-text-primary)}.ea-date-picker__nav-btn:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-date-picker__nav-btn:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-date-picker__nav-btn:disabled{cursor:not-allowed;opacity:.5}.ea-date-picker__nav-btn ea-icon-chevron-left,.ea-date-picker__nav-btn ea-icon-chevron-right{width:1em;height:1em}.ea-date-picker__nav-btn ea-icon-chevron-left+ea-icon-chevron-left,.ea-date-picker__nav-btn ea-icon-chevron-right+ea-icon-chevron-right{margin-inline-start:-.375em}.ea-date-picker__month-label{flex:1;font-size:.875em;font-weight:var(--font-weight-medium);text-align:center;color:var(--color-text-primary)}.ea-date-picker__grid{display:flex;flex-direction:column;gap:.25em}.ea-date-picker__weekday-row,.ea-date-picker__week{display:grid;grid-template-columns:repeat(7,1fr);gap:.25em}.ea-date-picker__weekday{display:flex;align-items:center;justify-content:center;height:2em;font-size:.75em;font-weight:var(--font-weight-medium);text-transform:uppercase;color:var(--color-text-tertiary)}.ea-date-picker__day{display:flex;align-items:center;justify-content:center;width:2.25em;height:2.25em;padding:0;border:none;border-radius:var(--radius-sm);background:none;font-family:var(--font-family-sans);font-size:.875em;color:var(--color-text-primary);cursor:pointer;transition:var(--transition-colors)}.ea-date-picker__day:hover:not(:disabled){background-color:var(--color-state-hover)}.ea-date-picker__day:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-date-picker__day:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-date-picker__day--outside{color:var(--color-text-tertiary)}.ea-date-picker__day--today{font-weight:var(--font-weight-semibold);color:var(--color-brand-text)}.ea-date-picker__day--focused:not(.ea-date-picker__day--selected){background-color:var(--color-state-active)}.ea-date-picker__day--selected{background-color:var(--color-brand-default);color:var(--color-text-inverse);font-weight:var(--font-weight-medium)}.ea-date-picker__day--selected:hover{background-color:var(--color-brand-hover)}@media(forced-colors:active){.ea-date-picker__day--selected{background-color:Highlight;border-color:Highlight;color:HighlightText}}.ea-date-picker__day--disabled{color:var(--color-text-disabled);cursor:not-allowed}.ea-date-picker__day--disabled:hover{background-color:transparent}.ea-date-picker__footer{display:flex;justify-content:flex-end;padding-top:.5em;border-top:var(--border-width-thin) solid var(--color-border-default)}.ea-date-picker__today-btn{padding:.25em .5em;border:none;border-radius:var(--radius-sm);background:none;font-family:var(--font-family-sans);font-size:.875em;font-weight:var(--font-weight-medium);color:var(--color-brand-text);cursor:pointer;transition:var(--transition-colors)}.ea-date-picker__today-btn:hover{background-color:var(--color-brand-subtle)}.ea-date-picker__today-btn:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-date-picker__today-btn:focus-visible{outline:2px solid Highlight;outline-offset:2px}}\n"] }]
|
|
8341
8717
|
}], propDecorators: { triggerEl: [{ type: i0.ViewChild, args: ['triggerEl', { isSignal: true }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], hint: [{ type: i0.Input, args: [{ isSignal: true, alias: "hint", required: false }] }], errorMsg: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorMsg", required: false }] }], errorMessages: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorMessages", required: false }] }], minDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "minDate", required: false }] }], maxDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxDate", required: false }] }], format: [{ type: i0.Input, args: [{ isSignal: true, alias: "format", required: false }] }], weekStartsOn: [{ type: i0.Input, args: [{ isSignal: true, alias: "weekStartsOn", required: false }] }], locale: [{ type: i0.Input, args: [{ isSignal: true, alias: "locale", required: false }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], changed: [{ type: i0.Output, args: ["changed"] }] } });
|
|
8342
8718
|
|
|
8343
8719
|
/**
|
|
@@ -8418,64 +8794,381 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
|
|
|
8418
8794
|
args: [{ selector: 'ea-dialog', imports: [NgClass, XIconComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<dialog\n #dialogEl\n class=\"ea-dialog\"\n [id]=\"id()\"\n [attr.aria-label]=\"ariaLabel() ?? null\"\n [attr.aria-labelledby]=\"!ariaLabel() ? id() + '-header' : null\"\n (click)=\"handleBackdropClick($event)\"\n (cancel)=\"handleCancel($event)\">\n <div\n class=\"ea-dialog__panel\"\n [ngClass]=\"panelClasses()\">\n @if (showClose()) {\n <button\n type=\"button\"\n class=\"ea-dialog__close\"\n [attr.aria-label]=\"i18n.messages().dialog.close\"\n (click)=\"handleClose()\">\n <ea-icon-x />\n </button>\n }\n\n <div\n class=\"ea-dialog__header\"\n [id]=\"id() + '-header'\">\n <ng-content select=\"[slot=header]\" />\n </div>\n\n <div class=\"ea-dialog__body\">\n <ng-content />\n </div>\n\n <div class=\"ea-dialog__footer\">\n <ng-content select=\"[slot=footer]\" />\n </div>\n </div>\n</dialog>\n", styles: [".ea-dialog{border:none;background:transparent;padding:0;margin:auto;max-width:none;max-height:none;overflow:visible}.ea-dialog::backdrop{background-color:var(--color-bg-overlay)}.ea-dialog__panel{position:relative;display:flex;flex-direction:column;background-color:var(--ea-dialog-panel-background-color, var(--color-bg-elevated));border-radius:var(--radius-xl);box-shadow:var(--shadow-2xl);max-height:85vh;overflow:hidden}@media(forced-colors:active){.ea-dialog__panel{border:1px solid CanvasText}}.ea-dialog__panel--xs{width:20rem}.ea-dialog__panel--sm{width:24rem}.ea-dialog__panel--md{width:32rem}.ea-dialog__panel--lg{width:42rem}.ea-dialog__panel--xl{width:52rem}.ea-dialog__panel--full{width:calc(100vw - 2rem);height:calc(100vh - 2rem);max-height:calc(100vh - 2rem)}.ea-dialog__close{z-index:1;position:absolute;top:var(--space-3);inset-inline-end:var(--space-3);display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:var(--ea-icon-button-size, 1.75em);height:var(--ea-icon-button-size, 1.75em);padding:0;border:none;border-radius:var(--radius-sm);background:none;color:var(--color-text-secondary);cursor:pointer;transition:var(--transition-colors)}.ea-dialog__close>*{font-size:1.25em}.ea-dialog__close:hover{background-color:var(--color-state-hover);color:var(--color-text-primary)}.ea-dialog__close:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-dialog__close:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-dialog__close:disabled{cursor:not-allowed;opacity:.5}.ea-dialog__close svg{width:1em;height:1em}.ea-dialog__header{padding:var(--space-5) var(--space-6) var(--space-3);font-size:var(--text-h4-size);font-weight:var(--text-h4-weight);line-height:var(--text-h4-lh);color:var(--color-text-primary)}.ea-dialog__header:empty{display:none}.ea-dialog__body{flex:1;padding:var(--space-3) var(--space-6);overflow-y:auto;font-size:var(--font-size-sm);line-height:var(--line-height-normal);color:var(--color-text-secondary)}.ea-dialog__footer{display:flex;align-items:center;justify-content:flex-end;gap:var(--space-3);padding:var(--space-3) var(--space-6) var(--space-5)}.ea-dialog__footer>*{display:flex;align-items:center;gap:var(--space-3)}.ea-dialog__footer:empty{display:none}\n"] }]
|
|
8419
8795
|
}], ctorParameters: () => [], propDecorators: { dialogEl: [{ type: i0.ViewChild, args: ['dialogEl', { isSignal: true }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], closeOnBackdrop: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnBackdrop", required: false }] }], closeOnEscape: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnEscape", required: false }] }], showClose: [{ type: i0.Input, args: [{ isSignal: true, alias: "showClose", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }, { type: i0.Output, args: ["openChange"] }], opened: [{ type: i0.Output, args: ["opened"] }], closed: [{ type: i0.Output, args: ["closed"] }] } });
|
|
8420
8796
|
|
|
8797
|
+
// The padding side, per position, applied to the push target so its content
|
|
8798
|
+
// reflows away from the drawer's edge. `start`/`end` are direction-aware.
|
|
8799
|
+
const PUSH_PROPERTY = {
|
|
8800
|
+
right: 'padding-right',
|
|
8801
|
+
left: 'padding-left',
|
|
8802
|
+
start: 'padding-inline-start',
|
|
8803
|
+
end: 'padding-inline-end',
|
|
8804
|
+
top: 'padding-top',
|
|
8805
|
+
bottom: 'padding-bottom',
|
|
8806
|
+
};
|
|
8807
|
+
// Every padding side push can set. All are cleared before applying the current
|
|
8808
|
+
// one so a position change never leaves a stale offset that shifts content off.
|
|
8809
|
+
const PUSH_PROPERTIES = [
|
|
8810
|
+
'padding-left',
|
|
8811
|
+
'padding-right',
|
|
8812
|
+
'padding-top',
|
|
8813
|
+
'padding-bottom',
|
|
8814
|
+
'padding-inline-start',
|
|
8815
|
+
'padding-inline-end',
|
|
8816
|
+
];
|
|
8421
8817
|
/**
|
|
8422
8818
|
* Side panel backed by the native `<dialog>` element for browser-managed
|
|
8423
8819
|
* focus trapping. Slides in from a configurable edge, supports backdrop and
|
|
8424
8820
|
* Escape dismissal, and exposes `header`, default, and `footer` content
|
|
8425
|
-
* slots. The `open` state is a two-way `model()` binding.
|
|
8821
|
+
* slots. The `open` state is a two-way `model()` binding. In `push` mode it
|
|
8822
|
+
* opens non-modally and reflows the page content aside instead of overlaying it.
|
|
8426
8823
|
*/
|
|
8427
8824
|
class DrawerComponent {
|
|
8428
8825
|
drawerEl = viewChild('drawerEl', ...(ngDevMode ? [{ debugName: "drawerEl" }] : /* istanbul ignore next */ []));
|
|
8826
|
+
panelEl = viewChild('panelEl', ...(ngDevMode ? [{ debugName: "panelEl" }] : /* istanbul ignore next */ []));
|
|
8429
8827
|
previouslyFocused = null;
|
|
8828
|
+
pushedTarget = null;
|
|
8829
|
+
pushedProperty = null;
|
|
8830
|
+
pushCleanupTimer = null;
|
|
8831
|
+
// Which modality the open dialog was shown with, so a `mode` change while it
|
|
8832
|
+
// is open can reopen it in the matching modality. `null` means it is closed.
|
|
8833
|
+
shownAsModal = null;
|
|
8834
|
+
reopening = false;
|
|
8835
|
+
isLeaving = false;
|
|
8836
|
+
pushRaf = null;
|
|
8837
|
+
leaveTimer = null;
|
|
8838
|
+
leaveOnEnd = null;
|
|
8839
|
+
documentPointerListener = null;
|
|
8430
8840
|
i18n = inject(EagamiI18nService);
|
|
8431
8841
|
isBrowser = isPlatformBrowser(inject(PLATFORM_ID));
|
|
8432
8842
|
position = input('right', ...(ngDevMode ? [{ debugName: "position" }] : /* istanbul ignore next */ []));
|
|
8433
|
-
|
|
8843
|
+
/**
|
|
8844
|
+
* Extent of the panel along its main axis (width for side drawers, height for
|
|
8845
|
+
* top/bottom drawers).
|
|
8846
|
+
*/
|
|
8847
|
+
size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
8848
|
+
/**
|
|
8849
|
+
* `overlay` (default) opens the drawer as a modal over a dimmed page; `push`
|
|
8850
|
+
* opens it non-modally and reflows the page content aside.
|
|
8851
|
+
*/
|
|
8852
|
+
mode = input('overlay', ...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
|
|
8853
|
+
/**
|
|
8854
|
+
* Element whose content is pushed aside in `push` mode, as a CSS selector or
|
|
8855
|
+
* element reference. Defaults to `document.body`.
|
|
8856
|
+
*/
|
|
8857
|
+
pushTarget = input(null, ...(ngDevMode ? [{ debugName: "pushTarget" }] : /* istanbul ignore next */ []));
|
|
8434
8858
|
closeOnBackdrop = input(true, ...(ngDevMode ? [{ debugName: "closeOnBackdrop" }] : /* istanbul ignore next */ []));
|
|
8435
8859
|
closeOnEscape = input(true, ...(ngDevMode ? [{ debugName: "closeOnEscape" }] : /* istanbul ignore next */ []));
|
|
8436
|
-
/** Slide
|
|
8437
|
-
|
|
8860
|
+
/** Slide animation used as the panel opens and closes. */
|
|
8861
|
+
animation = input('eased', ...(ngDevMode ? [{ debugName: "animation" }] : /* istanbul ignore next */ []));
|
|
8438
8862
|
showClose = input(true, ...(ngDevMode ? [{ debugName: "showClose" }] : /* istanbul ignore next */ []));
|
|
8439
8863
|
ariaLabel = input(undefined, { ...(ngDevMode ? { debugName: "ariaLabel" } : /* istanbul ignore next */ {}), alias: 'aria-label' });
|
|
8440
8864
|
id = input(uniqueId('ea-drawer'), ...(ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []));
|
|
8441
8865
|
open = model(false, ...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
|
|
8442
|
-
/** Fires once the drawer has been shown
|
|
8866
|
+
/** Fires once the drawer has been shown. */
|
|
8443
8867
|
opened = output();
|
|
8444
8868
|
/** Fires when the drawer closes (via close button, backdrop, or Escape). */
|
|
8445
8869
|
closed = output();
|
|
8446
8870
|
panelClasses = computed(() => ({
|
|
8447
8871
|
[`ea-drawer__panel--${this.position()}`]: true,
|
|
8448
|
-
[`ea-drawer__panel--${this.
|
|
8872
|
+
[`ea-drawer__panel--${this.size()}`]: true,
|
|
8449
8873
|
}), ...(ngDevMode ? [{ debugName: "panelClasses" }] : /* istanbul ignore next */ []));
|
|
8450
8874
|
constructor() {
|
|
8451
8875
|
effect(() => {
|
|
8452
8876
|
const drawerRef = this.drawerEl()?.nativeElement;
|
|
8453
8877
|
const open = this.open();
|
|
8878
|
+
const mode = this.mode();
|
|
8879
|
+
// Re-run the push measurement if size, position, or target change while open.
|
|
8880
|
+
this.size();
|
|
8881
|
+
this.position();
|
|
8882
|
+
this.pushTarget();
|
|
8454
8883
|
// `<dialog>` APIs and focus management are browser-only, but the effect
|
|
8455
8884
|
// still runs during SSR, so skip the DOM work on the server.
|
|
8456
8885
|
if (!drawerRef || !this.isBrowser) {
|
|
8457
8886
|
return;
|
|
8458
8887
|
}
|
|
8888
|
+
// Push mode stays non-modal so the page behind it remains interactive.
|
|
8889
|
+
const wantModal = mode !== 'push';
|
|
8459
8890
|
if (open) {
|
|
8460
8891
|
if (!drawerRef.open) {
|
|
8461
8892
|
this.previouslyFocused = document.activeElement;
|
|
8462
|
-
|
|
8893
|
+
this.showDialog(drawerRef, wantModal);
|
|
8894
|
+
this.enter(true);
|
|
8463
8895
|
this.opened.emit();
|
|
8464
8896
|
}
|
|
8897
|
+
else if (this.isLeaving) {
|
|
8898
|
+
// Reopened mid-exit: cancel the pending close and slide back in.
|
|
8899
|
+
this.enter(true);
|
|
8900
|
+
}
|
|
8901
|
+
else if (this.shownAsModal !== wantModal) {
|
|
8902
|
+
// A modality change while open can only be honoured by reopening: the
|
|
8903
|
+
// native dialog fixes its modality at show()/showModal() time. The
|
|
8904
|
+
// panel is already on screen, so re-enter without re-sliding it.
|
|
8905
|
+
this.reopening = true;
|
|
8906
|
+
drawerRef.close();
|
|
8907
|
+
this.showDialog(drawerRef, wantModal);
|
|
8908
|
+
this.enter(false);
|
|
8909
|
+
this.reopening = false;
|
|
8910
|
+
}
|
|
8911
|
+
if (mode === 'push') {
|
|
8912
|
+
this.applyPush();
|
|
8913
|
+
this.addPushDismiss();
|
|
8914
|
+
}
|
|
8915
|
+
else {
|
|
8916
|
+
this.clearPush();
|
|
8917
|
+
this.removePushDismiss();
|
|
8918
|
+
}
|
|
8465
8919
|
}
|
|
8466
8920
|
else {
|
|
8467
8921
|
if (drawerRef.open) {
|
|
8468
|
-
|
|
8469
|
-
this.previouslyFocused?.focus?.();
|
|
8470
|
-
this.previouslyFocused = null;
|
|
8922
|
+
this.leave(drawerRef);
|
|
8471
8923
|
}
|
|
8924
|
+
this.clearPush();
|
|
8925
|
+
this.removePushDismiss();
|
|
8472
8926
|
}
|
|
8473
8927
|
});
|
|
8928
|
+
inject(DestroyRef).onDestroy(() => {
|
|
8929
|
+
this.teardownPush();
|
|
8930
|
+
this.removePushDismiss();
|
|
8931
|
+
this.cancelLeave();
|
|
8932
|
+
});
|
|
8933
|
+
}
|
|
8934
|
+
showDialog(drawerRef, modal) {
|
|
8935
|
+
if (modal) {
|
|
8936
|
+
drawerRef.showModal();
|
|
8937
|
+
}
|
|
8938
|
+
else {
|
|
8939
|
+
drawerRef.show();
|
|
8940
|
+
}
|
|
8941
|
+
this.shownAsModal = modal;
|
|
8942
|
+
}
|
|
8943
|
+
// Slides the panel in by toggling the `--entered` state. The panel rests off
|
|
8944
|
+
// its positioned edge until `--entered` is added. Driving this from a class
|
|
8945
|
+
// (rather than @starting-style / allow-discrete) keeps the enter and exit
|
|
8946
|
+
// deterministic across browsers. `animate` is false when the panel is already
|
|
8947
|
+
// on screen (a modality reopen), so it snaps into place.
|
|
8948
|
+
enter(animate) {
|
|
8949
|
+
const dialog = this.drawerEl()?.nativeElement;
|
|
8950
|
+
if (!dialog) {
|
|
8951
|
+
return;
|
|
8952
|
+
}
|
|
8953
|
+
this.cancelLeave();
|
|
8954
|
+
if (!animate || this.animation() === 'none') {
|
|
8955
|
+
dialog.classList.add('ea-drawer--entered');
|
|
8956
|
+
return;
|
|
8957
|
+
}
|
|
8958
|
+
// The dialog has just switched from display:none, so a bare reflow is not
|
|
8959
|
+
// enough to seed the transition. Paint the off-edge state, then add
|
|
8960
|
+
// `--entered` two frames later so the browser animates the slide in.
|
|
8961
|
+
dialog.classList.remove('ea-drawer--entered');
|
|
8962
|
+
requestAnimationFrame(() => {
|
|
8963
|
+
requestAnimationFrame(() => {
|
|
8964
|
+
if (this.open() && dialog.open) {
|
|
8965
|
+
dialog.classList.add('ea-drawer--entered');
|
|
8966
|
+
}
|
|
8967
|
+
});
|
|
8968
|
+
});
|
|
8969
|
+
}
|
|
8970
|
+
// Slides the panel back off its edge, then closes the dialog once the panel's
|
|
8971
|
+
// transform transition ends. Collapses to a synchronous close when nothing
|
|
8972
|
+
// animates (no animation, reduced motion, or no measurable duration).
|
|
8973
|
+
leave(dialog) {
|
|
8974
|
+
if (this.isLeaving) {
|
|
8975
|
+
return;
|
|
8976
|
+
}
|
|
8977
|
+
const panel = this.panelEl()?.nativeElement;
|
|
8978
|
+
dialog.classList.remove('ea-drawer--entered');
|
|
8979
|
+
const duration = panel ? this.transitionMs(panel) : 0;
|
|
8980
|
+
if (this.animation() === 'none' || duration <= 0 || !panel) {
|
|
8981
|
+
this.finishClose(dialog);
|
|
8982
|
+
return;
|
|
8983
|
+
}
|
|
8984
|
+
this.isLeaving = true;
|
|
8985
|
+
const settle = () => {
|
|
8986
|
+
if (!this.isLeaving) {
|
|
8987
|
+
return;
|
|
8988
|
+
}
|
|
8989
|
+
this.cancelLeave();
|
|
8990
|
+
this.finishClose(dialog);
|
|
8991
|
+
};
|
|
8992
|
+
this.leaveOnEnd = (event) => {
|
|
8993
|
+
if (event.target === panel && event.propertyName === 'transform') {
|
|
8994
|
+
settle();
|
|
8995
|
+
}
|
|
8996
|
+
};
|
|
8997
|
+
panel.addEventListener('transitionend', this.leaveOnEnd);
|
|
8998
|
+
this.leaveTimer = setTimeout(settle, duration + 50);
|
|
8999
|
+
}
|
|
9000
|
+
// Cancels a pending exit (its transitionend listener and fallback timer) so a
|
|
9001
|
+
// reopen mid-exit does not later close the drawer.
|
|
9002
|
+
cancelLeave() {
|
|
9003
|
+
this.isLeaving = false;
|
|
9004
|
+
if (this.leaveTimer !== null) {
|
|
9005
|
+
clearTimeout(this.leaveTimer);
|
|
9006
|
+
this.leaveTimer = null;
|
|
9007
|
+
}
|
|
9008
|
+
if (this.leaveOnEnd) {
|
|
9009
|
+
this.panelEl()?.nativeElement.removeEventListener('transitionend', this.leaveOnEnd);
|
|
9010
|
+
this.leaveOnEnd = null;
|
|
9011
|
+
}
|
|
9012
|
+
}
|
|
9013
|
+
finishClose(dialog) {
|
|
9014
|
+
// A reopen during the exit animation supersedes the close.
|
|
9015
|
+
if (this.open()) {
|
|
9016
|
+
return;
|
|
9017
|
+
}
|
|
9018
|
+
if (dialog.open) {
|
|
9019
|
+
dialog.close();
|
|
9020
|
+
}
|
|
9021
|
+
dialog.classList.remove('ea-drawer--entered');
|
|
9022
|
+
this.previouslyFocused?.focus?.();
|
|
9023
|
+
this.previouslyFocused = null;
|
|
9024
|
+
this.shownAsModal = null;
|
|
9025
|
+
}
|
|
9026
|
+
transitionMs(el) {
|
|
9027
|
+
const raw = getComputedStyle(el).transitionDuration.split(',')[0].trim();
|
|
9028
|
+
const value = parseFloat(raw);
|
|
9029
|
+
if (!Number.isFinite(value)) {
|
|
9030
|
+
return 0;
|
|
9031
|
+
}
|
|
9032
|
+
return raw.endsWith('ms') ? value : value * 1000;
|
|
8474
9033
|
}
|
|
8475
9034
|
handleClose() {
|
|
8476
9035
|
this.open.set(false);
|
|
8477
9036
|
this.closed.emit();
|
|
8478
9037
|
}
|
|
9038
|
+
// Non-modal push drawers do not emit `cancel`, so Escape is handled here.
|
|
9039
|
+
handleKeydown(event) {
|
|
9040
|
+
if (this.mode() === 'push' && this.closeOnEscape() && event.key === 'Escape') {
|
|
9041
|
+
this.handleClose();
|
|
9042
|
+
}
|
|
9043
|
+
}
|
|
9044
|
+
resolvePushTarget() {
|
|
9045
|
+
const target = this.pushTarget();
|
|
9046
|
+
if (target instanceof HTMLElement) {
|
|
9047
|
+
return target;
|
|
9048
|
+
}
|
|
9049
|
+
if (typeof target === 'string' && target.length > 0) {
|
|
9050
|
+
return document.querySelector(target);
|
|
9051
|
+
}
|
|
9052
|
+
return document.body;
|
|
9053
|
+
}
|
|
9054
|
+
applyPush() {
|
|
9055
|
+
const target = this.resolvePushTarget();
|
|
9056
|
+
if (!target) {
|
|
9057
|
+
return;
|
|
9058
|
+
}
|
|
9059
|
+
if (this.pushRaf !== null) {
|
|
9060
|
+
cancelAnimationFrame(this.pushRaf);
|
|
9061
|
+
}
|
|
9062
|
+
if (this.pushCleanupTimer !== null) {
|
|
9063
|
+
clearTimeout(this.pushCleanupTimer);
|
|
9064
|
+
this.pushCleanupTimer = null;
|
|
9065
|
+
}
|
|
9066
|
+
// Measure on the next frame, once the view reflects the current position and
|
|
9067
|
+
// size. Measuring synchronously reads the panel's previous dimensions, so a
|
|
9068
|
+
// `height:100%` side panel switched to `top` would push content down by the
|
|
9069
|
+
// full viewport height and shove it off screen.
|
|
9070
|
+
this.pushRaf = requestAnimationFrame(() => {
|
|
9071
|
+
this.pushRaf = null;
|
|
9072
|
+
const panel = this.panelEl()?.nativeElement;
|
|
9073
|
+
if (!panel || !this.open() || this.mode() !== 'push') {
|
|
9074
|
+
return;
|
|
9075
|
+
}
|
|
9076
|
+
const position = this.position();
|
|
9077
|
+
const size = position === 'top' || position === 'bottom'
|
|
9078
|
+
? panel.offsetHeight
|
|
9079
|
+
: panel.offsetWidth;
|
|
9080
|
+
// Match the content reflow to the panel's slide. The tokens resolve from
|
|
9081
|
+
// :root, so the duration still honours reduced motion (collapses to 0ms).
|
|
9082
|
+
const animation = this.animation();
|
|
9083
|
+
if (animation === 'none') {
|
|
9084
|
+
target.style.removeProperty('transition');
|
|
9085
|
+
}
|
|
9086
|
+
else {
|
|
9087
|
+
const ease = animation === 'linear' ? 'var(--ease-linear)' : 'var(--ease-out)';
|
|
9088
|
+
target.style.transition = `padding var(--duration-slower) ${ease}`;
|
|
9089
|
+
}
|
|
9090
|
+
// Clear every side first so a position change never stacks two offsets.
|
|
9091
|
+
this.clearPushProperties(target);
|
|
9092
|
+
target.style.setProperty(PUSH_PROPERTY[position], `${size}px`);
|
|
9093
|
+
this.pushedTarget = target;
|
|
9094
|
+
this.pushedProperty = PUSH_PROPERTY[position];
|
|
9095
|
+
});
|
|
9096
|
+
}
|
|
9097
|
+
clearPush() {
|
|
9098
|
+
if (this.pushRaf !== null) {
|
|
9099
|
+
cancelAnimationFrame(this.pushRaf);
|
|
9100
|
+
this.pushRaf = null;
|
|
9101
|
+
}
|
|
9102
|
+
const target = this.pushedTarget;
|
|
9103
|
+
this.pushedTarget = null;
|
|
9104
|
+
this.pushedProperty = null;
|
|
9105
|
+
if (!target) {
|
|
9106
|
+
return;
|
|
9107
|
+
}
|
|
9108
|
+
// Reflow the content back, then strip the leftover transition once it
|
|
9109
|
+
// settles. A timer (rather than `transitionend`) keeps cleanup deterministic
|
|
9110
|
+
// when no transition fires, e.g. under reduced motion.
|
|
9111
|
+
this.clearPushProperties(target);
|
|
9112
|
+
if (this.pushCleanupTimer !== null) {
|
|
9113
|
+
clearTimeout(this.pushCleanupTimer);
|
|
9114
|
+
}
|
|
9115
|
+
this.pushCleanupTimer = setTimeout(() => {
|
|
9116
|
+
target.style.removeProperty('transition');
|
|
9117
|
+
this.pushCleanupTimer = null;
|
|
9118
|
+
}, this.transitionMs(target));
|
|
9119
|
+
}
|
|
9120
|
+
clearPushProperties(target) {
|
|
9121
|
+
for (const property of PUSH_PROPERTIES) {
|
|
9122
|
+
target.style.removeProperty(property);
|
|
9123
|
+
}
|
|
9124
|
+
}
|
|
9125
|
+
// Push mode has no modal backdrop, so an outside-click dismissal is wired to
|
|
9126
|
+
// the document. Deferred a tick so the click that opened the drawer does not
|
|
9127
|
+
// immediately close it.
|
|
9128
|
+
addPushDismiss() {
|
|
9129
|
+
if (this.documentPointerListener || !this.isBrowser) {
|
|
9130
|
+
return;
|
|
9131
|
+
}
|
|
9132
|
+
const listener = (event) => {
|
|
9133
|
+
if (!this.closeOnBackdrop()) {
|
|
9134
|
+
return;
|
|
9135
|
+
}
|
|
9136
|
+
const panel = this.panelEl()?.nativeElement;
|
|
9137
|
+
if (panel && !panel.contains(event.target)) {
|
|
9138
|
+
this.handleClose();
|
|
9139
|
+
}
|
|
9140
|
+
};
|
|
9141
|
+
this.documentPointerListener = listener;
|
|
9142
|
+
setTimeout(() => {
|
|
9143
|
+
if (this.documentPointerListener === listener) {
|
|
9144
|
+
document.addEventListener('pointerdown', listener);
|
|
9145
|
+
}
|
|
9146
|
+
});
|
|
9147
|
+
}
|
|
9148
|
+
removePushDismiss() {
|
|
9149
|
+
if (this.documentPointerListener) {
|
|
9150
|
+
document.removeEventListener('pointerdown', this.documentPointerListener);
|
|
9151
|
+
this.documentPointerListener = null;
|
|
9152
|
+
}
|
|
9153
|
+
}
|
|
9154
|
+
// Removes the push styles immediately, for teardown where no animation is wanted.
|
|
9155
|
+
teardownPush() {
|
|
9156
|
+
if (this.pushRaf !== null) {
|
|
9157
|
+
cancelAnimationFrame(this.pushRaf);
|
|
9158
|
+
this.pushRaf = null;
|
|
9159
|
+
}
|
|
9160
|
+
if (this.pushCleanupTimer !== null) {
|
|
9161
|
+
clearTimeout(this.pushCleanupTimer);
|
|
9162
|
+
this.pushCleanupTimer = null;
|
|
9163
|
+
}
|
|
9164
|
+
const target = this.pushedTarget;
|
|
9165
|
+
this.pushedTarget = null;
|
|
9166
|
+
this.pushedProperty = null;
|
|
9167
|
+
if (target) {
|
|
9168
|
+
this.clearPushProperties(target);
|
|
9169
|
+
target.style.removeProperty('transition');
|
|
9170
|
+
}
|
|
9171
|
+
}
|
|
8479
9172
|
handleBackdropClick(event) {
|
|
8480
9173
|
if (!this.closeOnBackdrop()) {
|
|
8481
9174
|
return;
|
|
@@ -8486,35 +9179,38 @@ class DrawerComponent {
|
|
|
8486
9179
|
}
|
|
8487
9180
|
}
|
|
8488
9181
|
handleCancel(event) {
|
|
8489
|
-
|
|
8490
|
-
|
|
8491
|
-
|
|
9182
|
+
// Always cancel the native instant-close so the exit can animate; then drive
|
|
9183
|
+
// the close ourselves, or keep the drawer open when Escape is disabled.
|
|
9184
|
+
event.preventDefault();
|
|
9185
|
+
if (this.closeOnEscape()) {
|
|
9186
|
+
this.handleClose();
|
|
8492
9187
|
}
|
|
8493
|
-
this.handleClose();
|
|
8494
9188
|
}
|
|
8495
9189
|
// The native <dialog> can close on its own (e.g. Escape), so reconcile the open
|
|
8496
9190
|
// model here. When closeOnEscape is off, Chrome's repeated-Escape abuse
|
|
8497
9191
|
// mitigation can force the close past cancel's preventDefault, so re-show to
|
|
8498
9192
|
// keep the drawer open; otherwise mirror the close back into the model.
|
|
8499
9193
|
onDialogClose() {
|
|
8500
|
-
|
|
9194
|
+
const drawerRef = this.drawerEl()?.nativeElement;
|
|
9195
|
+
// Ignore the stale close event fired while reopening to switch modality.
|
|
9196
|
+
if (this.reopening || !this.open() || drawerRef?.open) {
|
|
8501
9197
|
return;
|
|
8502
9198
|
}
|
|
8503
9199
|
if (this.closeOnEscape()) {
|
|
8504
9200
|
this.open.set(false);
|
|
8505
9201
|
this.closed.emit();
|
|
8506
9202
|
}
|
|
8507
|
-
else {
|
|
8508
|
-
this.
|
|
9203
|
+
else if (drawerRef) {
|
|
9204
|
+
this.showDialog(drawerRef, this.mode() !== 'push');
|
|
8509
9205
|
}
|
|
8510
9206
|
}
|
|
8511
9207
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: DrawerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
8512
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.16", type: DrawerComponent, isStandalone: true, selector: "ea-drawer", inputs: { position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, closeOnBackdrop: { classPropertyName: "closeOnBackdrop", publicName: "closeOnBackdrop", isSignal: true, isRequired: false, transformFunction: null }, closeOnEscape: { classPropertyName: "closeOnEscape", publicName: "closeOnEscape", isSignal: true, isRequired: false, transformFunction: null }, animated: { classPropertyName: "animated", publicName: "animated", isSignal: true, isRequired: false, transformFunction: null }, showClose: { classPropertyName: "showClose", publicName: "showClose", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "openChange", opened: "opened", closed: "closed" }, viewQueries: [{ propertyName: "drawerEl", first: true, predicate: ["drawerEl"], descendants: true, isSignal: true }], ngImport: i0, template: "<dialog\n #drawerEl\n class=\"ea-drawer\"\n [class.ea-drawer--animated]=\"animated()\"\n [id]=\"id()\"\n [attr.aria-label]=\"ariaLabel() ?? null\"\n [attr.aria-labelledby]=\"!ariaLabel() ? id() + '-header' : null\"\n (click)=\"handleBackdropClick($event)\"\n (cancel)=\"handleCancel($event)\"\n (close)=\"onDialogClose()\">\n <div\n class=\"ea-drawer__panel\"\n [ngClass]=\"panelClasses()\">\n @if (showClose()) {\n <button\n type=\"button\"\n class=\"ea-drawer__close\"\n [attr.aria-label]=\"i18n.messages().drawer.close\"\n (click)=\"handleClose()\">\n <ea-icon-x />\n </button>\n }\n\n <div\n class=\"ea-drawer__header\"\n [id]=\"id() + '-header'\">\n <ng-content select=\"[slot=header]\" />\n </div>\n\n <div class=\"ea-drawer__body\">\n <ng-content />\n </div>\n\n <div class=\"ea-drawer__footer\">\n <ng-content select=\"[slot=footer]\" />\n </div>\n </div>\n</dialog>\n", styles: [".ea-drawer{position:fixed;top:0;inset-inline-end:0;bottom:0;inset-inline-start:0;width:100vw;max-width:none;height:100vh;max-height:none;padding:0;margin:0;border:none;background:transparent;overflow:hidden}.ea-drawer::backdrop{background-color:var(--color-bg-overlay)}.ea-drawer--animated[open]::backdrop{animation:ea-drawer-backdrop-in var(--duration-slow) var(--ease-out)}.ea-drawer--animated[open] .ea-drawer__panel--right{animation:ea-drawer-slide-right var(--duration-slow) var(--ease-out)}.ea-drawer--animated[open] .ea-drawer__panel--left{animation:ea-drawer-slide-left var(--duration-slow) var(--ease-out)}.ea-drawer--animated[open] .ea-drawer__panel--start{animation:ea-drawer-slide-start var(--duration-slow) var(--ease-out)}.ea-drawer--animated[open] .ea-drawer__panel--end{animation:ea-drawer-slide-end var(--duration-slow) var(--ease-out)}.ea-drawer--animated[open] .ea-drawer__panel--top{animation:ea-drawer-slide-top var(--duration-slow) var(--ease-out)}.ea-drawer--animated[open] .ea-drawer__panel--bottom{animation:ea-drawer-slide-bottom var(--duration-slow) var(--ease-out)}.ea-drawer__panel{position:absolute;display:flex;flex-direction:column;background-color:var(--ea-drawer-panel-background-color, var(--color-bg-elevated));box-shadow:var(--shadow-2xl);overflow:hidden}@media(forced-colors:active){.ea-drawer__panel{border:1px solid CanvasText}}.ea-drawer__panel--right{top:0;right:0;bottom:0;height:100%}.ea-drawer__panel--left{top:0;left:0;bottom:0;height:100%}.ea-drawer__panel--start{top:0;inset-inline-start:0;bottom:0;height:100%}.ea-drawer__panel--end{top:0;inset-inline-end:0;bottom:0;height:100%}.ea-drawer__panel--right.ea-drawer__panel--xs,.ea-drawer__panel--left.ea-drawer__panel--xs,.ea-drawer__panel--start.ea-drawer__panel--xs,.ea-drawer__panel--end.ea-drawer__panel--xs{width:16rem}.ea-drawer__panel--right.ea-drawer__panel--sm,.ea-drawer__panel--left.ea-drawer__panel--sm,.ea-drawer__panel--start.ea-drawer__panel--sm,.ea-drawer__panel--end.ea-drawer__panel--sm{width:20rem}.ea-drawer__panel--right.ea-drawer__panel--md,.ea-drawer__panel--left.ea-drawer__panel--md,.ea-drawer__panel--start.ea-drawer__panel--md,.ea-drawer__panel--end.ea-drawer__panel--md{width:28rem}.ea-drawer__panel--right.ea-drawer__panel--lg,.ea-drawer__panel--left.ea-drawer__panel--lg,.ea-drawer__panel--start.ea-drawer__panel--lg,.ea-drawer__panel--end.ea-drawer__panel--lg{width:36rem}.ea-drawer__panel--right.ea-drawer__panel--xl,.ea-drawer__panel--left.ea-drawer__panel--xl,.ea-drawer__panel--start.ea-drawer__panel--xl,.ea-drawer__panel--end.ea-drawer__panel--xl{width:44rem}.ea-drawer__panel--right.ea-drawer__panel--full,.ea-drawer__panel--left.ea-drawer__panel--full,.ea-drawer__panel--start.ea-drawer__panel--full,.ea-drawer__panel--end.ea-drawer__panel--full{width:calc(100vw - 3rem)}.ea-drawer__panel--top{top:0;inset-inline-start:0;inset-inline-end:0;width:100%}.ea-drawer__panel--top.ea-drawer__panel--xs{height:8rem}.ea-drawer__panel--top.ea-drawer__panel--sm{height:12rem}.ea-drawer__panel--top.ea-drawer__panel--md{height:20rem}.ea-drawer__panel--top.ea-drawer__panel--lg{height:28rem}.ea-drawer__panel--top.ea-drawer__panel--xl{height:36rem}.ea-drawer__panel--top.ea-drawer__panel--full{height:calc(100vh - 3rem)}.ea-drawer__panel--bottom{bottom:0;inset-inline-start:0;inset-inline-end:0;width:100%}.ea-drawer__panel--bottom.ea-drawer__panel--xs{height:8rem}.ea-drawer__panel--bottom.ea-drawer__panel--sm{height:12rem}.ea-drawer__panel--bottom.ea-drawer__panel--md{height:20rem}.ea-drawer__panel--bottom.ea-drawer__panel--lg{height:28rem}.ea-drawer__panel--bottom.ea-drawer__panel--xl{height:36rem}.ea-drawer__panel--bottom.ea-drawer__panel--full{height:calc(100vh - 3rem)}.ea-drawer__panel--top.ea-drawer__panel--sm .ea-drawer__header,.ea-drawer__panel--bottom.ea-drawer__panel--sm .ea-drawer__header{padding-top:var(--space-3)}.ea-drawer__panel--top.ea-drawer__panel--sm .ea-drawer__body,.ea-drawer__panel--bottom.ea-drawer__panel--sm .ea-drawer__body{padding-block:var(--space-2)}.ea-drawer__panel--top.ea-drawer__panel--sm .ea-drawer__footer,.ea-drawer__panel--bottom.ea-drawer__panel--sm .ea-drawer__footer{padding-bottom:var(--space-3)}.ea-drawer__panel--top.ea-drawer__panel--xs .ea-drawer__header,.ea-drawer__panel--bottom.ea-drawer__panel--xs .ea-drawer__header{padding-top:var(--space-2);padding-bottom:var(--space-1)}.ea-drawer__panel--top.ea-drawer__panel--xs .ea-drawer__body,.ea-drawer__panel--bottom.ea-drawer__panel--xs .ea-drawer__body{padding-block:var(--space-1)}.ea-drawer__panel--top.ea-drawer__panel--xs .ea-drawer__footer,.ea-drawer__panel--bottom.ea-drawer__panel--xs .ea-drawer__footer{padding-top:var(--space-1);padding-bottom:var(--space-2)}.ea-drawer__close{z-index:1;position:absolute;top:var(--space-3);inset-inline-end:var(--space-3);display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:var(--ea-icon-button-size, 1.75em);height:var(--ea-icon-button-size, 1.75em);padding:0;border:none;border-radius:var(--radius-sm);background:none;color:var(--color-text-secondary);cursor:pointer;transition:var(--transition-colors)}.ea-drawer__close>*{font-size:1.25em}.ea-drawer__close:hover{background-color:var(--color-state-hover);color:var(--color-text-primary)}.ea-drawer__close:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-drawer__close:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-drawer__close:disabled{cursor:not-allowed;opacity:.5}.ea-drawer__close svg{width:1em;height:1em}.ea-drawer__header{padding:var(--space-5) var(--space-6) var(--space-3);font-size:var(--text-h4-size);font-weight:var(--text-h4-weight);line-height:var(--text-h4-lh);color:var(--color-text-primary)}.ea-drawer__header:empty{display:none}.ea-drawer__body{flex:1;padding:var(--space-3) var(--space-6);overflow-y:auto;font-size:var(--font-size-sm);line-height:var(--line-height-normal);color:var(--color-text-secondary)}.ea-drawer__footer{display:flex;align-items:center;justify-content:flex-end;gap:var(--space-3);padding:var(--space-3) var(--space-6) var(--space-5)}.ea-drawer__footer>*{display:flex;align-items:center;gap:var(--space-3)}.ea-drawer__footer:empty{display:none}@keyframes ea-drawer-slide-right{0%{transform:translate(100%)}}@keyframes ea-drawer-slide-left{0%{transform:translate(-100%)}}@keyframes ea-drawer-slide-start{0%{transform:translate(calc(-100% * var(--ea-rtl-sign)))}}@keyframes ea-drawer-slide-end{0%{transform:translate(calc(100% * var(--ea-rtl-sign)))}}@keyframes ea-drawer-slide-top{0%{transform:translateY(-100%)}}@keyframes ea-drawer-slide-bottom{0%{transform:translateY(100%)}}@keyframes ea-drawer-backdrop-in{0%{opacity:0}}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: XIconComponent, selector: "ea-icon-x" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
9208
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.16", type: DrawerComponent, isStandalone: true, selector: "ea-drawer", inputs: { position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, pushTarget: { classPropertyName: "pushTarget", publicName: "pushTarget", isSignal: true, isRequired: false, transformFunction: null }, closeOnBackdrop: { classPropertyName: "closeOnBackdrop", publicName: "closeOnBackdrop", isSignal: true, isRequired: false, transformFunction: null }, closeOnEscape: { classPropertyName: "closeOnEscape", publicName: "closeOnEscape", isSignal: true, isRequired: false, transformFunction: null }, animation: { classPropertyName: "animation", publicName: "animation", isSignal: true, isRequired: false, transformFunction: null }, showClose: { classPropertyName: "showClose", publicName: "showClose", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "openChange", opened: "opened", closed: "closed" }, viewQueries: [{ propertyName: "drawerEl", first: true, predicate: ["drawerEl"], descendants: true, isSignal: true }, { propertyName: "panelEl", first: true, predicate: ["panelEl"], descendants: true, isSignal: true }], ngImport: i0, template: "<dialog\n #drawerEl\n class=\"ea-drawer\"\n [class.ea-drawer--animated]=\"animation() !== 'none'\"\n [class.ea-drawer--linear]=\"animation() === 'linear'\"\n [class.ea-drawer--push]=\"mode() === 'push'\"\n [id]=\"id()\"\n [attr.aria-label]=\"ariaLabel() ?? null\"\n [attr.aria-labelledby]=\"!ariaLabel() ? id() + '-header' : null\"\n (click)=\"handleBackdropClick($event)\"\n (cancel)=\"handleCancel($event)\"\n (keydown)=\"handleKeydown($event)\"\n (close)=\"onDialogClose()\">\n <div\n #panelEl\n class=\"ea-drawer__panel\"\n [ngClass]=\"panelClasses()\">\n @if (showClose()) {\n <button\n type=\"button\"\n class=\"ea-drawer__close\"\n [attr.aria-label]=\"i18n.messages().drawer.close\"\n (click)=\"handleClose()\">\n <ea-icon-x />\n </button>\n }\n\n <div\n class=\"ea-drawer__header\"\n [id]=\"id() + '-header'\">\n <ng-content select=\"[slot=header]\" />\n </div>\n\n <div class=\"ea-drawer__body\">\n <ng-content />\n </div>\n\n <div class=\"ea-drawer__footer\">\n <ng-content select=\"[slot=footer]\" />\n </div>\n </div>\n</dialog>\n", styles: [".ea-drawer{position:fixed;top:0;inset-inline-end:0;bottom:0;inset-inline-start:0;width:100vw;max-width:none;height:100vh;max-height:none;padding:0;margin:0;border:none;background:transparent;overflow:hidden}.ea-drawer::backdrop{background-color:var(--color-bg-overlay)}.ea-drawer--push{z-index:var(--z-index-modal);pointer-events:none}.ea-drawer--push::backdrop{display:none}.ea-drawer--push .ea-drawer__panel{pointer-events:auto}.ea-drawer--push .ea-drawer__panel--left,.ea-drawer--push .ea-drawer__panel--right,.ea-drawer--push .ea-drawer__panel--start,.ea-drawer--push .ea-drawer__panel--end{max-inline-size:calc(100vw - var(--ea-drawer-push-min, 8rem))}.ea-drawer--push .ea-drawer__panel--top,.ea-drawer--push .ea-drawer__panel--bottom{max-block-size:calc(100vh - var(--ea-drawer-push-min, 8rem))}.ea-drawer--linear{--ea-drawer-ease: var(--ease-linear)}.ea-drawer--animated::backdrop{opacity:0;transition:opacity var(--duration-slower) var(--ea-drawer-ease, var(--ease-out))}.ea-drawer--animated .ea-drawer__panel{transition:transform var(--duration-slower) var(--ea-drawer-ease, var(--ease-out))}.ea-drawer .ea-drawer__panel--right{transform:translate(100%)}.ea-drawer .ea-drawer__panel--left{transform:translate(-100%)}.ea-drawer .ea-drawer__panel--start{transform:translate(calc(-100% * var(--ea-rtl-sign)))}.ea-drawer .ea-drawer__panel--end{transform:translate(calc(100% * var(--ea-rtl-sign)))}.ea-drawer .ea-drawer__panel--top{transform:translateY(-100%)}.ea-drawer .ea-drawer__panel--bottom{transform:translateY(100%)}.ea-drawer--entered::backdrop{opacity:1}.ea-drawer--entered .ea-drawer__panel{transform:none}.ea-drawer__panel{position:absolute;display:flex;flex-direction:column;background-color:var(--ea-drawer-panel-background-color, var(--color-bg-elevated));box-shadow:var(--shadow-2xl);overflow:hidden}@media(forced-colors:active){.ea-drawer__panel{border:1px solid CanvasText}}.ea-drawer__panel--right{top:0;right:0;bottom:0;height:100%}.ea-drawer__panel--left{top:0;left:0;bottom:0;height:100%}.ea-drawer__panel--start{top:0;inset-inline-start:0;bottom:0;height:100%}.ea-drawer__panel--end{top:0;inset-inline-end:0;bottom:0;height:100%}.ea-drawer__panel--right.ea-drawer__panel--xs,.ea-drawer__panel--left.ea-drawer__panel--xs,.ea-drawer__panel--start.ea-drawer__panel--xs,.ea-drawer__panel--end.ea-drawer__panel--xs{width:16rem}.ea-drawer__panel--right.ea-drawer__panel--sm,.ea-drawer__panel--left.ea-drawer__panel--sm,.ea-drawer__panel--start.ea-drawer__panel--sm,.ea-drawer__panel--end.ea-drawer__panel--sm{width:20rem}.ea-drawer__panel--right.ea-drawer__panel--md,.ea-drawer__panel--left.ea-drawer__panel--md,.ea-drawer__panel--start.ea-drawer__panel--md,.ea-drawer__panel--end.ea-drawer__panel--md{width:28rem}.ea-drawer__panel--right.ea-drawer__panel--lg,.ea-drawer__panel--left.ea-drawer__panel--lg,.ea-drawer__panel--start.ea-drawer__panel--lg,.ea-drawer__panel--end.ea-drawer__panel--lg{width:36rem}.ea-drawer__panel--right.ea-drawer__panel--xl,.ea-drawer__panel--left.ea-drawer__panel--xl,.ea-drawer__panel--start.ea-drawer__panel--xl,.ea-drawer__panel--end.ea-drawer__panel--xl{width:44rem}.ea-drawer__panel--right.ea-drawer__panel--full,.ea-drawer__panel--left.ea-drawer__panel--full,.ea-drawer__panel--start.ea-drawer__panel--full,.ea-drawer__panel--end.ea-drawer__panel--full{width:calc(100vw - 3rem)}.ea-drawer__panel--top{top:0;inset-inline-start:0;inset-inline-end:0;width:100%}.ea-drawer__panel--top.ea-drawer__panel--xs{height:8rem}.ea-drawer__panel--top.ea-drawer__panel--sm{height:12rem}.ea-drawer__panel--top.ea-drawer__panel--md{height:20rem}.ea-drawer__panel--top.ea-drawer__panel--lg{height:28rem}.ea-drawer__panel--top.ea-drawer__panel--xl{height:36rem}.ea-drawer__panel--top.ea-drawer__panel--full{height:calc(100vh - 3rem)}.ea-drawer__panel--bottom{bottom:0;inset-inline-start:0;inset-inline-end:0;width:100%}.ea-drawer__panel--bottom.ea-drawer__panel--xs{height:8rem}.ea-drawer__panel--bottom.ea-drawer__panel--sm{height:12rem}.ea-drawer__panel--bottom.ea-drawer__panel--md{height:20rem}.ea-drawer__panel--bottom.ea-drawer__panel--lg{height:28rem}.ea-drawer__panel--bottom.ea-drawer__panel--xl{height:36rem}.ea-drawer__panel--bottom.ea-drawer__panel--full{height:calc(100vh - 3rem)}.ea-drawer__panel--top.ea-drawer__panel--sm .ea-drawer__header,.ea-drawer__panel--bottom.ea-drawer__panel--sm .ea-drawer__header{padding-top:var(--space-3)}.ea-drawer__panel--top.ea-drawer__panel--sm .ea-drawer__body,.ea-drawer__panel--bottom.ea-drawer__panel--sm .ea-drawer__body{padding-block:var(--space-2)}.ea-drawer__panel--top.ea-drawer__panel--sm .ea-drawer__footer,.ea-drawer__panel--bottom.ea-drawer__panel--sm .ea-drawer__footer{padding-bottom:var(--space-3)}.ea-drawer__panel--top.ea-drawer__panel--xs .ea-drawer__header,.ea-drawer__panel--bottom.ea-drawer__panel--xs .ea-drawer__header{padding-top:var(--space-2);padding-bottom:var(--space-1)}.ea-drawer__panel--top.ea-drawer__panel--xs .ea-drawer__body,.ea-drawer__panel--bottom.ea-drawer__panel--xs .ea-drawer__body{padding-block:var(--space-1)}.ea-drawer__panel--top.ea-drawer__panel--xs .ea-drawer__footer,.ea-drawer__panel--bottom.ea-drawer__panel--xs .ea-drawer__footer{padding-top:var(--space-1);padding-bottom:var(--space-2)}.ea-drawer__close{z-index:1;position:absolute;top:var(--space-3);inset-inline-end:var(--space-3);display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:var(--ea-icon-button-size, 1.75em);height:var(--ea-icon-button-size, 1.75em);padding:0;border:none;border-radius:var(--radius-sm);background:none;color:var(--color-text-secondary);cursor:pointer;transition:var(--transition-colors)}.ea-drawer__close>*{font-size:1.25em}.ea-drawer__close:hover{background-color:var(--color-state-hover);color:var(--color-text-primary)}.ea-drawer__close:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-drawer__close:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-drawer__close:disabled{cursor:not-allowed;opacity:.5}.ea-drawer__close svg{width:1em;height:1em}.ea-drawer__header{padding:var(--space-5) var(--space-6) var(--space-3);font-size:var(--text-h4-size);font-weight:var(--text-h4-weight);line-height:var(--text-h4-lh);color:var(--color-text-primary)}.ea-drawer__header:empty{display:none}.ea-drawer__body{flex:1;padding:var(--space-3) var(--space-6);overflow-y:auto;font-size:var(--font-size-sm);line-height:var(--line-height-normal);color:var(--color-text-secondary)}.ea-drawer__footer{display:flex;align-items:center;justify-content:flex-end;gap:var(--space-3);padding:var(--space-3) var(--space-6) var(--space-5)}.ea-drawer__footer>*{display:flex;align-items:center;gap:var(--space-3)}.ea-drawer__footer:empty{display:none}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: XIconComponent, selector: "ea-icon-x" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
8513
9209
|
}
|
|
8514
9210
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: DrawerComponent, decorators: [{
|
|
8515
9211
|
type: Component,
|
|
8516
|
-
args: [{ selector: 'ea-drawer', imports: [NgClass, XIconComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<dialog\n #drawerEl\n class=\"ea-drawer\"\n [class.ea-drawer--animated]=\"
|
|
8517
|
-
}], ctorParameters: () => [], propDecorators: { drawerEl: [{ type: i0.ViewChild, args: ['drawerEl', { isSignal: true }] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }],
|
|
9212
|
+
args: [{ selector: 'ea-drawer', imports: [NgClass, XIconComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<dialog\n #drawerEl\n class=\"ea-drawer\"\n [class.ea-drawer--animated]=\"animation() !== 'none'\"\n [class.ea-drawer--linear]=\"animation() === 'linear'\"\n [class.ea-drawer--push]=\"mode() === 'push'\"\n [id]=\"id()\"\n [attr.aria-label]=\"ariaLabel() ?? null\"\n [attr.aria-labelledby]=\"!ariaLabel() ? id() + '-header' : null\"\n (click)=\"handleBackdropClick($event)\"\n (cancel)=\"handleCancel($event)\"\n (keydown)=\"handleKeydown($event)\"\n (close)=\"onDialogClose()\">\n <div\n #panelEl\n class=\"ea-drawer__panel\"\n [ngClass]=\"panelClasses()\">\n @if (showClose()) {\n <button\n type=\"button\"\n class=\"ea-drawer__close\"\n [attr.aria-label]=\"i18n.messages().drawer.close\"\n (click)=\"handleClose()\">\n <ea-icon-x />\n </button>\n }\n\n <div\n class=\"ea-drawer__header\"\n [id]=\"id() + '-header'\">\n <ng-content select=\"[slot=header]\" />\n </div>\n\n <div class=\"ea-drawer__body\">\n <ng-content />\n </div>\n\n <div class=\"ea-drawer__footer\">\n <ng-content select=\"[slot=footer]\" />\n </div>\n </div>\n</dialog>\n", styles: [".ea-drawer{position:fixed;top:0;inset-inline-end:0;bottom:0;inset-inline-start:0;width:100vw;max-width:none;height:100vh;max-height:none;padding:0;margin:0;border:none;background:transparent;overflow:hidden}.ea-drawer::backdrop{background-color:var(--color-bg-overlay)}.ea-drawer--push{z-index:var(--z-index-modal);pointer-events:none}.ea-drawer--push::backdrop{display:none}.ea-drawer--push .ea-drawer__panel{pointer-events:auto}.ea-drawer--push .ea-drawer__panel--left,.ea-drawer--push .ea-drawer__panel--right,.ea-drawer--push .ea-drawer__panel--start,.ea-drawer--push .ea-drawer__panel--end{max-inline-size:calc(100vw - var(--ea-drawer-push-min, 8rem))}.ea-drawer--push .ea-drawer__panel--top,.ea-drawer--push .ea-drawer__panel--bottom{max-block-size:calc(100vh - var(--ea-drawer-push-min, 8rem))}.ea-drawer--linear{--ea-drawer-ease: var(--ease-linear)}.ea-drawer--animated::backdrop{opacity:0;transition:opacity var(--duration-slower) var(--ea-drawer-ease, var(--ease-out))}.ea-drawer--animated .ea-drawer__panel{transition:transform var(--duration-slower) var(--ea-drawer-ease, var(--ease-out))}.ea-drawer .ea-drawer__panel--right{transform:translate(100%)}.ea-drawer .ea-drawer__panel--left{transform:translate(-100%)}.ea-drawer .ea-drawer__panel--start{transform:translate(calc(-100% * var(--ea-rtl-sign)))}.ea-drawer .ea-drawer__panel--end{transform:translate(calc(100% * var(--ea-rtl-sign)))}.ea-drawer .ea-drawer__panel--top{transform:translateY(-100%)}.ea-drawer .ea-drawer__panel--bottom{transform:translateY(100%)}.ea-drawer--entered::backdrop{opacity:1}.ea-drawer--entered .ea-drawer__panel{transform:none}.ea-drawer__panel{position:absolute;display:flex;flex-direction:column;background-color:var(--ea-drawer-panel-background-color, var(--color-bg-elevated));box-shadow:var(--shadow-2xl);overflow:hidden}@media(forced-colors:active){.ea-drawer__panel{border:1px solid CanvasText}}.ea-drawer__panel--right{top:0;right:0;bottom:0;height:100%}.ea-drawer__panel--left{top:0;left:0;bottom:0;height:100%}.ea-drawer__panel--start{top:0;inset-inline-start:0;bottom:0;height:100%}.ea-drawer__panel--end{top:0;inset-inline-end:0;bottom:0;height:100%}.ea-drawer__panel--right.ea-drawer__panel--xs,.ea-drawer__panel--left.ea-drawer__panel--xs,.ea-drawer__panel--start.ea-drawer__panel--xs,.ea-drawer__panel--end.ea-drawer__panel--xs{width:16rem}.ea-drawer__panel--right.ea-drawer__panel--sm,.ea-drawer__panel--left.ea-drawer__panel--sm,.ea-drawer__panel--start.ea-drawer__panel--sm,.ea-drawer__panel--end.ea-drawer__panel--sm{width:20rem}.ea-drawer__panel--right.ea-drawer__panel--md,.ea-drawer__panel--left.ea-drawer__panel--md,.ea-drawer__panel--start.ea-drawer__panel--md,.ea-drawer__panel--end.ea-drawer__panel--md{width:28rem}.ea-drawer__panel--right.ea-drawer__panel--lg,.ea-drawer__panel--left.ea-drawer__panel--lg,.ea-drawer__panel--start.ea-drawer__panel--lg,.ea-drawer__panel--end.ea-drawer__panel--lg{width:36rem}.ea-drawer__panel--right.ea-drawer__panel--xl,.ea-drawer__panel--left.ea-drawer__panel--xl,.ea-drawer__panel--start.ea-drawer__panel--xl,.ea-drawer__panel--end.ea-drawer__panel--xl{width:44rem}.ea-drawer__panel--right.ea-drawer__panel--full,.ea-drawer__panel--left.ea-drawer__panel--full,.ea-drawer__panel--start.ea-drawer__panel--full,.ea-drawer__panel--end.ea-drawer__panel--full{width:calc(100vw - 3rem)}.ea-drawer__panel--top{top:0;inset-inline-start:0;inset-inline-end:0;width:100%}.ea-drawer__panel--top.ea-drawer__panel--xs{height:8rem}.ea-drawer__panel--top.ea-drawer__panel--sm{height:12rem}.ea-drawer__panel--top.ea-drawer__panel--md{height:20rem}.ea-drawer__panel--top.ea-drawer__panel--lg{height:28rem}.ea-drawer__panel--top.ea-drawer__panel--xl{height:36rem}.ea-drawer__panel--top.ea-drawer__panel--full{height:calc(100vh - 3rem)}.ea-drawer__panel--bottom{bottom:0;inset-inline-start:0;inset-inline-end:0;width:100%}.ea-drawer__panel--bottom.ea-drawer__panel--xs{height:8rem}.ea-drawer__panel--bottom.ea-drawer__panel--sm{height:12rem}.ea-drawer__panel--bottom.ea-drawer__panel--md{height:20rem}.ea-drawer__panel--bottom.ea-drawer__panel--lg{height:28rem}.ea-drawer__panel--bottom.ea-drawer__panel--xl{height:36rem}.ea-drawer__panel--bottom.ea-drawer__panel--full{height:calc(100vh - 3rem)}.ea-drawer__panel--top.ea-drawer__panel--sm .ea-drawer__header,.ea-drawer__panel--bottom.ea-drawer__panel--sm .ea-drawer__header{padding-top:var(--space-3)}.ea-drawer__panel--top.ea-drawer__panel--sm .ea-drawer__body,.ea-drawer__panel--bottom.ea-drawer__panel--sm .ea-drawer__body{padding-block:var(--space-2)}.ea-drawer__panel--top.ea-drawer__panel--sm .ea-drawer__footer,.ea-drawer__panel--bottom.ea-drawer__panel--sm .ea-drawer__footer{padding-bottom:var(--space-3)}.ea-drawer__panel--top.ea-drawer__panel--xs .ea-drawer__header,.ea-drawer__panel--bottom.ea-drawer__panel--xs .ea-drawer__header{padding-top:var(--space-2);padding-bottom:var(--space-1)}.ea-drawer__panel--top.ea-drawer__panel--xs .ea-drawer__body,.ea-drawer__panel--bottom.ea-drawer__panel--xs .ea-drawer__body{padding-block:var(--space-1)}.ea-drawer__panel--top.ea-drawer__panel--xs .ea-drawer__footer,.ea-drawer__panel--bottom.ea-drawer__panel--xs .ea-drawer__footer{padding-top:var(--space-1);padding-bottom:var(--space-2)}.ea-drawer__close{z-index:1;position:absolute;top:var(--space-3);inset-inline-end:var(--space-3);display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:var(--ea-icon-button-size, 1.75em);height:var(--ea-icon-button-size, 1.75em);padding:0;border:none;border-radius:var(--radius-sm);background:none;color:var(--color-text-secondary);cursor:pointer;transition:var(--transition-colors)}.ea-drawer__close>*{font-size:1.25em}.ea-drawer__close:hover{background-color:var(--color-state-hover);color:var(--color-text-primary)}.ea-drawer__close:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-drawer__close:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-drawer__close:disabled{cursor:not-allowed;opacity:.5}.ea-drawer__close svg{width:1em;height:1em}.ea-drawer__header{padding:var(--space-5) var(--space-6) var(--space-3);font-size:var(--text-h4-size);font-weight:var(--text-h4-weight);line-height:var(--text-h4-lh);color:var(--color-text-primary)}.ea-drawer__header:empty{display:none}.ea-drawer__body{flex:1;padding:var(--space-3) var(--space-6);overflow-y:auto;font-size:var(--font-size-sm);line-height:var(--line-height-normal);color:var(--color-text-secondary)}.ea-drawer__footer{display:flex;align-items:center;justify-content:flex-end;gap:var(--space-3);padding:var(--space-3) var(--space-6) var(--space-5)}.ea-drawer__footer>*{display:flex;align-items:center;gap:var(--space-3)}.ea-drawer__footer:empty{display:none}\n"] }]
|
|
9213
|
+
}], ctorParameters: () => [], propDecorators: { drawerEl: [{ type: i0.ViewChild, args: ['drawerEl', { isSignal: true }] }], panelEl: [{ type: i0.ViewChild, args: ['panelEl', { isSignal: true }] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], pushTarget: [{ type: i0.Input, args: [{ isSignal: true, alias: "pushTarget", required: false }] }], closeOnBackdrop: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnBackdrop", required: false }] }], closeOnEscape: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnEscape", required: false }] }], animation: [{ type: i0.Input, args: [{ isSignal: true, alias: "animation", required: false }] }], showClose: [{ type: i0.Input, args: [{ isSignal: true, alias: "showClose", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }, { type: i0.Output, args: ["openChange"] }], opened: [{ type: i0.Output, args: ["opened"] }], closed: [{ type: i0.Output, args: ["closed"] }] } });
|
|
8518
9214
|
|
|
8519
9215
|
/**
|
|
8520
9216
|
* Single-select dropdown with a custom popup list. Supports keyboard
|
|
@@ -11026,6 +11722,59 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
|
|
|
11026
11722
|
], template: "<div class=\"ea-multi-select-field\">\n @if (label(); as labelText) {\n <ea-field-label\n [text]=\"labelText\"\n [forId]=\"id()\"\n [labelId]=\"id() + '-label'\"\n [required]=\"required()\" />\n }\n\n <div class=\"ea-multi-select\">\n <div\n class=\"ea-multi-select__trigger-wrapper\"\n [ngClass]=\"wrapperClasses()\">\n <div\n #triggerEl\n class=\"ea-multi-select__trigger\"\n [ngClass]=\"triggerClasses()\"\n [id]=\"id()\"\n role=\"combobox\"\n [attr.tabindex]=\"isDisabled() ? -1 : 0\"\n [attr.aria-labelledby]=\"label() ? id() + '-label' : null\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n [attr.aria-required]=\"required() || null\"\n [attr.aria-invalid]=\"hasError() || null\"\n [attr.aria-describedby]=\"\n showError() ? id() + '-error' : showHint() ? id() + '-hint' : null\n \"\n (click)=\"toggle()\"\n (keydown)=\"handleTriggerKeydown($event)\">\n <span class=\"ea-multi-select__trigger-content\">\n @if (!hasValue()) {\n <span class=\"ea-multi-select__trigger-placeholder\">\n <bdi>{{ resolvedPlaceholder() }}</bdi>\n </span>\n } @else {\n @for (opt of visibleChips(); track opt.value) {\n <ea-tag\n [size]=\"size()\"\n variant=\"default\"\n [removable]=\"!isDisabled() && !readonly()\"\n [removeLabel]=\"i18n.messages().multiSelect.removeOption(opt.label)\"\n (removed)=\"removeChip(opt)\">\n <span>{{ opt.label }}</span>\n </ea-tag>\n }\n @if (hiddenChipCount() > 0) {\n <span class=\"ea-multi-select__more\">+{{ hiddenChipCount() }}</span>\n }\n }\n </span>\n </div>\n @if (hasValue() && !isDisabled() && !readonly()) {\n <button\n type=\"button\"\n class=\"ea-multi-select__clear\"\n [attr.aria-label]=\"i18n.messages().multiSelect.clearAll\"\n (click)=\"clear($event)\">\n <ea-icon-x\n class=\"ea-multi-select__clear-icon\"\n aria-hidden=\"true\" />\n </button>\n }\n <ea-icon-chevron-down\n class=\"ea-multi-select__trigger-icon\"\n aria-hidden=\"true\"\n (click)=\"toggle()\" />\n </div>\n\n <ea-popover\n [anchor]=\"triggerEl\"\n [open]=\"isOpen()\"\n placement=\"bottom-start\"\n role=\"listbox\"\n [matchAnchorWidth]=\"true\"\n [closeOnEscape]=\"false\"\n scrollBehavior=\"reposition\"\n (closeRequested)=\"onPopoverCloseRequested()\">\n <div\n class=\"ea-multi-select__popover\"\n [ngClass]=\"menuClasses()\">\n @if (searchable()) {\n <div class=\"ea-multi-select__search\">\n <ea-icon-search\n class=\"ea-multi-select__search-icon\"\n aria-hidden=\"true\" />\n <input\n #searchEl\n type=\"text\"\n dir=\"auto\"\n class=\"ea-multi-select__search-input\"\n autocomplete=\"off\"\n [placeholder]=\"resolvedSearchPlaceholder()\"\n [value]=\"searchTerm()\"\n (input)=\"onSearchInput($event)\"\n (keydown)=\"handlePopoverKeydown($event)\" />\n </div>\n }\n\n @if (selectAll() && filteredOptions().length > 0) {\n <div\n class=\"ea-multi-select__option ea-multi-select__option--select-all\"\n (click)=\"toggleSelectAll()\">\n <ea-checkbox\n size=\"sm\"\n [checked]=\"selectAllState() === 'all'\"\n [indeterminate]=\"selectAllState() === 'some'\"\n [ariaLabel]=\"i18n.messages().multiSelect.selectAll\" />\n <span class=\"ea-multi-select__option-label\">\n {{ i18n.messages().multiSelect.selectAll }}\n </span>\n </div>\n }\n\n <ul\n class=\"ea-multi-select__list\"\n role=\"presentation\">\n @for (opt of filteredOptions(); track opt.value; let i = $index) {\n <li\n class=\"ea-multi-select__option\"\n [class.ea-multi-select__option--focused]=\"focusedIndex() === i\"\n [class.ea-multi-select__option--disabled]=\"opt.disabled\"\n role=\"option\"\n tabindex=\"-1\"\n [attr.aria-selected]=\"selectedSet().has(opt.value)\"\n [attr.aria-disabled]=\"opt.disabled || null\"\n (click)=\"toggleOption(opt)\"\n (keydown)=\"handlePopoverKeydown($event)\">\n <ea-checkbox\n size=\"sm\"\n [checked]=\"selectedSet().has(opt.value)\"\n [disabled]=\"!!opt.disabled\"\n [ariaLabel]=\"opt.label\" />\n <span class=\"ea-multi-select__option-label\">\n {{ opt.label }}\n </span>\n </li>\n } @empty {\n <li class=\"ea-multi-select__empty\">\n {{ i18n.messages().multiSelect.searchEmpty }}\n </li>\n }\n </ul>\n </div>\n </ea-popover>\n </div>\n\n <ea-field-messages\n [id]=\"id()\"\n [error]=\"errorText()\"\n [hint]=\"showHint() ? hint() : null\" />\n</div>\n", styles: [".ea-multi-select-field{display:flex;flex-direction:column;gap:var(--space-1-5)}.ea-multi-select{position:relative}.ea-multi-select__trigger-wrapper{position:relative;display:flex;align-items:center;gap:.5em;width:100%;min-height:2.5em;padding:.375em .75em;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-md);background-color:var(--color-bg-base);color:var(--color-text-primary);transition:var(--transition-colors),var(--transition-shadow)}.ea-multi-select__trigger-wrapper--xs{font-size:var(--font-size-xs)}.ea-multi-select__trigger-wrapper--sm{font-size:var(--font-size-sm)}.ea-multi-select__trigger-wrapper--md{font-size:var(--font-size-md)}.ea-multi-select__trigger-wrapper--lg{font-size:var(--font-size-lg)}.ea-multi-select__trigger-wrapper--xl{font-size:var(--font-size-xl)}.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger:focus-visible){box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger:focus-visible){outline:2px solid Highlight;outline-offset:2px}}.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--open){border-color:var(--color-border-focus);box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--open){outline:2px solid Highlight;outline-offset:2px}}.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--error){border-color:var(--color-error-default)}.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--error.ea-multi-select__trigger--open){box-shadow:var(--shadow-focus-ring-error)}@media(forced-colors:active){.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--error.ea-multi-select__trigger--open){outline:2px solid Highlight;outline-offset:2px}}.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--disabled){background-color:var(--color-bg-muted);opacity:.6;cursor:not-allowed}.ea-multi-select__trigger{display:flex;align-items:center;flex:1;min-width:0;text-align:start;font-family:var(--font-family-sans);cursor:pointer}.ea-multi-select__trigger:focus-visible{outline:none}.ea-multi-select__trigger--disabled{cursor:not-allowed}.ea-multi-select__trigger-content{display:flex;flex-wrap:nowrap;align-items:center;gap:var(--space-1);flex:1;min-width:0;overflow-x:auto;scrollbar-width:thin}.ea-multi-select__trigger-content ea-tag{flex-shrink:0}.ea-multi-select__trigger-placeholder{color:var(--color-text-tertiary)}.ea-multi-select__trigger-icon{flex-shrink:0;width:1em;height:1em;color:var(--color-text-secondary);cursor:pointer;transition:var(--transition-transform)}.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--open) .ea-multi-select__trigger-icon{transform:rotate(180deg)}.ea-multi-select__more{display:inline-flex;flex-shrink:0;align-items:center;padding:0 var(--space-1-5);border-radius:var(--radius-lg);background-color:var(--color-bg-muted);font-size:.85em;font-weight:var(--font-weight-medium);color:var(--color-text-secondary)}.ea-multi-select__clear{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:var(--ea-icon-button-size, 1.75em);height:var(--ea-icon-button-size, 1.75em);padding:0;border:none;border-radius:var(--radius-sm);background:none;color:var(--color-text-secondary);cursor:pointer;transition:var(--transition-colors)}.ea-multi-select__clear>*{font-size:1.25em}.ea-multi-select__clear:hover{background-color:var(--color-state-hover);color:var(--color-text-primary)}.ea-multi-select__clear:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-multi-select__clear:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-multi-select__clear:disabled{cursor:not-allowed;opacity:.5}.ea-multi-select__clear{flex-shrink:0}.ea-multi-select__clear-icon{width:1em;height:1em}.ea-multi-select__popover{display:flex;flex-direction:column;overflow:hidden;max-height:20rem;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);background-color:var(--ea-multi-select-popover-background-color, var(--color-bg-elevated))}@media(forced-colors:active){.ea-multi-select__popover{border:1px solid CanvasText}}.ea-multi-select__popover--xs{font-size:var(--font-size-xs)}.ea-multi-select__popover--sm{font-size:var(--font-size-sm)}.ea-multi-select__popover--md{font-size:var(--font-size-md)}.ea-multi-select__popover--lg{font-size:var(--font-size-lg)}.ea-multi-select__popover--xl{font-size:var(--font-size-xl)}.ea-multi-select__search{display:flex;align-items:center;gap:var(--space-2);flex-shrink:0;padding:var(--space-2) var(--space-3);border-bottom:var(--border-width-thin) solid var(--color-border-default)}.ea-multi-select__search-icon{flex-shrink:0;width:1em;height:1em;color:var(--color-text-tertiary)}.ea-multi-select__search-input{flex:1;min-width:0;padding:0;border:none;background:none;font-family:var(--font-family-sans);font-size:inherit;color:var(--color-text-primary)}.ea-multi-select__search-input::placeholder{color:var(--color-text-tertiary);opacity:1}.ea-multi-select__search-input:focus{outline:none}.ea-multi-select__list{overflow-y:auto;overscroll-behavior:none;flex:1;margin:0;padding:var(--space-1) 0;list-style:none}.ea-multi-select__option{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-1-5) var(--space-3);font-size:inherit;font-family:var(--font-family-sans);color:var(--color-text-primary);cursor:pointer;transition:var(--transition-colors)}.ea-multi-select__option--focused{background-color:var(--color-state-hover)}@media(forced-colors:active){.ea-multi-select__option--focused{background-color:Highlight;color:HighlightText}}.ea-multi-select__option--disabled{color:var(--color-text-disabled);cursor:not-allowed}@media(forced-colors:active){.ea-multi-select__option--disabled{color:GrayText}}.ea-multi-select__option--select-all{border-bottom:var(--border-width-thin) solid var(--color-border-default);font-weight:var(--font-weight-medium)}.ea-multi-select__option:hover:not(.ea-multi-select__option--disabled){background-color:var(--color-state-hover)}@media(forced-colors:active){.ea-multi-select__option:hover:not(.ea-multi-select__option--disabled){background-color:Highlight;color:HighlightText}}.ea-multi-select__option ea-checkbox{pointer-events:none;display:inline-flex;align-items:center;line-height:1}.ea-multi-select__option-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ea-multi-select__empty{padding:var(--space-3);font-size:inherit;text-align:center;color:var(--color-text-tertiary);list-style:none}\n"] }]
|
|
11027
11723
|
}], propDecorators: { triggerEl: [{ type: i0.ViewChild, args: ['triggerEl', { isSignal: true }] }], searchEl: [{ type: i0.ViewChild, args: ['searchEl', { isSignal: true }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], searchPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchPlaceholder", required: false }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], hint: [{ type: i0.Input, args: [{ isSignal: true, alias: "hint", required: false }] }], errorMsg: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorMsg", required: false }] }], errorMessages: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorMessages", required: false }] }], searchable: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchable", required: false }] }], selectAll: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectAll", required: false }] }], maxVisibleChips: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxVisibleChips", required: false }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], changed: [{ type: i0.Output, args: ["changed"] }] } });
|
|
11028
11724
|
|
|
11725
|
+
/** Whether the runtime's `Intl` actually has number data for `locale` rather
|
|
11726
|
+
* than silently negotiating down to a default (as reduced-ICU builds do). */
|
|
11727
|
+
function intlLocalizes(locale) {
|
|
11728
|
+
try {
|
|
11729
|
+
const resolved = new Intl.NumberFormat(locale).resolvedOptions().locale;
|
|
11730
|
+
return resolved.split('-')[0] === locale.split('-')[0];
|
|
11731
|
+
}
|
|
11732
|
+
catch {
|
|
11733
|
+
return false;
|
|
11734
|
+
}
|
|
11735
|
+
}
|
|
11736
|
+
function groupInteger(digits, sep, grouping) {
|
|
11737
|
+
const primary = grouping[0] ?? 3;
|
|
11738
|
+
const secondary = grouping[1] ?? primary;
|
|
11739
|
+
if (digits.length <= primary) {
|
|
11740
|
+
return digits;
|
|
11741
|
+
}
|
|
11742
|
+
let result = digits.slice(digits.length - primary);
|
|
11743
|
+
let rest = digits.slice(0, digits.length - primary);
|
|
11744
|
+
while (rest.length > 0) {
|
|
11745
|
+
const take = Math.min(secondary, rest.length);
|
|
11746
|
+
result = `${rest.slice(rest.length - take)}${sep}${result}`;
|
|
11747
|
+
rest = rest.slice(0, rest.length - take);
|
|
11748
|
+
}
|
|
11749
|
+
return result;
|
|
11750
|
+
}
|
|
11751
|
+
/**
|
|
11752
|
+
* Group-formats a number for the active locale. Uses the runtime's `Intl` when
|
|
11753
|
+
* it actually has data for `locale`; otherwise formats from the locale bundle's
|
|
11754
|
+
* numeric rules so grouping stays correct on browsers whose ICU lacks the
|
|
11755
|
+
* locale (some Chrome builds drop long-tail locales, e.g. Icelandic). The
|
|
11756
|
+
* manual fallback honours the locale's separators and grouping pattern, not
|
|
11757
|
+
* `Intl` rounding options, which is sufficient for the values these components
|
|
11758
|
+
* display.
|
|
11759
|
+
*/
|
|
11760
|
+
function formatGroupedNumber(value, locale, format, options) {
|
|
11761
|
+
if (intlLocalizes(locale)) {
|
|
11762
|
+
return value.toLocaleString(locale, options);
|
|
11763
|
+
}
|
|
11764
|
+
if (!isFinite(value)) {
|
|
11765
|
+
return String(value);
|
|
11766
|
+
}
|
|
11767
|
+
const magnitude = Math.abs(value).toString();
|
|
11768
|
+
// Scientific notation can't be digit-grouped meaningfully; leave it as-is
|
|
11769
|
+
if (magnitude.includes('e') || magnitude.includes('E')) {
|
|
11770
|
+
return value.toString();
|
|
11771
|
+
}
|
|
11772
|
+
const [intPart, fracPart] = magnitude.split('.');
|
|
11773
|
+
const grouped = groupInteger(intPart, format.group, format.grouping);
|
|
11774
|
+
const body = fracPart != null ? `${grouped}${format.decimal}${fracPart}` : grouped;
|
|
11775
|
+
return value < 0 ? `-${body}` : body;
|
|
11776
|
+
}
|
|
11777
|
+
|
|
11029
11778
|
/**
|
|
11030
11779
|
* Page navigation control with previous/next buttons, numbered page jumps,
|
|
11031
11780
|
* an optional page-size selector, and a range label. Exposes `page` and
|
|
@@ -11052,9 +11801,11 @@ class PaginatorComponent {
|
|
|
11052
11801
|
rangeEnd = computed(() => Math.min(this.page() * this.pageSize(), this.totalItems()), ...(ngDevMode ? [{ debugName: "rangeEnd" }] : /* istanbul ignore next */ []));
|
|
11053
11802
|
canGoPrev = computed(() => this.page() > 1, ...(ngDevMode ? [{ debugName: "canGoPrev" }] : /* istanbul ignore next */ []));
|
|
11054
11803
|
canGoNext = computed(() => this.page() < this.totalPages(), ...(ngDevMode ? [{ debugName: "canGoNext" }] : /* istanbul ignore next */ []));
|
|
11055
|
-
/** Formats a number for display, grouping thousands
|
|
11804
|
+
/** Formats a number for display, grouping thousands per the active locale when enabled. */
|
|
11056
11805
|
formatNumber(value) {
|
|
11057
|
-
return this.groupThousands()
|
|
11806
|
+
return this.groupThousands()
|
|
11807
|
+
? formatGroupedNumber(value, this.i18n.locale(), this.i18n.messages().numberFormat)
|
|
11808
|
+
: `${value}`;
|
|
11058
11809
|
}
|
|
11059
11810
|
visiblePages = computed(() => {
|
|
11060
11811
|
const total = this.totalPages();
|
|
@@ -11290,6 +12041,7 @@ const FORMAT_PLAIN$1 = (value) => `${value}`;
|
|
|
11290
12041
|
* keeping the moving thumb on its side and the other thumb pinned.
|
|
11291
12042
|
*/
|
|
11292
12043
|
class RangeSliderComponent {
|
|
12044
|
+
i18n = inject(EagamiI18nService);
|
|
11293
12045
|
trackEl = viewChild('trackEl', ...(ngDevMode ? [{ debugName: "trackEl" }] : /* istanbul ignore next */ []));
|
|
11294
12046
|
label = input(undefined, ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
11295
12047
|
hint = input(undefined, ...(ngDevMode ? [{ debugName: "hint" }] : /* istanbul ignore next */ []));
|
|
@@ -11338,7 +12090,9 @@ class RangeSliderComponent {
|
|
|
11338
12090
|
return formatter(value);
|
|
11339
12091
|
}
|
|
11340
12092
|
return this.groupThousands()
|
|
11341
|
-
? value.
|
|
12093
|
+
? formatGroupedNumber(value, this.i18n.locale(), this.i18n.messages().numberFormat, {
|
|
12094
|
+
maximumFractionDigits: 20,
|
|
12095
|
+
})
|
|
11342
12096
|
: `${value}`;
|
|
11343
12097
|
}
|
|
11344
12098
|
errorState = injectControlErrorState({
|
|
@@ -12053,6 +12807,7 @@ const FORMAT_PLAIN = (value) => `${value}`;
|
|
|
12053
12807
|
* Angular forms via `ControlValueAccessor`.
|
|
12054
12808
|
*/
|
|
12055
12809
|
class SliderComponent {
|
|
12810
|
+
i18n = inject(EagamiI18nService);
|
|
12056
12811
|
trackEl = viewChild('trackEl', ...(ngDevMode ? [{ debugName: "trackEl" }] : /* istanbul ignore next */ []));
|
|
12057
12812
|
label = input(undefined, ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
12058
12813
|
hint = input(undefined, ...(ngDevMode ? [{ debugName: "hint" }] : /* istanbul ignore next */ []));
|
|
@@ -12102,7 +12857,9 @@ class SliderComponent {
|
|
|
12102
12857
|
return formatter(value);
|
|
12103
12858
|
}
|
|
12104
12859
|
return this.groupThousands()
|
|
12105
|
-
? value.
|
|
12860
|
+
? formatGroupedNumber(value, this.i18n.locale(), this.i18n.messages().numberFormat, {
|
|
12861
|
+
maximumFractionDigits: 20,
|
|
12862
|
+
})
|
|
12106
12863
|
: `${value}`;
|
|
12107
12864
|
}
|
|
12108
12865
|
errorState = injectControlErrorState({
|
|
@@ -13975,6 +14732,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
|
|
|
13975
14732
|
* them against the shared signals.
|
|
13976
14733
|
*/
|
|
13977
14734
|
class TreeNodeComponent {
|
|
14735
|
+
i18n = inject(EagamiI18nService);
|
|
13978
14736
|
node = input.required(...(ngDevMode ? [{ debugName: "node" }] : /* istanbul ignore next */ []));
|
|
13979
14737
|
/** Depth from the tree root (0-indexed). Drives indentation and `aria-level`. */
|
|
13980
14738
|
level = input.required(...(ngDevMode ? [{ debugName: "level" }] : /* istanbul ignore next */ []));
|
|
@@ -13990,10 +14748,12 @@ class TreeNodeComponent {
|
|
|
13990
14748
|
expandedIds = input.required(...(ngDevMode ? [{ debugName: "expandedIds" }] : /* istanbul ignore next */ []));
|
|
13991
14749
|
/** Whole-tree disabled state. */
|
|
13992
14750
|
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
13993
|
-
/**
|
|
13994
|
-
expandLabel = input(
|
|
13995
|
-
/**
|
|
13996
|
-
collapseLabel = input(
|
|
14751
|
+
/** aria-label for the expand chevron; falls back to the active locale's default. */
|
|
14752
|
+
expandLabel = input(undefined, ...(ngDevMode ? [{ debugName: "expandLabel" }] : /* istanbul ignore next */ []));
|
|
14753
|
+
/** aria-label for the collapse chevron; falls back to the active locale's default. */
|
|
14754
|
+
collapseLabel = input(undefined, ...(ngDevMode ? [{ debugName: "collapseLabel" }] : /* istanbul ignore next */ []));
|
|
14755
|
+
resolvedExpandLabel = computed(() => this.expandLabel() ?? this.i18n.messages().tree.expand, ...(ngDevMode ? [{ debugName: "resolvedExpandLabel" }] : /* istanbul ignore next */ []));
|
|
14756
|
+
resolvedCollapseLabel = computed(() => this.collapseLabel() ?? this.i18n.messages().tree.collapse, ...(ngDevMode ? [{ debugName: "resolvedCollapseLabel" }] : /* istanbul ignore next */ []));
|
|
13997
14757
|
toggle = output();
|
|
13998
14758
|
select = output();
|
|
13999
14759
|
hasChildren = computed(() => (this.node().children?.length ?? 0) > 0, ...(ngDevMode ? [{ debugName: "hasChildren" }] : /* istanbul ignore next */ []));
|
|
@@ -14023,13 +14783,13 @@ class TreeNodeComponent {
|
|
|
14023
14783
|
this.toggle.emit(this.node().id);
|
|
14024
14784
|
}
|
|
14025
14785
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: TreeNodeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
14026
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.16", type: TreeNodeComponent, isStandalone: true, selector: "ea-tree-node", inputs: { node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null }, level: { classPropertyName: "level", publicName: "level", isSignal: true, isRequired: true, transformFunction: null }, posInSet: { classPropertyName: "posInSet", publicName: "posInSet", isSignal: true, isRequired: true, transformFunction: null }, setSize: { classPropertyName: "setSize", publicName: "setSize", isSignal: true, isRequired: true, transformFunction: null }, selectedId: { classPropertyName: "selectedId", publicName: "selectedId", isSignal: true, isRequired: false, transformFunction: null }, focusedId: { classPropertyName: "focusedId", publicName: "focusedId", isSignal: true, isRequired: false, transformFunction: null }, expandedIds: { classPropertyName: "expandedIds", publicName: "expandedIds", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, expandLabel: { classPropertyName: "expandLabel", publicName: "expandLabel", isSignal: true, isRequired: false, transformFunction: null }, collapseLabel: { classPropertyName: "collapseLabel", publicName: "collapseLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { toggle: "toggle", select: "select" }, host: { attributes: { "role": "none" } }, ngImport: i0, template: "<li\n class=\"ea-tree-node\"\n role=\"treeitem\"\n [attr.id]=\"'ea-tree-item-' + node().id\"\n [attr.data-treeitem-id]=\"node().id\"\n [attr.aria-level]=\"level() + 1\"\n [attr.aria-posinset]=\"posInSet()\"\n [attr.aria-setsize]=\"setSize()\"\n [attr.aria-selected]=\"isSelected()\"\n [attr.aria-expanded]=\"hasChildren() ? isExpanded() : null\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n [attr.tabindex]=\"isFocused() ? 0 : -1\"\n [class.ea-tree-node--selected]=\"isSelected()\"\n [class.ea-tree-node--disabled]=\"isDisabled()\"\n [class.ea-tree-node--leaf]=\"!hasChildren()\"\n [style]=\"indentStyle()\">\n <div\n class=\"ea-tree-node__row\"\n (click)=\"onRowClick()\">\n @if (hasChildren()) {\n <span\n class=\"ea-tree-node__chevron\"\n [class.ea-tree-node__chevron--open]=\"isExpanded()\"\n [attr.aria-label]=\"isExpanded() ?
|
|
14786
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.16", type: TreeNodeComponent, isStandalone: true, selector: "ea-tree-node", inputs: { node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null }, level: { classPropertyName: "level", publicName: "level", isSignal: true, isRequired: true, transformFunction: null }, posInSet: { classPropertyName: "posInSet", publicName: "posInSet", isSignal: true, isRequired: true, transformFunction: null }, setSize: { classPropertyName: "setSize", publicName: "setSize", isSignal: true, isRequired: true, transformFunction: null }, selectedId: { classPropertyName: "selectedId", publicName: "selectedId", isSignal: true, isRequired: false, transformFunction: null }, focusedId: { classPropertyName: "focusedId", publicName: "focusedId", isSignal: true, isRequired: false, transformFunction: null }, expandedIds: { classPropertyName: "expandedIds", publicName: "expandedIds", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, expandLabel: { classPropertyName: "expandLabel", publicName: "expandLabel", isSignal: true, isRequired: false, transformFunction: null }, collapseLabel: { classPropertyName: "collapseLabel", publicName: "collapseLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { toggle: "toggle", select: "select" }, host: { attributes: { "role": "none" } }, ngImport: i0, template: "<li\n class=\"ea-tree-node\"\n role=\"treeitem\"\n [attr.id]=\"'ea-tree-item-' + node().id\"\n [attr.data-treeitem-id]=\"node().id\"\n [attr.aria-level]=\"level() + 1\"\n [attr.aria-posinset]=\"posInSet()\"\n [attr.aria-setsize]=\"setSize()\"\n [attr.aria-selected]=\"isSelected()\"\n [attr.aria-expanded]=\"hasChildren() ? isExpanded() : null\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n [attr.tabindex]=\"isFocused() ? 0 : -1\"\n [class.ea-tree-node--selected]=\"isSelected()\"\n [class.ea-tree-node--disabled]=\"isDisabled()\"\n [class.ea-tree-node--leaf]=\"!hasChildren()\"\n [style]=\"indentStyle()\">\n <div\n class=\"ea-tree-node__row\"\n (click)=\"onRowClick()\">\n @if (hasChildren()) {\n <span\n class=\"ea-tree-node__chevron\"\n [class.ea-tree-node__chevron--open]=\"isExpanded()\"\n [attr.aria-label]=\"isExpanded() ? resolvedCollapseLabel() : resolvedExpandLabel()\"\n role=\"button\"\n (click)=\"onChevronClick($event)\">\n <ea-icon-chevron-right />\n </span>\n } @else {\n <span\n class=\"ea-tree-node__chevron-spacer\"\n aria-hidden=\"true\">\n </span>\n }\n\n @if (node().icon; as iconClass) {\n <span\n class=\"ea-tree-node__icon\"\n aria-hidden=\"true\">\n <ng-container *ngComponentOutlet=\"iconClass\" />\n </span>\n }\n\n <span class=\"ea-tree-node__label\">\n {{ node().label }}\n </span>\n </div>\n\n @if (hasChildren() && isExpanded()) {\n <ul\n class=\"ea-tree-node__children\"\n role=\"group\">\n @for (child of node().children; track child.id; let i = $index) {\n <ea-tree-node\n [node]=\"child\"\n [level]=\"level() + 1\"\n [posInSet]=\"i + 1\"\n [setSize]=\"node().children!.length\"\n [selectedId]=\"selectedId()\"\n [focusedId]=\"focusedId()\"\n [expandedIds]=\"expandedIds()\"\n [disabled]=\"disabled()\"\n [expandLabel]=\"expandLabel()\"\n [collapseLabel]=\"collapseLabel()\"\n (toggle)=\"toggle.emit($event)\"\n (select)=\"select.emit($event)\" />\n }\n </ul>\n }\n</li>\n", styles: [":host{display:block}.ea-tree-node{display:block;outline:none;list-style:none}.ea-tree-node__row{display:flex;align-items:center;gap:var(--space-2);padding:var(--ea-tree-row-padding-block, var(--space-1)) var(--ea-tree-row-padding-inline, var(--space-2));padding-inline-start:calc(var(--ea-tree-row-padding-inline, var(--space-2)) + var(--ea-tree-node-level) * var(--ea-tree-indent, var(--space-4)));border-radius:var(--radius-sm);background-color:transparent;color:var(--color-text-primary);cursor:pointer;-webkit-user-select:none;user-select:none;transition:var(--transition-colors)}.ea-tree-node:focus-visible>.ea-tree-node__row{box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-tree-node:focus-visible>.ea-tree-node__row{outline:2px solid Highlight;outline-offset:2px}}.ea-tree-node__row:hover{background-color:var(--color-state-hover)}.ea-tree-node--selected>.ea-tree-node__row{background-color:var(--color-bg-selected, var(--color-brand-subtle));color:var(--color-text-on-selected, var(--color-text-primary))}@media(forced-colors:active){.ea-tree-node--selected>.ea-tree-node__row{background-color:Highlight;color:HighlightText}}.ea-tree-node--disabled>.ea-tree-node__row{opacity:.6;cursor:not-allowed}.ea-tree-node--disabled>.ea-tree-node__row:hover{background-color:transparent}.ea-tree-node__chevron,.ea-tree-node__chevron-spacer{display:inline-flex;align-items:center;justify-content:center;width:1em;height:1em;flex-shrink:0;color:var(--color-text-secondary)}.ea-tree-node__chevron{cursor:pointer;transition:transform var(--motion-duration-fast) var(--motion-easing-standard)}.ea-tree-node__chevron--open{transform:rotate(90deg)}.ea-tree-node__icon{display:inline-flex;align-items:center;justify-content:center;width:1em;height:1em;flex-shrink:0;color:var(--color-text-secondary)}.ea-tree-node__label{font-size:inherit;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;min-width:0;flex:1}.ea-tree-node__children{display:block;padding:0;margin:0;list-style:none}\n"], dependencies: [{ kind: "component", type: TreeNodeComponent, selector: "ea-tree-node", inputs: ["node", "level", "posInSet", "setSize", "selectedId", "focusedId", "expandedIds", "disabled", "expandLabel", "collapseLabel"], outputs: ["toggle", "select"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "component", type: ChevronRightIconComponent, selector: "ea-icon-chevron-right" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
14027
14787
|
}
|
|
14028
14788
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: TreeNodeComponent, decorators: [{
|
|
14029
14789
|
type: Component,
|
|
14030
14790
|
args: [{ selector: 'ea-tree-node', changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgComponentOutlet, ChevronRightIconComponent], host: {
|
|
14031
14791
|
role: 'none',
|
|
14032
|
-
}, template: "<li\n class=\"ea-tree-node\"\n role=\"treeitem\"\n [attr.id]=\"'ea-tree-item-' + node().id\"\n [attr.data-treeitem-id]=\"node().id\"\n [attr.aria-level]=\"level() + 1\"\n [attr.aria-posinset]=\"posInSet()\"\n [attr.aria-setsize]=\"setSize()\"\n [attr.aria-selected]=\"isSelected()\"\n [attr.aria-expanded]=\"hasChildren() ? isExpanded() : null\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n [attr.tabindex]=\"isFocused() ? 0 : -1\"\n [class.ea-tree-node--selected]=\"isSelected()\"\n [class.ea-tree-node--disabled]=\"isDisabled()\"\n [class.ea-tree-node--leaf]=\"!hasChildren()\"\n [style]=\"indentStyle()\">\n <div\n class=\"ea-tree-node__row\"\n (click)=\"onRowClick()\">\n @if (hasChildren()) {\n <span\n class=\"ea-tree-node__chevron\"\n [class.ea-tree-node__chevron--open]=\"isExpanded()\"\n [attr.aria-label]=\"isExpanded() ?
|
|
14792
|
+
}, template: "<li\n class=\"ea-tree-node\"\n role=\"treeitem\"\n [attr.id]=\"'ea-tree-item-' + node().id\"\n [attr.data-treeitem-id]=\"node().id\"\n [attr.aria-level]=\"level() + 1\"\n [attr.aria-posinset]=\"posInSet()\"\n [attr.aria-setsize]=\"setSize()\"\n [attr.aria-selected]=\"isSelected()\"\n [attr.aria-expanded]=\"hasChildren() ? isExpanded() : null\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n [attr.tabindex]=\"isFocused() ? 0 : -1\"\n [class.ea-tree-node--selected]=\"isSelected()\"\n [class.ea-tree-node--disabled]=\"isDisabled()\"\n [class.ea-tree-node--leaf]=\"!hasChildren()\"\n [style]=\"indentStyle()\">\n <div\n class=\"ea-tree-node__row\"\n (click)=\"onRowClick()\">\n @if (hasChildren()) {\n <span\n class=\"ea-tree-node__chevron\"\n [class.ea-tree-node__chevron--open]=\"isExpanded()\"\n [attr.aria-label]=\"isExpanded() ? resolvedCollapseLabel() : resolvedExpandLabel()\"\n role=\"button\"\n (click)=\"onChevronClick($event)\">\n <ea-icon-chevron-right />\n </span>\n } @else {\n <span\n class=\"ea-tree-node__chevron-spacer\"\n aria-hidden=\"true\">\n </span>\n }\n\n @if (node().icon; as iconClass) {\n <span\n class=\"ea-tree-node__icon\"\n aria-hidden=\"true\">\n <ng-container *ngComponentOutlet=\"iconClass\" />\n </span>\n }\n\n <span class=\"ea-tree-node__label\">\n {{ node().label }}\n </span>\n </div>\n\n @if (hasChildren() && isExpanded()) {\n <ul\n class=\"ea-tree-node__children\"\n role=\"group\">\n @for (child of node().children; track child.id; let i = $index) {\n <ea-tree-node\n [node]=\"child\"\n [level]=\"level() + 1\"\n [posInSet]=\"i + 1\"\n [setSize]=\"node().children!.length\"\n [selectedId]=\"selectedId()\"\n [focusedId]=\"focusedId()\"\n [expandedIds]=\"expandedIds()\"\n [disabled]=\"disabled()\"\n [expandLabel]=\"expandLabel()\"\n [collapseLabel]=\"collapseLabel()\"\n (toggle)=\"toggle.emit($event)\"\n (select)=\"select.emit($event)\" />\n }\n </ul>\n }\n</li>\n", styles: [":host{display:block}.ea-tree-node{display:block;outline:none;list-style:none}.ea-tree-node__row{display:flex;align-items:center;gap:var(--space-2);padding:var(--ea-tree-row-padding-block, var(--space-1)) var(--ea-tree-row-padding-inline, var(--space-2));padding-inline-start:calc(var(--ea-tree-row-padding-inline, var(--space-2)) + var(--ea-tree-node-level) * var(--ea-tree-indent, var(--space-4)));border-radius:var(--radius-sm);background-color:transparent;color:var(--color-text-primary);cursor:pointer;-webkit-user-select:none;user-select:none;transition:var(--transition-colors)}.ea-tree-node:focus-visible>.ea-tree-node__row{box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-tree-node:focus-visible>.ea-tree-node__row{outline:2px solid Highlight;outline-offset:2px}}.ea-tree-node__row:hover{background-color:var(--color-state-hover)}.ea-tree-node--selected>.ea-tree-node__row{background-color:var(--color-bg-selected, var(--color-brand-subtle));color:var(--color-text-on-selected, var(--color-text-primary))}@media(forced-colors:active){.ea-tree-node--selected>.ea-tree-node__row{background-color:Highlight;color:HighlightText}}.ea-tree-node--disabled>.ea-tree-node__row{opacity:.6;cursor:not-allowed}.ea-tree-node--disabled>.ea-tree-node__row:hover{background-color:transparent}.ea-tree-node__chevron,.ea-tree-node__chevron-spacer{display:inline-flex;align-items:center;justify-content:center;width:1em;height:1em;flex-shrink:0;color:var(--color-text-secondary)}.ea-tree-node__chevron{cursor:pointer;transition:transform var(--motion-duration-fast) var(--motion-easing-standard)}.ea-tree-node__chevron--open{transform:rotate(90deg)}.ea-tree-node__icon{display:inline-flex;align-items:center;justify-content:center;width:1em;height:1em;flex-shrink:0;color:var(--color-text-secondary)}.ea-tree-node__label{font-size:inherit;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;min-width:0;flex:1}.ea-tree-node__children{display:block;padding:0;margin:0;list-style:none}\n"] }]
|
|
14033
14793
|
}], propDecorators: { node: [{ type: i0.Input, args: [{ isSignal: true, alias: "node", required: true }] }], level: [{ type: i0.Input, args: [{ isSignal: true, alias: "level", required: true }] }], posInSet: [{ type: i0.Input, args: [{ isSignal: true, alias: "posInSet", required: true }] }], setSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "setSize", required: true }] }], selectedId: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedId", required: false }] }], focusedId: [{ type: i0.Input, args: [{ isSignal: true, alias: "focusedId", required: false }] }], expandedIds: [{ type: i0.Input, args: [{ isSignal: true, alias: "expandedIds", required: true }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], expandLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "expandLabel", required: false }] }], collapseLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapseLabel", required: false }] }], toggle: [{ type: i0.Output, args: ["toggle"] }], select: [{ type: i0.Output, args: ["select"] }] } });
|
|
14034
14794
|
|
|
14035
14795
|
/**
|