@eagami/ui 5.56.0 → 5.58.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -406,7 +406,10 @@ const ar = {
406
406
  invalidType: "يجب أن يكون الملف صورة",
407
407
  tooLarge: (maxMb) => `الملف يتجاوز حد ${maxMb} MB`
408
408
  },
409
- breadcrumbs: { label: "مسار التنقل" },
409
+ breadcrumbs: {
410
+ label: "مسار التنقل",
411
+ showHidden: "إظهار المستويات المخفية"
412
+ },
410
413
  chart: {
411
414
  roleDescription: "مخطط",
412
415
  lineChart: "مخطط خطي",
@@ -481,7 +484,13 @@ const ar = {
481
484
  },
482
485
  dialog: { close: "إغلاق مربع الحوار" },
483
486
  drawer: { close: "إغلاق اللوحة" },
484
- dropdown: { placeholder: "اختر…" },
487
+ dropdown: {
488
+ placeholder: "اختر…",
489
+ clear: "مسح التحديد",
490
+ dialogLabel: "اختيار خيار",
491
+ searchPlaceholder: "بحث…",
492
+ searchEmpty: "لا توجد مطابقات"
493
+ },
485
494
  fieldLabel: { help: (label) => `مزيد من المعلومات حول ${label}` },
486
495
  fileUploader: {
487
496
  prompt: "انقر أو اسحب الملفات هنا للتحميل",
@@ -616,7 +625,10 @@ const de = {
616
625
  invalidType: "Datei muss ein Bild sein",
617
626
  tooLarge: (maxMb) => `Datei überschreitet das Limit von ${maxMb} MB`
618
627
  },
619
- breadcrumbs: { label: "Brotkrümelnavigation" },
628
+ breadcrumbs: {
629
+ label: "Brotkrümelnavigation",
630
+ showHidden: "Ausgeblendete Ebenen anzeigen"
631
+ },
620
632
  chart: {
621
633
  roleDescription: "Diagramm",
622
634
  lineChart: "Liniendiagramm",
@@ -691,7 +703,13 @@ const de = {
691
703
  },
692
704
  dialog: { close: "Dialog schließen" },
693
705
  drawer: { close: "Panel schließen" },
694
- dropdown: { placeholder: "Auswählen…" },
706
+ dropdown: {
707
+ placeholder: "Auswählen…",
708
+ clear: "Auswahl aufheben",
709
+ dialogLabel: "Option wählen",
710
+ searchPlaceholder: "Suchen…",
711
+ searchEmpty: "Keine Treffer"
712
+ },
695
713
  fieldLabel: { help: (label) => `Weitere Informationen zu ${label}` },
696
714
  fileUploader: {
697
715
  prompt: "Dateien hierher klicken oder ziehen zum Hochladen",
@@ -826,7 +844,10 @@ const el = {
826
844
  invalidType: "Το αρχείο πρέπει να είναι εικόνα",
827
845
  tooLarge: (maxMb) => `Το αρχείο υπερβαίνει το όριο των ${maxMb} MB`
828
846
  },
829
- breadcrumbs: { label: "Διαδρομή πλοήγησης" },
847
+ breadcrumbs: {
848
+ label: "Διαδρομή πλοήγησης",
849
+ showHidden: "Εμφάνιση κρυφών επιπέδων"
850
+ },
830
851
  chart: {
831
852
  roleDescription: "γράφημα",
832
853
  lineChart: "Γράφημα γραμμών",
@@ -901,7 +922,13 @@ const el = {
901
922
  },
902
923
  dialog: { close: "Κλείσιμο παραθύρου διαλόγου" },
903
924
  drawer: { close: "Κλείσιμο πίνακα" },
904
- dropdown: { placeholder: "Επιλέξτε…" },
925
+ dropdown: {
926
+ placeholder: "Επιλέξτε…",
927
+ clear: "Εκκαθάριση επιλογής",
928
+ dialogLabel: "Επιλέξτε μια επιλογή",
929
+ searchPlaceholder: "Αναζήτηση…",
930
+ searchEmpty: "Δεν βρέθηκαν αποτελέσματα"
931
+ },
905
932
  fieldLabel: { help: (label) => `Περισσότερες πληροφορίες: ${label}` },
906
933
  fileUploader: {
907
934
  prompt: "Κάντε κλικ ή σύρετε αρχεία εδώ για μεταφόρτωση",
@@ -1036,7 +1063,10 @@ const en = {
1036
1063
  invalidType: "File must be an image",
1037
1064
  tooLarge: (maxMb) => `File exceeds ${maxMb} MB limit`
1038
1065
  },
1039
- breadcrumbs: { label: "Breadcrumb" },
1066
+ breadcrumbs: {
1067
+ label: "Breadcrumb",
1068
+ showHidden: "Show hidden levels"
1069
+ },
1040
1070
  chart: {
1041
1071
  roleDescription: "chart",
1042
1072
  lineChart: "Line chart",
@@ -1111,7 +1141,13 @@ const en = {
1111
1141
  },
1112
1142
  dialog: { close: "Close dialog" },
1113
1143
  drawer: { close: "Close panel" },
1114
- dropdown: { placeholder: "Select…" },
1144
+ dropdown: {
1145
+ placeholder: "Select…",
1146
+ clear: "Clear selection",
1147
+ dialogLabel: "Choose an option",
1148
+ searchPlaceholder: "Search…",
1149
+ searchEmpty: "No matches"
1150
+ },
1115
1151
  fieldLabel: { help: (label) => `More information about ${label}` },
1116
1152
  fileUploader: {
1117
1153
  prompt: "Click or drag files here to upload",
@@ -1246,7 +1282,10 @@ const esES = {
1246
1282
  invalidType: "El archivo debe ser una imagen",
1247
1283
  tooLarge: (maxMb) => `El archivo supera el límite de ${maxMb} MB`
1248
1284
  },
1249
- breadcrumbs: { label: "Ruta de navegación" },
1285
+ breadcrumbs: {
1286
+ label: "Ruta de navegación",
1287
+ showHidden: "Mostrar los niveles ocultos"
1288
+ },
1250
1289
  chart: {
1251
1290
  roleDescription: "gráfico",
1252
1291
  lineChart: "Gráfico de líneas",
@@ -1321,7 +1360,13 @@ const esES = {
1321
1360
  },
1322
1361
  dialog: { close: "Cerrar diálogo" },
1323
1362
  drawer: { close: "Cerrar panel" },
1324
- dropdown: { placeholder: "Seleccionar…" },
1363
+ dropdown: {
1364
+ placeholder: "Seleccionar…",
1365
+ clear: "Borrar selección",
1366
+ dialogLabel: "Elegir una opción",
1367
+ searchPlaceholder: "Buscar…",
1368
+ searchEmpty: "Sin coincidencias"
1369
+ },
1325
1370
  fieldLabel: { help: (label) => `Más información sobre ${label}` },
1326
1371
  fileUploader: {
1327
1372
  prompt: "Haz clic o arrastra archivos aquí para subirlos",
@@ -1456,7 +1501,10 @@ const frFR = {
1456
1501
  invalidType: "Le fichier doit être une image",
1457
1502
  tooLarge: (maxMb) => `Le fichier dépasse la limite de ${maxMb} MB`
1458
1503
  },
1459
- breadcrumbs: { label: "Fil d'Ariane" },
1504
+ breadcrumbs: {
1505
+ label: "Fil d'Ariane",
1506
+ showHidden: "Afficher les niveaux masqués"
1507
+ },
1460
1508
  chart: {
1461
1509
  roleDescription: "graphique",
1462
1510
  lineChart: "Graphique linéaire",
@@ -1531,7 +1579,13 @@ const frFR = {
1531
1579
  },
1532
1580
  dialog: { close: "Fermer la boîte de dialogue" },
1533
1581
  drawer: { close: "Fermer le panneau" },
1534
- dropdown: { placeholder: "Sélectionner…" },
1582
+ dropdown: {
1583
+ placeholder: "Sélectionner…",
1584
+ clear: "Effacer la sélection",
1585
+ dialogLabel: "Choisir une option",
1586
+ searchPlaceholder: "Rechercher…",
1587
+ searchEmpty: "Aucun résultat"
1588
+ },
1535
1589
  fieldLabel: { help: (label) => `Plus d’informations sur ${label}` },
1536
1590
  fileUploader: {
1537
1591
  prompt: "Cliquez ou glissez des fichiers ici pour les téléverser",
@@ -1666,7 +1720,10 @@ const he = {
1666
1720
  invalidType: "הקובץ חייב להיות תמונה",
1667
1721
  tooLarge: (maxMb) => `הקובץ חורג ממגבלת ${maxMb} MB`
1668
1722
  },
1669
- breadcrumbs: { label: "נתיב ניווט" },
1723
+ breadcrumbs: {
1724
+ label: "נתיב ניווט",
1725
+ showHidden: "הצגת הרמות המוסתרות"
1726
+ },
1670
1727
  chart: {
1671
1728
  roleDescription: "תרשים",
1672
1729
  lineChart: "תרשים קווי",
@@ -1741,7 +1798,13 @@ const he = {
1741
1798
  },
1742
1799
  dialog: { close: "סגירת חלון" },
1743
1800
  drawer: { close: "סגירת לוח" },
1744
- dropdown: { placeholder: "בחר…" },
1801
+ dropdown: {
1802
+ placeholder: "בחר…",
1803
+ clear: "ניקוי הבחירה",
1804
+ dialogLabel: "בחירת אפשרות",
1805
+ searchPlaceholder: "חיפוש…",
1806
+ searchEmpty: "אין התאמות"
1807
+ },
1745
1808
  fieldLabel: { help: (label) => `מידע נוסף על ${label}` },
1746
1809
  fileUploader: {
1747
1810
  prompt: "לחץ או גרור קבצים לכאן להעלאה",
@@ -1876,7 +1939,10 @@ const hi = {
1876
1939
  invalidType: "फ़ाइल एक छवि होनी चाहिए",
1877
1940
  tooLarge: (maxMb) => `फ़ाइल ${maxMb} MB की सीमा से अधिक है`
1878
1941
  },
1879
- breadcrumbs: { label: "ब्रेडक्रंब" },
1942
+ breadcrumbs: {
1943
+ label: "ब्रेडक्रंब",
1944
+ showHidden: "छिपे हुए स्तर दिखाएँ"
1945
+ },
1880
1946
  chart: {
1881
1947
  roleDescription: "चार्ट",
1882
1948
  lineChart: "लाइन चार्ट",
@@ -1951,7 +2017,13 @@ const hi = {
1951
2017
  },
1952
2018
  dialog: { close: "संवाद बंद करें" },
1953
2019
  drawer: { close: "पैनल बंद करें" },
1954
- dropdown: { placeholder: "चुनें…" },
2020
+ dropdown: {
2021
+ placeholder: "चुनें…",
2022
+ clear: "चयन साफ़ करें",
2023
+ dialogLabel: "एक विकल्प चुनें",
2024
+ searchPlaceholder: "खोजें…",
2025
+ searchEmpty: "कोई मिलान नहीं"
2026
+ },
1955
2027
  fieldLabel: { help: (label) => `अधिक जानकारी: ${label}` },
1956
2028
  fileUploader: {
1957
2029
  prompt: "अपलोड करने के लिए फ़ाइलें यहाँ क्लिक करें या खींचें",
@@ -2086,7 +2158,10 @@ const is = {
2086
2158
  invalidType: "Skráin verður að vera mynd",
2087
2159
  tooLarge: (maxMb) => `Skráin fer yfir ${maxMb} MB mörkin`
2088
2160
  },
2089
- breadcrumbs: { label: "Brauðmolaslóð" },
2161
+ breadcrumbs: {
2162
+ label: "Brauðmolaslóð",
2163
+ showHidden: "Sýna falin stig"
2164
+ },
2090
2165
  chart: {
2091
2166
  roleDescription: "graf",
2092
2167
  lineChart: "Línurit",
@@ -2161,7 +2236,13 @@ const is = {
2161
2236
  },
2162
2237
  dialog: { close: "Loka glugga" },
2163
2238
  drawer: { close: "Loka spjaldi" },
2164
- dropdown: { placeholder: "Veldu…" },
2239
+ dropdown: {
2240
+ placeholder: "Veldu…",
2241
+ clear: "Hreinsa val",
2242
+ dialogLabel: "Velja valkost",
2243
+ searchPlaceholder: "Leita…",
2244
+ searchEmpty: "Engin samsvörun"
2245
+ },
2165
2246
  fieldLabel: { help: (label) => `Nánari upplýsingar: ${label}` },
2166
2247
  fileUploader: {
2167
2248
  prompt: "Smelltu eða dragðu skrár hingað til að hlaða upp",
@@ -2296,7 +2377,10 @@ const nl = {
2296
2377
  invalidType: "Bestand moet een afbeelding zijn",
2297
2378
  tooLarge: (maxMb) => `Bestand overschrijdt de limiet van ${maxMb} MB`
2298
2379
  },
2299
- breadcrumbs: { label: "Broodkruimelnavigatie" },
2380
+ breadcrumbs: {
2381
+ label: "Broodkruimelnavigatie",
2382
+ showHidden: "Verborgen niveaus tonen"
2383
+ },
2300
2384
  chart: {
2301
2385
  roleDescription: "grafiek",
2302
2386
  lineChart: "Lijndiagram",
@@ -2371,7 +2455,13 @@ const nl = {
2371
2455
  },
2372
2456
  dialog: { close: "Dialoogvenster sluiten" },
2373
2457
  drawer: { close: "Paneel sluiten" },
2374
- dropdown: { placeholder: "Selecteer…" },
2458
+ dropdown: {
2459
+ placeholder: "Selecteer…",
2460
+ clear: "Selectie wissen",
2461
+ dialogLabel: "Optie kiezen",
2462
+ searchPlaceholder: "Zoeken…",
2463
+ searchEmpty: "Geen overeenkomsten"
2464
+ },
2375
2465
  fieldLabel: { help: (label) => `Meer informatie over ${label}` },
2376
2466
  fileUploader: {
2377
2467
  prompt: "Klik of sleep bestanden hierheen om te uploaden",
@@ -2506,7 +2596,10 @@ const pl = {
2506
2596
  invalidType: "Plik musi być obrazem",
2507
2597
  tooLarge: (maxMb) => `Plik przekracza limit ${maxMb} MB`
2508
2598
  },
2509
- breadcrumbs: { label: "Ścieżka nawigacji" },
2599
+ breadcrumbs: {
2600
+ label: "Ścieżka nawigacji",
2601
+ showHidden: "Pokaż ukryte poziomy"
2602
+ },
2510
2603
  chart: {
2511
2604
  roleDescription: "wykres",
2512
2605
  lineChart: "Wykres liniowy",
@@ -2581,7 +2674,13 @@ const pl = {
2581
2674
  },
2582
2675
  dialog: { close: "Zamknij okno dialogowe" },
2583
2676
  drawer: { close: "Zamknij panel" },
2584
- dropdown: { placeholder: "Wybierz…" },
2677
+ dropdown: {
2678
+ placeholder: "Wybierz…",
2679
+ clear: "Wyczyść wybór",
2680
+ dialogLabel: "Wybierz opcję",
2681
+ searchPlaceholder: "Szukaj…",
2682
+ searchEmpty: "Brak wyników"
2683
+ },
2585
2684
  fieldLabel: { help: (label) => `Więcej informacji: ${label}` },
2586
2685
  fileUploader: {
2587
2686
  prompt: "Kliknij lub przeciągnij pliki tutaj, aby je przesłać",
@@ -2716,7 +2815,10 @@ const ptBR = {
2716
2815
  invalidType: "O arquivo deve ser uma imagem",
2717
2816
  tooLarge: (maxMb) => `O arquivo excede o limite de ${maxMb} MB`
2718
2817
  },
2719
- breadcrumbs: { label: "Trilha de navegação" },
2818
+ breadcrumbs: {
2819
+ label: "Trilha de navegação",
2820
+ showHidden: "Mostrar os níveis ocultos"
2821
+ },
2720
2822
  chart: {
2721
2823
  roleDescription: "gráfico",
2722
2824
  lineChart: "Gráfico de linhas",
@@ -2791,7 +2893,13 @@ const ptBR = {
2791
2893
  },
2792
2894
  dialog: { close: "Fechar diálogo" },
2793
2895
  drawer: { close: "Fechar painel" },
2794
- dropdown: { placeholder: "Selecione…" },
2896
+ dropdown: {
2897
+ placeholder: "Selecione…",
2898
+ clear: "Limpar seleção",
2899
+ dialogLabel: "Escolher uma opção",
2900
+ searchPlaceholder: "Pesquisar…",
2901
+ searchEmpty: "Nenhuma correspondência"
2902
+ },
2795
2903
  fieldLabel: { help: (label) => `Mais informações sobre ${label}` },
2796
2904
  fileUploader: {
2797
2905
  prompt: "Clique ou arraste arquivos aqui para enviar",
@@ -2926,7 +3034,10 @@ const ru = {
2926
3034
  invalidType: "Файл должен быть изображением",
2927
3035
  tooLarge: (maxMb) => `Файл превышает лимит ${maxMb} MB`
2928
3036
  },
2929
- breadcrumbs: { label: "Навигационная цепочка" },
3037
+ breadcrumbs: {
3038
+ label: "Навигационная цепочка",
3039
+ showHidden: "Показать скрытые уровни"
3040
+ },
2930
3041
  chart: {
2931
3042
  roleDescription: "диаграмма",
2932
3043
  lineChart: "Линейный график",
@@ -3001,7 +3112,13 @@ const ru = {
3001
3112
  },
3002
3113
  dialog: { close: "Закрыть диалог" },
3003
3114
  drawer: { close: "Закрыть панель" },
3004
- dropdown: { placeholder: "Выберите…" },
3115
+ dropdown: {
3116
+ placeholder: "Выберите…",
3117
+ clear: "Очистить выбор",
3118
+ dialogLabel: "Выбор варианта",
3119
+ searchPlaceholder: "Поиск…",
3120
+ searchEmpty: "Нет совпадений"
3121
+ },
3005
3122
  fieldLabel: { help: (label) => `Подробнее: ${label}` },
3006
3123
  fileUploader: {
3007
3124
  prompt: "Нажмите или перетащите файлы сюда для загрузки",
@@ -3136,7 +3253,10 @@ const uk = {
3136
3253
  invalidType: "Файл має бути зображенням",
3137
3254
  tooLarge: (maxMb) => `Файл перевищує ліміт ${maxMb} MB`
3138
3255
  },
3139
- breadcrumbs: { label: "Навігаційний ланцюжок" },
3256
+ breadcrumbs: {
3257
+ label: "Навігаційний ланцюжок",
3258
+ showHidden: "Показати приховані рівні"
3259
+ },
3140
3260
  chart: {
3141
3261
  roleDescription: "діаграма",
3142
3262
  lineChart: "Лінійний графік",
@@ -3211,7 +3331,13 @@ const uk = {
3211
3331
  },
3212
3332
  dialog: { close: "Закрити діалог" },
3213
3333
  drawer: { close: "Закрити панель" },
3214
- dropdown: { placeholder: "Виберіть…" },
3334
+ dropdown: {
3335
+ placeholder: "Виберіть…",
3336
+ clear: "Очистити вибір",
3337
+ dialogLabel: "Виберіть варіант",
3338
+ searchPlaceholder: "Пошук…",
3339
+ searchEmpty: "Немає збігів"
3340
+ },
3215
3341
  fieldLabel: { help: (label) => `Докладніше: ${label}` },
3216
3342
  fileUploader: {
3217
3343
  prompt: "Натисніть або перетягніть файли сюди для завантаження",
@@ -3346,7 +3472,10 @@ const zhCN = {
3346
3472
  invalidType: "文件必须是图片",
3347
3473
  tooLarge: (maxMb) => `文件超过 ${maxMb} MB 限制`
3348
3474
  },
3349
- breadcrumbs: { label: "面包屑导航" },
3475
+ breadcrumbs: {
3476
+ label: "面包屑导航",
3477
+ showHidden: "显示隐藏的层级"
3478
+ },
3350
3479
  chart: {
3351
3480
  roleDescription: "图表",
3352
3481
  lineChart: "折线图",
@@ -3421,7 +3550,13 @@ const zhCN = {
3421
3550
  },
3422
3551
  dialog: { close: "关闭对话框" },
3423
3552
  drawer: { close: "关闭面板" },
3424
- dropdown: { placeholder: "请选择…" },
3553
+ dropdown: {
3554
+ placeholder: "请选择…",
3555
+ clear: "清除选择",
3556
+ dialogLabel: "选择一个选项",
3557
+ searchPlaceholder: "搜索…",
3558
+ searchEmpty: "无匹配项"
3559
+ },
3425
3560
  fieldLabel: { help: (label) => `关于 ${label} 的更多信息` },
3426
3561
  fileUploader: {
3427
3562
  prompt: "点击或拖动文件到此处上传",
@@ -7221,12 +7356,14 @@ var TooltipDirective = class TooltipDirective {
7221
7356
  flip = input(true, ...ngDevMode ? [{ debugName: "flip" }] : /* istanbul ignore next */ []);
7222
7357
  whenClipped = input(false, ...ngDevMode ? [{ debugName: "whenClipped" }] : /* istanbul ignore next */ []);
7223
7358
  maxWidth = input(200, ...ngDevMode ? [{ debugName: "maxWidth" }] : /* istanbul ignore next */ []);
7359
+ showDelay = input(0, ...ngDevMode ? [{ debugName: "showDelay" }] : /* istanbul ignore next */ []);
7224
7360
  dismissDelay = input(150, ...ngDevMode ? [{ debugName: "dismissDelay" }] : /* istanbul ignore next */ []);
7225
7361
  tooltipOpen = input(null, ...ngDevMode ? [{ debugName: "tooltipOpen" }] : /* istanbul ignore next */ []);
7226
7362
  tooltipEl = null;
7227
7363
  placedPosition = "top";
7228
7364
  templateView = null;
7229
7365
  scrollable = false;
7366
+ showTimer = null;
7230
7367
  hideTimer = null;
7231
7368
  pointerInside = false;
7232
7369
  tooltipId = `ea-tooltip-${Math.random().toString(36).slice(2, 9)}`;
@@ -7234,7 +7371,7 @@ var TooltipDirective = class TooltipDirective {
7234
7371
  showHandler = () => {
7235
7372
  if (this.controlled()) return;
7236
7373
  this.pointerInside = true;
7237
- this.show();
7374
+ this.requestShow();
7238
7375
  };
7239
7376
  pointerLeaveHandler = () => {
7240
7377
  if (this.controlled()) return;
@@ -7250,7 +7387,7 @@ var TooltipDirective = class TooltipDirective {
7250
7387
  focusHandler = (event) => {
7251
7388
  if (this.controlled()) return;
7252
7389
  const target = event.target;
7253
- if (!this.supportsFocusVisible || target.matches(":focus-visible")) this.show();
7390
+ if (!this.supportsFocusVisible || target.matches(":focus-visible")) this.requestShow();
7254
7391
  };
7255
7392
  keydownHandler = (event) => {
7256
7393
  if (event.key === "Escape" && this.tooltipEl) this.hide();
@@ -7310,7 +7447,26 @@ var TooltipDirective = class TooltipDirective {
7310
7447
  this.hide();
7311
7448
  }
7312
7449
  }
7450
+ requestShow() {
7451
+ const delay = this.showDelay();
7452
+ if (delay <= 0 || this.tooltipEl) {
7453
+ this.show();
7454
+ return;
7455
+ }
7456
+ if (this.showTimer !== null) return;
7457
+ this.showTimer = setTimeout(() => {
7458
+ this.showTimer = null;
7459
+ this.show();
7460
+ }, delay);
7461
+ }
7462
+ cancelPendingShow() {
7463
+ if (this.showTimer !== null) {
7464
+ clearTimeout(this.showTimer);
7465
+ this.showTimer = null;
7466
+ }
7467
+ }
7313
7468
  show() {
7469
+ this.cancelPendingShow();
7314
7470
  if (this.tooltipEl) {
7315
7471
  this.cancelPendingHide();
7316
7472
  return;
@@ -7378,6 +7534,7 @@ var TooltipDirective = class TooltipDirective {
7378
7534
  }
7379
7535
  }
7380
7536
  hide() {
7537
+ this.cancelPendingShow();
7381
7538
  this.cancelPendingHide();
7382
7539
  this.detachRepositionListeners();
7383
7540
  if (this.rafId !== null) {
@@ -7547,6 +7704,13 @@ var TooltipDirective = class TooltipDirective {
7547
7704
  isRequired: false,
7548
7705
  transformFunction: null
7549
7706
  },
7707
+ showDelay: {
7708
+ classPropertyName: "showDelay",
7709
+ publicName: "showDelay",
7710
+ isSignal: true,
7711
+ isRequired: false,
7712
+ transformFunction: null
7713
+ },
7550
7714
  dismissDelay: {
7551
7715
  classPropertyName: "dismissDelay",
7552
7716
  publicName: "dismissDelay",
@@ -7616,6 +7780,14 @@ i0.ɵɵngDeclareClassMetadata({
7616
7780
  required: false
7617
7781
  }]
7618
7782
  }],
7783
+ showDelay: [{
7784
+ type: i0.Input,
7785
+ args: [{
7786
+ isSignal: true,
7787
+ alias: "showDelay",
7788
+ required: false
7789
+ }]
7790
+ }],
7619
7791
  dismissDelay: [{
7620
7792
  type: i0.Input,
7621
7793
  args: [{
@@ -8326,6 +8498,7 @@ var AvatarEditorComponent = class AvatarEditorComponent {
8326
8498
  "flip",
8327
8499
  "whenClipped",
8328
8500
  "maxWidth",
8501
+ "showDelay",
8329
8502
  "dismissDelay",
8330
8503
  "tooltipOpen"
8331
8504
  ]
@@ -9580,6 +9753,7 @@ var BarChartComponent = class BarChartComponent {
9580
9753
  "flip",
9581
9754
  "whenClipped",
9582
9755
  "maxWidth",
9756
+ "showDelay",
9583
9757
  "dismissDelay",
9584
9758
  "tooltipOpen"
9585
9759
  ]
@@ -9811,17 +9985,169 @@ i0.ɵɵngDeclareClassMetadata({
9811
9985
  }]
9812
9986
  }]
9813
9987
  });
9988
+ var MoreHorizontalIconComponent = class MoreHorizontalIconComponent extends IconComponentBase {
9989
+ static slug = "more-horizontal";
9990
+ static category = "feather";
9991
+ static tags = [
9992
+ "more-horizontal",
9993
+ "more",
9994
+ "horizontal",
9995
+ "ellipsis",
9996
+ "menu",
9997
+ "dots",
9998
+ "options",
9999
+ "plus",
10000
+ "más",
10001
+ "περισσότερα",
10002
+ "więcej"
10003
+ ];
10004
+ static ɵfac = i0.ɵɵngDeclareFactory({
10005
+ minVersion: "12.0.0",
10006
+ version: "22.2.1",
10007
+ ngImport: i0,
10008
+ type: MoreHorizontalIconComponent,
10009
+ deps: null,
10010
+ target: i0.ɵɵFactoryTarget.Component
10011
+ });
10012
+ static ɵcmp = i0.ɵɵngDeclareComponent({
10013
+ minVersion: "14.0.0",
10014
+ version: "22.2.1",
10015
+ type: MoreHorizontalIconComponent,
10016
+ isStandalone: true,
10017
+ selector: "ea-icon-more-horizontal",
10018
+ usesInheritance: true,
10019
+ ngImport: i0,
10020
+ template: `
10021
+ <svg
10022
+ viewBox="0 0 24 24"
10023
+ fill="none"
10024
+ stroke="currentColor"
10025
+ [attr.stroke-width]="strokeWidth()"
10026
+ stroke-linecap="round"
10027
+ stroke-linejoin="round"
10028
+ aria-hidden="true"
10029
+ width="100%"
10030
+ height="100%">
10031
+ <circle
10032
+ cx="12"
10033
+ cy="12"
10034
+ r="1" />
10035
+ <circle
10036
+ cx="19"
10037
+ cy="12"
10038
+ r="1" />
10039
+ <circle
10040
+ cx="5"
10041
+ cy="12"
10042
+ r="1" />
10043
+ </svg>
10044
+ `,
10045
+ isInline: true,
10046
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
10047
+ });
10048
+ };
10049
+ i0.ɵɵngDeclareClassMetadata({
10050
+ minVersion: "12.0.0",
10051
+ version: "22.2.1",
10052
+ ngImport: i0,
10053
+ type: MoreHorizontalIconComponent,
10054
+ decorators: [{
10055
+ type: Component,
10056
+ args: [{
10057
+ selector: "ea-icon-more-horizontal",
10058
+ changeDetection: ChangeDetectionStrategy.OnPush,
10059
+ template: `
10060
+ <svg
10061
+ viewBox="0 0 24 24"
10062
+ fill="none"
10063
+ stroke="currentColor"
10064
+ [attr.stroke-width]="strokeWidth()"
10065
+ stroke-linecap="round"
10066
+ stroke-linejoin="round"
10067
+ aria-hidden="true"
10068
+ width="100%"
10069
+ height="100%">
10070
+ <circle
10071
+ cx="12"
10072
+ cy="12"
10073
+ r="1" />
10074
+ <circle
10075
+ cx="19"
10076
+ cy="12"
10077
+ r="1" />
10078
+ <circle
10079
+ cx="5"
10080
+ cy="12"
10081
+ r="1" />
10082
+ </svg>
10083
+ `
10084
+ }]
10085
+ }]
10086
+ });
9814
10087
  var BreadcrumbsComponent = class BreadcrumbsComponent {
9815
10088
  i18n = inject(EagamiI18nService);
10089
+ popover = viewChild(PopoverComponent, ...ngDevMode ? [{ debugName: "popover" }] : /* istanbul ignore next */ []);
10090
+ expandEl = viewChild("expandEl", ...ngDevMode ? [{ debugName: "expandEl" }] : /* istanbul ignore next */ []);
10091
+ menuEl = viewChild("menuEl", ...ngDevMode ? [{ debugName: "menuEl" }] : /* istanbul ignore next */ []);
10092
+ sizerEl = viewChild("sizerEl", ...ngDevMode ? [{ debugName: "sizerEl" }] : /* istanbul ignore next */ []);
10093
+ sizerItemEls = viewChildren("sizerItemEl", ...ngDevMode ? [{ debugName: "sizerItemEls" }] : /* istanbul ignore next */ []);
10094
+ sizerExpandEl = viewChild("sizerExpandEl", ...ngDevMode ? [{ debugName: "sizerExpandEl" }] : /* istanbul ignore next */ []);
9816
10095
  items = input([], ...ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []);
9817
10096
  separator = input("chevron", ...ngDevMode ? [{ debugName: "separator" }] : /* istanbul ignore next */ []);
9818
10097
  size = input("md", ...ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []);
10098
+ maxItems = input(void 0, ...ngDevMode ? [{ debugName: "maxItems" }] : /* istanbul ignore next */ []);
10099
+ overflow = input("menu", ...ngDevMode ? [{ debugName: "overflow" }] : /* istanbul ignore next */ []);
9819
10100
  ariaLabel = input(void 0, {
9820
10101
  ...ngDevMode ? { debugName: "ariaLabel" } : /* istanbul ignore next */ {},
9821
10102
  alias: "aria-label"
9822
10103
  });
9823
10104
  clicked = output();
10105
+ menuId = uniqueId("ea-breadcrumbs-menu");
10106
+ menuOpen = signal(false, ...ngDevMode ? [{ debugName: "menuOpen" }] : /* istanbul ignore next */ []);
10107
+ menuPinned = false;
10108
+ menuFocusPending = signal(false, ...ngDevMode ? [{ debugName: "menuFocusPending" }] : /* istanbul ignore next */ []);
10109
+ crowdedOut = signal(0, ...ngDevMode ? [{ debugName: "crowdedOut" }] : /* istanbul ignore next */ []);
9824
10110
  resolvedAriaLabel = computed(() => this.ariaLabel() ?? this.i18n.messages().breadcrumbs.label, ...ngDevMode ? [{ debugName: "resolvedAriaLabel" }] : /* istanbul ignore next */ []);
10111
+ indexed = computed(() => this.items().map((item, index) => ({
10112
+ item,
10113
+ index
10114
+ })), ...ngDevMode ? [{ debugName: "indexed" }] : /* istanbul ignore next */ []);
10115
+ menuCount = computed(() => {
10116
+ const count = this.items().length;
10117
+ const max = this.maxItems();
10118
+ const overMax = max ? count - Math.max(2, max) : 0;
10119
+ const crowdedOut = this.overflow() === "menu" ? this.crowdedOut() : 0;
10120
+ return Math.max(0, Math.min(count - 2, Math.max(overMax, crowdedOut)));
10121
+ }, ...ngDevMode ? [{ debugName: "menuCount" }] : /* istanbul ignore next */ []);
10122
+ crumbs = computed(() => {
10123
+ const all = this.indexed();
10124
+ const inMenu = this.menuCount();
10125
+ return inMenu > 0 ? [all[0], ...all.slice(inMenu + 1)] : all;
10126
+ }, ...ngDevMode ? [{ debugName: "crumbs" }] : /* istanbul ignore next */ []);
10127
+ menuCrumbs = computed(() => this.indexed().slice(1, 1 + this.menuCount()), ...ngDevMode ? [{ debugName: "menuCrumbs" }] : /* istanbul ignore next */ []);
10128
+ constructor() {
10129
+ afterRenderEffect((onCleanup) => {
10130
+ const sizer = this.sizerEl()?.nativeElement;
10131
+ const expand = this.sizerExpandEl()?.nativeElement;
10132
+ const levels = this.sizerItemEls();
10133
+ if (!sizer || !expand || typeof ResizeObserver === "undefined") return;
10134
+ const observer = new ResizeObserver(() => this.fit());
10135
+ observer.observe(sizer);
10136
+ observer.observe(expand);
10137
+ for (const level of levels) observer.observe(level.nativeElement);
10138
+ onCleanup(() => observer.disconnect());
10139
+ untracked(() => this.fit());
10140
+ });
10141
+ afterRenderEffect(() => {
10142
+ if (this.menuFocusPending() && this.popover()?.isPositioned()) untracked(() => {
10143
+ this.menuFocusPending.set(false);
10144
+ this.menuItems()[0]?.focus();
10145
+ });
10146
+ });
10147
+ effect(() => {
10148
+ if (this.menuCrumbs().length === 0) untracked(() => this.closeMenu());
10149
+ });
10150
+ }
9825
10151
  isLast(index) {
9826
10152
  return index === this.items().length - 1;
9827
10153
  }
@@ -9836,6 +10162,94 @@ var BreadcrumbsComponent = class BreadcrumbsComponent {
9836
10162
  event
9837
10163
  });
9838
10164
  }
10165
+ toggleMenu() {
10166
+ if (this.menuOpen() && this.menuPinned) this.closeMenu();
10167
+ else this.openMenu(true);
10168
+ }
10169
+ handleExpandKeydown(event) {
10170
+ if (event.key === "ArrowDown") {
10171
+ event.preventDefault();
10172
+ this.openMenu(true);
10173
+ } else if (event.key === "Escape" && this.menuOpen()) {
10174
+ event.preventDefault();
10175
+ this.closeMenu();
10176
+ }
10177
+ }
10178
+ handleExpandEnter() {
10179
+ if (!this.menuOpen()) this.openMenu(false);
10180
+ }
10181
+ handleHoverLeave(event) {
10182
+ if (this.menuPinned) return;
10183
+ const next = event.relatedTarget;
10184
+ if (!(next instanceof Node && (this.expandEl()?.nativeElement.contains(next) || this.menuEl()?.nativeElement.contains(next)))) this.closeMenu();
10185
+ }
10186
+ handleMenuClick(crumb, event) {
10187
+ this.clicked.emit({
10188
+ item: crumb.item,
10189
+ index: crumb.index,
10190
+ event
10191
+ });
10192
+ this.closeMenu(true);
10193
+ }
10194
+ handleMenuKeydown(event) {
10195
+ const items = this.menuItems();
10196
+ const current = items.findIndex((item) => item === document.activeElement);
10197
+ switch (event.key) {
10198
+ case "ArrowDown":
10199
+ event.preventDefault();
10200
+ items[current < items.length - 1 ? current + 1 : 0]?.focus();
10201
+ break;
10202
+ case "ArrowUp":
10203
+ event.preventDefault();
10204
+ items[current > 0 ? current - 1 : items.length - 1]?.focus();
10205
+ break;
10206
+ case "Home":
10207
+ event.preventDefault();
10208
+ items[0]?.focus();
10209
+ break;
10210
+ case "End":
10211
+ event.preventDefault();
10212
+ items[items.length - 1]?.focus();
10213
+ break;
10214
+ case "Escape":
10215
+ event.preventDefault();
10216
+ this.closeMenu(true);
10217
+ break;
10218
+ case "Tab": this.closeMenu(true);
10219
+ }
10220
+ }
10221
+ closeMenu(restoreFocus = false) {
10222
+ if (!this.menuOpen()) return;
10223
+ this.menuOpen.set(false);
10224
+ this.menuPinned = false;
10225
+ this.menuFocusPending.set(false);
10226
+ if (restoreFocus) this.expandEl()?.nativeElement.focus();
10227
+ }
10228
+ openMenu(pinned) {
10229
+ this.menuPinned = pinned;
10230
+ this.menuOpen.set(true);
10231
+ this.menuFocusPending.set(pinned);
10232
+ }
10233
+ menuItems() {
10234
+ const menu = this.menuEl()?.nativeElement;
10235
+ return menu ? Array.from(menu.querySelectorAll("[role=\"menuitem\"]:not([aria-disabled])")) : [];
10236
+ }
10237
+ fit() {
10238
+ const sizer = this.sizerEl()?.nativeElement;
10239
+ const expand = this.sizerExpandEl()?.nativeElement;
10240
+ if (!sizer || !expand) return;
10241
+ const widths = this.sizerItemEls().map((level) => level.nativeElement.getBoundingClientRect().width);
10242
+ const gap = parseFloat(getComputedStyle(sizer).columnGap) || 0;
10243
+ const available = sizer.getBoundingClientRect().width;
10244
+ let needed = widths.reduce((sum, width) => sum + width + gap, -gap);
10245
+ let crowdedOut = 0;
10246
+ while (crowdedOut < widths.length - 2 && needed > available + .5) {
10247
+ crowdedOut++;
10248
+ needed -= widths[crowdedOut] + gap;
10249
+ if (crowdedOut === 1) needed += expand.getBoundingClientRect().width + gap;
10250
+ }
10251
+ this.crowdedOut.set(crowdedOut);
10252
+ }
9839
10253
  static ɵfac = i0.ɵɵngDeclareFactory({
9840
10254
  minVersion: "12.0.0",
9841
10255
  version: "22.2.1",
@@ -9872,6 +10286,20 @@ var BreadcrumbsComponent = class BreadcrumbsComponent {
9872
10286
  isRequired: false,
9873
10287
  transformFunction: null
9874
10288
  },
10289
+ maxItems: {
10290
+ classPropertyName: "maxItems",
10291
+ publicName: "maxItems",
10292
+ isSignal: true,
10293
+ isRequired: false,
10294
+ transformFunction: null
10295
+ },
10296
+ overflow: {
10297
+ classPropertyName: "overflow",
10298
+ publicName: "overflow",
10299
+ isSignal: true,
10300
+ isRequired: false,
10301
+ transformFunction: null
10302
+ },
9875
10303
  ariaLabel: {
9876
10304
  classPropertyName: "ariaLabel",
9877
10305
  publicName: "aria-label",
@@ -9881,14 +10309,100 @@ var BreadcrumbsComponent = class BreadcrumbsComponent {
9881
10309
  }
9882
10310
  },
9883
10311
  outputs: { clicked: "clicked" },
10312
+ viewQueries: [
10313
+ {
10314
+ propertyName: "popover",
10315
+ first: true,
10316
+ predicate: PopoverComponent,
10317
+ descendants: true,
10318
+ isSignal: true
10319
+ },
10320
+ {
10321
+ propertyName: "expandEl",
10322
+ first: true,
10323
+ predicate: ["expandEl"],
10324
+ descendants: true,
10325
+ isSignal: true
10326
+ },
10327
+ {
10328
+ propertyName: "menuEl",
10329
+ first: true,
10330
+ predicate: ["menuEl"],
10331
+ descendants: true,
10332
+ isSignal: true
10333
+ },
10334
+ {
10335
+ propertyName: "sizerEl",
10336
+ first: true,
10337
+ predicate: ["sizerEl"],
10338
+ descendants: true,
10339
+ isSignal: true
10340
+ },
10341
+ {
10342
+ propertyName: "sizerItemEls",
10343
+ predicate: ["sizerItemEl"],
10344
+ descendants: true,
10345
+ isSignal: true
10346
+ },
10347
+ {
10348
+ propertyName: "sizerExpandEl",
10349
+ first: true,
10350
+ predicate: ["sizerExpandEl"],
10351
+ descendants: true,
10352
+ isSignal: true
10353
+ }
10354
+ ],
9884
10355
  ngImport: i0,
9885
- template: "<nav\n class=\"ea-breadcrumbs ea-breadcrumbs--{{ size() }}\"\n [attr.aria-label]=\"resolvedAriaLabel()\">\n <ol class=\"ea-breadcrumbs__list\">\n @for (item of items(); track $index; let i = $index; let last = $last) {\n <li class=\"ea-breadcrumbs__item\">\n @if (last) {\n <span\n class=\"ea-breadcrumbs__current\"\n aria-current=\"page\">\n {{ item.label }}\n </span>\n } @else if (item.disabled) {\n <span class=\"ea-breadcrumbs__link ea-breadcrumbs__link--disabled\">\n {{ item.label }}\n </span>\n } @else if (item.href) {\n <a\n class=\"ea-breadcrumbs__link\"\n [href]=\"item.href\"\n (click)=\"handleClick(item, i, $event)\">\n {{ item.label }}\n </a>\n } @else {\n <button\n type=\"button\"\n class=\"ea-breadcrumbs__link ea-breadcrumbs__link--button\"\n (click)=\"handleClick(item, i, $event)\">\n {{ item.label }}\n </button>\n }\n\n @if (!last) {\n @if (separator() === 'chevron') {\n <ea-icon-chevron-right\n class=\"ea-breadcrumbs__separator ea-rtl-flip\"\n aria-hidden=\"true\" />\n } @else {\n <span\n class=\"ea-breadcrumbs__separator ea-breadcrumbs__separator--slash\"\n aria-hidden=\"true\">\n /\n </span>\n }\n }\n </li>\n }\n </ol>\n</nav>\n",
9886
- styles: [".ea-breadcrumbs{font-family:var(--font-family-sans);line-height:var(--line-height-normal);color:var(--color-text-secondary)}.ea-breadcrumbs--2xs{font-size:var(--font-size-2xs)}.ea-breadcrumbs--xs{font-size:var(--font-size-xs)}.ea-breadcrumbs--sm{font-size:var(--font-size-sm)}.ea-breadcrumbs--md{font-size:var(--font-size-md)}.ea-breadcrumbs--lg{font-size:var(--font-size-lg)}.ea-breadcrumbs--xl{font-size:var(--font-size-xl)}.ea-breadcrumbs__list{display:flex;flex-wrap:wrap;align-items:center;gap:.25em;padding:0;margin:0;list-style:none}.ea-breadcrumbs__item{display:inline-flex;align-items:center;gap:.25em;min-width:0}.ea-breadcrumbs__link{padding:.125em .25em;border:none;border-radius:var(--radius-sm);background:transparent;color:var(--color-text-secondary);font-family:inherit;font-size:inherit;text-decoration:none;cursor:pointer;transition:var(--transition-colors)}.ea-breadcrumbs__link:hover:not(.ea-breadcrumbs__link--disabled){color:var(--color-text-primary);text-decoration:underline}.ea-breadcrumbs__link:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-breadcrumbs__link:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-breadcrumbs__link--disabled{color:var(--color-text-disabled);cursor:default}.ea-breadcrumbs__current{padding:.125em .25em;font-weight:var(--font-weight-medium);color:var(--color-text-primary)}.ea-breadcrumbs__separator{display:inline-flex;align-items:center;justify-content:center;width:1em;height:1em;color:var(--color-text-tertiary);flex-shrink:0;-webkit-user-select:none;user-select:none}.ea-breadcrumbs__separator--slash{width:auto;height:auto}\n"],
9887
- dependencies: [{
9888
- kind: "component",
9889
- type: ChevronRightIconComponent,
9890
- selector: "ea-icon-chevron-right"
9891
- }],
10356
+ template: "<nav\n class=\"ea-breadcrumbs ea-breadcrumbs--{{ size() }} ea-breadcrumbs--{{ overflow() }}\"\n [attr.aria-label]=\"resolvedAriaLabel()\">\n <ol class=\"ea-breadcrumbs__list\">\n @for (crumb of crumbs(); track crumb.index; let first = $first; let last = $last) {\n <li class=\"ea-breadcrumbs__item\">\n @if (last) {\n <span\n class=\"ea-breadcrumbs__current\"\n aria-current=\"page\">\n {{ crumb.item.label }}\n </span>\n } @else if (crumb.item.disabled) {\n <span class=\"ea-breadcrumbs__link ea-breadcrumbs__link--disabled\">\n {{ crumb.item.label }}\n </span>\n } @else if (crumb.item.href) {\n <a\n class=\"ea-breadcrumbs__link\"\n [href]=\"crumb.item.href\"\n (click)=\"handleClick(crumb.item, crumb.index, $event)\">\n {{ crumb.item.label }}\n </a>\n } @else {\n <button\n type=\"button\"\n class=\"ea-breadcrumbs__link ea-breadcrumbs__link--button\"\n (click)=\"handleClick(crumb.item, crumb.index, $event)\">\n {{ crumb.item.label }}\n </button>\n }\n\n @if (!last) {\n <ng-container [ngTemplateOutlet]=\"separatorTpl\" />\n }\n </li>\n @if (first && menuCrumbs().length > 0) {\n <li class=\"ea-breadcrumbs__item\">\n <button\n #expandEl\n type=\"button\"\n class=\"ea-breadcrumbs__link ea-breadcrumbs__link--button ea-breadcrumbs__expand\"\n aria-haspopup=\"menu\"\n [attr.aria-expanded]=\"menuOpen()\"\n [attr.aria-controls]=\"menuOpen() ? menuId : null\"\n [attr.aria-label]=\"i18n.messages().breadcrumbs.showHidden\"\n (click)=\"toggleMenu()\"\n (keydown)=\"handleExpandKeydown($event)\"\n (mouseenter)=\"handleExpandEnter()\"\n (mouseleave)=\"handleHoverLeave($event)\">\n <ea-icon-more-horizontal aria-hidden=\"true\" />\n </button>\n <ng-container [ngTemplateOutlet]=\"separatorTpl\" />\n </li>\n }\n }\n </ol>\n\n @if (overflow() === 'menu') {\n <div\n #sizerEl\n class=\"ea-breadcrumbs__sizer\"\n aria-hidden=\"true\">\n @for (item of items(); track $index; let last = $last) {\n <span\n #sizerItemEl\n class=\"ea-breadcrumbs__item\">\n <span [class]=\"last ? 'ea-breadcrumbs__current' : 'ea-breadcrumbs__link'\">\n {{ item.label }}\n </span>\n @if (!last) {\n <ng-container [ngTemplateOutlet]=\"separatorTpl\" />\n }\n </span>\n }\n <span\n #sizerExpandEl\n class=\"ea-breadcrumbs__item ea-breadcrumbs__sizer-expand\">\n <span class=\"ea-breadcrumbs__link ea-breadcrumbs__expand\">\n <ea-icon-more-horizontal />\n </span>\n <ng-container [ngTemplateOutlet]=\"separatorTpl\" />\n </span>\n </div>\n }\n</nav>\n\n<ea-popover\n [anchor]=\"expandEl()\"\n [open]=\"menuOpen()\"\n placement=\"bottom-start\"\n role=\"menu\"\n [surfaceId]=\"menuId\"\n [aria-label]=\"i18n.messages().breadcrumbs.showHidden\"\n [closeOnEscape]=\"false\"\n (closeRequested)=\"closeMenu()\">\n <div\n #menuEl\n class=\"ea-breadcrumbs__menu ea-breadcrumbs__menu--{{ size() }}\"\n role=\"none\"\n (keydown)=\"handleMenuKeydown($event)\"\n (mouseleave)=\"handleHoverLeave($event)\">\n <div\n class=\"ea-breadcrumbs__menu-list\"\n role=\"none\">\n @for (crumb of menuCrumbs(); track crumb.index) {\n @if (crumb.item.disabled) {\n <span\n class=\"ea-breadcrumbs__menu-item ea-breadcrumbs__menu-item--disabled\"\n role=\"menuitem\"\n aria-disabled=\"true\">\n {{ crumb.item.label }}\n </span>\n } @else if (crumb.item.href) {\n <a\n class=\"ea-breadcrumbs__menu-item\"\n role=\"menuitem\"\n tabindex=\"-1\"\n [href]=\"crumb.item.href\"\n (click)=\"handleMenuClick(crumb, $event)\">\n {{ crumb.item.label }}\n </a>\n } @else {\n <button\n type=\"button\"\n class=\"ea-breadcrumbs__menu-item\"\n role=\"menuitem\"\n tabindex=\"-1\"\n (click)=\"handleMenuClick(crumb, $event)\">\n {{ crumb.item.label }}\n </button>\n }\n }\n </div>\n </div>\n</ea-popover>\n\n<ng-template #separatorTpl>\n @if (separator() === 'chevron') {\n <ea-icon-chevron-right\n class=\"ea-breadcrumbs__separator ea-rtl-flip\"\n aria-hidden=\"true\" />\n } @else {\n <span\n class=\"ea-breadcrumbs__separator ea-breadcrumbs__separator--slash\"\n aria-hidden=\"true\">\n /\n </span>\n }\n</ng-template>\n",
10357
+ styles: ["ea-breadcrumbs{display:block;min-width:0}.ea-breadcrumbs{font-family:var(--font-family-sans);line-height:var(--line-height-normal);color:var(--color-text-secondary)}.ea-breadcrumbs--2xs{font-size:var(--font-size-2xs)}.ea-breadcrumbs--xs{font-size:var(--font-size-xs)}.ea-breadcrumbs--sm{font-size:var(--font-size-sm)}.ea-breadcrumbs--md{font-size:var(--font-size-md)}.ea-breadcrumbs--lg{font-size:var(--font-size-lg)}.ea-breadcrumbs--xl{font-size:var(--font-size-xl)}.ea-breadcrumbs__list{display:flex;align-items:center;gap:.25em;padding:0;margin:0;list-style:none}.ea-breadcrumbs__item{display:inline-flex;flex-shrink:0;align-items:center;gap:.25em;min-width:0;white-space:nowrap}.ea-breadcrumbs--menu .ea-breadcrumbs__list>.ea-breadcrumbs__item:last-child{flex-shrink:1}.ea-breadcrumbs--scroll .ea-breadcrumbs__list{overflow-x:auto;padding:var(--space-1);margin:calc(-1 * var(--space-1))}.ea-breadcrumbs__sizer{position:relative;overflow:hidden;visibility:hidden;display:flex;flex-wrap:wrap;gap:.25em;height:0}.ea-breadcrumbs__sizer-expand{position:absolute;top:0;inset-inline-start:0}.ea-breadcrumbs__link{padding:.125em .25em;border:none;border-radius:var(--radius-sm);background:transparent;color:var(--color-text-secondary);font-family:inherit;font-size:inherit;text-decoration:none;cursor:pointer;transition:var(--transition-colors)}.ea-breadcrumbs__link:hover:not(.ea-breadcrumbs__link--disabled){color:var(--color-text-primary);text-decoration:underline}.ea-breadcrumbs__link:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-breadcrumbs__link:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-breadcrumbs__link--disabled{color:var(--color-text-disabled);cursor:default}.ea-breadcrumbs__expand{display:inline-flex;align-items:center}.ea-breadcrumbs__current{overflow:hidden;min-width:0;padding:.125em .25em;text-overflow:ellipsis;font-weight:var(--font-weight-medium);color:var(--color-text-primary)}.ea-breadcrumbs__separator{display:inline-flex;align-items:center;justify-content:center;width:1em;height:1em;color:var(--color-text-tertiary);flex-shrink:0;-webkit-user-select:none;user-select:none}.ea-breadcrumbs__separator--slash{width:auto;height:auto}.ea-breadcrumbs__menu{position:relative}.ea-breadcrumbs__menu--2xs{font-size:var(--font-size-2xs)}.ea-breadcrumbs__menu--xs{font-size:var(--font-size-xs)}.ea-breadcrumbs__menu--sm{font-size:var(--font-size-sm)}.ea-breadcrumbs__menu--md{font-size:var(--font-size-md)}.ea-breadcrumbs__menu--lg{font-size:var(--font-size-lg)}.ea-breadcrumbs__menu--xl{font-size:var(--font-size-xl)}.ea-breadcrumbs__menu:before,.ea-breadcrumbs__menu:after{position:absolute;right:0;left:0;height:var(--space-1);content:\"\"}.ea-breadcrumbs__menu:before{bottom:100%}.ea-breadcrumbs__menu:after{top:100%}.ea-breadcrumbs__menu-list{overflow-y:auto;min-width:10em;padding:.25em 0;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-lg)}@media(forced-colors:active){.ea-breadcrumbs__menu-list{border:1px solid CanvasText}}.ea-breadcrumbs__menu-list{max-height:20rem;background-color:var(--color-bg-elevated)}.ea-breadcrumbs__menu-item{display:flex;align-items:center;gap:.5em;width:100%;padding:.5em .75em;font-size:inherit;text-align:start;font-family:var(--font-family-sans);border:none;background:transparent;color:var(--color-text-primary);cursor:pointer;transition:var(--transition-colors)}.ea-breadcrumbs__menu-item:hover:not(.ea-breadcrumbs__menu-item--disabled),.ea-breadcrumbs__menu-item:focus-visible:not(.ea-breadcrumbs__menu-item--disabled){background-color:var(--color-state-hover)}@media(forced-colors:active){.ea-breadcrumbs__menu-item:hover:not(.ea-breadcrumbs__menu-item--disabled),.ea-breadcrumbs__menu-item:focus-visible:not(.ea-breadcrumbs__menu-item--disabled){background-color:Highlight;color:HighlightText}}.ea-breadcrumbs__menu-item:focus-visible{outline:none}.ea-breadcrumbs__menu-item{text-decoration:none}.ea-breadcrumbs__menu-item--disabled{color:var(--color-text-disabled);cursor:default}\n"],
10358
+ dependencies: [
10359
+ {
10360
+ kind: "component",
10361
+ type: ChevronRightIconComponent,
10362
+ selector: "ea-icon-chevron-right"
10363
+ },
10364
+ {
10365
+ kind: "component",
10366
+ type: MoreHorizontalIconComponent,
10367
+ selector: "ea-icon-more-horizontal"
10368
+ },
10369
+ {
10370
+ kind: "directive",
10371
+ type: NgTemplateOutlet,
10372
+ selector: "[ngTemplateOutlet]",
10373
+ inputs: [
10374
+ "ngTemplateOutletContext",
10375
+ "ngTemplateOutlet",
10376
+ "ngTemplateOutletInjector"
10377
+ ]
10378
+ },
10379
+ {
10380
+ kind: "component",
10381
+ type: PopoverComponent,
10382
+ selector: "ea-popover",
10383
+ inputs: [
10384
+ "anchor",
10385
+ "open",
10386
+ "placement",
10387
+ "anchorPoint",
10388
+ "role",
10389
+ "aria-label",
10390
+ "aria-labelledby",
10391
+ "trapFocus",
10392
+ "surfaceId",
10393
+ "offset",
10394
+ "flip",
10395
+ "clamp",
10396
+ "matchAnchorWidth",
10397
+ "maxWidth",
10398
+ "closeOnOutsideClick",
10399
+ "closeOnEscape",
10400
+ "scrollBehavior",
10401
+ "contextMenu"
10402
+ ],
10403
+ outputs: ["closeRequested", "openRequested"]
10404
+ }
10405
+ ],
9892
10406
  changeDetection: i0.ChangeDetectionStrategy.OnPush,
9893
10407
  encapsulation: i0.ViewEncapsulation.None
9894
10408
  });
@@ -9902,14 +10416,44 @@ i0.ɵɵngDeclareClassMetadata({
9902
10416
  type: Component,
9903
10417
  args: [{
9904
10418
  selector: "ea-breadcrumbs",
9905
- imports: [ChevronRightIconComponent],
10419
+ imports: [
10420
+ ChevronRightIconComponent,
10421
+ MoreHorizontalIconComponent,
10422
+ NgTemplateOutlet,
10423
+ PopoverComponent
10424
+ ],
9906
10425
  changeDetection: ChangeDetectionStrategy.OnPush,
9907
10426
  encapsulation: ViewEncapsulation.None,
9908
- template: "<nav\n class=\"ea-breadcrumbs ea-breadcrumbs--{{ size() }}\"\n [attr.aria-label]=\"resolvedAriaLabel()\">\n <ol class=\"ea-breadcrumbs__list\">\n @for (item of items(); track $index; let i = $index; let last = $last) {\n <li class=\"ea-breadcrumbs__item\">\n @if (last) {\n <span\n class=\"ea-breadcrumbs__current\"\n aria-current=\"page\">\n {{ item.label }}\n </span>\n } @else if (item.disabled) {\n <span class=\"ea-breadcrumbs__link ea-breadcrumbs__link--disabled\">\n {{ item.label }}\n </span>\n } @else if (item.href) {\n <a\n class=\"ea-breadcrumbs__link\"\n [href]=\"item.href\"\n (click)=\"handleClick(item, i, $event)\">\n {{ item.label }}\n </a>\n } @else {\n <button\n type=\"button\"\n class=\"ea-breadcrumbs__link ea-breadcrumbs__link--button\"\n (click)=\"handleClick(item, i, $event)\">\n {{ item.label }}\n </button>\n }\n\n @if (!last) {\n @if (separator() === 'chevron') {\n <ea-icon-chevron-right\n class=\"ea-breadcrumbs__separator ea-rtl-flip\"\n aria-hidden=\"true\" />\n } @else {\n <span\n class=\"ea-breadcrumbs__separator ea-breadcrumbs__separator--slash\"\n aria-hidden=\"true\">\n /\n </span>\n }\n }\n </li>\n }\n </ol>\n</nav>\n",
9909
- styles: [".ea-breadcrumbs{font-family:var(--font-family-sans);line-height:var(--line-height-normal);color:var(--color-text-secondary)}.ea-breadcrumbs--2xs{font-size:var(--font-size-2xs)}.ea-breadcrumbs--xs{font-size:var(--font-size-xs)}.ea-breadcrumbs--sm{font-size:var(--font-size-sm)}.ea-breadcrumbs--md{font-size:var(--font-size-md)}.ea-breadcrumbs--lg{font-size:var(--font-size-lg)}.ea-breadcrumbs--xl{font-size:var(--font-size-xl)}.ea-breadcrumbs__list{display:flex;flex-wrap:wrap;align-items:center;gap:.25em;padding:0;margin:0;list-style:none}.ea-breadcrumbs__item{display:inline-flex;align-items:center;gap:.25em;min-width:0}.ea-breadcrumbs__link{padding:.125em .25em;border:none;border-radius:var(--radius-sm);background:transparent;color:var(--color-text-secondary);font-family:inherit;font-size:inherit;text-decoration:none;cursor:pointer;transition:var(--transition-colors)}.ea-breadcrumbs__link:hover:not(.ea-breadcrumbs__link--disabled){color:var(--color-text-primary);text-decoration:underline}.ea-breadcrumbs__link:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-breadcrumbs__link:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-breadcrumbs__link--disabled{color:var(--color-text-disabled);cursor:default}.ea-breadcrumbs__current{padding:.125em .25em;font-weight:var(--font-weight-medium);color:var(--color-text-primary)}.ea-breadcrumbs__separator{display:inline-flex;align-items:center;justify-content:center;width:1em;height:1em;color:var(--color-text-tertiary);flex-shrink:0;-webkit-user-select:none;user-select:none}.ea-breadcrumbs__separator--slash{width:auto;height:auto}\n"]
10427
+ template: "<nav\n class=\"ea-breadcrumbs ea-breadcrumbs--{{ size() }} ea-breadcrumbs--{{ overflow() }}\"\n [attr.aria-label]=\"resolvedAriaLabel()\">\n <ol class=\"ea-breadcrumbs__list\">\n @for (crumb of crumbs(); track crumb.index; let first = $first; let last = $last) {\n <li class=\"ea-breadcrumbs__item\">\n @if (last) {\n <span\n class=\"ea-breadcrumbs__current\"\n aria-current=\"page\">\n {{ crumb.item.label }}\n </span>\n } @else if (crumb.item.disabled) {\n <span class=\"ea-breadcrumbs__link ea-breadcrumbs__link--disabled\">\n {{ crumb.item.label }}\n </span>\n } @else if (crumb.item.href) {\n <a\n class=\"ea-breadcrumbs__link\"\n [href]=\"crumb.item.href\"\n (click)=\"handleClick(crumb.item, crumb.index, $event)\">\n {{ crumb.item.label }}\n </a>\n } @else {\n <button\n type=\"button\"\n class=\"ea-breadcrumbs__link ea-breadcrumbs__link--button\"\n (click)=\"handleClick(crumb.item, crumb.index, $event)\">\n {{ crumb.item.label }}\n </button>\n }\n\n @if (!last) {\n <ng-container [ngTemplateOutlet]=\"separatorTpl\" />\n }\n </li>\n @if (first && menuCrumbs().length > 0) {\n <li class=\"ea-breadcrumbs__item\">\n <button\n #expandEl\n type=\"button\"\n class=\"ea-breadcrumbs__link ea-breadcrumbs__link--button ea-breadcrumbs__expand\"\n aria-haspopup=\"menu\"\n [attr.aria-expanded]=\"menuOpen()\"\n [attr.aria-controls]=\"menuOpen() ? menuId : null\"\n [attr.aria-label]=\"i18n.messages().breadcrumbs.showHidden\"\n (click)=\"toggleMenu()\"\n (keydown)=\"handleExpandKeydown($event)\"\n (mouseenter)=\"handleExpandEnter()\"\n (mouseleave)=\"handleHoverLeave($event)\">\n <ea-icon-more-horizontal aria-hidden=\"true\" />\n </button>\n <ng-container [ngTemplateOutlet]=\"separatorTpl\" />\n </li>\n }\n }\n </ol>\n\n @if (overflow() === 'menu') {\n <div\n #sizerEl\n class=\"ea-breadcrumbs__sizer\"\n aria-hidden=\"true\">\n @for (item of items(); track $index; let last = $last) {\n <span\n #sizerItemEl\n class=\"ea-breadcrumbs__item\">\n <span [class]=\"last ? 'ea-breadcrumbs__current' : 'ea-breadcrumbs__link'\">\n {{ item.label }}\n </span>\n @if (!last) {\n <ng-container [ngTemplateOutlet]=\"separatorTpl\" />\n }\n </span>\n }\n <span\n #sizerExpandEl\n class=\"ea-breadcrumbs__item ea-breadcrumbs__sizer-expand\">\n <span class=\"ea-breadcrumbs__link ea-breadcrumbs__expand\">\n <ea-icon-more-horizontal />\n </span>\n <ng-container [ngTemplateOutlet]=\"separatorTpl\" />\n </span>\n </div>\n }\n</nav>\n\n<ea-popover\n [anchor]=\"expandEl()\"\n [open]=\"menuOpen()\"\n placement=\"bottom-start\"\n role=\"menu\"\n [surfaceId]=\"menuId\"\n [aria-label]=\"i18n.messages().breadcrumbs.showHidden\"\n [closeOnEscape]=\"false\"\n (closeRequested)=\"closeMenu()\">\n <div\n #menuEl\n class=\"ea-breadcrumbs__menu ea-breadcrumbs__menu--{{ size() }}\"\n role=\"none\"\n (keydown)=\"handleMenuKeydown($event)\"\n (mouseleave)=\"handleHoverLeave($event)\">\n <div\n class=\"ea-breadcrumbs__menu-list\"\n role=\"none\">\n @for (crumb of menuCrumbs(); track crumb.index) {\n @if (crumb.item.disabled) {\n <span\n class=\"ea-breadcrumbs__menu-item ea-breadcrumbs__menu-item--disabled\"\n role=\"menuitem\"\n aria-disabled=\"true\">\n {{ crumb.item.label }}\n </span>\n } @else if (crumb.item.href) {\n <a\n class=\"ea-breadcrumbs__menu-item\"\n role=\"menuitem\"\n tabindex=\"-1\"\n [href]=\"crumb.item.href\"\n (click)=\"handleMenuClick(crumb, $event)\">\n {{ crumb.item.label }}\n </a>\n } @else {\n <button\n type=\"button\"\n class=\"ea-breadcrumbs__menu-item\"\n role=\"menuitem\"\n tabindex=\"-1\"\n (click)=\"handleMenuClick(crumb, $event)\">\n {{ crumb.item.label }}\n </button>\n }\n }\n </div>\n </div>\n</ea-popover>\n\n<ng-template #separatorTpl>\n @if (separator() === 'chevron') {\n <ea-icon-chevron-right\n class=\"ea-breadcrumbs__separator ea-rtl-flip\"\n aria-hidden=\"true\" />\n } @else {\n <span\n class=\"ea-breadcrumbs__separator ea-breadcrumbs__separator--slash\"\n aria-hidden=\"true\">\n /\n </span>\n }\n</ng-template>\n",
10428
+ styles: ["ea-breadcrumbs{display:block;min-width:0}.ea-breadcrumbs{font-family:var(--font-family-sans);line-height:var(--line-height-normal);color:var(--color-text-secondary)}.ea-breadcrumbs--2xs{font-size:var(--font-size-2xs)}.ea-breadcrumbs--xs{font-size:var(--font-size-xs)}.ea-breadcrumbs--sm{font-size:var(--font-size-sm)}.ea-breadcrumbs--md{font-size:var(--font-size-md)}.ea-breadcrumbs--lg{font-size:var(--font-size-lg)}.ea-breadcrumbs--xl{font-size:var(--font-size-xl)}.ea-breadcrumbs__list{display:flex;align-items:center;gap:.25em;padding:0;margin:0;list-style:none}.ea-breadcrumbs__item{display:inline-flex;flex-shrink:0;align-items:center;gap:.25em;min-width:0;white-space:nowrap}.ea-breadcrumbs--menu .ea-breadcrumbs__list>.ea-breadcrumbs__item:last-child{flex-shrink:1}.ea-breadcrumbs--scroll .ea-breadcrumbs__list{overflow-x:auto;padding:var(--space-1);margin:calc(-1 * var(--space-1))}.ea-breadcrumbs__sizer{position:relative;overflow:hidden;visibility:hidden;display:flex;flex-wrap:wrap;gap:.25em;height:0}.ea-breadcrumbs__sizer-expand{position:absolute;top:0;inset-inline-start:0}.ea-breadcrumbs__link{padding:.125em .25em;border:none;border-radius:var(--radius-sm);background:transparent;color:var(--color-text-secondary);font-family:inherit;font-size:inherit;text-decoration:none;cursor:pointer;transition:var(--transition-colors)}.ea-breadcrumbs__link:hover:not(.ea-breadcrumbs__link--disabled){color:var(--color-text-primary);text-decoration:underline}.ea-breadcrumbs__link:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-breadcrumbs__link:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-breadcrumbs__link--disabled{color:var(--color-text-disabled);cursor:default}.ea-breadcrumbs__expand{display:inline-flex;align-items:center}.ea-breadcrumbs__current{overflow:hidden;min-width:0;padding:.125em .25em;text-overflow:ellipsis;font-weight:var(--font-weight-medium);color:var(--color-text-primary)}.ea-breadcrumbs__separator{display:inline-flex;align-items:center;justify-content:center;width:1em;height:1em;color:var(--color-text-tertiary);flex-shrink:0;-webkit-user-select:none;user-select:none}.ea-breadcrumbs__separator--slash{width:auto;height:auto}.ea-breadcrumbs__menu{position:relative}.ea-breadcrumbs__menu--2xs{font-size:var(--font-size-2xs)}.ea-breadcrumbs__menu--xs{font-size:var(--font-size-xs)}.ea-breadcrumbs__menu--sm{font-size:var(--font-size-sm)}.ea-breadcrumbs__menu--md{font-size:var(--font-size-md)}.ea-breadcrumbs__menu--lg{font-size:var(--font-size-lg)}.ea-breadcrumbs__menu--xl{font-size:var(--font-size-xl)}.ea-breadcrumbs__menu:before,.ea-breadcrumbs__menu:after{position:absolute;right:0;left:0;height:var(--space-1);content:\"\"}.ea-breadcrumbs__menu:before{bottom:100%}.ea-breadcrumbs__menu:after{top:100%}.ea-breadcrumbs__menu-list{overflow-y:auto;min-width:10em;padding:.25em 0;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-lg)}@media(forced-colors:active){.ea-breadcrumbs__menu-list{border:1px solid CanvasText}}.ea-breadcrumbs__menu-list{max-height:20rem;background-color:var(--color-bg-elevated)}.ea-breadcrumbs__menu-item{display:flex;align-items:center;gap:.5em;width:100%;padding:.5em .75em;font-size:inherit;text-align:start;font-family:var(--font-family-sans);border:none;background:transparent;color:var(--color-text-primary);cursor:pointer;transition:var(--transition-colors)}.ea-breadcrumbs__menu-item:hover:not(.ea-breadcrumbs__menu-item--disabled),.ea-breadcrumbs__menu-item:focus-visible:not(.ea-breadcrumbs__menu-item--disabled){background-color:var(--color-state-hover)}@media(forced-colors:active){.ea-breadcrumbs__menu-item:hover:not(.ea-breadcrumbs__menu-item--disabled),.ea-breadcrumbs__menu-item:focus-visible:not(.ea-breadcrumbs__menu-item--disabled){background-color:Highlight;color:HighlightText}}.ea-breadcrumbs__menu-item:focus-visible{outline:none}.ea-breadcrumbs__menu-item{text-decoration:none}.ea-breadcrumbs__menu-item--disabled{color:var(--color-text-disabled);cursor:default}\n"]
9910
10429
  }]
9911
10430
  }],
10431
+ ctorParameters: () => [],
9912
10432
  propDecorators: {
10433
+ popover: [{
10434
+ type: i0.ViewChild,
10435
+ args: [i0.forwardRef(() => PopoverComponent), { isSignal: true }]
10436
+ }],
10437
+ expandEl: [{
10438
+ type: i0.ViewChild,
10439
+ args: ["expandEl", { isSignal: true }]
10440
+ }],
10441
+ menuEl: [{
10442
+ type: i0.ViewChild,
10443
+ args: ["menuEl", { isSignal: true }]
10444
+ }],
10445
+ sizerEl: [{
10446
+ type: i0.ViewChild,
10447
+ args: ["sizerEl", { isSignal: true }]
10448
+ }],
10449
+ sizerItemEls: [{
10450
+ type: i0.ViewChildren,
10451
+ args: ["sizerItemEl", { isSignal: true }]
10452
+ }],
10453
+ sizerExpandEl: [{
10454
+ type: i0.ViewChild,
10455
+ args: ["sizerExpandEl", { isSignal: true }]
10456
+ }],
9913
10457
  items: [{
9914
10458
  type: i0.Input,
9915
10459
  args: [{
@@ -9934,6 +10478,22 @@ i0.ɵɵngDeclareClassMetadata({
9934
10478
  required: false
9935
10479
  }]
9936
10480
  }],
10481
+ maxItems: [{
10482
+ type: i0.Input,
10483
+ args: [{
10484
+ isSignal: true,
10485
+ alias: "maxItems",
10486
+ required: false
10487
+ }]
10488
+ }],
10489
+ overflow: [{
10490
+ type: i0.Input,
10491
+ args: [{
10492
+ isSignal: true,
10493
+ alias: "overflow",
10494
+ required: false
10495
+ }]
10496
+ }],
9937
10497
  ariaLabel: [{
9938
10498
  type: i0.Input,
9939
10499
  args: [{
@@ -10945,6 +11505,7 @@ var CheckboxComponent = class CheckboxComponent {
10945
11505
  "flip",
10946
11506
  "whenClipped",
10947
11507
  "maxWidth",
11508
+ "showDelay",
10948
11509
  "dismissDelay",
10949
11510
  "tooltipOpen"
10950
11511
  ]
@@ -13981,7 +14542,7 @@ var MenuComponent = class MenuComponent {
13981
14542
  }],
13982
14543
  ngImport: i0,
13983
14544
  template: "<ea-popover\n [anchor]=\"triggerEl()\"\n [open]=\"open()\"\n [placement]=\"placement()\"\n [anchorPoint]=\"anchorPoint()\"\n [contextMenu]=\"asContextMenu()\"\n role=\"menu\"\n [surfaceId]=\"id()\"\n [aria-label]=\"resolvedAriaLabel()\"\n [closeOnEscape]=\"false\"\n scrollBehavior=\"reposition\"\n (closeRequested)=\"onPopoverCloseRequested()\">\n <div\n #listEl\n class=\"ea-menu__list ea-menu__list--{{ size() }}\"\n [style.max-height]=\"maxHeight()\">\n <ng-content />\n </div>\n</ea-popover>\n",
13984
- styles: [":host{display:contents}.ea-menu__list{min-width:10em;padding:.25em 0;overflow-y:auto;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);background-color:var(--ea-menu-list-background-color, var(--color-bg-elevated))}@media(forced-colors:active){.ea-menu__list{border:1px solid CanvasText}}.ea-menu__list--2xs{font-size:var(--font-size-2xs)}.ea-menu__list--xs{font-size:var(--font-size-xs)}.ea-menu__list--sm{font-size:var(--font-size-sm)}.ea-menu__list--md{font-size:var(--font-size-md)}.ea-menu__list--lg{font-size:var(--font-size-lg)}.ea-menu__list--xl{font-size:var(--font-size-xl)}\n"],
14545
+ styles: [":host{display:contents}.ea-menu__list{overflow-y:auto;min-width:10em;padding:.25em 0;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-lg)}@media(forced-colors:active){.ea-menu__list{border:1px solid CanvasText}}.ea-menu__list{background-color:var(--ea-menu-list-background-color, var(--color-bg-elevated))}.ea-menu__list--2xs{font-size:var(--font-size-2xs)}.ea-menu__list--xs{font-size:var(--font-size-xs)}.ea-menu__list--sm{font-size:var(--font-size-sm)}.ea-menu__list--md{font-size:var(--font-size-md)}.ea-menu__list--lg{font-size:var(--font-size-lg)}.ea-menu__list--xl{font-size:var(--font-size-xl)}\n"],
13985
14546
  dependencies: [{
13986
14547
  kind: "component",
13987
14548
  type: PopoverComponent,
@@ -14023,7 +14584,7 @@ i0.ɵɵngDeclareClassMetadata({
14023
14584
  imports: [PopoverComponent],
14024
14585
  changeDetection: ChangeDetectionStrategy.OnPush,
14025
14586
  template: "<ea-popover\n [anchor]=\"triggerEl()\"\n [open]=\"open()\"\n [placement]=\"placement()\"\n [anchorPoint]=\"anchorPoint()\"\n [contextMenu]=\"asContextMenu()\"\n role=\"menu\"\n [surfaceId]=\"id()\"\n [aria-label]=\"resolvedAriaLabel()\"\n [closeOnEscape]=\"false\"\n scrollBehavior=\"reposition\"\n (closeRequested)=\"onPopoverCloseRequested()\">\n <div\n #listEl\n class=\"ea-menu__list ea-menu__list--{{ size() }}\"\n [style.max-height]=\"maxHeight()\">\n <ng-content />\n </div>\n</ea-popover>\n",
14026
- styles: [":host{display:contents}.ea-menu__list{min-width:10em;padding:.25em 0;overflow-y:auto;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);background-color:var(--ea-menu-list-background-color, var(--color-bg-elevated))}@media(forced-colors:active){.ea-menu__list{border:1px solid CanvasText}}.ea-menu__list--2xs{font-size:var(--font-size-2xs)}.ea-menu__list--xs{font-size:var(--font-size-xs)}.ea-menu__list--sm{font-size:var(--font-size-sm)}.ea-menu__list--md{font-size:var(--font-size-md)}.ea-menu__list--lg{font-size:var(--font-size-lg)}.ea-menu__list--xl{font-size:var(--font-size-xl)}\n"]
14587
+ styles: [":host{display:contents}.ea-menu__list{overflow-y:auto;min-width:10em;padding:.25em 0;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-lg)}@media(forced-colors:active){.ea-menu__list{border:1px solid CanvasText}}.ea-menu__list{background-color:var(--ea-menu-list-background-color, var(--color-bg-elevated))}.ea-menu__list--2xs{font-size:var(--font-size-2xs)}.ea-menu__list--xs{font-size:var(--font-size-xs)}.ea-menu__list--sm{font-size:var(--font-size-sm)}.ea-menu__list--md{font-size:var(--font-size-md)}.ea-menu__list--lg{font-size:var(--font-size-lg)}.ea-menu__list--xl{font-size:var(--font-size-xl)}\n"]
14027
14588
  }]
14028
14589
  }],
14029
14590
  ctorParameters: () => [],
@@ -15878,6 +16439,8 @@ var DatePickerComponent = class DatePickerComponent {
15878
16439
  errorMessages = input(void 0, ...ngDevMode ? [{ debugName: "errorMessages" }] : /* istanbul ignore next */ []);
15879
16440
  minDate = input(null, ...ngDevMode ? [{ debugName: "minDate" }] : /* istanbul ignore next */ []);
15880
16441
  maxDate = input(null, ...ngDevMode ? [{ debugName: "maxDate" }] : /* istanbul ignore next */ []);
16442
+ disabledWeekdays = input([], ...ngDevMode ? [{ debugName: "disabledWeekdays" }] : /* istanbul ignore next */ []);
16443
+ disabledDates = input([], ...ngDevMode ? [{ debugName: "disabledDates" }] : /* istanbul ignore next */ []);
15881
16444
  format = input("medium", ...ngDevMode ? [{ debugName: "format" }] : /* istanbul ignore next */ []);
15882
16445
  weekStartsOn = input(1, ...ngDevMode ? [{ debugName: "weekStartsOn" }] : /* istanbul ignore next */ []);
15883
16446
  locale = input(void 0, ...ngDevMode ? [{ debugName: "locale" }] : /* istanbul ignore next */ []);
@@ -15965,8 +16528,6 @@ var DatePickerComponent = class DatePickerComponent {
15965
16528
  const today = this.startOfDay(/* @__PURE__ */ new Date());
15966
16529
  const selected = this.value();
15967
16530
  const focused = this.focusedDate();
15968
- const min = this.minDate() ? this.startOfDay(this.minDate()) : null;
15969
- const max = this.maxDate() ? this.startOfDay(this.maxDate()) : null;
15970
16531
  const rows = [];
15971
16532
  for (let row = 0; row < 6; row++) {
15972
16533
  const cells = [];
@@ -15979,7 +16540,7 @@ var DatePickerComponent = class DatePickerComponent {
15979
16540
  isCurrentMonth: cellDate.getMonth() === month,
15980
16541
  isToday: this.isSameDay(cellDate, today),
15981
16542
  isSelected: selected ? this.isSameDay(cellDate, selected) : false,
15982
- isDisabled: (min ? cellDate < min : false) || (max ? cellDate > max : false),
16543
+ isDisabled: this.isUnavailable(cellDate),
15983
16544
  isFocused: focused ? this.isSameDay(cellDate, focused) : false
15984
16545
  });
15985
16546
  }
@@ -16123,7 +16684,7 @@ var DatePickerComponent = class DatePickerComponent {
16123
16684
  locale: this.effectiveLocale(),
16124
16685
  monthNames: this.i18n.messages().datePicker.months
16125
16686
  });
16126
- if (!parsed || this.isOutOfRange(parsed)) return;
16687
+ if (!parsed || this.isUnavailable(parsed)) return;
16127
16688
  const current = this.value();
16128
16689
  if (!current || !this.isSameDay(parsed, current)) this.applyValue(this.startOfDay(parsed));
16129
16690
  }
@@ -16138,10 +16699,15 @@ var DatePickerComponent = class DatePickerComponent {
16138
16699
  this.onTouched();
16139
16700
  this.changed.emit(date);
16140
16701
  }
16141
- isOutOfRange(date) {
16702
+ isUnavailable(date) {
16142
16703
  const min = this.minDate();
16143
16704
  const max = this.maxDate();
16144
- return !!min && date < this.startOfDay(min) || !!max && date > this.startOfDay(max);
16705
+ return !!min && date < this.startOfDay(min) || !!max && date > this.startOfDay(max) || this.disabledWeekdays().includes(date.getDay()) || this.disabledDates().some((entry) => this.covers(entry, date));
16706
+ }
16707
+ covers(entry, date) {
16708
+ if (entry instanceof Date) return this.isSameDay(entry, date);
16709
+ const day = this.startOfDay(date);
16710
+ return day >= this.startOfDay(entry.start) && day <= this.startOfDay(entry.end);
16145
16711
  }
16146
16712
  handleGridKeydown(event) {
16147
16713
  if (!this.isOpen()) return;
@@ -16181,7 +16747,7 @@ var DatePickerComponent = class DatePickerComponent {
16181
16747
  case " ": {
16182
16748
  event.preventDefault();
16183
16749
  const current = this.focusedDate();
16184
- if (!current || this.isOutOfRange(current)) return;
16750
+ if (!current || this.isUnavailable(current)) return;
16185
16751
  this.selectDay({
16186
16752
  date: current,
16187
16753
  day: current.getDate(),
@@ -16346,6 +16912,20 @@ var DatePickerComponent = class DatePickerComponent {
16346
16912
  isRequired: false,
16347
16913
  transformFunction: null
16348
16914
  },
16915
+ disabledWeekdays: {
16916
+ classPropertyName: "disabledWeekdays",
16917
+ publicName: "disabledWeekdays",
16918
+ isSignal: true,
16919
+ isRequired: false,
16920
+ transformFunction: null
16921
+ },
16922
+ disabledDates: {
16923
+ classPropertyName: "disabledDates",
16924
+ publicName: "disabledDates",
16925
+ isSignal: true,
16926
+ isRequired: false,
16927
+ transformFunction: null
16928
+ },
16349
16929
  format: {
16350
16930
  classPropertyName: "format",
16351
16931
  publicName: "format",
@@ -16629,6 +17209,22 @@ i0.ɵɵngDeclareClassMetadata({
16629
17209
  required: false
16630
17210
  }]
16631
17211
  }],
17212
+ disabledWeekdays: [{
17213
+ type: i0.Input,
17214
+ args: [{
17215
+ isSignal: true,
17216
+ alias: "disabledWeekdays",
17217
+ required: false
17218
+ }]
17219
+ }],
17220
+ disabledDates: [{
17221
+ type: i0.Input,
17222
+ args: [{
17223
+ isSignal: true,
17224
+ alias: "disabledDates",
17225
+ required: false
17226
+ }]
17227
+ }],
16632
17228
  format: [{
16633
17229
  type: i0.Input,
16634
17230
  args: [{
@@ -17745,9 +18341,23 @@ i0.ɵɵngDeclareClassMetadata({
17745
18341
  }]
17746
18342
  }
17747
18343
  });
18344
+ const LIST_KEYS = /* @__PURE__ */ new Set([
18345
+ "ArrowDown",
18346
+ "ArrowUp",
18347
+ "Home",
18348
+ "End",
18349
+ "Enter",
18350
+ "Escape"
18351
+ ]);
18352
+ function isTypedCharacter(event) {
18353
+ return event.key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey;
18354
+ }
17748
18355
  var DropdownComponent = class DropdownComponent {
17749
18356
  elRef = viewChild("triggerEl", ...ngDevMode ? [{ debugName: "elRef" }] : /* istanbul ignore next */ []);
18357
+ popover = viewChild(PopoverComponent, ...ngDevMode ? [{ debugName: "popover" }] : /* istanbul ignore next */ []);
18358
+ searchEl = viewChild("searchEl", ...ngDevMode ? [{ debugName: "searchEl" }] : /* istanbul ignore next */ []);
17750
18359
  i18n = inject(EagamiI18nService);
18360
+ injector = inject(Injector);
17751
18361
  label = input(void 0, ...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
17752
18362
  labelIcon = input(void 0, ...ngDevMode ? [{ debugName: "labelIcon" }] : /* istanbul ignore next */ []);
17753
18363
  labelHelp = input(void 0, ...ngDevMode ? [{ debugName: "labelHelp" }] : /* istanbul ignore next */ []);
@@ -17757,6 +18367,8 @@ var DropdownComponent = class DropdownComponent {
17757
18367
  disabled = input(false, ...ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []);
17758
18368
  readonly = input(false, ...ngDevMode ? [{ debugName: "readonly" }] : /* istanbul ignore next */ []);
17759
18369
  required = input(false, ...ngDevMode ? [{ debugName: "required" }] : /* istanbul ignore next */ []);
18370
+ clearable = input(false, ...ngDevMode ? [{ debugName: "clearable" }] : /* istanbul ignore next */ []);
18371
+ searchable = input(false, ...ngDevMode ? [{ debugName: "searchable" }] : /* istanbul ignore next */ []);
17760
18372
  hint = input(void 0, ...ngDevMode ? [{ debugName: "hint" }] : /* istanbul ignore next */ []);
17761
18373
  errorMsg = input(void 0, ...ngDevMode ? [{ debugName: "errorMsg" }] : /* istanbul ignore next */ []);
17762
18374
  errorMessages = input(void 0, ...ngDevMode ? [{ debugName: "errorMessages" }] : /* istanbul ignore next */ []);
@@ -17765,6 +18377,7 @@ var DropdownComponent = class DropdownComponent {
17765
18377
  changed = output();
17766
18378
  isOpen = signal(false, ...ngDevMode ? [{ debugName: "isOpen" }] : /* istanbul ignore next */ []);
17767
18379
  focusedIndex = signal(-1, ...ngDevMode ? [{ debugName: "focusedIndex" }] : /* istanbul ignore next */ []);
18380
+ searchTerm = signal("", ...ngDevMode ? [{ debugName: "searchTerm" }] : /* istanbul ignore next */ []);
17768
18381
  _formDisabled = signal(false, ...ngDevMode ? [{ debugName: "_formDisabled" }] : /* istanbul ignore next */ []);
17769
18382
  typeaheadQuery = "";
17770
18383
  typeaheadTimer;
@@ -17772,6 +18385,9 @@ var DropdownComponent = class DropdownComponent {
17772
18385
  onTouched = () => {};
17773
18386
  constructor() {
17774
18387
  inject(DestroyRef).onDestroy(() => clearTimeout(this.typeaheadTimer));
18388
+ afterRenderEffect(() => {
18389
+ if (this.searchable() && this.popover()?.isPositioned()) untracked(() => this.searchEl()?.nativeElement.focus());
18390
+ });
17775
18391
  }
17776
18392
  isDisabled = computed(() => this.disabled() || this._formDisabled(), ...ngDevMode ? [{ debugName: "isDisabled" }] : /* istanbul ignore next */ []);
17777
18393
  errorState = injectControlErrorState({
@@ -17785,19 +18401,29 @@ var DropdownComponent = class DropdownComponent {
17785
18401
  optionGroups = computed(() => toGroups(this.options()), ...ngDevMode ? [{ debugName: "optionGroups" }] : /* istanbul ignore next */ []);
17786
18402
  grouped = computed(() => isGrouped(this.options()), ...ngDevMode ? [{ debugName: "grouped" }] : /* istanbul ignore next */ []);
17787
18403
  flatOptions = computed(() => flattenGroups(this.optionGroups()), ...ngDevMode ? [{ debugName: "flatOptions" }] : /* istanbul ignore next */ []);
17788
- renderedGroups = computed(() => toRenderedGroups(this.optionGroups()), ...ngDevMode ? [{ debugName: "renderedGroups" }] : /* istanbul ignore next */ []);
17789
- selectedIndex = computed(() => this.flatOptions().findIndex((o) => o.value === this.value()), ...ngDevMode ? [{ debugName: "selectedIndex" }] : /* istanbul ignore next */ []);
18404
+ filteredGroups = computed(() => {
18405
+ const term = foldForSearch(this.searchTerm().trim());
18406
+ const groups = this.optionGroups();
18407
+ return term ? filterGroups(groups, (o) => foldForSearch(o.label).includes(term)) : groups;
18408
+ }, ...ngDevMode ? [{ debugName: "filteredGroups" }] : /* istanbul ignore next */ []);
18409
+ filteredOptions = computed(() => flattenGroups(this.filteredGroups()), ...ngDevMode ? [{ debugName: "filteredOptions" }] : /* istanbul ignore next */ []);
18410
+ renderedGroups = computed(() => toRenderedGroups(this.filteredGroups()), ...ngDevMode ? [{ debugName: "renderedGroups" }] : /* istanbul ignore next */ []);
18411
+ selectedIndex = computed(() => this.filteredOptions().findIndex((o) => o.value === this.value()), ...ngDevMode ? [{ debugName: "selectedIndex" }] : /* istanbul ignore next */ []);
17790
18412
  selectedLabel = computed(() => {
17791
18413
  return this.flatOptions().find((o) => o.value === this.value())?.label ?? "";
17792
18414
  }, ...ngDevMode ? [{ debugName: "selectedLabel" }] : /* istanbul ignore next */ []);
17793
18415
  resolvedPlaceholder = computed(() => this.placeholder() ?? this.i18n.messages().dropdown.placeholder, ...ngDevMode ? [{ debugName: "resolvedPlaceholder" }] : /* istanbul ignore next */ []);
17794
18416
  triggerLabelledBy = computed(() => this.label() ? `${this.id()}-label ${this.id()}` : null, ...ngDevMode ? [{ debugName: "triggerLabelledBy" }] : /* istanbul ignore next */ []);
18417
+ showClear = computed(() => this.clearable() && this.value() !== "" && !this.isDisabled() && !this.readonly(), ...ngDevMode ? [{ debugName: "showClear" }] : /* istanbul ignore next */ []);
18418
+ listboxId = computed(() => `${this.id()}-listbox`, ...ngDevMode ? [{ debugName: "listboxId" }] : /* istanbul ignore next */ []);
18419
+ activeOptionId = computed(() => this.isOpen() && this.focusedIndex() >= 0 ? `${this.id()}-option-${this.focusedIndex()}` : null, ...ngDevMode ? [{ debugName: "activeOptionId" }] : /* istanbul ignore next */ []);
17795
18420
  triggerClasses = computed(() => ({
17796
18421
  [`ea-dropdown__trigger--${this.size()}`]: true,
17797
18422
  "ea-dropdown__trigger--error": this.hasError(),
17798
18423
  "ea-dropdown__trigger--open": this.isOpen(),
17799
18424
  "ea-dropdown__trigger--disabled": this.isDisabled(),
17800
- "ea-dropdown__trigger--readonly": this.readonly() && !this.isDisabled()
18425
+ "ea-dropdown__trigger--readonly": this.readonly() && !this.isDisabled(),
18426
+ "ea-dropdown__trigger--clearable": this.showClear()
17801
18427
  }), ...ngDevMode ? [{ debugName: "triggerClasses" }] : /* istanbul ignore next */ []);
17802
18428
  menuClasses = computed(() => ({ [`ea-dropdown__menu--${this.size()}`]: true }), ...ngDevMode ? [{ debugName: "menuClasses" }] : /* istanbul ignore next */ []);
17803
18429
  writeValue(val) {
@@ -17814,26 +18440,34 @@ var DropdownComponent = class DropdownComponent {
17814
18440
  }
17815
18441
  toggle() {
17816
18442
  if (this.isDisabled() || this.readonly()) return;
17817
- this.isOpen.set(!this.isOpen());
17818
18443
  if (this.isOpen()) {
17819
- const selected = this.flatOptions().findIndex((o) => o.value === this.value());
17820
- if (selected >= 0) this.focusedIndex.set(selected);
17821
- else this.focusEdge(1);
18444
+ this.close();
18445
+ return;
17822
18446
  }
18447
+ this.isOpen.set(true);
18448
+ const selected = this.selectedIndex();
18449
+ if (selected >= 0) this.focusedIndex.set(selected);
18450
+ else this.focusEdge(1);
17823
18451
  }
17824
18452
  select(option) {
17825
18453
  if (option.disabled || this.isDisabled() || this.readonly()) return;
17826
- this.value.set(option.value);
17827
- this.onChange(option.value);
17828
- this.onTouched();
17829
- this.changed.emit(option.value);
18454
+ this.commit(option.value);
17830
18455
  this.close();
17831
18456
  }
17832
18457
  close() {
18458
+ const searchEl = this.searchEl()?.nativeElement;
18459
+ const searching = !!searchEl && document.activeElement === searchEl;
17833
18460
  this.isOpen.set(false);
17834
18461
  this.focusedIndex.set(-1);
18462
+ this.searchTerm.set("");
17835
18463
  this.typeaheadQuery = "";
17836
18464
  clearTimeout(this.typeaheadTimer);
18465
+ if (searching) this.focus();
18466
+ }
18467
+ clear() {
18468
+ this.close();
18469
+ this.commit("");
18470
+ this.focus();
17837
18471
  }
17838
18472
  focus() {
17839
18473
  this.elRef()?.nativeElement.focus();
@@ -17878,36 +18512,69 @@ var DropdownComponent = class DropdownComponent {
17878
18512
  if (!this.isOpen()) this.toggle();
17879
18513
  this.focusEdge(-1);
17880
18514
  break;
17881
- default: this.handleTypeahead(event);
18515
+ default: if (this.searchable()) this.startSearch(event);
18516
+ else this.handleTypeahead(event);
17882
18517
  }
17883
18518
  }
18519
+ onSearchInput(term) {
18520
+ this.searchTerm.set(term);
18521
+ this.focusFirstMatch();
18522
+ }
18523
+ handleSearchKeydown(event) {
18524
+ if (event.key === "Tab") this.close();
18525
+ else if (LIST_KEYS.has(event.key)) this.handleKeydown(event);
18526
+ }
18527
+ onMenuMousedown(event) {
18528
+ if (this.searchable() && event.target !== this.searchEl()?.nativeElement) event.preventDefault();
18529
+ }
18530
+ commit(value) {
18531
+ this.value.set(value);
18532
+ this.onChange(value);
18533
+ this.onTouched();
18534
+ this.changed.emit(value);
18535
+ }
18536
+ startSearch(event) {
18537
+ if (!isTypedCharacter(event)) return;
18538
+ event.preventDefault();
18539
+ this.isOpen.set(true);
18540
+ this.searchTerm.update((term) => term + event.key);
18541
+ this.focusFirstMatch();
18542
+ }
18543
+ focusFirstMatch() {
18544
+ const first = this.filteredOptions().findIndex((o) => !o.disabled);
18545
+ this.focusedIndex.set(first);
18546
+ afterNextRender(() => this.scrollOptionIntoView(first), { injector: this.injector });
18547
+ }
17884
18548
  selectFocusedOrOpen(event) {
17885
18549
  event.preventDefault();
17886
18550
  if (this.isOpen()) {
17887
- const opts = this.flatOptions();
18551
+ const opts = this.filteredOptions();
17888
18552
  const idx = this.focusedIndex();
17889
18553
  if (idx >= 0 && idx < opts.length && !opts[idx].disabled) this.select(opts[idx]);
17890
18554
  } else this.toggle();
17891
18555
  }
17892
18556
  focusEdge(direction) {
17893
- const opts = this.flatOptions();
18557
+ const opts = this.filteredOptions();
17894
18558
  let idx = direction === 1 ? 0 : opts.length - 1;
17895
18559
  while (idx >= 0 && idx < opts.length && opts[idx].disabled) idx += direction;
17896
18560
  if (idx >= 0 && idx < opts.length) this.setFocusedIndex(idx);
17897
18561
  }
17898
18562
  setFocusedIndex(idx) {
17899
18563
  this.focusedIndex.set(idx);
18564
+ this.scrollOptionIntoView(idx);
18565
+ }
18566
+ scrollOptionIntoView(idx) {
17900
18567
  document.getElementById(`${this.id()}-option-${idx}`)?.scrollIntoView({ block: "nearest" });
17901
18568
  }
17902
18569
  handleTypeahead(event) {
17903
- if (event.key.length !== 1 || event.ctrlKey || event.metaKey || event.altKey) return;
18570
+ if (!isTypedCharacter(event)) return;
17904
18571
  event.preventDefault();
17905
18572
  if (this.typeaheadTimer !== void 0) clearTimeout(this.typeaheadTimer);
17906
18573
  this.typeaheadTimer = setTimeout(() => this.typeaheadQuery = "", 500);
17907
18574
  this.typeaheadQuery += foldForSearch(event.key);
17908
18575
  const wasOpen = this.isOpen();
17909
18576
  if (!wasOpen) this.toggle();
17910
- const opts = this.flatOptions();
18577
+ const opts = this.filteredOptions();
17911
18578
  if (opts.length === 0) return;
17912
18579
  const start = Math.max(this.focusedIndex(), 0);
17913
18580
  const firstOffset = this.typeaheadQuery.length > 1 || !wasOpen ? 0 : 1;
@@ -17921,7 +18588,7 @@ var DropdownComponent = class DropdownComponent {
17921
18588
  }
17922
18589
  }
17923
18590
  moveFocus(delta) {
17924
- const opts = this.flatOptions();
18591
+ const opts = this.filteredOptions();
17925
18592
  let idx = this.focusedIndex() + delta;
17926
18593
  while (idx >= 0 && idx < opts.length && opts[idx].disabled) idx += delta;
17927
18594
  if (idx >= 0 && idx < opts.length) this.setFocusedIndex(idx);
@@ -18004,6 +18671,20 @@ var DropdownComponent = class DropdownComponent {
18004
18671
  isRequired: false,
18005
18672
  transformFunction: null
18006
18673
  },
18674
+ clearable: {
18675
+ classPropertyName: "clearable",
18676
+ publicName: "clearable",
18677
+ isSignal: true,
18678
+ isRequired: false,
18679
+ transformFunction: null
18680
+ },
18681
+ searchable: {
18682
+ classPropertyName: "searchable",
18683
+ publicName: "searchable",
18684
+ isSignal: true,
18685
+ isRequired: false,
18686
+ transformFunction: null
18687
+ },
18007
18688
  hint: {
18008
18689
  classPropertyName: "hint",
18009
18690
  publicName: "hint",
@@ -18049,16 +18730,32 @@ var DropdownComponent = class DropdownComponent {
18049
18730
  useExisting: forwardRef(() => DropdownComponent),
18050
18731
  multi: true
18051
18732
  }],
18052
- viewQueries: [{
18053
- propertyName: "elRef",
18054
- first: true,
18055
- predicate: ["triggerEl"],
18056
- descendants: true,
18057
- isSignal: true
18058
- }],
18733
+ viewQueries: [
18734
+ {
18735
+ propertyName: "elRef",
18736
+ first: true,
18737
+ predicate: ["triggerEl"],
18738
+ descendants: true,
18739
+ isSignal: true
18740
+ },
18741
+ {
18742
+ propertyName: "popover",
18743
+ first: true,
18744
+ predicate: PopoverComponent,
18745
+ descendants: true,
18746
+ isSignal: true
18747
+ },
18748
+ {
18749
+ propertyName: "searchEl",
18750
+ first: true,
18751
+ predicate: ["searchEl"],
18752
+ descendants: true,
18753
+ isSignal: true
18754
+ }
18755
+ ],
18059
18756
  ngImport: i0,
18060
- template: "<div class=\"ea-dropdown-field ea-dropdown-field--{{ size() }}\">\n @if (label(); as labelText) {\n <ea-field-label\n [text]=\"labelText\"\n [icon]=\"labelIcon()\"\n [help]=\"labelHelp()\"\n [forId]=\"id()\"\n [labelId]=\"id() + '-label'\"\n [required]=\"required()\" />\n }\n\n <div class=\"ea-dropdown\">\n <button\n #triggerEl\n type=\"button\"\n class=\"ea-dropdown__trigger\"\n [ngClass]=\"triggerClasses()\"\n [id]=\"id()\"\n role=\"combobox\"\n [disabled]=\"isDisabled()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-controls]=\"isOpen() ? id() + '-listbox' : null\"\n [attr.aria-activedescendant]=\"\n isOpen() && focusedIndex() >= 0 ? id() + '-option-' + focusedIndex() : null\n \"\n [attr.aria-labelledby]=\"triggerLabelledBy()\"\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)=\"handleKeydown($event)\">\n <span\n class=\"ea-dropdown__value\"\n [class.ea-dropdown__value--placeholder]=\"!selectedLabel()\">\n <bdi>{{ selectedLabel() || resolvedPlaceholder() }}</bdi>\n </span>\n <ea-icon-chevron-down\n class=\"ea-dropdown__chevron\"\n [class.ea-dropdown__chevron--open]=\"isOpen()\" />\n </button>\n\n <ea-popover\n [anchor]=\"triggerEl\"\n [open]=\"isOpen()\"\n placement=\"bottom-start\"\n role=\"listbox\"\n [surfaceId]=\"id() + '-listbox'\"\n [aria-label]=\"label()\"\n [matchAnchorWidth]=\"true\"\n [closeOnEscape]=\"false\"\n scrollBehavior=\"close\"\n (closeRequested)=\"onPopoverCloseRequested()\">\n <div\n class=\"ea-dropdown__menu\"\n [ngClass]=\"menuClasses()\"\n role=\"none\">\n @for (group of renderedGroups(); track $index) {\n <div\n class=\"ea-dropdown__group\"\n [class.ea-dropdown__group--ruled]=\"group.rule\"\n [attr.role]=\"grouped() ? 'group' : 'presentation'\"\n [attr.aria-label]=\"group.label ?? null\">\n @if (group.label; as groupLabel) {\n <div\n class=\"ea-dropdown__group-label\"\n aria-hidden=\"true\">\n {{ groupLabel }}\n </div>\n }\n @for (entry of group.options; track entry.option.value) {\n <div\n class=\"ea-dropdown__option\"\n [class.ea-dropdown__option--selected]=\"entry.option.value === value()\"\n [class.ea-dropdown__option--focused]=\"entry.index === focusedIndex()\"\n [class.ea-dropdown__option--disabled]=\"entry.option.disabled\"\n [id]=\"id() + '-option-' + entry.index\"\n role=\"option\"\n [attr.aria-selected]=\"entry.index === selectedIndex()\"\n [attr.aria-disabled]=\"entry.option.disabled || null\"\n (click)=\"select(entry.option)\"\n (mouseenter)=\"focusedIndex.set(entry.index)\">\n {{ entry.option.label }}\n </div>\n }\n </div>\n }\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",
18061
- styles: [".ea-dropdown-field{display:flex;flex-direction:column;gap:.375em;--ea-field-label-size: .875em;--ea-field-messages-size: .8125em}.ea-dropdown-field--2xs{font-size:var(--font-size-2xs)}.ea-dropdown-field--xs{font-size:var(--font-size-xs)}.ea-dropdown-field--sm{font-size:var(--font-size-sm)}.ea-dropdown-field--md{font-size:var(--font-size-md)}.ea-dropdown-field--lg{font-size:var(--font-size-lg)}.ea-dropdown-field--xl{font-size:var(--font-size-xl)}.ea-dropdown{position:relative}.ea-dropdown__trigger{display:flex;align-items:center;justify-content:space-between;gap:.5em;width:100%;min-height:2.5em;padding:.5em .75em;text-align:start;font-family:var(--font-family-sans);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-dropdown__trigger:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-dropdown__trigger:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-dropdown__trigger--open{border-color:var(--color-border-focus);box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-dropdown__trigger--open{outline:2px solid Highlight;outline-offset:2px}}.ea-dropdown__trigger--error{border-color:var(--color-error-default)}.ea-dropdown__trigger--error.ea-dropdown__trigger--open{box-shadow:var(--shadow-focus-ring-error)}@media(forced-colors:active){.ea-dropdown__trigger--error.ea-dropdown__trigger--open{outline:2px solid Highlight;outline-offset:2px}}.ea-dropdown__trigger--disabled{background-color:var(--color-bg-muted);opacity:.6;cursor:default}.ea-dropdown__trigger--readonly{cursor:default}.ea-dropdown__trigger--readonly:focus-visible{border-color:var(--color-border-focus);box-shadow:none}@media(forced-colors:active){.ea-dropdown__trigger--readonly:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-dropdown__value{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ea-dropdown__value--placeholder{color:var(--color-text-tertiary)}.ea-dropdown__chevron{flex-shrink:0;width:1em;height:1em;color:var(--color-text-secondary);transition:var(--transition-transform)}.ea-dropdown__chevron--open{transform:rotate(180deg)}.ea-dropdown__menu{max-height:15rem;padding:.25em 0;overflow-y:auto;overscroll-behavior:none;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);background-color:var(--ea-dropdown-menu-background-color, var(--color-bg-elevated))}@media(forced-colors:active){.ea-dropdown__menu{border:1px solid CanvasText}}.ea-dropdown__menu--2xs{font-size:var(--font-size-2xs)}.ea-dropdown__menu--xs{font-size:var(--font-size-xs)}.ea-dropdown__menu--sm{font-size:var(--font-size-sm)}.ea-dropdown__menu--md{font-size:var(--font-size-md)}.ea-dropdown__menu--lg{font-size:var(--font-size-lg)}.ea-dropdown__menu--xl{font-size:var(--font-size-xl)}.ea-dropdown__group{position:relative}.ea-dropdown__group--ruled{padding-top:.25em;margin-top:.25em}.ea-dropdown__group--ruled:before{position:absolute;top:0;inset-inline-end:0;inset-inline-start:0;height:var(--border-width-thin);background-color:var(--color-divider);content:\"\"}.ea-dropdown__group-label{display:block;padding:.5em .75em .125em;font-size:.8125em;font-weight:var(--font-weight-semibold);text-transform:uppercase;letter-spacing:.08em;color:var(--color-text-tertiary);-webkit-user-select:none;user-select:none}.ea-dropdown__option{padding:.5em .75em;font-size:inherit;white-space:nowrap;font-family:var(--font-family-sans);color:var(--color-text-primary);cursor:pointer;transition:var(--transition-colors)}.ea-dropdown__option--focused{background-color:var(--color-state-hover)}@media(forced-colors:active){.ea-dropdown__option--focused{background-color:Highlight;color:HighlightText}}.ea-dropdown__option--selected{color:var(--color-brand-text);font-weight:var(--font-weight-medium)}@media(forced-colors:active){.ea-dropdown__option--selected{background-color:Highlight;color:HighlightText}}.ea-dropdown__option--disabled{color:var(--color-text-disabled);cursor:default}@media(forced-colors:active){.ea-dropdown__option--disabled{color:GrayText}}\n"],
18757
+ template: "<div class=\"ea-dropdown-field ea-dropdown-field--{{ size() }}\">\n @if (label(); as labelText) {\n <ea-field-label\n [text]=\"labelText\"\n [icon]=\"labelIcon()\"\n [help]=\"labelHelp()\"\n [forId]=\"id()\"\n [labelId]=\"id() + '-label'\"\n [required]=\"required()\" />\n }\n\n <div class=\"ea-dropdown\">\n <button\n #triggerEl\n type=\"button\"\n class=\"ea-dropdown__trigger\"\n [ngClass]=\"triggerClasses()\"\n [id]=\"id()\"\n role=\"combobox\"\n [disabled]=\"isDisabled()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-controls]=\"isOpen() ? listboxId() : null\"\n [attr.aria-activedescendant]=\"searchable() ? null : activeOptionId()\"\n [attr.aria-labelledby]=\"triggerLabelledBy()\"\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)=\"handleKeydown($event)\">\n <span\n class=\"ea-dropdown__value\"\n [class.ea-dropdown__value--placeholder]=\"!selectedLabel()\">\n <bdi>{{ selectedLabel() || resolvedPlaceholder() }}</bdi>\n </span>\n <ea-icon-chevron-down\n class=\"ea-dropdown__chevron\"\n [class.ea-dropdown__chevron--open]=\"isOpen()\" />\n </button>\n @if (showClear()) {\n <button\n type=\"button\"\n class=\"ea-dropdown__clear\"\n [attr.aria-label]=\"i18n.messages().dropdown.clear\"\n (click)=\"clear()\">\n <ea-icon-x aria-hidden=\"true\" />\n </button>\n }\n\n <ea-popover\n [anchor]=\"triggerEl\"\n [open]=\"isOpen()\"\n placement=\"bottom-start\"\n [role]=\"searchable() ? 'dialog' : 'listbox'\"\n [surfaceId]=\"searchable() ? id() + '-popover' : listboxId()\"\n [aria-label]=\"searchable() ? i18n.messages().dropdown.dialogLabel : label()\"\n [matchAnchorWidth]=\"true\"\n [closeOnEscape]=\"false\"\n [scrollBehavior]=\"searchable() ? 'reposition' : 'close'\"\n (closeRequested)=\"onPopoverCloseRequested()\">\n <div\n class=\"ea-dropdown__menu\"\n [ngClass]=\"menuClasses()\"\n role=\"none\"\n (mousedown)=\"onMenuMousedown($event)\">\n @if (searchable()) {\n <div class=\"ea-dropdown__search\">\n <ea-icon-search\n class=\"ea-dropdown__search-icon\"\n aria-hidden=\"true\" />\n <input\n #searchEl\n type=\"text\"\n dir=\"auto\"\n class=\"ea-dropdown__search-input\"\n autocomplete=\"off\"\n [placeholder]=\"i18n.messages().dropdown.searchPlaceholder\"\n [value]=\"searchTerm()\"\n [attr.aria-controls]=\"listboxId()\"\n [attr.aria-activedescendant]=\"activeOptionId()\"\n (input)=\"onSearchInput(searchEl.value)\"\n (keydown)=\"handleSearchKeydown($event)\" />\n </div>\n }\n <div\n class=\"ea-dropdown__list\"\n [attr.id]=\"searchable() ? listboxId() : null\"\n [attr.role]=\"searchable() ? 'listbox' : 'none'\"\n [attr.aria-label]=\"searchable() ? (label() ?? null) : null\">\n @for (group of renderedGroups(); track $index) {\n <div\n class=\"ea-dropdown__group\"\n [class.ea-dropdown__group--ruled]=\"group.rule\"\n [attr.role]=\"grouped() ? 'group' : 'presentation'\"\n [attr.aria-label]=\"group.label ?? null\">\n @if (group.label; as groupLabel) {\n <div\n class=\"ea-dropdown__group-label\"\n aria-hidden=\"true\">\n {{ groupLabel }}\n </div>\n }\n @for (entry of group.options; track entry.option.value) {\n <div\n class=\"ea-dropdown__option\"\n [class.ea-dropdown__option--selected]=\"entry.option.value === value()\"\n [class.ea-dropdown__option--focused]=\"entry.index === focusedIndex()\"\n [class.ea-dropdown__option--disabled]=\"entry.option.disabled\"\n [id]=\"id() + '-option-' + entry.index\"\n role=\"option\"\n [attr.aria-selected]=\"entry.index === selectedIndex()\"\n [attr.aria-disabled]=\"entry.option.disabled || null\"\n (click)=\"select(entry.option)\"\n (mouseenter)=\"focusedIndex.set(entry.index)\">\n {{ entry.option.label }}\n </div>\n }\n </div>\n }\n </div>\n @if (searchable() && filteredOptions().length === 0) {\n <div\n class=\"ea-dropdown__empty\"\n role=\"status\">\n {{ i18n.messages().dropdown.searchEmpty }}\n </div>\n }\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",
18758
+ styles: [".ea-dropdown-field{display:flex;flex-direction:column;gap:.375em;--ea-field-label-size: .875em;--ea-field-messages-size: .8125em}.ea-dropdown-field--2xs{font-size:var(--font-size-2xs)}.ea-dropdown-field--xs{font-size:var(--font-size-xs)}.ea-dropdown-field--sm{font-size:var(--font-size-sm)}.ea-dropdown-field--md{font-size:var(--font-size-md)}.ea-dropdown-field--lg{font-size:var(--font-size-lg)}.ea-dropdown-field--xl{font-size:var(--font-size-xl)}.ea-dropdown{position:relative}.ea-dropdown__trigger{display:flex;align-items:center;justify-content:space-between;gap:.5em;width:100%;min-height:2.5em;padding:.5em .75em;text-align:start;font-family:var(--font-family-sans);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-dropdown__trigger:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-dropdown__trigger:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-dropdown__trigger--open{border-color:var(--color-border-focus);box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-dropdown__trigger--open{outline:2px solid Highlight;outline-offset:2px}}.ea-dropdown__trigger--error{border-color:var(--color-error-default)}.ea-dropdown__trigger--error.ea-dropdown__trigger--open{box-shadow:var(--shadow-focus-ring-error)}@media(forced-colors:active){.ea-dropdown__trigger--error.ea-dropdown__trigger--open{outline:2px solid Highlight;outline-offset:2px}}.ea-dropdown__trigger--disabled{background-color:var(--color-bg-muted);opacity:.6;cursor:default}.ea-dropdown__trigger--readonly{cursor:default}.ea-dropdown__trigger--readonly:focus-visible{border-color:var(--color-border-focus);box-shadow:none}@media(forced-colors:active){.ea-dropdown__trigger--readonly:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-dropdown__trigger--clearable .ea-dropdown__value{margin-inline-end:2em}.ea-dropdown__clear{position:relative;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-dropdown__clear>*{font-size:1.25em}.ea-dropdown__clear:after{content:\"\";position:absolute;top:50%;left:50%;width:max(100%,var(--ea-icon-button-target, 24px));height:max(100%,var(--ea-icon-button-target, 24px));transform:translate(-50%,-50%)}.ea-dropdown__clear:hover{background-color:var(--color-state-hover);color:var(--color-text-primary)}.ea-dropdown__clear:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-dropdown__clear:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-dropdown__clear:disabled{cursor:default;opacity:.5}.ea-dropdown__clear{position:absolute;top:50%;inset-inline-end:2em;transform:translateY(-50%)}.ea-dropdown__value{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ea-dropdown__value--placeholder{color:var(--color-text-tertiary)}.ea-dropdown__chevron{flex-shrink:0;width:1em;height:1em;color:var(--color-text-secondary);transition:var(--transition-transform)}.ea-dropdown__chevron--open{transform:rotate(180deg)}.ea-dropdown__menu{overflow:hidden;display:flex;flex-direction:column;max-height:15rem;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);background-color:var(--ea-dropdown-menu-background-color, var(--color-bg-elevated))}@media(forced-colors:active){.ea-dropdown__menu{border:1px solid CanvasText}}.ea-dropdown__menu--2xs{font-size:var(--font-size-2xs)}.ea-dropdown__menu--xs{font-size:var(--font-size-xs)}.ea-dropdown__menu--sm{font-size:var(--font-size-sm)}.ea-dropdown__menu--md{font-size:var(--font-size-md)}.ea-dropdown__menu--lg{font-size:var(--font-size-lg)}.ea-dropdown__menu--xl{font-size:var(--font-size-xl)}.ea-dropdown__search{position:relative;display:flex;flex-shrink:0;align-items:center;gap:.5em;padding:.5em .75em}.ea-dropdown__search:after{position:absolute;bottom:0;inset-inline-end:0;inset-inline-start:0;height:var(--border-width-thin);background-color:var(--color-divider);content:\"\"}.ea-dropdown__search-icon{flex-shrink:0;width:1em;height:1em;color:var(--color-text-tertiary)}.ea-dropdown__search-input{flex:1;min-width:0;padding:0;font-size:inherit;font-family:var(--font-family-sans);border:none;background:none;color:var(--color-text-primary)}.ea-dropdown__search-input::placeholder{opacity:1;color:var(--color-text-tertiary)}.ea-dropdown__search-input:focus{outline:none}.ea-dropdown__list{overflow-y:auto;overscroll-behavior:none;flex:1;padding:.25em 0}.ea-dropdown__empty{padding:.75em;text-align:center;color:var(--color-text-tertiary)}.ea-dropdown__group{position:relative}.ea-dropdown__group--ruled{padding-top:.25em;margin-top:.25em}.ea-dropdown__group--ruled:before{position:absolute;top:0;inset-inline-end:0;inset-inline-start:0;height:var(--border-width-thin);background-color:var(--color-divider);content:\"\"}.ea-dropdown__group-label{display:block;padding:.5em .75em .125em;font-size:.8125em;font-weight:var(--font-weight-semibold);text-transform:uppercase;letter-spacing:.08em;color:var(--color-text-tertiary);-webkit-user-select:none;user-select:none}.ea-dropdown__option{padding:.5em .75em;font-size:inherit;white-space:nowrap;font-family:var(--font-family-sans);color:var(--color-text-primary);cursor:pointer;transition:var(--transition-colors)}.ea-dropdown__option--focused{background-color:var(--color-state-hover)}@media(forced-colors:active){.ea-dropdown__option--focused{background-color:Highlight;color:HighlightText}}.ea-dropdown__option--selected{color:var(--color-brand-text);font-weight:var(--font-weight-medium)}@media(forced-colors:active){.ea-dropdown__option--selected{background-color:Highlight;color:HighlightText}}.ea-dropdown__option--disabled{color:var(--color-text-disabled);cursor:default}@media(forced-colors:active){.ea-dropdown__option--disabled{color:GrayText}}\n"],
18062
18759
  dependencies: [
18063
18760
  {
18064
18761
  kind: "component",
@@ -18119,6 +18816,16 @@ var DropdownComponent = class DropdownComponent {
18119
18816
  "contextMenu"
18120
18817
  ],
18121
18818
  outputs: ["closeRequested", "openRequested"]
18819
+ },
18820
+ {
18821
+ kind: "component",
18822
+ type: SearchIconComponent,
18823
+ selector: "ea-icon-search"
18824
+ },
18825
+ {
18826
+ kind: "component",
18827
+ type: XIconComponent,
18828
+ selector: "ea-icon-x"
18122
18829
  }
18123
18830
  ],
18124
18831
  changeDetection: i0.ChangeDetectionStrategy.OnPush
@@ -18138,7 +18845,9 @@ i0.ɵɵngDeclareClassMetadata({
18138
18845
  FieldLabelComponent,
18139
18846
  FieldMessagesComponent,
18140
18847
  NgClass,
18141
- PopoverComponent
18848
+ PopoverComponent,
18849
+ SearchIconComponent,
18850
+ XIconComponent
18142
18851
  ],
18143
18852
  changeDetection: ChangeDetectionStrategy.OnPush,
18144
18853
  providers: [{
@@ -18146,8 +18855,8 @@ i0.ɵɵngDeclareClassMetadata({
18146
18855
  useExisting: forwardRef(() => DropdownComponent),
18147
18856
  multi: true
18148
18857
  }],
18149
- template: "<div class=\"ea-dropdown-field ea-dropdown-field--{{ size() }}\">\n @if (label(); as labelText) {\n <ea-field-label\n [text]=\"labelText\"\n [icon]=\"labelIcon()\"\n [help]=\"labelHelp()\"\n [forId]=\"id()\"\n [labelId]=\"id() + '-label'\"\n [required]=\"required()\" />\n }\n\n <div class=\"ea-dropdown\">\n <button\n #triggerEl\n type=\"button\"\n class=\"ea-dropdown__trigger\"\n [ngClass]=\"triggerClasses()\"\n [id]=\"id()\"\n role=\"combobox\"\n [disabled]=\"isDisabled()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-controls]=\"isOpen() ? id() + '-listbox' : null\"\n [attr.aria-activedescendant]=\"\n isOpen() && focusedIndex() >= 0 ? id() + '-option-' + focusedIndex() : null\n \"\n [attr.aria-labelledby]=\"triggerLabelledBy()\"\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)=\"handleKeydown($event)\">\n <span\n class=\"ea-dropdown__value\"\n [class.ea-dropdown__value--placeholder]=\"!selectedLabel()\">\n <bdi>{{ selectedLabel() || resolvedPlaceholder() }}</bdi>\n </span>\n <ea-icon-chevron-down\n class=\"ea-dropdown__chevron\"\n [class.ea-dropdown__chevron--open]=\"isOpen()\" />\n </button>\n\n <ea-popover\n [anchor]=\"triggerEl\"\n [open]=\"isOpen()\"\n placement=\"bottom-start\"\n role=\"listbox\"\n [surfaceId]=\"id() + '-listbox'\"\n [aria-label]=\"label()\"\n [matchAnchorWidth]=\"true\"\n [closeOnEscape]=\"false\"\n scrollBehavior=\"close\"\n (closeRequested)=\"onPopoverCloseRequested()\">\n <div\n class=\"ea-dropdown__menu\"\n [ngClass]=\"menuClasses()\"\n role=\"none\">\n @for (group of renderedGroups(); track $index) {\n <div\n class=\"ea-dropdown__group\"\n [class.ea-dropdown__group--ruled]=\"group.rule\"\n [attr.role]=\"grouped() ? 'group' : 'presentation'\"\n [attr.aria-label]=\"group.label ?? null\">\n @if (group.label; as groupLabel) {\n <div\n class=\"ea-dropdown__group-label\"\n aria-hidden=\"true\">\n {{ groupLabel }}\n </div>\n }\n @for (entry of group.options; track entry.option.value) {\n <div\n class=\"ea-dropdown__option\"\n [class.ea-dropdown__option--selected]=\"entry.option.value === value()\"\n [class.ea-dropdown__option--focused]=\"entry.index === focusedIndex()\"\n [class.ea-dropdown__option--disabled]=\"entry.option.disabled\"\n [id]=\"id() + '-option-' + entry.index\"\n role=\"option\"\n [attr.aria-selected]=\"entry.index === selectedIndex()\"\n [attr.aria-disabled]=\"entry.option.disabled || null\"\n (click)=\"select(entry.option)\"\n (mouseenter)=\"focusedIndex.set(entry.index)\">\n {{ entry.option.label }}\n </div>\n }\n </div>\n }\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",
18150
- styles: [".ea-dropdown-field{display:flex;flex-direction:column;gap:.375em;--ea-field-label-size: .875em;--ea-field-messages-size: .8125em}.ea-dropdown-field--2xs{font-size:var(--font-size-2xs)}.ea-dropdown-field--xs{font-size:var(--font-size-xs)}.ea-dropdown-field--sm{font-size:var(--font-size-sm)}.ea-dropdown-field--md{font-size:var(--font-size-md)}.ea-dropdown-field--lg{font-size:var(--font-size-lg)}.ea-dropdown-field--xl{font-size:var(--font-size-xl)}.ea-dropdown{position:relative}.ea-dropdown__trigger{display:flex;align-items:center;justify-content:space-between;gap:.5em;width:100%;min-height:2.5em;padding:.5em .75em;text-align:start;font-family:var(--font-family-sans);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-dropdown__trigger:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-dropdown__trigger:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-dropdown__trigger--open{border-color:var(--color-border-focus);box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-dropdown__trigger--open{outline:2px solid Highlight;outline-offset:2px}}.ea-dropdown__trigger--error{border-color:var(--color-error-default)}.ea-dropdown__trigger--error.ea-dropdown__trigger--open{box-shadow:var(--shadow-focus-ring-error)}@media(forced-colors:active){.ea-dropdown__trigger--error.ea-dropdown__trigger--open{outline:2px solid Highlight;outline-offset:2px}}.ea-dropdown__trigger--disabled{background-color:var(--color-bg-muted);opacity:.6;cursor:default}.ea-dropdown__trigger--readonly{cursor:default}.ea-dropdown__trigger--readonly:focus-visible{border-color:var(--color-border-focus);box-shadow:none}@media(forced-colors:active){.ea-dropdown__trigger--readonly:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-dropdown__value{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ea-dropdown__value--placeholder{color:var(--color-text-tertiary)}.ea-dropdown__chevron{flex-shrink:0;width:1em;height:1em;color:var(--color-text-secondary);transition:var(--transition-transform)}.ea-dropdown__chevron--open{transform:rotate(180deg)}.ea-dropdown__menu{max-height:15rem;padding:.25em 0;overflow-y:auto;overscroll-behavior:none;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);background-color:var(--ea-dropdown-menu-background-color, var(--color-bg-elevated))}@media(forced-colors:active){.ea-dropdown__menu{border:1px solid CanvasText}}.ea-dropdown__menu--2xs{font-size:var(--font-size-2xs)}.ea-dropdown__menu--xs{font-size:var(--font-size-xs)}.ea-dropdown__menu--sm{font-size:var(--font-size-sm)}.ea-dropdown__menu--md{font-size:var(--font-size-md)}.ea-dropdown__menu--lg{font-size:var(--font-size-lg)}.ea-dropdown__menu--xl{font-size:var(--font-size-xl)}.ea-dropdown__group{position:relative}.ea-dropdown__group--ruled{padding-top:.25em;margin-top:.25em}.ea-dropdown__group--ruled:before{position:absolute;top:0;inset-inline-end:0;inset-inline-start:0;height:var(--border-width-thin);background-color:var(--color-divider);content:\"\"}.ea-dropdown__group-label{display:block;padding:.5em .75em .125em;font-size:.8125em;font-weight:var(--font-weight-semibold);text-transform:uppercase;letter-spacing:.08em;color:var(--color-text-tertiary);-webkit-user-select:none;user-select:none}.ea-dropdown__option{padding:.5em .75em;font-size:inherit;white-space:nowrap;font-family:var(--font-family-sans);color:var(--color-text-primary);cursor:pointer;transition:var(--transition-colors)}.ea-dropdown__option--focused{background-color:var(--color-state-hover)}@media(forced-colors:active){.ea-dropdown__option--focused{background-color:Highlight;color:HighlightText}}.ea-dropdown__option--selected{color:var(--color-brand-text);font-weight:var(--font-weight-medium)}@media(forced-colors:active){.ea-dropdown__option--selected{background-color:Highlight;color:HighlightText}}.ea-dropdown__option--disabled{color:var(--color-text-disabled);cursor:default}@media(forced-colors:active){.ea-dropdown__option--disabled{color:GrayText}}\n"]
18858
+ template: "<div class=\"ea-dropdown-field ea-dropdown-field--{{ size() }}\">\n @if (label(); as labelText) {\n <ea-field-label\n [text]=\"labelText\"\n [icon]=\"labelIcon()\"\n [help]=\"labelHelp()\"\n [forId]=\"id()\"\n [labelId]=\"id() + '-label'\"\n [required]=\"required()\" />\n }\n\n <div class=\"ea-dropdown\">\n <button\n #triggerEl\n type=\"button\"\n class=\"ea-dropdown__trigger\"\n [ngClass]=\"triggerClasses()\"\n [id]=\"id()\"\n role=\"combobox\"\n [disabled]=\"isDisabled()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-controls]=\"isOpen() ? listboxId() : null\"\n [attr.aria-activedescendant]=\"searchable() ? null : activeOptionId()\"\n [attr.aria-labelledby]=\"triggerLabelledBy()\"\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)=\"handleKeydown($event)\">\n <span\n class=\"ea-dropdown__value\"\n [class.ea-dropdown__value--placeholder]=\"!selectedLabel()\">\n <bdi>{{ selectedLabel() || resolvedPlaceholder() }}</bdi>\n </span>\n <ea-icon-chevron-down\n class=\"ea-dropdown__chevron\"\n [class.ea-dropdown__chevron--open]=\"isOpen()\" />\n </button>\n @if (showClear()) {\n <button\n type=\"button\"\n class=\"ea-dropdown__clear\"\n [attr.aria-label]=\"i18n.messages().dropdown.clear\"\n (click)=\"clear()\">\n <ea-icon-x aria-hidden=\"true\" />\n </button>\n }\n\n <ea-popover\n [anchor]=\"triggerEl\"\n [open]=\"isOpen()\"\n placement=\"bottom-start\"\n [role]=\"searchable() ? 'dialog' : 'listbox'\"\n [surfaceId]=\"searchable() ? id() + '-popover' : listboxId()\"\n [aria-label]=\"searchable() ? i18n.messages().dropdown.dialogLabel : label()\"\n [matchAnchorWidth]=\"true\"\n [closeOnEscape]=\"false\"\n [scrollBehavior]=\"searchable() ? 'reposition' : 'close'\"\n (closeRequested)=\"onPopoverCloseRequested()\">\n <div\n class=\"ea-dropdown__menu\"\n [ngClass]=\"menuClasses()\"\n role=\"none\"\n (mousedown)=\"onMenuMousedown($event)\">\n @if (searchable()) {\n <div class=\"ea-dropdown__search\">\n <ea-icon-search\n class=\"ea-dropdown__search-icon\"\n aria-hidden=\"true\" />\n <input\n #searchEl\n type=\"text\"\n dir=\"auto\"\n class=\"ea-dropdown__search-input\"\n autocomplete=\"off\"\n [placeholder]=\"i18n.messages().dropdown.searchPlaceholder\"\n [value]=\"searchTerm()\"\n [attr.aria-controls]=\"listboxId()\"\n [attr.aria-activedescendant]=\"activeOptionId()\"\n (input)=\"onSearchInput(searchEl.value)\"\n (keydown)=\"handleSearchKeydown($event)\" />\n </div>\n }\n <div\n class=\"ea-dropdown__list\"\n [attr.id]=\"searchable() ? listboxId() : null\"\n [attr.role]=\"searchable() ? 'listbox' : 'none'\"\n [attr.aria-label]=\"searchable() ? (label() ?? null) : null\">\n @for (group of renderedGroups(); track $index) {\n <div\n class=\"ea-dropdown__group\"\n [class.ea-dropdown__group--ruled]=\"group.rule\"\n [attr.role]=\"grouped() ? 'group' : 'presentation'\"\n [attr.aria-label]=\"group.label ?? null\">\n @if (group.label; as groupLabel) {\n <div\n class=\"ea-dropdown__group-label\"\n aria-hidden=\"true\">\n {{ groupLabel }}\n </div>\n }\n @for (entry of group.options; track entry.option.value) {\n <div\n class=\"ea-dropdown__option\"\n [class.ea-dropdown__option--selected]=\"entry.option.value === value()\"\n [class.ea-dropdown__option--focused]=\"entry.index === focusedIndex()\"\n [class.ea-dropdown__option--disabled]=\"entry.option.disabled\"\n [id]=\"id() + '-option-' + entry.index\"\n role=\"option\"\n [attr.aria-selected]=\"entry.index === selectedIndex()\"\n [attr.aria-disabled]=\"entry.option.disabled || null\"\n (click)=\"select(entry.option)\"\n (mouseenter)=\"focusedIndex.set(entry.index)\">\n {{ entry.option.label }}\n </div>\n }\n </div>\n }\n </div>\n @if (searchable() && filteredOptions().length === 0) {\n <div\n class=\"ea-dropdown__empty\"\n role=\"status\">\n {{ i18n.messages().dropdown.searchEmpty }}\n </div>\n }\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",
18859
+ styles: [".ea-dropdown-field{display:flex;flex-direction:column;gap:.375em;--ea-field-label-size: .875em;--ea-field-messages-size: .8125em}.ea-dropdown-field--2xs{font-size:var(--font-size-2xs)}.ea-dropdown-field--xs{font-size:var(--font-size-xs)}.ea-dropdown-field--sm{font-size:var(--font-size-sm)}.ea-dropdown-field--md{font-size:var(--font-size-md)}.ea-dropdown-field--lg{font-size:var(--font-size-lg)}.ea-dropdown-field--xl{font-size:var(--font-size-xl)}.ea-dropdown{position:relative}.ea-dropdown__trigger{display:flex;align-items:center;justify-content:space-between;gap:.5em;width:100%;min-height:2.5em;padding:.5em .75em;text-align:start;font-family:var(--font-family-sans);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-dropdown__trigger:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-dropdown__trigger:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-dropdown__trigger--open{border-color:var(--color-border-focus);box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-dropdown__trigger--open{outline:2px solid Highlight;outline-offset:2px}}.ea-dropdown__trigger--error{border-color:var(--color-error-default)}.ea-dropdown__trigger--error.ea-dropdown__trigger--open{box-shadow:var(--shadow-focus-ring-error)}@media(forced-colors:active){.ea-dropdown__trigger--error.ea-dropdown__trigger--open{outline:2px solid Highlight;outline-offset:2px}}.ea-dropdown__trigger--disabled{background-color:var(--color-bg-muted);opacity:.6;cursor:default}.ea-dropdown__trigger--readonly{cursor:default}.ea-dropdown__trigger--readonly:focus-visible{border-color:var(--color-border-focus);box-shadow:none}@media(forced-colors:active){.ea-dropdown__trigger--readonly:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-dropdown__trigger--clearable .ea-dropdown__value{margin-inline-end:2em}.ea-dropdown__clear{position:relative;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-dropdown__clear>*{font-size:1.25em}.ea-dropdown__clear:after{content:\"\";position:absolute;top:50%;left:50%;width:max(100%,var(--ea-icon-button-target, 24px));height:max(100%,var(--ea-icon-button-target, 24px));transform:translate(-50%,-50%)}.ea-dropdown__clear:hover{background-color:var(--color-state-hover);color:var(--color-text-primary)}.ea-dropdown__clear:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-dropdown__clear:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-dropdown__clear:disabled{cursor:default;opacity:.5}.ea-dropdown__clear{position:absolute;top:50%;inset-inline-end:2em;transform:translateY(-50%)}.ea-dropdown__value{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ea-dropdown__value--placeholder{color:var(--color-text-tertiary)}.ea-dropdown__chevron{flex-shrink:0;width:1em;height:1em;color:var(--color-text-secondary);transition:var(--transition-transform)}.ea-dropdown__chevron--open{transform:rotate(180deg)}.ea-dropdown__menu{overflow:hidden;display:flex;flex-direction:column;max-height:15rem;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);background-color:var(--ea-dropdown-menu-background-color, var(--color-bg-elevated))}@media(forced-colors:active){.ea-dropdown__menu{border:1px solid CanvasText}}.ea-dropdown__menu--2xs{font-size:var(--font-size-2xs)}.ea-dropdown__menu--xs{font-size:var(--font-size-xs)}.ea-dropdown__menu--sm{font-size:var(--font-size-sm)}.ea-dropdown__menu--md{font-size:var(--font-size-md)}.ea-dropdown__menu--lg{font-size:var(--font-size-lg)}.ea-dropdown__menu--xl{font-size:var(--font-size-xl)}.ea-dropdown__search{position:relative;display:flex;flex-shrink:0;align-items:center;gap:.5em;padding:.5em .75em}.ea-dropdown__search:after{position:absolute;bottom:0;inset-inline-end:0;inset-inline-start:0;height:var(--border-width-thin);background-color:var(--color-divider);content:\"\"}.ea-dropdown__search-icon{flex-shrink:0;width:1em;height:1em;color:var(--color-text-tertiary)}.ea-dropdown__search-input{flex:1;min-width:0;padding:0;font-size:inherit;font-family:var(--font-family-sans);border:none;background:none;color:var(--color-text-primary)}.ea-dropdown__search-input::placeholder{opacity:1;color:var(--color-text-tertiary)}.ea-dropdown__search-input:focus{outline:none}.ea-dropdown__list{overflow-y:auto;overscroll-behavior:none;flex:1;padding:.25em 0}.ea-dropdown__empty{padding:.75em;text-align:center;color:var(--color-text-tertiary)}.ea-dropdown__group{position:relative}.ea-dropdown__group--ruled{padding-top:.25em;margin-top:.25em}.ea-dropdown__group--ruled:before{position:absolute;top:0;inset-inline-end:0;inset-inline-start:0;height:var(--border-width-thin);background-color:var(--color-divider);content:\"\"}.ea-dropdown__group-label{display:block;padding:.5em .75em .125em;font-size:.8125em;font-weight:var(--font-weight-semibold);text-transform:uppercase;letter-spacing:.08em;color:var(--color-text-tertiary);-webkit-user-select:none;user-select:none}.ea-dropdown__option{padding:.5em .75em;font-size:inherit;white-space:nowrap;font-family:var(--font-family-sans);color:var(--color-text-primary);cursor:pointer;transition:var(--transition-colors)}.ea-dropdown__option--focused{background-color:var(--color-state-hover)}@media(forced-colors:active){.ea-dropdown__option--focused{background-color:Highlight;color:HighlightText}}.ea-dropdown__option--selected{color:var(--color-brand-text);font-weight:var(--font-weight-medium)}@media(forced-colors:active){.ea-dropdown__option--selected{background-color:Highlight;color:HighlightText}}.ea-dropdown__option--disabled{color:var(--color-text-disabled);cursor:default}@media(forced-colors:active){.ea-dropdown__option--disabled{color:GrayText}}\n"]
18151
18860
  }]
18152
18861
  }],
18153
18862
  ctorParameters: () => [],
@@ -18156,6 +18865,14 @@ i0.ɵɵngDeclareClassMetadata({
18156
18865
  type: i0.ViewChild,
18157
18866
  args: ["triggerEl", { isSignal: true }]
18158
18867
  }],
18868
+ popover: [{
18869
+ type: i0.ViewChild,
18870
+ args: [i0.forwardRef(() => PopoverComponent), { isSignal: true }]
18871
+ }],
18872
+ searchEl: [{
18873
+ type: i0.ViewChild,
18874
+ args: ["searchEl", { isSignal: true }]
18875
+ }],
18159
18876
  label: [{
18160
18877
  type: i0.Input,
18161
18878
  args: [{
@@ -18228,6 +18945,22 @@ i0.ɵɵngDeclareClassMetadata({
18228
18945
  required: false
18229
18946
  }]
18230
18947
  }],
18948
+ clearable: [{
18949
+ type: i0.Input,
18950
+ args: [{
18951
+ isSignal: true,
18952
+ alias: "clearable",
18953
+ required: false
18954
+ }]
18955
+ }],
18956
+ searchable: [{
18957
+ type: i0.Input,
18958
+ args: [{
18959
+ isSignal: true,
18960
+ alias: "searchable",
18961
+ required: false
18962
+ }]
18963
+ }],
18231
18964
  hint: [{
18232
18965
  type: i0.Input,
18233
18966
  args: [{
@@ -21720,6 +22453,7 @@ var LineChartComponent = class LineChartComponent {
21720
22453
  "flip",
21721
22454
  "whenClipped",
21722
22455
  "maxWidth",
22456
+ "showDelay",
21723
22457
  "dismissDelay",
21724
22458
  "tooltipOpen"
21725
22459
  ]
@@ -21973,7 +22707,7 @@ var MenuItemComponent = class MenuItemComponent {
21973
22707
  outputs: { clicked: "clicked" },
21974
22708
  ngImport: i0,
21975
22709
  template: "<button\n type=\"button\"\n class=\"ea-menu-item\"\n role=\"menuitem\"\n [id]=\"itemId\"\n [attr.tabindex]=\"tabIndex()\"\n [class.ea-menu-item--disabled]=\"disabled()\"\n [class.ea-menu-item--danger]=\"variant() === 'danger'\"\n [disabled]=\"disabled()\"\n (click)=\"handleClick($event)\">\n <span class=\"ea-menu-item__icon\">\n <ng-content select=\"[slot=icon]\" />\n </span>\n <span class=\"ea-menu-item__label\">\n <ng-content />\n </span>\n</button>\n",
21976
- styles: [".ea-menu-item{display:flex;align-items:center;gap:.5em;width:100%;padding:.5em .75em;font-size:inherit;font-family:var(--font-family-sans);text-align:start;border:none;background:transparent;color:var(--color-text-primary);cursor:pointer;transition:var(--transition-colors)}.ea-menu-item:hover:not(.ea-menu-item--disabled),.ea-menu-item:focus-visible:not(.ea-menu-item--disabled){background-color:var(--color-state-hover)}@media(forced-colors:active){.ea-menu-item:hover:not(.ea-menu-item--disabled),.ea-menu-item:focus-visible:not(.ea-menu-item--disabled){background-color:Highlight;color:HighlightText}}.ea-menu-item:focus-visible{outline:none}.ea-menu-item--danger{color:var(--color-error-default)}.ea-menu-item--danger:hover:not(.ea-menu-item--disabled),.ea-menu-item--danger:focus-visible:not(.ea-menu-item--disabled){background-color:var(--color-error-subtle, var(--color-bg-muted))}@media(forced-colors:active){.ea-menu-item--danger:hover:not(.ea-menu-item--disabled),.ea-menu-item--danger:focus-visible:not(.ea-menu-item--disabled){background-color:Highlight;color:HighlightText}}.ea-menu-item--disabled{color:var(--color-text-disabled);cursor:default}.ea-menu-item__icon{display:flex;flex-shrink:0;align-items:center;justify-content:center;width:1em;height:1em;color:inherit}.ea-menu-item__icon>*{width:1em;height:1em}.ea-menu-item__icon:empty{display:none}.ea-menu-item__label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n"],
22710
+ styles: [".ea-menu-item{display:flex;align-items:center;gap:.5em;width:100%;padding:.5em .75em;font-size:inherit;text-align:start;font-family:var(--font-family-sans);border:none;background:transparent;color:var(--color-text-primary);cursor:pointer;transition:var(--transition-colors)}.ea-menu-item:hover:not(.ea-menu-item--disabled),.ea-menu-item:focus-visible:not(.ea-menu-item--disabled){background-color:var(--color-state-hover)}@media(forced-colors:active){.ea-menu-item:hover:not(.ea-menu-item--disabled),.ea-menu-item:focus-visible:not(.ea-menu-item--disabled){background-color:Highlight;color:HighlightText}}.ea-menu-item:focus-visible{outline:none}.ea-menu-item--danger{color:var(--color-error-default)}.ea-menu-item--danger:hover:not(.ea-menu-item--disabled),.ea-menu-item--danger:focus-visible:not(.ea-menu-item--disabled){background-color:var(--color-error-subtle, var(--color-bg-muted))}@media(forced-colors:active){.ea-menu-item--danger:hover:not(.ea-menu-item--disabled),.ea-menu-item--danger:focus-visible:not(.ea-menu-item--disabled){background-color:Highlight;color:HighlightText}}.ea-menu-item--disabled{color:var(--color-text-disabled);cursor:default}.ea-menu-item__icon{display:flex;flex-shrink:0;align-items:center;justify-content:center;width:1em;height:1em;color:inherit}.ea-menu-item__icon>*{width:1em;height:1em}.ea-menu-item__icon:empty{display:none}.ea-menu-item__label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n"],
21977
22711
  changeDetection: i0.ChangeDetectionStrategy.OnPush
21978
22712
  });
21979
22713
  };
@@ -21988,7 +22722,7 @@ i0.ɵɵngDeclareClassMetadata({
21988
22722
  selector: "ea-menu-item",
21989
22723
  changeDetection: ChangeDetectionStrategy.OnPush,
21990
22724
  template: "<button\n type=\"button\"\n class=\"ea-menu-item\"\n role=\"menuitem\"\n [id]=\"itemId\"\n [attr.tabindex]=\"tabIndex()\"\n [class.ea-menu-item--disabled]=\"disabled()\"\n [class.ea-menu-item--danger]=\"variant() === 'danger'\"\n [disabled]=\"disabled()\"\n (click)=\"handleClick($event)\">\n <span class=\"ea-menu-item__icon\">\n <ng-content select=\"[slot=icon]\" />\n </span>\n <span class=\"ea-menu-item__label\">\n <ng-content />\n </span>\n</button>\n",
21991
- styles: [".ea-menu-item{display:flex;align-items:center;gap:.5em;width:100%;padding:.5em .75em;font-size:inherit;font-family:var(--font-family-sans);text-align:start;border:none;background:transparent;color:var(--color-text-primary);cursor:pointer;transition:var(--transition-colors)}.ea-menu-item:hover:not(.ea-menu-item--disabled),.ea-menu-item:focus-visible:not(.ea-menu-item--disabled){background-color:var(--color-state-hover)}@media(forced-colors:active){.ea-menu-item:hover:not(.ea-menu-item--disabled),.ea-menu-item:focus-visible:not(.ea-menu-item--disabled){background-color:Highlight;color:HighlightText}}.ea-menu-item:focus-visible{outline:none}.ea-menu-item--danger{color:var(--color-error-default)}.ea-menu-item--danger:hover:not(.ea-menu-item--disabled),.ea-menu-item--danger:focus-visible:not(.ea-menu-item--disabled){background-color:var(--color-error-subtle, var(--color-bg-muted))}@media(forced-colors:active){.ea-menu-item--danger:hover:not(.ea-menu-item--disabled),.ea-menu-item--danger:focus-visible:not(.ea-menu-item--disabled){background-color:Highlight;color:HighlightText}}.ea-menu-item--disabled{color:var(--color-text-disabled);cursor:default}.ea-menu-item__icon{display:flex;flex-shrink:0;align-items:center;justify-content:center;width:1em;height:1em;color:inherit}.ea-menu-item__icon>*{width:1em;height:1em}.ea-menu-item__icon:empty{display:none}.ea-menu-item__label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n"]
22725
+ styles: [".ea-menu-item{display:flex;align-items:center;gap:.5em;width:100%;padding:.5em .75em;font-size:inherit;text-align:start;font-family:var(--font-family-sans);border:none;background:transparent;color:var(--color-text-primary);cursor:pointer;transition:var(--transition-colors)}.ea-menu-item:hover:not(.ea-menu-item--disabled),.ea-menu-item:focus-visible:not(.ea-menu-item--disabled){background-color:var(--color-state-hover)}@media(forced-colors:active){.ea-menu-item:hover:not(.ea-menu-item--disabled),.ea-menu-item:focus-visible:not(.ea-menu-item--disabled){background-color:Highlight;color:HighlightText}}.ea-menu-item:focus-visible{outline:none}.ea-menu-item--danger{color:var(--color-error-default)}.ea-menu-item--danger:hover:not(.ea-menu-item--disabled),.ea-menu-item--danger:focus-visible:not(.ea-menu-item--disabled){background-color:var(--color-error-subtle, var(--color-bg-muted))}@media(forced-colors:active){.ea-menu-item--danger:hover:not(.ea-menu-item--disabled),.ea-menu-item--danger:focus-visible:not(.ea-menu-item--disabled){background-color:Highlight;color:HighlightText}}.ea-menu-item--disabled{color:var(--color-text-disabled);cursor:default}.ea-menu-item__icon{display:flex;flex-shrink:0;align-items:center;justify-content:center;width:1em;height:1em;color:inherit}.ea-menu-item__icon>*{width:1em;height:1em}.ea-menu-item__icon:empty{display:none}.ea-menu-item__label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n"]
21992
22726
  }]
21993
22727
  }],
21994
22728
  propDecorators: {
@@ -22290,6 +23024,7 @@ var TagComponent = class TagComponent {
22290
23024
  "flip",
22291
23025
  "whenClipped",
22292
23026
  "maxWidth",
23027
+ "showDelay",
22293
23028
  "dismissDelay",
22294
23029
  "tooltipOpen"
22295
23030
  ]
@@ -23103,6 +23838,7 @@ var MultiSelectComponent = class MultiSelectComponent {
23103
23838
  "flip",
23104
23839
  "whenClipped",
23105
23840
  "maxWidth",
23841
+ "showDelay",
23106
23842
  "dismissDelay",
23107
23843
  "tooltipOpen"
23108
23844
  ]
@@ -24594,6 +25330,7 @@ var PieChartComponent = class PieChartComponent {
24594
25330
  "flip",
24595
25331
  "whenClipped",
24596
25332
  "maxWidth",
25333
+ "showDelay",
24597
25334
  "dismissDelay",
24598
25335
  "tooltipOpen"
24599
25336
  ]
@@ -28559,6 +29296,7 @@ var TabsComponent = class TabsComponent {
28559
29296
  registeredTabs = signal([], ...ngDevMode ? [{ debugName: "registeredTabs" }] : /* istanbul ignore next */ []);
28560
29297
  variant = input("underline", ...ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []);
28561
29298
  size = input("md", ...ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []);
29299
+ orientation = input("horizontal", ...ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []);
28562
29300
  ariaLabel = input(void 0, ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
28563
29301
  activeTab = model("", ...ngDevMode ? [{ debugName: "activeTab" }] : /* istanbul ignore next */ []);
28564
29302
  changed = output();
@@ -28575,9 +29313,13 @@ var TabsComponent = class TabsComponent {
28575
29313
  handleKeydown(event) {
28576
29314
  const tabList = this.registeredTabs().filter((t) => !t.disabled());
28577
29315
  const currentIndex = tabList.findIndex((t) => t.value() === this.activeTab());
28578
- const rtl = isRtl(event.currentTarget);
28579
- const forwardKey = rtl ? "ArrowLeft" : "ArrowRight";
28580
- const backwardKey = rtl ? "ArrowRight" : "ArrowLeft";
29316
+ let forwardKey = "ArrowDown";
29317
+ let backwardKey = "ArrowUp";
29318
+ if (this.orientation() === "horizontal") {
29319
+ const rtl = isRtl(event.currentTarget);
29320
+ forwardKey = rtl ? "ArrowLeft" : "ArrowRight";
29321
+ backwardKey = rtl ? "ArrowRight" : "ArrowLeft";
29322
+ }
28581
29323
  let nextIndex = -1;
28582
29324
  if (event.key === forwardKey) {
28583
29325
  event.preventDefault();
@@ -28627,6 +29369,13 @@ var TabsComponent = class TabsComponent {
28627
29369
  isRequired: false,
28628
29370
  transformFunction: null
28629
29371
  },
29372
+ orientation: {
29373
+ classPropertyName: "orientation",
29374
+ publicName: "orientation",
29375
+ isSignal: true,
29376
+ isRequired: false,
29377
+ transformFunction: null
29378
+ },
28630
29379
  ariaLabel: {
28631
29380
  classPropertyName: "ariaLabel",
28632
29381
  publicName: "ariaLabel",
@@ -28647,8 +29396,8 @@ var TabsComponent = class TabsComponent {
28647
29396
  changed: "changed"
28648
29397
  },
28649
29398
  ngImport: i0,
28650
- template: "<div class=\"ea-tabs\">\n <div\n class=\"ea-tabs__list ea-tabs__list--{{ size() }}\"\n [class.ea-tabs__list--underline]=\"variant() === 'underline'\"\n [class.ea-tabs__list--filled]=\"variant() === 'filled'\"\n role=\"tablist\"\n [attr.aria-label]=\"ariaLabel() || null\"\n (keydown)=\"handleKeydown($event)\">\n @for (tab of registeredTabs(); track tab.value()) {\n <button\n class=\"ea-tabs__trigger\"\n [class.ea-tabs__trigger--active]=\"tab.isActive()\"\n type=\"button\"\n role=\"tab\"\n [id]=\"tab.id() + '-tab'\"\n [attr.aria-selected]=\"tab.isActive()\"\n [attr.aria-controls]=\"tab.id() + '-panel'\"\n [disabled]=\"tab.disabled()\"\n [tabindex]=\"tab.isActive() ? 0 : -1\"\n (click)=\"selectTab(tab.value())\">\n {{ tab.label() }}\n </button>\n }\n </div>\n <ng-content />\n</div>\n",
28651
- styles: [".ea-tabs{display:flex;flex-direction:column;gap:var(--space-4)}.ea-tabs__list{display:flex;gap:.25em}.ea-tabs__list--underline{border-bottom:var(--border-width-thin) solid var(--color-border-default);gap:0}.ea-tabs__list--underline .ea-tabs__trigger{border-radius:0;border-bottom:var(--border-width-medium) solid transparent;margin-bottom:calc(-1 * var(--border-width-thin))}.ea-tabs__list--underline .ea-tabs__trigger--active{border-bottom-color:var(--color-brand-text);color:var(--color-brand-text)}@media(forced-colors:active){.ea-tabs__list--underline .ea-tabs__trigger--active{border-color:Highlight;color:Highlight}}.ea-tabs__list--underline .ea-tabs__trigger:hover:not(:disabled):not(.ea-tabs__trigger--active){border-bottom-color:var(--color-border-strong)}.ea-tabs__list--filled{padding:.25em;border-radius:var(--radius-lg);background-color:var(--color-bg-muted)}.ea-tabs__list--filled .ea-tabs__trigger{border-radius:var(--radius-md)}.ea-tabs__list--filled .ea-tabs__trigger--active{background-color:var(--color-bg-base);box-shadow:var(--shadow-sm);color:var(--color-text-primary)}@media(forced-colors:active){.ea-tabs__list--filled .ea-tabs__trigger--active{background-color:Highlight;border-color:Highlight;color:HighlightText}}.ea-tabs__list--2xs{font-size:var(--font-size-2xs)}.ea-tabs__list--xs{font-size:var(--font-size-xs)}.ea-tabs__list--sm{font-size:var(--font-size-sm)}.ea-tabs__list--md{font-size:var(--font-size-md)}.ea-tabs__list--lg{font-size:var(--font-size-lg)}.ea-tabs__list--xl{font-size:var(--font-size-xl)}.ea-tabs__trigger{display:flex;align-items:center;justify-content:center;padding:.5em 1em;font-size:inherit;font-weight:var(--font-weight-medium);font-family:var(--font-family-sans);line-height:var(--line-height-normal);white-space:nowrap;background:none;border:none;color:var(--color-text-secondary);cursor:pointer;transition:var(--transition-colors)}.ea-tabs__trigger:hover:not(:disabled){color:var(--color-text-primary)}.ea-tabs__trigger:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-tabs__trigger:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-tabs__trigger:disabled{opacity:.5;cursor:default}\n"],
29399
+ template: "<div\n class=\"ea-tabs\"\n [class.ea-tabs--vertical]=\"orientation() === 'vertical'\">\n <div\n class=\"ea-tabs__list ea-tabs__list--{{ size() }}\"\n [class.ea-tabs__list--underline]=\"variant() === 'underline'\"\n [class.ea-tabs__list--filled]=\"variant() === 'filled'\"\n role=\"tablist\"\n [attr.aria-orientation]=\"orientation()\"\n [attr.aria-label]=\"ariaLabel() || null\"\n (keydown)=\"handleKeydown($event)\">\n @for (tab of registeredTabs(); track tab.value()) {\n <button\n class=\"ea-tabs__trigger\"\n [class.ea-tabs__trigger--active]=\"tab.isActive()\"\n type=\"button\"\n role=\"tab\"\n [id]=\"tab.id() + '-tab'\"\n [attr.aria-selected]=\"tab.isActive()\"\n [attr.aria-controls]=\"tab.id() + '-panel'\"\n [disabled]=\"tab.disabled()\"\n [tabindex]=\"tab.isActive() ? 0 : -1\"\n (click)=\"selectTab(tab.value())\">\n {{ tab.label() }}\n </button>\n }\n </div>\n <ng-content />\n</div>\n",
29400
+ styles: [".ea-tabs{display:flex;flex-direction:column;gap:var(--space-4)}.ea-tabs__list{display:flex;gap:.25em}.ea-tabs__list--underline{border-bottom:var(--border-width-thin) solid var(--color-border-default);gap:0}.ea-tabs__list--underline .ea-tabs__trigger{border-radius:0;border-bottom:var(--border-width-medium) solid transparent;margin-bottom:calc(-1 * var(--border-width-thin))}.ea-tabs__list--underline .ea-tabs__trigger--active{border-bottom-color:var(--color-brand-text);color:var(--color-brand-text)}@media(forced-colors:active){.ea-tabs__list--underline .ea-tabs__trigger--active{border-color:Highlight;color:Highlight}}.ea-tabs__list--underline .ea-tabs__trigger:hover:not(:disabled):not(.ea-tabs__trigger--active){border-bottom-color:var(--color-border-strong)}.ea-tabs__list--filled{padding:.25em;border-radius:var(--radius-lg);background-color:var(--color-bg-muted)}.ea-tabs__list--filled .ea-tabs__trigger{border-radius:var(--radius-md)}.ea-tabs__list--filled .ea-tabs__trigger--active{background-color:var(--color-bg-base);box-shadow:var(--shadow-sm);color:var(--color-text-primary)}@media(forced-colors:active){.ea-tabs__list--filled .ea-tabs__trigger--active{background-color:Highlight;border-color:Highlight;color:HighlightText}}.ea-tabs__list--2xs{font-size:var(--font-size-2xs)}.ea-tabs__list--xs{font-size:var(--font-size-xs)}.ea-tabs__list--sm{font-size:var(--font-size-sm)}.ea-tabs__list--md{font-size:var(--font-size-md)}.ea-tabs__list--lg{font-size:var(--font-size-lg)}.ea-tabs__list--xl{font-size:var(--font-size-xl)}.ea-tabs__trigger{display:flex;align-items:center;justify-content:center;padding:.5em 1em;font-size:inherit;font-weight:var(--font-weight-medium);font-family:var(--font-family-sans);line-height:var(--line-height-normal);white-space:nowrap;background:none;border:none;color:var(--color-text-secondary);cursor:pointer;transition:var(--transition-colors)}.ea-tabs__trigger:hover:not(:disabled){color:var(--color-text-primary)}.ea-tabs__trigger:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-tabs__trigger:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-tabs__trigger:disabled{opacity:.5;cursor:default}.ea-tabs--vertical{flex-direction:row}.ea-tabs--vertical .ea-tabs__list{flex-direction:column;flex-shrink:0}.ea-tabs--vertical .ea-tabs__list--underline{border-bottom:none;border-inline-end:var(--border-width-thin) solid var(--color-border-default)}.ea-tabs--vertical .ea-tabs__list--underline .ea-tabs__trigger{margin-bottom:0;margin-inline-end:calc(-1 * var(--border-width-thin));border-bottom:none;border-inline-end:var(--border-width-medium) solid transparent}.ea-tabs--vertical .ea-tabs__list--underline .ea-tabs__trigger--active{border-inline-end-color:var(--color-brand-text)}@media(forced-colors:active){.ea-tabs--vertical .ea-tabs__list--underline .ea-tabs__trigger--active{border-inline-end-color:Highlight}}.ea-tabs--vertical .ea-tabs__list--underline .ea-tabs__trigger:hover:not(:disabled):not(.ea-tabs__trigger--active){border-inline-end-color:var(--color-border-strong)}.ea-tabs--vertical .ea-tabs__list--filled{align-self:flex-start}.ea-tabs--vertical .ea-tabs__trigger{justify-content:flex-start}\n"],
28652
29401
  changeDetection: i0.ChangeDetectionStrategy.OnPush
28653
29402
  });
28654
29403
  };
@@ -28662,8 +29411,8 @@ i0.ɵɵngDeclareClassMetadata({
28662
29411
  args: [{
28663
29412
  selector: "ea-tabs",
28664
29413
  changeDetection: ChangeDetectionStrategy.OnPush,
28665
- template: "<div class=\"ea-tabs\">\n <div\n class=\"ea-tabs__list ea-tabs__list--{{ size() }}\"\n [class.ea-tabs__list--underline]=\"variant() === 'underline'\"\n [class.ea-tabs__list--filled]=\"variant() === 'filled'\"\n role=\"tablist\"\n [attr.aria-label]=\"ariaLabel() || null\"\n (keydown)=\"handleKeydown($event)\">\n @for (tab of registeredTabs(); track tab.value()) {\n <button\n class=\"ea-tabs__trigger\"\n [class.ea-tabs__trigger--active]=\"tab.isActive()\"\n type=\"button\"\n role=\"tab\"\n [id]=\"tab.id() + '-tab'\"\n [attr.aria-selected]=\"tab.isActive()\"\n [attr.aria-controls]=\"tab.id() + '-panel'\"\n [disabled]=\"tab.disabled()\"\n [tabindex]=\"tab.isActive() ? 0 : -1\"\n (click)=\"selectTab(tab.value())\">\n {{ tab.label() }}\n </button>\n }\n </div>\n <ng-content />\n</div>\n",
28666
- styles: [".ea-tabs{display:flex;flex-direction:column;gap:var(--space-4)}.ea-tabs__list{display:flex;gap:.25em}.ea-tabs__list--underline{border-bottom:var(--border-width-thin) solid var(--color-border-default);gap:0}.ea-tabs__list--underline .ea-tabs__trigger{border-radius:0;border-bottom:var(--border-width-medium) solid transparent;margin-bottom:calc(-1 * var(--border-width-thin))}.ea-tabs__list--underline .ea-tabs__trigger--active{border-bottom-color:var(--color-brand-text);color:var(--color-brand-text)}@media(forced-colors:active){.ea-tabs__list--underline .ea-tabs__trigger--active{border-color:Highlight;color:Highlight}}.ea-tabs__list--underline .ea-tabs__trigger:hover:not(:disabled):not(.ea-tabs__trigger--active){border-bottom-color:var(--color-border-strong)}.ea-tabs__list--filled{padding:.25em;border-radius:var(--radius-lg);background-color:var(--color-bg-muted)}.ea-tabs__list--filled .ea-tabs__trigger{border-radius:var(--radius-md)}.ea-tabs__list--filled .ea-tabs__trigger--active{background-color:var(--color-bg-base);box-shadow:var(--shadow-sm);color:var(--color-text-primary)}@media(forced-colors:active){.ea-tabs__list--filled .ea-tabs__trigger--active{background-color:Highlight;border-color:Highlight;color:HighlightText}}.ea-tabs__list--2xs{font-size:var(--font-size-2xs)}.ea-tabs__list--xs{font-size:var(--font-size-xs)}.ea-tabs__list--sm{font-size:var(--font-size-sm)}.ea-tabs__list--md{font-size:var(--font-size-md)}.ea-tabs__list--lg{font-size:var(--font-size-lg)}.ea-tabs__list--xl{font-size:var(--font-size-xl)}.ea-tabs__trigger{display:flex;align-items:center;justify-content:center;padding:.5em 1em;font-size:inherit;font-weight:var(--font-weight-medium);font-family:var(--font-family-sans);line-height:var(--line-height-normal);white-space:nowrap;background:none;border:none;color:var(--color-text-secondary);cursor:pointer;transition:var(--transition-colors)}.ea-tabs__trigger:hover:not(:disabled){color:var(--color-text-primary)}.ea-tabs__trigger:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-tabs__trigger:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-tabs__trigger:disabled{opacity:.5;cursor:default}\n"]
29414
+ template: "<div\n class=\"ea-tabs\"\n [class.ea-tabs--vertical]=\"orientation() === 'vertical'\">\n <div\n class=\"ea-tabs__list ea-tabs__list--{{ size() }}\"\n [class.ea-tabs__list--underline]=\"variant() === 'underline'\"\n [class.ea-tabs__list--filled]=\"variant() === 'filled'\"\n role=\"tablist\"\n [attr.aria-orientation]=\"orientation()\"\n [attr.aria-label]=\"ariaLabel() || null\"\n (keydown)=\"handleKeydown($event)\">\n @for (tab of registeredTabs(); track tab.value()) {\n <button\n class=\"ea-tabs__trigger\"\n [class.ea-tabs__trigger--active]=\"tab.isActive()\"\n type=\"button\"\n role=\"tab\"\n [id]=\"tab.id() + '-tab'\"\n [attr.aria-selected]=\"tab.isActive()\"\n [attr.aria-controls]=\"tab.id() + '-panel'\"\n [disabled]=\"tab.disabled()\"\n [tabindex]=\"tab.isActive() ? 0 : -1\"\n (click)=\"selectTab(tab.value())\">\n {{ tab.label() }}\n </button>\n }\n </div>\n <ng-content />\n</div>\n",
29415
+ styles: [".ea-tabs{display:flex;flex-direction:column;gap:var(--space-4)}.ea-tabs__list{display:flex;gap:.25em}.ea-tabs__list--underline{border-bottom:var(--border-width-thin) solid var(--color-border-default);gap:0}.ea-tabs__list--underline .ea-tabs__trigger{border-radius:0;border-bottom:var(--border-width-medium) solid transparent;margin-bottom:calc(-1 * var(--border-width-thin))}.ea-tabs__list--underline .ea-tabs__trigger--active{border-bottom-color:var(--color-brand-text);color:var(--color-brand-text)}@media(forced-colors:active){.ea-tabs__list--underline .ea-tabs__trigger--active{border-color:Highlight;color:Highlight}}.ea-tabs__list--underline .ea-tabs__trigger:hover:not(:disabled):not(.ea-tabs__trigger--active){border-bottom-color:var(--color-border-strong)}.ea-tabs__list--filled{padding:.25em;border-radius:var(--radius-lg);background-color:var(--color-bg-muted)}.ea-tabs__list--filled .ea-tabs__trigger{border-radius:var(--radius-md)}.ea-tabs__list--filled .ea-tabs__trigger--active{background-color:var(--color-bg-base);box-shadow:var(--shadow-sm);color:var(--color-text-primary)}@media(forced-colors:active){.ea-tabs__list--filled .ea-tabs__trigger--active{background-color:Highlight;border-color:Highlight;color:HighlightText}}.ea-tabs__list--2xs{font-size:var(--font-size-2xs)}.ea-tabs__list--xs{font-size:var(--font-size-xs)}.ea-tabs__list--sm{font-size:var(--font-size-sm)}.ea-tabs__list--md{font-size:var(--font-size-md)}.ea-tabs__list--lg{font-size:var(--font-size-lg)}.ea-tabs__list--xl{font-size:var(--font-size-xl)}.ea-tabs__trigger{display:flex;align-items:center;justify-content:center;padding:.5em 1em;font-size:inherit;font-weight:var(--font-weight-medium);font-family:var(--font-family-sans);line-height:var(--line-height-normal);white-space:nowrap;background:none;border:none;color:var(--color-text-secondary);cursor:pointer;transition:var(--transition-colors)}.ea-tabs__trigger:hover:not(:disabled){color:var(--color-text-primary)}.ea-tabs__trigger:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-tabs__trigger:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-tabs__trigger:disabled{opacity:.5;cursor:default}.ea-tabs--vertical{flex-direction:row}.ea-tabs--vertical .ea-tabs__list{flex-direction:column;flex-shrink:0}.ea-tabs--vertical .ea-tabs__list--underline{border-bottom:none;border-inline-end:var(--border-width-thin) solid var(--color-border-default)}.ea-tabs--vertical .ea-tabs__list--underline .ea-tabs__trigger{margin-bottom:0;margin-inline-end:calc(-1 * var(--border-width-thin));border-bottom:none;border-inline-end:var(--border-width-medium) solid transparent}.ea-tabs--vertical .ea-tabs__list--underline .ea-tabs__trigger--active{border-inline-end-color:var(--color-brand-text)}@media(forced-colors:active){.ea-tabs--vertical .ea-tabs__list--underline .ea-tabs__trigger--active{border-inline-end-color:Highlight}}.ea-tabs--vertical .ea-tabs__list--underline .ea-tabs__trigger:hover:not(:disabled):not(.ea-tabs__trigger--active){border-inline-end-color:var(--color-border-strong)}.ea-tabs--vertical .ea-tabs__list--filled{align-self:flex-start}.ea-tabs--vertical .ea-tabs__trigger{justify-content:flex-start}\n"]
28667
29416
  }]
28668
29417
  }],
28669
29418
  propDecorators: {
@@ -28683,6 +29432,14 @@ i0.ɵɵngDeclareClassMetadata({
28683
29432
  required: false
28684
29433
  }]
28685
29434
  }],
29435
+ orientation: [{
29436
+ type: i0.Input,
29437
+ args: [{
29438
+ isSignal: true,
29439
+ alias: "orientation",
29440
+ required: false
29441
+ }]
29442
+ }],
28686
29443
  ariaLabel: [{
28687
29444
  type: i0.Input,
28688
29445
  args: [{
@@ -28715,6 +29472,7 @@ var TabComponent = class TabComponent {
28715
29472
  disabled = input(false, ...ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []);
28716
29473
  id = input(uniqueId("ea-tab"), ...ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []);
28717
29474
  isActive = computed(() => this.tabs.activeTab() === this.value(), ...ngDevMode ? [{ debugName: "isActive" }] : /* istanbul ignore next */ []);
29475
+ vertical = computed(() => this.tabs.orientation() === "vertical", ...ngDevMode ? [{ debugName: "vertical" }] : /* istanbul ignore next */ []);
28718
29476
  ngOnInit() {
28719
29477
  this.tabs.registerTab(this);
28720
29478
  }
@@ -28765,7 +29523,10 @@ var TabComponent = class TabComponent {
28765
29523
  transformFunction: null
28766
29524
  }
28767
29525
  },
28768
- host: { properties: { "style.display": "isActive() ? null : \"none\"" } },
29526
+ host: { properties: {
29527
+ "style.display": "isActive() ? null : \"none\"",
29528
+ "class.ea-tab--vertical": "vertical()"
29529
+ } },
28769
29530
  ngImport: i0,
28770
29531
  template: `
28771
29532
  @if (isActive()) {
@@ -28780,6 +29541,7 @@ var TabComponent = class TabComponent {
28780
29541
  }
28781
29542
  `,
28782
29543
  isInline: true,
29544
+ styles: [":host(.ea-tab--vertical){flex:1;min-width:0}\n"],
28783
29545
  changeDetection: i0.ChangeDetectionStrategy.OnPush
28784
29546
  });
28785
29547
  };
@@ -28792,7 +29554,10 @@ i0.ɵɵngDeclareClassMetadata({
28792
29554
  type: Component,
28793
29555
  args: [{
28794
29556
  selector: "ea-tab",
28795
- host: { "[style.display]": "isActive() ? null : \"none\"" },
29557
+ host: {
29558
+ "[style.display]": "isActive() ? null : \"none\"",
29559
+ "[class.ea-tab--vertical]": "vertical()"
29560
+ },
28796
29561
  template: `
28797
29562
  @if (isActive()) {
28798
29563
  <div
@@ -28805,7 +29570,8 @@ i0.ɵɵngDeclareClassMetadata({
28805
29570
  </div>
28806
29571
  }
28807
29572
  `,
28808
- changeDetection: ChangeDetectionStrategy.OnPush
29573
+ changeDetection: ChangeDetectionStrategy.OnPush,
29574
+ styles: [":host(.ea-tab--vertical){flex:1;min-width:0}\n"]
28809
29575
  }]
28810
29576
  }],
28811
29577
  propDecorators: {
@@ -28863,6 +29629,7 @@ var TextareaComponent = class TextareaComponent {
28863
29629
  required = input(false, ...ngDevMode ? [{ debugName: "required" }] : /* istanbul ignore next */ []);
28864
29630
  resize = input("vertical", ...ngDevMode ? [{ debugName: "resize" }] : /* istanbul ignore next */ []);
28865
29631
  maxlength = input(void 0, ...ngDevMode ? [{ debugName: "maxlength" }] : /* istanbul ignore next */ []);
29632
+ showCount = input(false, ...ngDevMode ? [{ debugName: "showCount" }] : /* istanbul ignore next */ []);
28866
29633
  maxHeight = input(void 0, ...ngDevMode ? [{ debugName: "maxHeight" }] : /* istanbul ignore next */ []);
28867
29634
  minHeight = input(void 0, ...ngDevMode ? [{ debugName: "minHeight" }] : /* istanbul ignore next */ []);
28868
29635
  id = input(uniqueId("ea-textarea"), ...ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []);
@@ -28882,6 +29649,18 @@ var TextareaComponent = class TextareaComponent {
28882
29649
  hasError = this.errorState.hasError;
28883
29650
  showError = this.hasError;
28884
29651
  showHint = computed(() => !!this.hint() && !this.hasError(), ...ngDevMode ? [{ debugName: "showHint" }] : /* istanbul ignore next */ []);
29652
+ countText = computed(() => {
29653
+ const length = this.value().length;
29654
+ const max = this.maxlength();
29655
+ return max ? `${length} / ${max}` : `${length}`;
29656
+ }, ...ngDevMode ? [{ debugName: "countText" }] : /* istanbul ignore next */ []);
29657
+ describedBy = computed(() => {
29658
+ const ids = [];
29659
+ if (this.showError()) ids.push(`${this.id()}-error`);
29660
+ else if (this.showHint()) ids.push(`${this.id()}-hint`);
29661
+ if (this.showCount()) ids.push(`${this.id()}-count`);
29662
+ return ids.length > 0 ? ids.join(" ") : null;
29663
+ }, ...ngDevMode ? [{ debugName: "describedBy" }] : /* istanbul ignore next */ []);
28885
29664
  wrapperClasses = computed(() => ({
28886
29665
  [`ea-textarea-wrapper--${this.size()}`]: true,
28887
29666
  "ea-textarea-wrapper--error": this.hasError(),
@@ -29050,6 +29829,13 @@ var TextareaComponent = class TextareaComponent {
29050
29829
  isRequired: false,
29051
29830
  transformFunction: null
29052
29831
  },
29832
+ showCount: {
29833
+ classPropertyName: "showCount",
29834
+ publicName: "showCount",
29835
+ isSignal: true,
29836
+ isRequired: false,
29837
+ transformFunction: null
29838
+ },
29053
29839
  maxHeight: {
29054
29840
  classPropertyName: "maxHeight",
29055
29841
  publicName: "maxHeight",
@@ -29097,8 +29883,8 @@ var TextareaComponent = class TextareaComponent {
29097
29883
  isSignal: true
29098
29884
  }],
29099
29885
  ngImport: i0,
29100
- template: "<div class=\"ea-textarea-field ea-textarea-field--{{ size() }}\">\n @if (label(); as labelText) {\n <ea-field-label\n [text]=\"labelText\"\n [icon]=\"labelIcon()\"\n [help]=\"labelHelp()\"\n [forId]=\"id()\"\n [required]=\"required()\" />\n }\n\n <div\n class=\"ea-textarea-wrapper\"\n [ngClass]=\"wrapperClasses()\"\n [style.resize]=\"resize()\"\n [style.min-height]=\"minHeightStyle()\"\n [style.max-height.px]=\"maxHeight() ?? null\">\n <textarea\n #textareaEl\n class=\"ea-textarea\"\n dir=\"auto\"\n [id]=\"id()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [readOnly]=\"readonly()\"\n [required]=\"required()\"\n [value]=\"value()\"\n [attr.maxlength]=\"maxlength() ?? null\"\n [attr.aria-label]=\"label() ? null : (ariaLabel() ?? null)\"\n [attr.aria-invalid]=\"hasError() || null\"\n [attr.aria-describedby]=\"\n showError() ? id() + '-error' : showHint() ? id() + '-hint' : null\n \"\n (input)=\"handleInput($event)\"\n (focus)=\"handleFocus($event)\"\n (blur)=\"handleBlur($event)\"></textarea>\n </div>\n\n <ea-field-messages\n [id]=\"id()\"\n [error]=\"errorText()\"\n [hint]=\"showHint() ? hint() : null\" />\n</div>\n",
29101
- styles: [".ea-textarea-field{display:flex;flex-direction:column;gap:.375em;color:var(--color-text-secondary);--ea-field-label-size: .875em;--ea-field-messages-size: .8125em}.ea-textarea-field--2xs{font-size:var(--font-size-2xs)}.ea-textarea-field--xs{font-size:var(--font-size-xs)}.ea-textarea-field--sm{font-size:var(--font-size-sm)}.ea-textarea-field--md{font-size:var(--font-size-md)}.ea-textarea-field--lg{font-size:var(--font-size-lg)}.ea-textarea-field--xl{font-size:var(--font-size-xl)}.ea-textarea-wrapper{display:flex;min-width:12em;background-color:var(--color-bg-base);border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-md);transition:var(--transition-colors),var(--transition-shadow);overflow:hidden}.ea-textarea-wrapper--focused{border-color:var(--color-border-focus);box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-textarea-wrapper--focused{outline:2px solid Highlight;outline-offset:2px}}.ea-textarea-wrapper--error{border-color:var(--color-error-default)}.ea-textarea-wrapper--error.ea-textarea-wrapper--focused{box-shadow:var(--shadow-focus-ring-error)}@media(forced-colors:active){.ea-textarea-wrapper--error.ea-textarea-wrapper--focused{outline:2px solid Highlight;outline-offset:2px}}.ea-textarea-wrapper--disabled{background-color:var(--color-bg-muted);border-color:var(--color-border-default);cursor:default;opacity:.6}.ea-textarea-wrapper--disabled .ea-textarea{cursor:default}.ea-textarea-wrapper--readonly{background-color:var(--color-bg-subtle)}.ea-textarea-wrapper--readonly:has(:focus-visible){border-color:var(--color-border-focus);box-shadow:none}@media(forced-colors:active){.ea-textarea-wrapper--readonly:has(:focus-visible){outline:2px solid Highlight;outline-offset:2px}}.ea-textarea-wrapper--readonly button{cursor:default}.ea-textarea-wrapper--readonly button:hover{background-color:transparent;color:var(--color-text-secondary)}.ea-textarea{flex:1;width:100%;min-width:0;padding:.75em;background:transparent;border:none;outline:none;resize:none;color:var(--color-text-primary);font-family:var(--font-family-sans);line-height:var(--line-height-normal)}.ea-textarea::placeholder{color:var(--color-text-tertiary)}.ea-textarea:disabled{cursor:default}\n"],
29886
+ template: "<div class=\"ea-textarea-field ea-textarea-field--{{ size() }}\">\n @if (label(); as labelText) {\n <ea-field-label\n [text]=\"labelText\"\n [icon]=\"labelIcon()\"\n [help]=\"labelHelp()\"\n [forId]=\"id()\"\n [required]=\"required()\" />\n }\n\n <div\n class=\"ea-textarea-wrapper\"\n [ngClass]=\"wrapperClasses()\"\n [style.resize]=\"resize()\"\n [style.min-height]=\"minHeightStyle()\"\n [style.max-height.px]=\"maxHeight() ?? null\">\n <textarea\n #textareaEl\n class=\"ea-textarea\"\n dir=\"auto\"\n [id]=\"id()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [readOnly]=\"readonly()\"\n [required]=\"required()\"\n [value]=\"value()\"\n [attr.maxlength]=\"maxlength() ?? null\"\n [attr.aria-label]=\"label() ? null : (ariaLabel() ?? null)\"\n [attr.aria-invalid]=\"hasError() || null\"\n [attr.aria-describedby]=\"describedBy()\"\n (input)=\"handleInput($event)\"\n (focus)=\"handleFocus($event)\"\n (blur)=\"handleBlur($event)\"></textarea>\n </div>\n\n <ng-template #messages>\n <ea-field-messages\n [id]=\"id()\"\n [error]=\"errorText()\"\n [hint]=\"showHint() ? hint() : null\" />\n </ng-template>\n\n @if (showCount()) {\n <div class=\"ea-textarea-field__footer\">\n <ng-container [ngTemplateOutlet]=\"messages\" />\n <span\n class=\"ea-textarea-field__count\"\n [id]=\"id() + '-count'\">\n {{ countText() }}\n </span>\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"messages\" />\n }\n</div>\n",
29887
+ styles: [".ea-textarea-field{display:flex;flex-direction:column;gap:.375em;color:var(--color-text-secondary);--ea-field-label-size: .875em;--ea-field-messages-size: .8125em}.ea-textarea-field--2xs{font-size:var(--font-size-2xs)}.ea-textarea-field--xs{font-size:var(--font-size-xs)}.ea-textarea-field--sm{font-size:var(--font-size-sm)}.ea-textarea-field--md{font-size:var(--font-size-md)}.ea-textarea-field--lg{font-size:var(--font-size-lg)}.ea-textarea-field--xl{font-size:var(--font-size-xl)}.ea-textarea-field__footer{display:flex;align-items:flex-start;gap:.75em}.ea-textarea-field__count{flex-shrink:0;margin-inline-start:auto;font-size:max(var(--ea-field-messages-size, var(--text-helper-size)),.6875rem);font-weight:var(--text-helper-weight);line-height:var(--text-helper-lh);font-variant-numeric:tabular-nums}.ea-textarea-wrapper{display:flex;min-width:12em;background-color:var(--color-bg-base);border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-md);transition:var(--transition-colors),var(--transition-shadow);overflow:hidden}.ea-textarea-wrapper--focused{border-color:var(--color-border-focus);box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-textarea-wrapper--focused{outline:2px solid Highlight;outline-offset:2px}}.ea-textarea-wrapper--error{border-color:var(--color-error-default)}.ea-textarea-wrapper--error.ea-textarea-wrapper--focused{box-shadow:var(--shadow-focus-ring-error)}@media(forced-colors:active){.ea-textarea-wrapper--error.ea-textarea-wrapper--focused{outline:2px solid Highlight;outline-offset:2px}}.ea-textarea-wrapper--disabled{background-color:var(--color-bg-muted);border-color:var(--color-border-default);cursor:default;opacity:.6}.ea-textarea-wrapper--disabled .ea-textarea{cursor:default}.ea-textarea-wrapper--readonly{background-color:var(--color-bg-subtle)}.ea-textarea-wrapper--readonly:has(:focus-visible){border-color:var(--color-border-focus);box-shadow:none}@media(forced-colors:active){.ea-textarea-wrapper--readonly:has(:focus-visible){outline:2px solid Highlight;outline-offset:2px}}.ea-textarea-wrapper--readonly button{cursor:default}.ea-textarea-wrapper--readonly button:hover{background-color:transparent;color:var(--color-text-secondary)}.ea-textarea{flex:1;width:100%;min-width:0;padding:.75em;background:transparent;border:none;outline:none;resize:none;color:var(--color-text-primary);font-family:var(--font-family-sans);line-height:var(--line-height-normal)}.ea-textarea::placeholder{color:var(--color-text-tertiary)}.ea-textarea:disabled{cursor:default}\n"],
29102
29888
  dependencies: [
29103
29889
  {
29104
29890
  kind: "component",
@@ -29128,6 +29914,16 @@ var TextareaComponent = class TextareaComponent {
29128
29914
  type: NgClass,
29129
29915
  selector: "[ngClass]",
29130
29916
  inputs: ["class", "ngClass"]
29917
+ },
29918
+ {
29919
+ kind: "directive",
29920
+ type: NgTemplateOutlet,
29921
+ selector: "[ngTemplateOutlet]",
29922
+ inputs: [
29923
+ "ngTemplateOutletContext",
29924
+ "ngTemplateOutlet",
29925
+ "ngTemplateOutletInjector"
29926
+ ]
29131
29927
  }
29132
29928
  ],
29133
29929
  changeDetection: i0.ChangeDetectionStrategy.OnPush
@@ -29145,7 +29941,8 @@ i0.ɵɵngDeclareClassMetadata({
29145
29941
  imports: [
29146
29942
  FieldLabelComponent,
29147
29943
  FieldMessagesComponent,
29148
- NgClass
29944
+ NgClass,
29945
+ NgTemplateOutlet
29149
29946
  ],
29150
29947
  changeDetection: ChangeDetectionStrategy.OnPush,
29151
29948
  providers: [{
@@ -29153,8 +29950,8 @@ i0.ɵɵngDeclareClassMetadata({
29153
29950
  useExisting: forwardRef(() => TextareaComponent),
29154
29951
  multi: true
29155
29952
  }],
29156
- template: "<div class=\"ea-textarea-field ea-textarea-field--{{ size() }}\">\n @if (label(); as labelText) {\n <ea-field-label\n [text]=\"labelText\"\n [icon]=\"labelIcon()\"\n [help]=\"labelHelp()\"\n [forId]=\"id()\"\n [required]=\"required()\" />\n }\n\n <div\n class=\"ea-textarea-wrapper\"\n [ngClass]=\"wrapperClasses()\"\n [style.resize]=\"resize()\"\n [style.min-height]=\"minHeightStyle()\"\n [style.max-height.px]=\"maxHeight() ?? null\">\n <textarea\n #textareaEl\n class=\"ea-textarea\"\n dir=\"auto\"\n [id]=\"id()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [readOnly]=\"readonly()\"\n [required]=\"required()\"\n [value]=\"value()\"\n [attr.maxlength]=\"maxlength() ?? null\"\n [attr.aria-label]=\"label() ? null : (ariaLabel() ?? null)\"\n [attr.aria-invalid]=\"hasError() || null\"\n [attr.aria-describedby]=\"\n showError() ? id() + '-error' : showHint() ? id() + '-hint' : null\n \"\n (input)=\"handleInput($event)\"\n (focus)=\"handleFocus($event)\"\n (blur)=\"handleBlur($event)\"></textarea>\n </div>\n\n <ea-field-messages\n [id]=\"id()\"\n [error]=\"errorText()\"\n [hint]=\"showHint() ? hint() : null\" />\n</div>\n",
29157
- styles: [".ea-textarea-field{display:flex;flex-direction:column;gap:.375em;color:var(--color-text-secondary);--ea-field-label-size: .875em;--ea-field-messages-size: .8125em}.ea-textarea-field--2xs{font-size:var(--font-size-2xs)}.ea-textarea-field--xs{font-size:var(--font-size-xs)}.ea-textarea-field--sm{font-size:var(--font-size-sm)}.ea-textarea-field--md{font-size:var(--font-size-md)}.ea-textarea-field--lg{font-size:var(--font-size-lg)}.ea-textarea-field--xl{font-size:var(--font-size-xl)}.ea-textarea-wrapper{display:flex;min-width:12em;background-color:var(--color-bg-base);border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-md);transition:var(--transition-colors),var(--transition-shadow);overflow:hidden}.ea-textarea-wrapper--focused{border-color:var(--color-border-focus);box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-textarea-wrapper--focused{outline:2px solid Highlight;outline-offset:2px}}.ea-textarea-wrapper--error{border-color:var(--color-error-default)}.ea-textarea-wrapper--error.ea-textarea-wrapper--focused{box-shadow:var(--shadow-focus-ring-error)}@media(forced-colors:active){.ea-textarea-wrapper--error.ea-textarea-wrapper--focused{outline:2px solid Highlight;outline-offset:2px}}.ea-textarea-wrapper--disabled{background-color:var(--color-bg-muted);border-color:var(--color-border-default);cursor:default;opacity:.6}.ea-textarea-wrapper--disabled .ea-textarea{cursor:default}.ea-textarea-wrapper--readonly{background-color:var(--color-bg-subtle)}.ea-textarea-wrapper--readonly:has(:focus-visible){border-color:var(--color-border-focus);box-shadow:none}@media(forced-colors:active){.ea-textarea-wrapper--readonly:has(:focus-visible){outline:2px solid Highlight;outline-offset:2px}}.ea-textarea-wrapper--readonly button{cursor:default}.ea-textarea-wrapper--readonly button:hover{background-color:transparent;color:var(--color-text-secondary)}.ea-textarea{flex:1;width:100%;min-width:0;padding:.75em;background:transparent;border:none;outline:none;resize:none;color:var(--color-text-primary);font-family:var(--font-family-sans);line-height:var(--line-height-normal)}.ea-textarea::placeholder{color:var(--color-text-tertiary)}.ea-textarea:disabled{cursor:default}\n"]
29953
+ template: "<div class=\"ea-textarea-field ea-textarea-field--{{ size() }}\">\n @if (label(); as labelText) {\n <ea-field-label\n [text]=\"labelText\"\n [icon]=\"labelIcon()\"\n [help]=\"labelHelp()\"\n [forId]=\"id()\"\n [required]=\"required()\" />\n }\n\n <div\n class=\"ea-textarea-wrapper\"\n [ngClass]=\"wrapperClasses()\"\n [style.resize]=\"resize()\"\n [style.min-height]=\"minHeightStyle()\"\n [style.max-height.px]=\"maxHeight() ?? null\">\n <textarea\n #textareaEl\n class=\"ea-textarea\"\n dir=\"auto\"\n [id]=\"id()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [readOnly]=\"readonly()\"\n [required]=\"required()\"\n [value]=\"value()\"\n [attr.maxlength]=\"maxlength() ?? null\"\n [attr.aria-label]=\"label() ? null : (ariaLabel() ?? null)\"\n [attr.aria-invalid]=\"hasError() || null\"\n [attr.aria-describedby]=\"describedBy()\"\n (input)=\"handleInput($event)\"\n (focus)=\"handleFocus($event)\"\n (blur)=\"handleBlur($event)\"></textarea>\n </div>\n\n <ng-template #messages>\n <ea-field-messages\n [id]=\"id()\"\n [error]=\"errorText()\"\n [hint]=\"showHint() ? hint() : null\" />\n </ng-template>\n\n @if (showCount()) {\n <div class=\"ea-textarea-field__footer\">\n <ng-container [ngTemplateOutlet]=\"messages\" />\n <span\n class=\"ea-textarea-field__count\"\n [id]=\"id() + '-count'\">\n {{ countText() }}\n </span>\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"messages\" />\n }\n</div>\n",
29954
+ styles: [".ea-textarea-field{display:flex;flex-direction:column;gap:.375em;color:var(--color-text-secondary);--ea-field-label-size: .875em;--ea-field-messages-size: .8125em}.ea-textarea-field--2xs{font-size:var(--font-size-2xs)}.ea-textarea-field--xs{font-size:var(--font-size-xs)}.ea-textarea-field--sm{font-size:var(--font-size-sm)}.ea-textarea-field--md{font-size:var(--font-size-md)}.ea-textarea-field--lg{font-size:var(--font-size-lg)}.ea-textarea-field--xl{font-size:var(--font-size-xl)}.ea-textarea-field__footer{display:flex;align-items:flex-start;gap:.75em}.ea-textarea-field__count{flex-shrink:0;margin-inline-start:auto;font-size:max(var(--ea-field-messages-size, var(--text-helper-size)),.6875rem);font-weight:var(--text-helper-weight);line-height:var(--text-helper-lh);font-variant-numeric:tabular-nums}.ea-textarea-wrapper{display:flex;min-width:12em;background-color:var(--color-bg-base);border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-md);transition:var(--transition-colors),var(--transition-shadow);overflow:hidden}.ea-textarea-wrapper--focused{border-color:var(--color-border-focus);box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-textarea-wrapper--focused{outline:2px solid Highlight;outline-offset:2px}}.ea-textarea-wrapper--error{border-color:var(--color-error-default)}.ea-textarea-wrapper--error.ea-textarea-wrapper--focused{box-shadow:var(--shadow-focus-ring-error)}@media(forced-colors:active){.ea-textarea-wrapper--error.ea-textarea-wrapper--focused{outline:2px solid Highlight;outline-offset:2px}}.ea-textarea-wrapper--disabled{background-color:var(--color-bg-muted);border-color:var(--color-border-default);cursor:default;opacity:.6}.ea-textarea-wrapper--disabled .ea-textarea{cursor:default}.ea-textarea-wrapper--readonly{background-color:var(--color-bg-subtle)}.ea-textarea-wrapper--readonly:has(:focus-visible){border-color:var(--color-border-focus);box-shadow:none}@media(forced-colors:active){.ea-textarea-wrapper--readonly:has(:focus-visible){outline:2px solid Highlight;outline-offset:2px}}.ea-textarea-wrapper--readonly button{cursor:default}.ea-textarea-wrapper--readonly button:hover{background-color:transparent;color:var(--color-text-secondary)}.ea-textarea{flex:1;width:100%;min-width:0;padding:.75em;background:transparent;border:none;outline:none;resize:none;color:var(--color-text-primary);font-family:var(--font-family-sans);line-height:var(--line-height-normal)}.ea-textarea::placeholder{color:var(--color-text-tertiary)}.ea-textarea:disabled{cursor:default}\n"]
29158
29955
  }]
29159
29956
  }],
29160
29957
  propDecorators: {
@@ -29274,6 +30071,14 @@ i0.ɵɵngDeclareClassMetadata({
29274
30071
  required: false
29275
30072
  }]
29276
30073
  }],
30074
+ showCount: [{
30075
+ type: i0.Input,
30076
+ args: [{
30077
+ isSignal: true,
30078
+ alias: "showCount",
30079
+ required: false
30080
+ }]
30081
+ }],
29277
30082
  maxHeight: [{
29278
30083
  type: i0.Input,
29279
30084
  args: [{
@@ -57138,105 +57943,6 @@ i0.ɵɵngDeclareClassMetadata({
57138
57943
  }]
57139
57944
  }]
57140
57945
  });
57141
- var MoreHorizontalIconComponent = class MoreHorizontalIconComponent extends IconComponentBase {
57142
- static slug = "more-horizontal";
57143
- static category = "feather";
57144
- static tags = [
57145
- "more-horizontal",
57146
- "more",
57147
- "horizontal",
57148
- "ellipsis",
57149
- "menu",
57150
- "dots",
57151
- "options",
57152
- "plus",
57153
- "más",
57154
- "περισσότερα",
57155
- "więcej"
57156
- ];
57157
- static ɵfac = i0.ɵɵngDeclareFactory({
57158
- minVersion: "12.0.0",
57159
- version: "22.2.1",
57160
- ngImport: i0,
57161
- type: MoreHorizontalIconComponent,
57162
- deps: null,
57163
- target: i0.ɵɵFactoryTarget.Component
57164
- });
57165
- static ɵcmp = i0.ɵɵngDeclareComponent({
57166
- minVersion: "14.0.0",
57167
- version: "22.2.1",
57168
- type: MoreHorizontalIconComponent,
57169
- isStandalone: true,
57170
- selector: "ea-icon-more-horizontal",
57171
- usesInheritance: true,
57172
- ngImport: i0,
57173
- template: `
57174
- <svg
57175
- viewBox="0 0 24 24"
57176
- fill="none"
57177
- stroke="currentColor"
57178
- [attr.stroke-width]="strokeWidth()"
57179
- stroke-linecap="round"
57180
- stroke-linejoin="round"
57181
- aria-hidden="true"
57182
- width="100%"
57183
- height="100%">
57184
- <circle
57185
- cx="12"
57186
- cy="12"
57187
- r="1" />
57188
- <circle
57189
- cx="19"
57190
- cy="12"
57191
- r="1" />
57192
- <circle
57193
- cx="5"
57194
- cy="12"
57195
- r="1" />
57196
- </svg>
57197
- `,
57198
- isInline: true,
57199
- changeDetection: i0.ChangeDetectionStrategy.OnPush
57200
- });
57201
- };
57202
- i0.ɵɵngDeclareClassMetadata({
57203
- minVersion: "12.0.0",
57204
- version: "22.2.1",
57205
- ngImport: i0,
57206
- type: MoreHorizontalIconComponent,
57207
- decorators: [{
57208
- type: Component,
57209
- args: [{
57210
- selector: "ea-icon-more-horizontal",
57211
- changeDetection: ChangeDetectionStrategy.OnPush,
57212
- template: `
57213
- <svg
57214
- viewBox="0 0 24 24"
57215
- fill="none"
57216
- stroke="currentColor"
57217
- [attr.stroke-width]="strokeWidth()"
57218
- stroke-linecap="round"
57219
- stroke-linejoin="round"
57220
- aria-hidden="true"
57221
- width="100%"
57222
- height="100%">
57223
- <circle
57224
- cx="12"
57225
- cy="12"
57226
- r="1" />
57227
- <circle
57228
- cx="19"
57229
- cy="12"
57230
- r="1" />
57231
- <circle
57232
- cx="5"
57233
- cy="12"
57234
- r="1" />
57235
- </svg>
57236
- `
57237
- }]
57238
- }]
57239
- });
57240
57946
  var MoreVerticalIconComponent = class MoreVerticalIconComponent extends IconComponentBase {
57241
57947
  static slug = "more-vertical";
57242
57948
  static category = "feather";