@eagami/ui 4.8.1 → 5.0.1

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