@eagami/ui 4.8.0 → 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 +839 -47
- package/fesm2022/eagami-ui.mjs.map +1 -1
- package/package.json +1 -1
- package/types/eagami-ui.d.ts +1765 -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: '关闭对话框',
|
|
@@ -4047,6 +4385,21 @@ class PopoverComponent {
|
|
|
4047
4385
|
// The surface is portaled to <body>, escaping the anchor's dir context, so
|
|
4048
4386
|
// mirror the anchor's resolved direction onto it explicitly.
|
|
4049
4387
|
surface.dir = isRtl(anchor) ? 'rtl' : 'ltr';
|
|
4388
|
+
// For the same reason, mirror the anchor's resolved font-family custom
|
|
4389
|
+
// properties so panel content honours a consumer's font override set on the
|
|
4390
|
+
// trigger's ancestor instead of falling back to the root font.
|
|
4391
|
+
const anchorStyle = window.getComputedStyle(anchor);
|
|
4392
|
+
for (const name of [
|
|
4393
|
+
'--font-family-sans',
|
|
4394
|
+
'--font-family-mono',
|
|
4395
|
+
'--font-family-serif',
|
|
4396
|
+
'--font-family-brand',
|
|
4397
|
+
]) {
|
|
4398
|
+
const value = anchorStyle.getPropertyValue(name).trim();
|
|
4399
|
+
if (value) {
|
|
4400
|
+
surface.style.setProperty(name, value);
|
|
4401
|
+
}
|
|
4402
|
+
}
|
|
4050
4403
|
const anchorRect = anchor.getBoundingClientRect();
|
|
4051
4404
|
const surfaceRect = surface.getBoundingClientRect();
|
|
4052
4405
|
this.position.set(computePopoverPosition(anchorRect, { width: surfaceRect.width, height: surfaceRect.height }, { width: window.innerWidth, height: window.innerHeight }, {
|
|
@@ -4082,14 +4435,14 @@ class PopoverComponent {
|
|
|
4082
4435
|
this.closeRequested.emit();
|
|
4083
4436
|
}
|
|
4084
4437
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: PopoverComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4085
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.16", type: PopoverComponent, isStandalone: true, selector: "ea-popover", inputs: { anchor: { classPropertyName: "anchor", publicName: "anchor", isSignal: true, isRequired: true, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "placement", isSignal: true, isRequired: false, transformFunction: null }, role: { classPropertyName: "role", publicName: "role", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, surfaceId: { classPropertyName: "surfaceId", publicName: "surfaceId", isSignal: true, isRequired: false, transformFunction: null }, offset: { classPropertyName: "offset", publicName: "offset", isSignal: true, isRequired: false, transformFunction: null }, flip: { classPropertyName: "flip", publicName: "flip", isSignal: true, isRequired: false, transformFunction: null }, clamp: { classPropertyName: "clamp", publicName: "clamp", isSignal: true, isRequired: false, transformFunction: null }, matchAnchorWidth: { classPropertyName: "matchAnchorWidth", publicName: "matchAnchorWidth", isSignal: true, isRequired: false, transformFunction: null }, closeOnOutsideClick: { classPropertyName: "closeOnOutsideClick", publicName: "closeOnOutsideClick", isSignal: true, isRequired: false, transformFunction: null }, closeOnEscape: { classPropertyName: "closeOnEscape", publicName: "closeOnEscape", isSignal: true, isRequired: false, transformFunction: null }, scrollBehavior: { classPropertyName: "scrollBehavior", publicName: "scrollBehavior", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closeRequested: "closeRequested" }, host: { listeners: { "document:click": "onDocumentClick($event)", "document:keydown.escape": "onEscape()" }, properties: { "attr.role": "null", "attr.aria-label": "null" } }, viewQueries: [{ propertyName: "surfaceEl", first: true, predicate: ["surfaceEl"], descendants: true, isSignal: true }], ngImport: i0, template: "<!--\n The surface is rendered unconditionally so the `<ng-content/>` slot always\n exists. If we gated it on `@if (open())`, Angular would re-project the\n consumer's content at the popover host's position whenever the surface was\n absent, leaking menu items / picker controls into the document flow (made\n worse by `display: contents` on the host). Hiding via `display: none` keeps\n the projected DOM owned by the surface and out of the flow when closed.\n-->\n<div\n #surfaceEl\n [class]=\"surfaceClass()\"\n [id]=\"surfaceId()\"\n [attr.role]=\"open() ? role() : null\"\n [attr.aria-label]=\"open() ? ariaLabel() : null\"\n [attr.aria-hidden]=\"open() ? null : true\"\n [style]=\"surfaceStyle()\">\n <ng-content />\n</div>\n", styles: [":host{display:contents}.ea-popover__surface{z-index:var(--z-index-popover);position:fixed;visibility:hidden}.ea-popover__surface--positioned{visibility:visible}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
4438
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.16", type: PopoverComponent, isStandalone: true, selector: "ea-popover", inputs: { anchor: { classPropertyName: "anchor", publicName: "anchor", isSignal: true, isRequired: true, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "placement", isSignal: true, isRequired: false, transformFunction: null }, role: { classPropertyName: "role", publicName: "role", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, surfaceId: { classPropertyName: "surfaceId", publicName: "surfaceId", isSignal: true, isRequired: false, transformFunction: null }, offset: { classPropertyName: "offset", publicName: "offset", isSignal: true, isRequired: false, transformFunction: null }, flip: { classPropertyName: "flip", publicName: "flip", isSignal: true, isRequired: false, transformFunction: null }, clamp: { classPropertyName: "clamp", publicName: "clamp", isSignal: true, isRequired: false, transformFunction: null }, matchAnchorWidth: { classPropertyName: "matchAnchorWidth", publicName: "matchAnchorWidth", isSignal: true, isRequired: false, transformFunction: null }, closeOnOutsideClick: { classPropertyName: "closeOnOutsideClick", publicName: "closeOnOutsideClick", isSignal: true, isRequired: false, transformFunction: null }, closeOnEscape: { classPropertyName: "closeOnEscape", publicName: "closeOnEscape", isSignal: true, isRequired: false, transformFunction: null }, scrollBehavior: { classPropertyName: "scrollBehavior", publicName: "scrollBehavior", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closeRequested: "closeRequested" }, host: { listeners: { "document:click": "onDocumentClick($event)", "document:keydown.escape": "onEscape()" }, properties: { "attr.role": "null", "attr.aria-label": "null" } }, viewQueries: [{ propertyName: "surfaceEl", first: true, predicate: ["surfaceEl"], descendants: true, isSignal: true }], ngImport: i0, template: "<!--\n The surface is rendered unconditionally so the `<ng-content/>` slot always\n exists. If we gated it on `@if (open())`, Angular would re-project the\n consumer's content at the popover host's position whenever the surface was\n absent, leaking menu items / picker controls into the document flow (made\n worse by `display: contents` on the host). Hiding via `display: none` keeps\n the projected DOM owned by the surface and out of the flow when closed.\n-->\n<div\n #surfaceEl\n [class]=\"surfaceClass()\"\n [id]=\"surfaceId()\"\n [attr.role]=\"open() ? role() : null\"\n [attr.aria-label]=\"open() ? ariaLabel() : null\"\n [attr.aria-hidden]=\"open() ? null : true\"\n [style]=\"surfaceStyle()\">\n <ng-content />\n</div>\n", styles: [":host{display:contents}.ea-popover__surface{z-index:var(--z-index-popover);position:fixed;visibility:hidden;font-family:var(--font-family-sans)}.ea-popover__surface--positioned{visibility:visible}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
4086
4439
|
}
|
|
4087
4440
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: PopoverComponent, decorators: [{
|
|
4088
4441
|
type: Component,
|
|
4089
4442
|
args: [{ selector: 'ea-popover', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
4090
4443
|
'[attr.role]': 'null',
|
|
4091
4444
|
'[attr.aria-label]': 'null',
|
|
4092
|
-
}, template: "<!--\n The surface is rendered unconditionally so the `<ng-content/>` slot always\n exists. If we gated it on `@if (open())`, Angular would re-project the\n consumer's content at the popover host's position whenever the surface was\n absent, leaking menu items / picker controls into the document flow (made\n worse by `display: contents` on the host). Hiding via `display: none` keeps\n the projected DOM owned by the surface and out of the flow when closed.\n-->\n<div\n #surfaceEl\n [class]=\"surfaceClass()\"\n [id]=\"surfaceId()\"\n [attr.role]=\"open() ? role() : null\"\n [attr.aria-label]=\"open() ? ariaLabel() : null\"\n [attr.aria-hidden]=\"open() ? null : true\"\n [style]=\"surfaceStyle()\">\n <ng-content />\n</div>\n", styles: [":host{display:contents}.ea-popover__surface{z-index:var(--z-index-popover);position:fixed;visibility:hidden}.ea-popover__surface--positioned{visibility:visible}\n"] }]
|
|
4445
|
+
}, template: "<!--\n The surface is rendered unconditionally so the `<ng-content/>` slot always\n exists. If we gated it on `@if (open())`, Angular would re-project the\n consumer's content at the popover host's position whenever the surface was\n absent, leaking menu items / picker controls into the document flow (made\n worse by `display: contents` on the host). Hiding via `display: none` keeps\n the projected DOM owned by the surface and out of the flow when closed.\n-->\n<div\n #surfaceEl\n [class]=\"surfaceClass()\"\n [id]=\"surfaceId()\"\n [attr.role]=\"open() ? role() : null\"\n [attr.aria-label]=\"open() ? ariaLabel() : null\"\n [attr.aria-hidden]=\"open() ? null : true\"\n [style]=\"surfaceStyle()\">\n <ng-content />\n</div>\n", styles: [":host{display:contents}.ea-popover__surface{z-index:var(--z-index-popover);position:fixed;visibility:hidden;font-family:var(--font-family-sans)}.ea-popover__surface--positioned{visibility:visible}\n"] }]
|
|
4093
4446
|
}], ctorParameters: () => [], propDecorators: { surfaceEl: [{ type: i0.ViewChild, args: ['surfaceEl', { isSignal: true }] }], anchor: [{ type: i0.Input, args: [{ isSignal: true, alias: "anchor", required: true }] }], open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }], placement: [{ type: i0.Input, args: [{ isSignal: true, alias: "placement", required: false }] }], role: [{ type: i0.Input, args: [{ isSignal: true, alias: "role", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }], surfaceId: [{ type: i0.Input, args: [{ isSignal: true, alias: "surfaceId", required: false }] }], offset: [{ type: i0.Input, args: [{ isSignal: true, alias: "offset", required: false }] }], flip: [{ type: i0.Input, args: [{ isSignal: true, alias: "flip", required: false }] }], clamp: [{ type: i0.Input, args: [{ isSignal: true, alias: "clamp", required: false }] }], matchAnchorWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "matchAnchorWidth", required: false }] }], closeOnOutsideClick: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnOutsideClick", required: false }] }], closeOnEscape: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnEscape", required: false }] }], scrollBehavior: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollBehavior", required: false }] }], closeRequested: [{ type: i0.Output, args: ["closeRequested"] }], onDocumentClick: [{
|
|
4094
4447
|
type: HostListener,
|
|
4095
4448
|
args: ['document:click', ['$event']]
|
|
@@ -5394,12 +5747,12 @@ class AvatarEditorComponent {
|
|
|
5394
5747
|
}
|
|
5395
5748
|
loadFile(file) {
|
|
5396
5749
|
if (!file.type.startsWith('image/')) {
|
|
5397
|
-
this.errored.emit(
|
|
5750
|
+
this.errored.emit(this.i18n.messages().avatarEditor.invalidType);
|
|
5398
5751
|
return;
|
|
5399
5752
|
}
|
|
5400
5753
|
if (file.size > this.maxFileSize()) {
|
|
5401
5754
|
const maxMb = Math.round(this.maxFileSize() / (1024 * 1024));
|
|
5402
|
-
this.errored.emit(
|
|
5755
|
+
this.errored.emit(this.i18n.messages().avatarEditor.tooLarge(maxMb));
|
|
5403
5756
|
return;
|
|
5404
5757
|
}
|
|
5405
5758
|
this.isAtOriginal.set(false);
|
|
@@ -6417,6 +6770,22 @@ class ColorPickerComponent {
|
|
|
6417
6770
|
* expanded back into a 6-digit canonical form. */
|
|
6418
6771
|
hexInputValue = signal('', ...(ngDevMode ? [{ debugName: "hexInputValue" }] : /* istanbul ignore next */ []));
|
|
6419
6772
|
_formDisabled = signal(false, ...(ngDevMode ? [{ debugName: "_formDisabled" }] : /* istanbul ignore next */ []));
|
|
6773
|
+
/** The last value this component emitted, so the value-sync effect can tell an
|
|
6774
|
+
* external `[(value)]` / reset change from its own commit and skip the echo. */
|
|
6775
|
+
lastCommitted = null;
|
|
6776
|
+
// Sync internal HSV when `value` is set from outside (an input binding), which
|
|
6777
|
+
// otherwise only happens through the forms `writeValue` path. Without this a
|
|
6778
|
+
// `[(value)]`-bound initial color renders on the swatch as black.
|
|
6779
|
+
valueSync = effect(() => {
|
|
6780
|
+
const v = this.value();
|
|
6781
|
+
if (v === null || v === this.lastCommitted) {
|
|
6782
|
+
return;
|
|
6783
|
+
}
|
|
6784
|
+
const parsed = parseColor(v);
|
|
6785
|
+
if (parsed) {
|
|
6786
|
+
this.applyRgba(parsed.r, parsed.g, parsed.b, parsed.a, false);
|
|
6787
|
+
}
|
|
6788
|
+
}, ...(ngDevMode ? [{ debugName: "valueSync" }] : /* istanbul ignore next */ []));
|
|
6420
6789
|
onChange = () => { };
|
|
6421
6790
|
onTouched = () => { };
|
|
6422
6791
|
isDisabled = computed(() => this.disabled() || this._formDisabled(), ...(ngDevMode ? [{ debugName: "isDisabled" }] : /* istanbul ignore next */ []));
|
|
@@ -6893,6 +7262,7 @@ class ColorPickerComponent {
|
|
|
6893
7262
|
if (out === this.value()) {
|
|
6894
7263
|
return;
|
|
6895
7264
|
}
|
|
7265
|
+
this.lastCommitted = out;
|
|
6896
7266
|
this.value.set(out);
|
|
6897
7267
|
this.onChange(out);
|
|
6898
7268
|
this.changed.emit(out);
|
|
@@ -7953,6 +8323,24 @@ class DatePickerComponent {
|
|
|
7953
8323
|
showHint = computed(() => !!this.hint() && !this.hasError(), ...(ngDevMode ? [{ debugName: "showHint" }] : /* istanbul ignore next */ []));
|
|
7954
8324
|
/** Locale used for date formatting: explicit `locale` input, else the global locale. */
|
|
7955
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 */ []));
|
|
7956
8344
|
/** Placeholder text: explicit `placeholder` input, else the active locale's default. */
|
|
7957
8345
|
resolvedPlaceholder = computed(() => this.placeholder() ?? this.i18n.messages().datePicker.placeholder, ...(ngDevMode ? [{ debugName: "resolvedPlaceholder" }] : /* istanbul ignore next */ []));
|
|
7958
8346
|
triggerClasses = computed(() => ({
|
|
@@ -7964,34 +8352,54 @@ class DatePickerComponent {
|
|
|
7964
8352
|
wrapperClasses = computed(() => ({
|
|
7965
8353
|
[`ea-date-picker__trigger-wrapper--${this.size()}`]: true,
|
|
7966
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 */ []));
|
|
7967
8360
|
displayValue = computed(() => {
|
|
7968
8361
|
const val = this.value();
|
|
7969
8362
|
if (!val) {
|
|
7970
8363
|
return '';
|
|
7971
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
|
+
}
|
|
7972
8369
|
return new Intl.DateTimeFormat(this.effectiveLocale(), this.formatOptions()).format(val);
|
|
7973
8370
|
}, ...(ngDevMode ? [{ debugName: "displayValue" }] : /* istanbul ignore next */ []));
|
|
7974
8371
|
monthYearLabel = computed(() => {
|
|
7975
|
-
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
|
+
}
|
|
7976
8380
|
return new Intl.DateTimeFormat(this.effectiveLocale(), {
|
|
7977
8381
|
month: 'long',
|
|
7978
8382
|
year: 'numeric',
|
|
7979
|
-
}).format(
|
|
8383
|
+
}).format(new Date(year, month, 1));
|
|
7980
8384
|
}, ...(ngDevMode ? [{ debugName: "monthYearLabel" }] : /* istanbul ignore next */ []));
|
|
7981
8385
|
weekdayLabels = computed(() => {
|
|
7982
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);
|
|
7983
8395
|
const formatter = new Intl.DateTimeFormat(this.effectiveLocale(), {
|
|
7984
8396
|
weekday: 'short',
|
|
7985
8397
|
});
|
|
7986
|
-
|
|
7987
|
-
|
|
7988
|
-
|
|
7989
|
-
|
|
7990
|
-
|
|
7991
|
-
d.setDate(base.getDate() + ((i + start) % 7));
|
|
7992
|
-
labels.push(formatter.format(d));
|
|
7993
|
-
}
|
|
7994
|
-
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
|
+
});
|
|
7995
8403
|
}, ...(ngDevMode ? [{ debugName: "weekdayLabels" }] : /* istanbul ignore next */ []));
|
|
7996
8404
|
weeks = computed(() => {
|
|
7997
8405
|
const year = this.viewYear();
|
|
@@ -8286,7 +8694,7 @@ class DatePickerComponent {
|
|
|
8286
8694
|
useExisting: forwardRef(() => DatePickerComponent),
|
|
8287
8695
|
multi: true,
|
|
8288
8696
|
},
|
|
8289
|
-
], 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;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 });
|
|
8290
8698
|
}
|
|
8291
8699
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: DatePickerComponent, decorators: [{
|
|
8292
8700
|
type: Component,
|
|
@@ -8305,7 +8713,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
|
|
|
8305
8713
|
useExisting: forwardRef(() => DatePickerComponent),
|
|
8306
8714
|
multi: true,
|
|
8307
8715
|
},
|
|
8308
|
-
], 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;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"] }]
|
|
8309
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"] }] } });
|
|
8310
8718
|
|
|
8311
8719
|
/**
|
|
@@ -8386,64 +8794,381 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
|
|
|
8386
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"] }]
|
|
8387
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"] }] } });
|
|
8388
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
|
+
];
|
|
8389
8817
|
/**
|
|
8390
8818
|
* Side panel backed by the native `<dialog>` element for browser-managed
|
|
8391
8819
|
* focus trapping. Slides in from a configurable edge, supports backdrop and
|
|
8392
8820
|
* Escape dismissal, and exposes `header`, default, and `footer` content
|
|
8393
|
-
* 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.
|
|
8394
8823
|
*/
|
|
8395
8824
|
class DrawerComponent {
|
|
8396
8825
|
drawerEl = viewChild('drawerEl', ...(ngDevMode ? [{ debugName: "drawerEl" }] : /* istanbul ignore next */ []));
|
|
8826
|
+
panelEl = viewChild('panelEl', ...(ngDevMode ? [{ debugName: "panelEl" }] : /* istanbul ignore next */ []));
|
|
8397
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;
|
|
8398
8840
|
i18n = inject(EagamiI18nService);
|
|
8399
8841
|
isBrowser = isPlatformBrowser(inject(PLATFORM_ID));
|
|
8400
8842
|
position = input('right', ...(ngDevMode ? [{ debugName: "position" }] : /* istanbul ignore next */ []));
|
|
8401
|
-
|
|
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 */ []));
|
|
8402
8858
|
closeOnBackdrop = input(true, ...(ngDevMode ? [{ debugName: "closeOnBackdrop" }] : /* istanbul ignore next */ []));
|
|
8403
8859
|
closeOnEscape = input(true, ...(ngDevMode ? [{ debugName: "closeOnEscape" }] : /* istanbul ignore next */ []));
|
|
8404
|
-
/** Slide
|
|
8405
|
-
|
|
8860
|
+
/** Slide animation used as the panel opens and closes. */
|
|
8861
|
+
animation = input('eased', ...(ngDevMode ? [{ debugName: "animation" }] : /* istanbul ignore next */ []));
|
|
8406
8862
|
showClose = input(true, ...(ngDevMode ? [{ debugName: "showClose" }] : /* istanbul ignore next */ []));
|
|
8407
8863
|
ariaLabel = input(undefined, { ...(ngDevMode ? { debugName: "ariaLabel" } : /* istanbul ignore next */ {}), alias: 'aria-label' });
|
|
8408
8864
|
id = input(uniqueId('ea-drawer'), ...(ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []));
|
|
8409
8865
|
open = model(false, ...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
|
|
8410
|
-
/** Fires once the drawer has been shown
|
|
8866
|
+
/** Fires once the drawer has been shown. */
|
|
8411
8867
|
opened = output();
|
|
8412
8868
|
/** Fires when the drawer closes (via close button, backdrop, or Escape). */
|
|
8413
8869
|
closed = output();
|
|
8414
8870
|
panelClasses = computed(() => ({
|
|
8415
8871
|
[`ea-drawer__panel--${this.position()}`]: true,
|
|
8416
|
-
[`ea-drawer__panel--${this.
|
|
8872
|
+
[`ea-drawer__panel--${this.size()}`]: true,
|
|
8417
8873
|
}), ...(ngDevMode ? [{ debugName: "panelClasses" }] : /* istanbul ignore next */ []));
|
|
8418
8874
|
constructor() {
|
|
8419
8875
|
effect(() => {
|
|
8420
8876
|
const drawerRef = this.drawerEl()?.nativeElement;
|
|
8421
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();
|
|
8422
8883
|
// `<dialog>` APIs and focus management are browser-only, but the effect
|
|
8423
8884
|
// still runs during SSR, so skip the DOM work on the server.
|
|
8424
8885
|
if (!drawerRef || !this.isBrowser) {
|
|
8425
8886
|
return;
|
|
8426
8887
|
}
|
|
8888
|
+
// Push mode stays non-modal so the page behind it remains interactive.
|
|
8889
|
+
const wantModal = mode !== 'push';
|
|
8427
8890
|
if (open) {
|
|
8428
8891
|
if (!drawerRef.open) {
|
|
8429
8892
|
this.previouslyFocused = document.activeElement;
|
|
8430
|
-
|
|
8893
|
+
this.showDialog(drawerRef, wantModal);
|
|
8894
|
+
this.enter(true);
|
|
8431
8895
|
this.opened.emit();
|
|
8432
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
|
+
}
|
|
8433
8919
|
}
|
|
8434
8920
|
else {
|
|
8435
8921
|
if (drawerRef.open) {
|
|
8436
|
-
|
|
8437
|
-
this.previouslyFocused?.focus?.();
|
|
8438
|
-
this.previouslyFocused = null;
|
|
8922
|
+
this.leave(drawerRef);
|
|
8439
8923
|
}
|
|
8924
|
+
this.clearPush();
|
|
8925
|
+
this.removePushDismiss();
|
|
8440
8926
|
}
|
|
8441
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;
|
|
8442
9033
|
}
|
|
8443
9034
|
handleClose() {
|
|
8444
9035
|
this.open.set(false);
|
|
8445
9036
|
this.closed.emit();
|
|
8446
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
|
+
}
|
|
8447
9172
|
handleBackdropClick(event) {
|
|
8448
9173
|
if (!this.closeOnBackdrop()) {
|
|
8449
9174
|
return;
|
|
@@ -8454,35 +9179,38 @@ class DrawerComponent {
|
|
|
8454
9179
|
}
|
|
8455
9180
|
}
|
|
8456
9181
|
handleCancel(event) {
|
|
8457
|
-
|
|
8458
|
-
|
|
8459
|
-
|
|
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();
|
|
8460
9187
|
}
|
|
8461
|
-
this.handleClose();
|
|
8462
9188
|
}
|
|
8463
9189
|
// The native <dialog> can close on its own (e.g. Escape), so reconcile the open
|
|
8464
9190
|
// model here. When closeOnEscape is off, Chrome's repeated-Escape abuse
|
|
8465
9191
|
// mitigation can force the close past cancel's preventDefault, so re-show to
|
|
8466
9192
|
// keep the drawer open; otherwise mirror the close back into the model.
|
|
8467
9193
|
onDialogClose() {
|
|
8468
|
-
|
|
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) {
|
|
8469
9197
|
return;
|
|
8470
9198
|
}
|
|
8471
9199
|
if (this.closeOnEscape()) {
|
|
8472
9200
|
this.open.set(false);
|
|
8473
9201
|
this.closed.emit();
|
|
8474
9202
|
}
|
|
8475
|
-
else {
|
|
8476
|
-
this.
|
|
9203
|
+
else if (drawerRef) {
|
|
9204
|
+
this.showDialog(drawerRef, this.mode() !== 'push');
|
|
8477
9205
|
}
|
|
8478
9206
|
}
|
|
8479
9207
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: DrawerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
8480
|
-
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 });
|
|
8481
9209
|
}
|
|
8482
9210
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: DrawerComponent, decorators: [{
|
|
8483
9211
|
type: Component,
|
|
8484
|
-
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]=\"
|
|
8485
|
-
}], 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"] }] } });
|
|
8486
9214
|
|
|
8487
9215
|
/**
|
|
8488
9216
|
* Single-select dropdown with a custom popup list. Supports keyboard
|
|
@@ -10994,6 +11722,59 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
|
|
|
10994
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"] }]
|
|
10995
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"] }] } });
|
|
10996
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
|
+
|
|
10997
11778
|
/**
|
|
10998
11779
|
* Page navigation control with previous/next buttons, numbered page jumps,
|
|
10999
11780
|
* an optional page-size selector, and a range label. Exposes `page` and
|
|
@@ -11020,9 +11801,11 @@ class PaginatorComponent {
|
|
|
11020
11801
|
rangeEnd = computed(() => Math.min(this.page() * this.pageSize(), this.totalItems()), ...(ngDevMode ? [{ debugName: "rangeEnd" }] : /* istanbul ignore next */ []));
|
|
11021
11802
|
canGoPrev = computed(() => this.page() > 1, ...(ngDevMode ? [{ debugName: "canGoPrev" }] : /* istanbul ignore next */ []));
|
|
11022
11803
|
canGoNext = computed(() => this.page() < this.totalPages(), ...(ngDevMode ? [{ debugName: "canGoNext" }] : /* istanbul ignore next */ []));
|
|
11023
|
-
/** Formats a number for display, grouping thousands
|
|
11804
|
+
/** Formats a number for display, grouping thousands per the active locale when enabled. */
|
|
11024
11805
|
formatNumber(value) {
|
|
11025
|
-
return this.groupThousands()
|
|
11806
|
+
return this.groupThousands()
|
|
11807
|
+
? formatGroupedNumber(value, this.i18n.locale(), this.i18n.messages().numberFormat)
|
|
11808
|
+
: `${value}`;
|
|
11026
11809
|
}
|
|
11027
11810
|
visiblePages = computed(() => {
|
|
11028
11811
|
const total = this.totalPages();
|
|
@@ -11258,6 +12041,7 @@ const FORMAT_PLAIN$1 = (value) => `${value}`;
|
|
|
11258
12041
|
* keeping the moving thumb on its side and the other thumb pinned.
|
|
11259
12042
|
*/
|
|
11260
12043
|
class RangeSliderComponent {
|
|
12044
|
+
i18n = inject(EagamiI18nService);
|
|
11261
12045
|
trackEl = viewChild('trackEl', ...(ngDevMode ? [{ debugName: "trackEl" }] : /* istanbul ignore next */ []));
|
|
11262
12046
|
label = input(undefined, ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
11263
12047
|
hint = input(undefined, ...(ngDevMode ? [{ debugName: "hint" }] : /* istanbul ignore next */ []));
|
|
@@ -11306,7 +12090,9 @@ class RangeSliderComponent {
|
|
|
11306
12090
|
return formatter(value);
|
|
11307
12091
|
}
|
|
11308
12092
|
return this.groupThousands()
|
|
11309
|
-
? value.
|
|
12093
|
+
? formatGroupedNumber(value, this.i18n.locale(), this.i18n.messages().numberFormat, {
|
|
12094
|
+
maximumFractionDigits: 20,
|
|
12095
|
+
})
|
|
11310
12096
|
: `${value}`;
|
|
11311
12097
|
}
|
|
11312
12098
|
errorState = injectControlErrorState({
|
|
@@ -12021,6 +12807,7 @@ const FORMAT_PLAIN = (value) => `${value}`;
|
|
|
12021
12807
|
* Angular forms via `ControlValueAccessor`.
|
|
12022
12808
|
*/
|
|
12023
12809
|
class SliderComponent {
|
|
12810
|
+
i18n = inject(EagamiI18nService);
|
|
12024
12811
|
trackEl = viewChild('trackEl', ...(ngDevMode ? [{ debugName: "trackEl" }] : /* istanbul ignore next */ []));
|
|
12025
12812
|
label = input(undefined, ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
12026
12813
|
hint = input(undefined, ...(ngDevMode ? [{ debugName: "hint" }] : /* istanbul ignore next */ []));
|
|
@@ -12070,7 +12857,9 @@ class SliderComponent {
|
|
|
12070
12857
|
return formatter(value);
|
|
12071
12858
|
}
|
|
12072
12859
|
return this.groupThousands()
|
|
12073
|
-
? value.
|
|
12860
|
+
? formatGroupedNumber(value, this.i18n.locale(), this.i18n.messages().numberFormat, {
|
|
12861
|
+
maximumFractionDigits: 20,
|
|
12862
|
+
})
|
|
12074
12863
|
: `${value}`;
|
|
12075
12864
|
}
|
|
12076
12865
|
errorState = injectControlErrorState({
|
|
@@ -13943,6 +14732,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
|
|
|
13943
14732
|
* them against the shared signals.
|
|
13944
14733
|
*/
|
|
13945
14734
|
class TreeNodeComponent {
|
|
14735
|
+
i18n = inject(EagamiI18nService);
|
|
13946
14736
|
node = input.required(...(ngDevMode ? [{ debugName: "node" }] : /* istanbul ignore next */ []));
|
|
13947
14737
|
/** Depth from the tree root (0-indexed). Drives indentation and `aria-level`. */
|
|
13948
14738
|
level = input.required(...(ngDevMode ? [{ debugName: "level" }] : /* istanbul ignore next */ []));
|
|
@@ -13958,10 +14748,12 @@ class TreeNodeComponent {
|
|
|
13958
14748
|
expandedIds = input.required(...(ngDevMode ? [{ debugName: "expandedIds" }] : /* istanbul ignore next */ []));
|
|
13959
14749
|
/** Whole-tree disabled state. */
|
|
13960
14750
|
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
13961
|
-
/**
|
|
13962
|
-
expandLabel = input(
|
|
13963
|
-
/**
|
|
13964
|
-
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 */ []));
|
|
13965
14757
|
toggle = output();
|
|
13966
14758
|
select = output();
|
|
13967
14759
|
hasChildren = computed(() => (this.node().children?.length ?? 0) > 0, ...(ngDevMode ? [{ debugName: "hasChildren" }] : /* istanbul ignore next */ []));
|
|
@@ -13991,13 +14783,13 @@ class TreeNodeComponent {
|
|
|
13991
14783
|
this.toggle.emit(this.node().id);
|
|
13992
14784
|
}
|
|
13993
14785
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: TreeNodeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
13994
|
-
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 });
|
|
13995
14787
|
}
|
|
13996
14788
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: TreeNodeComponent, decorators: [{
|
|
13997
14789
|
type: Component,
|
|
13998
14790
|
args: [{ selector: 'ea-tree-node', changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgComponentOutlet, ChevronRightIconComponent], host: {
|
|
13999
14791
|
role: 'none',
|
|
14000
|
-
}, 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"] }]
|
|
14001
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"] }] } });
|
|
14002
14794
|
|
|
14003
14795
|
/**
|