@eagami/ui 5.50.0 → 5.52.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/eagami-ui.mjs +2688 -48
- package/fesm2022/eagami-ui.mjs.map +1 -1
- package/package.json +1 -1
- package/src/styles/tokens/_colors.scss +21 -0
- package/src/styles/type-scale.spec.ts +72 -0
- package/types/eagami-ui.d.ts +876 -1
package/fesm2022/eagami-ui.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from "@angular/core";
|
|
2
|
-
import { CSP_NONCE, ChangeDetectionStrategy, Component, DestroyRef, Directive, ElementRef, HostBinding, HostListener, Injectable, InjectionToken, Injector, PLATFORM_ID, Renderer2, RendererStyleFlags2, TemplateRef, ViewContainerRef, ViewEncapsulation, afterNextRender, afterRenderEffect, computed, contentChild, effect, forwardRef, inject, input, makeEnvironmentProviders, model, output, provideEnvironmentInitializer, signal, untracked, viewChild, viewChildren } from "@angular/core";
|
|
2
|
+
import { CSP_NONCE, ChangeDetectionStrategy, Component, DestroyRef, Directive, ElementRef, HostBinding, HostListener, Injectable, InjectionToken, Injector, PLATFORM_ID, Renderer2, RendererStyleFlags2, TemplateRef, ViewContainerRef, ViewEncapsulation, afterNextRender, afterRenderEffect, computed, contentChild, effect, forwardRef, inject, input, linkedSignal, makeEnvironmentProviders, model, output, provideEnvironmentInitializer, signal, untracked, viewChild, viewChildren } from "@angular/core";
|
|
3
3
|
import { NgClass, NgComponentOutlet, NgTemplateOutlet, isPlatformBrowser } from "@angular/common";
|
|
4
4
|
import { NG_VALUE_ACCESSOR, NgControl, TouchedChangeEvent } from "@angular/forms";
|
|
5
5
|
const EAGAMI_I18N_CONFIG = new InjectionToken("EAGAMI_I18N_CONFIG");
|
|
@@ -407,6 +407,18 @@ const ar = {
|
|
|
407
407
|
tooLarge: (maxMb) => `الملف يتجاوز حد ${maxMb} MB`
|
|
408
408
|
},
|
|
409
409
|
breadcrumbs: { label: "مسار التنقل" },
|
|
410
|
+
chart: {
|
|
411
|
+
roleDescription: "مخطط",
|
|
412
|
+
lineChart: "مخطط خطي",
|
|
413
|
+
barChart: "مخطط شريطي",
|
|
414
|
+
pieChart: "مخطط دائري",
|
|
415
|
+
category: "الفئة",
|
|
416
|
+
value: "القيمة",
|
|
417
|
+
share: "النسبة",
|
|
418
|
+
noData: "لا توجد بيانات",
|
|
419
|
+
point: (series, label, value) => `${series}، ${label}: ${value}`,
|
|
420
|
+
slice: (label, value, percent) => `${label}: ${value}، ${percent}`
|
|
421
|
+
},
|
|
410
422
|
codeInput: {
|
|
411
423
|
groupLabel: (length) => `رمز التحقق، ${length} أرقام`,
|
|
412
424
|
digitLabel: (index, length) => `الرقم ${index} من ${length}`
|
|
@@ -604,6 +616,18 @@ const de = {
|
|
|
604
616
|
tooLarge: (maxMb) => `Datei überschreitet das Limit von ${maxMb} MB`
|
|
605
617
|
},
|
|
606
618
|
breadcrumbs: { label: "Brotkrümelnavigation" },
|
|
619
|
+
chart: {
|
|
620
|
+
roleDescription: "Diagramm",
|
|
621
|
+
lineChart: "Liniendiagramm",
|
|
622
|
+
barChart: "Balkendiagramm",
|
|
623
|
+
pieChart: "Kreisdiagramm",
|
|
624
|
+
category: "Kategorie",
|
|
625
|
+
value: "Wert",
|
|
626
|
+
share: "Anteil",
|
|
627
|
+
noData: "Keine Daten",
|
|
628
|
+
point: (series, label, value) => `${series}, ${label}: ${value}`,
|
|
629
|
+
slice: (label, value, percent) => `${label}: ${value}, ${percent}`
|
|
630
|
+
},
|
|
607
631
|
codeInput: {
|
|
608
632
|
groupLabel: (length) => `Bestätigungscode, ${length} Ziffern`,
|
|
609
633
|
digitLabel: (index, length) => `Ziffer ${index} von ${length}`
|
|
@@ -801,6 +825,18 @@ const el = {
|
|
|
801
825
|
tooLarge: (maxMb) => `Το αρχείο υπερβαίνει το όριο των ${maxMb} MB`
|
|
802
826
|
},
|
|
803
827
|
breadcrumbs: { label: "Διαδρομή πλοήγησης" },
|
|
828
|
+
chart: {
|
|
829
|
+
roleDescription: "γράφημα",
|
|
830
|
+
lineChart: "Γράφημα γραμμών",
|
|
831
|
+
barChart: "Ραβδόγραμμα",
|
|
832
|
+
pieChart: "Κυκλικό διάγραμμα",
|
|
833
|
+
category: "Κατηγορία",
|
|
834
|
+
value: "Τιμή",
|
|
835
|
+
share: "Μερίδιο",
|
|
836
|
+
noData: "Δεν υπάρχουν δεδομένα",
|
|
837
|
+
point: (series, label, value) => `${series}, ${label}: ${value}`,
|
|
838
|
+
slice: (label, value, percent) => `${label}: ${value}, ${percent}`
|
|
839
|
+
},
|
|
804
840
|
codeInput: {
|
|
805
841
|
groupLabel: (length) => `Κωδικός επαλήθευσης, ${length} ψηφία`,
|
|
806
842
|
digitLabel: (index, length) => `Ψηφίο ${index} από ${length}`
|
|
@@ -998,6 +1034,18 @@ const en = {
|
|
|
998
1034
|
tooLarge: (maxMb) => `File exceeds ${maxMb} MB limit`
|
|
999
1035
|
},
|
|
1000
1036
|
breadcrumbs: { label: "Breadcrumb" },
|
|
1037
|
+
chart: {
|
|
1038
|
+
roleDescription: "chart",
|
|
1039
|
+
lineChart: "Line chart",
|
|
1040
|
+
barChart: "Bar chart",
|
|
1041
|
+
pieChart: "Pie chart",
|
|
1042
|
+
category: "Category",
|
|
1043
|
+
value: "Value",
|
|
1044
|
+
share: "Share",
|
|
1045
|
+
noData: "No data",
|
|
1046
|
+
point: (series, label, value) => `${series}, ${label}: ${value}`,
|
|
1047
|
+
slice: (label, value, percent) => `${label}: ${value}, ${percent}`
|
|
1048
|
+
},
|
|
1001
1049
|
codeInput: {
|
|
1002
1050
|
groupLabel: (length) => `Verification code, ${length} digits`,
|
|
1003
1051
|
digitLabel: (index, length) => `Digit ${index} of ${length}`
|
|
@@ -1195,6 +1243,18 @@ const esES = {
|
|
|
1195
1243
|
tooLarge: (maxMb) => `El archivo supera el límite de ${maxMb} MB`
|
|
1196
1244
|
},
|
|
1197
1245
|
breadcrumbs: { label: "Ruta de navegación" },
|
|
1246
|
+
chart: {
|
|
1247
|
+
roleDescription: "gráfico",
|
|
1248
|
+
lineChart: "Gráfico de líneas",
|
|
1249
|
+
barChart: "Gráfico de barras",
|
|
1250
|
+
pieChart: "Gráfico circular",
|
|
1251
|
+
category: "Categoría",
|
|
1252
|
+
value: "Valor",
|
|
1253
|
+
share: "Proporción",
|
|
1254
|
+
noData: "Sin datos",
|
|
1255
|
+
point: (series, label, value) => `${series}, ${label}: ${value}`,
|
|
1256
|
+
slice: (label, value, percent) => `${label}: ${value}, ${percent}`
|
|
1257
|
+
},
|
|
1198
1258
|
codeInput: {
|
|
1199
1259
|
groupLabel: (length) => `Código de verificación, ${length} dígitos`,
|
|
1200
1260
|
digitLabel: (index, length) => `Dígito ${index} de ${length}`
|
|
@@ -1392,6 +1452,18 @@ const frFR = {
|
|
|
1392
1452
|
tooLarge: (maxMb) => `Le fichier dépasse la limite de ${maxMb} MB`
|
|
1393
1453
|
},
|
|
1394
1454
|
breadcrumbs: { label: "Fil d'Ariane" },
|
|
1455
|
+
chart: {
|
|
1456
|
+
roleDescription: "graphique",
|
|
1457
|
+
lineChart: "Graphique linéaire",
|
|
1458
|
+
barChart: "Graphique à barres",
|
|
1459
|
+
pieChart: "Graphique circulaire",
|
|
1460
|
+
category: "Catégorie",
|
|
1461
|
+
value: "Valeur",
|
|
1462
|
+
share: "Part",
|
|
1463
|
+
noData: "Aucune donnée",
|
|
1464
|
+
point: (series, label, value) => `${series}, ${label} : ${value}`,
|
|
1465
|
+
slice: (label, value, percent) => `${label} : ${value}, ${percent}`
|
|
1466
|
+
},
|
|
1395
1467
|
codeInput: {
|
|
1396
1468
|
groupLabel: (length) => `Code de vérification, ${length} chiffres`,
|
|
1397
1469
|
digitLabel: (index, length) => `Chiffre ${index} sur ${length}`
|
|
@@ -1589,6 +1661,18 @@ const he = {
|
|
|
1589
1661
|
tooLarge: (maxMb) => `הקובץ חורג ממגבלת ${maxMb} MB`
|
|
1590
1662
|
},
|
|
1591
1663
|
breadcrumbs: { label: "נתיב ניווט" },
|
|
1664
|
+
chart: {
|
|
1665
|
+
roleDescription: "תרשים",
|
|
1666
|
+
lineChart: "תרשים קווי",
|
|
1667
|
+
barChart: "תרשים עמודות",
|
|
1668
|
+
pieChart: "תרשים עוגה",
|
|
1669
|
+
category: "קטגוריה",
|
|
1670
|
+
value: "ערך",
|
|
1671
|
+
share: "נתח",
|
|
1672
|
+
noData: "אין נתונים",
|
|
1673
|
+
point: (series, label, value) => `${series}, ${label}: ${value}`,
|
|
1674
|
+
slice: (label, value, percent) => `${label}: ${value}, ${percent}`
|
|
1675
|
+
},
|
|
1592
1676
|
codeInput: {
|
|
1593
1677
|
groupLabel: (length) => `קוד אימות, ${length} ספרות`,
|
|
1594
1678
|
digitLabel: (index, length) => `ספרה ${index} מתוך ${length}`
|
|
@@ -1786,6 +1870,18 @@ const hi = {
|
|
|
1786
1870
|
tooLarge: (maxMb) => `फ़ाइल ${maxMb} MB की सीमा से अधिक है`
|
|
1787
1871
|
},
|
|
1788
1872
|
breadcrumbs: { label: "ब्रेडक्रंब" },
|
|
1873
|
+
chart: {
|
|
1874
|
+
roleDescription: "चार्ट",
|
|
1875
|
+
lineChart: "लाइन चार्ट",
|
|
1876
|
+
barChart: "बार चार्ट",
|
|
1877
|
+
pieChart: "पाई चार्ट",
|
|
1878
|
+
category: "श्रेणी",
|
|
1879
|
+
value: "मान",
|
|
1880
|
+
share: "हिस्सा",
|
|
1881
|
+
noData: "कोई डेटा नहीं",
|
|
1882
|
+
point: (series, label, value) => `${series}, ${label}: ${value}`,
|
|
1883
|
+
slice: (label, value, percent) => `${label}: ${value}, ${percent}`
|
|
1884
|
+
},
|
|
1789
1885
|
codeInput: {
|
|
1790
1886
|
groupLabel: (length) => `सत्यापन कोड, ${length} अंक`,
|
|
1791
1887
|
digitLabel: (index, length) => `${length} में से अंक ${index}`
|
|
@@ -1983,6 +2079,18 @@ const is = {
|
|
|
1983
2079
|
tooLarge: (maxMb) => `Skráin fer yfir ${maxMb} MB mörkin`
|
|
1984
2080
|
},
|
|
1985
2081
|
breadcrumbs: { label: "Brauðmolaslóð" },
|
|
2082
|
+
chart: {
|
|
2083
|
+
roleDescription: "graf",
|
|
2084
|
+
lineChart: "Línurit",
|
|
2085
|
+
barChart: "Súlurit",
|
|
2086
|
+
pieChart: "Kökurit",
|
|
2087
|
+
category: "Flokkur",
|
|
2088
|
+
value: "Gildi",
|
|
2089
|
+
share: "Hlutfall",
|
|
2090
|
+
noData: "Engin gögn",
|
|
2091
|
+
point: (series, label, value) => `${series}, ${label}: ${value}`,
|
|
2092
|
+
slice: (label, value, percent) => `${label}: ${value}, ${percent}`
|
|
2093
|
+
},
|
|
1986
2094
|
codeInput: {
|
|
1987
2095
|
groupLabel: (length) => `Staðfestingarkóði, ${length} tölustafir`,
|
|
1988
2096
|
digitLabel: (index, length) => `Tölustafur ${index} af ${length}`
|
|
@@ -2180,6 +2288,18 @@ const nl = {
|
|
|
2180
2288
|
tooLarge: (maxMb) => `Bestand overschrijdt de limiet van ${maxMb} MB`
|
|
2181
2289
|
},
|
|
2182
2290
|
breadcrumbs: { label: "Broodkruimelnavigatie" },
|
|
2291
|
+
chart: {
|
|
2292
|
+
roleDescription: "grafiek",
|
|
2293
|
+
lineChart: "Lijndiagram",
|
|
2294
|
+
barChart: "Staafdiagram",
|
|
2295
|
+
pieChart: "Cirkeldiagram",
|
|
2296
|
+
category: "Categorie",
|
|
2297
|
+
value: "Waarde",
|
|
2298
|
+
share: "Aandeel",
|
|
2299
|
+
noData: "Geen gegevens",
|
|
2300
|
+
point: (series, label, value) => `${series}, ${label}: ${value}`,
|
|
2301
|
+
slice: (label, value, percent) => `${label}: ${value}, ${percent}`
|
|
2302
|
+
},
|
|
2183
2303
|
codeInput: {
|
|
2184
2304
|
groupLabel: (length) => `Verificatiecode, ${length} cijfers`,
|
|
2185
2305
|
digitLabel: (index, length) => `Cijfer ${index} van ${length}`
|
|
@@ -2377,6 +2497,18 @@ const pl = {
|
|
|
2377
2497
|
tooLarge: (maxMb) => `Plik przekracza limit ${maxMb} MB`
|
|
2378
2498
|
},
|
|
2379
2499
|
breadcrumbs: { label: "Ścieżka nawigacji" },
|
|
2500
|
+
chart: {
|
|
2501
|
+
roleDescription: "wykres",
|
|
2502
|
+
lineChart: "Wykres liniowy",
|
|
2503
|
+
barChart: "Wykres słupkowy",
|
|
2504
|
+
pieChart: "Wykres kołowy",
|
|
2505
|
+
category: "Kategoria",
|
|
2506
|
+
value: "Wartość",
|
|
2507
|
+
share: "Udział",
|
|
2508
|
+
noData: "Brak danych",
|
|
2509
|
+
point: (series, label, value) => `${series}, ${label}: ${value}`,
|
|
2510
|
+
slice: (label, value, percent) => `${label}: ${value}, ${percent}`
|
|
2511
|
+
},
|
|
2380
2512
|
codeInput: {
|
|
2381
2513
|
groupLabel: (length) => `Kod weryfikacyjny, ${length} cyfr`,
|
|
2382
2514
|
digitLabel: (index, length) => `Cyfra ${index} z ${length}`
|
|
@@ -2574,6 +2706,18 @@ const ptBR = {
|
|
|
2574
2706
|
tooLarge: (maxMb) => `O arquivo excede o limite de ${maxMb} MB`
|
|
2575
2707
|
},
|
|
2576
2708
|
breadcrumbs: { label: "Trilha de navegação" },
|
|
2709
|
+
chart: {
|
|
2710
|
+
roleDescription: "gráfico",
|
|
2711
|
+
lineChart: "Gráfico de linhas",
|
|
2712
|
+
barChart: "Gráfico de barras",
|
|
2713
|
+
pieChart: "Gráfico de pizza",
|
|
2714
|
+
category: "Categoria",
|
|
2715
|
+
value: "Valor",
|
|
2716
|
+
share: "Participação",
|
|
2717
|
+
noData: "Sem dados",
|
|
2718
|
+
point: (series, label, value) => `${series}, ${label}: ${value}`,
|
|
2719
|
+
slice: (label, value, percent) => `${label}: ${value}, ${percent}`
|
|
2720
|
+
},
|
|
2577
2721
|
codeInput: {
|
|
2578
2722
|
groupLabel: (length) => `Código de verificação, ${length} dígitos`,
|
|
2579
2723
|
digitLabel: (index, length) => `Dígito ${index} de ${length}`
|
|
@@ -2771,6 +2915,18 @@ const ru = {
|
|
|
2771
2915
|
tooLarge: (maxMb) => `Файл превышает лимит ${maxMb} MB`
|
|
2772
2916
|
},
|
|
2773
2917
|
breadcrumbs: { label: "Навигационная цепочка" },
|
|
2918
|
+
chart: {
|
|
2919
|
+
roleDescription: "диаграмма",
|
|
2920
|
+
lineChart: "Линейный график",
|
|
2921
|
+
barChart: "Столбчатая диаграмма",
|
|
2922
|
+
pieChart: "Круговая диаграмма",
|
|
2923
|
+
category: "Категория",
|
|
2924
|
+
value: "Значение",
|
|
2925
|
+
share: "Доля",
|
|
2926
|
+
noData: "Нет данных",
|
|
2927
|
+
point: (series, label, value) => `${series}, ${label}: ${value}`,
|
|
2928
|
+
slice: (label, value, percent) => `${label}: ${value}, ${percent}`
|
|
2929
|
+
},
|
|
2774
2930
|
codeInput: {
|
|
2775
2931
|
groupLabel: (length) => `Код подтверждения, ${length} цифр`,
|
|
2776
2932
|
digitLabel: (index, length) => `Цифра ${index} из ${length}`
|
|
@@ -2968,6 +3124,18 @@ const uk = {
|
|
|
2968
3124
|
tooLarge: (maxMb) => `Файл перевищує ліміт ${maxMb} MB`
|
|
2969
3125
|
},
|
|
2970
3126
|
breadcrumbs: { label: "Навігаційний ланцюжок" },
|
|
3127
|
+
chart: {
|
|
3128
|
+
roleDescription: "діаграма",
|
|
3129
|
+
lineChart: "Лінійний графік",
|
|
3130
|
+
barChart: "Стовпчикова діаграма",
|
|
3131
|
+
pieChart: "Кругова діаграма",
|
|
3132
|
+
category: "Категорія",
|
|
3133
|
+
value: "Значення",
|
|
3134
|
+
share: "Частка",
|
|
3135
|
+
noData: "Немає даних",
|
|
3136
|
+
point: (series, label, value) => `${series}, ${label}: ${value}`,
|
|
3137
|
+
slice: (label, value, percent) => `${label}: ${value}, ${percent}`
|
|
3138
|
+
},
|
|
2971
3139
|
codeInput: {
|
|
2972
3140
|
groupLabel: (length) => `Код підтвердження, ${length} цифр`,
|
|
2973
3141
|
digitLabel: (index, length) => `Цифра ${index} з ${length}`
|
|
@@ -3165,6 +3333,18 @@ const zhCN = {
|
|
|
3165
3333
|
tooLarge: (maxMb) => `文件超过 ${maxMb} MB 限制`
|
|
3166
3334
|
},
|
|
3167
3335
|
breadcrumbs: { label: "面包屑导航" },
|
|
3336
|
+
chart: {
|
|
3337
|
+
roleDescription: "图表",
|
|
3338
|
+
lineChart: "折线图",
|
|
3339
|
+
barChart: "柱状图",
|
|
3340
|
+
pieChart: "饼图",
|
|
3341
|
+
category: "类别",
|
|
3342
|
+
value: "数值",
|
|
3343
|
+
share: "占比",
|
|
3344
|
+
noData: "无数据",
|
|
3345
|
+
point: (series, label, value) => `${series},${label}:${value}`,
|
|
3346
|
+
slice: (label, value, percent) => `${label}:${value},${percent}`
|
|
3347
|
+
},
|
|
3168
3348
|
codeInput: {
|
|
3169
3349
|
groupLabel: (length) => `验证码,共 ${length} 位`,
|
|
3170
3350
|
digitLabel: (index, length) => `第 ${index} 位,共 ${length} 位`
|
|
@@ -3738,6 +3918,7 @@ var AccordionItemComponent = class AccordionItemComponent {
|
|
|
3738
3918
|
accordion = inject(AccordionComponent);
|
|
3739
3919
|
value = input.required(...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
|
|
3740
3920
|
label = input.required(...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
|
|
3921
|
+
icon = input(void 0, ...ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []);
|
|
3741
3922
|
disabled = input(false, ...ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []);
|
|
3742
3923
|
id = input(uniqueId("ea-accordion-item"), ...ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []);
|
|
3743
3924
|
isExpanded = computed(() => this.accordion.isExpanded(this.value()), ...ngDevMode ? [{ debugName: "isExpanded" }] : /* istanbul ignore next */ []);
|
|
@@ -3782,6 +3963,13 @@ var AccordionItemComponent = class AccordionItemComponent {
|
|
|
3782
3963
|
isRequired: true,
|
|
3783
3964
|
transformFunction: null
|
|
3784
3965
|
},
|
|
3966
|
+
icon: {
|
|
3967
|
+
classPropertyName: "icon",
|
|
3968
|
+
publicName: "icon",
|
|
3969
|
+
isSignal: true,
|
|
3970
|
+
isRequired: false,
|
|
3971
|
+
transformFunction: null
|
|
3972
|
+
},
|
|
3785
3973
|
disabled: {
|
|
3786
3974
|
classPropertyName: "disabled",
|
|
3787
3975
|
publicName: "disabled",
|
|
@@ -3798,12 +3986,25 @@ var AccordionItemComponent = class AccordionItemComponent {
|
|
|
3798
3986
|
}
|
|
3799
3987
|
},
|
|
3800
3988
|
ngImport: i0,
|
|
3801
|
-
template: "<div\n class=\"ea-accordion-item ea-accordion-item--{{ size() }}\"\n [class.ea-accordion-item--expanded]=\"isExpanded()\"\n [class.ea-accordion-item--disabled]=\"disabled()\">\n <div\n class=\"ea-accordion-item__header\"\n role=\"heading\"\n [attr.aria-level]=\"headingLevel()\">\n <button\n class=\"ea-accordion-item__trigger\"\n type=\"button\"\n [id]=\"id() + '-trigger'\"\n [attr.aria-expanded]=\"isExpanded()\"\n [attr.aria-controls]=\"id() + '-content'\"\n [disabled]=\"disabled()\"\n (click)=\"toggle()\">\n <span class=\"ea-accordion-item__label\">{{ label() }}</span>\n <ea-icon-chevron-down\n class=\"ea-accordion-item__chevron\"\n aria-hidden=\"true\" />\n </button>\n </div>\n @if (isExpanded()) {\n <div\n class=\"ea-accordion-item__content\"\n role=\"region\"\n [id]=\"id() + '-content'\"\n [attr.aria-labelledby]=\"id() + '-trigger'\">\n <ng-content />\n </div>\n }\n</div>\n",
|
|
3802
|
-
styles: [".ea-accordion-item{border-bottom:var(--border-width-thin) solid var(--color-border-default)}.ea-accordion-item:last-child{border-bottom:none}.ea-accordion-item--2xs{font-size:var(--font-size-2xs)}.ea-accordion-item--xs{font-size:var(--font-size-xs)}.ea-accordion-item--sm{font-size:var(--font-size-sm)}.ea-accordion-item--md{font-size:var(--font-size-md)}.ea-accordion-item--lg{font-size:var(--font-size-lg)}.ea-accordion-item--xl{font-size:var(--font-size-xl)}.ea-accordion-item__trigger{display:flex;align-items:center;justify-content:space-between;gap:.75em;width:100%;padding:.75em 1em;font-size:inherit;font-weight:var(--font-weight-medium);font-family:var(--font-family-sans);line-height:var(--line-height-normal);text-align:start;background:none;border:none;color:var(--color-text-primary);cursor:pointer;transition:var(--transition-colors)}.ea-accordion-item__trigger:hover:not(:disabled){background-color:var(--color-state-hover)}.ea-accordion-item__trigger:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-accordion-item__trigger:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-accordion-item__trigger:disabled{opacity:.5;cursor:default}.ea-accordion-item__chevron{flex-shrink:0;width:1em;height:1em;color:var(--color-text-secondary);transition:transform var(--duration-normal) var(--ease-out)}.ea-accordion-item--expanded .ea-accordion-item__chevron{transform:rotate(180deg)}.ea-accordion-item__content{padding:.5em 1em 1em;line-height:var(--line-height-normal);color:var(--color-text-secondary)}.ea-accordion-item--disabled{opacity:.5}\n"],
|
|
3989
|
+
template: "<div\n class=\"ea-accordion-item ea-accordion-item--{{ size() }}\"\n [class.ea-accordion-item--expanded]=\"isExpanded()\"\n [class.ea-accordion-item--disabled]=\"disabled()\">\n <div\n class=\"ea-accordion-item__header\"\n role=\"heading\"\n [attr.aria-level]=\"headingLevel()\">\n <button\n class=\"ea-accordion-item__trigger\"\n type=\"button\"\n [id]=\"id() + '-trigger'\"\n [attr.aria-expanded]=\"isExpanded()\"\n [attr.aria-controls]=\"id() + '-content'\"\n [disabled]=\"disabled()\"\n (click)=\"toggle()\">\n @if (icon(); as leadingIcon) {\n <span\n class=\"ea-accordion-item__icon\"\n aria-hidden=\"true\">\n <ng-container *ngComponentOutlet=\"leadingIcon\" />\n </span>\n }\n <span class=\"ea-accordion-item__label\">{{ label() }}</span>\n <ea-icon-chevron-down\n class=\"ea-accordion-item__chevron\"\n aria-hidden=\"true\" />\n </button>\n </div>\n @if (isExpanded()) {\n <div\n class=\"ea-accordion-item__content\"\n role=\"region\"\n [id]=\"id() + '-content'\"\n [attr.aria-labelledby]=\"id() + '-trigger'\">\n <ng-content />\n </div>\n }\n</div>\n",
|
|
3990
|
+
styles: [".ea-accordion-item{border-bottom:var(--border-width-thin) solid var(--color-border-default)}.ea-accordion-item:last-child{border-bottom:none}.ea-accordion-item--2xs{font-size:var(--font-size-2xs)}.ea-accordion-item--xs{font-size:var(--font-size-xs)}.ea-accordion-item--sm{font-size:var(--font-size-sm)}.ea-accordion-item--md{font-size:var(--font-size-md)}.ea-accordion-item--lg{font-size:var(--font-size-lg)}.ea-accordion-item--xl{font-size:var(--font-size-xl)}.ea-accordion-item__trigger{display:flex;align-items:center;justify-content:space-between;gap:.75em;width:100%;padding:.75em 1em;font-size:inherit;font-weight:var(--font-weight-medium);font-family:var(--font-family-sans);line-height:var(--line-height-normal);text-align:start;background:none;border:none;color:var(--color-text-primary);cursor:pointer;transition:var(--transition-colors)}.ea-accordion-item__trigger:hover:not(:disabled){background-color:var(--color-state-hover)}.ea-accordion-item__trigger:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-accordion-item__trigger:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-accordion-item__trigger:disabled{opacity:.5;cursor:default}.ea-accordion-item__icon{display:inline-flex;flex-shrink:0;color:var(--color-text-secondary)}.ea-accordion-item__icon+.ea-accordion-item__label{flex-grow:1}.ea-accordion-item__chevron{flex-shrink:0;width:1em;height:1em;color:var(--color-text-secondary);transition:transform var(--duration-normal) var(--ease-out)}.ea-accordion-item--expanded .ea-accordion-item__chevron{transform:rotate(180deg)}.ea-accordion-item__content{padding:.5em 1em 1em;line-height:var(--line-height-normal);color:var(--color-text-secondary)}.ea-accordion-item--disabled{opacity:.5}\n"],
|
|
3803
3991
|
dependencies: [{
|
|
3804
3992
|
kind: "component",
|
|
3805
3993
|
type: ChevronDownIconComponent,
|
|
3806
3994
|
selector: "ea-icon-chevron-down"
|
|
3995
|
+
}, {
|
|
3996
|
+
kind: "directive",
|
|
3997
|
+
type: NgComponentOutlet,
|
|
3998
|
+
selector: "[ngComponentOutlet]",
|
|
3999
|
+
inputs: [
|
|
4000
|
+
"ngComponentOutlet",
|
|
4001
|
+
"ngComponentOutletInputs",
|
|
4002
|
+
"ngComponentOutletInjector",
|
|
4003
|
+
"ngComponentOutletEnvironmentInjector",
|
|
4004
|
+
"ngComponentOutletContent",
|
|
4005
|
+
"ngComponentOutletNgModule"
|
|
4006
|
+
],
|
|
4007
|
+
exportAs: ["ngComponentOutlet"]
|
|
3807
4008
|
}],
|
|
3808
4009
|
changeDetection: i0.ChangeDetectionStrategy.OnPush
|
|
3809
4010
|
});
|
|
@@ -3817,10 +4018,10 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
3817
4018
|
type: Component,
|
|
3818
4019
|
args: [{
|
|
3819
4020
|
selector: "ea-accordion-item",
|
|
3820
|
-
imports: [ChevronDownIconComponent],
|
|
4021
|
+
imports: [ChevronDownIconComponent, NgComponentOutlet],
|
|
3821
4022
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
3822
|
-
template: "<div\n class=\"ea-accordion-item ea-accordion-item--{{ size() }}\"\n [class.ea-accordion-item--expanded]=\"isExpanded()\"\n [class.ea-accordion-item--disabled]=\"disabled()\">\n <div\n class=\"ea-accordion-item__header\"\n role=\"heading\"\n [attr.aria-level]=\"headingLevel()\">\n <button\n class=\"ea-accordion-item__trigger\"\n type=\"button\"\n [id]=\"id() + '-trigger'\"\n [attr.aria-expanded]=\"isExpanded()\"\n [attr.aria-controls]=\"id() + '-content'\"\n [disabled]=\"disabled()\"\n (click)=\"toggle()\">\n <span class=\"ea-accordion-item__label\">{{ label() }}</span>\n <ea-icon-chevron-down\n class=\"ea-accordion-item__chevron\"\n aria-hidden=\"true\" />\n </button>\n </div>\n @if (isExpanded()) {\n <div\n class=\"ea-accordion-item__content\"\n role=\"region\"\n [id]=\"id() + '-content'\"\n [attr.aria-labelledby]=\"id() + '-trigger'\">\n <ng-content />\n </div>\n }\n</div>\n",
|
|
3823
|
-
styles: [".ea-accordion-item{border-bottom:var(--border-width-thin) solid var(--color-border-default)}.ea-accordion-item:last-child{border-bottom:none}.ea-accordion-item--2xs{font-size:var(--font-size-2xs)}.ea-accordion-item--xs{font-size:var(--font-size-xs)}.ea-accordion-item--sm{font-size:var(--font-size-sm)}.ea-accordion-item--md{font-size:var(--font-size-md)}.ea-accordion-item--lg{font-size:var(--font-size-lg)}.ea-accordion-item--xl{font-size:var(--font-size-xl)}.ea-accordion-item__trigger{display:flex;align-items:center;justify-content:space-between;gap:.75em;width:100%;padding:.75em 1em;font-size:inherit;font-weight:var(--font-weight-medium);font-family:var(--font-family-sans);line-height:var(--line-height-normal);text-align:start;background:none;border:none;color:var(--color-text-primary);cursor:pointer;transition:var(--transition-colors)}.ea-accordion-item__trigger:hover:not(:disabled){background-color:var(--color-state-hover)}.ea-accordion-item__trigger:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-accordion-item__trigger:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-accordion-item__trigger:disabled{opacity:.5;cursor:default}.ea-accordion-item__chevron{flex-shrink:0;width:1em;height:1em;color:var(--color-text-secondary);transition:transform var(--duration-normal) var(--ease-out)}.ea-accordion-item--expanded .ea-accordion-item__chevron{transform:rotate(180deg)}.ea-accordion-item__content{padding:.5em 1em 1em;line-height:var(--line-height-normal);color:var(--color-text-secondary)}.ea-accordion-item--disabled{opacity:.5}\n"]
|
|
4023
|
+
template: "<div\n class=\"ea-accordion-item ea-accordion-item--{{ size() }}\"\n [class.ea-accordion-item--expanded]=\"isExpanded()\"\n [class.ea-accordion-item--disabled]=\"disabled()\">\n <div\n class=\"ea-accordion-item__header\"\n role=\"heading\"\n [attr.aria-level]=\"headingLevel()\">\n <button\n class=\"ea-accordion-item__trigger\"\n type=\"button\"\n [id]=\"id() + '-trigger'\"\n [attr.aria-expanded]=\"isExpanded()\"\n [attr.aria-controls]=\"id() + '-content'\"\n [disabled]=\"disabled()\"\n (click)=\"toggle()\">\n @if (icon(); as leadingIcon) {\n <span\n class=\"ea-accordion-item__icon\"\n aria-hidden=\"true\">\n <ng-container *ngComponentOutlet=\"leadingIcon\" />\n </span>\n }\n <span class=\"ea-accordion-item__label\">{{ label() }}</span>\n <ea-icon-chevron-down\n class=\"ea-accordion-item__chevron\"\n aria-hidden=\"true\" />\n </button>\n </div>\n @if (isExpanded()) {\n <div\n class=\"ea-accordion-item__content\"\n role=\"region\"\n [id]=\"id() + '-content'\"\n [attr.aria-labelledby]=\"id() + '-trigger'\">\n <ng-content />\n </div>\n }\n</div>\n",
|
|
4024
|
+
styles: [".ea-accordion-item{border-bottom:var(--border-width-thin) solid var(--color-border-default)}.ea-accordion-item:last-child{border-bottom:none}.ea-accordion-item--2xs{font-size:var(--font-size-2xs)}.ea-accordion-item--xs{font-size:var(--font-size-xs)}.ea-accordion-item--sm{font-size:var(--font-size-sm)}.ea-accordion-item--md{font-size:var(--font-size-md)}.ea-accordion-item--lg{font-size:var(--font-size-lg)}.ea-accordion-item--xl{font-size:var(--font-size-xl)}.ea-accordion-item__trigger{display:flex;align-items:center;justify-content:space-between;gap:.75em;width:100%;padding:.75em 1em;font-size:inherit;font-weight:var(--font-weight-medium);font-family:var(--font-family-sans);line-height:var(--line-height-normal);text-align:start;background:none;border:none;color:var(--color-text-primary);cursor:pointer;transition:var(--transition-colors)}.ea-accordion-item__trigger:hover:not(:disabled){background-color:var(--color-state-hover)}.ea-accordion-item__trigger:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-accordion-item__trigger:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-accordion-item__trigger:disabled{opacity:.5;cursor:default}.ea-accordion-item__icon{display:inline-flex;flex-shrink:0;color:var(--color-text-secondary)}.ea-accordion-item__icon+.ea-accordion-item__label{flex-grow:1}.ea-accordion-item__chevron{flex-shrink:0;width:1em;height:1em;color:var(--color-text-secondary);transition:transform var(--duration-normal) var(--ease-out)}.ea-accordion-item--expanded .ea-accordion-item__chevron{transform:rotate(180deg)}.ea-accordion-item__content{padding:.5em 1em 1em;line-height:var(--line-height-normal);color:var(--color-text-secondary)}.ea-accordion-item--disabled{opacity:.5}\n"]
|
|
3824
4025
|
}]
|
|
3825
4026
|
}],
|
|
3826
4027
|
propDecorators: {
|
|
@@ -3840,6 +4041,14 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
3840
4041
|
required: true
|
|
3841
4042
|
}]
|
|
3842
4043
|
}],
|
|
4044
|
+
icon: [{
|
|
4045
|
+
type: i0.Input,
|
|
4046
|
+
args: [{
|
|
4047
|
+
isSignal: true,
|
|
4048
|
+
alias: "icon",
|
|
4049
|
+
required: false
|
|
4050
|
+
}]
|
|
4051
|
+
}],
|
|
3843
4052
|
disabled: [{
|
|
3844
4053
|
type: i0.Input,
|
|
3845
4054
|
args: [{
|
|
@@ -6622,6 +6831,7 @@ var TooltipDirective = class TooltipDirective {
|
|
|
6622
6831
|
whenClipped = input(false, ...ngDevMode ? [{ debugName: "whenClipped" }] : /* istanbul ignore next */ []);
|
|
6623
6832
|
maxWidth = input(200, ...ngDevMode ? [{ debugName: "maxWidth" }] : /* istanbul ignore next */ []);
|
|
6624
6833
|
dismissDelay = input(150, ...ngDevMode ? [{ debugName: "dismissDelay" }] : /* istanbul ignore next */ []);
|
|
6834
|
+
tooltipOpen = input(null, ...ngDevMode ? [{ debugName: "tooltipOpen" }] : /* istanbul ignore next */ []);
|
|
6625
6835
|
tooltipEl = null;
|
|
6626
6836
|
placedPosition = "top";
|
|
6627
6837
|
templateView = null;
|
|
@@ -6631,20 +6841,23 @@ var TooltipDirective = class TooltipDirective {
|
|
|
6631
6841
|
tooltipId = `ea-tooltip-${Math.random().toString(36).slice(2, 9)}`;
|
|
6632
6842
|
hoverMql = typeof window !== "undefined" && typeof window.matchMedia === "function" ? window.matchMedia("(hover: hover)") : null;
|
|
6633
6843
|
showHandler = () => {
|
|
6844
|
+
if (this.controlled()) return;
|
|
6634
6845
|
this.pointerInside = true;
|
|
6635
6846
|
this.show();
|
|
6636
6847
|
};
|
|
6637
6848
|
pointerLeaveHandler = () => {
|
|
6849
|
+
if (this.controlled()) return;
|
|
6638
6850
|
this.pointerInside = false;
|
|
6639
6851
|
this.requestHide();
|
|
6640
6852
|
};
|
|
6641
6853
|
hideHandler = () => this.requestHide();
|
|
6642
6854
|
focusoutHandler = () => {
|
|
6643
|
-
if (!this.pointerInside) this.requestHide();
|
|
6855
|
+
if (!this.pointerInside && !this.controlled()) this.requestHide();
|
|
6644
6856
|
};
|
|
6645
6857
|
bubbleEnterHandler = () => this.cancelPendingHide();
|
|
6646
6858
|
supportsFocusVisible = typeof CSS !== "undefined" && CSS.supports?.("selector(:focus-visible)") === true;
|
|
6647
6859
|
focusHandler = (event) => {
|
|
6860
|
+
if (this.controlled()) return;
|
|
6648
6861
|
const target = event.target;
|
|
6649
6862
|
if (!this.supportsFocusVisible || target.matches(":focus-visible")) this.show();
|
|
6650
6863
|
};
|
|
@@ -6675,6 +6888,15 @@ var TooltipDirective = class TooltipDirective {
|
|
|
6675
6888
|
native.addEventListener("focusout", this.focusoutHandler);
|
|
6676
6889
|
this.syncPointerListeners(this.hoverMql?.matches ?? true);
|
|
6677
6890
|
this.hoverMql?.addEventListener("change", this.hoverChangeHandler);
|
|
6891
|
+
let wasControlled = false;
|
|
6892
|
+
afterRenderEffect(() => {
|
|
6893
|
+
const open = this.tooltipOpen();
|
|
6894
|
+
if (open !== null || wasControlled) untracked(() => open ? this.show() : this.hide());
|
|
6895
|
+
wasControlled = open !== null;
|
|
6896
|
+
});
|
|
6897
|
+
}
|
|
6898
|
+
controlled() {
|
|
6899
|
+
return this.tooltipOpen() !== null;
|
|
6678
6900
|
}
|
|
6679
6901
|
ngOnDestroy() {
|
|
6680
6902
|
const native = this.el.nativeElement;
|
|
@@ -6939,6 +7161,13 @@ var TooltipDirective = class TooltipDirective {
|
|
|
6939
7161
|
isSignal: true,
|
|
6940
7162
|
isRequired: false,
|
|
6941
7163
|
transformFunction: null
|
|
7164
|
+
},
|
|
7165
|
+
tooltipOpen: {
|
|
7166
|
+
classPropertyName: "tooltipOpen",
|
|
7167
|
+
publicName: "tooltipOpen",
|
|
7168
|
+
isSignal: true,
|
|
7169
|
+
isRequired: false,
|
|
7170
|
+
transformFunction: null
|
|
6942
7171
|
}
|
|
6943
7172
|
},
|
|
6944
7173
|
ngImport: i0
|
|
@@ -7002,6 +7231,14 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
7002
7231
|
alias: "dismissDelay",
|
|
7003
7232
|
required: false
|
|
7004
7233
|
}]
|
|
7234
|
+
}],
|
|
7235
|
+
tooltipOpen: [{
|
|
7236
|
+
type: i0.Input,
|
|
7237
|
+
args: [{
|
|
7238
|
+
isSignal: true,
|
|
7239
|
+
alias: "tooltipOpen",
|
|
7240
|
+
required: false
|
|
7241
|
+
}]
|
|
7005
7242
|
}]
|
|
7006
7243
|
}
|
|
7007
7244
|
});
|
|
@@ -7697,7 +7934,8 @@ var AvatarEditorComponent = class AvatarEditorComponent {
|
|
|
7697
7934
|
"flip",
|
|
7698
7935
|
"whenClipped",
|
|
7699
7936
|
"maxWidth",
|
|
7700
|
-
"dismissDelay"
|
|
7937
|
+
"dismissDelay",
|
|
7938
|
+
"tooltipOpen"
|
|
7701
7939
|
]
|
|
7702
7940
|
},
|
|
7703
7941
|
{
|
|
@@ -8145,7 +8383,7 @@ var BadgeComponent = class BadgeComponent {
|
|
|
8145
8383
|
},
|
|
8146
8384
|
ngImport: i0,
|
|
8147
8385
|
template: "<span\n class=\"ea-badge\"\n [ngClass]=\"hostClasses()\">\n <ng-content />\n</span>\n",
|
|
8148
|
-
styles: [".ea-badge{display:inline-flex;align-items:center;gap:.25em;padding:.25em .625em;white-space:nowrap;font-family:var(--font-family-sans);font-weight:var(--font-weight-medium);line-height:var(--line-height-none);border-style:solid;border-width:var(--ea-badge-border-width, 0);border-color:var(--ea-badge-border-color, transparent);border-radius:var(--radius-full);forced-color-adjust:none}.ea-badge--xs{font-size:var(--ea-badge-font-size, var(--font-size-
|
|
8386
|
+
styles: [".ea-badge{display:inline-flex;align-items:center;gap:.25em;padding:.25em .625em;white-space:nowrap;font-family:var(--font-family-sans);font-weight:var(--font-weight-medium);line-height:var(--line-height-none);border-style:solid;border-width:var(--ea-badge-border-width, 0);border-color:var(--ea-badge-border-color, transparent);border-radius:var(--radius-full);forced-color-adjust:none}.ea-badge--xs{font-size:var(--ea-badge-font-size, var(--font-size-xs))}.ea-badge--sm{font-size:var(--ea-badge-font-size, var(--font-size-sm))}.ea-badge--md{font-size:var(--ea-badge-font-size, var(--font-size-md))}.ea-badge--lg{font-size:var(--ea-badge-font-size, var(--font-size-lg))}.ea-badge--xl{font-size:var(--ea-badge-font-size, var(--font-size-xl))}.ea-badge--default{background-color:var(--ea-badge-background-color, var(--color-bg-muted));color:var(--ea-badge-color, var(--color-text-secondary))}.ea-badge--success{background-color:var(--ea-badge-background-color, var(--color-success-subtle));color:var(--ea-badge-color, var(--color-success-text))}.ea-badge--warning{background-color:var(--ea-badge-background-color, var(--color-warning-subtle));color:var(--ea-badge-color, var(--color-warning-text))}.ea-badge--error{background-color:var(--ea-badge-background-color, var(--color-error-subtle));color:var(--ea-badge-color, var(--color-error-text))}.ea-badge--info{background-color:var(--ea-badge-background-color, var(--color-info-subtle));color:var(--ea-badge-color, var(--color-info-text))}.ea-badge--uppercase{text-transform:uppercase}.ea-badge--pin{justify-content:center;box-sizing:border-box;min-width:var(--ea-badge-size, 1.8em);height:var(--ea-badge-size, 1.8em);padding:0 .375em;font-variant-numeric:tabular-nums}.ea-badge--pin.ea-badge--xs{font-size:var(--ea-badge-font-size, calc(var(--font-size-xs) * .75))}.ea-badge--pin.ea-badge--sm{font-size:var(--ea-badge-font-size, calc(var(--font-size-sm) * .75))}.ea-badge--pin.ea-badge--md{font-size:var(--ea-badge-font-size, calc(var(--font-size-md) * .75))}.ea-badge--pin.ea-badge--lg{font-size:var(--ea-badge-font-size, calc(var(--font-size-lg) * .75))}.ea-badge--pin.ea-badge--xl{font-size:var(--ea-badge-font-size, calc(var(--font-size-xl) * .75))}\n"],
|
|
8149
8387
|
dependencies: [{
|
|
8150
8388
|
kind: "directive",
|
|
8151
8389
|
type: NgClass,
|
|
@@ -8169,7 +8407,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
8169
8407
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
8170
8408
|
encapsulation: ViewEncapsulation.None,
|
|
8171
8409
|
template: "<span\n class=\"ea-badge\"\n [ngClass]=\"hostClasses()\">\n <ng-content />\n</span>\n",
|
|
8172
|
-
styles: [".ea-badge{display:inline-flex;align-items:center;gap:.25em;padding:.25em .625em;white-space:nowrap;font-family:var(--font-family-sans);font-weight:var(--font-weight-medium);line-height:var(--line-height-none);border-style:solid;border-width:var(--ea-badge-border-width, 0);border-color:var(--ea-badge-border-color, transparent);border-radius:var(--radius-full);forced-color-adjust:none}.ea-badge--xs{font-size:var(--ea-badge-font-size, var(--font-size-
|
|
8410
|
+
styles: [".ea-badge{display:inline-flex;align-items:center;gap:.25em;padding:.25em .625em;white-space:nowrap;font-family:var(--font-family-sans);font-weight:var(--font-weight-medium);line-height:var(--line-height-none);border-style:solid;border-width:var(--ea-badge-border-width, 0);border-color:var(--ea-badge-border-color, transparent);border-radius:var(--radius-full);forced-color-adjust:none}.ea-badge--xs{font-size:var(--ea-badge-font-size, var(--font-size-xs))}.ea-badge--sm{font-size:var(--ea-badge-font-size, var(--font-size-sm))}.ea-badge--md{font-size:var(--ea-badge-font-size, var(--font-size-md))}.ea-badge--lg{font-size:var(--ea-badge-font-size, var(--font-size-lg))}.ea-badge--xl{font-size:var(--ea-badge-font-size, var(--font-size-xl))}.ea-badge--default{background-color:var(--ea-badge-background-color, var(--color-bg-muted));color:var(--ea-badge-color, var(--color-text-secondary))}.ea-badge--success{background-color:var(--ea-badge-background-color, var(--color-success-subtle));color:var(--ea-badge-color, var(--color-success-text))}.ea-badge--warning{background-color:var(--ea-badge-background-color, var(--color-warning-subtle));color:var(--ea-badge-color, var(--color-warning-text))}.ea-badge--error{background-color:var(--ea-badge-background-color, var(--color-error-subtle));color:var(--ea-badge-color, var(--color-error-text))}.ea-badge--info{background-color:var(--ea-badge-background-color, var(--color-info-subtle));color:var(--ea-badge-color, var(--color-info-text))}.ea-badge--uppercase{text-transform:uppercase}.ea-badge--pin{justify-content:center;box-sizing:border-box;min-width:var(--ea-badge-size, 1.8em);height:var(--ea-badge-size, 1.8em);padding:0 .375em;font-variant-numeric:tabular-nums}.ea-badge--pin.ea-badge--xs{font-size:var(--ea-badge-font-size, calc(var(--font-size-xs) * .75))}.ea-badge--pin.ea-badge--sm{font-size:var(--ea-badge-font-size, calc(var(--font-size-sm) * .75))}.ea-badge--pin.ea-badge--md{font-size:var(--ea-badge-font-size, calc(var(--font-size-md) * .75))}.ea-badge--pin.ea-badge--lg{font-size:var(--ea-badge-font-size, calc(var(--font-size-lg) * .75))}.ea-badge--pin.ea-badge--xl{font-size:var(--ea-badge-font-size, calc(var(--font-size-xl) * .75))}\n"]
|
|
8173
8411
|
}]
|
|
8174
8412
|
}],
|
|
8175
8413
|
propDecorators: {
|
|
@@ -8207,6 +8445,904 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
8207
8445
|
}]
|
|
8208
8446
|
}
|
|
8209
8447
|
});
|
|
8448
|
+
function intlLocalizes(locale) {
|
|
8449
|
+
try {
|
|
8450
|
+
return new Intl.NumberFormat(locale).resolvedOptions().locale.split("-")[0] === locale.split("-")[0];
|
|
8451
|
+
} catch {
|
|
8452
|
+
return false;
|
|
8453
|
+
}
|
|
8454
|
+
}
|
|
8455
|
+
function groupInteger(digits, sep, grouping) {
|
|
8456
|
+
const primary = grouping[0] ?? 3;
|
|
8457
|
+
const secondary = grouping[1] ?? primary;
|
|
8458
|
+
if (digits.length <= primary) return digits;
|
|
8459
|
+
let result = digits.slice(digits.length - primary);
|
|
8460
|
+
let rest = digits.slice(0, digits.length - primary);
|
|
8461
|
+
while (rest.length > 0) {
|
|
8462
|
+
const take = Math.min(secondary, rest.length);
|
|
8463
|
+
result = `${rest.slice(rest.length - take)}${sep}${result}`;
|
|
8464
|
+
rest = rest.slice(0, rest.length - take);
|
|
8465
|
+
}
|
|
8466
|
+
return result;
|
|
8467
|
+
}
|
|
8468
|
+
function formatGroupedNumber(value, locale, format, options) {
|
|
8469
|
+
if (intlLocalizes(locale)) return value.toLocaleString(locale, options);
|
|
8470
|
+
if (!isFinite(value)) return String(value);
|
|
8471
|
+
const magnitude = Math.abs(value).toString();
|
|
8472
|
+
if (magnitude.includes("e") || magnitude.includes("E")) return value.toString();
|
|
8473
|
+
const [intPart, fracPart] = magnitude.split(".");
|
|
8474
|
+
const grouped = groupInteger(intPart, format.group, format.grouping);
|
|
8475
|
+
const body = fracPart != null ? `${grouped}${format.decimal}${fracPart}` : grouped;
|
|
8476
|
+
return value < 0 ? `-${body}` : body;
|
|
8477
|
+
}
|
|
8478
|
+
function chartColor(index, override) {
|
|
8479
|
+
return override || `var(--color-chart-${index % 8 + 1})`;
|
|
8480
|
+
}
|
|
8481
|
+
function niceStep(span, maxTicks) {
|
|
8482
|
+
const raw = span / Math.max(1, maxTicks);
|
|
8483
|
+
const magnitude = Math.pow(10, Math.floor(Math.log10(raw)));
|
|
8484
|
+
const fraction = raw / magnitude;
|
|
8485
|
+
return (fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 2.5 ? 2.5 : fraction <= 5 ? 5 : 10) * magnitude;
|
|
8486
|
+
}
|
|
8487
|
+
function niceScale(min, max, maxTicks = 5) {
|
|
8488
|
+
if (!isFinite(min) || !isFinite(max)) return {
|
|
8489
|
+
min: 0,
|
|
8490
|
+
max: 1,
|
|
8491
|
+
ticks: [0, 1]
|
|
8492
|
+
};
|
|
8493
|
+
if (min === max) {
|
|
8494
|
+
const pad = min === 0 ? 1 : Math.abs(min) * .5;
|
|
8495
|
+
min -= min === 0 ? 0 : pad;
|
|
8496
|
+
max += pad;
|
|
8497
|
+
}
|
|
8498
|
+
const step = niceStep(max - min, maxTicks);
|
|
8499
|
+
const niceMin = Math.floor(min / step) * step;
|
|
8500
|
+
const niceMax = Math.ceil(max / step) * step;
|
|
8501
|
+
const ticks = [];
|
|
8502
|
+
const precision = Math.max(0, -Math.floor(Math.log10(step)) + 1);
|
|
8503
|
+
for (let tick = niceMin; tick <= niceMax + step / 2; tick += step) ticks.push(Number(tick.toFixed(precision)));
|
|
8504
|
+
return {
|
|
8505
|
+
min: niceMin,
|
|
8506
|
+
max: niceMax,
|
|
8507
|
+
ticks
|
|
8508
|
+
};
|
|
8509
|
+
}
|
|
8510
|
+
function estimateTextWidth(text, fontPx) {
|
|
8511
|
+
return text.length * fontPx * .6;
|
|
8512
|
+
}
|
|
8513
|
+
function injectChartViewport(size) {
|
|
8514
|
+
const host = inject(ElementRef).nativeElement;
|
|
8515
|
+
const destroyRef = inject(DestroyRef);
|
|
8516
|
+
const width = signal(480, ...ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []);
|
|
8517
|
+
const fontSize = signal(16, ...ngDevMode ? [{ debugName: "fontSize" }] : /* istanbul ignore next */ []);
|
|
8518
|
+
const measure = () => {
|
|
8519
|
+
if (host.clientWidth > 0) width.set(host.clientWidth);
|
|
8520
|
+
const font = parseFloat(getComputedStyle(host).fontSize);
|
|
8521
|
+
if (font > 0) fontSize.set(font);
|
|
8522
|
+
};
|
|
8523
|
+
afterNextRender(() => {
|
|
8524
|
+
if (typeof ResizeObserver !== "undefined") {
|
|
8525
|
+
const observer = new ResizeObserver(measure);
|
|
8526
|
+
observer.observe(host);
|
|
8527
|
+
destroyRef.onDestroy(() => observer.disconnect());
|
|
8528
|
+
}
|
|
8529
|
+
});
|
|
8530
|
+
afterRenderEffect(() => {
|
|
8531
|
+
size();
|
|
8532
|
+
measure();
|
|
8533
|
+
});
|
|
8534
|
+
return {
|
|
8535
|
+
width: width.asReadonly(),
|
|
8536
|
+
fontSize: fontSize.asReadonly()
|
|
8537
|
+
};
|
|
8538
|
+
}
|
|
8539
|
+
function injectChartFormatter(formatValue) {
|
|
8540
|
+
const i18n = inject(EagamiI18nService);
|
|
8541
|
+
return computed(() => {
|
|
8542
|
+
const custom = formatValue();
|
|
8543
|
+
if (custom) return custom;
|
|
8544
|
+
const locale = i18n.locale();
|
|
8545
|
+
const format = i18n.messages().numberFormat;
|
|
8546
|
+
return (value) => formatGroupedNumber(value, locale, format, { maximumFractionDigits: 2 });
|
|
8547
|
+
});
|
|
8548
|
+
}
|
|
8549
|
+
function clamp$1(value, min, max) {
|
|
8550
|
+
return Math.min(max, Math.max(min, value));
|
|
8551
|
+
}
|
|
8552
|
+
const CHART_LABEL_ANGLES = {
|
|
8553
|
+
horizontal: 0,
|
|
8554
|
+
diagonal: 45,
|
|
8555
|
+
vertical: 90
|
|
8556
|
+
};
|
|
8557
|
+
const BREAK_HEIGHT = 2.5;
|
|
8558
|
+
function tickLength(axisPx) {
|
|
8559
|
+
return axisPx * .4 + 2;
|
|
8560
|
+
}
|
|
8561
|
+
function labelRoom(text, angle, axisPx) {
|
|
8562
|
+
if (angle === 0) return estimateTextWidth(text, axisPx) + axisPx;
|
|
8563
|
+
return axisPx * 1.15 / Math.sin(angle * Math.PI / 180);
|
|
8564
|
+
}
|
|
8565
|
+
function labelBand(widest, angle, axisPx, height) {
|
|
8566
|
+
if (!angle) return axisPx * 2.5 + 2 + 2;
|
|
8567
|
+
const radians = angle * Math.PI / 180;
|
|
8568
|
+
return Math.min(height / 2, axisPx * .8 + 2 + 2 + widest * Math.sin(radians) + axisPx * Math.cos(radians) + axisPx * .5);
|
|
8569
|
+
}
|
|
8570
|
+
function labelLine(axisY, angle, axisPx) {
|
|
8571
|
+
return angle ? axisY + tickLength(axisPx) + 2 + axisPx * .4 : axisY + axisPx * 1.5 + 2 + 2;
|
|
8572
|
+
}
|
|
8573
|
+
function axisBreak(x, top, bottom, y, axisPx) {
|
|
8574
|
+
const half = axisPx * .8;
|
|
8575
|
+
const gap = axisPx * .35;
|
|
8576
|
+
return {
|
|
8577
|
+
axis: `M${x},${top}L${x},${y - gap}M${x},${y + gap}L${x},${bottom}`,
|
|
8578
|
+
gap: {
|
|
8579
|
+
x: x - half,
|
|
8580
|
+
y: y - gap,
|
|
8581
|
+
width: 2 * half,
|
|
8582
|
+
height: 2 * gap
|
|
8583
|
+
},
|
|
8584
|
+
slashes: [-gap, gap].map((offset) => `M${x - half},${y + offset + half / 2}L${x + half},${y + offset - half / 2}`).join("")
|
|
8585
|
+
};
|
|
8586
|
+
}
|
|
8587
|
+
const BAR_GAP = 2;
|
|
8588
|
+
const BAR_RADIUS = 4;
|
|
8589
|
+
function barPath(x, y, w, h, side) {
|
|
8590
|
+
const r = side ? Math.max(0, side === "top" || side === "bottom" ? Math.min(BAR_RADIUS, w / 2, h) : Math.min(BAR_RADIUS, h / 2, w)) : 0;
|
|
8591
|
+
const arc = (tx, ty) => `A${r},${r} 0 0 1 ${tx},${ty}`;
|
|
8592
|
+
switch (r > 0 ? side : null) {
|
|
8593
|
+
case "top": return `M${x},${y + h}V${y + r}${arc(x + r, y)}H${x + w - r}${arc(x + w, y + r)}V${y + h}Z`;
|
|
8594
|
+
case "bottom": return `M${x},${y}H${x + w}V${y + h - r}${arc(x + w - r, y + h)}H${x + r}${arc(x, y + h - r)}Z`;
|
|
8595
|
+
case "right": return `M${x},${y}H${x + w - r}${arc(x + w, y + r)}V${y + h - r}${arc(x + w - r, y + h)}H${x}Z`;
|
|
8596
|
+
case "left": return `M${x + w},${y}V${y + h}H${x + r}${arc(x, y + h - r)}V${y + r}${arc(x + r, y)}Z`;
|
|
8597
|
+
default: return `M${x},${y}H${x + w}V${y + h}H${x}Z`;
|
|
8598
|
+
}
|
|
8599
|
+
}
|
|
8600
|
+
function truncate(text, maxWidth, fontPx) {
|
|
8601
|
+
if (estimateTextWidth(text, fontPx) <= maxWidth) return text;
|
|
8602
|
+
const chars = Math.max(1, Math.floor(maxWidth / (fontPx * .6)) - 1);
|
|
8603
|
+
return `${text.slice(0, chars)}…`;
|
|
8604
|
+
}
|
|
8605
|
+
var BarChartComponent = class BarChartComponent {
|
|
8606
|
+
i18n = inject(EagamiI18nService);
|
|
8607
|
+
labels = input([], ...ngDevMode ? [{ debugName: "labels" }] : /* istanbul ignore next */ []);
|
|
8608
|
+
series = input([], ...ngDevMode ? [{ debugName: "series" }] : /* istanbul ignore next */ []);
|
|
8609
|
+
orientation = input("vertical", ...ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []);
|
|
8610
|
+
stacked = input(false, ...ngDevMode ? [{ debugName: "stacked" }] : /* istanbul ignore next */ []);
|
|
8611
|
+
showGrid = input(true, ...ngDevMode ? [{ debugName: "showGrid" }] : /* istanbul ignore next */ []);
|
|
8612
|
+
showLegend = input(true, ...ngDevMode ? [{ debugName: "showLegend" }] : /* istanbul ignore next */ []);
|
|
8613
|
+
showValues = input(false, ...ngDevMode ? [{ debugName: "showValues" }] : /* istanbul ignore next */ []);
|
|
8614
|
+
xLabelOrientation = input("horizontal", ...ngDevMode ? [{ debugName: "xLabelOrientation" }] : /* istanbul ignore next */ []);
|
|
8615
|
+
showAxisBreak = input(false, ...ngDevMode ? [{ debugName: "showAxisBreak" }] : /* istanbul ignore next */ []);
|
|
8616
|
+
height = input(240, ...ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []);
|
|
8617
|
+
size = input("md", ...ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []);
|
|
8618
|
+
animation = input("grow", ...ngDevMode ? [{ debugName: "animation" }] : /* istanbul ignore next */ []);
|
|
8619
|
+
animationDuration = input(600, ...ngDevMode ? [{ debugName: "animationDuration" }] : /* istanbul ignore next */ []);
|
|
8620
|
+
formatValue = input(null, ...ngDevMode ? [{ debugName: "formatValue" }] : /* istanbul ignore next */ []);
|
|
8621
|
+
ariaLabel = input(void 0, {
|
|
8622
|
+
...ngDevMode ? { debugName: "ariaLabel" } : /* istanbul ignore next */ {},
|
|
8623
|
+
alias: "aria-label"
|
|
8624
|
+
});
|
|
8625
|
+
pointClick = output();
|
|
8626
|
+
activePointChange = output();
|
|
8627
|
+
viewport = injectChartViewport(this.size);
|
|
8628
|
+
format = injectChartFormatter(this.formatValue);
|
|
8629
|
+
active = signal(null, ...ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []);
|
|
8630
|
+
label = computed(() => this.ariaLabel() || this.i18n.messages().chart.barChart, ...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
|
|
8631
|
+
count = computed(() => Math.max(this.labels().length, ...this.series().map((s) => s.data.length), 0), ...ngDevMode ? [{ debugName: "count" }] : /* istanbul ignore next */ []);
|
|
8632
|
+
hasData = computed(() => this.series().some((s) => s.data.some((v) => v != null && isFinite(v))), ...ngDevMode ? [{ debugName: "hasData" }] : /* istanbul ignore next */ []);
|
|
8633
|
+
renderPass = computed(() => {
|
|
8634
|
+
this.labels();
|
|
8635
|
+
this.series();
|
|
8636
|
+
this.orientation();
|
|
8637
|
+
this.stacked();
|
|
8638
|
+
this.animation();
|
|
8639
|
+
this.animationDuration();
|
|
8640
|
+
return [{}];
|
|
8641
|
+
}, ...ngDevMode ? [{ debugName: "renderPass" }] : /* istanbul ignore next */ []);
|
|
8642
|
+
hostClasses = computed(() => ({
|
|
8643
|
+
[`ea-bar-chart--${this.size()}`]: true,
|
|
8644
|
+
[`ea-bar-chart--${this.orientation()}`]: true,
|
|
8645
|
+
[`ea-bar-chart--animate-${this.animation()}`]: true
|
|
8646
|
+
}), ...ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []);
|
|
8647
|
+
layout = computed(() => {
|
|
8648
|
+
const vertical = this.orientation() === "vertical";
|
|
8649
|
+
const stacked = this.stacked();
|
|
8650
|
+
const count = Math.max(1, this.count());
|
|
8651
|
+
const series = this.series();
|
|
8652
|
+
const width = this.viewport.width();
|
|
8653
|
+
const height = this.height();
|
|
8654
|
+
const fontPx = this.viewport.fontSize();
|
|
8655
|
+
const axisPx = fontPx * .75;
|
|
8656
|
+
const format = this.format();
|
|
8657
|
+
const valueAt = (s, i) => {
|
|
8658
|
+
const value = series[s]?.data[i];
|
|
8659
|
+
return value == null || !isFinite(value) ? null : value;
|
|
8660
|
+
};
|
|
8661
|
+
let lo = 0;
|
|
8662
|
+
let hi = 0;
|
|
8663
|
+
let lowestTop = Infinity;
|
|
8664
|
+
for (let i = 0; i < count; i++) {
|
|
8665
|
+
let up = 0;
|
|
8666
|
+
let down = 0;
|
|
8667
|
+
series.forEach((_, s) => {
|
|
8668
|
+
const value = valueAt(s, i) ?? 0;
|
|
8669
|
+
if (stacked) {
|
|
8670
|
+
up += Math.max(0, value);
|
|
8671
|
+
down += Math.min(0, value);
|
|
8672
|
+
} else {
|
|
8673
|
+
up = Math.max(up, value);
|
|
8674
|
+
down = Math.min(down, value);
|
|
8675
|
+
}
|
|
8676
|
+
});
|
|
8677
|
+
hi = Math.max(hi, up);
|
|
8678
|
+
lo = Math.min(lo, down);
|
|
8679
|
+
if (stacked && up > 0) lowestTop = Math.min(lowestTop, up);
|
|
8680
|
+
}
|
|
8681
|
+
if (!stacked) {
|
|
8682
|
+
for (const s of series) for (const value of s.data) if (value != null && isFinite(value) && value > 0) lowestTop = Math.min(lowestTop, value);
|
|
8683
|
+
}
|
|
8684
|
+
const breakable = vertical && this.showAxisBreak() && lo >= 0 && isFinite(lowestTop);
|
|
8685
|
+
const scaleLo = breakable ? lowestTop : lo;
|
|
8686
|
+
const labelTexts = Array.from({ length: count }, (_, i) => this.labels()[i] ?? "");
|
|
8687
|
+
const valueRoom = this.showValues() ? axisPx * 1.5 : 0;
|
|
8688
|
+
const provisionalTicks = niceScale(scaleLo, hi).ticks.map(format);
|
|
8689
|
+
const widestTick = Math.max(0, ...provisionalTicks.map((t) => estimateTextWidth(t, axisPx)));
|
|
8690
|
+
let left;
|
|
8691
|
+
let right;
|
|
8692
|
+
let top;
|
|
8693
|
+
let bottom;
|
|
8694
|
+
let categoryText;
|
|
8695
|
+
let angle = 0;
|
|
8696
|
+
if (vertical) {
|
|
8697
|
+
left = widestTick + axisPx;
|
|
8698
|
+
right = axisPx / 2;
|
|
8699
|
+
top = axisPx + valueRoom;
|
|
8700
|
+
categoryText = labelTexts;
|
|
8701
|
+
const orientation = this.xLabelOrientation();
|
|
8702
|
+
const band = Math.max(1, width - left - right) / count;
|
|
8703
|
+
angle = orientation === "auto" ? [
|
|
8704
|
+
0,
|
|
8705
|
+
45,
|
|
8706
|
+
90
|
|
8707
|
+
].find((a) => labelTexts.every((t) => labelRoom(t, a, axisPx) <= band)) ?? 90 : CHART_LABEL_ANGLES[orientation];
|
|
8708
|
+
bottom = labelBand(Math.max(0, ...labelTexts.map((t) => estimateTextWidth(t, axisPx))), angle, axisPx, height);
|
|
8709
|
+
} else {
|
|
8710
|
+
const maxLabel = width * .3;
|
|
8711
|
+
categoryText = labelTexts.map((t) => truncate(t, maxLabel, axisPx));
|
|
8712
|
+
left = Math.max(0, ...categoryText.map((t) => estimateTextWidth(t, axisPx))) + axisPx;
|
|
8713
|
+
right = Math.max(widestTick / 2, this.showValues() ? widestTick + axisPx : 0) + axisPx / 2;
|
|
8714
|
+
top = axisPx / 2;
|
|
8715
|
+
bottom = axisPx * 2.5;
|
|
8716
|
+
}
|
|
8717
|
+
const plotWidth = Math.max(1, width - left - right);
|
|
8718
|
+
const plotHeight = Math.max(1, height - top - bottom);
|
|
8719
|
+
const scale = niceScale(scaleLo, hi, Math.max(2, Math.floor((vertical ? plotHeight : plotWidth) / (vertical ? axisPx * 3 : widestTick + axisPx * 2))));
|
|
8720
|
+
let { min } = scale;
|
|
8721
|
+
const { max } = scale;
|
|
8722
|
+
const scaleTicks = [...scale.ticks];
|
|
8723
|
+
if (breakable && min > 0) {
|
|
8724
|
+
const step = scaleTicks[1] - scaleTicks[0];
|
|
8725
|
+
const clearance = axisPx * 6;
|
|
8726
|
+
const px = (value) => value / (max - min || 1) * plotHeight;
|
|
8727
|
+
for (let steps = 0; steps < 6 && min > 0 && px(lowestTop - min) < clearance; steps++) {
|
|
8728
|
+
min = Number((min - step).toPrecision(12));
|
|
8729
|
+
scaleTicks.unshift(min);
|
|
8730
|
+
}
|
|
8731
|
+
}
|
|
8732
|
+
const axisY = top + plotHeight;
|
|
8733
|
+
const breakY = breakable && min > 0 ? axisY - axisPx * BREAK_HEIGHT : null;
|
|
8734
|
+
const valuePos = (v) => {
|
|
8735
|
+
const t = (clamp$1(v, min, max) - min) / (max - min || 1);
|
|
8736
|
+
return vertical ? top + (1 - t) * plotHeight : left + t * plotWidth;
|
|
8737
|
+
};
|
|
8738
|
+
const baseline = valuePos(clamp$1(0, min, max));
|
|
8739
|
+
const categoryLength = vertical ? plotWidth : plotHeight;
|
|
8740
|
+
const categoryStart = vertical ? left : top;
|
|
8741
|
+
const band = categoryLength / count;
|
|
8742
|
+
const thicknessCap = fontPx * 1.5;
|
|
8743
|
+
const seriesCount = Math.max(1, series.length);
|
|
8744
|
+
const thickness = stacked ? Math.min(band * .6, thicknessCap) : Math.max(1, Math.min((band * .75 - BAR_GAP * (seriesCount - 1)) / seriesCount, thicknessCap));
|
|
8745
|
+
const groupWidth = stacked ? thickness : seriesCount * thickness + (seriesCount - 1) * BAR_GAP;
|
|
8746
|
+
const duration = this.animationDuration();
|
|
8747
|
+
const cascadeStep = count > 1 ? duration * .5 / (count - 1) : 0;
|
|
8748
|
+
const bars = [];
|
|
8749
|
+
const valueLabels = [];
|
|
8750
|
+
const toRect = (cat0, v0, v1, side) => {
|
|
8751
|
+
const [a, b] = [Math.min(v0, v1), Math.max(v0, v1)];
|
|
8752
|
+
return vertical ? barPath(cat0, a, thickness, b - a, side) : barPath(a, cat0, b - a, thickness, side);
|
|
8753
|
+
};
|
|
8754
|
+
const labelFor = (cat0, tip, value, negative) => {
|
|
8755
|
+
const offset = axisPx * .5;
|
|
8756
|
+
const text = format(value);
|
|
8757
|
+
return vertical ? {
|
|
8758
|
+
x: cat0 + thickness / 2,
|
|
8759
|
+
y: negative ? tip + offset + axisPx : tip - offset,
|
|
8760
|
+
text,
|
|
8761
|
+
anchor: "middle"
|
|
8762
|
+
} : {
|
|
8763
|
+
x: negative ? tip - offset : tip + offset,
|
|
8764
|
+
y: cat0 + thickness / 2,
|
|
8765
|
+
text,
|
|
8766
|
+
anchor: negative ? "end" : "start"
|
|
8767
|
+
};
|
|
8768
|
+
};
|
|
8769
|
+
for (let index = 0; index < count; index++) {
|
|
8770
|
+
const bandStart = categoryStart + index * band + (band - groupWidth) / 2;
|
|
8771
|
+
const delay = index * cascadeStep;
|
|
8772
|
+
if (stacked) {
|
|
8773
|
+
const segments = series.map((_, s) => ({
|
|
8774
|
+
s,
|
|
8775
|
+
value: valueAt(s, index)
|
|
8776
|
+
})).filter((seg) => !!seg.value);
|
|
8777
|
+
for (const direction of [1, -1]) {
|
|
8778
|
+
const run = segments.filter((seg) => Math.sign(seg.value) === direction);
|
|
8779
|
+
let sum = 0;
|
|
8780
|
+
run.forEach((seg, i) => {
|
|
8781
|
+
const from = valuePos(sum);
|
|
8782
|
+
sum += seg.value;
|
|
8783
|
+
const to = valuePos(sum);
|
|
8784
|
+
const towardTip = Math.sign(to - from);
|
|
8785
|
+
const start = i === 0 ? from : from + towardTip * BAR_GAP;
|
|
8786
|
+
const side = i === run.length - 1 ? vertical ? direction > 0 ? "top" : "bottom" : direction > 0 ? "right" : "left" : null;
|
|
8787
|
+
if (Math.abs(to - start) > 0) bars.push({
|
|
8788
|
+
series: seg.s,
|
|
8789
|
+
index,
|
|
8790
|
+
value: seg.value,
|
|
8791
|
+
color: chartColor(seg.s, series[seg.s].color),
|
|
8792
|
+
path: toRect(bandStart, start, to, side),
|
|
8793
|
+
delay
|
|
8794
|
+
});
|
|
8795
|
+
});
|
|
8796
|
+
if (this.showValues() && run.length) valueLabels.push({
|
|
8797
|
+
key: `${index}-${direction}`,
|
|
8798
|
+
...labelFor(bandStart, valuePos(sum), sum, direction < 0)
|
|
8799
|
+
});
|
|
8800
|
+
}
|
|
8801
|
+
} else series.forEach((s, seriesIndex) => {
|
|
8802
|
+
const value = valueAt(seriesIndex, index);
|
|
8803
|
+
if (value == null) return;
|
|
8804
|
+
const cat0 = bandStart + seriesIndex * (thickness + BAR_GAP);
|
|
8805
|
+
const tip = valuePos(value);
|
|
8806
|
+
const negative = value < 0;
|
|
8807
|
+
const side = vertical ? negative ? "bottom" : "top" : negative ? "left" : "right";
|
|
8808
|
+
if (tip !== baseline) bars.push({
|
|
8809
|
+
series: seriesIndex,
|
|
8810
|
+
index,
|
|
8811
|
+
value,
|
|
8812
|
+
color: chartColor(seriesIndex, s.color),
|
|
8813
|
+
path: toRect(cat0, baseline, tip, side),
|
|
8814
|
+
delay
|
|
8815
|
+
});
|
|
8816
|
+
if (this.showValues()) valueLabels.push({
|
|
8817
|
+
key: `${index}-${seriesIndex}`,
|
|
8818
|
+
...labelFor(cat0, tip, value, negative)
|
|
8819
|
+
});
|
|
8820
|
+
});
|
|
8821
|
+
}
|
|
8822
|
+
const ticks = scaleTicks.filter((value) => value >= min).map((value) => ({
|
|
8823
|
+
value,
|
|
8824
|
+
text: format(value),
|
|
8825
|
+
pos: valuePos(value)
|
|
8826
|
+
})).filter((tick) => breakY == null || tick.pos < breakY - axisPx);
|
|
8827
|
+
const widestRoom = Math.max(0, ...categoryText.map((t) => labelRoom(t, angle, axisPx)));
|
|
8828
|
+
const labelStep = vertical ? Math.max(1, Math.ceil(widestRoom / band)) : 1;
|
|
8829
|
+
const categories = categoryText.map((text, index) => ({
|
|
8830
|
+
text,
|
|
8831
|
+
index,
|
|
8832
|
+
pos: categoryStart + (index + .5) * band
|
|
8833
|
+
})).filter((c) => c.index % labelStep === 0);
|
|
8834
|
+
return {
|
|
8835
|
+
vertical,
|
|
8836
|
+
width,
|
|
8837
|
+
height,
|
|
8838
|
+
top,
|
|
8839
|
+
left,
|
|
8840
|
+
plotWidth,
|
|
8841
|
+
plotHeight,
|
|
8842
|
+
baseline,
|
|
8843
|
+
band,
|
|
8844
|
+
categoryStart,
|
|
8845
|
+
groupWidth,
|
|
8846
|
+
thickness,
|
|
8847
|
+
axisPx,
|
|
8848
|
+
ticks,
|
|
8849
|
+
categories,
|
|
8850
|
+
bars,
|
|
8851
|
+
valueLabels,
|
|
8852
|
+
valuePos,
|
|
8853
|
+
axisY,
|
|
8854
|
+
tickEndY: axisY + tickLength(axisPx),
|
|
8855
|
+
labelAngle: angle,
|
|
8856
|
+
labelY: labelLine(axisY, angle, axisPx),
|
|
8857
|
+
axisBreak: breakY == null ? null : axisBreak(left, top, axisY, breakY, axisPx)
|
|
8858
|
+
};
|
|
8859
|
+
}, ...ngDevMode ? [{ debugName: "layout" }] : /* istanbul ignore next */ []);
|
|
8860
|
+
tooltip = computed(() => {
|
|
8861
|
+
const active = this.active();
|
|
8862
|
+
if (!active) return null;
|
|
8863
|
+
const layout = this.layout();
|
|
8864
|
+
const center = layout.categoryStart + (active.index + .5) * layout.band;
|
|
8865
|
+
const tipValue = this.stacked() ? this.stackEnd(active.series, active.index) : this.valueAt(active.series, active.index) ?? 0;
|
|
8866
|
+
const tip = layout.valuePos(tipValue);
|
|
8867
|
+
const x = layout.vertical ? center : tip;
|
|
8868
|
+
const y = layout.vertical ? Math.min(tip, layout.baseline) : center;
|
|
8869
|
+
const rows = this.series().map((s, i) => ({
|
|
8870
|
+
name: s.name,
|
|
8871
|
+
color: chartColor(i, s.color),
|
|
8872
|
+
value: this.tableValue(s.data[active.index]),
|
|
8873
|
+
active: i === active.series
|
|
8874
|
+
}));
|
|
8875
|
+
return {
|
|
8876
|
+
x,
|
|
8877
|
+
y,
|
|
8878
|
+
title: this.labels()[active.index] ?? "",
|
|
8879
|
+
rows,
|
|
8880
|
+
key: `${active.series}-${active.index}`
|
|
8881
|
+
};
|
|
8882
|
+
}, ...ngDevMode ? [{ debugName: "tooltip" }] : /* istanbul ignore next */ []);
|
|
8883
|
+
tooltips = computed(() => {
|
|
8884
|
+
const tip = this.tooltip();
|
|
8885
|
+
return tip ? [tip] : [];
|
|
8886
|
+
}, ...ngDevMode ? [{ debugName: "tooltips" }] : /* istanbul ignore next */ []);
|
|
8887
|
+
announcement = computed(() => {
|
|
8888
|
+
const event = this.eventFor(this.active());
|
|
8889
|
+
return event ? this.i18n.messages().chart.point(event.seriesName, event.label, this.format()(event.value)) : "";
|
|
8890
|
+
}, ...ngDevMode ? [{ debugName: "announcement" }] : /* istanbul ignore next */ []);
|
|
8891
|
+
showsLegend = computed(() => this.showLegend() && this.series().length > 1, ...ngDevMode ? [{ debugName: "showsLegend" }] : /* istanbul ignore next */ []);
|
|
8892
|
+
seriesColor(index) {
|
|
8893
|
+
return chartColor(index, this.series()[index]?.color);
|
|
8894
|
+
}
|
|
8895
|
+
isDimmed(bar) {
|
|
8896
|
+
const active = this.active();
|
|
8897
|
+
return !!active && (active.series !== bar.series || active.index !== bar.index);
|
|
8898
|
+
}
|
|
8899
|
+
tableValue(value) {
|
|
8900
|
+
return value == null || !isFinite(value) ? "–" : this.format()(value);
|
|
8901
|
+
}
|
|
8902
|
+
onPointerMove(event) {
|
|
8903
|
+
const rect = event.currentTarget.getBoundingClientRect();
|
|
8904
|
+
const layout = this.layout();
|
|
8905
|
+
const px = event.clientX - rect.left;
|
|
8906
|
+
const py = event.clientY - rect.top;
|
|
8907
|
+
const along = layout.vertical ? px : py;
|
|
8908
|
+
const across = layout.vertical ? py : px;
|
|
8909
|
+
const index = Math.floor((along - layout.categoryStart) / layout.band);
|
|
8910
|
+
if (index < 0 || index >= this.count()) {
|
|
8911
|
+
this.setActive(null);
|
|
8912
|
+
return;
|
|
8913
|
+
}
|
|
8914
|
+
const candidates = this.series().map((_, s) => s).filter((s) => this.valueAt(s, index) != null);
|
|
8915
|
+
if (!candidates.length) {
|
|
8916
|
+
this.setActive(null);
|
|
8917
|
+
return;
|
|
8918
|
+
}
|
|
8919
|
+
let series;
|
|
8920
|
+
if (this.stacked()) series = candidates.find((s) => {
|
|
8921
|
+
const end = layout.valuePos(this.stackEnd(s, index));
|
|
8922
|
+
const start = layout.valuePos(this.stackEnd(s, index) - (this.valueAt(s, index) ?? 0));
|
|
8923
|
+
return across >= Math.min(start, end) && across <= Math.max(start, end);
|
|
8924
|
+
}) ?? candidates[candidates.length - 1];
|
|
8925
|
+
else {
|
|
8926
|
+
const bandStart = layout.categoryStart + index * layout.band + (layout.band - layout.groupWidth) / 2;
|
|
8927
|
+
const slot = Math.floor((along - bandStart) / (layout.thickness + BAR_GAP));
|
|
8928
|
+
series = candidates.reduce((best, s) => Math.abs(s - slot) < Math.abs(best - slot) ? s : best);
|
|
8929
|
+
}
|
|
8930
|
+
this.setActive({
|
|
8931
|
+
series,
|
|
8932
|
+
index
|
|
8933
|
+
});
|
|
8934
|
+
}
|
|
8935
|
+
onPointerLeave() {
|
|
8936
|
+
this.setActive(null);
|
|
8937
|
+
}
|
|
8938
|
+
onClick() {
|
|
8939
|
+
const event = this.eventFor(this.active());
|
|
8940
|
+
if (event) this.pointClick.emit(event);
|
|
8941
|
+
}
|
|
8942
|
+
onFocus() {
|
|
8943
|
+
if (!this.active()) this.setActive(this.firstIn(0, 1));
|
|
8944
|
+
}
|
|
8945
|
+
onBlur() {
|
|
8946
|
+
this.setActive(null);
|
|
8947
|
+
}
|
|
8948
|
+
onKeydown(event) {
|
|
8949
|
+
const vertical = this.orientation() === "vertical";
|
|
8950
|
+
if (!this.active() && event.key.startsWith("Arrow")) {
|
|
8951
|
+
event.preventDefault();
|
|
8952
|
+
this.setActive(this.firstIn(0, 1));
|
|
8953
|
+
return;
|
|
8954
|
+
}
|
|
8955
|
+
const active = this.active() ?? this.firstIn(0, 1);
|
|
8956
|
+
if (!active) return;
|
|
8957
|
+
const nextCategory = vertical ? "ArrowRight" : "ArrowDown";
|
|
8958
|
+
const prevCategory = vertical ? "ArrowLeft" : "ArrowUp";
|
|
8959
|
+
const nextSeries = vertical ? "ArrowUp" : "ArrowRight";
|
|
8960
|
+
const prevSeries = vertical ? "ArrowDown" : "ArrowLeft";
|
|
8961
|
+
let next = active;
|
|
8962
|
+
switch (event.key) {
|
|
8963
|
+
case nextCategory:
|
|
8964
|
+
next = this.firstIn(active.index + 1, 1, active.series) ?? active;
|
|
8965
|
+
break;
|
|
8966
|
+
case prevCategory:
|
|
8967
|
+
next = this.firstIn(active.index - 1, -1, active.series) ?? active;
|
|
8968
|
+
break;
|
|
8969
|
+
case "Home":
|
|
8970
|
+
next = this.firstIn(0, 1, active.series) ?? active;
|
|
8971
|
+
break;
|
|
8972
|
+
case "End":
|
|
8973
|
+
next = this.firstIn(this.count() - 1, -1, active.series) ?? active;
|
|
8974
|
+
break;
|
|
8975
|
+
case nextSeries:
|
|
8976
|
+
case prevSeries: {
|
|
8977
|
+
const step = event.key === nextSeries ? 1 : -1;
|
|
8978
|
+
const seriesCount = this.series().length;
|
|
8979
|
+
for (let hop = 1; hop < seriesCount; hop++) {
|
|
8980
|
+
const series = (active.series + step * hop + seriesCount) % seriesCount;
|
|
8981
|
+
if (this.valueAt(series, active.index) != null) {
|
|
8982
|
+
next = {
|
|
8983
|
+
series,
|
|
8984
|
+
index: active.index
|
|
8985
|
+
};
|
|
8986
|
+
break;
|
|
8987
|
+
}
|
|
8988
|
+
}
|
|
8989
|
+
break;
|
|
8990
|
+
}
|
|
8991
|
+
case "Enter":
|
|
8992
|
+
case " ":
|
|
8993
|
+
this.onClick();
|
|
8994
|
+
break;
|
|
8995
|
+
case "Escape":
|
|
8996
|
+
next = null;
|
|
8997
|
+
break;
|
|
8998
|
+
default: return;
|
|
8999
|
+
}
|
|
9000
|
+
event.preventDefault();
|
|
9001
|
+
this.setActive(next);
|
|
9002
|
+
}
|
|
9003
|
+
valueAt(series, index) {
|
|
9004
|
+
const value = this.series()[series]?.data[index];
|
|
9005
|
+
return value == null || !isFinite(value) ? null : value;
|
|
9006
|
+
}
|
|
9007
|
+
stackEnd(series, index) {
|
|
9008
|
+
const own = this.valueAt(series, index) ?? 0;
|
|
9009
|
+
let sum = 0;
|
|
9010
|
+
for (let s = 0; s <= series; s++) {
|
|
9011
|
+
const value = this.valueAt(s, index) ?? 0;
|
|
9012
|
+
if (Math.sign(value) === Math.sign(own)) sum += value;
|
|
9013
|
+
}
|
|
9014
|
+
return sum;
|
|
9015
|
+
}
|
|
9016
|
+
firstIn(index, step, series) {
|
|
9017
|
+
for (let i = index; i >= 0 && i < this.count(); i += step) {
|
|
9018
|
+
if (series !== void 0 && this.valueAt(series, i) != null) return {
|
|
9019
|
+
series,
|
|
9020
|
+
index: i
|
|
9021
|
+
};
|
|
9022
|
+
const any = this.series().findIndex((_, s) => this.valueAt(s, i) != null);
|
|
9023
|
+
if (any !== -1) return {
|
|
9024
|
+
series: any,
|
|
9025
|
+
index: i
|
|
9026
|
+
};
|
|
9027
|
+
}
|
|
9028
|
+
return null;
|
|
9029
|
+
}
|
|
9030
|
+
eventFor(active) {
|
|
9031
|
+
if (!active) return null;
|
|
9032
|
+
const value = this.valueAt(active.series, active.index);
|
|
9033
|
+
if (value == null) return null;
|
|
9034
|
+
return {
|
|
9035
|
+
seriesIndex: active.series,
|
|
9036
|
+
seriesName: this.series()[active.series].name,
|
|
9037
|
+
index: active.index,
|
|
9038
|
+
label: this.labels()[active.index] ?? "",
|
|
9039
|
+
value
|
|
9040
|
+
};
|
|
9041
|
+
}
|
|
9042
|
+
setActive(next) {
|
|
9043
|
+
const current = this.active();
|
|
9044
|
+
if (current?.series === next?.series && current?.index === next?.index) return;
|
|
9045
|
+
this.active.set(next);
|
|
9046
|
+
this.activePointChange.emit(this.eventFor(next));
|
|
9047
|
+
}
|
|
9048
|
+
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
9049
|
+
minVersion: "12.0.0",
|
|
9050
|
+
version: "22.2.0",
|
|
9051
|
+
ngImport: i0,
|
|
9052
|
+
type: BarChartComponent,
|
|
9053
|
+
deps: [],
|
|
9054
|
+
target: i0.ɵɵFactoryTarget.Component
|
|
9055
|
+
});
|
|
9056
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
9057
|
+
minVersion: "17.0.0",
|
|
9058
|
+
version: "22.2.0",
|
|
9059
|
+
type: BarChartComponent,
|
|
9060
|
+
isStandalone: true,
|
|
9061
|
+
selector: "ea-bar-chart",
|
|
9062
|
+
inputs: {
|
|
9063
|
+
labels: {
|
|
9064
|
+
classPropertyName: "labels",
|
|
9065
|
+
publicName: "labels",
|
|
9066
|
+
isSignal: true,
|
|
9067
|
+
isRequired: false,
|
|
9068
|
+
transformFunction: null
|
|
9069
|
+
},
|
|
9070
|
+
series: {
|
|
9071
|
+
classPropertyName: "series",
|
|
9072
|
+
publicName: "series",
|
|
9073
|
+
isSignal: true,
|
|
9074
|
+
isRequired: false,
|
|
9075
|
+
transformFunction: null
|
|
9076
|
+
},
|
|
9077
|
+
orientation: {
|
|
9078
|
+
classPropertyName: "orientation",
|
|
9079
|
+
publicName: "orientation",
|
|
9080
|
+
isSignal: true,
|
|
9081
|
+
isRequired: false,
|
|
9082
|
+
transformFunction: null
|
|
9083
|
+
},
|
|
9084
|
+
stacked: {
|
|
9085
|
+
classPropertyName: "stacked",
|
|
9086
|
+
publicName: "stacked",
|
|
9087
|
+
isSignal: true,
|
|
9088
|
+
isRequired: false,
|
|
9089
|
+
transformFunction: null
|
|
9090
|
+
},
|
|
9091
|
+
showGrid: {
|
|
9092
|
+
classPropertyName: "showGrid",
|
|
9093
|
+
publicName: "showGrid",
|
|
9094
|
+
isSignal: true,
|
|
9095
|
+
isRequired: false,
|
|
9096
|
+
transformFunction: null
|
|
9097
|
+
},
|
|
9098
|
+
showLegend: {
|
|
9099
|
+
classPropertyName: "showLegend",
|
|
9100
|
+
publicName: "showLegend",
|
|
9101
|
+
isSignal: true,
|
|
9102
|
+
isRequired: false,
|
|
9103
|
+
transformFunction: null
|
|
9104
|
+
},
|
|
9105
|
+
showValues: {
|
|
9106
|
+
classPropertyName: "showValues",
|
|
9107
|
+
publicName: "showValues",
|
|
9108
|
+
isSignal: true,
|
|
9109
|
+
isRequired: false,
|
|
9110
|
+
transformFunction: null
|
|
9111
|
+
},
|
|
9112
|
+
xLabelOrientation: {
|
|
9113
|
+
classPropertyName: "xLabelOrientation",
|
|
9114
|
+
publicName: "xLabelOrientation",
|
|
9115
|
+
isSignal: true,
|
|
9116
|
+
isRequired: false,
|
|
9117
|
+
transformFunction: null
|
|
9118
|
+
},
|
|
9119
|
+
showAxisBreak: {
|
|
9120
|
+
classPropertyName: "showAxisBreak",
|
|
9121
|
+
publicName: "showAxisBreak",
|
|
9122
|
+
isSignal: true,
|
|
9123
|
+
isRequired: false,
|
|
9124
|
+
transformFunction: null
|
|
9125
|
+
},
|
|
9126
|
+
height: {
|
|
9127
|
+
classPropertyName: "height",
|
|
9128
|
+
publicName: "height",
|
|
9129
|
+
isSignal: true,
|
|
9130
|
+
isRequired: false,
|
|
9131
|
+
transformFunction: null
|
|
9132
|
+
},
|
|
9133
|
+
size: {
|
|
9134
|
+
classPropertyName: "size",
|
|
9135
|
+
publicName: "size",
|
|
9136
|
+
isSignal: true,
|
|
9137
|
+
isRequired: false,
|
|
9138
|
+
transformFunction: null
|
|
9139
|
+
},
|
|
9140
|
+
animation: {
|
|
9141
|
+
classPropertyName: "animation",
|
|
9142
|
+
publicName: "animation",
|
|
9143
|
+
isSignal: true,
|
|
9144
|
+
isRequired: false,
|
|
9145
|
+
transformFunction: null
|
|
9146
|
+
},
|
|
9147
|
+
animationDuration: {
|
|
9148
|
+
classPropertyName: "animationDuration",
|
|
9149
|
+
publicName: "animationDuration",
|
|
9150
|
+
isSignal: true,
|
|
9151
|
+
isRequired: false,
|
|
9152
|
+
transformFunction: null
|
|
9153
|
+
},
|
|
9154
|
+
formatValue: {
|
|
9155
|
+
classPropertyName: "formatValue",
|
|
9156
|
+
publicName: "formatValue",
|
|
9157
|
+
isSignal: true,
|
|
9158
|
+
isRequired: false,
|
|
9159
|
+
transformFunction: null
|
|
9160
|
+
},
|
|
9161
|
+
ariaLabel: {
|
|
9162
|
+
classPropertyName: "ariaLabel",
|
|
9163
|
+
publicName: "aria-label",
|
|
9164
|
+
isSignal: true,
|
|
9165
|
+
isRequired: false,
|
|
9166
|
+
transformFunction: null
|
|
9167
|
+
}
|
|
9168
|
+
},
|
|
9169
|
+
outputs: {
|
|
9170
|
+
pointClick: "pointClick",
|
|
9171
|
+
activePointChange: "activePointChange"
|
|
9172
|
+
},
|
|
9173
|
+
ngImport: i0,
|
|
9174
|
+
template: "<div\n class=\"ea-bar-chart\"\n [ngClass]=\"hostClasses()\"\n [style.--ea-chart-duration]=\"animationDuration() + 'ms'\">\n @if (hasData()) {\n <div\n class=\"ea-bar-chart__plot\"\n role=\"group\"\n tabindex=\"0\"\n [attr.aria-roledescription]=\"i18n.messages().chart.roleDescription\"\n [attr.aria-label]=\"label()\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n (keydown)=\"onKeydown($event)\">\n @for (pass of renderPass(); track pass) {\n <svg\n class=\"ea-bar-chart__svg\"\n aria-hidden=\"true\"\n [attr.width]=\"layout().width\"\n [attr.height]=\"layout().height\"\n [attr.viewBox]=\"'0 0 ' + layout().width + ' ' + layout().height\"\n [style.--ea-bar-chart-baseline]=\"layout().baseline + 'px'\"\n (pointermove)=\"onPointerMove($event)\"\n (pointerdown)=\"onPointerMove($event)\"\n (pointerleave)=\"onPointerLeave()\"\n (click)=\"onClick()\">\n <rect\n class=\"ea-bar-chart__hit\"\n [attr.x]=\"layout().left\"\n [attr.y]=\"layout().top\"\n [attr.width]=\"layout().plotWidth\"\n [attr.height]=\"layout().plotHeight\" />\n @for (tick of layout().ticks; track tick.value) {\n @if (layout().vertical) {\n @if (showGrid()) {\n <line\n class=\"ea-bar-chart__grid\"\n [attr.x1]=\"layout().left\"\n [attr.x2]=\"layout().left + layout().plotWidth\"\n [attr.y1]=\"tick.pos\"\n [attr.y2]=\"tick.pos\" />\n }\n <text\n class=\"ea-bar-chart__axis\"\n text-anchor=\"end\"\n dominant-baseline=\"middle\"\n [attr.x]=\"layout().left - layout().axisPx / 2\"\n [attr.y]=\"tick.pos\">\n {{ tick.text }}\n </text>\n } @else {\n @if (showGrid()) {\n <line\n class=\"ea-bar-chart__grid\"\n [attr.x1]=\"tick.pos\"\n [attr.x2]=\"tick.pos\"\n [attr.y1]=\"layout().top\"\n [attr.y2]=\"layout().top + layout().plotHeight\" />\n }\n <text\n class=\"ea-bar-chart__axis\"\n text-anchor=\"middle\"\n [attr.x]=\"tick.pos\"\n [attr.y]=\"layout().top + layout().plotHeight + layout().axisPx * 1.5\">\n {{ tick.text }}\n </text>\n }\n }\n @for (category of layout().categories; track category.index) {\n @if (layout().vertical) {\n <line\n class=\"ea-bar-chart__x-tick\"\n [attr.x1]=\"category.pos\"\n [attr.x2]=\"category.pos\"\n [attr.y1]=\"layout().axisY\"\n [attr.y2]=\"layout().tickEndY\" />\n <text\n class=\"ea-bar-chart__axis\"\n [attr.text-anchor]=\"layout().labelAngle ? 'end' : 'middle'\"\n [attr.dominant-baseline]=\"layout().labelAngle ? 'central' : null\"\n [attr.transform]=\"\n layout().labelAngle\n ? 'rotate(' +\n -layout().labelAngle +\n ' ' +\n category.pos +\n ' ' +\n layout().labelY +\n ')'\n : null\n \"\n [attr.x]=\"category.pos\"\n [attr.y]=\"layout().labelY\">\n {{ category.text }}\n </text>\n } @else {\n <text\n class=\"ea-bar-chart__axis\"\n text-anchor=\"end\"\n dominant-baseline=\"middle\"\n [attr.x]=\"layout().left - layout().axisPx / 2\"\n [attr.y]=\"category.pos\">\n {{ category.text }}\n </text>\n }\n }\n @for (bar of layout().bars; track $index) {\n <path\n class=\"ea-bar-chart__bar\"\n [class.ea-bar-chart__bar--dimmed]=\"isDimmed(bar)\"\n [style.--ea-chart-color]=\"bar.color\"\n [style.--ea-chart-delay]=\"bar.delay + 'ms'\"\n [attr.d]=\"bar.path\" />\n }\n @if (layout().axisBreak; as axisBreak) {\n <path\n class=\"ea-bar-chart__y-axis\"\n [attr.d]=\"axisBreak.axis\" />\n <path\n class=\"ea-bar-chart__axis-break\"\n [attr.d]=\"axisBreak.slashes\" />\n }\n @if (layout().vertical) {\n <line\n class=\"ea-bar-chart__baseline\"\n [attr.x1]=\"layout().left\"\n [attr.x2]=\"layout().left + layout().plotWidth\"\n [attr.y1]=\"layout().baseline\"\n [attr.y2]=\"layout().baseline\" />\n } @else {\n <line\n class=\"ea-bar-chart__baseline\"\n [attr.x1]=\"layout().baseline\"\n [attr.x2]=\"layout().baseline\"\n [attr.y1]=\"layout().top\"\n [attr.y2]=\"layout().top + layout().plotHeight\" />\n }\n @for (valueLabel of layout().valueLabels; track valueLabel.key) {\n <text\n class=\"ea-bar-chart__value\"\n [attr.text-anchor]=\"valueLabel.anchor\"\n [attr.dominant-baseline]=\"layout().vertical ? null : 'middle'\"\n [attr.x]=\"valueLabel.x\"\n [attr.y]=\"valueLabel.y\">\n {{ valueLabel.text }}\n </text>\n }\n @for (tip of tooltips(); track tip.key) {\n <rect\n class=\"ea-bar-chart__anchor\"\n width=\"2\"\n height=\"2\"\n [attr.x]=\"tip.x - 1\"\n [attr.y]=\"tip.y - 1\"\n [eaTooltip]=\"tooltipContent\"\n [tooltipOpen]=\"true\"\n [maxWidth]=\"undefined\" />\n }\n </svg>\n }\n <ng-template #tooltipContent>\n @if (tooltip(); as tip) {\n <div class=\"ea-bar-chart__tooltip\">\n <span class=\"ea-bar-chart__tooltip-title\">{{ tip.title }}</span>\n @for (row of tip.rows; track $index) {\n <span\n class=\"ea-bar-chart__tooltip-row\"\n [class.ea-bar-chart__tooltip-row--active]=\"row.active\">\n <span\n class=\"ea-bar-chart__swatch\"\n [style.--ea-chart-color]=\"row.color\">\n </span>\n <span class=\"ea-bar-chart__tooltip-name\">{{ row.name }}</span>\n <span class=\"ea-bar-chart__tooltip-value\">{{ row.value }}</span>\n </span>\n }\n </div>\n }\n </ng-template>\n <!-- Hidden through a block, since a table ignores the 1px size and keeps its full height -->\n <div class=\"ea-bar-chart__table\">\n <table>\n <caption>\n {{ label() }}\n </caption>\n <thead>\n <tr>\n <th scope=\"col\">{{ i18n.messages().chart.category }}</th>\n @for (s of series(); track $index) {\n <th scope=\"col\">{{ s.name }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of labels(); track $index; let i = $index) {\n <tr>\n <th scope=\"row\">{{ row }}</th>\n @for (s of series(); track $index) {\n <td>{{ tableValue(s.data[i]) }}</td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n <div\n class=\"ea-bar-chart__live\"\n aria-live=\"polite\">\n {{ announcement() }}\n </div>\n } @else {\n <div\n class=\"ea-bar-chart__empty\"\n role=\"img\"\n [attr.aria-label]=\"label()\"\n [style.height.px]=\"height()\">\n {{ i18n.messages().chart.noData }}\n </div>\n }\n @if (showsLegend()) {\n <ul\n class=\"ea-bar-chart__legend\"\n aria-hidden=\"true\">\n @for (s of series(); track $index; let i = $index) {\n <li class=\"ea-bar-chart__legend-item\">\n <span\n class=\"ea-bar-chart__swatch\"\n [style.--ea-chart-color]=\"seriesColor(i)\">\n </span>\n {{ s.name }}\n </li>\n }\n </ul>\n }\n</div>\n",
|
|
9175
|
+
styles: ["@keyframes ea-chart-fade{0%{opacity:0}}@keyframes ea-chart-draw{0%{stroke-dashoffset:1}}@keyframes ea-chart-grow-y{0%{transform:scaleY(0)}}@keyframes ea-chart-grow-x{0%{transform:scaleX(0)}}@keyframes ea-chart-grow{0%{transform:scale(0)}}ea-bar-chart{display:block}.ea-bar-chart{position:relative;display:flex;flex-direction:column;gap:.75em;font-family:var(--font-family-sans);color:var(--color-text-primary)}.ea-bar-chart--2xs{font-size:var(--font-size-2xs)}.ea-bar-chart--xs{font-size:var(--font-size-xs)}.ea-bar-chart--sm{font-size:var(--font-size-sm)}.ea-bar-chart--md{font-size:var(--font-size-md)}.ea-bar-chart--lg{font-size:var(--font-size-lg)}.ea-bar-chart--xl{font-size:var(--font-size-xl)}.ea-bar-chart__plot{position:relative;border-radius:var(--radius-md);outline:none}.ea-bar-chart__plot:focus-visible{box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-bar-chart__plot:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-bar-chart__plot svg{display:block;overflow:visible}.ea-bar-chart__svg{direction:ltr;touch-action:pan-y}.ea-bar-chart__hit{fill:transparent}.ea-bar-chart__grid{stroke:var(--color-divider);stroke-width:1px;shape-rendering:crispEdges}.ea-bar-chart__baseline{stroke:var(--color-border-strong);stroke-width:1px;shape-rendering:crispEdges;pointer-events:none}.ea-bar-chart__axis{font-size:.75em;fill:var(--color-text-secondary)}.ea-bar-chart__x-tick{stroke:var(--color-border-strong);stroke-width:1px;shape-rendering:crispEdges}.ea-bar-chart__y-axis{stroke:var(--color-border-strong);stroke-width:1px;shape-rendering:crispEdges;fill:none}.ea-bar-chart__axis-break{fill:none;stroke:var(--color-border-strong);stroke-width:1.5px;stroke-linecap:round}.ea-bar-chart__value{font-size:.75em;fill:var(--color-text-secondary);font-variant-numeric:tabular-nums;fill:var(--color-text-primary);pointer-events:none}.ea-bar-chart__bar{fill:var(--ea-chart-color);pointer-events:none;transition:opacity var(--duration-fast) var(--ease-out);transform-box:view-box}.ea-bar-chart__bar--dimmed{opacity:.35}.ea-bar-chart--vertical .ea-bar-chart__bar{transform-origin:0 var(--ea-bar-chart-baseline)}.ea-bar-chart--horizontal .ea-bar-chart__bar{transform-origin:var(--ea-bar-chart-baseline) 0}.ea-bar-chart__tooltip{display:flex;flex-direction:column;gap:var(--space-1)}.ea-bar-chart__anchor{fill:transparent}.ea-bar-chart__tooltip-title{font-weight:var(--font-weight-medium)}.ea-bar-chart__tooltip-row{display:flex;align-items:center;gap:.5em}.ea-bar-chart__tooltip-row--active{font-weight:var(--font-weight-medium)}.ea-bar-chart__tooltip-value{font-weight:var(--font-weight-semibold);font-variant-numeric:tabular-nums}.ea-bar-chart__swatch{flex-shrink:0;width:.75em;height:.75em;border-radius:var(--radius-sm);background-color:var(--ea-chart-color)}.ea-bar-chart__legend{display:flex;flex-wrap:wrap;justify-content:center;gap:.375em 1em;padding:0;margin:0;font-size:.875em;list-style:none;color:var(--color-text-secondary)}.ea-bar-chart__legend-item{display:flex;align-items:center;gap:.375em}.ea-bar-chart__table,.ea-bar-chart__live{position:absolute;overflow:hidden;clip:rect(0,0,0,0);clip-path:inset(50%);width:1px;height:1px;padding:0;margin:-1px;white-space:nowrap;border:0}.ea-bar-chart__empty{display:flex;align-items:center;justify-content:center;font-size:.875em;color:var(--color-text-tertiary)}.ea-bar-chart--animate-grow.ea-bar-chart--vertical .ea-bar-chart__bar,.ea-bar-chart--animate-cascade.ea-bar-chart--vertical .ea-bar-chart__bar{animation-name:ea-chart-grow-y}.ea-bar-chart--animate-grow.ea-bar-chart--horizontal .ea-bar-chart__bar,.ea-bar-chart--animate-cascade.ea-bar-chart--horizontal .ea-bar-chart__bar{animation-name:ea-chart-grow-x}.ea-bar-chart--animate-grow .ea-bar-chart__bar,.ea-bar-chart--animate-cascade .ea-bar-chart__bar{animation-duration:var(--ea-chart-duration, .6s);animation-timing-function:var(--ease-out);animation-fill-mode:both}@media(prefers-reduced-motion:reduce){.ea-bar-chart--animate-grow .ea-bar-chart__bar,.ea-bar-chart--animate-cascade .ea-bar-chart__bar{animation:none}}.ea-bar-chart--animate-grow .ea-bar-chart__value,.ea-bar-chart--animate-cascade .ea-bar-chart__value{animation-name:ea-chart-fade;animation-delay:calc(var(--ea-chart-duration, .6s) * .8);animation-duration:var(--ea-chart-duration, .6s);animation-timing-function:var(--ease-out);animation-fill-mode:both}@media(prefers-reduced-motion:reduce){.ea-bar-chart--animate-grow .ea-bar-chart__value,.ea-bar-chart--animate-cascade .ea-bar-chart__value{animation:none}}.ea-bar-chart--animate-cascade .ea-bar-chart__bar{animation-delay:var(--ea-chart-delay, 0ms)}.ea-bar-chart--animate-cascade .ea-bar-chart__value{animation-delay:calc(var(--ea-chart-duration, .6s) * 1.3)}.ea-bar-chart--animate-fade .ea-bar-chart__bar,.ea-bar-chart--animate-fade .ea-bar-chart__value{animation-name:ea-chart-fade;animation-duration:var(--ea-chart-duration, .6s);animation-timing-function:var(--ease-out);animation-fill-mode:both}@media(prefers-reduced-motion:reduce){.ea-bar-chart--animate-fade .ea-bar-chart__bar,.ea-bar-chart--animate-fade .ea-bar-chart__value{animation:none}}\n"],
|
|
9176
|
+
dependencies: [{
|
|
9177
|
+
kind: "directive",
|
|
9178
|
+
type: NgClass,
|
|
9179
|
+
selector: "[ngClass]",
|
|
9180
|
+
inputs: ["class", "ngClass"]
|
|
9181
|
+
}, {
|
|
9182
|
+
kind: "directive",
|
|
9183
|
+
type: TooltipDirective,
|
|
9184
|
+
selector: "[eaTooltip]",
|
|
9185
|
+
inputs: [
|
|
9186
|
+
"eaTooltip",
|
|
9187
|
+
"tooltipPosition",
|
|
9188
|
+
"flip",
|
|
9189
|
+
"whenClipped",
|
|
9190
|
+
"maxWidth",
|
|
9191
|
+
"dismissDelay",
|
|
9192
|
+
"tooltipOpen"
|
|
9193
|
+
]
|
|
9194
|
+
}],
|
|
9195
|
+
changeDetection: i0.ChangeDetectionStrategy.OnPush,
|
|
9196
|
+
encapsulation: i0.ViewEncapsulation.None
|
|
9197
|
+
});
|
|
9198
|
+
};
|
|
9199
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
9200
|
+
minVersion: "12.0.0",
|
|
9201
|
+
version: "22.2.0",
|
|
9202
|
+
ngImport: i0,
|
|
9203
|
+
type: BarChartComponent,
|
|
9204
|
+
decorators: [{
|
|
9205
|
+
type: Component,
|
|
9206
|
+
args: [{
|
|
9207
|
+
selector: "ea-bar-chart",
|
|
9208
|
+
imports: [NgClass, TooltipDirective],
|
|
9209
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
9210
|
+
encapsulation: ViewEncapsulation.None,
|
|
9211
|
+
template: "<div\n class=\"ea-bar-chart\"\n [ngClass]=\"hostClasses()\"\n [style.--ea-chart-duration]=\"animationDuration() + 'ms'\">\n @if (hasData()) {\n <div\n class=\"ea-bar-chart__plot\"\n role=\"group\"\n tabindex=\"0\"\n [attr.aria-roledescription]=\"i18n.messages().chart.roleDescription\"\n [attr.aria-label]=\"label()\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n (keydown)=\"onKeydown($event)\">\n @for (pass of renderPass(); track pass) {\n <svg\n class=\"ea-bar-chart__svg\"\n aria-hidden=\"true\"\n [attr.width]=\"layout().width\"\n [attr.height]=\"layout().height\"\n [attr.viewBox]=\"'0 0 ' + layout().width + ' ' + layout().height\"\n [style.--ea-bar-chart-baseline]=\"layout().baseline + 'px'\"\n (pointermove)=\"onPointerMove($event)\"\n (pointerdown)=\"onPointerMove($event)\"\n (pointerleave)=\"onPointerLeave()\"\n (click)=\"onClick()\">\n <rect\n class=\"ea-bar-chart__hit\"\n [attr.x]=\"layout().left\"\n [attr.y]=\"layout().top\"\n [attr.width]=\"layout().plotWidth\"\n [attr.height]=\"layout().plotHeight\" />\n @for (tick of layout().ticks; track tick.value) {\n @if (layout().vertical) {\n @if (showGrid()) {\n <line\n class=\"ea-bar-chart__grid\"\n [attr.x1]=\"layout().left\"\n [attr.x2]=\"layout().left + layout().plotWidth\"\n [attr.y1]=\"tick.pos\"\n [attr.y2]=\"tick.pos\" />\n }\n <text\n class=\"ea-bar-chart__axis\"\n text-anchor=\"end\"\n dominant-baseline=\"middle\"\n [attr.x]=\"layout().left - layout().axisPx / 2\"\n [attr.y]=\"tick.pos\">\n {{ tick.text }}\n </text>\n } @else {\n @if (showGrid()) {\n <line\n class=\"ea-bar-chart__grid\"\n [attr.x1]=\"tick.pos\"\n [attr.x2]=\"tick.pos\"\n [attr.y1]=\"layout().top\"\n [attr.y2]=\"layout().top + layout().plotHeight\" />\n }\n <text\n class=\"ea-bar-chart__axis\"\n text-anchor=\"middle\"\n [attr.x]=\"tick.pos\"\n [attr.y]=\"layout().top + layout().plotHeight + layout().axisPx * 1.5\">\n {{ tick.text }}\n </text>\n }\n }\n @for (category of layout().categories; track category.index) {\n @if (layout().vertical) {\n <line\n class=\"ea-bar-chart__x-tick\"\n [attr.x1]=\"category.pos\"\n [attr.x2]=\"category.pos\"\n [attr.y1]=\"layout().axisY\"\n [attr.y2]=\"layout().tickEndY\" />\n <text\n class=\"ea-bar-chart__axis\"\n [attr.text-anchor]=\"layout().labelAngle ? 'end' : 'middle'\"\n [attr.dominant-baseline]=\"layout().labelAngle ? 'central' : null\"\n [attr.transform]=\"\n layout().labelAngle\n ? 'rotate(' +\n -layout().labelAngle +\n ' ' +\n category.pos +\n ' ' +\n layout().labelY +\n ')'\n : null\n \"\n [attr.x]=\"category.pos\"\n [attr.y]=\"layout().labelY\">\n {{ category.text }}\n </text>\n } @else {\n <text\n class=\"ea-bar-chart__axis\"\n text-anchor=\"end\"\n dominant-baseline=\"middle\"\n [attr.x]=\"layout().left - layout().axisPx / 2\"\n [attr.y]=\"category.pos\">\n {{ category.text }}\n </text>\n }\n }\n @for (bar of layout().bars; track $index) {\n <path\n class=\"ea-bar-chart__bar\"\n [class.ea-bar-chart__bar--dimmed]=\"isDimmed(bar)\"\n [style.--ea-chart-color]=\"bar.color\"\n [style.--ea-chart-delay]=\"bar.delay + 'ms'\"\n [attr.d]=\"bar.path\" />\n }\n @if (layout().axisBreak; as axisBreak) {\n <path\n class=\"ea-bar-chart__y-axis\"\n [attr.d]=\"axisBreak.axis\" />\n <path\n class=\"ea-bar-chart__axis-break\"\n [attr.d]=\"axisBreak.slashes\" />\n }\n @if (layout().vertical) {\n <line\n class=\"ea-bar-chart__baseline\"\n [attr.x1]=\"layout().left\"\n [attr.x2]=\"layout().left + layout().plotWidth\"\n [attr.y1]=\"layout().baseline\"\n [attr.y2]=\"layout().baseline\" />\n } @else {\n <line\n class=\"ea-bar-chart__baseline\"\n [attr.x1]=\"layout().baseline\"\n [attr.x2]=\"layout().baseline\"\n [attr.y1]=\"layout().top\"\n [attr.y2]=\"layout().top + layout().plotHeight\" />\n }\n @for (valueLabel of layout().valueLabels; track valueLabel.key) {\n <text\n class=\"ea-bar-chart__value\"\n [attr.text-anchor]=\"valueLabel.anchor\"\n [attr.dominant-baseline]=\"layout().vertical ? null : 'middle'\"\n [attr.x]=\"valueLabel.x\"\n [attr.y]=\"valueLabel.y\">\n {{ valueLabel.text }}\n </text>\n }\n @for (tip of tooltips(); track tip.key) {\n <rect\n class=\"ea-bar-chart__anchor\"\n width=\"2\"\n height=\"2\"\n [attr.x]=\"tip.x - 1\"\n [attr.y]=\"tip.y - 1\"\n [eaTooltip]=\"tooltipContent\"\n [tooltipOpen]=\"true\"\n [maxWidth]=\"undefined\" />\n }\n </svg>\n }\n <ng-template #tooltipContent>\n @if (tooltip(); as tip) {\n <div class=\"ea-bar-chart__tooltip\">\n <span class=\"ea-bar-chart__tooltip-title\">{{ tip.title }}</span>\n @for (row of tip.rows; track $index) {\n <span\n class=\"ea-bar-chart__tooltip-row\"\n [class.ea-bar-chart__tooltip-row--active]=\"row.active\">\n <span\n class=\"ea-bar-chart__swatch\"\n [style.--ea-chart-color]=\"row.color\">\n </span>\n <span class=\"ea-bar-chart__tooltip-name\">{{ row.name }}</span>\n <span class=\"ea-bar-chart__tooltip-value\">{{ row.value }}</span>\n </span>\n }\n </div>\n }\n </ng-template>\n <!-- Hidden through a block, since a table ignores the 1px size and keeps its full height -->\n <div class=\"ea-bar-chart__table\">\n <table>\n <caption>\n {{ label() }}\n </caption>\n <thead>\n <tr>\n <th scope=\"col\">{{ i18n.messages().chart.category }}</th>\n @for (s of series(); track $index) {\n <th scope=\"col\">{{ s.name }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of labels(); track $index; let i = $index) {\n <tr>\n <th scope=\"row\">{{ row }}</th>\n @for (s of series(); track $index) {\n <td>{{ tableValue(s.data[i]) }}</td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n <div\n class=\"ea-bar-chart__live\"\n aria-live=\"polite\">\n {{ announcement() }}\n </div>\n } @else {\n <div\n class=\"ea-bar-chart__empty\"\n role=\"img\"\n [attr.aria-label]=\"label()\"\n [style.height.px]=\"height()\">\n {{ i18n.messages().chart.noData }}\n </div>\n }\n @if (showsLegend()) {\n <ul\n class=\"ea-bar-chart__legend\"\n aria-hidden=\"true\">\n @for (s of series(); track $index; let i = $index) {\n <li class=\"ea-bar-chart__legend-item\">\n <span\n class=\"ea-bar-chart__swatch\"\n [style.--ea-chart-color]=\"seriesColor(i)\">\n </span>\n {{ s.name }}\n </li>\n }\n </ul>\n }\n</div>\n",
|
|
9212
|
+
styles: ["@keyframes ea-chart-fade{0%{opacity:0}}@keyframes ea-chart-draw{0%{stroke-dashoffset:1}}@keyframes ea-chart-grow-y{0%{transform:scaleY(0)}}@keyframes ea-chart-grow-x{0%{transform:scaleX(0)}}@keyframes ea-chart-grow{0%{transform:scale(0)}}ea-bar-chart{display:block}.ea-bar-chart{position:relative;display:flex;flex-direction:column;gap:.75em;font-family:var(--font-family-sans);color:var(--color-text-primary)}.ea-bar-chart--2xs{font-size:var(--font-size-2xs)}.ea-bar-chart--xs{font-size:var(--font-size-xs)}.ea-bar-chart--sm{font-size:var(--font-size-sm)}.ea-bar-chart--md{font-size:var(--font-size-md)}.ea-bar-chart--lg{font-size:var(--font-size-lg)}.ea-bar-chart--xl{font-size:var(--font-size-xl)}.ea-bar-chart__plot{position:relative;border-radius:var(--radius-md);outline:none}.ea-bar-chart__plot:focus-visible{box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-bar-chart__plot:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-bar-chart__plot svg{display:block;overflow:visible}.ea-bar-chart__svg{direction:ltr;touch-action:pan-y}.ea-bar-chart__hit{fill:transparent}.ea-bar-chart__grid{stroke:var(--color-divider);stroke-width:1px;shape-rendering:crispEdges}.ea-bar-chart__baseline{stroke:var(--color-border-strong);stroke-width:1px;shape-rendering:crispEdges;pointer-events:none}.ea-bar-chart__axis{font-size:.75em;fill:var(--color-text-secondary)}.ea-bar-chart__x-tick{stroke:var(--color-border-strong);stroke-width:1px;shape-rendering:crispEdges}.ea-bar-chart__y-axis{stroke:var(--color-border-strong);stroke-width:1px;shape-rendering:crispEdges;fill:none}.ea-bar-chart__axis-break{fill:none;stroke:var(--color-border-strong);stroke-width:1.5px;stroke-linecap:round}.ea-bar-chart__value{font-size:.75em;fill:var(--color-text-secondary);font-variant-numeric:tabular-nums;fill:var(--color-text-primary);pointer-events:none}.ea-bar-chart__bar{fill:var(--ea-chart-color);pointer-events:none;transition:opacity var(--duration-fast) var(--ease-out);transform-box:view-box}.ea-bar-chart__bar--dimmed{opacity:.35}.ea-bar-chart--vertical .ea-bar-chart__bar{transform-origin:0 var(--ea-bar-chart-baseline)}.ea-bar-chart--horizontal .ea-bar-chart__bar{transform-origin:var(--ea-bar-chart-baseline) 0}.ea-bar-chart__tooltip{display:flex;flex-direction:column;gap:var(--space-1)}.ea-bar-chart__anchor{fill:transparent}.ea-bar-chart__tooltip-title{font-weight:var(--font-weight-medium)}.ea-bar-chart__tooltip-row{display:flex;align-items:center;gap:.5em}.ea-bar-chart__tooltip-row--active{font-weight:var(--font-weight-medium)}.ea-bar-chart__tooltip-value{font-weight:var(--font-weight-semibold);font-variant-numeric:tabular-nums}.ea-bar-chart__swatch{flex-shrink:0;width:.75em;height:.75em;border-radius:var(--radius-sm);background-color:var(--ea-chart-color)}.ea-bar-chart__legend{display:flex;flex-wrap:wrap;justify-content:center;gap:.375em 1em;padding:0;margin:0;font-size:.875em;list-style:none;color:var(--color-text-secondary)}.ea-bar-chart__legend-item{display:flex;align-items:center;gap:.375em}.ea-bar-chart__table,.ea-bar-chart__live{position:absolute;overflow:hidden;clip:rect(0,0,0,0);clip-path:inset(50%);width:1px;height:1px;padding:0;margin:-1px;white-space:nowrap;border:0}.ea-bar-chart__empty{display:flex;align-items:center;justify-content:center;font-size:.875em;color:var(--color-text-tertiary)}.ea-bar-chart--animate-grow.ea-bar-chart--vertical .ea-bar-chart__bar,.ea-bar-chart--animate-cascade.ea-bar-chart--vertical .ea-bar-chart__bar{animation-name:ea-chart-grow-y}.ea-bar-chart--animate-grow.ea-bar-chart--horizontal .ea-bar-chart__bar,.ea-bar-chart--animate-cascade.ea-bar-chart--horizontal .ea-bar-chart__bar{animation-name:ea-chart-grow-x}.ea-bar-chart--animate-grow .ea-bar-chart__bar,.ea-bar-chart--animate-cascade .ea-bar-chart__bar{animation-duration:var(--ea-chart-duration, .6s);animation-timing-function:var(--ease-out);animation-fill-mode:both}@media(prefers-reduced-motion:reduce){.ea-bar-chart--animate-grow .ea-bar-chart__bar,.ea-bar-chart--animate-cascade .ea-bar-chart__bar{animation:none}}.ea-bar-chart--animate-grow .ea-bar-chart__value,.ea-bar-chart--animate-cascade .ea-bar-chart__value{animation-name:ea-chart-fade;animation-delay:calc(var(--ea-chart-duration, .6s) * .8);animation-duration:var(--ea-chart-duration, .6s);animation-timing-function:var(--ease-out);animation-fill-mode:both}@media(prefers-reduced-motion:reduce){.ea-bar-chart--animate-grow .ea-bar-chart__value,.ea-bar-chart--animate-cascade .ea-bar-chart__value{animation:none}}.ea-bar-chart--animate-cascade .ea-bar-chart__bar{animation-delay:var(--ea-chart-delay, 0ms)}.ea-bar-chart--animate-cascade .ea-bar-chart__value{animation-delay:calc(var(--ea-chart-duration, .6s) * 1.3)}.ea-bar-chart--animate-fade .ea-bar-chart__bar,.ea-bar-chart--animate-fade .ea-bar-chart__value{animation-name:ea-chart-fade;animation-duration:var(--ea-chart-duration, .6s);animation-timing-function:var(--ease-out);animation-fill-mode:both}@media(prefers-reduced-motion:reduce){.ea-bar-chart--animate-fade .ea-bar-chart__bar,.ea-bar-chart--animate-fade .ea-bar-chart__value{animation:none}}\n"]
|
|
9213
|
+
}]
|
|
9214
|
+
}],
|
|
9215
|
+
propDecorators: {
|
|
9216
|
+
labels: [{
|
|
9217
|
+
type: i0.Input,
|
|
9218
|
+
args: [{
|
|
9219
|
+
isSignal: true,
|
|
9220
|
+
alias: "labels",
|
|
9221
|
+
required: false
|
|
9222
|
+
}]
|
|
9223
|
+
}],
|
|
9224
|
+
series: [{
|
|
9225
|
+
type: i0.Input,
|
|
9226
|
+
args: [{
|
|
9227
|
+
isSignal: true,
|
|
9228
|
+
alias: "series",
|
|
9229
|
+
required: false
|
|
9230
|
+
}]
|
|
9231
|
+
}],
|
|
9232
|
+
orientation: [{
|
|
9233
|
+
type: i0.Input,
|
|
9234
|
+
args: [{
|
|
9235
|
+
isSignal: true,
|
|
9236
|
+
alias: "orientation",
|
|
9237
|
+
required: false
|
|
9238
|
+
}]
|
|
9239
|
+
}],
|
|
9240
|
+
stacked: [{
|
|
9241
|
+
type: i0.Input,
|
|
9242
|
+
args: [{
|
|
9243
|
+
isSignal: true,
|
|
9244
|
+
alias: "stacked",
|
|
9245
|
+
required: false
|
|
9246
|
+
}]
|
|
9247
|
+
}],
|
|
9248
|
+
showGrid: [{
|
|
9249
|
+
type: i0.Input,
|
|
9250
|
+
args: [{
|
|
9251
|
+
isSignal: true,
|
|
9252
|
+
alias: "showGrid",
|
|
9253
|
+
required: false
|
|
9254
|
+
}]
|
|
9255
|
+
}],
|
|
9256
|
+
showLegend: [{
|
|
9257
|
+
type: i0.Input,
|
|
9258
|
+
args: [{
|
|
9259
|
+
isSignal: true,
|
|
9260
|
+
alias: "showLegend",
|
|
9261
|
+
required: false
|
|
9262
|
+
}]
|
|
9263
|
+
}],
|
|
9264
|
+
showValues: [{
|
|
9265
|
+
type: i0.Input,
|
|
9266
|
+
args: [{
|
|
9267
|
+
isSignal: true,
|
|
9268
|
+
alias: "showValues",
|
|
9269
|
+
required: false
|
|
9270
|
+
}]
|
|
9271
|
+
}],
|
|
9272
|
+
xLabelOrientation: [{
|
|
9273
|
+
type: i0.Input,
|
|
9274
|
+
args: [{
|
|
9275
|
+
isSignal: true,
|
|
9276
|
+
alias: "xLabelOrientation",
|
|
9277
|
+
required: false
|
|
9278
|
+
}]
|
|
9279
|
+
}],
|
|
9280
|
+
showAxisBreak: [{
|
|
9281
|
+
type: i0.Input,
|
|
9282
|
+
args: [{
|
|
9283
|
+
isSignal: true,
|
|
9284
|
+
alias: "showAxisBreak",
|
|
9285
|
+
required: false
|
|
9286
|
+
}]
|
|
9287
|
+
}],
|
|
9288
|
+
height: [{
|
|
9289
|
+
type: i0.Input,
|
|
9290
|
+
args: [{
|
|
9291
|
+
isSignal: true,
|
|
9292
|
+
alias: "height",
|
|
9293
|
+
required: false
|
|
9294
|
+
}]
|
|
9295
|
+
}],
|
|
9296
|
+
size: [{
|
|
9297
|
+
type: i0.Input,
|
|
9298
|
+
args: [{
|
|
9299
|
+
isSignal: true,
|
|
9300
|
+
alias: "size",
|
|
9301
|
+
required: false
|
|
9302
|
+
}]
|
|
9303
|
+
}],
|
|
9304
|
+
animation: [{
|
|
9305
|
+
type: i0.Input,
|
|
9306
|
+
args: [{
|
|
9307
|
+
isSignal: true,
|
|
9308
|
+
alias: "animation",
|
|
9309
|
+
required: false
|
|
9310
|
+
}]
|
|
9311
|
+
}],
|
|
9312
|
+
animationDuration: [{
|
|
9313
|
+
type: i0.Input,
|
|
9314
|
+
args: [{
|
|
9315
|
+
isSignal: true,
|
|
9316
|
+
alias: "animationDuration",
|
|
9317
|
+
required: false
|
|
9318
|
+
}]
|
|
9319
|
+
}],
|
|
9320
|
+
formatValue: [{
|
|
9321
|
+
type: i0.Input,
|
|
9322
|
+
args: [{
|
|
9323
|
+
isSignal: true,
|
|
9324
|
+
alias: "formatValue",
|
|
9325
|
+
required: false
|
|
9326
|
+
}]
|
|
9327
|
+
}],
|
|
9328
|
+
ariaLabel: [{
|
|
9329
|
+
type: i0.Input,
|
|
9330
|
+
args: [{
|
|
9331
|
+
isSignal: true,
|
|
9332
|
+
alias: "aria-label",
|
|
9333
|
+
required: false
|
|
9334
|
+
}]
|
|
9335
|
+
}],
|
|
9336
|
+
pointClick: [{
|
|
9337
|
+
type: i0.Output,
|
|
9338
|
+
args: ["pointClick"]
|
|
9339
|
+
}],
|
|
9340
|
+
activePointChange: [{
|
|
9341
|
+
type: i0.Output,
|
|
9342
|
+
args: ["activePointChange"]
|
|
9343
|
+
}]
|
|
9344
|
+
}
|
|
9345
|
+
});
|
|
8210
9346
|
var ChevronRightIconComponent = class ChevronRightIconComponent extends IconComponentBase {
|
|
8211
9347
|
static slug = "chevron-right";
|
|
8212
9348
|
static category = "feather";
|
|
@@ -9131,7 +10267,8 @@ var CheckboxComponent = class CheckboxComponent {
|
|
|
9131
10267
|
"flip",
|
|
9132
10268
|
"whenClipped",
|
|
9133
10269
|
"maxWidth",
|
|
9134
|
-
"dismissDelay"
|
|
10270
|
+
"dismissDelay",
|
|
10271
|
+
"tooltipOpen"
|
|
9135
10272
|
]
|
|
9136
10273
|
}
|
|
9137
10274
|
],
|
|
@@ -11455,7 +12592,7 @@ var ColorPickerComponent = class ColorPickerComponent {
|
|
|
11455
12592
|
],
|
|
11456
12593
|
ngImport: i0,
|
|
11457
12594
|
template: "<div class=\"ea-color-picker-field ea-color-picker-field--{{ size() }}\">\n @if (label(); as labelText) {\n <ea-field-label\n [text]=\"labelText\"\n [icon]=\"labelIcon()\"\n [forId]=\"id()\"\n [labelId]=\"id() + '-label'\"\n [required]=\"required()\" />\n }\n\n <div class=\"ea-color-picker\">\n <div\n class=\"ea-color-picker__trigger-wrapper\"\n [ngClass]=\"wrapperClasses()\">\n <button\n #triggerEl\n type=\"button\"\n class=\"ea-color-picker__trigger\"\n [ngClass]=\"triggerClasses()\"\n [id]=\"id()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-labelledby]=\"triggerLabelledBy()\"\n [attr.aria-controls]=\"isOpen() ? popoverId() : null\"\n [attr.aria-required]=\"required() || null\"\n [attr.aria-invalid]=\"hasError() || null\"\n [attr.aria-describedby]=\"\n showError() ? id() + '-error' : showHint() ? id() + '-hint' : null\n \"\n (click)=\"toggle()\"\n (keydown)=\"onTriggerKeydown($event)\">\n <span\n class=\"ea-color-picker__swatch\"\n aria-hidden=\"true\">\n <span\n class=\"ea-color-picker__swatch-fill\"\n [style.--_ea-swatch-color]=\"value() ? displayColor() : null\">\n </span>\n </span>\n @if (!compact()) {\n <span\n class=\"ea-color-picker__trigger-value\"\n [class.ea-color-picker__trigger-value--placeholder]=\"!displayValue()\">\n <bdi>{{ displayValue() || resolvedPlaceholder() }}</bdi>\n </span>\n }\n </button>\n @if (clearable() && !compact() && value() && !isDisabled() && !readonly()) {\n <button\n type=\"button\"\n class=\"ea-color-picker__clear\"\n [attr.aria-label]=\"i18n.messages().colorPicker.clear\"\n (click)=\"clear($event)\">\n <ea-icon-x\n class=\"ea-color-picker__clear-icon\"\n aria-hidden=\"true\" />\n </button>\n }\n </div>\n\n <ea-popover\n [anchor]=\"triggerEl\"\n [open]=\"isOpen()\"\n [surfaceId]=\"popoverId()\"\n placement=\"bottom-start\"\n role=\"dialog\"\n [aria-label]=\"i18n.messages().colorPicker.dialogLabel\"\n [trapFocus]=\"true\"\n [closeOnEscape]=\"false\"\n scrollBehavior=\"close\"\n (closeRequested)=\"onPopoverCloseRequested()\">\n <div\n class=\"ea-color-picker__popover\"\n [ngClass]=\"popoverClasses()\"\n (keydown)=\"onPopoverKeydown($event)\">\n <div\n #svAreaEl\n class=\"ea-color-picker__sv-area\"\n role=\"slider\"\n tabindex=\"0\"\n [attr.aria-label]=\"i18n.messages().colorPicker.saturationAndValue\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n [attr.aria-valuenow]=\"satPercent()\"\n [attr.aria-valuetext]=\"\n i18n\n .messages()\n .colorPicker.saturationAndValueStatus(satPercent(), valPercent())\n \"\n [style.background-color]=\"hueColor()\"\n (pointerdown)=\"onSvPointerDown($event)\"\n (pointermove)=\"onSvPointerMove($event)\"\n (pointerup)=\"onSvPointerUp($event)\"\n (pointercancel)=\"onSvPointerUp($event)\"\n (keydown)=\"onSvKeydown($event)\">\n <div class=\"ea-color-picker__sv-area-sat\"></div>\n <div class=\"ea-color-picker__sv-area-val\"></div>\n <div\n class=\"ea-color-picker__sv-pointer\"\n [style.background-color]=\"opaqueColor()\"\n [style.left]=\"svPointerLeft()\"\n [style.top]=\"svPointerTop()\">\n </div>\n </div>\n\n <div\n class=\"ea-color-picker__sv-status\"\n aria-live=\"polite\">\n {{\n i18n\n .messages()\n .colorPicker.saturationAndValueStatus(satPercent(), valPercent())\n }}\n </div>\n\n <div class=\"ea-color-picker__sliders\">\n <div class=\"ea-color-picker__slider-row\">\n <span\n class=\"ea-color-picker__swatch ea-color-picker__swatch--lg\"\n aria-hidden=\"true\">\n <span\n class=\"ea-color-picker__swatch-fill\"\n [style.--_ea-swatch-color]=\"displayColor()\">\n </span>\n </span>\n <div class=\"ea-color-picker__strip-stack\">\n <div\n #hueTrackEl\n class=\"ea-color-picker__strip ea-color-picker__strip--hue\"\n role=\"slider\"\n tabindex=\"0\"\n [attr.aria-label]=\"i18n.messages().colorPicker.hue\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"360\"\n [attr.aria-valuenow]=\"hueRounded()\"\n (pointerdown)=\"onHuePointerDown($event)\"\n (pointermove)=\"onHuePointerMove($event)\"\n (pointerup)=\"onHuePointerUp($event)\"\n (pointercancel)=\"onHuePointerUp($event)\"\n (keydown)=\"onHueKeydown($event)\">\n <div\n class=\"ea-color-picker__strip-thumb\"\n [style.left]=\"huePointerLeft()\">\n </div>\n </div>\n @if (showAlpha()) {\n <div\n #alphaTrackEl\n class=\"ea-color-picker__strip ea-color-picker__strip--alpha\"\n role=\"slider\"\n tabindex=\"0\"\n [attr.aria-label]=\"i18n.messages().colorPicker.alpha\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"100\"\n [attr.aria-valuenow]=\"alphaPercentRounded()\"\n [attr.aria-valuetext]=\"alphaPercentRounded() + '%'\"\n [style.--ea-color-picker-alpha-base]=\"opaqueColor()\"\n (pointerdown)=\"onAlphaPointerDown($event)\"\n (pointermove)=\"onAlphaPointerMove($event)\"\n (pointerup)=\"onAlphaPointerUp($event)\"\n (pointercancel)=\"onAlphaPointerUp($event)\"\n (keydown)=\"onAlphaKeydown($event)\">\n <div\n class=\"ea-color-picker__strip-thumb\"\n [style.left]=\"alphaPointerLeft()\">\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n\n <div\n class=\"ea-color-picker__inputs\"\n [class.ea-color-picker__inputs--hex]=\"activeFormat() === 'hex'\">\n @switch (activeFormat()) {\n @case ('hex') {\n <label\n class=\"ea-color-picker__input-group ea-color-picker__input-group--hex\">\n <span class=\"ea-color-picker__input-label\">HEX</span>\n <input\n class=\"ea-color-picker__input\"\n type=\"text\"\n dir=\"auto\"\n spellcheck=\"false\"\n autocomplete=\"off\"\n maxlength=\"9\"\n [value]=\"hexInputValue()\"\n (input)=\"onHexInput($event)\"\n (blur)=\"onHexBlur()\" />\n </label>\n }\n @case ('rgb') {\n <label class=\"ea-color-picker__input-group\">\n <span class=\"ea-color-picker__input-label\">R</span>\n <input\n class=\"ea-color-picker__input ea-color-picker__input--num\"\n type=\"text\"\n inputmode=\"numeric\"\n pattern=\"\\d*\"\n maxlength=\"3\"\n [value]=\"rgb().r\"\n (input)=\"onRgbInput('r', $event)\" />\n </label>\n <label class=\"ea-color-picker__input-group\">\n <span class=\"ea-color-picker__input-label\">G</span>\n <input\n class=\"ea-color-picker__input ea-color-picker__input--num\"\n type=\"text\"\n inputmode=\"numeric\"\n pattern=\"\\d*\"\n maxlength=\"3\"\n [value]=\"rgb().g\"\n (input)=\"onRgbInput('g', $event)\" />\n </label>\n <label class=\"ea-color-picker__input-group\">\n <span class=\"ea-color-picker__input-label\">B</span>\n <input\n class=\"ea-color-picker__input ea-color-picker__input--num\"\n type=\"text\"\n inputmode=\"numeric\"\n pattern=\"\\d*\"\n maxlength=\"3\"\n [value]=\"rgb().b\"\n (input)=\"onRgbInput('b', $event)\" />\n </label>\n @if (showAlpha()) {\n <label class=\"ea-color-picker__input-group\">\n <span class=\"ea-color-picker__input-label\">A</span>\n <input\n class=\"ea-color-picker__input ea-color-picker__input--num\"\n type=\"text\"\n inputmode=\"numeric\"\n pattern=\"\\d*\"\n maxlength=\"3\"\n [value]=\"alphaPercentRounded()\"\n (input)=\"onAlphaInput($event)\" />\n </label>\n }\n }\n @case ('hsl') {\n <label class=\"ea-color-picker__input-group\">\n <span class=\"ea-color-picker__input-label\">H</span>\n <input\n class=\"ea-color-picker__input ea-color-picker__input--num\"\n type=\"text\"\n inputmode=\"numeric\"\n pattern=\"\\d*\"\n maxlength=\"3\"\n [value]=\"hslDisplay().h\"\n (input)=\"onHslInput('h', $event)\" />\n </label>\n <label class=\"ea-color-picker__input-group\">\n <span class=\"ea-color-picker__input-label\">S</span>\n <input\n class=\"ea-color-picker__input ea-color-picker__input--num\"\n type=\"text\"\n inputmode=\"numeric\"\n pattern=\"\\d*\"\n maxlength=\"3\"\n [value]=\"hslDisplay().s\"\n (input)=\"onHslInput('s', $event)\" />\n </label>\n <label class=\"ea-color-picker__input-group\">\n <span class=\"ea-color-picker__input-label\">L</span>\n <input\n class=\"ea-color-picker__input ea-color-picker__input--num\"\n type=\"text\"\n inputmode=\"numeric\"\n pattern=\"\\d*\"\n maxlength=\"3\"\n [value]=\"hslDisplay().l\"\n (input)=\"onHslInput('l', $event)\" />\n </label>\n @if (showAlpha()) {\n <label class=\"ea-color-picker__input-group\">\n <span class=\"ea-color-picker__input-label\">A</span>\n <input\n class=\"ea-color-picker__input ea-color-picker__input--num\"\n type=\"text\"\n inputmode=\"numeric\"\n pattern=\"\\d*\"\n maxlength=\"3\"\n [value]=\"alphaPercentRounded()\"\n (input)=\"onAlphaInput($event)\" />\n </label>\n }\n }\n }\n @if (canToggleFormat()) {\n <button\n type=\"button\"\n class=\"ea-color-picker__format-toggle\"\n [attr.aria-label]=\"formatToggleLabel()\"\n (click)=\"cycleInputMode()\">\n {{ formatLabel() }}\n </button>\n }\n </div>\n\n @if (hasEyeDropper()) {\n <div class=\"ea-color-picker__tools\">\n <button\n type=\"button\"\n class=\"ea-color-picker__tool-btn\"\n [attr.aria-label]=\"i18n.messages().colorPicker.eyedropper\"\n (click)=\"pickFromScreen()\">\n <ea-icon-droplet aria-hidden=\"true\" />\n <span>{{ i18n.messages().colorPicker.eyedropper }}</span>\n </button>\n </div>\n }\n\n @if (presets().length > 0) {\n <div class=\"ea-color-picker__presets\">\n <span\n class=\"ea-color-picker__presets-label\"\n [id]=\"id() + '-presets-label'\">\n {{ i18n.messages().colorPicker.presets }}\n </span>\n <div\n class=\"ea-color-picker__presets-grid\"\n role=\"group\"\n [attr.aria-labelledby]=\"id() + '-presets-label'\">\n @for (preset of presets(); track preset) {\n <button\n type=\"button\"\n class=\"ea-color-picker__preset\"\n [attr.aria-label]=\"preset\"\n [attr.aria-pressed]=\"activePresets().has(preset)\"\n [style.background-color]=\"preset\"\n (click)=\"selectPreset(preset)\">\n </button>\n }\n </div>\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",
|
|
11458
|
-
styles: [".ea-color-picker-field{display:flex;flex-direction:column;gap:.375em;--ea-field-label-size: .875em;--ea-field-messages-size: .8125em}.ea-color-picker-field--2xs{font-size:var(--font-size-2xs)}.ea-color-picker-field--xs{font-size:var(--font-size-xs)}.ea-color-picker-field--sm{font-size:var(--font-size-sm)}.ea-color-picker-field--md{font-size:var(--font-size-md)}.ea-color-picker-field--lg{font-size:var(--font-size-lg)}.ea-color-picker-field--xl{font-size:var(--font-size-xl)}.ea-color-picker,.ea-color-picker__trigger-wrapper{position:relative}.ea-color-picker__trigger{display:flex;align-items:center;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-color-picker__trigger:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-color-picker__trigger:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__trigger--open{border-color:var(--color-border-focus);box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-color-picker__trigger--open{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__trigger--error{border-color:var(--color-error-default)}.ea-color-picker__trigger--error.ea-color-picker__trigger--open{box-shadow:var(--shadow-focus-ring-error)}@media(forced-colors:active){.ea-color-picker__trigger--error.ea-color-picker__trigger--open{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__trigger--compact{width:auto;min-height:0;padding:.375em}.ea-color-picker__trigger--compact .ea-color-picker__swatch{width:1.5em;height:1.5em}.ea-color-picker__trigger--disabled{background-color:var(--color-bg-muted);opacity:.6;cursor:default}.ea-color-picker__trigger--readonly{cursor:default}.ea-color-picker__trigger--readonly:focus-visible{border-color:var(--color-border-focus);box-shadow:none}@media(forced-colors:active){.ea-color-picker__trigger--readonly:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__trigger-value{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--font-family-mono);font-size:.85em}.ea-color-picker__trigger-value--placeholder{color:var(--color-text-tertiary);font-family:var(--font-family-sans);font-size:1em}.ea-color-picker__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-color-picker__clear>*{font-size:1.25em}.ea-color-picker__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-color-picker__clear:hover{background-color:var(--color-state-hover);color:var(--color-text-primary)}.ea-color-picker__clear:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-color-picker__clear:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__clear:disabled{cursor:default;opacity:.5}.ea-color-picker__clear{z-index:1;position:absolute;top:50%;inset-inline-end:var(--space-2);transform:translateY(-50%)}.ea-color-picker__swatch{position:relative;overflow:hidden;flex-shrink:0;width:1.125em;height:1.125em;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-sm);background-color:var(--color-bg-base);forced-color-adjust:none}.ea-color-picker__swatch--lg{width:2.5em;height:2.5em;border-radius:var(--radius-md)}.ea-color-picker__swatch-fill{position:absolute;inset:0;display:block;background-color:var(--color-bg-base);background-image:linear-gradient(var(--_ea-swatch-color, transparent),var(--_ea-swatch-color, transparent)),linear-gradient(45deg,var(--color-neutral-200) 25%,transparent 25%),linear-gradient(-45deg,var(--color-neutral-200) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,var(--color-neutral-200) 75%),linear-gradient(-45deg,transparent 75%,var(--color-neutral-200) 75%);background-size:100% 100%,8px 8px,8px 8px,8px 8px,8px 8px;background-position:0 0,0 0,0 4px,4px -4px,-4px 0;forced-color-adjust:none}.ea-color-picker__popover{display:flex;flex-direction:column;gap:.75em;width:17.5em;padding:.75em;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);background-color:var(--ea-color-picker-popover-background-color, var(--color-bg-elevated))}@media(forced-colors:active){.ea-color-picker__popover{border:1px solid CanvasText}}.ea-color-picker__popover--2xs{font-size:var(--font-size-2xs)}.ea-color-picker__popover--xs{font-size:var(--font-size-xs)}.ea-color-picker__popover--sm{font-size:var(--font-size-sm)}.ea-color-picker__popover--md{font-size:var(--font-size-md)}.ea-color-picker__popover--lg{font-size:var(--font-size-lg)}.ea-color-picker__popover--xl{font-size:var(--font-size-xl)}.ea-color-picker__sv-area{position:relative;overflow:hidden;width:100%;height:10em;border-radius:var(--radius-sm);cursor:crosshair;forced-color-adjust:none;touch-action:none}.ea-color-picker__sv-area:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-color-picker__sv-area:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__sv-area-sat{position:absolute;inset:0;background:linear-gradient(to right,var(--color-picker-sv-white),transparent);forced-color-adjust:none}.ea-color-picker__sv-area-val{position:absolute;inset:0;background:linear-gradient(to top,var(--color-picker-sv-black),transparent);forced-color-adjust:none}.ea-color-picker__sv-pointer{position:absolute;z-index:1;width:.875em;height:.875em;border:2px solid var(--color-neutral-0);border-radius:var(--radius-full);box-shadow:0 0 0 1px var(--color-picker-thumb-halo);pointer-events:none;transform:translate(-50%,-50%)}.ea-color-picker__sv-status{position:absolute;overflow:hidden;clip:rect(0,0,0,0);clip-path:inset(50%);width:1px;height:1px;padding:0;margin:-1px;white-space:nowrap;border:0}.ea-color-picker__slider-row{display:flex;align-items:center;gap:.5em}.ea-color-picker__strip-stack{display:flex;flex-direction:column;flex:1;gap:.5em}.ea-color-picker__strip{position:relative;width:100%;height:.75em;border-radius:var(--radius-full);cursor:pointer;forced-color-adjust:none;touch-action:none}.ea-color-picker__strip:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-color-picker__strip:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__strip--hue{background:linear-gradient(to right,var(--color-picker-hue-red) 0%,var(--color-picker-hue-yellow) 17%,var(--color-picker-hue-green) 33%,var(--color-picker-hue-cyan) 50%,var(--color-picker-hue-blue) 67%,var(--color-picker-hue-magenta) 83%,var(--color-picker-hue-red) 100%)}.ea-color-picker__strip--alpha{background-color:var(--color-bg-base);background-image:linear-gradient(to right,transparent 0%,var(--ea-color-picker-alpha-base, currentcolor) 100%),linear-gradient(45deg,var(--color-neutral-200) 25%,transparent 25%),linear-gradient(-45deg,var(--color-neutral-200) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,var(--color-neutral-200) 75%),linear-gradient(-45deg,transparent 75%,var(--color-neutral-200) 75%);background-size:100% 100%,8px 8px,8px 8px,8px 8px,8px 8px;background-position:0 0,0 0,0 4px,4px -4px,-4px 0}.ea-color-picker__strip-thumb{position:absolute;top:50%;width:.875em;height:.875em;border:2px solid var(--color-neutral-0);border-radius:var(--radius-full);box-shadow:0 0 0 1px var(--color-picker-thumb-halo);pointer-events:none;transform:translate(-50%,-50%)}.ea-color-picker__inputs{display:flex;align-items:end;gap:.25em}.ea-color-picker__input-group{display:flex;flex:1;flex-direction:column;gap:.25em;min-width:0;text-align:center}.ea-color-picker__input-group--hex{flex:1}.ea-color-picker__format-toggle{flex-shrink:0;min-width:5.2em;padding:.4em .8em;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-sm);background-color:var(--color-bg-base);font-family:var(--font-family-sans);font-size:.625em;font-weight:var(--font-weight-medium);letter-spacing:.04em;color:var(--color-text-secondary);cursor:pointer;transition:var(--transition-colors)}.ea-color-picker__format-toggle:hover{background-color:var(--color-state-hover);color:var(--color-text-primary)}.ea-color-picker__format-toggle:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-color-picker__format-toggle:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__input-label{font-size:.625em;font-weight:var(--font-weight-medium);text-transform:uppercase;letter-spacing:.04em;color:var(--color-text-tertiary)}.ea-color-picker__input{width:100%;min-width:0;padding:.375em .5em;background-color:var(--color-bg-base);border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-sm);font-family:var(--font-family-mono);font-size:.75em;text-align:center;color:var(--color-text-primary)}.ea-color-picker__input:focus-visible{outline:none;border-color:var(--color-border-focus);box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-color-picker__input:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__input--num{appearance:textfield}.ea-color-picker__input--num::-webkit-outer-spin-button,.ea-color-picker__input--num::-webkit-inner-spin-button{appearance:none;margin:0}.ea-color-picker__tools{display:flex;justify-content:flex-start}.ea-color-picker__tool-btn{display:inline-flex;align-items:center;gap:.5em;padding:.375em .75em;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-sm);background-color:var(--color-bg-base);font-family:var(--font-family-sans);font-size:.75em;color:var(--color-text-secondary);cursor:pointer;transition:var(--transition-colors)}.ea-color-picker__tool-btn:hover{background-color:var(--color-state-hover);color:var(--color-text-primary)}.ea-color-picker__tool-btn:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-color-picker__tool-btn:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__tool-btn ea-icon-droplet{width:.875em;height:.875em}.ea-color-picker__presets{display:flex;flex-direction:column;gap:.375em;padding-top:.5em;border-top:var(--border-width-thin) solid var(--color-border-default)}.ea-color-picker__presets-label{font-size:.625em;font-weight:var(--font-weight-medium);text-transform:uppercase;letter-spacing:.04em;color:var(--color-text-tertiary)}.ea-color-picker__presets-grid{display:grid;grid-template-columns:repeat(10,1fr);gap:.25em}.ea-color-picker__preset{width:100%;aspect-ratio:1;padding:0;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-sm);cursor:pointer;forced-color-adjust:none;transition:transform var(--duration-fast) var(--ease-out)}.ea-color-picker__preset:hover{transform:scale(1.1)}.ea-color-picker__preset:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-color-picker__preset:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__preset[aria-selected=true]{box-shadow:0 0 0 2px var(--color-brand-default)}\n"],
|
|
12595
|
+
styles: [".ea-color-picker-field{display:flex;flex-direction:column;gap:.375em;--ea-field-label-size: .875em;--ea-field-messages-size: .8125em}.ea-color-picker-field--2xs{font-size:var(--font-size-2xs)}.ea-color-picker-field--xs{font-size:var(--font-size-xs)}.ea-color-picker-field--sm{font-size:var(--font-size-sm)}.ea-color-picker-field--md{font-size:var(--font-size-md)}.ea-color-picker-field--lg{font-size:var(--font-size-lg)}.ea-color-picker-field--xl{font-size:var(--font-size-xl)}.ea-color-picker,.ea-color-picker__trigger-wrapper{position:relative}.ea-color-picker__trigger{display:flex;align-items:center;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-color-picker__trigger:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-color-picker__trigger:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__trigger--open{border-color:var(--color-border-focus);box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-color-picker__trigger--open{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__trigger--error{border-color:var(--color-error-default)}.ea-color-picker__trigger--error.ea-color-picker__trigger--open{box-shadow:var(--shadow-focus-ring-error)}@media(forced-colors:active){.ea-color-picker__trigger--error.ea-color-picker__trigger--open{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__trigger--compact{width:auto;min-height:0;padding:.375em}.ea-color-picker__trigger--compact .ea-color-picker__swatch{width:1.5em;height:1.5em}.ea-color-picker__trigger--disabled{background-color:var(--color-bg-muted);opacity:.6;cursor:default}.ea-color-picker__trigger--readonly{cursor:default}.ea-color-picker__trigger--readonly:focus-visible{border-color:var(--color-border-focus);box-shadow:none}@media(forced-colors:active){.ea-color-picker__trigger--readonly:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__trigger-value{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--font-family-mono);font-size:.875em}.ea-color-picker__trigger-value--placeholder{color:var(--color-text-tertiary);font-family:var(--font-family-sans);font-size:1em}.ea-color-picker__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-color-picker__clear>*{font-size:1.25em}.ea-color-picker__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-color-picker__clear:hover{background-color:var(--color-state-hover);color:var(--color-text-primary)}.ea-color-picker__clear:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-color-picker__clear:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__clear:disabled{cursor:default;opacity:.5}.ea-color-picker__clear{z-index:1;position:absolute;top:50%;inset-inline-end:var(--space-2);transform:translateY(-50%)}.ea-color-picker__swatch{position:relative;overflow:hidden;flex-shrink:0;width:1.125em;height:1.125em;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-sm);background-color:var(--color-bg-base);forced-color-adjust:none}.ea-color-picker__swatch--lg{width:2.5em;height:2.5em;border-radius:var(--radius-md)}.ea-color-picker__swatch-fill{position:absolute;inset:0;display:block;background-color:var(--color-bg-base);background-image:linear-gradient(var(--_ea-swatch-color, transparent),var(--_ea-swatch-color, transparent)),linear-gradient(45deg,var(--color-neutral-200) 25%,transparent 25%),linear-gradient(-45deg,var(--color-neutral-200) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,var(--color-neutral-200) 75%),linear-gradient(-45deg,transparent 75%,var(--color-neutral-200) 75%);background-size:100% 100%,8px 8px,8px 8px,8px 8px,8px 8px;background-position:0 0,0 0,0 4px,4px -4px,-4px 0;forced-color-adjust:none}.ea-color-picker__popover{display:flex;flex-direction:column;gap:.75em;width:17.5em;padding:.75em;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);background-color:var(--ea-color-picker-popover-background-color, var(--color-bg-elevated))}@media(forced-colors:active){.ea-color-picker__popover{border:1px solid CanvasText}}.ea-color-picker__popover--2xs{font-size:var(--font-size-2xs)}.ea-color-picker__popover--xs{font-size:var(--font-size-xs)}.ea-color-picker__popover--sm{font-size:var(--font-size-sm)}.ea-color-picker__popover--md{font-size:var(--font-size-md)}.ea-color-picker__popover--lg{font-size:var(--font-size-lg)}.ea-color-picker__popover--xl{font-size:var(--font-size-xl)}.ea-color-picker__sv-area{position:relative;overflow:hidden;width:100%;height:10em;border-radius:var(--radius-sm);cursor:crosshair;forced-color-adjust:none;touch-action:none}.ea-color-picker__sv-area:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-color-picker__sv-area:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__sv-area-sat{position:absolute;inset:0;background:linear-gradient(to right,var(--color-picker-sv-white),transparent);forced-color-adjust:none}.ea-color-picker__sv-area-val{position:absolute;inset:0;background:linear-gradient(to top,var(--color-picker-sv-black),transparent);forced-color-adjust:none}.ea-color-picker__sv-pointer{position:absolute;z-index:1;width:.875em;height:.875em;border:2px solid var(--color-neutral-0);border-radius:var(--radius-full);box-shadow:0 0 0 1px var(--color-picker-thumb-halo);pointer-events:none;transform:translate(-50%,-50%)}.ea-color-picker__sv-status{position:absolute;overflow:hidden;clip:rect(0,0,0,0);clip-path:inset(50%);width:1px;height:1px;padding:0;margin:-1px;white-space:nowrap;border:0}.ea-color-picker__slider-row{display:flex;align-items:center;gap:.5em}.ea-color-picker__strip-stack{display:flex;flex-direction:column;flex:1;gap:.5em}.ea-color-picker__strip{position:relative;width:100%;height:.75em;border-radius:var(--radius-full);cursor:pointer;forced-color-adjust:none;touch-action:none}.ea-color-picker__strip:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-color-picker__strip:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__strip--hue{background:linear-gradient(to right,var(--color-picker-hue-red) 0%,var(--color-picker-hue-yellow) 17%,var(--color-picker-hue-green) 33%,var(--color-picker-hue-cyan) 50%,var(--color-picker-hue-blue) 67%,var(--color-picker-hue-magenta) 83%,var(--color-picker-hue-red) 100%)}.ea-color-picker__strip--alpha{background-color:var(--color-bg-base);background-image:linear-gradient(to right,transparent 0%,var(--ea-color-picker-alpha-base, currentcolor) 100%),linear-gradient(45deg,var(--color-neutral-200) 25%,transparent 25%),linear-gradient(-45deg,var(--color-neutral-200) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,var(--color-neutral-200) 75%),linear-gradient(-45deg,transparent 75%,var(--color-neutral-200) 75%);background-size:100% 100%,8px 8px,8px 8px,8px 8px,8px 8px;background-position:0 0,0 0,0 4px,4px -4px,-4px 0}.ea-color-picker__strip-thumb{position:absolute;top:50%;width:.875em;height:.875em;border:2px solid var(--color-neutral-0);border-radius:var(--radius-full);box-shadow:0 0 0 1px var(--color-picker-thumb-halo);pointer-events:none;transform:translate(-50%,-50%)}.ea-color-picker__inputs{display:flex;align-items:end;gap:.25em}.ea-color-picker__input-group{display:flex;flex:1;flex-direction:column;gap:.25em;min-width:0;text-align:center}.ea-color-picker__input-group--hex{flex:1}.ea-color-picker__format-toggle{flex-shrink:0;min-width:5.2em;padding:.4em .8em;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-sm);background-color:var(--color-bg-base);font-family:var(--font-family-sans);font-size:.625em;font-weight:var(--font-weight-medium);letter-spacing:.04em;color:var(--color-text-secondary);cursor:pointer;transition:var(--transition-colors)}.ea-color-picker__format-toggle:hover{background-color:var(--color-state-hover);color:var(--color-text-primary)}.ea-color-picker__format-toggle:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-color-picker__format-toggle:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__input-label{font-size:.625em;font-weight:var(--font-weight-medium);text-transform:uppercase;letter-spacing:.04em;color:var(--color-text-tertiary)}.ea-color-picker__input{width:100%;min-width:0;padding:.375em .5em;background-color:var(--color-bg-base);border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-sm);font-family:var(--font-family-mono);font-size:.75em;text-align:center;color:var(--color-text-primary)}.ea-color-picker__input:focus-visible{outline:none;border-color:var(--color-border-focus);box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-color-picker__input:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__input--num{appearance:textfield}.ea-color-picker__input--num::-webkit-outer-spin-button,.ea-color-picker__input--num::-webkit-inner-spin-button{appearance:none;margin:0}.ea-color-picker__tools{display:flex;justify-content:flex-start}.ea-color-picker__tool-btn{display:inline-flex;align-items:center;gap:.5em;padding:.375em .75em;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-sm);background-color:var(--color-bg-base);font-family:var(--font-family-sans);font-size:.75em;color:var(--color-text-secondary);cursor:pointer;transition:var(--transition-colors)}.ea-color-picker__tool-btn:hover{background-color:var(--color-state-hover);color:var(--color-text-primary)}.ea-color-picker__tool-btn:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-color-picker__tool-btn:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__tool-btn ea-icon-droplet{width:.875em;height:.875em}.ea-color-picker__presets{display:flex;flex-direction:column;gap:.375em;padding-top:.5em;border-top:var(--border-width-thin) solid var(--color-border-default)}.ea-color-picker__presets-label{font-size:.625em;font-weight:var(--font-weight-medium);text-transform:uppercase;letter-spacing:.04em;color:var(--color-text-tertiary)}.ea-color-picker__presets-grid{display:grid;grid-template-columns:repeat(10,1fr);gap:.25em}.ea-color-picker__preset{width:100%;aspect-ratio:1;padding:0;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-sm);cursor:pointer;forced-color-adjust:none;transition:transform var(--duration-fast) var(--ease-out)}.ea-color-picker__preset:hover{transform:scale(1.1)}.ea-color-picker__preset:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-color-picker__preset:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__preset[aria-selected=true]{box-shadow:0 0 0 2px var(--color-brand-default)}\n"],
|
|
11459
12596
|
dependencies: [
|
|
11460
12597
|
{
|
|
11461
12598
|
kind: "component",
|
|
@@ -11547,7 +12684,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
11547
12684
|
multi: true
|
|
11548
12685
|
}],
|
|
11549
12686
|
template: "<div class=\"ea-color-picker-field ea-color-picker-field--{{ size() }}\">\n @if (label(); as labelText) {\n <ea-field-label\n [text]=\"labelText\"\n [icon]=\"labelIcon()\"\n [forId]=\"id()\"\n [labelId]=\"id() + '-label'\"\n [required]=\"required()\" />\n }\n\n <div class=\"ea-color-picker\">\n <div\n class=\"ea-color-picker__trigger-wrapper\"\n [ngClass]=\"wrapperClasses()\">\n <button\n #triggerEl\n type=\"button\"\n class=\"ea-color-picker__trigger\"\n [ngClass]=\"triggerClasses()\"\n [id]=\"id()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-labelledby]=\"triggerLabelledBy()\"\n [attr.aria-controls]=\"isOpen() ? popoverId() : null\"\n [attr.aria-required]=\"required() || null\"\n [attr.aria-invalid]=\"hasError() || null\"\n [attr.aria-describedby]=\"\n showError() ? id() + '-error' : showHint() ? id() + '-hint' : null\n \"\n (click)=\"toggle()\"\n (keydown)=\"onTriggerKeydown($event)\">\n <span\n class=\"ea-color-picker__swatch\"\n aria-hidden=\"true\">\n <span\n class=\"ea-color-picker__swatch-fill\"\n [style.--_ea-swatch-color]=\"value() ? displayColor() : null\">\n </span>\n </span>\n @if (!compact()) {\n <span\n class=\"ea-color-picker__trigger-value\"\n [class.ea-color-picker__trigger-value--placeholder]=\"!displayValue()\">\n <bdi>{{ displayValue() || resolvedPlaceholder() }}</bdi>\n </span>\n }\n </button>\n @if (clearable() && !compact() && value() && !isDisabled() && !readonly()) {\n <button\n type=\"button\"\n class=\"ea-color-picker__clear\"\n [attr.aria-label]=\"i18n.messages().colorPicker.clear\"\n (click)=\"clear($event)\">\n <ea-icon-x\n class=\"ea-color-picker__clear-icon\"\n aria-hidden=\"true\" />\n </button>\n }\n </div>\n\n <ea-popover\n [anchor]=\"triggerEl\"\n [open]=\"isOpen()\"\n [surfaceId]=\"popoverId()\"\n placement=\"bottom-start\"\n role=\"dialog\"\n [aria-label]=\"i18n.messages().colorPicker.dialogLabel\"\n [trapFocus]=\"true\"\n [closeOnEscape]=\"false\"\n scrollBehavior=\"close\"\n (closeRequested)=\"onPopoverCloseRequested()\">\n <div\n class=\"ea-color-picker__popover\"\n [ngClass]=\"popoverClasses()\"\n (keydown)=\"onPopoverKeydown($event)\">\n <div\n #svAreaEl\n class=\"ea-color-picker__sv-area\"\n role=\"slider\"\n tabindex=\"0\"\n [attr.aria-label]=\"i18n.messages().colorPicker.saturationAndValue\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n [attr.aria-valuenow]=\"satPercent()\"\n [attr.aria-valuetext]=\"\n i18n\n .messages()\n .colorPicker.saturationAndValueStatus(satPercent(), valPercent())\n \"\n [style.background-color]=\"hueColor()\"\n (pointerdown)=\"onSvPointerDown($event)\"\n (pointermove)=\"onSvPointerMove($event)\"\n (pointerup)=\"onSvPointerUp($event)\"\n (pointercancel)=\"onSvPointerUp($event)\"\n (keydown)=\"onSvKeydown($event)\">\n <div class=\"ea-color-picker__sv-area-sat\"></div>\n <div class=\"ea-color-picker__sv-area-val\"></div>\n <div\n class=\"ea-color-picker__sv-pointer\"\n [style.background-color]=\"opaqueColor()\"\n [style.left]=\"svPointerLeft()\"\n [style.top]=\"svPointerTop()\">\n </div>\n </div>\n\n <div\n class=\"ea-color-picker__sv-status\"\n aria-live=\"polite\">\n {{\n i18n\n .messages()\n .colorPicker.saturationAndValueStatus(satPercent(), valPercent())\n }}\n </div>\n\n <div class=\"ea-color-picker__sliders\">\n <div class=\"ea-color-picker__slider-row\">\n <span\n class=\"ea-color-picker__swatch ea-color-picker__swatch--lg\"\n aria-hidden=\"true\">\n <span\n class=\"ea-color-picker__swatch-fill\"\n [style.--_ea-swatch-color]=\"displayColor()\">\n </span>\n </span>\n <div class=\"ea-color-picker__strip-stack\">\n <div\n #hueTrackEl\n class=\"ea-color-picker__strip ea-color-picker__strip--hue\"\n role=\"slider\"\n tabindex=\"0\"\n [attr.aria-label]=\"i18n.messages().colorPicker.hue\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"360\"\n [attr.aria-valuenow]=\"hueRounded()\"\n (pointerdown)=\"onHuePointerDown($event)\"\n (pointermove)=\"onHuePointerMove($event)\"\n (pointerup)=\"onHuePointerUp($event)\"\n (pointercancel)=\"onHuePointerUp($event)\"\n (keydown)=\"onHueKeydown($event)\">\n <div\n class=\"ea-color-picker__strip-thumb\"\n [style.left]=\"huePointerLeft()\">\n </div>\n </div>\n @if (showAlpha()) {\n <div\n #alphaTrackEl\n class=\"ea-color-picker__strip ea-color-picker__strip--alpha\"\n role=\"slider\"\n tabindex=\"0\"\n [attr.aria-label]=\"i18n.messages().colorPicker.alpha\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"100\"\n [attr.aria-valuenow]=\"alphaPercentRounded()\"\n [attr.aria-valuetext]=\"alphaPercentRounded() + '%'\"\n [style.--ea-color-picker-alpha-base]=\"opaqueColor()\"\n (pointerdown)=\"onAlphaPointerDown($event)\"\n (pointermove)=\"onAlphaPointerMove($event)\"\n (pointerup)=\"onAlphaPointerUp($event)\"\n (pointercancel)=\"onAlphaPointerUp($event)\"\n (keydown)=\"onAlphaKeydown($event)\">\n <div\n class=\"ea-color-picker__strip-thumb\"\n [style.left]=\"alphaPointerLeft()\">\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n\n <div\n class=\"ea-color-picker__inputs\"\n [class.ea-color-picker__inputs--hex]=\"activeFormat() === 'hex'\">\n @switch (activeFormat()) {\n @case ('hex') {\n <label\n class=\"ea-color-picker__input-group ea-color-picker__input-group--hex\">\n <span class=\"ea-color-picker__input-label\">HEX</span>\n <input\n class=\"ea-color-picker__input\"\n type=\"text\"\n dir=\"auto\"\n spellcheck=\"false\"\n autocomplete=\"off\"\n maxlength=\"9\"\n [value]=\"hexInputValue()\"\n (input)=\"onHexInput($event)\"\n (blur)=\"onHexBlur()\" />\n </label>\n }\n @case ('rgb') {\n <label class=\"ea-color-picker__input-group\">\n <span class=\"ea-color-picker__input-label\">R</span>\n <input\n class=\"ea-color-picker__input ea-color-picker__input--num\"\n type=\"text\"\n inputmode=\"numeric\"\n pattern=\"\\d*\"\n maxlength=\"3\"\n [value]=\"rgb().r\"\n (input)=\"onRgbInput('r', $event)\" />\n </label>\n <label class=\"ea-color-picker__input-group\">\n <span class=\"ea-color-picker__input-label\">G</span>\n <input\n class=\"ea-color-picker__input ea-color-picker__input--num\"\n type=\"text\"\n inputmode=\"numeric\"\n pattern=\"\\d*\"\n maxlength=\"3\"\n [value]=\"rgb().g\"\n (input)=\"onRgbInput('g', $event)\" />\n </label>\n <label class=\"ea-color-picker__input-group\">\n <span class=\"ea-color-picker__input-label\">B</span>\n <input\n class=\"ea-color-picker__input ea-color-picker__input--num\"\n type=\"text\"\n inputmode=\"numeric\"\n pattern=\"\\d*\"\n maxlength=\"3\"\n [value]=\"rgb().b\"\n (input)=\"onRgbInput('b', $event)\" />\n </label>\n @if (showAlpha()) {\n <label class=\"ea-color-picker__input-group\">\n <span class=\"ea-color-picker__input-label\">A</span>\n <input\n class=\"ea-color-picker__input ea-color-picker__input--num\"\n type=\"text\"\n inputmode=\"numeric\"\n pattern=\"\\d*\"\n maxlength=\"3\"\n [value]=\"alphaPercentRounded()\"\n (input)=\"onAlphaInput($event)\" />\n </label>\n }\n }\n @case ('hsl') {\n <label class=\"ea-color-picker__input-group\">\n <span class=\"ea-color-picker__input-label\">H</span>\n <input\n class=\"ea-color-picker__input ea-color-picker__input--num\"\n type=\"text\"\n inputmode=\"numeric\"\n pattern=\"\\d*\"\n maxlength=\"3\"\n [value]=\"hslDisplay().h\"\n (input)=\"onHslInput('h', $event)\" />\n </label>\n <label class=\"ea-color-picker__input-group\">\n <span class=\"ea-color-picker__input-label\">S</span>\n <input\n class=\"ea-color-picker__input ea-color-picker__input--num\"\n type=\"text\"\n inputmode=\"numeric\"\n pattern=\"\\d*\"\n maxlength=\"3\"\n [value]=\"hslDisplay().s\"\n (input)=\"onHslInput('s', $event)\" />\n </label>\n <label class=\"ea-color-picker__input-group\">\n <span class=\"ea-color-picker__input-label\">L</span>\n <input\n class=\"ea-color-picker__input ea-color-picker__input--num\"\n type=\"text\"\n inputmode=\"numeric\"\n pattern=\"\\d*\"\n maxlength=\"3\"\n [value]=\"hslDisplay().l\"\n (input)=\"onHslInput('l', $event)\" />\n </label>\n @if (showAlpha()) {\n <label class=\"ea-color-picker__input-group\">\n <span class=\"ea-color-picker__input-label\">A</span>\n <input\n class=\"ea-color-picker__input ea-color-picker__input--num\"\n type=\"text\"\n inputmode=\"numeric\"\n pattern=\"\\d*\"\n maxlength=\"3\"\n [value]=\"alphaPercentRounded()\"\n (input)=\"onAlphaInput($event)\" />\n </label>\n }\n }\n }\n @if (canToggleFormat()) {\n <button\n type=\"button\"\n class=\"ea-color-picker__format-toggle\"\n [attr.aria-label]=\"formatToggleLabel()\"\n (click)=\"cycleInputMode()\">\n {{ formatLabel() }}\n </button>\n }\n </div>\n\n @if (hasEyeDropper()) {\n <div class=\"ea-color-picker__tools\">\n <button\n type=\"button\"\n class=\"ea-color-picker__tool-btn\"\n [attr.aria-label]=\"i18n.messages().colorPicker.eyedropper\"\n (click)=\"pickFromScreen()\">\n <ea-icon-droplet aria-hidden=\"true\" />\n <span>{{ i18n.messages().colorPicker.eyedropper }}</span>\n </button>\n </div>\n }\n\n @if (presets().length > 0) {\n <div class=\"ea-color-picker__presets\">\n <span\n class=\"ea-color-picker__presets-label\"\n [id]=\"id() + '-presets-label'\">\n {{ i18n.messages().colorPicker.presets }}\n </span>\n <div\n class=\"ea-color-picker__presets-grid\"\n role=\"group\"\n [attr.aria-labelledby]=\"id() + '-presets-label'\">\n @for (preset of presets(); track preset) {\n <button\n type=\"button\"\n class=\"ea-color-picker__preset\"\n [attr.aria-label]=\"preset\"\n [attr.aria-pressed]=\"activePresets().has(preset)\"\n [style.background-color]=\"preset\"\n (click)=\"selectPreset(preset)\">\n </button>\n }\n </div>\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",
|
|
11550
|
-
styles: [".ea-color-picker-field{display:flex;flex-direction:column;gap:.375em;--ea-field-label-size: .875em;--ea-field-messages-size: .8125em}.ea-color-picker-field--2xs{font-size:var(--font-size-2xs)}.ea-color-picker-field--xs{font-size:var(--font-size-xs)}.ea-color-picker-field--sm{font-size:var(--font-size-sm)}.ea-color-picker-field--md{font-size:var(--font-size-md)}.ea-color-picker-field--lg{font-size:var(--font-size-lg)}.ea-color-picker-field--xl{font-size:var(--font-size-xl)}.ea-color-picker,.ea-color-picker__trigger-wrapper{position:relative}.ea-color-picker__trigger{display:flex;align-items:center;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-color-picker__trigger:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-color-picker__trigger:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__trigger--open{border-color:var(--color-border-focus);box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-color-picker__trigger--open{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__trigger--error{border-color:var(--color-error-default)}.ea-color-picker__trigger--error.ea-color-picker__trigger--open{box-shadow:var(--shadow-focus-ring-error)}@media(forced-colors:active){.ea-color-picker__trigger--error.ea-color-picker__trigger--open{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__trigger--compact{width:auto;min-height:0;padding:.375em}.ea-color-picker__trigger--compact .ea-color-picker__swatch{width:1.5em;height:1.5em}.ea-color-picker__trigger--disabled{background-color:var(--color-bg-muted);opacity:.6;cursor:default}.ea-color-picker__trigger--readonly{cursor:default}.ea-color-picker__trigger--readonly:focus-visible{border-color:var(--color-border-focus);box-shadow:none}@media(forced-colors:active){.ea-color-picker__trigger--readonly:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__trigger-value{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--font-family-mono);font-size:.85em}.ea-color-picker__trigger-value--placeholder{color:var(--color-text-tertiary);font-family:var(--font-family-sans);font-size:1em}.ea-color-picker__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-color-picker__clear>*{font-size:1.25em}.ea-color-picker__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-color-picker__clear:hover{background-color:var(--color-state-hover);color:var(--color-text-primary)}.ea-color-picker__clear:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-color-picker__clear:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__clear:disabled{cursor:default;opacity:.5}.ea-color-picker__clear{z-index:1;position:absolute;top:50%;inset-inline-end:var(--space-2);transform:translateY(-50%)}.ea-color-picker__swatch{position:relative;overflow:hidden;flex-shrink:0;width:1.125em;height:1.125em;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-sm);background-color:var(--color-bg-base);forced-color-adjust:none}.ea-color-picker__swatch--lg{width:2.5em;height:2.5em;border-radius:var(--radius-md)}.ea-color-picker__swatch-fill{position:absolute;inset:0;display:block;background-color:var(--color-bg-base);background-image:linear-gradient(var(--_ea-swatch-color, transparent),var(--_ea-swatch-color, transparent)),linear-gradient(45deg,var(--color-neutral-200) 25%,transparent 25%),linear-gradient(-45deg,var(--color-neutral-200) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,var(--color-neutral-200) 75%),linear-gradient(-45deg,transparent 75%,var(--color-neutral-200) 75%);background-size:100% 100%,8px 8px,8px 8px,8px 8px,8px 8px;background-position:0 0,0 0,0 4px,4px -4px,-4px 0;forced-color-adjust:none}.ea-color-picker__popover{display:flex;flex-direction:column;gap:.75em;width:17.5em;padding:.75em;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);background-color:var(--ea-color-picker-popover-background-color, var(--color-bg-elevated))}@media(forced-colors:active){.ea-color-picker__popover{border:1px solid CanvasText}}.ea-color-picker__popover--2xs{font-size:var(--font-size-2xs)}.ea-color-picker__popover--xs{font-size:var(--font-size-xs)}.ea-color-picker__popover--sm{font-size:var(--font-size-sm)}.ea-color-picker__popover--md{font-size:var(--font-size-md)}.ea-color-picker__popover--lg{font-size:var(--font-size-lg)}.ea-color-picker__popover--xl{font-size:var(--font-size-xl)}.ea-color-picker__sv-area{position:relative;overflow:hidden;width:100%;height:10em;border-radius:var(--radius-sm);cursor:crosshair;forced-color-adjust:none;touch-action:none}.ea-color-picker__sv-area:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-color-picker__sv-area:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__sv-area-sat{position:absolute;inset:0;background:linear-gradient(to right,var(--color-picker-sv-white),transparent);forced-color-adjust:none}.ea-color-picker__sv-area-val{position:absolute;inset:0;background:linear-gradient(to top,var(--color-picker-sv-black),transparent);forced-color-adjust:none}.ea-color-picker__sv-pointer{position:absolute;z-index:1;width:.875em;height:.875em;border:2px solid var(--color-neutral-0);border-radius:var(--radius-full);box-shadow:0 0 0 1px var(--color-picker-thumb-halo);pointer-events:none;transform:translate(-50%,-50%)}.ea-color-picker__sv-status{position:absolute;overflow:hidden;clip:rect(0,0,0,0);clip-path:inset(50%);width:1px;height:1px;padding:0;margin:-1px;white-space:nowrap;border:0}.ea-color-picker__slider-row{display:flex;align-items:center;gap:.5em}.ea-color-picker__strip-stack{display:flex;flex-direction:column;flex:1;gap:.5em}.ea-color-picker__strip{position:relative;width:100%;height:.75em;border-radius:var(--radius-full);cursor:pointer;forced-color-adjust:none;touch-action:none}.ea-color-picker__strip:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-color-picker__strip:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__strip--hue{background:linear-gradient(to right,var(--color-picker-hue-red) 0%,var(--color-picker-hue-yellow) 17%,var(--color-picker-hue-green) 33%,var(--color-picker-hue-cyan) 50%,var(--color-picker-hue-blue) 67%,var(--color-picker-hue-magenta) 83%,var(--color-picker-hue-red) 100%)}.ea-color-picker__strip--alpha{background-color:var(--color-bg-base);background-image:linear-gradient(to right,transparent 0%,var(--ea-color-picker-alpha-base, currentcolor) 100%),linear-gradient(45deg,var(--color-neutral-200) 25%,transparent 25%),linear-gradient(-45deg,var(--color-neutral-200) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,var(--color-neutral-200) 75%),linear-gradient(-45deg,transparent 75%,var(--color-neutral-200) 75%);background-size:100% 100%,8px 8px,8px 8px,8px 8px,8px 8px;background-position:0 0,0 0,0 4px,4px -4px,-4px 0}.ea-color-picker__strip-thumb{position:absolute;top:50%;width:.875em;height:.875em;border:2px solid var(--color-neutral-0);border-radius:var(--radius-full);box-shadow:0 0 0 1px var(--color-picker-thumb-halo);pointer-events:none;transform:translate(-50%,-50%)}.ea-color-picker__inputs{display:flex;align-items:end;gap:.25em}.ea-color-picker__input-group{display:flex;flex:1;flex-direction:column;gap:.25em;min-width:0;text-align:center}.ea-color-picker__input-group--hex{flex:1}.ea-color-picker__format-toggle{flex-shrink:0;min-width:5.2em;padding:.4em .8em;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-sm);background-color:var(--color-bg-base);font-family:var(--font-family-sans);font-size:.625em;font-weight:var(--font-weight-medium);letter-spacing:.04em;color:var(--color-text-secondary);cursor:pointer;transition:var(--transition-colors)}.ea-color-picker__format-toggle:hover{background-color:var(--color-state-hover);color:var(--color-text-primary)}.ea-color-picker__format-toggle:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-color-picker__format-toggle:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__input-label{font-size:.625em;font-weight:var(--font-weight-medium);text-transform:uppercase;letter-spacing:.04em;color:var(--color-text-tertiary)}.ea-color-picker__input{width:100%;min-width:0;padding:.375em .5em;background-color:var(--color-bg-base);border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-sm);font-family:var(--font-family-mono);font-size:.75em;text-align:center;color:var(--color-text-primary)}.ea-color-picker__input:focus-visible{outline:none;border-color:var(--color-border-focus);box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-color-picker__input:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__input--num{appearance:textfield}.ea-color-picker__input--num::-webkit-outer-spin-button,.ea-color-picker__input--num::-webkit-inner-spin-button{appearance:none;margin:0}.ea-color-picker__tools{display:flex;justify-content:flex-start}.ea-color-picker__tool-btn{display:inline-flex;align-items:center;gap:.5em;padding:.375em .75em;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-sm);background-color:var(--color-bg-base);font-family:var(--font-family-sans);font-size:.75em;color:var(--color-text-secondary);cursor:pointer;transition:var(--transition-colors)}.ea-color-picker__tool-btn:hover{background-color:var(--color-state-hover);color:var(--color-text-primary)}.ea-color-picker__tool-btn:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-color-picker__tool-btn:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__tool-btn ea-icon-droplet{width:.875em;height:.875em}.ea-color-picker__presets{display:flex;flex-direction:column;gap:.375em;padding-top:.5em;border-top:var(--border-width-thin) solid var(--color-border-default)}.ea-color-picker__presets-label{font-size:.625em;font-weight:var(--font-weight-medium);text-transform:uppercase;letter-spacing:.04em;color:var(--color-text-tertiary)}.ea-color-picker__presets-grid{display:grid;grid-template-columns:repeat(10,1fr);gap:.25em}.ea-color-picker__preset{width:100%;aspect-ratio:1;padding:0;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-sm);cursor:pointer;forced-color-adjust:none;transition:transform var(--duration-fast) var(--ease-out)}.ea-color-picker__preset:hover{transform:scale(1.1)}.ea-color-picker__preset:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-color-picker__preset:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__preset[aria-selected=true]{box-shadow:0 0 0 2px var(--color-brand-default)}\n"]
|
|
12687
|
+
styles: [".ea-color-picker-field{display:flex;flex-direction:column;gap:.375em;--ea-field-label-size: .875em;--ea-field-messages-size: .8125em}.ea-color-picker-field--2xs{font-size:var(--font-size-2xs)}.ea-color-picker-field--xs{font-size:var(--font-size-xs)}.ea-color-picker-field--sm{font-size:var(--font-size-sm)}.ea-color-picker-field--md{font-size:var(--font-size-md)}.ea-color-picker-field--lg{font-size:var(--font-size-lg)}.ea-color-picker-field--xl{font-size:var(--font-size-xl)}.ea-color-picker,.ea-color-picker__trigger-wrapper{position:relative}.ea-color-picker__trigger{display:flex;align-items:center;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-color-picker__trigger:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-color-picker__trigger:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__trigger--open{border-color:var(--color-border-focus);box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-color-picker__trigger--open{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__trigger--error{border-color:var(--color-error-default)}.ea-color-picker__trigger--error.ea-color-picker__trigger--open{box-shadow:var(--shadow-focus-ring-error)}@media(forced-colors:active){.ea-color-picker__trigger--error.ea-color-picker__trigger--open{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__trigger--compact{width:auto;min-height:0;padding:.375em}.ea-color-picker__trigger--compact .ea-color-picker__swatch{width:1.5em;height:1.5em}.ea-color-picker__trigger--disabled{background-color:var(--color-bg-muted);opacity:.6;cursor:default}.ea-color-picker__trigger--readonly{cursor:default}.ea-color-picker__trigger--readonly:focus-visible{border-color:var(--color-border-focus);box-shadow:none}@media(forced-colors:active){.ea-color-picker__trigger--readonly:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__trigger-value{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--font-family-mono);font-size:.875em}.ea-color-picker__trigger-value--placeholder{color:var(--color-text-tertiary);font-family:var(--font-family-sans);font-size:1em}.ea-color-picker__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-color-picker__clear>*{font-size:1.25em}.ea-color-picker__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-color-picker__clear:hover{background-color:var(--color-state-hover);color:var(--color-text-primary)}.ea-color-picker__clear:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-color-picker__clear:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__clear:disabled{cursor:default;opacity:.5}.ea-color-picker__clear{z-index:1;position:absolute;top:50%;inset-inline-end:var(--space-2);transform:translateY(-50%)}.ea-color-picker__swatch{position:relative;overflow:hidden;flex-shrink:0;width:1.125em;height:1.125em;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-sm);background-color:var(--color-bg-base);forced-color-adjust:none}.ea-color-picker__swatch--lg{width:2.5em;height:2.5em;border-radius:var(--radius-md)}.ea-color-picker__swatch-fill{position:absolute;inset:0;display:block;background-color:var(--color-bg-base);background-image:linear-gradient(var(--_ea-swatch-color, transparent),var(--_ea-swatch-color, transparent)),linear-gradient(45deg,var(--color-neutral-200) 25%,transparent 25%),linear-gradient(-45deg,var(--color-neutral-200) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,var(--color-neutral-200) 75%),linear-gradient(-45deg,transparent 75%,var(--color-neutral-200) 75%);background-size:100% 100%,8px 8px,8px 8px,8px 8px,8px 8px;background-position:0 0,0 0,0 4px,4px -4px,-4px 0;forced-color-adjust:none}.ea-color-picker__popover{display:flex;flex-direction:column;gap:.75em;width:17.5em;padding:.75em;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);background-color:var(--ea-color-picker-popover-background-color, var(--color-bg-elevated))}@media(forced-colors:active){.ea-color-picker__popover{border:1px solid CanvasText}}.ea-color-picker__popover--2xs{font-size:var(--font-size-2xs)}.ea-color-picker__popover--xs{font-size:var(--font-size-xs)}.ea-color-picker__popover--sm{font-size:var(--font-size-sm)}.ea-color-picker__popover--md{font-size:var(--font-size-md)}.ea-color-picker__popover--lg{font-size:var(--font-size-lg)}.ea-color-picker__popover--xl{font-size:var(--font-size-xl)}.ea-color-picker__sv-area{position:relative;overflow:hidden;width:100%;height:10em;border-radius:var(--radius-sm);cursor:crosshair;forced-color-adjust:none;touch-action:none}.ea-color-picker__sv-area:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-color-picker__sv-area:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__sv-area-sat{position:absolute;inset:0;background:linear-gradient(to right,var(--color-picker-sv-white),transparent);forced-color-adjust:none}.ea-color-picker__sv-area-val{position:absolute;inset:0;background:linear-gradient(to top,var(--color-picker-sv-black),transparent);forced-color-adjust:none}.ea-color-picker__sv-pointer{position:absolute;z-index:1;width:.875em;height:.875em;border:2px solid var(--color-neutral-0);border-radius:var(--radius-full);box-shadow:0 0 0 1px var(--color-picker-thumb-halo);pointer-events:none;transform:translate(-50%,-50%)}.ea-color-picker__sv-status{position:absolute;overflow:hidden;clip:rect(0,0,0,0);clip-path:inset(50%);width:1px;height:1px;padding:0;margin:-1px;white-space:nowrap;border:0}.ea-color-picker__slider-row{display:flex;align-items:center;gap:.5em}.ea-color-picker__strip-stack{display:flex;flex-direction:column;flex:1;gap:.5em}.ea-color-picker__strip{position:relative;width:100%;height:.75em;border-radius:var(--radius-full);cursor:pointer;forced-color-adjust:none;touch-action:none}.ea-color-picker__strip:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-color-picker__strip:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__strip--hue{background:linear-gradient(to right,var(--color-picker-hue-red) 0%,var(--color-picker-hue-yellow) 17%,var(--color-picker-hue-green) 33%,var(--color-picker-hue-cyan) 50%,var(--color-picker-hue-blue) 67%,var(--color-picker-hue-magenta) 83%,var(--color-picker-hue-red) 100%)}.ea-color-picker__strip--alpha{background-color:var(--color-bg-base);background-image:linear-gradient(to right,transparent 0%,var(--ea-color-picker-alpha-base, currentcolor) 100%),linear-gradient(45deg,var(--color-neutral-200) 25%,transparent 25%),linear-gradient(-45deg,var(--color-neutral-200) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,var(--color-neutral-200) 75%),linear-gradient(-45deg,transparent 75%,var(--color-neutral-200) 75%);background-size:100% 100%,8px 8px,8px 8px,8px 8px,8px 8px;background-position:0 0,0 0,0 4px,4px -4px,-4px 0}.ea-color-picker__strip-thumb{position:absolute;top:50%;width:.875em;height:.875em;border:2px solid var(--color-neutral-0);border-radius:var(--radius-full);box-shadow:0 0 0 1px var(--color-picker-thumb-halo);pointer-events:none;transform:translate(-50%,-50%)}.ea-color-picker__inputs{display:flex;align-items:end;gap:.25em}.ea-color-picker__input-group{display:flex;flex:1;flex-direction:column;gap:.25em;min-width:0;text-align:center}.ea-color-picker__input-group--hex{flex:1}.ea-color-picker__format-toggle{flex-shrink:0;min-width:5.2em;padding:.4em .8em;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-sm);background-color:var(--color-bg-base);font-family:var(--font-family-sans);font-size:.625em;font-weight:var(--font-weight-medium);letter-spacing:.04em;color:var(--color-text-secondary);cursor:pointer;transition:var(--transition-colors)}.ea-color-picker__format-toggle:hover{background-color:var(--color-state-hover);color:var(--color-text-primary)}.ea-color-picker__format-toggle:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-color-picker__format-toggle:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__input-label{font-size:.625em;font-weight:var(--font-weight-medium);text-transform:uppercase;letter-spacing:.04em;color:var(--color-text-tertiary)}.ea-color-picker__input{width:100%;min-width:0;padding:.375em .5em;background-color:var(--color-bg-base);border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-sm);font-family:var(--font-family-mono);font-size:.75em;text-align:center;color:var(--color-text-primary)}.ea-color-picker__input:focus-visible{outline:none;border-color:var(--color-border-focus);box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-color-picker__input:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__input--num{appearance:textfield}.ea-color-picker__input--num::-webkit-outer-spin-button,.ea-color-picker__input--num::-webkit-inner-spin-button{appearance:none;margin:0}.ea-color-picker__tools{display:flex;justify-content:flex-start}.ea-color-picker__tool-btn{display:inline-flex;align-items:center;gap:.5em;padding:.375em .75em;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-sm);background-color:var(--color-bg-base);font-family:var(--font-family-sans);font-size:.75em;color:var(--color-text-secondary);cursor:pointer;transition:var(--transition-colors)}.ea-color-picker__tool-btn:hover{background-color:var(--color-state-hover);color:var(--color-text-primary)}.ea-color-picker__tool-btn:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-color-picker__tool-btn:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__tool-btn ea-icon-droplet{width:.875em;height:.875em}.ea-color-picker__presets{display:flex;flex-direction:column;gap:.375em;padding-top:.5em;border-top:var(--border-width-thin) solid var(--color-border-default)}.ea-color-picker__presets-label{font-size:.625em;font-weight:var(--font-weight-medium);text-transform:uppercase;letter-spacing:.04em;color:var(--color-text-tertiary)}.ea-color-picker__presets-grid{display:grid;grid-template-columns:repeat(10,1fr);gap:.25em}.ea-color-picker__preset{width:100%;aspect-ratio:1;padding:0;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-sm);cursor:pointer;forced-color-adjust:none;transition:transform var(--duration-fast) var(--ease-out)}.ea-color-picker__preset:hover{transform:scale(1.1)}.ea-color-picker__preset:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-color-picker__preset:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-color-picker__preset[aria-selected=true]{box-shadow:0 0 0 2px var(--color-brand-default)}\n"]
|
|
11551
12688
|
}]
|
|
11552
12689
|
}],
|
|
11553
12690
|
propDecorators: {
|
|
@@ -18083,6 +19220,1094 @@ function roundTo(value, digits) {
|
|
|
18083
19220
|
const factor = 10 ** digits;
|
|
18084
19221
|
return (Math.round(value * factor) / factor).toString();
|
|
18085
19222
|
}
|
|
19223
|
+
const EDGE_INSET = 8;
|
|
19224
|
+
const DRAG_THRESHOLD = 4;
|
|
19225
|
+
const WHEEL_LINE_PX = 16;
|
|
19226
|
+
const ZOOM_RATE = .01;
|
|
19227
|
+
function valueBetween(a, b, position, curve) {
|
|
19228
|
+
if (curve === "step") return position < (a.position + b.position) / 2 ? a.value : b.value;
|
|
19229
|
+
return a.value + (b.value - a.value) * (position - a.position) / (b.position - a.position);
|
|
19230
|
+
}
|
|
19231
|
+
function linearPath(points) {
|
|
19232
|
+
return points.map((p, i) => `${i ? "L" : "M"}${p.x},${p.y}`).join("");
|
|
19233
|
+
}
|
|
19234
|
+
function stepPath(points) {
|
|
19235
|
+
let d = `M${points[0].x},${points[0].y}`;
|
|
19236
|
+
for (let i = 1; i < points.length; i++) {
|
|
19237
|
+
const mid = (points[i - 1].x + points[i].x) / 2;
|
|
19238
|
+
d += `H${mid}V${points[i].y}H${points[i].x}`;
|
|
19239
|
+
}
|
|
19240
|
+
return d;
|
|
19241
|
+
}
|
|
19242
|
+
function smoothPath(points) {
|
|
19243
|
+
const n = points.length;
|
|
19244
|
+
if (n < 3) return linearPath(points);
|
|
19245
|
+
const slopes = [];
|
|
19246
|
+
for (let i = 0; i < n - 1; i++) slopes.push((points[i + 1].y - points[i].y) / (points[i + 1].x - points[i].x));
|
|
19247
|
+
const tangents = [slopes[0]];
|
|
19248
|
+
for (let i = 1; i < n - 1; i++) tangents.push(slopes[i - 1] * slopes[i] <= 0 ? 0 : (slopes[i - 1] + slopes[i]) / 2);
|
|
19249
|
+
tangents.push(slopes[n - 2]);
|
|
19250
|
+
for (let i = 0; i < n - 1; i++) {
|
|
19251
|
+
if (slopes[i] === 0) {
|
|
19252
|
+
tangents[i] = 0;
|
|
19253
|
+
tangents[i + 1] = 0;
|
|
19254
|
+
continue;
|
|
19255
|
+
}
|
|
19256
|
+
const a = tangents[i] / slopes[i];
|
|
19257
|
+
const b = tangents[i + 1] / slopes[i];
|
|
19258
|
+
const s = a * a + b * b;
|
|
19259
|
+
if (s > 9) {
|
|
19260
|
+
const k = 3 / Math.sqrt(s);
|
|
19261
|
+
tangents[i] = k * a * slopes[i];
|
|
19262
|
+
tangents[i + 1] = k * b * slopes[i];
|
|
19263
|
+
}
|
|
19264
|
+
}
|
|
19265
|
+
let d = `M${points[0].x},${points[0].y}`;
|
|
19266
|
+
for (let i = 0; i < n - 1; i++) {
|
|
19267
|
+
const p = points[i];
|
|
19268
|
+
const q = points[i + 1];
|
|
19269
|
+
const third = (q.x - p.x) / 3;
|
|
19270
|
+
d += `C${p.x + third},${p.y + tangents[i] * third},${q.x - third},${q.y - tangents[i + 1] * third},${q.x},${q.y}`;
|
|
19271
|
+
}
|
|
19272
|
+
return d;
|
|
19273
|
+
}
|
|
19274
|
+
const CURVES = {
|
|
19275
|
+
linear: linearPath,
|
|
19276
|
+
smooth: smoothPath,
|
|
19277
|
+
step: stepPath
|
|
19278
|
+
};
|
|
19279
|
+
let nextId = 0;
|
|
19280
|
+
var LineChartComponent = class LineChartComponent {
|
|
19281
|
+
i18n = inject(EagamiI18nService);
|
|
19282
|
+
labels = input([], ...ngDevMode ? [{ debugName: "labels" }] : /* istanbul ignore next */ []);
|
|
19283
|
+
series = input([], ...ngDevMode ? [{ debugName: "series" }] : /* istanbul ignore next */ []);
|
|
19284
|
+
xValues = input(null, ...ngDevMode ? [{ debugName: "xValues" }] : /* istanbul ignore next */ []);
|
|
19285
|
+
xTicks = input(null, ...ngDevMode ? [{ debugName: "xTicks" }] : /* istanbul ignore next */ []);
|
|
19286
|
+
visibleXSpan = input(null, ...ngDevMode ? [{ debugName: "visibleXSpan" }] : /* istanbul ignore next */ []);
|
|
19287
|
+
curve = input("linear", ...ngDevMode ? [{ debugName: "curve" }] : /* istanbul ignore next */ []);
|
|
19288
|
+
showArea = input(false, ...ngDevMode ? [{ debugName: "showArea" }] : /* istanbul ignore next */ []);
|
|
19289
|
+
showPoints = input(true, ...ngDevMode ? [{ debugName: "showPoints" }] : /* istanbul ignore next */ []);
|
|
19290
|
+
showGrid = input(true, ...ngDevMode ? [{ debugName: "showGrid" }] : /* istanbul ignore next */ []);
|
|
19291
|
+
showLegend = input(true, ...ngDevMode ? [{ debugName: "showLegend" }] : /* istanbul ignore next */ []);
|
|
19292
|
+
yMin = input(void 0, ...ngDevMode ? [{ debugName: "yMin" }] : /* istanbul ignore next */ []);
|
|
19293
|
+
yMax = input(void 0, ...ngDevMode ? [{ debugName: "yMax" }] : /* istanbul ignore next */ []);
|
|
19294
|
+
xLabelOrientation = input("horizontal", ...ngDevMode ? [{ debugName: "xLabelOrientation" }] : /* istanbul ignore next */ []);
|
|
19295
|
+
showAxisBreak = input(false, ...ngDevMode ? [{ debugName: "showAxisBreak" }] : /* istanbul ignore next */ []);
|
|
19296
|
+
height = input(240, ...ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []);
|
|
19297
|
+
size = input("md", ...ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []);
|
|
19298
|
+
animation = input("draw", ...ngDevMode ? [{ debugName: "animation" }] : /* istanbul ignore next */ []);
|
|
19299
|
+
animationDuration = input(600, ...ngDevMode ? [{ debugName: "animationDuration" }] : /* istanbul ignore next */ []);
|
|
19300
|
+
formatValue = input(null, ...ngDevMode ? [{ debugName: "formatValue" }] : /* istanbul ignore next */ []);
|
|
19301
|
+
ariaLabel = input(void 0, {
|
|
19302
|
+
...ngDevMode ? { debugName: "ariaLabel" } : /* istanbul ignore next */ {},
|
|
19303
|
+
alias: "aria-label"
|
|
19304
|
+
});
|
|
19305
|
+
pointClick = output();
|
|
19306
|
+
activePointChange = output();
|
|
19307
|
+
visibleRangeChange = output();
|
|
19308
|
+
viewport = injectChartViewport(this.size);
|
|
19309
|
+
format = injectChartFormatter(this.formatValue);
|
|
19310
|
+
active = signal(null, ...ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []);
|
|
19311
|
+
clipId = `ea-line-chart-clip-${nextId++}`;
|
|
19312
|
+
breakMaskId = `${this.clipId}-break`;
|
|
19313
|
+
panEnd = linkedSignal(() => {
|
|
19314
|
+
this.xValues();
|
|
19315
|
+
this.series();
|
|
19316
|
+
this.visibleXSpan();
|
|
19317
|
+
return null;
|
|
19318
|
+
}, ...ngDevMode ? [{ debugName: "panEnd" }] : /* istanbul ignore next */ []);
|
|
19319
|
+
zoomSpan = linkedSignal(() => this.visibleXSpan(), ...ngDevMode ? [{ debugName: "zoomSpan" }] : /* istanbul ignore next */ []);
|
|
19320
|
+
gestureSpan = null;
|
|
19321
|
+
panning = signal(false, ...ngDevMode ? [{ debugName: "panning" }] : /* istanbul ignore next */ []);
|
|
19322
|
+
drag = null;
|
|
19323
|
+
suppressClick = false;
|
|
19324
|
+
label = computed(() => this.ariaLabel() || this.i18n.messages().chart.lineChart, ...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
|
|
19325
|
+
count = computed(() => Math.max(this.labels().length, ...this.series().map((s) => s.data.length), 0), ...ngDevMode ? [{ debugName: "count" }] : /* istanbul ignore next */ []);
|
|
19326
|
+
hasData = computed(() => this.series().some((s) => s.data.some((v) => this.isValue(v))), ...ngDevMode ? [{ debugName: "hasData" }] : /* istanbul ignore next */ []);
|
|
19327
|
+
positions = computed(() => {
|
|
19328
|
+
const xValues = this.xValues();
|
|
19329
|
+
return Array.from({ length: this.count() }, (_, i) => xValues ? xValues[i] ?? NaN : i);
|
|
19330
|
+
}, ...ngDevMode ? [{ debugName: "positions" }] : /* istanbul ignore next */ []);
|
|
19331
|
+
domain = computed(() => {
|
|
19332
|
+
const known = [...this.positions(), ...this.xTicks()?.map((t) => t.value) ?? []].filter((p) => isFinite(p));
|
|
19333
|
+
const first = known.length ? Math.min(...known) : 0;
|
|
19334
|
+
const last = known.length ? Math.max(...known) : 0;
|
|
19335
|
+
const span = this.zoomSpan();
|
|
19336
|
+
if (span == null || !(span > 0) || last - first <= span) return {
|
|
19337
|
+
first,
|
|
19338
|
+
last,
|
|
19339
|
+
start: first,
|
|
19340
|
+
end: last,
|
|
19341
|
+
span: null
|
|
19342
|
+
};
|
|
19343
|
+
const end = clamp$1(this.panEnd() ?? last, first + span, last);
|
|
19344
|
+
return {
|
|
19345
|
+
first,
|
|
19346
|
+
last,
|
|
19347
|
+
start: end - span,
|
|
19348
|
+
end,
|
|
19349
|
+
span
|
|
19350
|
+
};
|
|
19351
|
+
}, ...ngDevMode ? [{ debugName: "domain" }] : /* istanbul ignore next */ []);
|
|
19352
|
+
windowed = computed(() => this.domain().span != null, ...ngDevMode ? [{ debugName: "windowed" }] : /* istanbul ignore next */ []);
|
|
19353
|
+
renderPass = computed(() => {
|
|
19354
|
+
this.labels();
|
|
19355
|
+
this.series();
|
|
19356
|
+
this.xValues();
|
|
19357
|
+
this.animation();
|
|
19358
|
+
this.animationDuration();
|
|
19359
|
+
return [{}];
|
|
19360
|
+
}, ...ngDevMode ? [{ debugName: "renderPass" }] : /* istanbul ignore next */ []);
|
|
19361
|
+
hostClasses = computed(() => ({
|
|
19362
|
+
[`ea-line-chart--${this.size()}`]: true,
|
|
19363
|
+
[`ea-line-chart--animate-${this.animation()}`]: true,
|
|
19364
|
+
"ea-line-chart--pannable": this.windowed(),
|
|
19365
|
+
"ea-line-chart--panning": this.panning()
|
|
19366
|
+
}), ...ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []);
|
|
19367
|
+
runs = computed(() => {
|
|
19368
|
+
const positions = this.positions();
|
|
19369
|
+
return this.series().map((s) => {
|
|
19370
|
+
const runs = [];
|
|
19371
|
+
let run = [];
|
|
19372
|
+
positions.forEach((position, index) => {
|
|
19373
|
+
const value = s.data[index];
|
|
19374
|
+
if (!this.isValue(value) || !isFinite(position)) {
|
|
19375
|
+
if (run.length) runs.push(run);
|
|
19376
|
+
run = [];
|
|
19377
|
+
return;
|
|
19378
|
+
}
|
|
19379
|
+
run.push({
|
|
19380
|
+
index,
|
|
19381
|
+
position,
|
|
19382
|
+
value
|
|
19383
|
+
});
|
|
19384
|
+
});
|
|
19385
|
+
if (run.length) runs.push(run);
|
|
19386
|
+
return runs;
|
|
19387
|
+
});
|
|
19388
|
+
}, ...ngDevMode ? [{ debugName: "runs" }] : /* istanbul ignore next */ []);
|
|
19389
|
+
visibleValues = computed(() => {
|
|
19390
|
+
const runs = this.runs().flat();
|
|
19391
|
+
const domain = this.domain();
|
|
19392
|
+
if (domain.span == null) return runs.flatMap((run) => run.map((p) => p.value));
|
|
19393
|
+
const curve = this.curve();
|
|
19394
|
+
const values = [];
|
|
19395
|
+
for (const run of runs) run.forEach((point, i) => {
|
|
19396
|
+
if (point.position >= domain.start && point.position <= domain.end) values.push(point.value);
|
|
19397
|
+
const next = run[i + 1];
|
|
19398
|
+
for (const edge of next ? [domain.start, domain.end] : []) if (point.position < edge && next.position > edge) values.push(valueBetween(point, next, edge, curve));
|
|
19399
|
+
});
|
|
19400
|
+
return values;
|
|
19401
|
+
}, ...ngDevMode ? [{ debugName: "visibleValues" }] : /* istanbul ignore next */ []);
|
|
19402
|
+
layout = computed(() => {
|
|
19403
|
+
const width = this.viewport.width();
|
|
19404
|
+
const height = this.height();
|
|
19405
|
+
const axisPx = this.viewport.fontSize() * .75;
|
|
19406
|
+
const orientation = this.xLabelOrientation();
|
|
19407
|
+
const fixedAngle = orientation === "auto" ? 0 : CHART_LABEL_ANGLES[orientation];
|
|
19408
|
+
const plot = this.plotArea(width, height, axisPx, fixedAngle);
|
|
19409
|
+
const angle = orientation === "auto" ? [
|
|
19410
|
+
0,
|
|
19411
|
+
45,
|
|
19412
|
+
90
|
|
19413
|
+
].find((a) => this.labelsFit(plot.candidates, a, axisPx)) ?? 90 : fixedAngle;
|
|
19414
|
+
const { plotHeight, min, max, tickTexts, left, plotWidth, x, xLabels } = angle === fixedAngle ? plot : this.plotArea(width, height, axisPx, angle);
|
|
19415
|
+
const top = axisPx;
|
|
19416
|
+
const y = (v) => top + (1 - (clamp$1(v, min, max) - min) / (max - min || 1)) * plotHeight;
|
|
19417
|
+
const baselineY = y(clamp$1(0, min, max));
|
|
19418
|
+
const breakY = this.showAxisBreak() && min > 0 ? top + plotHeight - axisPx * BREAK_HEIGHT : null;
|
|
19419
|
+
const axisY = top + plotHeight;
|
|
19420
|
+
const curve = CURVES[this.curve()];
|
|
19421
|
+
const series = this.series().map((s, seriesIndex) => {
|
|
19422
|
+
const runs = this.runs()[seriesIndex].map((run) => run.map((p) => ({
|
|
19423
|
+
x: x(p.index),
|
|
19424
|
+
y: y(p.value),
|
|
19425
|
+
index: p.index,
|
|
19426
|
+
value: p.value
|
|
19427
|
+
})));
|
|
19428
|
+
return {
|
|
19429
|
+
name: s.name,
|
|
19430
|
+
color: chartColor(seriesIndex, s.color),
|
|
19431
|
+
paths: runs.map(curve),
|
|
19432
|
+
areas: runs.map((seg) => `${curve(seg)}L${seg[seg.length - 1].x},${baselineY}L${seg[0].x},${baselineY}Z`),
|
|
19433
|
+
points: runs.flat()
|
|
19434
|
+
};
|
|
19435
|
+
});
|
|
19436
|
+
return {
|
|
19437
|
+
width,
|
|
19438
|
+
height,
|
|
19439
|
+
top,
|
|
19440
|
+
left,
|
|
19441
|
+
plotWidth,
|
|
19442
|
+
plotHeight,
|
|
19443
|
+
baselineY,
|
|
19444
|
+
windowed: this.domain().span != null,
|
|
19445
|
+
axisBreak: breakY == null ? null : axisBreak(left, top, axisY, breakY, axisPx),
|
|
19446
|
+
axisY,
|
|
19447
|
+
tickEndY: axisY + tickLength(axisPx),
|
|
19448
|
+
labelAngle: angle,
|
|
19449
|
+
labelY: labelLine(axisY, angle, axisPx),
|
|
19450
|
+
tickX: left - axisPx / 2,
|
|
19451
|
+
ticks: tickTexts.map((t) => ({
|
|
19452
|
+
...t,
|
|
19453
|
+
y: y(t.value)
|
|
19454
|
+
})).filter((t) => breakY == null || t.y < breakY - axisPx),
|
|
19455
|
+
xLabels,
|
|
19456
|
+
series,
|
|
19457
|
+
x,
|
|
19458
|
+
y
|
|
19459
|
+
};
|
|
19460
|
+
}, ...ngDevMode ? [{ debugName: "layout" }] : /* istanbul ignore next */ []);
|
|
19461
|
+
plotArea(width, height, axisPx, angle) {
|
|
19462
|
+
const format = this.format();
|
|
19463
|
+
const domain = this.domain();
|
|
19464
|
+
const windowed = domain.span != null;
|
|
19465
|
+
const top = axisPx;
|
|
19466
|
+
const bottom = labelBand(this.widestXLabel(axisPx), angle, axisPx, height);
|
|
19467
|
+
const plotHeight = Math.max(1, height - top - bottom);
|
|
19468
|
+
const maxTicks = Math.max(2, Math.floor(plotHeight / (axisPx * 3)));
|
|
19469
|
+
const { min, max, ticks } = this.yScale(this.visibleValues(), plotHeight, axisPx, maxTicks);
|
|
19470
|
+
const tickTexts = ticks.map((value) => ({
|
|
19471
|
+
value,
|
|
19472
|
+
text: format(value)
|
|
19473
|
+
}));
|
|
19474
|
+
const gutterTexts = [...tickTexts.map((t) => t.text), ...windowed ? this.yScale(this.runs().flatMap((runs) => runs.flat().map((p) => p.value)), plotHeight, axisPx, maxTicks).ticks.map(format) : []];
|
|
19475
|
+
const left = Math.max(0, ...gutterTexts.map((t) => estimateTextWidth(t, axisPx))) + axisPx;
|
|
19476
|
+
const positions = this.positions();
|
|
19477
|
+
const xAxis = (right) => {
|
|
19478
|
+
const plotWidth = Math.max(1, width - left - right);
|
|
19479
|
+
const at = this.atPosition(domain, left, plotWidth);
|
|
19480
|
+
const x = (i) => at(positions[i]);
|
|
19481
|
+
return {
|
|
19482
|
+
plotWidth,
|
|
19483
|
+
x,
|
|
19484
|
+
xLabels: this.xLabels(domain, at, x, plotWidth, axisPx, angle),
|
|
19485
|
+
candidates: this.xLabelCandidates(domain, at, x)
|
|
19486
|
+
};
|
|
19487
|
+
};
|
|
19488
|
+
const axis = xAxis(axisPx / 2);
|
|
19489
|
+
const xLabels = axis.xLabels.map((label) => {
|
|
19490
|
+
if (angle) return {
|
|
19491
|
+
...label,
|
|
19492
|
+
textX: label.x
|
|
19493
|
+
};
|
|
19494
|
+
const half = estimateTextWidth(label.text, axisPx) / 2;
|
|
19495
|
+
return {
|
|
19496
|
+
...label,
|
|
19497
|
+
textX: clamp$1(label.x, half, width - half)
|
|
19498
|
+
};
|
|
19499
|
+
});
|
|
19500
|
+
return {
|
|
19501
|
+
plotHeight,
|
|
19502
|
+
min,
|
|
19503
|
+
max,
|
|
19504
|
+
tickTexts,
|
|
19505
|
+
left,
|
|
19506
|
+
...axis,
|
|
19507
|
+
xLabels
|
|
19508
|
+
};
|
|
19509
|
+
}
|
|
19510
|
+
tooltip = computed(() => {
|
|
19511
|
+
const active = this.active();
|
|
19512
|
+
if (!active) return null;
|
|
19513
|
+
const layout = this.layout();
|
|
19514
|
+
const x = layout.x(active.index);
|
|
19515
|
+
const activeValue = this.series()[active.series]?.data[active.index];
|
|
19516
|
+
const rows = this.series().map((s, i) => {
|
|
19517
|
+
const value = s.data[active.index];
|
|
19518
|
+
return {
|
|
19519
|
+
name: s.name,
|
|
19520
|
+
color: chartColor(i, s.color),
|
|
19521
|
+
value: this.tableValue(value),
|
|
19522
|
+
active: i === active.series
|
|
19523
|
+
};
|
|
19524
|
+
});
|
|
19525
|
+
return {
|
|
19526
|
+
x,
|
|
19527
|
+
y: this.isValue(activeValue) ? layout.y(activeValue) : layout.top,
|
|
19528
|
+
title: this.labels()[active.index] ?? "",
|
|
19529
|
+
rows,
|
|
19530
|
+
key: `${active.series}-${active.index}`
|
|
19531
|
+
};
|
|
19532
|
+
}, ...ngDevMode ? [{ debugName: "tooltip" }] : /* istanbul ignore next */ []);
|
|
19533
|
+
tooltips = computed(() => {
|
|
19534
|
+
const tip = this.tooltip();
|
|
19535
|
+
return tip ? [tip] : [];
|
|
19536
|
+
}, ...ngDevMode ? [{ debugName: "tooltips" }] : /* istanbul ignore next */ []);
|
|
19537
|
+
announcement = computed(() => {
|
|
19538
|
+
const event = this.eventFor(this.active());
|
|
19539
|
+
return event ? this.i18n.messages().chart.point(event.seriesName, event.label, this.format()(event.value)) : "";
|
|
19540
|
+
}, ...ngDevMode ? [{ debugName: "announcement" }] : /* istanbul ignore next */ []);
|
|
19541
|
+
showsLegend = computed(() => this.showLegend() && this.series().length > 1, ...ngDevMode ? [{ debugName: "showsLegend" }] : /* istanbul ignore next */ []);
|
|
19542
|
+
seriesColor(index) {
|
|
19543
|
+
return chartColor(index, this.series()[index]?.color);
|
|
19544
|
+
}
|
|
19545
|
+
isDimmed(index) {
|
|
19546
|
+
const active = this.active();
|
|
19547
|
+
return !!active && active.series !== index && this.series().length > 1;
|
|
19548
|
+
}
|
|
19549
|
+
isActivePoint(seriesIndex, index) {
|
|
19550
|
+
const active = this.active();
|
|
19551
|
+
return !!active && active.series === seriesIndex && active.index === index;
|
|
19552
|
+
}
|
|
19553
|
+
tableValue(value) {
|
|
19554
|
+
return this.isValue(value) ? this.format()(value) : "–";
|
|
19555
|
+
}
|
|
19556
|
+
onPointerDown(event) {
|
|
19557
|
+
this.suppressClick = false;
|
|
19558
|
+
const domain = this.domain();
|
|
19559
|
+
if (domain.span != null && event.button === 0) this.drag = {
|
|
19560
|
+
pointerId: event.pointerId,
|
|
19561
|
+
x: event.clientX,
|
|
19562
|
+
end: domain.end,
|
|
19563
|
+
moved: false
|
|
19564
|
+
};
|
|
19565
|
+
this.onPointerMove(event);
|
|
19566
|
+
}
|
|
19567
|
+
onPointerMove(event) {
|
|
19568
|
+
if (this.drag && event.buttons === 0) this.endDrag();
|
|
19569
|
+
const drag = this.drag;
|
|
19570
|
+
if (drag && drag.pointerId === event.pointerId) {
|
|
19571
|
+
const dx = event.clientX - drag.x;
|
|
19572
|
+
if (drag.moved || Math.abs(dx) >= DRAG_THRESHOLD) {
|
|
19573
|
+
if (!drag.moved) {
|
|
19574
|
+
drag.moved = true;
|
|
19575
|
+
this.panning.set(true);
|
|
19576
|
+
this.setActive(null);
|
|
19577
|
+
event.currentTarget.setPointerCapture?.(event.pointerId);
|
|
19578
|
+
}
|
|
19579
|
+
this.panTo(drag.end - dx * this.unitsPerPx());
|
|
19580
|
+
return;
|
|
19581
|
+
}
|
|
19582
|
+
}
|
|
19583
|
+
const rect = event.currentTarget.getBoundingClientRect();
|
|
19584
|
+
const index = this.indexAt(event.clientX - rect.left);
|
|
19585
|
+
const py = event.clientY - rect.top;
|
|
19586
|
+
const layout = this.layout();
|
|
19587
|
+
let series = -1;
|
|
19588
|
+
let nearest = Infinity;
|
|
19589
|
+
this.series().forEach((_, i) => {
|
|
19590
|
+
const value = this.valueAt(i, index);
|
|
19591
|
+
if (value == null) return;
|
|
19592
|
+
const distance = Math.abs(layout.y(value) - py);
|
|
19593
|
+
if (distance < nearest) {
|
|
19594
|
+
nearest = distance;
|
|
19595
|
+
series = i;
|
|
19596
|
+
}
|
|
19597
|
+
});
|
|
19598
|
+
this.setActive(series === -1 ? null : {
|
|
19599
|
+
series,
|
|
19600
|
+
index
|
|
19601
|
+
});
|
|
19602
|
+
}
|
|
19603
|
+
onPointerUp(event) {
|
|
19604
|
+
if (this.drag?.pointerId === event.pointerId) {
|
|
19605
|
+
this.suppressClick = this.drag.moved;
|
|
19606
|
+
this.endDrag();
|
|
19607
|
+
}
|
|
19608
|
+
}
|
|
19609
|
+
onPointerLeave() {
|
|
19610
|
+
if (!this.drag?.moved) this.setActive(null);
|
|
19611
|
+
}
|
|
19612
|
+
onWheel(event) {
|
|
19613
|
+
if (event.ctrlKey && event.deltaY && this.visibleXSpan() != null) {
|
|
19614
|
+
event.preventDefault();
|
|
19615
|
+
const { start, end } = this.domain();
|
|
19616
|
+
this.zoomTo((end - start) * Math.exp(event.deltaY * ZOOM_RATE), {
|
|
19617
|
+
clientX: event.clientX,
|
|
19618
|
+
currentTarget: event.currentTarget
|
|
19619
|
+
});
|
|
19620
|
+
return;
|
|
19621
|
+
}
|
|
19622
|
+
const domain = this.domain();
|
|
19623
|
+
if (domain.span == null) return;
|
|
19624
|
+
const delta = Math.abs(event.deltaX) > Math.abs(event.deltaY) ? event.deltaX : event.shiftKey ? event.deltaY : 0;
|
|
19625
|
+
if (!delta) return;
|
|
19626
|
+
event.preventDefault();
|
|
19627
|
+
const unit = event.deltaMode === WheelEvent.DOM_DELTA_LINE ? WHEEL_LINE_PX : event.deltaMode === WheelEvent.DOM_DELTA_PAGE ? this.layout().plotWidth : 1;
|
|
19628
|
+
this.setActive(null);
|
|
19629
|
+
this.panTo(domain.end + delta * unit * this.unitsPerPx());
|
|
19630
|
+
}
|
|
19631
|
+
onClick() {
|
|
19632
|
+
if (this.suppressClick) {
|
|
19633
|
+
this.suppressClick = false;
|
|
19634
|
+
return;
|
|
19635
|
+
}
|
|
19636
|
+
const event = this.eventFor(this.active());
|
|
19637
|
+
if (event) this.pointClick.emit(event);
|
|
19638
|
+
}
|
|
19639
|
+
onFocus() {
|
|
19640
|
+
if (!this.active()) this.setActive(this.firstPoint());
|
|
19641
|
+
}
|
|
19642
|
+
onBlur() {
|
|
19643
|
+
this.setActive(null);
|
|
19644
|
+
}
|
|
19645
|
+
onKeydown(event) {
|
|
19646
|
+
if (!this.active() && event.key.startsWith("Arrow")) {
|
|
19647
|
+
event.preventDefault();
|
|
19648
|
+
this.setActive(this.firstPoint());
|
|
19649
|
+
return;
|
|
19650
|
+
}
|
|
19651
|
+
const active = this.active() ?? this.firstPoint();
|
|
19652
|
+
if (!active) return;
|
|
19653
|
+
const count = this.count();
|
|
19654
|
+
const seriesCount = this.series().length;
|
|
19655
|
+
let next = active;
|
|
19656
|
+
switch (event.key) {
|
|
19657
|
+
case "ArrowRight":
|
|
19658
|
+
next = this.nearestValid(active.series, active.index + 1, 1);
|
|
19659
|
+
break;
|
|
19660
|
+
case "ArrowLeft":
|
|
19661
|
+
next = this.nearestValid(active.series, active.index - 1, -1);
|
|
19662
|
+
break;
|
|
19663
|
+
case "Home":
|
|
19664
|
+
next = this.nearestValid(active.series, 0, 1);
|
|
19665
|
+
break;
|
|
19666
|
+
case "End":
|
|
19667
|
+
next = this.nearestValid(active.series, count - 1, -1);
|
|
19668
|
+
break;
|
|
19669
|
+
case "ArrowUp":
|
|
19670
|
+
case "ArrowDown": {
|
|
19671
|
+
const step = event.key === "ArrowDown" ? 1 : -1;
|
|
19672
|
+
for (let hop = 1; hop < seriesCount; hop++) {
|
|
19673
|
+
const series = (active.series + step * hop + seriesCount) % seriesCount;
|
|
19674
|
+
if (this.valueAt(series, active.index) != null) {
|
|
19675
|
+
next = {
|
|
19676
|
+
series,
|
|
19677
|
+
index: active.index
|
|
19678
|
+
};
|
|
19679
|
+
break;
|
|
19680
|
+
}
|
|
19681
|
+
}
|
|
19682
|
+
break;
|
|
19683
|
+
}
|
|
19684
|
+
case "Enter":
|
|
19685
|
+
case " ":
|
|
19686
|
+
this.onClick();
|
|
19687
|
+
break;
|
|
19688
|
+
case "Escape":
|
|
19689
|
+
next = null;
|
|
19690
|
+
break;
|
|
19691
|
+
default: return;
|
|
19692
|
+
}
|
|
19693
|
+
event.preventDefault();
|
|
19694
|
+
const target = next ?? (event.key === "Escape" ? null : active);
|
|
19695
|
+
if (target) this.reveal(target.index);
|
|
19696
|
+
this.setActive(target);
|
|
19697
|
+
}
|
|
19698
|
+
isValue(value) {
|
|
19699
|
+
return value != null && isFinite(value);
|
|
19700
|
+
}
|
|
19701
|
+
yScale(values, plotHeight, axisPx, maxTicks) {
|
|
19702
|
+
const yMin = this.yMin();
|
|
19703
|
+
const yMax = this.yMax();
|
|
19704
|
+
const dataMin = Math.min(...values);
|
|
19705
|
+
const dataMax = Math.max(...values);
|
|
19706
|
+
let lo = yMin ?? dataMin;
|
|
19707
|
+
let hi = yMax ?? dataMax;
|
|
19708
|
+
const zeroFloor = this.showArea() && yMin === void 0 && !(dataMin < 0);
|
|
19709
|
+
if (zeroFloor) lo = Math.min(lo, 0);
|
|
19710
|
+
if (lo > hi) [lo, hi] = [hi, lo];
|
|
19711
|
+
const clearance = axisPx;
|
|
19712
|
+
const breakClearance = axisPx * 6;
|
|
19713
|
+
const derivedFloor = yMin === void 0 && !zeroFloor && dataMin > 0;
|
|
19714
|
+
if (this.windowed() && isFinite(lo) && isFinite(hi)) {
|
|
19715
|
+
const spread = hi - lo || Math.abs(hi) || 1;
|
|
19716
|
+
const pad = clearance * spread / Math.max(1, plotHeight - 2 * clearance);
|
|
19717
|
+
const breakPad = breakClearance * spread / Math.max(1, plotHeight - clearance - breakClearance);
|
|
19718
|
+
const min = yMin ?? (zeroFloor ? lo : derivedFloor ? Math.max(0, lo - breakPad) : lo - pad);
|
|
19719
|
+
const max = yMax ?? hi + pad;
|
|
19720
|
+
return {
|
|
19721
|
+
min,
|
|
19722
|
+
max,
|
|
19723
|
+
ticks: niceScale(min, max, maxTicks).ticks.filter((t) => t >= min && t <= max)
|
|
19724
|
+
};
|
|
19725
|
+
}
|
|
19726
|
+
const scale = niceScale(lo, hi, maxTicks);
|
|
19727
|
+
const step = scale.ticks[1] - scale.ticks[0];
|
|
19728
|
+
const ticks = [...scale.ticks];
|
|
19729
|
+
let min = yMin ?? scale.min;
|
|
19730
|
+
let max = yMax ?? scale.max;
|
|
19731
|
+
if (min > max) [min, max] = [max, min];
|
|
19732
|
+
const px = (value) => value / (max - min || 1) * plotHeight;
|
|
19733
|
+
const lowTight = () => yMin === void 0 && !zeroFloor && px(dataMin - min) < (derivedFloor && min > 0 ? breakClearance : clearance);
|
|
19734
|
+
const highTight = yMax === void 0 && px(max - dataMax) < clearance;
|
|
19735
|
+
for (let steps = 0; steps < 6 && lowTight() && !(derivedFloor && min <= 0); steps++) {
|
|
19736
|
+
min = Number((min - step).toPrecision(12));
|
|
19737
|
+
ticks.unshift(min);
|
|
19738
|
+
}
|
|
19739
|
+
if (highTight) {
|
|
19740
|
+
max = Number((max + step).toPrecision(12));
|
|
19741
|
+
ticks.push(max);
|
|
19742
|
+
}
|
|
19743
|
+
return {
|
|
19744
|
+
min,
|
|
19745
|
+
max,
|
|
19746
|
+
ticks: ticks.filter((t) => t >= min && t <= max)
|
|
19747
|
+
};
|
|
19748
|
+
}
|
|
19749
|
+
atPosition(domain, left, plotWidth) {
|
|
19750
|
+
const inset = domain.span != null ? EDGE_INSET : 0;
|
|
19751
|
+
const inner = Math.max(1, plotWidth - 2 * inset);
|
|
19752
|
+
const extent = domain.end - domain.start;
|
|
19753
|
+
const scale = inner / extent;
|
|
19754
|
+
return (position) => extent > 0 ? left + inset + (position - domain.start) * scale : left + plotWidth / 2;
|
|
19755
|
+
}
|
|
19756
|
+
xLabelCandidates(domain, at, x) {
|
|
19757
|
+
const inView = (position) => position >= domain.start && position <= domain.end;
|
|
19758
|
+
const ticks = this.xTicks();
|
|
19759
|
+
if (ticks) return ticks.filter((t) => inView(t.value)).map((t) => ({
|
|
19760
|
+
key: t.value,
|
|
19761
|
+
text: t.label,
|
|
19762
|
+
x: at(t.value)
|
|
19763
|
+
}));
|
|
19764
|
+
const positions = this.positions();
|
|
19765
|
+
return positions.map((position, index) => ({
|
|
19766
|
+
key: index,
|
|
19767
|
+
text: this.labels()[index] ?? "",
|
|
19768
|
+
x: x(index)
|
|
19769
|
+
})).filter((l) => inView(positions[l.key]));
|
|
19770
|
+
}
|
|
19771
|
+
labelsFit(labels, angle, axisPx) {
|
|
19772
|
+
return labels.every((label, i) => i === 0 || label.x - labels[i - 1].x >= (labelRoom(label.text, angle, axisPx) + labelRoom(labels[i - 1].text, angle, axisPx)) / 2);
|
|
19773
|
+
}
|
|
19774
|
+
xLabels(domain, at, x, plotWidth, axisPx, angle) {
|
|
19775
|
+
const candidates = this.xLabelCandidates(domain, at, x);
|
|
19776
|
+
if (this.xTicks()) return candidates;
|
|
19777
|
+
const texts = this.positions().map((_, i) => this.labels()[i] ?? "");
|
|
19778
|
+
if (!this.xValues()) {
|
|
19779
|
+
const count = texts.length;
|
|
19780
|
+
const extent = domain.end - domain.start;
|
|
19781
|
+
const spacing = count > 1 ? (plotWidth - (domain.span != null ? 2 * EDGE_INSET : 0)) / extent : plotWidth;
|
|
19782
|
+
const room = Math.max(0, ...texts.map((t) => labelRoom(t, angle, axisPx)));
|
|
19783
|
+
const step = Math.max(1, Math.ceil(room / spacing));
|
|
19784
|
+
return candidates.filter((l) => l.key % step === 0);
|
|
19785
|
+
}
|
|
19786
|
+
const labels = [];
|
|
19787
|
+
let edge = -Infinity;
|
|
19788
|
+
for (const label of candidates) {
|
|
19789
|
+
const half = labelRoom(label.text, angle, axisPx) / 2;
|
|
19790
|
+
if (label.x - half >= edge) {
|
|
19791
|
+
labels.push(label);
|
|
19792
|
+
edge = label.x + half;
|
|
19793
|
+
}
|
|
19794
|
+
}
|
|
19795
|
+
return labels;
|
|
19796
|
+
}
|
|
19797
|
+
widestXLabel(axisPx) {
|
|
19798
|
+
const texts = this.xTicks()?.map((t) => t.label) ?? this.labels();
|
|
19799
|
+
return Math.max(0, ...texts.map((t) => estimateTextWidth(t, axisPx)));
|
|
19800
|
+
}
|
|
19801
|
+
onGestureStart(event) {
|
|
19802
|
+
if (this.visibleXSpan() == null) return;
|
|
19803
|
+
event.preventDefault();
|
|
19804
|
+
const { start, end } = this.domain();
|
|
19805
|
+
this.gestureSpan = end - start;
|
|
19806
|
+
}
|
|
19807
|
+
onGestureChange(event) {
|
|
19808
|
+
if (this.gestureSpan == null || !("scale" in event) || !("clientX" in event)) return;
|
|
19809
|
+
const { scale, clientX } = event;
|
|
19810
|
+
if (typeof scale !== "number" || typeof clientX !== "number" || !(scale > 0)) return;
|
|
19811
|
+
event.preventDefault();
|
|
19812
|
+
this.zoomTo(this.gestureSpan / scale, {
|
|
19813
|
+
clientX,
|
|
19814
|
+
currentTarget: event.currentTarget
|
|
19815
|
+
});
|
|
19816
|
+
}
|
|
19817
|
+
onGestureEnd() {
|
|
19818
|
+
this.gestureSpan = null;
|
|
19819
|
+
}
|
|
19820
|
+
zoomTo(span, { clientX, currentTarget }) {
|
|
19821
|
+
const domain = this.domain();
|
|
19822
|
+
const full = domain.last - domain.first;
|
|
19823
|
+
if (!(full > 0) || !(currentTarget instanceof Element)) return;
|
|
19824
|
+
const next = clamp$1(span, Math.min(this.minSpan(), full), full);
|
|
19825
|
+
const shown = domain.end - domain.start;
|
|
19826
|
+
const inset = domain.span != null ? EDGE_INSET : 0;
|
|
19827
|
+
const { left, plotWidth } = this.layout();
|
|
19828
|
+
const ratio = clamp$1((clientX - currentTarget.getBoundingClientRect().left - left - inset) / Math.max(1, plotWidth - 2 * inset), 0, 1);
|
|
19829
|
+
const end = clamp$1(domain.start + ratio * shown + (1 - ratio) * next, domain.first + next, domain.last);
|
|
19830
|
+
this.setActive(null);
|
|
19831
|
+
this.zoomSpan.set(next);
|
|
19832
|
+
this.panEnd.set(end);
|
|
19833
|
+
this.visibleRangeChange.emit({
|
|
19834
|
+
start: end - next,
|
|
19835
|
+
end
|
|
19836
|
+
});
|
|
19837
|
+
}
|
|
19838
|
+
minSpan() {
|
|
19839
|
+
const known = this.positions().filter((p) => isFinite(p)).sort((a, b) => a - b);
|
|
19840
|
+
const gaps = known.slice(1).map((p, i) => p - known[i]).filter((gap) => gap > 0);
|
|
19841
|
+
return gaps.length ? Math.min(...gaps) * 2 : 1;
|
|
19842
|
+
}
|
|
19843
|
+
unitsPerPx() {
|
|
19844
|
+
return (this.domain().span ?? 0) / Math.max(1, this.layout().plotWidth - 2 * EDGE_INSET);
|
|
19845
|
+
}
|
|
19846
|
+
panTo(end) {
|
|
19847
|
+
const domain = this.domain();
|
|
19848
|
+
if (domain.span == null) return;
|
|
19849
|
+
const next = clamp$1(end, domain.first + domain.span, domain.last);
|
|
19850
|
+
if (next === domain.end) return;
|
|
19851
|
+
this.panEnd.set(next);
|
|
19852
|
+
this.visibleRangeChange.emit({
|
|
19853
|
+
start: next - domain.span,
|
|
19854
|
+
end: next
|
|
19855
|
+
});
|
|
19856
|
+
}
|
|
19857
|
+
endDrag() {
|
|
19858
|
+
this.drag = null;
|
|
19859
|
+
this.panning.set(false);
|
|
19860
|
+
}
|
|
19861
|
+
reveal(index) {
|
|
19862
|
+
const domain = this.domain();
|
|
19863
|
+
const position = this.positions()[index];
|
|
19864
|
+
if (domain.span == null) return;
|
|
19865
|
+
if (position < domain.start) this.panTo(position + domain.span);
|
|
19866
|
+
else if (position > domain.end) this.panTo(position);
|
|
19867
|
+
}
|
|
19868
|
+
indexAt(px) {
|
|
19869
|
+
const layout = this.layout();
|
|
19870
|
+
const count = this.count();
|
|
19871
|
+
const domain = this.domain();
|
|
19872
|
+
if (!this.xValues()) {
|
|
19873
|
+
if (count < 2) return 0;
|
|
19874
|
+
const inset = domain.span != null ? EDGE_INSET : 0;
|
|
19875
|
+
const inner = Math.max(1, layout.plotWidth - 2 * inset);
|
|
19876
|
+
return clamp$1(Math.round(domain.start + (px - layout.left - inset) / inner * (domain.end - domain.start)), Math.ceil(domain.start), Math.floor(domain.end));
|
|
19877
|
+
}
|
|
19878
|
+
const positions = this.positions();
|
|
19879
|
+
let best = -1;
|
|
19880
|
+
let nearest = Infinity;
|
|
19881
|
+
for (let index = 0; index < count; index++) {
|
|
19882
|
+
const position = positions[index];
|
|
19883
|
+
if (position < domain.start || position > domain.end || !this.series().some((_, s) => this.valueAt(s, index) != null)) continue;
|
|
19884
|
+
const distance = Math.abs(layout.x(index) - px);
|
|
19885
|
+
if (distance < nearest) {
|
|
19886
|
+
nearest = distance;
|
|
19887
|
+
best = index;
|
|
19888
|
+
}
|
|
19889
|
+
}
|
|
19890
|
+
return best;
|
|
19891
|
+
}
|
|
19892
|
+
valueAt(series, index) {
|
|
19893
|
+
const value = this.series()[series]?.data[index];
|
|
19894
|
+
return this.isValue(value) && isFinite(this.positions()[index]) ? value : null;
|
|
19895
|
+
}
|
|
19896
|
+
firstPoint() {
|
|
19897
|
+
const domain = this.domain();
|
|
19898
|
+
for (let index = 0; index < this.count(); index++) {
|
|
19899
|
+
if (this.positions()[index] < domain.start) continue;
|
|
19900
|
+
const series = this.series().findIndex((_, s) => this.valueAt(s, index) != null);
|
|
19901
|
+
if (series !== -1) return {
|
|
19902
|
+
series,
|
|
19903
|
+
index
|
|
19904
|
+
};
|
|
19905
|
+
}
|
|
19906
|
+
return null;
|
|
19907
|
+
}
|
|
19908
|
+
nearestValid(series, index, step) {
|
|
19909
|
+
for (let i = index; i >= 0 && i < this.count(); i += step) if (this.valueAt(series, i) != null) return {
|
|
19910
|
+
series,
|
|
19911
|
+
index: i
|
|
19912
|
+
};
|
|
19913
|
+
return null;
|
|
19914
|
+
}
|
|
19915
|
+
eventFor(active) {
|
|
19916
|
+
if (!active) return null;
|
|
19917
|
+
const value = this.valueAt(active.series, active.index);
|
|
19918
|
+
if (value == null) return null;
|
|
19919
|
+
return {
|
|
19920
|
+
seriesIndex: active.series,
|
|
19921
|
+
seriesName: this.series()[active.series].name,
|
|
19922
|
+
index: active.index,
|
|
19923
|
+
label: this.labels()[active.index] ?? "",
|
|
19924
|
+
value
|
|
19925
|
+
};
|
|
19926
|
+
}
|
|
19927
|
+
setActive(next) {
|
|
19928
|
+
const current = this.active();
|
|
19929
|
+
if (current?.series === next?.series && current?.index === next?.index) return;
|
|
19930
|
+
this.active.set(next);
|
|
19931
|
+
this.activePointChange.emit(this.eventFor(next));
|
|
19932
|
+
}
|
|
19933
|
+
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
19934
|
+
minVersion: "12.0.0",
|
|
19935
|
+
version: "22.2.0",
|
|
19936
|
+
ngImport: i0,
|
|
19937
|
+
type: LineChartComponent,
|
|
19938
|
+
deps: [],
|
|
19939
|
+
target: i0.ɵɵFactoryTarget.Component
|
|
19940
|
+
});
|
|
19941
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
19942
|
+
minVersion: "17.0.0",
|
|
19943
|
+
version: "22.2.0",
|
|
19944
|
+
type: LineChartComponent,
|
|
19945
|
+
isStandalone: true,
|
|
19946
|
+
selector: "ea-line-chart",
|
|
19947
|
+
inputs: {
|
|
19948
|
+
labels: {
|
|
19949
|
+
classPropertyName: "labels",
|
|
19950
|
+
publicName: "labels",
|
|
19951
|
+
isSignal: true,
|
|
19952
|
+
isRequired: false,
|
|
19953
|
+
transformFunction: null
|
|
19954
|
+
},
|
|
19955
|
+
series: {
|
|
19956
|
+
classPropertyName: "series",
|
|
19957
|
+
publicName: "series",
|
|
19958
|
+
isSignal: true,
|
|
19959
|
+
isRequired: false,
|
|
19960
|
+
transformFunction: null
|
|
19961
|
+
},
|
|
19962
|
+
xValues: {
|
|
19963
|
+
classPropertyName: "xValues",
|
|
19964
|
+
publicName: "xValues",
|
|
19965
|
+
isSignal: true,
|
|
19966
|
+
isRequired: false,
|
|
19967
|
+
transformFunction: null
|
|
19968
|
+
},
|
|
19969
|
+
xTicks: {
|
|
19970
|
+
classPropertyName: "xTicks",
|
|
19971
|
+
publicName: "xTicks",
|
|
19972
|
+
isSignal: true,
|
|
19973
|
+
isRequired: false,
|
|
19974
|
+
transformFunction: null
|
|
19975
|
+
},
|
|
19976
|
+
visibleXSpan: {
|
|
19977
|
+
classPropertyName: "visibleXSpan",
|
|
19978
|
+
publicName: "visibleXSpan",
|
|
19979
|
+
isSignal: true,
|
|
19980
|
+
isRequired: false,
|
|
19981
|
+
transformFunction: null
|
|
19982
|
+
},
|
|
19983
|
+
curve: {
|
|
19984
|
+
classPropertyName: "curve",
|
|
19985
|
+
publicName: "curve",
|
|
19986
|
+
isSignal: true,
|
|
19987
|
+
isRequired: false,
|
|
19988
|
+
transformFunction: null
|
|
19989
|
+
},
|
|
19990
|
+
showArea: {
|
|
19991
|
+
classPropertyName: "showArea",
|
|
19992
|
+
publicName: "showArea",
|
|
19993
|
+
isSignal: true,
|
|
19994
|
+
isRequired: false,
|
|
19995
|
+
transformFunction: null
|
|
19996
|
+
},
|
|
19997
|
+
showPoints: {
|
|
19998
|
+
classPropertyName: "showPoints",
|
|
19999
|
+
publicName: "showPoints",
|
|
20000
|
+
isSignal: true,
|
|
20001
|
+
isRequired: false,
|
|
20002
|
+
transformFunction: null
|
|
20003
|
+
},
|
|
20004
|
+
showGrid: {
|
|
20005
|
+
classPropertyName: "showGrid",
|
|
20006
|
+
publicName: "showGrid",
|
|
20007
|
+
isSignal: true,
|
|
20008
|
+
isRequired: false,
|
|
20009
|
+
transformFunction: null
|
|
20010
|
+
},
|
|
20011
|
+
showLegend: {
|
|
20012
|
+
classPropertyName: "showLegend",
|
|
20013
|
+
publicName: "showLegend",
|
|
20014
|
+
isSignal: true,
|
|
20015
|
+
isRequired: false,
|
|
20016
|
+
transformFunction: null
|
|
20017
|
+
},
|
|
20018
|
+
yMin: {
|
|
20019
|
+
classPropertyName: "yMin",
|
|
20020
|
+
publicName: "yMin",
|
|
20021
|
+
isSignal: true,
|
|
20022
|
+
isRequired: false,
|
|
20023
|
+
transformFunction: null
|
|
20024
|
+
},
|
|
20025
|
+
yMax: {
|
|
20026
|
+
classPropertyName: "yMax",
|
|
20027
|
+
publicName: "yMax",
|
|
20028
|
+
isSignal: true,
|
|
20029
|
+
isRequired: false,
|
|
20030
|
+
transformFunction: null
|
|
20031
|
+
},
|
|
20032
|
+
xLabelOrientation: {
|
|
20033
|
+
classPropertyName: "xLabelOrientation",
|
|
20034
|
+
publicName: "xLabelOrientation",
|
|
20035
|
+
isSignal: true,
|
|
20036
|
+
isRequired: false,
|
|
20037
|
+
transformFunction: null
|
|
20038
|
+
},
|
|
20039
|
+
showAxisBreak: {
|
|
20040
|
+
classPropertyName: "showAxisBreak",
|
|
20041
|
+
publicName: "showAxisBreak",
|
|
20042
|
+
isSignal: true,
|
|
20043
|
+
isRequired: false,
|
|
20044
|
+
transformFunction: null
|
|
20045
|
+
},
|
|
20046
|
+
height: {
|
|
20047
|
+
classPropertyName: "height",
|
|
20048
|
+
publicName: "height",
|
|
20049
|
+
isSignal: true,
|
|
20050
|
+
isRequired: false,
|
|
20051
|
+
transformFunction: null
|
|
20052
|
+
},
|
|
20053
|
+
size: {
|
|
20054
|
+
classPropertyName: "size",
|
|
20055
|
+
publicName: "size",
|
|
20056
|
+
isSignal: true,
|
|
20057
|
+
isRequired: false,
|
|
20058
|
+
transformFunction: null
|
|
20059
|
+
},
|
|
20060
|
+
animation: {
|
|
20061
|
+
classPropertyName: "animation",
|
|
20062
|
+
publicName: "animation",
|
|
20063
|
+
isSignal: true,
|
|
20064
|
+
isRequired: false,
|
|
20065
|
+
transformFunction: null
|
|
20066
|
+
},
|
|
20067
|
+
animationDuration: {
|
|
20068
|
+
classPropertyName: "animationDuration",
|
|
20069
|
+
publicName: "animationDuration",
|
|
20070
|
+
isSignal: true,
|
|
20071
|
+
isRequired: false,
|
|
20072
|
+
transformFunction: null
|
|
20073
|
+
},
|
|
20074
|
+
formatValue: {
|
|
20075
|
+
classPropertyName: "formatValue",
|
|
20076
|
+
publicName: "formatValue",
|
|
20077
|
+
isSignal: true,
|
|
20078
|
+
isRequired: false,
|
|
20079
|
+
transformFunction: null
|
|
20080
|
+
},
|
|
20081
|
+
ariaLabel: {
|
|
20082
|
+
classPropertyName: "ariaLabel",
|
|
20083
|
+
publicName: "aria-label",
|
|
20084
|
+
isSignal: true,
|
|
20085
|
+
isRequired: false,
|
|
20086
|
+
transformFunction: null
|
|
20087
|
+
}
|
|
20088
|
+
},
|
|
20089
|
+
outputs: {
|
|
20090
|
+
pointClick: "pointClick",
|
|
20091
|
+
activePointChange: "activePointChange",
|
|
20092
|
+
visibleRangeChange: "visibleRangeChange"
|
|
20093
|
+
},
|
|
20094
|
+
ngImport: i0,
|
|
20095
|
+
template: "<div\n class=\"ea-line-chart\"\n [ngClass]=\"hostClasses()\"\n [style.--ea-chart-duration]=\"animationDuration() + 'ms'\">\n @if (hasData()) {\n <div\n class=\"ea-line-chart__plot\"\n role=\"group\"\n tabindex=\"0\"\n [attr.aria-roledescription]=\"i18n.messages().chart.roleDescription\"\n [attr.aria-label]=\"label()\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n (keydown)=\"onKeydown($event)\">\n @for (pass of renderPass(); track pass) {\n <svg\n class=\"ea-line-chart__svg\"\n aria-hidden=\"true\"\n [attr.width]=\"layout().width\"\n [attr.height]=\"layout().height\"\n [attr.viewBox]=\"'0 0 ' + layout().width + ' ' + layout().height\"\n [style.--ea-line-chart-baseline]=\"layout().baselineY + 'px'\"\n (pointermove)=\"onPointerMove($event)\"\n (pointerdown)=\"onPointerDown($event)\"\n (pointerup)=\"onPointerUp($event)\"\n (pointercancel)=\"onPointerUp($event)\"\n (pointerleave)=\"onPointerLeave()\"\n (wheel)=\"onWheel($event)\"\n (gesturestart)=\"onGestureStart($event)\"\n (gesturechange)=\"onGestureChange($event)\"\n (gestureend)=\"onGestureEnd()\"\n (click)=\"onClick()\">\n @if (layout().windowed) {\n <defs>\n <clipPath [attr.id]=\"clipId\">\n <rect\n [attr.x]=\"layout().left\"\n y=\"0\"\n [attr.width]=\"layout().plotWidth\"\n [attr.height]=\"layout().height\" />\n </clipPath>\n </defs>\n }\n <rect\n class=\"ea-line-chart__hit\"\n [attr.x]=\"layout().left\"\n [attr.y]=\"layout().top\"\n [attr.width]=\"layout().plotWidth\"\n [attr.height]=\"layout().plotHeight\" />\n @for (tick of layout().ticks; track tick.value) {\n @if (showGrid()) {\n <line\n class=\"ea-line-chart__grid\"\n [attr.x1]=\"layout().left\"\n [attr.x2]=\"layout().left + layout().plotWidth\"\n [attr.y1]=\"tick.y\"\n [attr.y2]=\"tick.y\" />\n }\n <text\n class=\"ea-line-chart__axis ea-line-chart__axis--y\"\n text-anchor=\"end\"\n dominant-baseline=\"middle\"\n [attr.x]=\"layout().tickX\"\n [attr.y]=\"tick.y\">\n {{ tick.text }}\n </text>\n }\n <line\n class=\"ea-line-chart__baseline\"\n [attr.x1]=\"layout().left\"\n [attr.x2]=\"layout().left + layout().plotWidth\"\n [attr.y1]=\"layout().top + layout().plotHeight\"\n [attr.y2]=\"layout().top + layout().plotHeight\" />\n @if (layout().axisBreak; as axisBreak) {\n <path\n class=\"ea-line-chart__y-axis\"\n [attr.d]=\"axisBreak.axis\" />\n <path\n class=\"ea-line-chart__axis-break\"\n [attr.d]=\"axisBreak.slashes\" />\n }\n @for (xLabel of layout().xLabels; track xLabel.key) {\n <line\n class=\"ea-line-chart__x-tick\"\n [attr.x1]=\"xLabel.x\"\n [attr.x2]=\"xLabel.x\"\n [attr.y1]=\"layout().axisY\"\n [attr.y2]=\"layout().tickEndY\" />\n <text\n class=\"ea-line-chart__axis ea-line-chart__axis--x\"\n [attr.text-anchor]=\"layout().labelAngle ? 'end' : 'middle'\"\n [attr.dominant-baseline]=\"layout().labelAngle ? 'central' : null\"\n [attr.transform]=\"\n layout().labelAngle\n ? 'rotate(' +\n -layout().labelAngle +\n ' ' +\n xLabel.x +\n ' ' +\n layout().labelY +\n ')'\n : null\n \"\n [attr.x]=\"xLabel.textX\"\n [attr.y]=\"layout().labelY\">\n {{ xLabel.text }}\n </text>\n }\n @if (layout().axisBreak; as axisBreak) {\n <!-- Keeps the break's gap open under a crosshair drawn along the y-axis -->\n <mask\n maskUnits=\"userSpaceOnUse\"\n [attr.id]=\"breakMaskId\">\n <rect\n fill=\"white\"\n x=\"0\"\n y=\"0\"\n [attr.width]=\"layout().width\"\n [attr.height]=\"layout().height\" />\n <rect\n fill=\"black\"\n [attr.x]=\"axisBreak.gap.x\"\n [attr.y]=\"axisBreak.gap.y\"\n [attr.width]=\"axisBreak.gap.width\"\n [attr.height]=\"axisBreak.gap.height\" />\n </mask>\n }\n @if (tooltip(); as tip) {\n <line\n class=\"ea-line-chart__crosshair\"\n [attr.mask]=\"layout().axisBreak ? 'url(#' + breakMaskId + ')' : null\"\n [attr.x1]=\"tip.x\"\n [attr.x2]=\"tip.x\"\n [attr.y1]=\"layout().top\"\n [attr.y2]=\"layout().top + layout().plotHeight\" />\n }\n <g [attr.clip-path]=\"layout().windowed ? 'url(#' + clipId + ')' : null\">\n <g class=\"ea-line-chart__lines\">\n @for (line of layout().series; track $index; let s = $index) {\n <g\n class=\"ea-line-chart__series\"\n [class.ea-line-chart__series--dimmed]=\"isDimmed(s)\"\n [style.--ea-chart-color]=\"line.color\">\n @if (showArea()) {\n @for (area of line.areas; track $index) {\n <path\n class=\"ea-line-chart__area\"\n [attr.d]=\"area\" />\n }\n }\n @for (path of line.paths; track $index) {\n <path\n class=\"ea-line-chart__line\"\n pathLength=\"1\"\n [attr.d]=\"path\" />\n }\n @for (point of line.points; track point.index) {\n @if (showPoints() || isActivePoint(s, point.index)) {\n <circle\n class=\"ea-line-chart__point\"\n [class.ea-line-chart__point--active]=\"\n isActivePoint(s, point.index)\n \"\n [attr.cx]=\"point.x\"\n [attr.cy]=\"point.y\"\n [attr.r]=\"isActivePoint(s, point.index) ? 6 : 4\" />\n }\n }\n </g>\n }\n </g>\n </g>\n @for (tip of tooltips(); track tip.key) {\n <rect\n class=\"ea-line-chart__anchor\"\n width=\"12\"\n height=\"12\"\n [attr.x]=\"tip.x - 6\"\n [attr.y]=\"tip.y - 6\"\n [eaTooltip]=\"tooltipContent\"\n [tooltipOpen]=\"true\"\n [maxWidth]=\"undefined\" />\n }\n </svg>\n }\n <ng-template #tooltipContent>\n @if (tooltip(); as tip) {\n <div class=\"ea-line-chart__tooltip\">\n <span class=\"ea-line-chart__tooltip-title\">{{ tip.title }}</span>\n @for (row of tip.rows; track $index) {\n <span\n class=\"ea-line-chart__tooltip-row\"\n [class.ea-line-chart__tooltip-row--active]=\"row.active\">\n <span\n class=\"ea-line-chart__swatch\"\n [style.--ea-chart-color]=\"row.color\">\n </span>\n <span class=\"ea-line-chart__tooltip-name\">{{ row.name }}</span>\n <span class=\"ea-line-chart__tooltip-value\">{{ row.value }}</span>\n </span>\n }\n </div>\n }\n </ng-template>\n <!-- Hidden through a block, since a table ignores the 1px size and keeps its full height -->\n <div class=\"ea-line-chart__table\">\n <table>\n <caption>\n {{ label() }}\n </caption>\n <thead>\n <tr>\n <th scope=\"col\">{{ i18n.messages().chart.category }}</th>\n\n @for (s of series(); track $index) {\n <th scope=\"col\">{{ s.name }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of labels(); track $index; let i = $index) {\n <tr>\n <th scope=\"row\">{{ row }}</th>\n\n @for (s of series(); track $index) {\n <td>{{ tableValue(s.data[i]) }}</td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n <div\n class=\"ea-line-chart__live\"\n aria-live=\"polite\">\n {{ announcement() }}\n </div>\n } @else {\n <div\n class=\"ea-line-chart__empty\"\n role=\"img\"\n [attr.aria-label]=\"label()\"\n [style.height.px]=\"height()\">\n {{ i18n.messages().chart.noData }}\n </div>\n }\n @if (showsLegend()) {\n <ul\n class=\"ea-line-chart__legend\"\n aria-hidden=\"true\">\n @for (s of series(); track $index; let i = $index) {\n <li class=\"ea-line-chart__legend-item\">\n <span\n class=\"ea-line-chart__legend-line\"\n [style.--ea-chart-color]=\"seriesColor(i)\">\n </span>\n {{ s.name }}\n </li>\n }\n </ul>\n }\n</div>\n",
|
|
20096
|
+
styles: ["@keyframes ea-chart-fade{0%{opacity:0}}@keyframes ea-chart-draw{0%{stroke-dashoffset:1}}@keyframes ea-chart-grow-y{0%{transform:scaleY(0)}}@keyframes ea-chart-grow-x{0%{transform:scaleX(0)}}@keyframes ea-chart-grow{0%{transform:scale(0)}}ea-line-chart{display:block}.ea-line-chart{position:relative;display:flex;flex-direction:column;gap:.75em;font-family:var(--font-family-sans);color:var(--color-text-primary)}.ea-line-chart--2xs{font-size:var(--font-size-2xs)}.ea-line-chart--xs{font-size:var(--font-size-xs)}.ea-line-chart--sm{font-size:var(--font-size-sm)}.ea-line-chart--md{font-size:var(--font-size-md)}.ea-line-chart--lg{font-size:var(--font-size-lg)}.ea-line-chart--xl{font-size:var(--font-size-xl)}.ea-line-chart__plot{position:relative;border-radius:var(--radius-md);outline:none}.ea-line-chart__plot:focus-visible{box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-line-chart__plot:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-line-chart__plot svg{display:block;overflow:visible}.ea-line-chart__svg{direction:ltr;touch-action:pan-y}.ea-line-chart__hit{fill:transparent}.ea-line-chart__grid{stroke:var(--color-divider);stroke-width:1px;shape-rendering:crispEdges}.ea-line-chart__baseline{stroke:var(--color-border-strong);stroke-width:1px;shape-rendering:crispEdges}.ea-line-chart__axis{font-size:.75em;fill:var(--color-text-secondary)}.ea-line-chart__x-tick{stroke:var(--color-border-strong);stroke-width:1px;shape-rendering:crispEdges}.ea-line-chart__y-axis{stroke:var(--color-border-strong);stroke-width:1px;shape-rendering:crispEdges;fill:none}.ea-line-chart__axis-break{fill:none;stroke:var(--color-border-strong);stroke-width:1.5px;stroke-linecap:round}.ea-line-chart__crosshair{stroke:var(--color-border-strong);stroke-width:1px;shape-rendering:crispEdges;pointer-events:none}.ea-line-chart__series{pointer-events:none;transition:opacity var(--duration-fast) var(--ease-out)}.ea-line-chart__series--dimmed{opacity:.35}.ea-line-chart__area{fill:var(--ea-chart-color);fill-opacity:.12}.ea-line-chart__line{fill:none;stroke:var(--ea-chart-color);stroke-width:2px;stroke-linecap:round;stroke-linejoin:round}.ea-line-chart__point{fill:var(--ea-chart-color);stroke:var(--ea-chart-surface, var(--color-bg-base));stroke-width:2px}.ea-line-chart__tooltip{display:flex;flex-direction:column;gap:var(--space-1)}.ea-line-chart__anchor{fill:transparent}.ea-line-chart__tooltip-title{font-weight:var(--font-weight-medium)}.ea-line-chart__tooltip-row{display:flex;align-items:center;gap:.5em}.ea-line-chart__tooltip-row--active{font-weight:var(--font-weight-medium)}.ea-line-chart__tooltip-value{font-weight:var(--font-weight-semibold);font-variant-numeric:tabular-nums}.ea-line-chart__swatch{flex-shrink:0;width:.75em;height:.75em;border-radius:var(--radius-sm);background-color:var(--ea-chart-color)}.ea-line-chart__legend{display:flex;flex-wrap:wrap;justify-content:center;gap:.375em 1em;padding:0;margin:0;font-size:.875em;list-style:none;color:var(--color-text-secondary)}.ea-line-chart__legend-item{display:flex;align-items:center;gap:.375em}.ea-line-chart__legend-line{width:1em;height:2px;border-radius:var(--radius-full);background-color:var(--ea-chart-color)}.ea-line-chart__table,.ea-line-chart__live{position:absolute;overflow:hidden;clip:rect(0,0,0,0);clip-path:inset(50%);width:1px;height:1px;padding:0;margin:-1px;white-space:nowrap;border:0}.ea-line-chart__empty{display:flex;align-items:center;justify-content:center;font-size:.875em;color:var(--color-text-tertiary)}.ea-line-chart--pannable .ea-line-chart__svg{cursor:grab}.ea-line-chart--panning .ea-line-chart__svg{cursor:grabbing;-webkit-user-select:none;user-select:none}.ea-line-chart--animate-draw .ea-line-chart__line{stroke-dasharray:1;animation-name:ea-chart-draw;animation-duration:var(--ea-chart-duration, .6s);animation-timing-function:var(--ease-out);animation-fill-mode:both}@media(prefers-reduced-motion:reduce){.ea-line-chart--animate-draw .ea-line-chart__line{animation:none}}.ea-line-chart--animate-draw .ea-line-chart__area,.ea-line-chart--animate-draw .ea-line-chart__point{animation-name:ea-chart-fade;animation-delay:var(--ea-chart-duration, .6s);animation-duration:var(--ea-chart-duration, .6s);animation-timing-function:var(--ease-out);animation-fill-mode:both}@media(prefers-reduced-motion:reduce){.ea-line-chart--animate-draw .ea-line-chart__area,.ea-line-chart--animate-draw .ea-line-chart__point{animation:none}}.ea-line-chart--animate-reveal .ea-line-chart__lines{clip-path:inset(-8px);animation-name:ea-line-chart-reveal;animation-duration:var(--ea-chart-duration, .6s);animation-timing-function:var(--ease-out);animation-fill-mode:both}@media(prefers-reduced-motion:reduce){.ea-line-chart--animate-reveal .ea-line-chart__lines{animation:none}}.ea-line-chart--animate-fade .ea-line-chart__series{animation-name:ea-chart-fade;animation-duration:var(--ea-chart-duration, .6s);animation-timing-function:var(--ease-out);animation-fill-mode:both}@media(prefers-reduced-motion:reduce){.ea-line-chart--animate-fade .ea-line-chart__series{animation:none}}.ea-line-chart--animate-rise .ea-line-chart__series{animation-name:ea-chart-grow-y;transform-origin:0 var(--ea-line-chart-baseline);animation-duration:var(--ea-chart-duration, .6s);animation-timing-function:var(--ease-out);animation-fill-mode:both}@media(prefers-reduced-motion:reduce){.ea-line-chart--animate-rise .ea-line-chart__series{animation:none}}@keyframes ea-line-chart-reveal{0%{clip-path:inset(-8px 100% -8px -8px)}}\n"],
|
|
20097
|
+
dependencies: [{
|
|
20098
|
+
kind: "directive",
|
|
20099
|
+
type: NgClass,
|
|
20100
|
+
selector: "[ngClass]",
|
|
20101
|
+
inputs: ["class", "ngClass"]
|
|
20102
|
+
}, {
|
|
20103
|
+
kind: "directive",
|
|
20104
|
+
type: TooltipDirective,
|
|
20105
|
+
selector: "[eaTooltip]",
|
|
20106
|
+
inputs: [
|
|
20107
|
+
"eaTooltip",
|
|
20108
|
+
"tooltipPosition",
|
|
20109
|
+
"flip",
|
|
20110
|
+
"whenClipped",
|
|
20111
|
+
"maxWidth",
|
|
20112
|
+
"dismissDelay",
|
|
20113
|
+
"tooltipOpen"
|
|
20114
|
+
]
|
|
20115
|
+
}],
|
|
20116
|
+
changeDetection: i0.ChangeDetectionStrategy.OnPush,
|
|
20117
|
+
encapsulation: i0.ViewEncapsulation.None
|
|
20118
|
+
});
|
|
20119
|
+
};
|
|
20120
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
20121
|
+
minVersion: "12.0.0",
|
|
20122
|
+
version: "22.2.0",
|
|
20123
|
+
ngImport: i0,
|
|
20124
|
+
type: LineChartComponent,
|
|
20125
|
+
decorators: [{
|
|
20126
|
+
type: Component,
|
|
20127
|
+
args: [{
|
|
20128
|
+
selector: "ea-line-chart",
|
|
20129
|
+
imports: [NgClass, TooltipDirective],
|
|
20130
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
20131
|
+
encapsulation: ViewEncapsulation.None,
|
|
20132
|
+
template: "<div\n class=\"ea-line-chart\"\n [ngClass]=\"hostClasses()\"\n [style.--ea-chart-duration]=\"animationDuration() + 'ms'\">\n @if (hasData()) {\n <div\n class=\"ea-line-chart__plot\"\n role=\"group\"\n tabindex=\"0\"\n [attr.aria-roledescription]=\"i18n.messages().chart.roleDescription\"\n [attr.aria-label]=\"label()\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n (keydown)=\"onKeydown($event)\">\n @for (pass of renderPass(); track pass) {\n <svg\n class=\"ea-line-chart__svg\"\n aria-hidden=\"true\"\n [attr.width]=\"layout().width\"\n [attr.height]=\"layout().height\"\n [attr.viewBox]=\"'0 0 ' + layout().width + ' ' + layout().height\"\n [style.--ea-line-chart-baseline]=\"layout().baselineY + 'px'\"\n (pointermove)=\"onPointerMove($event)\"\n (pointerdown)=\"onPointerDown($event)\"\n (pointerup)=\"onPointerUp($event)\"\n (pointercancel)=\"onPointerUp($event)\"\n (pointerleave)=\"onPointerLeave()\"\n (wheel)=\"onWheel($event)\"\n (gesturestart)=\"onGestureStart($event)\"\n (gesturechange)=\"onGestureChange($event)\"\n (gestureend)=\"onGestureEnd()\"\n (click)=\"onClick()\">\n @if (layout().windowed) {\n <defs>\n <clipPath [attr.id]=\"clipId\">\n <rect\n [attr.x]=\"layout().left\"\n y=\"0\"\n [attr.width]=\"layout().plotWidth\"\n [attr.height]=\"layout().height\" />\n </clipPath>\n </defs>\n }\n <rect\n class=\"ea-line-chart__hit\"\n [attr.x]=\"layout().left\"\n [attr.y]=\"layout().top\"\n [attr.width]=\"layout().plotWidth\"\n [attr.height]=\"layout().plotHeight\" />\n @for (tick of layout().ticks; track tick.value) {\n @if (showGrid()) {\n <line\n class=\"ea-line-chart__grid\"\n [attr.x1]=\"layout().left\"\n [attr.x2]=\"layout().left + layout().plotWidth\"\n [attr.y1]=\"tick.y\"\n [attr.y2]=\"tick.y\" />\n }\n <text\n class=\"ea-line-chart__axis ea-line-chart__axis--y\"\n text-anchor=\"end\"\n dominant-baseline=\"middle\"\n [attr.x]=\"layout().tickX\"\n [attr.y]=\"tick.y\">\n {{ tick.text }}\n </text>\n }\n <line\n class=\"ea-line-chart__baseline\"\n [attr.x1]=\"layout().left\"\n [attr.x2]=\"layout().left + layout().plotWidth\"\n [attr.y1]=\"layout().top + layout().plotHeight\"\n [attr.y2]=\"layout().top + layout().plotHeight\" />\n @if (layout().axisBreak; as axisBreak) {\n <path\n class=\"ea-line-chart__y-axis\"\n [attr.d]=\"axisBreak.axis\" />\n <path\n class=\"ea-line-chart__axis-break\"\n [attr.d]=\"axisBreak.slashes\" />\n }\n @for (xLabel of layout().xLabels; track xLabel.key) {\n <line\n class=\"ea-line-chart__x-tick\"\n [attr.x1]=\"xLabel.x\"\n [attr.x2]=\"xLabel.x\"\n [attr.y1]=\"layout().axisY\"\n [attr.y2]=\"layout().tickEndY\" />\n <text\n class=\"ea-line-chart__axis ea-line-chart__axis--x\"\n [attr.text-anchor]=\"layout().labelAngle ? 'end' : 'middle'\"\n [attr.dominant-baseline]=\"layout().labelAngle ? 'central' : null\"\n [attr.transform]=\"\n layout().labelAngle\n ? 'rotate(' +\n -layout().labelAngle +\n ' ' +\n xLabel.x +\n ' ' +\n layout().labelY +\n ')'\n : null\n \"\n [attr.x]=\"xLabel.textX\"\n [attr.y]=\"layout().labelY\">\n {{ xLabel.text }}\n </text>\n }\n @if (layout().axisBreak; as axisBreak) {\n <!-- Keeps the break's gap open under a crosshair drawn along the y-axis -->\n <mask\n maskUnits=\"userSpaceOnUse\"\n [attr.id]=\"breakMaskId\">\n <rect\n fill=\"white\"\n x=\"0\"\n y=\"0\"\n [attr.width]=\"layout().width\"\n [attr.height]=\"layout().height\" />\n <rect\n fill=\"black\"\n [attr.x]=\"axisBreak.gap.x\"\n [attr.y]=\"axisBreak.gap.y\"\n [attr.width]=\"axisBreak.gap.width\"\n [attr.height]=\"axisBreak.gap.height\" />\n </mask>\n }\n @if (tooltip(); as tip) {\n <line\n class=\"ea-line-chart__crosshair\"\n [attr.mask]=\"layout().axisBreak ? 'url(#' + breakMaskId + ')' : null\"\n [attr.x1]=\"tip.x\"\n [attr.x2]=\"tip.x\"\n [attr.y1]=\"layout().top\"\n [attr.y2]=\"layout().top + layout().plotHeight\" />\n }\n <g [attr.clip-path]=\"layout().windowed ? 'url(#' + clipId + ')' : null\">\n <g class=\"ea-line-chart__lines\">\n @for (line of layout().series; track $index; let s = $index) {\n <g\n class=\"ea-line-chart__series\"\n [class.ea-line-chart__series--dimmed]=\"isDimmed(s)\"\n [style.--ea-chart-color]=\"line.color\">\n @if (showArea()) {\n @for (area of line.areas; track $index) {\n <path\n class=\"ea-line-chart__area\"\n [attr.d]=\"area\" />\n }\n }\n @for (path of line.paths; track $index) {\n <path\n class=\"ea-line-chart__line\"\n pathLength=\"1\"\n [attr.d]=\"path\" />\n }\n @for (point of line.points; track point.index) {\n @if (showPoints() || isActivePoint(s, point.index)) {\n <circle\n class=\"ea-line-chart__point\"\n [class.ea-line-chart__point--active]=\"\n isActivePoint(s, point.index)\n \"\n [attr.cx]=\"point.x\"\n [attr.cy]=\"point.y\"\n [attr.r]=\"isActivePoint(s, point.index) ? 6 : 4\" />\n }\n }\n </g>\n }\n </g>\n </g>\n @for (tip of tooltips(); track tip.key) {\n <rect\n class=\"ea-line-chart__anchor\"\n width=\"12\"\n height=\"12\"\n [attr.x]=\"tip.x - 6\"\n [attr.y]=\"tip.y - 6\"\n [eaTooltip]=\"tooltipContent\"\n [tooltipOpen]=\"true\"\n [maxWidth]=\"undefined\" />\n }\n </svg>\n }\n <ng-template #tooltipContent>\n @if (tooltip(); as tip) {\n <div class=\"ea-line-chart__tooltip\">\n <span class=\"ea-line-chart__tooltip-title\">{{ tip.title }}</span>\n @for (row of tip.rows; track $index) {\n <span\n class=\"ea-line-chart__tooltip-row\"\n [class.ea-line-chart__tooltip-row--active]=\"row.active\">\n <span\n class=\"ea-line-chart__swatch\"\n [style.--ea-chart-color]=\"row.color\">\n </span>\n <span class=\"ea-line-chart__tooltip-name\">{{ row.name }}</span>\n <span class=\"ea-line-chart__tooltip-value\">{{ row.value }}</span>\n </span>\n }\n </div>\n }\n </ng-template>\n <!-- Hidden through a block, since a table ignores the 1px size and keeps its full height -->\n <div class=\"ea-line-chart__table\">\n <table>\n <caption>\n {{ label() }}\n </caption>\n <thead>\n <tr>\n <th scope=\"col\">{{ i18n.messages().chart.category }}</th>\n\n @for (s of series(); track $index) {\n <th scope=\"col\">{{ s.name }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of labels(); track $index; let i = $index) {\n <tr>\n <th scope=\"row\">{{ row }}</th>\n\n @for (s of series(); track $index) {\n <td>{{ tableValue(s.data[i]) }}</td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n <div\n class=\"ea-line-chart__live\"\n aria-live=\"polite\">\n {{ announcement() }}\n </div>\n } @else {\n <div\n class=\"ea-line-chart__empty\"\n role=\"img\"\n [attr.aria-label]=\"label()\"\n [style.height.px]=\"height()\">\n {{ i18n.messages().chart.noData }}\n </div>\n }\n @if (showsLegend()) {\n <ul\n class=\"ea-line-chart__legend\"\n aria-hidden=\"true\">\n @for (s of series(); track $index; let i = $index) {\n <li class=\"ea-line-chart__legend-item\">\n <span\n class=\"ea-line-chart__legend-line\"\n [style.--ea-chart-color]=\"seriesColor(i)\">\n </span>\n {{ s.name }}\n </li>\n }\n </ul>\n }\n</div>\n",
|
|
20133
|
+
styles: ["@keyframes ea-chart-fade{0%{opacity:0}}@keyframes ea-chart-draw{0%{stroke-dashoffset:1}}@keyframes ea-chart-grow-y{0%{transform:scaleY(0)}}@keyframes ea-chart-grow-x{0%{transform:scaleX(0)}}@keyframes ea-chart-grow{0%{transform:scale(0)}}ea-line-chart{display:block}.ea-line-chart{position:relative;display:flex;flex-direction:column;gap:.75em;font-family:var(--font-family-sans);color:var(--color-text-primary)}.ea-line-chart--2xs{font-size:var(--font-size-2xs)}.ea-line-chart--xs{font-size:var(--font-size-xs)}.ea-line-chart--sm{font-size:var(--font-size-sm)}.ea-line-chart--md{font-size:var(--font-size-md)}.ea-line-chart--lg{font-size:var(--font-size-lg)}.ea-line-chart--xl{font-size:var(--font-size-xl)}.ea-line-chart__plot{position:relative;border-radius:var(--radius-md);outline:none}.ea-line-chart__plot:focus-visible{box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-line-chart__plot:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-line-chart__plot svg{display:block;overflow:visible}.ea-line-chart__svg{direction:ltr;touch-action:pan-y}.ea-line-chart__hit{fill:transparent}.ea-line-chart__grid{stroke:var(--color-divider);stroke-width:1px;shape-rendering:crispEdges}.ea-line-chart__baseline{stroke:var(--color-border-strong);stroke-width:1px;shape-rendering:crispEdges}.ea-line-chart__axis{font-size:.75em;fill:var(--color-text-secondary)}.ea-line-chart__x-tick{stroke:var(--color-border-strong);stroke-width:1px;shape-rendering:crispEdges}.ea-line-chart__y-axis{stroke:var(--color-border-strong);stroke-width:1px;shape-rendering:crispEdges;fill:none}.ea-line-chart__axis-break{fill:none;stroke:var(--color-border-strong);stroke-width:1.5px;stroke-linecap:round}.ea-line-chart__crosshair{stroke:var(--color-border-strong);stroke-width:1px;shape-rendering:crispEdges;pointer-events:none}.ea-line-chart__series{pointer-events:none;transition:opacity var(--duration-fast) var(--ease-out)}.ea-line-chart__series--dimmed{opacity:.35}.ea-line-chart__area{fill:var(--ea-chart-color);fill-opacity:.12}.ea-line-chart__line{fill:none;stroke:var(--ea-chart-color);stroke-width:2px;stroke-linecap:round;stroke-linejoin:round}.ea-line-chart__point{fill:var(--ea-chart-color);stroke:var(--ea-chart-surface, var(--color-bg-base));stroke-width:2px}.ea-line-chart__tooltip{display:flex;flex-direction:column;gap:var(--space-1)}.ea-line-chart__anchor{fill:transparent}.ea-line-chart__tooltip-title{font-weight:var(--font-weight-medium)}.ea-line-chart__tooltip-row{display:flex;align-items:center;gap:.5em}.ea-line-chart__tooltip-row--active{font-weight:var(--font-weight-medium)}.ea-line-chart__tooltip-value{font-weight:var(--font-weight-semibold);font-variant-numeric:tabular-nums}.ea-line-chart__swatch{flex-shrink:0;width:.75em;height:.75em;border-radius:var(--radius-sm);background-color:var(--ea-chart-color)}.ea-line-chart__legend{display:flex;flex-wrap:wrap;justify-content:center;gap:.375em 1em;padding:0;margin:0;font-size:.875em;list-style:none;color:var(--color-text-secondary)}.ea-line-chart__legend-item{display:flex;align-items:center;gap:.375em}.ea-line-chart__legend-line{width:1em;height:2px;border-radius:var(--radius-full);background-color:var(--ea-chart-color)}.ea-line-chart__table,.ea-line-chart__live{position:absolute;overflow:hidden;clip:rect(0,0,0,0);clip-path:inset(50%);width:1px;height:1px;padding:0;margin:-1px;white-space:nowrap;border:0}.ea-line-chart__empty{display:flex;align-items:center;justify-content:center;font-size:.875em;color:var(--color-text-tertiary)}.ea-line-chart--pannable .ea-line-chart__svg{cursor:grab}.ea-line-chart--panning .ea-line-chart__svg{cursor:grabbing;-webkit-user-select:none;user-select:none}.ea-line-chart--animate-draw .ea-line-chart__line{stroke-dasharray:1;animation-name:ea-chart-draw;animation-duration:var(--ea-chart-duration, .6s);animation-timing-function:var(--ease-out);animation-fill-mode:both}@media(prefers-reduced-motion:reduce){.ea-line-chart--animate-draw .ea-line-chart__line{animation:none}}.ea-line-chart--animate-draw .ea-line-chart__area,.ea-line-chart--animate-draw .ea-line-chart__point{animation-name:ea-chart-fade;animation-delay:var(--ea-chart-duration, .6s);animation-duration:var(--ea-chart-duration, .6s);animation-timing-function:var(--ease-out);animation-fill-mode:both}@media(prefers-reduced-motion:reduce){.ea-line-chart--animate-draw .ea-line-chart__area,.ea-line-chart--animate-draw .ea-line-chart__point{animation:none}}.ea-line-chart--animate-reveal .ea-line-chart__lines{clip-path:inset(-8px);animation-name:ea-line-chart-reveal;animation-duration:var(--ea-chart-duration, .6s);animation-timing-function:var(--ease-out);animation-fill-mode:both}@media(prefers-reduced-motion:reduce){.ea-line-chart--animate-reveal .ea-line-chart__lines{animation:none}}.ea-line-chart--animate-fade .ea-line-chart__series{animation-name:ea-chart-fade;animation-duration:var(--ea-chart-duration, .6s);animation-timing-function:var(--ease-out);animation-fill-mode:both}@media(prefers-reduced-motion:reduce){.ea-line-chart--animate-fade .ea-line-chart__series{animation:none}}.ea-line-chart--animate-rise .ea-line-chart__series{animation-name:ea-chart-grow-y;transform-origin:0 var(--ea-line-chart-baseline);animation-duration:var(--ea-chart-duration, .6s);animation-timing-function:var(--ease-out);animation-fill-mode:both}@media(prefers-reduced-motion:reduce){.ea-line-chart--animate-rise .ea-line-chart__series{animation:none}}@keyframes ea-line-chart-reveal{0%{clip-path:inset(-8px 100% -8px -8px)}}\n"]
|
|
20134
|
+
}]
|
|
20135
|
+
}],
|
|
20136
|
+
propDecorators: {
|
|
20137
|
+
labels: [{
|
|
20138
|
+
type: i0.Input,
|
|
20139
|
+
args: [{
|
|
20140
|
+
isSignal: true,
|
|
20141
|
+
alias: "labels",
|
|
20142
|
+
required: false
|
|
20143
|
+
}]
|
|
20144
|
+
}],
|
|
20145
|
+
series: [{
|
|
20146
|
+
type: i0.Input,
|
|
20147
|
+
args: [{
|
|
20148
|
+
isSignal: true,
|
|
20149
|
+
alias: "series",
|
|
20150
|
+
required: false
|
|
20151
|
+
}]
|
|
20152
|
+
}],
|
|
20153
|
+
xValues: [{
|
|
20154
|
+
type: i0.Input,
|
|
20155
|
+
args: [{
|
|
20156
|
+
isSignal: true,
|
|
20157
|
+
alias: "xValues",
|
|
20158
|
+
required: false
|
|
20159
|
+
}]
|
|
20160
|
+
}],
|
|
20161
|
+
xTicks: [{
|
|
20162
|
+
type: i0.Input,
|
|
20163
|
+
args: [{
|
|
20164
|
+
isSignal: true,
|
|
20165
|
+
alias: "xTicks",
|
|
20166
|
+
required: false
|
|
20167
|
+
}]
|
|
20168
|
+
}],
|
|
20169
|
+
visibleXSpan: [{
|
|
20170
|
+
type: i0.Input,
|
|
20171
|
+
args: [{
|
|
20172
|
+
isSignal: true,
|
|
20173
|
+
alias: "visibleXSpan",
|
|
20174
|
+
required: false
|
|
20175
|
+
}]
|
|
20176
|
+
}],
|
|
20177
|
+
curve: [{
|
|
20178
|
+
type: i0.Input,
|
|
20179
|
+
args: [{
|
|
20180
|
+
isSignal: true,
|
|
20181
|
+
alias: "curve",
|
|
20182
|
+
required: false
|
|
20183
|
+
}]
|
|
20184
|
+
}],
|
|
20185
|
+
showArea: [{
|
|
20186
|
+
type: i0.Input,
|
|
20187
|
+
args: [{
|
|
20188
|
+
isSignal: true,
|
|
20189
|
+
alias: "showArea",
|
|
20190
|
+
required: false
|
|
20191
|
+
}]
|
|
20192
|
+
}],
|
|
20193
|
+
showPoints: [{
|
|
20194
|
+
type: i0.Input,
|
|
20195
|
+
args: [{
|
|
20196
|
+
isSignal: true,
|
|
20197
|
+
alias: "showPoints",
|
|
20198
|
+
required: false
|
|
20199
|
+
}]
|
|
20200
|
+
}],
|
|
20201
|
+
showGrid: [{
|
|
20202
|
+
type: i0.Input,
|
|
20203
|
+
args: [{
|
|
20204
|
+
isSignal: true,
|
|
20205
|
+
alias: "showGrid",
|
|
20206
|
+
required: false
|
|
20207
|
+
}]
|
|
20208
|
+
}],
|
|
20209
|
+
showLegend: [{
|
|
20210
|
+
type: i0.Input,
|
|
20211
|
+
args: [{
|
|
20212
|
+
isSignal: true,
|
|
20213
|
+
alias: "showLegend",
|
|
20214
|
+
required: false
|
|
20215
|
+
}]
|
|
20216
|
+
}],
|
|
20217
|
+
yMin: [{
|
|
20218
|
+
type: i0.Input,
|
|
20219
|
+
args: [{
|
|
20220
|
+
isSignal: true,
|
|
20221
|
+
alias: "yMin",
|
|
20222
|
+
required: false
|
|
20223
|
+
}]
|
|
20224
|
+
}],
|
|
20225
|
+
yMax: [{
|
|
20226
|
+
type: i0.Input,
|
|
20227
|
+
args: [{
|
|
20228
|
+
isSignal: true,
|
|
20229
|
+
alias: "yMax",
|
|
20230
|
+
required: false
|
|
20231
|
+
}]
|
|
20232
|
+
}],
|
|
20233
|
+
xLabelOrientation: [{
|
|
20234
|
+
type: i0.Input,
|
|
20235
|
+
args: [{
|
|
20236
|
+
isSignal: true,
|
|
20237
|
+
alias: "xLabelOrientation",
|
|
20238
|
+
required: false
|
|
20239
|
+
}]
|
|
20240
|
+
}],
|
|
20241
|
+
showAxisBreak: [{
|
|
20242
|
+
type: i0.Input,
|
|
20243
|
+
args: [{
|
|
20244
|
+
isSignal: true,
|
|
20245
|
+
alias: "showAxisBreak",
|
|
20246
|
+
required: false
|
|
20247
|
+
}]
|
|
20248
|
+
}],
|
|
20249
|
+
height: [{
|
|
20250
|
+
type: i0.Input,
|
|
20251
|
+
args: [{
|
|
20252
|
+
isSignal: true,
|
|
20253
|
+
alias: "height",
|
|
20254
|
+
required: false
|
|
20255
|
+
}]
|
|
20256
|
+
}],
|
|
20257
|
+
size: [{
|
|
20258
|
+
type: i0.Input,
|
|
20259
|
+
args: [{
|
|
20260
|
+
isSignal: true,
|
|
20261
|
+
alias: "size",
|
|
20262
|
+
required: false
|
|
20263
|
+
}]
|
|
20264
|
+
}],
|
|
20265
|
+
animation: [{
|
|
20266
|
+
type: i0.Input,
|
|
20267
|
+
args: [{
|
|
20268
|
+
isSignal: true,
|
|
20269
|
+
alias: "animation",
|
|
20270
|
+
required: false
|
|
20271
|
+
}]
|
|
20272
|
+
}],
|
|
20273
|
+
animationDuration: [{
|
|
20274
|
+
type: i0.Input,
|
|
20275
|
+
args: [{
|
|
20276
|
+
isSignal: true,
|
|
20277
|
+
alias: "animationDuration",
|
|
20278
|
+
required: false
|
|
20279
|
+
}]
|
|
20280
|
+
}],
|
|
20281
|
+
formatValue: [{
|
|
20282
|
+
type: i0.Input,
|
|
20283
|
+
args: [{
|
|
20284
|
+
isSignal: true,
|
|
20285
|
+
alias: "formatValue",
|
|
20286
|
+
required: false
|
|
20287
|
+
}]
|
|
20288
|
+
}],
|
|
20289
|
+
ariaLabel: [{
|
|
20290
|
+
type: i0.Input,
|
|
20291
|
+
args: [{
|
|
20292
|
+
isSignal: true,
|
|
20293
|
+
alias: "aria-label",
|
|
20294
|
+
required: false
|
|
20295
|
+
}]
|
|
20296
|
+
}],
|
|
20297
|
+
pointClick: [{
|
|
20298
|
+
type: i0.Output,
|
|
20299
|
+
args: ["pointClick"]
|
|
20300
|
+
}],
|
|
20301
|
+
activePointChange: [{
|
|
20302
|
+
type: i0.Output,
|
|
20303
|
+
args: ["activePointChange"]
|
|
20304
|
+
}],
|
|
20305
|
+
visibleRangeChange: [{
|
|
20306
|
+
type: i0.Output,
|
|
20307
|
+
args: ["visibleRangeChange"]
|
|
20308
|
+
}]
|
|
20309
|
+
}
|
|
20310
|
+
});
|
|
18086
20311
|
var MenuComponent = class MenuComponent {
|
|
18087
20312
|
injector = inject(Injector);
|
|
18088
20313
|
i18n = inject(EagamiI18nService);
|
|
@@ -18749,7 +20974,8 @@ var TagComponent = class TagComponent {
|
|
|
18749
20974
|
"flip",
|
|
18750
20975
|
"whenClipped",
|
|
18751
20976
|
"maxWidth",
|
|
18752
|
-
"dismissDelay"
|
|
20977
|
+
"dismissDelay",
|
|
20978
|
+
"tooltipOpen"
|
|
18753
20979
|
]
|
|
18754
20980
|
},
|
|
18755
20981
|
{
|
|
@@ -19423,7 +21649,7 @@ var MultiSelectComponent = class MultiSelectComponent {
|
|
|
19423
21649
|
],
|
|
19424
21650
|
ngImport: i0,
|
|
19425
21651
|
template: "<div class=\"ea-multi-select-field ea-multi-select-field--{{ size() }}\">\n @if (label(); as labelText) {\n <ea-field-label\n [text]=\"labelText\"\n [icon]=\"labelIcon()\"\n [forId]=\"id()\"\n [labelId]=\"id() + '-label'\"\n [required]=\"required()\" />\n }\n\n <div class=\"ea-multi-select\">\n <div\n #wrapperEl\n class=\"ea-multi-select__trigger-wrapper\"\n [ngClass]=\"wrapperClasses()\"\n (click)=\"onTriggerAreaClick()\">\n <div\n #triggerEl\n class=\"ea-multi-select__trigger\"\n [ngClass]=\"triggerClasses()\"\n [id]=\"id()\"\n role=\"combobox\"\n [attr.tabindex]=\"isDisabled() ? -1 : 0\"\n [attr.aria-labelledby]=\"label() ? id() + '-label' : null\"\n [attr.aria-label]=\"label() ? null : (ariaLabel() ?? null)\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-controls]=\"isOpen() ? listboxId() : null\"\n [attr.aria-activedescendant]=\"isOpen() && !searchable() ? activeOptionId() : null\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n [attr.aria-required]=\"required() || null\"\n [attr.aria-invalid]=\"hasError() || null\"\n [attr.aria-describedby]=\"\n showError() ? id() + '-error' : showHint() ? id() + '-hint' : null\n \"\n (keydown)=\"handleTriggerKeydown($event)\">\n <span class=\"ea-multi-select__trigger-content\">\n @if (!hasValue()) {\n <span class=\"ea-multi-select__trigger-placeholder\">\n <bdi>{{ resolvedPlaceholder() }}</bdi>\n </span>\n } @else {\n @for (opt of visibleChips(); track opt.value) {\n <ea-tag\n [size]=\"size()\"\n variant=\"default\"\n [maxWidth]=\"maxChipWidth()\"\n [removable]=\"!isDisabled() && !readonly()\"\n [removeTabbable]=\"false\"\n [removeLabel]=\"i18n.messages().multiSelect.removeOption(opt.label)\"\n (removed)=\"removeChip(opt)\">\n <span>{{ opt.label }}</span>\n </ea-tag>\n }\n @if (hiddenChipCount() > 0) {\n <span class=\"ea-multi-select__more\">+{{ hiddenChipCount() }}</span>\n }\n }\n </span>\n </div>\n @if (hasValue() && !isDisabled() && !readonly()) {\n <button\n type=\"button\"\n class=\"ea-multi-select__clear\"\n [attr.aria-label]=\"i18n.messages().multiSelect.clearAll\"\n (click)=\"clear($event)\">\n <ea-icon-x\n class=\"ea-multi-select__clear-icon\"\n aria-hidden=\"true\" />\n </button>\n }\n <ea-icon-chevron-down\n class=\"ea-multi-select__trigger-icon\"\n aria-hidden=\"true\" />\n </div>\n\n <ea-popover\n [anchor]=\"wrapperEl\"\n [open]=\"isOpen()\"\n placement=\"bottom-start\"\n [aria-label]=\"i18n.messages().multiSelect.dialogLabel\"\n [matchAnchorWidth]=\"true\"\n [maxWidth]=\"popoverMaxWidth()\"\n [closeOnEscape]=\"false\"\n scrollBehavior=\"reposition\"\n (closeRequested)=\"onPopoverCloseRequested()\">\n <div\n class=\"ea-multi-select__popover\"\n [ngClass]=\"menuClasses()\"\n [style.max-height.px]=\"popoverMaxHeight()\">\n @if (searchable()) {\n <div class=\"ea-multi-select__search\">\n <ea-icon-search\n class=\"ea-multi-select__search-icon\"\n aria-hidden=\"true\" />\n <input\n #searchEl\n type=\"text\"\n dir=\"auto\"\n class=\"ea-multi-select__search-input\"\n autocomplete=\"off\"\n [placeholder]=\"resolvedSearchPlaceholder()\"\n [value]=\"searchTerm()\"\n [attr.aria-controls]=\"listboxId()\"\n [attr.aria-activedescendant]=\"activeOptionId()\"\n (input)=\"onSearchInput($event)\"\n (keydown)=\"handlePopoverKeydown($event)\" />\n </div>\n }\n\n <ul\n #listEl\n class=\"ea-multi-select__list\"\n role=\"listbox\"\n aria-multiselectable=\"true\"\n [id]=\"listboxId()\"\n [attr.aria-label]=\"label() ?? ariaLabel() ?? null\">\n @if (selectAllVisible()) {\n <li\n class=\"ea-multi-select__option ea-multi-select__option--select-all\"\n [class.ea-multi-select__option--focused]=\"focusedIndex() === 0\"\n [id]=\"id() + '-opt-0'\"\n role=\"option\"\n [attr.aria-selected]=\"selectAllState() === 'all'\"\n [attr.aria-checked]=\"selectAllAriaChecked()\"\n (click)=\"onSelectAllClick()\">\n <ea-checkbox\n size=\"sm\"\n inert\n aria-hidden=\"true\"\n [checked]=\"selectAllState() === 'all'\"\n [indeterminate]=\"selectAllState() === 'some'\" />\n <span class=\"ea-multi-select__option-label\">\n {{ i18n.messages().multiSelect.selectAll }}\n </span>\n </li>\n }\n @for (group of renderedGroups(); track $index) {\n <li\n class=\"ea-multi-select__group\"\n [class.ea-multi-select__group--ruled]=\"group.rule\"\n role=\"presentation\">\n @if (group.label; as groupLabel) {\n <span\n class=\"ea-multi-select__group-label\"\n aria-hidden=\"true\">\n {{ groupLabel }}\n </span>\n }\n <ul\n class=\"ea-multi-select__group-options\"\n [attr.role]=\"grouped() ? 'group' : 'presentation'\"\n [attr.aria-label]=\"group.label ?? null\">\n @for (entry of group.options; track entry.option.value) {\n <li\n class=\"ea-multi-select__option\"\n [class.ea-multi-select__option--focused]=\"\n focusedIndex() === entry.index + selectAllOffset()\n \"\n [class.ea-multi-select__option--disabled]=\"entry.option.disabled\"\n [id]=\"id() + '-opt-' + (entry.index + selectAllOffset())\"\n role=\"option\"\n [attr.aria-selected]=\"selectedSet().has(entry.option.value)\"\n [attr.aria-disabled]=\"entry.option.disabled || null\"\n (click)=\"onOptionClick(entry.option, entry.index)\">\n <ea-checkbox\n size=\"sm\"\n inert\n aria-hidden=\"true\"\n [checked]=\"selectedSet().has(entry.option.value)\"\n [disabled]=\"!!entry.option.disabled\" />\n <span\n #optionLabelEl\n class=\"ea-multi-select__option-label\"\n [attr.data-value]=\"entry.option.value\"\n [eaTooltip]=\"\n clippedOptions().has(entry.option.value) ? entry.option.label : ''\n \">\n {{ entry.option.label }}\n </span>\n </li>\n }\n </ul>\n </li>\n }\n @if (creatableText(); as newText) {\n <li\n class=\"ea-multi-select__option ea-multi-select__option--create\"\n [class.ea-multi-select__option--focused]=\"focusedIndex() === createRow()\"\n [id]=\"id() + '-opt-' + createRow()\"\n role=\"option\"\n [attr.aria-selected]=\"false\"\n (click)=\"createOption()\">\n <ea-icon-plus\n class=\"ea-multi-select__create-icon\"\n aria-hidden=\"true\" />\n <span class=\"ea-multi-select__option-label\">\n {{ i18n.messages().multiSelect.create(newText) }}\n </span>\n </li>\n }\n </ul>\n @if (filteredOptions().length === 0 && !creatableText()) {\n <div\n class=\"ea-multi-select__empty\"\n role=\"status\">\n {{ i18n.messages().multiSelect.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",
|
|
19426
|
-
styles: [".ea-multi-select-field{display:flex;flex-direction:column;gap:.375em;--ea-field-label-size: .875em;--ea-field-messages-size: .8125em}.ea-multi-select-field--2xs{font-size:var(--font-size-2xs)}.ea-multi-select-field--xs{font-size:var(--font-size-xs)}.ea-multi-select-field--sm{font-size:var(--font-size-sm)}.ea-multi-select-field--md{font-size:var(--font-size-md)}.ea-multi-select-field--lg{font-size:var(--font-size-lg)}.ea-multi-select-field--xl{font-size:var(--font-size-xl)}.ea-multi-select{position:relative}.ea-multi-select__trigger-wrapper{position:relative;display:flex;align-items:center;gap:.5em;width:100%;min-height:2.5em;padding:.375em .75em;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-md);background-color:var(--color-bg-base);color:var(--color-text-primary);cursor:pointer;transition:var(--transition-colors),var(--transition-shadow)}.ea-multi-select__trigger-wrapper:has(ea-tag){padding-block:.125em}.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger:focus-visible){box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger:focus-visible){outline:2px solid Highlight;outline-offset:2px}}.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--open){border-color:var(--color-border-focus);box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--open){outline:2px solid Highlight;outline-offset:2px}}.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--error){border-color:var(--color-error-default)}.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--error.ea-multi-select__trigger--open){box-shadow:var(--shadow-focus-ring-error)}@media(forced-colors:active){.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--error.ea-multi-select__trigger--open){outline:2px solid Highlight;outline-offset:2px}}.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--disabled){background-color:var(--color-bg-muted);opacity:.6;cursor:default}.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--readonly){cursor:default}.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--readonly:focus-visible){border-color:var(--color-border-focus);box-shadow:none}@media(forced-colors:active){.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--readonly:focus-visible){outline:2px solid Highlight;outline-offset:2px}}.ea-multi-select__trigger{display:flex;align-items:center;flex:1;min-width:0;text-align:start;font-family:var(--font-family-sans);cursor:pointer}.ea-multi-select__trigger:focus-visible{outline:none}.ea-multi-select__trigger--disabled,.ea-multi-select__trigger--readonly{cursor:default}.ea-multi-select__trigger-content{display:flex;flex-wrap:nowrap;align-items:center;gap:.25em;flex:1;min-width:0;overflow-x:auto;scrollbar-width:none}.ea-multi-select__trigger-content::-webkit-scrollbar{display:none}.ea-multi-select__trigger-content ea-tag{flex-shrink:0;--ea-tag-padding-block: 0}.ea-multi-select__trigger-placeholder{color:var(--color-text-tertiary)}.ea-multi-select__trigger-icon{flex-shrink:0;width:1em;height:1em;color:var(--color-text-secondary);transition:var(--transition-transform)}.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--open) .ea-multi-select__trigger-icon{transform:rotate(180deg)}.ea-multi-select__more{display:inline-flex;flex-shrink:0;align-items:center;padding:0 .
|
|
21652
|
+
styles: [".ea-multi-select-field{display:flex;flex-direction:column;gap:.375em;--ea-field-label-size: .875em;--ea-field-messages-size: .8125em}.ea-multi-select-field--2xs{font-size:var(--font-size-2xs)}.ea-multi-select-field--xs{font-size:var(--font-size-xs)}.ea-multi-select-field--sm{font-size:var(--font-size-sm)}.ea-multi-select-field--md{font-size:var(--font-size-md)}.ea-multi-select-field--lg{font-size:var(--font-size-lg)}.ea-multi-select-field--xl{font-size:var(--font-size-xl)}.ea-multi-select{position:relative}.ea-multi-select__trigger-wrapper{position:relative;display:flex;align-items:center;gap:.5em;width:100%;min-height:2.5em;padding:.375em .75em;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-md);background-color:var(--color-bg-base);color:var(--color-text-primary);cursor:pointer;transition:var(--transition-colors),var(--transition-shadow)}.ea-multi-select__trigger-wrapper:has(ea-tag){padding-block:.125em}.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger:focus-visible){box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger:focus-visible){outline:2px solid Highlight;outline-offset:2px}}.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--open){border-color:var(--color-border-focus);box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--open){outline:2px solid Highlight;outline-offset:2px}}.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--error){border-color:var(--color-error-default)}.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--error.ea-multi-select__trigger--open){box-shadow:var(--shadow-focus-ring-error)}@media(forced-colors:active){.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--error.ea-multi-select__trigger--open){outline:2px solid Highlight;outline-offset:2px}}.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--disabled){background-color:var(--color-bg-muted);opacity:.6;cursor:default}.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--readonly){cursor:default}.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--readonly:focus-visible){border-color:var(--color-border-focus);box-shadow:none}@media(forced-colors:active){.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--readonly:focus-visible){outline:2px solid Highlight;outline-offset:2px}}.ea-multi-select__trigger{display:flex;align-items:center;flex:1;min-width:0;text-align:start;font-family:var(--font-family-sans);cursor:pointer}.ea-multi-select__trigger:focus-visible{outline:none}.ea-multi-select__trigger--disabled,.ea-multi-select__trigger--readonly{cursor:default}.ea-multi-select__trigger-content{display:flex;flex-wrap:nowrap;align-items:center;gap:.25em;flex:1;min-width:0;overflow-x:auto;scrollbar-width:none}.ea-multi-select__trigger-content::-webkit-scrollbar{display:none}.ea-multi-select__trigger-content ea-tag{flex-shrink:0;--ea-tag-padding-block: 0}.ea-multi-select__trigger-placeholder{color:var(--color-text-tertiary)}.ea-multi-select__trigger-icon{flex-shrink:0;width:1em;height:1em;color:var(--color-text-secondary);transition:var(--transition-transform)}.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--open) .ea-multi-select__trigger-icon{transform:rotate(180deg)}.ea-multi-select__more{display:inline-flex;flex-shrink:0;align-items:center;padding:0 .4285714286em;font-size:.875em;font-weight:var(--font-weight-medium);border-radius:var(--radius-lg);background-color:var(--color-bg-muted);color:var(--color-text-secondary)}.ea-multi-select__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-multi-select__clear>*{font-size:1.25em}.ea-multi-select__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-multi-select__clear:hover{background-color:var(--color-state-hover);color:var(--color-text-primary)}.ea-multi-select__clear:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-multi-select__clear:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-multi-select__clear:disabled{cursor:default;opacity:.5}.ea-multi-select__clear{flex-shrink:0}.ea-multi-select__popover{display:flex;flex-direction:column;overflow:hidden;max-height:20rem;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);background-color:var(--ea-multi-select-popover-background-color, var(--color-bg-elevated))}@media(forced-colors:active){.ea-multi-select__popover{border:1px solid CanvasText}}.ea-multi-select__popover--2xs{font-size:var(--font-size-2xs)}.ea-multi-select__popover--xs{font-size:var(--font-size-xs)}.ea-multi-select__popover--sm{font-size:var(--font-size-sm)}.ea-multi-select__popover--md{font-size:var(--font-size-md)}.ea-multi-select__popover--lg{font-size:var(--font-size-lg)}.ea-multi-select__popover--xl{font-size:var(--font-size-xl)}.ea-multi-select__search{display:flex;align-items:center;gap:.5em;flex-shrink:0;padding:.5em .75em;border-bottom:var(--border-width-thin) solid var(--color-border-default)}.ea-multi-select__search-icon{flex-shrink:0;width:1em;height:1em;color:var(--color-text-tertiary)}.ea-multi-select__search-input{flex:1;min-width:0;padding:0;border:none;background:none;font-family:var(--font-family-sans);font-size:inherit;color:var(--color-text-primary)}.ea-multi-select__search-input::placeholder{color:var(--color-text-tertiary);opacity:1}.ea-multi-select__search-input:focus{outline:none}.ea-multi-select__list{overflow-y:auto;overscroll-behavior:none;flex:1;margin:0;padding:.25em 0;list-style:none}.ea-multi-select__group{position:relative}.ea-multi-select__group--ruled{padding-top:.25em;margin-top:.25em}.ea-multi-select__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-multi-select__group-options{padding:0;margin:0;list-style:none}.ea-multi-select__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-multi-select__option{display:flex;align-items:center;gap:.5em;padding:.375em .75em;font-size:inherit;font-family:var(--font-family-sans);color:var(--color-text-primary);cursor:pointer;transition:var(--transition-colors)}.ea-multi-select__option--focused{background-color:var(--color-state-hover)}@media(forced-colors:active){.ea-multi-select__option--focused{background-color:Highlight;color:HighlightText}}.ea-multi-select__option--disabled{color:var(--color-text-disabled);cursor:default}@media(forced-colors:active){.ea-multi-select__option--disabled{color:GrayText}}.ea-multi-select__option--select-all{border-bottom:var(--border-width-thin) solid var(--color-border-default);font-weight:var(--font-weight-medium)}.ea-multi-select__option--create{font-weight:var(--font-weight-medium);color:var(--color-brand-text)}.ea-multi-select__option:hover:not(.ea-multi-select__option--disabled){background-color:var(--color-state-hover)}@media(forced-colors:active){.ea-multi-select__option:hover:not(.ea-multi-select__option--disabled){background-color:Highlight;color:HighlightText}}.ea-multi-select__option ea-checkbox{pointer-events:none;display:inline-flex;align-items:center;line-height:1}.ea-multi-select__create-icon{flex-shrink:0;width:1em;height:1em}.ea-multi-select__option-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ea-multi-select__empty{padding:.75em;font-size:inherit;text-align:center;color:var(--color-text-tertiary);list-style:none}\n"],
|
|
19427
21653
|
dependencies: [
|
|
19428
21654
|
{
|
|
19429
21655
|
kind: "component",
|
|
@@ -19541,7 +21767,8 @@ var MultiSelectComponent = class MultiSelectComponent {
|
|
|
19541
21767
|
"flip",
|
|
19542
21768
|
"whenClipped",
|
|
19543
21769
|
"maxWidth",
|
|
19544
|
-
"dismissDelay"
|
|
21770
|
+
"dismissDelay",
|
|
21771
|
+
"tooltipOpen"
|
|
19545
21772
|
]
|
|
19546
21773
|
},
|
|
19547
21774
|
{
|
|
@@ -19582,7 +21809,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
19582
21809
|
multi: true
|
|
19583
21810
|
}],
|
|
19584
21811
|
template: "<div class=\"ea-multi-select-field ea-multi-select-field--{{ size() }}\">\n @if (label(); as labelText) {\n <ea-field-label\n [text]=\"labelText\"\n [icon]=\"labelIcon()\"\n [forId]=\"id()\"\n [labelId]=\"id() + '-label'\"\n [required]=\"required()\" />\n }\n\n <div class=\"ea-multi-select\">\n <div\n #wrapperEl\n class=\"ea-multi-select__trigger-wrapper\"\n [ngClass]=\"wrapperClasses()\"\n (click)=\"onTriggerAreaClick()\">\n <div\n #triggerEl\n class=\"ea-multi-select__trigger\"\n [ngClass]=\"triggerClasses()\"\n [id]=\"id()\"\n role=\"combobox\"\n [attr.tabindex]=\"isDisabled() ? -1 : 0\"\n [attr.aria-labelledby]=\"label() ? id() + '-label' : null\"\n [attr.aria-label]=\"label() ? null : (ariaLabel() ?? null)\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-controls]=\"isOpen() ? listboxId() : null\"\n [attr.aria-activedescendant]=\"isOpen() && !searchable() ? activeOptionId() : null\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n [attr.aria-required]=\"required() || null\"\n [attr.aria-invalid]=\"hasError() || null\"\n [attr.aria-describedby]=\"\n showError() ? id() + '-error' : showHint() ? id() + '-hint' : null\n \"\n (keydown)=\"handleTriggerKeydown($event)\">\n <span class=\"ea-multi-select__trigger-content\">\n @if (!hasValue()) {\n <span class=\"ea-multi-select__trigger-placeholder\">\n <bdi>{{ resolvedPlaceholder() }}</bdi>\n </span>\n } @else {\n @for (opt of visibleChips(); track opt.value) {\n <ea-tag\n [size]=\"size()\"\n variant=\"default\"\n [maxWidth]=\"maxChipWidth()\"\n [removable]=\"!isDisabled() && !readonly()\"\n [removeTabbable]=\"false\"\n [removeLabel]=\"i18n.messages().multiSelect.removeOption(opt.label)\"\n (removed)=\"removeChip(opt)\">\n <span>{{ opt.label }}</span>\n </ea-tag>\n }\n @if (hiddenChipCount() > 0) {\n <span class=\"ea-multi-select__more\">+{{ hiddenChipCount() }}</span>\n }\n }\n </span>\n </div>\n @if (hasValue() && !isDisabled() && !readonly()) {\n <button\n type=\"button\"\n class=\"ea-multi-select__clear\"\n [attr.aria-label]=\"i18n.messages().multiSelect.clearAll\"\n (click)=\"clear($event)\">\n <ea-icon-x\n class=\"ea-multi-select__clear-icon\"\n aria-hidden=\"true\" />\n </button>\n }\n <ea-icon-chevron-down\n class=\"ea-multi-select__trigger-icon\"\n aria-hidden=\"true\" />\n </div>\n\n <ea-popover\n [anchor]=\"wrapperEl\"\n [open]=\"isOpen()\"\n placement=\"bottom-start\"\n [aria-label]=\"i18n.messages().multiSelect.dialogLabel\"\n [matchAnchorWidth]=\"true\"\n [maxWidth]=\"popoverMaxWidth()\"\n [closeOnEscape]=\"false\"\n scrollBehavior=\"reposition\"\n (closeRequested)=\"onPopoverCloseRequested()\">\n <div\n class=\"ea-multi-select__popover\"\n [ngClass]=\"menuClasses()\"\n [style.max-height.px]=\"popoverMaxHeight()\">\n @if (searchable()) {\n <div class=\"ea-multi-select__search\">\n <ea-icon-search\n class=\"ea-multi-select__search-icon\"\n aria-hidden=\"true\" />\n <input\n #searchEl\n type=\"text\"\n dir=\"auto\"\n class=\"ea-multi-select__search-input\"\n autocomplete=\"off\"\n [placeholder]=\"resolvedSearchPlaceholder()\"\n [value]=\"searchTerm()\"\n [attr.aria-controls]=\"listboxId()\"\n [attr.aria-activedescendant]=\"activeOptionId()\"\n (input)=\"onSearchInput($event)\"\n (keydown)=\"handlePopoverKeydown($event)\" />\n </div>\n }\n\n <ul\n #listEl\n class=\"ea-multi-select__list\"\n role=\"listbox\"\n aria-multiselectable=\"true\"\n [id]=\"listboxId()\"\n [attr.aria-label]=\"label() ?? ariaLabel() ?? null\">\n @if (selectAllVisible()) {\n <li\n class=\"ea-multi-select__option ea-multi-select__option--select-all\"\n [class.ea-multi-select__option--focused]=\"focusedIndex() === 0\"\n [id]=\"id() + '-opt-0'\"\n role=\"option\"\n [attr.aria-selected]=\"selectAllState() === 'all'\"\n [attr.aria-checked]=\"selectAllAriaChecked()\"\n (click)=\"onSelectAllClick()\">\n <ea-checkbox\n size=\"sm\"\n inert\n aria-hidden=\"true\"\n [checked]=\"selectAllState() === 'all'\"\n [indeterminate]=\"selectAllState() === 'some'\" />\n <span class=\"ea-multi-select__option-label\">\n {{ i18n.messages().multiSelect.selectAll }}\n </span>\n </li>\n }\n @for (group of renderedGroups(); track $index) {\n <li\n class=\"ea-multi-select__group\"\n [class.ea-multi-select__group--ruled]=\"group.rule\"\n role=\"presentation\">\n @if (group.label; as groupLabel) {\n <span\n class=\"ea-multi-select__group-label\"\n aria-hidden=\"true\">\n {{ groupLabel }}\n </span>\n }\n <ul\n class=\"ea-multi-select__group-options\"\n [attr.role]=\"grouped() ? 'group' : 'presentation'\"\n [attr.aria-label]=\"group.label ?? null\">\n @for (entry of group.options; track entry.option.value) {\n <li\n class=\"ea-multi-select__option\"\n [class.ea-multi-select__option--focused]=\"\n focusedIndex() === entry.index + selectAllOffset()\n \"\n [class.ea-multi-select__option--disabled]=\"entry.option.disabled\"\n [id]=\"id() + '-opt-' + (entry.index + selectAllOffset())\"\n role=\"option\"\n [attr.aria-selected]=\"selectedSet().has(entry.option.value)\"\n [attr.aria-disabled]=\"entry.option.disabled || null\"\n (click)=\"onOptionClick(entry.option, entry.index)\">\n <ea-checkbox\n size=\"sm\"\n inert\n aria-hidden=\"true\"\n [checked]=\"selectedSet().has(entry.option.value)\"\n [disabled]=\"!!entry.option.disabled\" />\n <span\n #optionLabelEl\n class=\"ea-multi-select__option-label\"\n [attr.data-value]=\"entry.option.value\"\n [eaTooltip]=\"\n clippedOptions().has(entry.option.value) ? entry.option.label : ''\n \">\n {{ entry.option.label }}\n </span>\n </li>\n }\n </ul>\n </li>\n }\n @if (creatableText(); as newText) {\n <li\n class=\"ea-multi-select__option ea-multi-select__option--create\"\n [class.ea-multi-select__option--focused]=\"focusedIndex() === createRow()\"\n [id]=\"id() + '-opt-' + createRow()\"\n role=\"option\"\n [attr.aria-selected]=\"false\"\n (click)=\"createOption()\">\n <ea-icon-plus\n class=\"ea-multi-select__create-icon\"\n aria-hidden=\"true\" />\n <span class=\"ea-multi-select__option-label\">\n {{ i18n.messages().multiSelect.create(newText) }}\n </span>\n </li>\n }\n </ul>\n @if (filteredOptions().length === 0 && !creatableText()) {\n <div\n class=\"ea-multi-select__empty\"\n role=\"status\">\n {{ i18n.messages().multiSelect.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",
|
|
19585
|
-
styles: [".ea-multi-select-field{display:flex;flex-direction:column;gap:.375em;--ea-field-label-size: .875em;--ea-field-messages-size: .8125em}.ea-multi-select-field--2xs{font-size:var(--font-size-2xs)}.ea-multi-select-field--xs{font-size:var(--font-size-xs)}.ea-multi-select-field--sm{font-size:var(--font-size-sm)}.ea-multi-select-field--md{font-size:var(--font-size-md)}.ea-multi-select-field--lg{font-size:var(--font-size-lg)}.ea-multi-select-field--xl{font-size:var(--font-size-xl)}.ea-multi-select{position:relative}.ea-multi-select__trigger-wrapper{position:relative;display:flex;align-items:center;gap:.5em;width:100%;min-height:2.5em;padding:.375em .75em;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-md);background-color:var(--color-bg-base);color:var(--color-text-primary);cursor:pointer;transition:var(--transition-colors),var(--transition-shadow)}.ea-multi-select__trigger-wrapper:has(ea-tag){padding-block:.125em}.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger:focus-visible){box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger:focus-visible){outline:2px solid Highlight;outline-offset:2px}}.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--open){border-color:var(--color-border-focus);box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--open){outline:2px solid Highlight;outline-offset:2px}}.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--error){border-color:var(--color-error-default)}.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--error.ea-multi-select__trigger--open){box-shadow:var(--shadow-focus-ring-error)}@media(forced-colors:active){.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--error.ea-multi-select__trigger--open){outline:2px solid Highlight;outline-offset:2px}}.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--disabled){background-color:var(--color-bg-muted);opacity:.6;cursor:default}.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--readonly){cursor:default}.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--readonly:focus-visible){border-color:var(--color-border-focus);box-shadow:none}@media(forced-colors:active){.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--readonly:focus-visible){outline:2px solid Highlight;outline-offset:2px}}.ea-multi-select__trigger{display:flex;align-items:center;flex:1;min-width:0;text-align:start;font-family:var(--font-family-sans);cursor:pointer}.ea-multi-select__trigger:focus-visible{outline:none}.ea-multi-select__trigger--disabled,.ea-multi-select__trigger--readonly{cursor:default}.ea-multi-select__trigger-content{display:flex;flex-wrap:nowrap;align-items:center;gap:.25em;flex:1;min-width:0;overflow-x:auto;scrollbar-width:none}.ea-multi-select__trigger-content::-webkit-scrollbar{display:none}.ea-multi-select__trigger-content ea-tag{flex-shrink:0;--ea-tag-padding-block: 0}.ea-multi-select__trigger-placeholder{color:var(--color-text-tertiary)}.ea-multi-select__trigger-icon{flex-shrink:0;width:1em;height:1em;color:var(--color-text-secondary);transition:var(--transition-transform)}.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--open) .ea-multi-select__trigger-icon{transform:rotate(180deg)}.ea-multi-select__more{display:inline-flex;flex-shrink:0;align-items:center;padding:0 .
|
|
21812
|
+
styles: [".ea-multi-select-field{display:flex;flex-direction:column;gap:.375em;--ea-field-label-size: .875em;--ea-field-messages-size: .8125em}.ea-multi-select-field--2xs{font-size:var(--font-size-2xs)}.ea-multi-select-field--xs{font-size:var(--font-size-xs)}.ea-multi-select-field--sm{font-size:var(--font-size-sm)}.ea-multi-select-field--md{font-size:var(--font-size-md)}.ea-multi-select-field--lg{font-size:var(--font-size-lg)}.ea-multi-select-field--xl{font-size:var(--font-size-xl)}.ea-multi-select{position:relative}.ea-multi-select__trigger-wrapper{position:relative;display:flex;align-items:center;gap:.5em;width:100%;min-height:2.5em;padding:.375em .75em;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-md);background-color:var(--color-bg-base);color:var(--color-text-primary);cursor:pointer;transition:var(--transition-colors),var(--transition-shadow)}.ea-multi-select__trigger-wrapper:has(ea-tag){padding-block:.125em}.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger:focus-visible){box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger:focus-visible){outline:2px solid Highlight;outline-offset:2px}}.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--open){border-color:var(--color-border-focus);box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--open){outline:2px solid Highlight;outline-offset:2px}}.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--error){border-color:var(--color-error-default)}.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--error.ea-multi-select__trigger--open){box-shadow:var(--shadow-focus-ring-error)}@media(forced-colors:active){.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--error.ea-multi-select__trigger--open){outline:2px solid Highlight;outline-offset:2px}}.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--disabled){background-color:var(--color-bg-muted);opacity:.6;cursor:default}.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--readonly){cursor:default}.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--readonly:focus-visible){border-color:var(--color-border-focus);box-shadow:none}@media(forced-colors:active){.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--readonly:focus-visible){outline:2px solid Highlight;outline-offset:2px}}.ea-multi-select__trigger{display:flex;align-items:center;flex:1;min-width:0;text-align:start;font-family:var(--font-family-sans);cursor:pointer}.ea-multi-select__trigger:focus-visible{outline:none}.ea-multi-select__trigger--disabled,.ea-multi-select__trigger--readonly{cursor:default}.ea-multi-select__trigger-content{display:flex;flex-wrap:nowrap;align-items:center;gap:.25em;flex:1;min-width:0;overflow-x:auto;scrollbar-width:none}.ea-multi-select__trigger-content::-webkit-scrollbar{display:none}.ea-multi-select__trigger-content ea-tag{flex-shrink:0;--ea-tag-padding-block: 0}.ea-multi-select__trigger-placeholder{color:var(--color-text-tertiary)}.ea-multi-select__trigger-icon{flex-shrink:0;width:1em;height:1em;color:var(--color-text-secondary);transition:var(--transition-transform)}.ea-multi-select__trigger-wrapper:has(.ea-multi-select__trigger--open) .ea-multi-select__trigger-icon{transform:rotate(180deg)}.ea-multi-select__more{display:inline-flex;flex-shrink:0;align-items:center;padding:0 .4285714286em;font-size:.875em;font-weight:var(--font-weight-medium);border-radius:var(--radius-lg);background-color:var(--color-bg-muted);color:var(--color-text-secondary)}.ea-multi-select__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-multi-select__clear>*{font-size:1.25em}.ea-multi-select__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-multi-select__clear:hover{background-color:var(--color-state-hover);color:var(--color-text-primary)}.ea-multi-select__clear:focus-visible{outline:none;box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-multi-select__clear:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-multi-select__clear:disabled{cursor:default;opacity:.5}.ea-multi-select__clear{flex-shrink:0}.ea-multi-select__popover{display:flex;flex-direction:column;overflow:hidden;max-height:20rem;border:var(--border-width-thin) solid var(--color-border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);background-color:var(--ea-multi-select-popover-background-color, var(--color-bg-elevated))}@media(forced-colors:active){.ea-multi-select__popover{border:1px solid CanvasText}}.ea-multi-select__popover--2xs{font-size:var(--font-size-2xs)}.ea-multi-select__popover--xs{font-size:var(--font-size-xs)}.ea-multi-select__popover--sm{font-size:var(--font-size-sm)}.ea-multi-select__popover--md{font-size:var(--font-size-md)}.ea-multi-select__popover--lg{font-size:var(--font-size-lg)}.ea-multi-select__popover--xl{font-size:var(--font-size-xl)}.ea-multi-select__search{display:flex;align-items:center;gap:.5em;flex-shrink:0;padding:.5em .75em;border-bottom:var(--border-width-thin) solid var(--color-border-default)}.ea-multi-select__search-icon{flex-shrink:0;width:1em;height:1em;color:var(--color-text-tertiary)}.ea-multi-select__search-input{flex:1;min-width:0;padding:0;border:none;background:none;font-family:var(--font-family-sans);font-size:inherit;color:var(--color-text-primary)}.ea-multi-select__search-input::placeholder{color:var(--color-text-tertiary);opacity:1}.ea-multi-select__search-input:focus{outline:none}.ea-multi-select__list{overflow-y:auto;overscroll-behavior:none;flex:1;margin:0;padding:.25em 0;list-style:none}.ea-multi-select__group{position:relative}.ea-multi-select__group--ruled{padding-top:.25em;margin-top:.25em}.ea-multi-select__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-multi-select__group-options{padding:0;margin:0;list-style:none}.ea-multi-select__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-multi-select__option{display:flex;align-items:center;gap:.5em;padding:.375em .75em;font-size:inherit;font-family:var(--font-family-sans);color:var(--color-text-primary);cursor:pointer;transition:var(--transition-colors)}.ea-multi-select__option--focused{background-color:var(--color-state-hover)}@media(forced-colors:active){.ea-multi-select__option--focused{background-color:Highlight;color:HighlightText}}.ea-multi-select__option--disabled{color:var(--color-text-disabled);cursor:default}@media(forced-colors:active){.ea-multi-select__option--disabled{color:GrayText}}.ea-multi-select__option--select-all{border-bottom:var(--border-width-thin) solid var(--color-border-default);font-weight:var(--font-weight-medium)}.ea-multi-select__option--create{font-weight:var(--font-weight-medium);color:var(--color-brand-text)}.ea-multi-select__option:hover:not(.ea-multi-select__option--disabled){background-color:var(--color-state-hover)}@media(forced-colors:active){.ea-multi-select__option:hover:not(.ea-multi-select__option--disabled){background-color:Highlight;color:HighlightText}}.ea-multi-select__option ea-checkbox{pointer-events:none;display:inline-flex;align-items:center;line-height:1}.ea-multi-select__create-icon{flex-shrink:0;width:1em;height:1em}.ea-multi-select__option-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ea-multi-select__empty{padding:.75em;font-size:inherit;text-align:center;color:var(--color-text-tertiary);list-style:none}\n"]
|
|
19586
21813
|
}]
|
|
19587
21814
|
}],
|
|
19588
21815
|
ctorParameters: () => [],
|
|
@@ -20312,36 +22539,6 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
20312
22539
|
}]
|
|
20313
22540
|
}
|
|
20314
22541
|
});
|
|
20315
|
-
function intlLocalizes(locale) {
|
|
20316
|
-
try {
|
|
20317
|
-
return new Intl.NumberFormat(locale).resolvedOptions().locale.split("-")[0] === locale.split("-")[0];
|
|
20318
|
-
} catch {
|
|
20319
|
-
return false;
|
|
20320
|
-
}
|
|
20321
|
-
}
|
|
20322
|
-
function groupInteger(digits, sep, grouping) {
|
|
20323
|
-
const primary = grouping[0] ?? 3;
|
|
20324
|
-
const secondary = grouping[1] ?? primary;
|
|
20325
|
-
if (digits.length <= primary) return digits;
|
|
20326
|
-
let result = digits.slice(digits.length - primary);
|
|
20327
|
-
let rest = digits.slice(0, digits.length - primary);
|
|
20328
|
-
while (rest.length > 0) {
|
|
20329
|
-
const take = Math.min(secondary, rest.length);
|
|
20330
|
-
result = `${rest.slice(rest.length - take)}${sep}${result}`;
|
|
20331
|
-
rest = rest.slice(0, rest.length - take);
|
|
20332
|
-
}
|
|
20333
|
-
return result;
|
|
20334
|
-
}
|
|
20335
|
-
function formatGroupedNumber(value, locale, format, options) {
|
|
20336
|
-
if (intlLocalizes(locale)) return value.toLocaleString(locale, options);
|
|
20337
|
-
if (!isFinite(value)) return String(value);
|
|
20338
|
-
const magnitude = Math.abs(value).toString();
|
|
20339
|
-
if (magnitude.includes("e") || magnitude.includes("E")) return value.toString();
|
|
20340
|
-
const [intPart, fracPart] = magnitude.split(".");
|
|
20341
|
-
const grouped = groupInteger(intPart, format.group, format.grouping);
|
|
20342
|
-
const body = fracPart != null ? `${grouped}${format.decimal}${fracPart}` : grouped;
|
|
20343
|
-
return value < 0 ? `-${body}` : body;
|
|
20344
|
-
}
|
|
20345
22542
|
const PAGE_SIZE_ALL = -1;
|
|
20346
22543
|
var PaginatorComponent = class PaginatorComponent {
|
|
20347
22544
|
i18n = inject(EagamiI18nService);
|
|
@@ -20705,6 +22902,449 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
20705
22902
|
}]
|
|
20706
22903
|
}
|
|
20707
22904
|
});
|
|
22905
|
+
const ACTIVE_OFFSET = 6;
|
|
22906
|
+
const DONUT_RATIO = .6;
|
|
22907
|
+
function polar(cx, cy, r, angle) {
|
|
22908
|
+
return [cx + r * Math.cos(angle), cy + r * Math.sin(angle)];
|
|
22909
|
+
}
|
|
22910
|
+
function slicePath(cx, cy, outer, inner, start, end) {
|
|
22911
|
+
if (end - start >= Math.PI * 2 - 1e-6) {
|
|
22912
|
+
const ring = (r, sweep) => `M${cx + r},${cy}A${r},${r} 0 1 ${sweep} ${cx - r},${cy}A${r},${r} 0 1 ${sweep} ${cx + r},${cy}Z`;
|
|
22913
|
+
return inner > 0 ? `${ring(outer, 1)}${ring(inner, 0)}` : ring(outer, 1);
|
|
22914
|
+
}
|
|
22915
|
+
const large = end - start > Math.PI ? 1 : 0;
|
|
22916
|
+
const [ox0, oy0] = polar(cx, cy, outer, start);
|
|
22917
|
+
const [ox1, oy1] = polar(cx, cy, outer, end);
|
|
22918
|
+
if (inner <= 0) return `M${cx},${cy}L${ox0},${oy0}A${outer},${outer} 0 ${large} 1 ${ox1},${oy1}Z`;
|
|
22919
|
+
const [ix0, iy0] = polar(cx, cy, inner, start);
|
|
22920
|
+
const [ix1, iy1] = polar(cx, cy, inner, end);
|
|
22921
|
+
return `M${ox0},${oy0}A${outer},${outer} 0 ${large} 1 ${ox1},${oy1}L${ix1},${iy1}A${inner},${inner} 0 ${large} 0 ${ix0},${iy0}Z`;
|
|
22922
|
+
}
|
|
22923
|
+
var PieChartComponent = class PieChartComponent {
|
|
22924
|
+
i18n = inject(EagamiI18nService);
|
|
22925
|
+
data = input([], ...ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []);
|
|
22926
|
+
variant = input("pie", ...ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []);
|
|
22927
|
+
showLegend = input(true, ...ngDevMode ? [{ debugName: "showLegend" }] : /* istanbul ignore next */ []);
|
|
22928
|
+
showPercentages = input(true, ...ngDevMode ? [{ debugName: "showPercentages" }] : /* istanbul ignore next */ []);
|
|
22929
|
+
height = input(240, ...ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []);
|
|
22930
|
+
size = input("md", ...ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []);
|
|
22931
|
+
animation = input("sweep", ...ngDevMode ? [{ debugName: "animation" }] : /* istanbul ignore next */ []);
|
|
22932
|
+
animationDuration = input(600, ...ngDevMode ? [{ debugName: "animationDuration" }] : /* istanbul ignore next */ []);
|
|
22933
|
+
formatValue = input(null, ...ngDevMode ? [{ debugName: "formatValue" }] : /* istanbul ignore next */ []);
|
|
22934
|
+
ariaLabel = input(void 0, {
|
|
22935
|
+
...ngDevMode ? { debugName: "ariaLabel" } : /* istanbul ignore next */ {},
|
|
22936
|
+
alias: "aria-label"
|
|
22937
|
+
});
|
|
22938
|
+
sliceClick = output();
|
|
22939
|
+
activeSliceChange = output();
|
|
22940
|
+
viewport = injectChartViewport(this.size);
|
|
22941
|
+
format = injectChartFormatter(this.formatValue);
|
|
22942
|
+
active = signal(null, ...ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []);
|
|
22943
|
+
label = computed(() => this.ariaLabel() || this.i18n.messages().chart.pieChart, ...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
|
|
22944
|
+
total = computed(() => this.data().reduce((sum, slice) => sum + this.sliceValue(slice), 0), ...ngDevMode ? [{ debugName: "total" }] : /* istanbul ignore next */ []);
|
|
22945
|
+
hasData = computed(() => this.total() > 0, ...ngDevMode ? [{ debugName: "hasData" }] : /* istanbul ignore next */ []);
|
|
22946
|
+
renderPass = computed(() => {
|
|
22947
|
+
this.data();
|
|
22948
|
+
this.variant();
|
|
22949
|
+
this.animation();
|
|
22950
|
+
this.animationDuration();
|
|
22951
|
+
return [{}];
|
|
22952
|
+
}, ...ngDevMode ? [{ debugName: "renderPass" }] : /* istanbul ignore next */ []);
|
|
22953
|
+
hostClasses = computed(() => ({
|
|
22954
|
+
[`ea-pie-chart--${this.size()}`]: true,
|
|
22955
|
+
[`ea-pie-chart--${this.variant()}`]: true,
|
|
22956
|
+
[`ea-pie-chart--animate-${this.animation()}`]: true
|
|
22957
|
+
}), ...ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []);
|
|
22958
|
+
layout = computed(() => {
|
|
22959
|
+
const diameter = Math.max(1, Math.min(this.viewport.width(), this.height()));
|
|
22960
|
+
const cx = diameter / 2;
|
|
22961
|
+
const cy = diameter / 2;
|
|
22962
|
+
const outer = Math.max(1, diameter / 2 - ACTIVE_OFFSET);
|
|
22963
|
+
const inner = this.variant() === "donut" ? outer * DONUT_RATIO : 0;
|
|
22964
|
+
const total = this.total();
|
|
22965
|
+
const slices = [];
|
|
22966
|
+
let angle = -Math.PI / 2;
|
|
22967
|
+
this.data().forEach((slice, index) => {
|
|
22968
|
+
const value = this.sliceValue(slice);
|
|
22969
|
+
if (value <= 0 || total <= 0) return;
|
|
22970
|
+
const sweep = value / total * Math.PI * 2;
|
|
22971
|
+
slices.push({
|
|
22972
|
+
index,
|
|
22973
|
+
path: slicePath(cx, cy, outer, inner, angle, angle + sweep),
|
|
22974
|
+
color: chartColor(index, slice.color),
|
|
22975
|
+
midAngle: angle + sweep / 2,
|
|
22976
|
+
start: angle,
|
|
22977
|
+
end: angle + sweep
|
|
22978
|
+
});
|
|
22979
|
+
angle += sweep;
|
|
22980
|
+
});
|
|
22981
|
+
return {
|
|
22982
|
+
diameter,
|
|
22983
|
+
cx,
|
|
22984
|
+
cy,
|
|
22985
|
+
outer,
|
|
22986
|
+
inner,
|
|
22987
|
+
slices
|
|
22988
|
+
};
|
|
22989
|
+
}, ...ngDevMode ? [{ debugName: "layout" }] : /* istanbul ignore next */ []);
|
|
22990
|
+
legend = computed(() => this.data().map((slice, index) => ({
|
|
22991
|
+
label: slice.label,
|
|
22992
|
+
color: chartColor(index, slice.color),
|
|
22993
|
+
percent: this.formatPercent(this.percentOf(index))
|
|
22994
|
+
})), ...ngDevMode ? [{ debugName: "legend" }] : /* istanbul ignore next */ []);
|
|
22995
|
+
tooltip = computed(() => {
|
|
22996
|
+
const index = this.active();
|
|
22997
|
+
const layout = this.layout();
|
|
22998
|
+
const slice = layout.slices.find((s) => s.index === index);
|
|
22999
|
+
if (index === null || !slice) return null;
|
|
23000
|
+
const reach = layout.inner > 0 ? (layout.outer + layout.inner) / 2 : layout.outer * .6;
|
|
23001
|
+
const [x, y] = polar(layout.cx, layout.cy, reach, slice.midAngle);
|
|
23002
|
+
return {
|
|
23003
|
+
x,
|
|
23004
|
+
y,
|
|
23005
|
+
title: this.data()[index].label,
|
|
23006
|
+
color: slice.color,
|
|
23007
|
+
detail: `${this.format()(this.sliceValue(this.data()[index]))} (${this.formatPercent(this.percentOf(index))})`,
|
|
23008
|
+
key: index
|
|
23009
|
+
};
|
|
23010
|
+
}, ...ngDevMode ? [{ debugName: "tooltip" }] : /* istanbul ignore next */ []);
|
|
23011
|
+
tooltips = computed(() => {
|
|
23012
|
+
const tip = this.tooltip();
|
|
23013
|
+
return tip ? [tip] : [];
|
|
23014
|
+
}, ...ngDevMode ? [{ debugName: "tooltips" }] : /* istanbul ignore next */ []);
|
|
23015
|
+
announcement = computed(() => {
|
|
23016
|
+
const event = this.eventFor(this.active());
|
|
23017
|
+
return event ? this.i18n.messages().chart.slice(event.label, this.format()(event.value), this.formatPercent(event.percent)) : "";
|
|
23018
|
+
}, ...ngDevMode ? [{ debugName: "announcement" }] : /* istanbul ignore next */ []);
|
|
23019
|
+
tableValue(slice) {
|
|
23020
|
+
return this.format()(this.sliceValue(slice));
|
|
23021
|
+
}
|
|
23022
|
+
tablePercent(index) {
|
|
23023
|
+
return this.formatPercent(this.percentOf(index));
|
|
23024
|
+
}
|
|
23025
|
+
isDimmed(index) {
|
|
23026
|
+
const active = this.active();
|
|
23027
|
+
return active !== null && active !== index;
|
|
23028
|
+
}
|
|
23029
|
+
offset(slice) {
|
|
23030
|
+
if (this.active() !== slice.index || this.layout().slices.length < 2) return null;
|
|
23031
|
+
const [dx, dy] = polar(0, 0, ACTIVE_OFFSET, slice.midAngle);
|
|
23032
|
+
return `translate(${dx}px, ${dy}px)`;
|
|
23033
|
+
}
|
|
23034
|
+
onPointerMove(event) {
|
|
23035
|
+
const rect = event.currentTarget.getBoundingClientRect();
|
|
23036
|
+
const layout = this.layout();
|
|
23037
|
+
const dx = event.clientX - rect.left - layout.cx;
|
|
23038
|
+
const dy = event.clientY - rect.top - layout.cy;
|
|
23039
|
+
const distance = Math.hypot(dx, dy);
|
|
23040
|
+
if (distance < layout.inner || distance > layout.outer + ACTIVE_OFFSET) {
|
|
23041
|
+
this.setActive(null);
|
|
23042
|
+
return;
|
|
23043
|
+
}
|
|
23044
|
+
let angle = Math.atan2(dy, dx);
|
|
23045
|
+
if (angle < -Math.PI / 2) angle += Math.PI * 2;
|
|
23046
|
+
const slice = layout.slices.find((s) => angle >= s.start && angle < s.end);
|
|
23047
|
+
this.setActive(slice ? slice.index : null);
|
|
23048
|
+
}
|
|
23049
|
+
onPointerLeave() {
|
|
23050
|
+
this.setActive(null);
|
|
23051
|
+
}
|
|
23052
|
+
onClick() {
|
|
23053
|
+
const event = this.eventFor(this.active());
|
|
23054
|
+
if (event) this.sliceClick.emit(event);
|
|
23055
|
+
}
|
|
23056
|
+
onFocus() {
|
|
23057
|
+
if (this.active() === null) this.setActive(this.layout().slices[0]?.index ?? null);
|
|
23058
|
+
}
|
|
23059
|
+
onBlur() {
|
|
23060
|
+
this.setActive(null);
|
|
23061
|
+
}
|
|
23062
|
+
onKeydown(event) {
|
|
23063
|
+
const slices = this.layout().slices;
|
|
23064
|
+
if (!slices.length) return;
|
|
23065
|
+
if (this.active() === null && event.key.startsWith("Arrow")) {
|
|
23066
|
+
event.preventDefault();
|
|
23067
|
+
this.setActive(slices[0].index);
|
|
23068
|
+
return;
|
|
23069
|
+
}
|
|
23070
|
+
const position = Math.max(0, slices.findIndex((s) => s.index === this.active()));
|
|
23071
|
+
let next = slices[position].index;
|
|
23072
|
+
switch (event.key) {
|
|
23073
|
+
case "ArrowRight":
|
|
23074
|
+
case "ArrowDown":
|
|
23075
|
+
next = slices[(position + 1) % slices.length].index;
|
|
23076
|
+
break;
|
|
23077
|
+
case "ArrowLeft":
|
|
23078
|
+
case "ArrowUp":
|
|
23079
|
+
next = slices[(position - 1 + slices.length) % slices.length].index;
|
|
23080
|
+
break;
|
|
23081
|
+
case "Home":
|
|
23082
|
+
next = slices[0].index;
|
|
23083
|
+
break;
|
|
23084
|
+
case "End":
|
|
23085
|
+
next = slices[slices.length - 1].index;
|
|
23086
|
+
break;
|
|
23087
|
+
case "Enter":
|
|
23088
|
+
case " ":
|
|
23089
|
+
this.onClick();
|
|
23090
|
+
break;
|
|
23091
|
+
case "Escape":
|
|
23092
|
+
next = null;
|
|
23093
|
+
break;
|
|
23094
|
+
default: return;
|
|
23095
|
+
}
|
|
23096
|
+
event.preventDefault();
|
|
23097
|
+
this.setActive(next);
|
|
23098
|
+
}
|
|
23099
|
+
sliceValue(slice) {
|
|
23100
|
+
return isFinite(slice.value) ? Math.max(0, slice.value) : 0;
|
|
23101
|
+
}
|
|
23102
|
+
percentOf(index) {
|
|
23103
|
+
const total = this.total();
|
|
23104
|
+
const slice = this.data()[index];
|
|
23105
|
+
return total > 0 && slice ? this.sliceValue(slice) / total * 100 : 0;
|
|
23106
|
+
}
|
|
23107
|
+
formatPercent(percent) {
|
|
23108
|
+
return `${formatGroupedNumber(percent, this.i18n.locale(), this.i18n.messages().numberFormat, { maximumFractionDigits: 1 })}%`;
|
|
23109
|
+
}
|
|
23110
|
+
eventFor(index) {
|
|
23111
|
+
const slice = index === null ? void 0 : this.data()[index];
|
|
23112
|
+
if (index === null || !slice) return null;
|
|
23113
|
+
return {
|
|
23114
|
+
index,
|
|
23115
|
+
label: slice.label,
|
|
23116
|
+
value: this.sliceValue(slice),
|
|
23117
|
+
percent: this.percentOf(index)
|
|
23118
|
+
};
|
|
23119
|
+
}
|
|
23120
|
+
setActive(next) {
|
|
23121
|
+
if (this.active() === next) return;
|
|
23122
|
+
this.active.set(next);
|
|
23123
|
+
this.activeSliceChange.emit(this.eventFor(next));
|
|
23124
|
+
}
|
|
23125
|
+
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
23126
|
+
minVersion: "12.0.0",
|
|
23127
|
+
version: "22.2.0",
|
|
23128
|
+
ngImport: i0,
|
|
23129
|
+
type: PieChartComponent,
|
|
23130
|
+
deps: [],
|
|
23131
|
+
target: i0.ɵɵFactoryTarget.Component
|
|
23132
|
+
});
|
|
23133
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
23134
|
+
minVersion: "17.0.0",
|
|
23135
|
+
version: "22.2.0",
|
|
23136
|
+
type: PieChartComponent,
|
|
23137
|
+
isStandalone: true,
|
|
23138
|
+
selector: "ea-pie-chart",
|
|
23139
|
+
inputs: {
|
|
23140
|
+
data: {
|
|
23141
|
+
classPropertyName: "data",
|
|
23142
|
+
publicName: "data",
|
|
23143
|
+
isSignal: true,
|
|
23144
|
+
isRequired: false,
|
|
23145
|
+
transformFunction: null
|
|
23146
|
+
},
|
|
23147
|
+
variant: {
|
|
23148
|
+
classPropertyName: "variant",
|
|
23149
|
+
publicName: "variant",
|
|
23150
|
+
isSignal: true,
|
|
23151
|
+
isRequired: false,
|
|
23152
|
+
transformFunction: null
|
|
23153
|
+
},
|
|
23154
|
+
showLegend: {
|
|
23155
|
+
classPropertyName: "showLegend",
|
|
23156
|
+
publicName: "showLegend",
|
|
23157
|
+
isSignal: true,
|
|
23158
|
+
isRequired: false,
|
|
23159
|
+
transformFunction: null
|
|
23160
|
+
},
|
|
23161
|
+
showPercentages: {
|
|
23162
|
+
classPropertyName: "showPercentages",
|
|
23163
|
+
publicName: "showPercentages",
|
|
23164
|
+
isSignal: true,
|
|
23165
|
+
isRequired: false,
|
|
23166
|
+
transformFunction: null
|
|
23167
|
+
},
|
|
23168
|
+
height: {
|
|
23169
|
+
classPropertyName: "height",
|
|
23170
|
+
publicName: "height",
|
|
23171
|
+
isSignal: true,
|
|
23172
|
+
isRequired: false,
|
|
23173
|
+
transformFunction: null
|
|
23174
|
+
},
|
|
23175
|
+
size: {
|
|
23176
|
+
classPropertyName: "size",
|
|
23177
|
+
publicName: "size",
|
|
23178
|
+
isSignal: true,
|
|
23179
|
+
isRequired: false,
|
|
23180
|
+
transformFunction: null
|
|
23181
|
+
},
|
|
23182
|
+
animation: {
|
|
23183
|
+
classPropertyName: "animation",
|
|
23184
|
+
publicName: "animation",
|
|
23185
|
+
isSignal: true,
|
|
23186
|
+
isRequired: false,
|
|
23187
|
+
transformFunction: null
|
|
23188
|
+
},
|
|
23189
|
+
animationDuration: {
|
|
23190
|
+
classPropertyName: "animationDuration",
|
|
23191
|
+
publicName: "animationDuration",
|
|
23192
|
+
isSignal: true,
|
|
23193
|
+
isRequired: false,
|
|
23194
|
+
transformFunction: null
|
|
23195
|
+
},
|
|
23196
|
+
formatValue: {
|
|
23197
|
+
classPropertyName: "formatValue",
|
|
23198
|
+
publicName: "formatValue",
|
|
23199
|
+
isSignal: true,
|
|
23200
|
+
isRequired: false,
|
|
23201
|
+
transformFunction: null
|
|
23202
|
+
},
|
|
23203
|
+
ariaLabel: {
|
|
23204
|
+
classPropertyName: "ariaLabel",
|
|
23205
|
+
publicName: "aria-label",
|
|
23206
|
+
isSignal: true,
|
|
23207
|
+
isRequired: false,
|
|
23208
|
+
transformFunction: null
|
|
23209
|
+
}
|
|
23210
|
+
},
|
|
23211
|
+
outputs: {
|
|
23212
|
+
sliceClick: "sliceClick",
|
|
23213
|
+
activeSliceChange: "activeSliceChange"
|
|
23214
|
+
},
|
|
23215
|
+
ngImport: i0,
|
|
23216
|
+
template: "<div\n class=\"ea-pie-chart\"\n [ngClass]=\"hostClasses()\"\n [style.--ea-chart-duration]=\"animationDuration() + 'ms'\">\n @if (hasData()) {\n <div\n class=\"ea-pie-chart__plot\"\n role=\"group\"\n tabindex=\"0\"\n [attr.aria-roledescription]=\"i18n.messages().chart.roleDescription\"\n [attr.aria-label]=\"label()\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n (keydown)=\"onKeydown($event)\">\n <div class=\"ea-pie-chart__figure\">\n @for (pass of renderPass(); track pass) {\n <svg\n class=\"ea-pie-chart__svg\"\n aria-hidden=\"true\"\n [attr.width]=\"layout().diameter\"\n [attr.height]=\"layout().diameter\"\n [attr.viewBox]=\"'0 0 ' + layout().diameter + ' ' + layout().diameter\"\n (pointermove)=\"onPointerMove($event)\"\n (pointerdown)=\"onPointerMove($event)\"\n (pointerleave)=\"onPointerLeave()\"\n (click)=\"onClick()\">\n @for (slice of layout().slices; track slice.index) {\n <path\n class=\"ea-pie-chart__slice\"\n fill-rule=\"evenodd\"\n [class.ea-pie-chart__slice--dimmed]=\"isDimmed(slice.index)\"\n [style.--ea-chart-color]=\"slice.color\"\n [style.transform]=\"offset(slice)\"\n [attr.d]=\"slice.path\" />\n }\n @for (tip of tooltips(); track tip.key) {\n <rect\n class=\"ea-pie-chart__anchor\"\n width=\"2\"\n height=\"2\"\n [attr.x]=\"tip.x - 1\"\n [attr.y]=\"tip.y - 1\"\n [eaTooltip]=\"tooltipContent\"\n [tooltipOpen]=\"true\"\n [maxWidth]=\"undefined\" />\n }\n </svg>\n }\n <ng-template #tooltipContent>\n @if (tooltip(); as tip) {\n <div class=\"ea-pie-chart__tooltip\">\n <span class=\"ea-pie-chart__tooltip-row\">\n <span\n class=\"ea-pie-chart__swatch\"\n [style.--ea-chart-color]=\"tip.color\">\n </span>\n <span class=\"ea-pie-chart__tooltip-title\">{{ tip.title }}</span>\n </span>\n <span class=\"ea-pie-chart__tooltip-value\">{{ tip.detail }}</span>\n </div>\n }\n </ng-template>\n </div>\n <table class=\"ea-pie-chart__table\">\n <caption>\n {{ label() }}\n </caption>\n <thead>\n <tr>\n <th scope=\"col\">{{ i18n.messages().chart.category }}</th>\n <th scope=\"col\">{{ i18n.messages().chart.value }}</th>\n <th scope=\"col\">{{ i18n.messages().chart.share }}</th>\n </tr>\n </thead>\n <tbody>\n @for (slice of data(); track $index; let i = $index) {\n <tr>\n <th scope=\"row\">{{ slice.label }}</th>\n <td>{{ tableValue(slice) }}</td>\n <td>{{ tablePercent(i) }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n <div\n class=\"ea-pie-chart__live\"\n aria-live=\"polite\">\n {{ announcement() }}\n </div>\n } @else {\n <div\n class=\"ea-pie-chart__empty\"\n role=\"img\"\n [attr.aria-label]=\"label()\"\n [style.height.px]=\"height()\">\n {{ i18n.messages().chart.noData }}\n </div>\n }\n @if (showLegend() && hasData()) {\n <ul\n class=\"ea-pie-chart__legend\"\n aria-hidden=\"true\">\n @for (item of legend(); track $index) {\n <li class=\"ea-pie-chart__legend-item\">\n <span\n class=\"ea-pie-chart__swatch\"\n [style.--ea-chart-color]=\"item.color\">\n </span>\n {{ item.label }}\n @if (showPercentages()) {\n <span class=\"ea-pie-chart__legend-percent\">{{ item.percent }}</span>\n }\n </li>\n }\n </ul>\n }\n</div>\n",
|
|
23217
|
+
styles: ["@keyframes ea-chart-fade{0%{opacity:0}}@keyframes ea-chart-draw{0%{stroke-dashoffset:1}}@keyframes ea-chart-grow-y{0%{transform:scaleY(0)}}@keyframes ea-chart-grow-x{0%{transform:scaleX(0)}}@keyframes ea-chart-grow{0%{transform:scale(0)}}@property --ea-pie-chart-sweep{syntax: \"<angle>\"; inherits: false; initial-value: 360deg;}ea-pie-chart{display:block}.ea-pie-chart{position:relative;display:flex;flex-direction:column;gap:.75em;font-family:var(--font-family-sans);color:var(--color-text-primary)}.ea-pie-chart--2xs{font-size:var(--font-size-2xs)}.ea-pie-chart--xs{font-size:var(--font-size-xs)}.ea-pie-chart--sm{font-size:var(--font-size-sm)}.ea-pie-chart--md{font-size:var(--font-size-md)}.ea-pie-chart--lg{font-size:var(--font-size-lg)}.ea-pie-chart--xl{font-size:var(--font-size-xl)}.ea-pie-chart__plot{position:relative;border-radius:var(--radius-md);outline:none}.ea-pie-chart__plot:focus-visible{box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-pie-chart__plot:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-pie-chart__plot svg{display:block;overflow:visible}.ea-pie-chart__plot{display:flex;justify-content:center}.ea-pie-chart__figure{position:relative}.ea-pie-chart__svg{display:block;touch-action:pan-y}.ea-pie-chart__slice{stroke:var(--ea-chart-surface, var(--color-bg-base));stroke-width:2px;stroke-linejoin:round;fill:var(--ea-chart-color);transition:opacity var(--duration-fast) var(--ease-out),transform var(--duration-fast) var(--ease-out)}.ea-pie-chart__slice--dimmed{opacity:.35}.ea-pie-chart__tooltip{display:flex;flex-direction:column;gap:var(--space-1)}.ea-pie-chart__anchor{fill:transparent}.ea-pie-chart__tooltip-title{font-weight:var(--font-weight-medium)}.ea-pie-chart__tooltip-row{display:flex;align-items:center;gap:.5em}.ea-pie-chart__tooltip-value{font-weight:var(--font-weight-semibold);font-variant-numeric:tabular-nums}.ea-pie-chart__swatch{flex-shrink:0;width:.75em;height:.75em;border-radius:var(--radius-sm);background-color:var(--ea-chart-color)}.ea-pie-chart__legend{display:flex;flex-wrap:wrap;justify-content:center;gap:.375em 1em;padding:0;margin:0;font-size:.875em;list-style:none;color:var(--color-text-secondary)}.ea-pie-chart__legend-item{display:flex;align-items:center;gap:.375em}.ea-pie-chart__legend-percent{font-variant-numeric:tabular-nums;color:var(--color-text-tertiary)}.ea-pie-chart__table,.ea-pie-chart__live{position:absolute;overflow:hidden;clip:rect(0,0,0,0);clip-path:inset(50%);width:1px;height:1px;padding:0;margin:-1px;white-space:nowrap;border:0}.ea-pie-chart__empty{display:flex;align-items:center;justify-content:center;font-size:.875em;color:var(--color-text-tertiary)}.ea-pie-chart--animate-sweep .ea-pie-chart__svg{-webkit-mask-image:conic-gradient(currentColor var(--ea-pie-chart-sweep),transparent 0);mask-image:conic-gradient(currentColor var(--ea-pie-chart-sweep),transparent 0);animation-name:ea-pie-chart-sweep;animation-duration:var(--ea-chart-duration, .6s);animation-timing-function:var(--ease-out);animation-fill-mode:both}@media(prefers-reduced-motion:reduce){.ea-pie-chart--animate-sweep .ea-pie-chart__svg{animation:none}}.ea-pie-chart--animate-grow .ea-pie-chart__svg{animation-name:ea-chart-grow;animation-duration:var(--ea-chart-duration, .6s);animation-timing-function:var(--ease-out);animation-fill-mode:both}@media(prefers-reduced-motion:reduce){.ea-pie-chart--animate-grow .ea-pie-chart__svg{animation:none}}.ea-pie-chart--animate-fade .ea-pie-chart__svg{animation-name:ea-chart-fade;animation-duration:var(--ea-chart-duration, .6s);animation-timing-function:var(--ease-out);animation-fill-mode:both}@media(prefers-reduced-motion:reduce){.ea-pie-chart--animate-fade .ea-pie-chart__svg{animation:none}}@keyframes ea-pie-chart-sweep{0%{--ea-pie-chart-sweep: 0deg}}\n"],
|
|
23218
|
+
dependencies: [{
|
|
23219
|
+
kind: "directive",
|
|
23220
|
+
type: NgClass,
|
|
23221
|
+
selector: "[ngClass]",
|
|
23222
|
+
inputs: ["class", "ngClass"]
|
|
23223
|
+
}, {
|
|
23224
|
+
kind: "directive",
|
|
23225
|
+
type: TooltipDirective,
|
|
23226
|
+
selector: "[eaTooltip]",
|
|
23227
|
+
inputs: [
|
|
23228
|
+
"eaTooltip",
|
|
23229
|
+
"tooltipPosition",
|
|
23230
|
+
"flip",
|
|
23231
|
+
"whenClipped",
|
|
23232
|
+
"maxWidth",
|
|
23233
|
+
"dismissDelay",
|
|
23234
|
+
"tooltipOpen"
|
|
23235
|
+
]
|
|
23236
|
+
}],
|
|
23237
|
+
changeDetection: i0.ChangeDetectionStrategy.OnPush,
|
|
23238
|
+
encapsulation: i0.ViewEncapsulation.None
|
|
23239
|
+
});
|
|
23240
|
+
};
|
|
23241
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
23242
|
+
minVersion: "12.0.0",
|
|
23243
|
+
version: "22.2.0",
|
|
23244
|
+
ngImport: i0,
|
|
23245
|
+
type: PieChartComponent,
|
|
23246
|
+
decorators: [{
|
|
23247
|
+
type: Component,
|
|
23248
|
+
args: [{
|
|
23249
|
+
selector: "ea-pie-chart",
|
|
23250
|
+
imports: [NgClass, TooltipDirective],
|
|
23251
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
23252
|
+
encapsulation: ViewEncapsulation.None,
|
|
23253
|
+
template: "<div\n class=\"ea-pie-chart\"\n [ngClass]=\"hostClasses()\"\n [style.--ea-chart-duration]=\"animationDuration() + 'ms'\">\n @if (hasData()) {\n <div\n class=\"ea-pie-chart__plot\"\n role=\"group\"\n tabindex=\"0\"\n [attr.aria-roledescription]=\"i18n.messages().chart.roleDescription\"\n [attr.aria-label]=\"label()\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n (keydown)=\"onKeydown($event)\">\n <div class=\"ea-pie-chart__figure\">\n @for (pass of renderPass(); track pass) {\n <svg\n class=\"ea-pie-chart__svg\"\n aria-hidden=\"true\"\n [attr.width]=\"layout().diameter\"\n [attr.height]=\"layout().diameter\"\n [attr.viewBox]=\"'0 0 ' + layout().diameter + ' ' + layout().diameter\"\n (pointermove)=\"onPointerMove($event)\"\n (pointerdown)=\"onPointerMove($event)\"\n (pointerleave)=\"onPointerLeave()\"\n (click)=\"onClick()\">\n @for (slice of layout().slices; track slice.index) {\n <path\n class=\"ea-pie-chart__slice\"\n fill-rule=\"evenodd\"\n [class.ea-pie-chart__slice--dimmed]=\"isDimmed(slice.index)\"\n [style.--ea-chart-color]=\"slice.color\"\n [style.transform]=\"offset(slice)\"\n [attr.d]=\"slice.path\" />\n }\n @for (tip of tooltips(); track tip.key) {\n <rect\n class=\"ea-pie-chart__anchor\"\n width=\"2\"\n height=\"2\"\n [attr.x]=\"tip.x - 1\"\n [attr.y]=\"tip.y - 1\"\n [eaTooltip]=\"tooltipContent\"\n [tooltipOpen]=\"true\"\n [maxWidth]=\"undefined\" />\n }\n </svg>\n }\n <ng-template #tooltipContent>\n @if (tooltip(); as tip) {\n <div class=\"ea-pie-chart__tooltip\">\n <span class=\"ea-pie-chart__tooltip-row\">\n <span\n class=\"ea-pie-chart__swatch\"\n [style.--ea-chart-color]=\"tip.color\">\n </span>\n <span class=\"ea-pie-chart__tooltip-title\">{{ tip.title }}</span>\n </span>\n <span class=\"ea-pie-chart__tooltip-value\">{{ tip.detail }}</span>\n </div>\n }\n </ng-template>\n </div>\n <table class=\"ea-pie-chart__table\">\n <caption>\n {{ label() }}\n </caption>\n <thead>\n <tr>\n <th scope=\"col\">{{ i18n.messages().chart.category }}</th>\n <th scope=\"col\">{{ i18n.messages().chart.value }}</th>\n <th scope=\"col\">{{ i18n.messages().chart.share }}</th>\n </tr>\n </thead>\n <tbody>\n @for (slice of data(); track $index; let i = $index) {\n <tr>\n <th scope=\"row\">{{ slice.label }}</th>\n <td>{{ tableValue(slice) }}</td>\n <td>{{ tablePercent(i) }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n <div\n class=\"ea-pie-chart__live\"\n aria-live=\"polite\">\n {{ announcement() }}\n </div>\n } @else {\n <div\n class=\"ea-pie-chart__empty\"\n role=\"img\"\n [attr.aria-label]=\"label()\"\n [style.height.px]=\"height()\">\n {{ i18n.messages().chart.noData }}\n </div>\n }\n @if (showLegend() && hasData()) {\n <ul\n class=\"ea-pie-chart__legend\"\n aria-hidden=\"true\">\n @for (item of legend(); track $index) {\n <li class=\"ea-pie-chart__legend-item\">\n <span\n class=\"ea-pie-chart__swatch\"\n [style.--ea-chart-color]=\"item.color\">\n </span>\n {{ item.label }}\n @if (showPercentages()) {\n <span class=\"ea-pie-chart__legend-percent\">{{ item.percent }}</span>\n }\n </li>\n }\n </ul>\n }\n</div>\n",
|
|
23254
|
+
styles: ["@keyframes ea-chart-fade{0%{opacity:0}}@keyframes ea-chart-draw{0%{stroke-dashoffset:1}}@keyframes ea-chart-grow-y{0%{transform:scaleY(0)}}@keyframes ea-chart-grow-x{0%{transform:scaleX(0)}}@keyframes ea-chart-grow{0%{transform:scale(0)}}@property --ea-pie-chart-sweep{syntax: \"<angle>\"; inherits: false; initial-value: 360deg;}ea-pie-chart{display:block}.ea-pie-chart{position:relative;display:flex;flex-direction:column;gap:.75em;font-family:var(--font-family-sans);color:var(--color-text-primary)}.ea-pie-chart--2xs{font-size:var(--font-size-2xs)}.ea-pie-chart--xs{font-size:var(--font-size-xs)}.ea-pie-chart--sm{font-size:var(--font-size-sm)}.ea-pie-chart--md{font-size:var(--font-size-md)}.ea-pie-chart--lg{font-size:var(--font-size-lg)}.ea-pie-chart--xl{font-size:var(--font-size-xl)}.ea-pie-chart__plot{position:relative;border-radius:var(--radius-md);outline:none}.ea-pie-chart__plot:focus-visible{box-shadow:var(--shadow-focus-ring)}@media(forced-colors:active){.ea-pie-chart__plot:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.ea-pie-chart__plot svg{display:block;overflow:visible}.ea-pie-chart__plot{display:flex;justify-content:center}.ea-pie-chart__figure{position:relative}.ea-pie-chart__svg{display:block;touch-action:pan-y}.ea-pie-chart__slice{stroke:var(--ea-chart-surface, var(--color-bg-base));stroke-width:2px;stroke-linejoin:round;fill:var(--ea-chart-color);transition:opacity var(--duration-fast) var(--ease-out),transform var(--duration-fast) var(--ease-out)}.ea-pie-chart__slice--dimmed{opacity:.35}.ea-pie-chart__tooltip{display:flex;flex-direction:column;gap:var(--space-1)}.ea-pie-chart__anchor{fill:transparent}.ea-pie-chart__tooltip-title{font-weight:var(--font-weight-medium)}.ea-pie-chart__tooltip-row{display:flex;align-items:center;gap:.5em}.ea-pie-chart__tooltip-value{font-weight:var(--font-weight-semibold);font-variant-numeric:tabular-nums}.ea-pie-chart__swatch{flex-shrink:0;width:.75em;height:.75em;border-radius:var(--radius-sm);background-color:var(--ea-chart-color)}.ea-pie-chart__legend{display:flex;flex-wrap:wrap;justify-content:center;gap:.375em 1em;padding:0;margin:0;font-size:.875em;list-style:none;color:var(--color-text-secondary)}.ea-pie-chart__legend-item{display:flex;align-items:center;gap:.375em}.ea-pie-chart__legend-percent{font-variant-numeric:tabular-nums;color:var(--color-text-tertiary)}.ea-pie-chart__table,.ea-pie-chart__live{position:absolute;overflow:hidden;clip:rect(0,0,0,0);clip-path:inset(50%);width:1px;height:1px;padding:0;margin:-1px;white-space:nowrap;border:0}.ea-pie-chart__empty{display:flex;align-items:center;justify-content:center;font-size:.875em;color:var(--color-text-tertiary)}.ea-pie-chart--animate-sweep .ea-pie-chart__svg{-webkit-mask-image:conic-gradient(currentColor var(--ea-pie-chart-sweep),transparent 0);mask-image:conic-gradient(currentColor var(--ea-pie-chart-sweep),transparent 0);animation-name:ea-pie-chart-sweep;animation-duration:var(--ea-chart-duration, .6s);animation-timing-function:var(--ease-out);animation-fill-mode:both}@media(prefers-reduced-motion:reduce){.ea-pie-chart--animate-sweep .ea-pie-chart__svg{animation:none}}.ea-pie-chart--animate-grow .ea-pie-chart__svg{animation-name:ea-chart-grow;animation-duration:var(--ea-chart-duration, .6s);animation-timing-function:var(--ease-out);animation-fill-mode:both}@media(prefers-reduced-motion:reduce){.ea-pie-chart--animate-grow .ea-pie-chart__svg{animation:none}}.ea-pie-chart--animate-fade .ea-pie-chart__svg{animation-name:ea-chart-fade;animation-duration:var(--ea-chart-duration, .6s);animation-timing-function:var(--ease-out);animation-fill-mode:both}@media(prefers-reduced-motion:reduce){.ea-pie-chart--animate-fade .ea-pie-chart__svg{animation:none}}@keyframes ea-pie-chart-sweep{0%{--ea-pie-chart-sweep: 0deg}}\n"]
|
|
23255
|
+
}]
|
|
23256
|
+
}],
|
|
23257
|
+
propDecorators: {
|
|
23258
|
+
data: [{
|
|
23259
|
+
type: i0.Input,
|
|
23260
|
+
args: [{
|
|
23261
|
+
isSignal: true,
|
|
23262
|
+
alias: "data",
|
|
23263
|
+
required: false
|
|
23264
|
+
}]
|
|
23265
|
+
}],
|
|
23266
|
+
variant: [{
|
|
23267
|
+
type: i0.Input,
|
|
23268
|
+
args: [{
|
|
23269
|
+
isSignal: true,
|
|
23270
|
+
alias: "variant",
|
|
23271
|
+
required: false
|
|
23272
|
+
}]
|
|
23273
|
+
}],
|
|
23274
|
+
showLegend: [{
|
|
23275
|
+
type: i0.Input,
|
|
23276
|
+
args: [{
|
|
23277
|
+
isSignal: true,
|
|
23278
|
+
alias: "showLegend",
|
|
23279
|
+
required: false
|
|
23280
|
+
}]
|
|
23281
|
+
}],
|
|
23282
|
+
showPercentages: [{
|
|
23283
|
+
type: i0.Input,
|
|
23284
|
+
args: [{
|
|
23285
|
+
isSignal: true,
|
|
23286
|
+
alias: "showPercentages",
|
|
23287
|
+
required: false
|
|
23288
|
+
}]
|
|
23289
|
+
}],
|
|
23290
|
+
height: [{
|
|
23291
|
+
type: i0.Input,
|
|
23292
|
+
args: [{
|
|
23293
|
+
isSignal: true,
|
|
23294
|
+
alias: "height",
|
|
23295
|
+
required: false
|
|
23296
|
+
}]
|
|
23297
|
+
}],
|
|
23298
|
+
size: [{
|
|
23299
|
+
type: i0.Input,
|
|
23300
|
+
args: [{
|
|
23301
|
+
isSignal: true,
|
|
23302
|
+
alias: "size",
|
|
23303
|
+
required: false
|
|
23304
|
+
}]
|
|
23305
|
+
}],
|
|
23306
|
+
animation: [{
|
|
23307
|
+
type: i0.Input,
|
|
23308
|
+
args: [{
|
|
23309
|
+
isSignal: true,
|
|
23310
|
+
alias: "animation",
|
|
23311
|
+
required: false
|
|
23312
|
+
}]
|
|
23313
|
+
}],
|
|
23314
|
+
animationDuration: [{
|
|
23315
|
+
type: i0.Input,
|
|
23316
|
+
args: [{
|
|
23317
|
+
isSignal: true,
|
|
23318
|
+
alias: "animationDuration",
|
|
23319
|
+
required: false
|
|
23320
|
+
}]
|
|
23321
|
+
}],
|
|
23322
|
+
formatValue: [{
|
|
23323
|
+
type: i0.Input,
|
|
23324
|
+
args: [{
|
|
23325
|
+
isSignal: true,
|
|
23326
|
+
alias: "formatValue",
|
|
23327
|
+
required: false
|
|
23328
|
+
}]
|
|
23329
|
+
}],
|
|
23330
|
+
ariaLabel: [{
|
|
23331
|
+
type: i0.Input,
|
|
23332
|
+
args: [{
|
|
23333
|
+
isSignal: true,
|
|
23334
|
+
alias: "aria-label",
|
|
23335
|
+
required: false
|
|
23336
|
+
}]
|
|
23337
|
+
}],
|
|
23338
|
+
sliceClick: [{
|
|
23339
|
+
type: i0.Output,
|
|
23340
|
+
args: ["sliceClick"]
|
|
23341
|
+
}],
|
|
23342
|
+
activeSliceChange: [{
|
|
23343
|
+
type: i0.Output,
|
|
23344
|
+
args: ["activeSliceChange"]
|
|
23345
|
+
}]
|
|
23346
|
+
}
|
|
23347
|
+
});
|
|
20708
23348
|
var ProgressBarComponent = class ProgressBarComponent {
|
|
20709
23349
|
i18n = inject(EagamiI18nService);
|
|
20710
23350
|
value = input(0, ...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
|
|
@@ -69602,6 +72242,6 @@ const ICONS = [
|
|
|
69602
72242
|
ZoomInIconComponent,
|
|
69603
72243
|
ZoomOutIconComponent
|
|
69604
72244
|
].sort((a, b) => a.slug.localeCompare(b.slug));
|
|
69605
|
-
export { AccessibilityIconComponent, AccordionComponent, AccordionItemComponent, ActivityIconComponent, AirplayIconComponent, AlarmClockIconComponent, AlertCircleIconComponent, AlertComponent, AlertOctagonIconComponent, AlertTriangleIconComponent, AlignCenterIconComponent, AlignJustifyIconComponent, AlignLeftIconComponent, AlignRightIconComponent, AnchorIconComponent, AndroidIconComponent, AngularIconComponent, AnthropicIconComponent, ApertureIconComponent, ArchiveIconComponent, ArrayIconComponent, ArrowDownCircleIconComponent, ArrowDownIconComponent, ArrowDownLeftIconComponent, ArrowDownRightIconComponent, ArrowLeftCircleIconComponent, ArrowLeftIconComponent, ArrowLeftRightIconComponent, ArrowRightCircleIconComponent, ArrowRightIconComponent, ArrowUpCircleIconComponent, ArrowUpDownIconComponent, ArrowUpIconComponent, ArrowUpLeftIconComponent, ArrowUpRightIconComponent, AspectRatioIconComponent, AtSignIconComponent, AutocompleteComponent, AvatarComponent, AvatarEditorComponent, AwardIconComponent, BadgeCheckIconComponent, BadgeComponent, BanIconComponent, BarChart2IconComponent, BarChartIconComponent, BatteryChargingIconComponent, BatteryIconComponent, BellIconComponent, BellOffIconComponent, BellRingIconComponent, BitcoinIconComponent, BlueskyIconComponent, BluetoothIconComponent, BoldIconComponent, BookIconComponent, BookOpenIconComponent, BookmarkCheckIconComponent, BookmarkIconComponent, BookmarkPlusIconComponent, BoomboxIconComponent, BotIconComponent, BottleIconComponent, BoxIconComponent, BrainIconComponent, BreadcrumbsComponent, BriefcaseIconComponent, BugIconComponent, BuildingIconComponent, ButtonComponent, CalculatorIconComponent, CalendarCheckIconComponent, CalendarDaysIconComponent, CalendarIconComponent, CalendarPlusIconComponent, CameraIconComponent, CameraOffIconComponent, CandleIconComponent, CardComponent, CassetteTapeIconComponent, CastIconComponent, CheckCheckIconComponent, CheckCircleIconComponent, CheckIconComponent, CheckSquareIconComponent, CheckboxComponent, ChevronDownIconComponent, ChevronLeftIconComponent, ChevronRightIconComponent, ChevronUpIconComponent, ChevronsDownIconComponent, ChevronsLeftIconComponent, ChevronsRightIconComponent, ChevronsUpDownIconComponent, ChevronsUpIconComponent, ChromeIconComponent, CircleIconComponent, ClapperboardIconComponent, ClipboardCheckIconComponent, ClipboardIconComponent, ClipboardListIconComponent, ClipboardPasteIconComponent, ClockIconComponent, CloudDrizzleIconComponent, CloudIconComponent, CloudLightningIconComponent, CloudOffIconComponent, CloudRainIconComponent, CloudSnowIconComponent, CloudSunIconComponent, CloudflareIconComponent, CodeIconComponent, CodeInputComponent, CodepenIconComponent, CodesandboxIconComponent, CoffeeIconComponent, CoinsIconComponent, ColorPickerComponent, ColumnsIconComponent, CommandIconComponent, CommandPaletteComponent, CompassIconComponent, ContrastIconComponent, CookieIconComponent, CopyIconComponent, CornerDownLeftIconComponent, CornerDownRightIconComponent, CornerLeftDownIconComponent, CornerLeftUpIconComponent, CornerRightDownIconComponent, CornerRightUpIconComponent, CornerUpLeftIconComponent, CornerUpRightIconComponent, CosineWaveIconComponent, CpuIconComponent, CreditCardIconComponent, CropIconComponent, CrosshairIconComponent, CrownIconComponent, DEFAULT_PALETTE_ROLES, DataTableComponent, DatabaseIconComponent, DatePickerComponent, DeleteIconComponent, DialogComponent, DiamondIconComponent, Dice1IconComponent, Dice2IconComponent, Dice3IconComponent, Dice4IconComponent, Dice5IconComponent, Dice6IconComponent, DiscIconComponent, DiscordIconComponent, DivideCircleIconComponent, DivideIconComponent, DivideSquareIconComponent, DividerComponent, DockerIconComponent, DollarSignIconComponent, DoubleExclamationMarkIconComponent, DoubleQuestionMarkIconComponent, DownloadCloudIconComponent, DownloadIconComponent, DrawerComponent, DribbbleIconComponent, DropboxIconComponent, DropdownComponent, DropletIconComponent, EAGAMI_ALL_LOCALES, EAGAMI_I18N_CONFIG, EAGAMI_LOCALES, EAGAMI_LOCALE_META, EagamiI18nService, EagamiIconComponent, EagamiWordmarkComponent, Edit2IconComponent, Edit3IconComponent, EditIconComponent, EjectIconComponent, EmptyStateComponent, EuroIconComponent, ExclamationMarkIconComponent, ExclamationQuestionMarkIconComponent, ExternalLinkIconComponent, EyeIconComponent, EyeOffIconComponent, Facebook2IconComponent, FacebookIconComponent, FastForwardIconComponent, FeatherIconComponent, FieldLabelComponent, FieldMessagesComponent, Figma2IconComponent, FigmaIconComponent, FileAudioIconComponent, FileCheckIconComponent, FileCodeIconComponent, FileIconComponent, FileImageIconComponent, FileMinusIconComponent, FilePdfIconComponent, FilePlusIconComponent, FileTextIconComponent, FileUploaderComponent, FileVideoIconComponent, FilmIconComponent, FilterIconComponent, FilterXIconComponent, FingerprintIconComponent, FirstPlaceMedalIconComponent, FlagIconComponent, FlameIconComponent, FlaskConicalIconComponent, FolderIconComponent, FolderMinusIconComponent, FolderOpenIconComponent, FolderPlusIconComponent, FormFieldComponent, ForwardIconComponent, FramerIconComponent, FrownIconComponent, GaugeIconComponent, GeminiIconComponent, GiftIconComponent, GitBranchIconComponent, GitCommitIconComponent, GitCompareIconComponent, GitMergeIconComponent, GitPullRequestIconComponent, Github2IconComponent, GithubIconComponent, GitlabIconComponent, GlobeIconComponent, GoogleIconComponent, GraduationCapIconComponent, GridIconComponent, GripHorizontalIconComponent, GripVerticalIconComponent, HalfCircleIconComponent, HalfHeartIconComponent, HardDriveIconComponent, HashIconComponent, HeadphonesIconComponent, HeadsetIconComponent, HeartIconComponent, HelpCircleIconComponent, HeptagonIconComponent, HexagonIconComponent, HistoryIconComponent, HomeIconComponent, HourglassIconComponent, ICONS, IconComponentBase, ImageIconComponent, ImagePlayIconComponent, ImagePlusIconComponent, ImageSearchIconComponent, ImagesIconComponent, InboxIconComponent, InfoIconComponent, InputComponent, InstagramIconComponent, ItalicIconComponent, KeyIconComponent, KeyboardIconComponent, KeyframeIconComponent, KubernetesIconComponent, LampIconComponent, LanguagesIconComponent, LaptopIconComponent, LayersIconComponent, LayoutDashboardIconComponent, LayoutIconComponent, LeafIconComponent, LeftHalfStarIconComponent, LifeBuoyIconComponent, LightbulbIconComponent, Link2IconComponent, LinkIconComponent, Linkedin2IconComponent, LinkedinIconComponent, ListChecksIconComponent, ListIconComponent, ListOrderedIconComponent, LoaderIconComponent, LockIconComponent, LogInIconComponent, LogOutIconComponent, MailCheckIconComponent, MailIconComponent, MapIconComponent, MapPinIconComponent, MastercardIconComponent, Maximize2IconComponent, MaximizeIconComponent, MegaphoneIconComponent, MehIconComponent, MenuComponent, MenuIconComponent, MenuItemComponent, MenuTriggerDirective, MessageCircleIconComponent, MessageSquareIconComponent, MicIconComponent, MicOffIconComponent, MicVocalIconComponent, MicroscopeIconComponent, MicrosoftIconComponent, Minimize2IconComponent, MinimizeIconComponent, MinusCircleIconComponent, MinusIconComponent, MinusSquareIconComponent, MongodbIconComponent, MonitorIconComponent, MonitorPlayIconComponent, MoonIconComponent, MoreHorizontalIconComponent, MoreVerticalIconComponent, MousePointerIconComponent, MoveIconComponent, MultiSelectComponent, MusicIconComponent, Navigation2IconComponent, NavigationIconComponent, NetlifyIconComponent, NewspaperIconComponent, NodejsIconComponent, NotionIconComponent, NpmIconComponent, NumberInputComponent, OctagonIconComponent, PAGE_SIZE_ALL, PackageIconComponent, PaginatorComponent, PaletteIconComponent, PaperclipIconComponent, PauseCircleIconComponent, PauseIconComponent, PaypalIconComponent, PenToolIconComponent, PentagonIconComponent, PercentIconComponent, PhoneCallIconComponent, PhoneForwardedIconComponent, PhoneIconComponent, PhoneIncomingIconComponent, PhoneMissedIconComponent, PhoneOffIconComponent, PhoneOutgoingIconComponent, PictureInPictureIconComponent, PieChartIconComponent, PinIconComponent, PinterestIconComponent, PlaneIconComponent, PlayCircleIconComponent, PlayIconComponent, PlaylistIconComponent, PlugIconComponent, PlusCircleIconComponent, PlusIconComponent, PlusSquareIconComponent, PocketIconComponent, PodcastIconComponent, PopoverComponent, PowerIconComponent, PrinterIconComponent, ProgressBarComponent, ProjectorIconComponent, PythonIconComponent, QrCodeIconComponent, QuestionExclamationMarkIconComponent, QuestionMarkIconComponent, QuoteIconComponent, RadioComponent, RadioGroupComponent, RadioIconComponent, RadioReceiverIconComponent, RadioTowerIconComponent, RangeSliderComponent, RatingComponent, ReactIconComponent, ReceiptIconComponent, RecordIconComponent, RectangleHorizontalIconComponent, RectangleVerticalIconComponent, RedditIconComponent, RedoIconComponent, RefreshCcwIconComponent, RefreshCwIconComponent, Repeat1IconComponent, RepeatIconComponent, ReplyIconComponent, RewindIconComponent, RightHalfStarIconComponent, RocketIconComponent, RotateCcwIconComponent, RotateCcwSquareIconComponent, RotateCwIconComponent, RowsIconComponent, RssIconComponent, SaveIconComponent, ScanIconComponent, ScissorsIconComponent, ScreenShareIconComponent, SearchIconComponent, SecondPlaceMedalIconComponent, SegmentedComponent, SendIconComponent, ServerIconComponent, SettingsIconComponent, Share2IconComponent, ShareIconComponent, ShieldAlertIconComponent, ShieldCheckIconComponent, ShieldIconComponent, ShieldOffIconComponent, ShopifyIconComponent, ShoppingBagIconComponent, ShoppingCartIconComponent, ShuffleIconComponent, SidebarIconComponent, SineWaveIconComponent, SkeletonComponent, SkipBackIconComponent, SkipForwardIconComponent, Slack2IconComponent, SlackIconComponent, SlashIconComponent, SliderComponent, SlidersIconComponent, SmartphoneIconComponent, SmileIconComponent, SnowflakeIconComponent, SoccerBallIconComponent, SparklesIconComponent, SpeakerIconComponent, SpinnerComponent, SpotifyIconComponent, SquareIconComponent, SquarePlayIconComponent, StarIconComponent, StepBackIconComponent, StepComponent, StepForwardIconComponent, StepperComponent, StopCircleIconComponent, StrikethroughIconComponent, StripeIconComponent, SubtitlesIconComponent, SubtitlesOffIconComponent, SunIconComponent, SunriseIconComponent, SunsetIconComponent, SvelteIconComponent, SwitchCameraIconComponent, SwitchComponent, TabComponent, TableIconComponent, TabletIconComponent, TabsComponent, TagComponent, TagIconComponent, TailwindIconComponent, TargetIconComponent, TelegramIconComponent, TerminalIconComponent, TextareaComponent, ThermometerIconComponent, ThirdPlaceMedalIconComponent, ThreadsIconComponent, ThumbsDownIconComponent, ThumbsUpIconComponent, TiktokIconComponent, TimePickerComponent, TimecodeIconComponent, TimelineComponent, TimerIconComponent, ToastComponent, ToastService, ToggleLeftIconComponent, ToggleRightIconComponent, ToolIconComponent, TooltipDirective, TranscodeIconComponent, TransferListComponent, Trash2IconComponent, TrashIconComponent, TreeComponent, TrelloIconComponent, TrendingDownIconComponent, TrendingUpIconComponent, TriangleIconComponent, TrimIconComponent, TrophyIconComponent, TruckIconComponent, TvIconComponent, Twitch2IconComponent, TwitchIconComponent, TwitterIconComponent, TypeIconComponent, UmbrellaIconComponent, UnderlineIconComponent, UndoIconComponent, UnlinkIconComponent, UnlockIconComponent, UploadCloudIconComponent, UploadIconComponent, UserCheckIconComponent, UserCircleIconComponent, UserIconComponent, UserMinusIconComponent, UserPlusIconComponent, UserXIconComponent, UsersIconComponent, VercelIconComponent, VideoIconComponent, VideoOffIconComponent, VirtualListComponent, VoicemailIconComponent, Volume1IconComponent, Volume2IconComponent, VolumeIconComponent, VolumeXIconComponent, VueIconComponent, WCAG_AA, WalletIconComponent, WandIconComponent, WatchIconComponent, WaveformIconComponent, WebcamIconComponent, WhatsappIconComponent, WifiIconComponent, WifiOffIconComponent, WindIconComponent, WordpressIconComponent, XCircleIconComponent, XIconComponent, XOctagonIconComponent, XSquareIconComponent, XTwitterIconComponent, Youtube2IconComponent, YoutubeIconComponent, ZapIconComponent, ZapOffIconComponent, ZoomInIconComponent, ZoomOutIconComponent, applyPalette, ar, computePopoverPosition, contrastRatio, de, derivePalette, el, en, esES, formatViolations, frFR, frenchSpacing, he, hexToOklch, hi, iconDisplayName, is, isGrouped, nl, oklchToHex, pl, provideEagamiUi, ptBR, relativeLuminance, ru, uk, validatePalette, visibleNodeIds, walkTree, zhCN };
|
|
72245
|
+
export { AccessibilityIconComponent, AccordionComponent, AccordionItemComponent, ActivityIconComponent, AirplayIconComponent, AlarmClockIconComponent, AlertCircleIconComponent, AlertComponent, AlertOctagonIconComponent, AlertTriangleIconComponent, AlignCenterIconComponent, AlignJustifyIconComponent, AlignLeftIconComponent, AlignRightIconComponent, AnchorIconComponent, AndroidIconComponent, AngularIconComponent, AnthropicIconComponent, ApertureIconComponent, ArchiveIconComponent, ArrayIconComponent, ArrowDownCircleIconComponent, ArrowDownIconComponent, ArrowDownLeftIconComponent, ArrowDownRightIconComponent, ArrowLeftCircleIconComponent, ArrowLeftIconComponent, ArrowLeftRightIconComponent, ArrowRightCircleIconComponent, ArrowRightIconComponent, ArrowUpCircleIconComponent, ArrowUpDownIconComponent, ArrowUpIconComponent, ArrowUpLeftIconComponent, ArrowUpRightIconComponent, AspectRatioIconComponent, AtSignIconComponent, AutocompleteComponent, AvatarComponent, AvatarEditorComponent, AwardIconComponent, BadgeCheckIconComponent, BadgeComponent, BanIconComponent, BarChart2IconComponent, BarChartComponent, BarChartIconComponent, BatteryChargingIconComponent, BatteryIconComponent, BellIconComponent, BellOffIconComponent, BellRingIconComponent, BitcoinIconComponent, BlueskyIconComponent, BluetoothIconComponent, BoldIconComponent, BookIconComponent, BookOpenIconComponent, BookmarkCheckIconComponent, BookmarkIconComponent, BookmarkPlusIconComponent, BoomboxIconComponent, BotIconComponent, BottleIconComponent, BoxIconComponent, BrainIconComponent, BreadcrumbsComponent, BriefcaseIconComponent, BugIconComponent, BuildingIconComponent, ButtonComponent, CalculatorIconComponent, CalendarCheckIconComponent, CalendarDaysIconComponent, CalendarIconComponent, CalendarPlusIconComponent, CameraIconComponent, CameraOffIconComponent, CandleIconComponent, CardComponent, CassetteTapeIconComponent, CastIconComponent, CheckCheckIconComponent, CheckCircleIconComponent, CheckIconComponent, CheckSquareIconComponent, CheckboxComponent, ChevronDownIconComponent, ChevronLeftIconComponent, ChevronRightIconComponent, ChevronUpIconComponent, ChevronsDownIconComponent, ChevronsLeftIconComponent, ChevronsRightIconComponent, ChevronsUpDownIconComponent, ChevronsUpIconComponent, ChromeIconComponent, CircleIconComponent, ClapperboardIconComponent, ClipboardCheckIconComponent, ClipboardIconComponent, ClipboardListIconComponent, ClipboardPasteIconComponent, ClockIconComponent, CloudDrizzleIconComponent, CloudIconComponent, CloudLightningIconComponent, CloudOffIconComponent, CloudRainIconComponent, CloudSnowIconComponent, CloudSunIconComponent, CloudflareIconComponent, CodeIconComponent, CodeInputComponent, CodepenIconComponent, CodesandboxIconComponent, CoffeeIconComponent, CoinsIconComponent, ColorPickerComponent, ColumnsIconComponent, CommandIconComponent, CommandPaletteComponent, CompassIconComponent, ContrastIconComponent, CookieIconComponent, CopyIconComponent, CornerDownLeftIconComponent, CornerDownRightIconComponent, CornerLeftDownIconComponent, CornerLeftUpIconComponent, CornerRightDownIconComponent, CornerRightUpIconComponent, CornerUpLeftIconComponent, CornerUpRightIconComponent, CosineWaveIconComponent, CpuIconComponent, CreditCardIconComponent, CropIconComponent, CrosshairIconComponent, CrownIconComponent, DEFAULT_PALETTE_ROLES, DataTableComponent, DatabaseIconComponent, DatePickerComponent, DeleteIconComponent, DialogComponent, DiamondIconComponent, Dice1IconComponent, Dice2IconComponent, Dice3IconComponent, Dice4IconComponent, Dice5IconComponent, Dice6IconComponent, DiscIconComponent, DiscordIconComponent, DivideCircleIconComponent, DivideIconComponent, DivideSquareIconComponent, DividerComponent, DockerIconComponent, DollarSignIconComponent, DoubleExclamationMarkIconComponent, DoubleQuestionMarkIconComponent, DownloadCloudIconComponent, DownloadIconComponent, DrawerComponent, DribbbleIconComponent, DropboxIconComponent, DropdownComponent, DropletIconComponent, EAGAMI_ALL_LOCALES, EAGAMI_I18N_CONFIG, EAGAMI_LOCALES, EAGAMI_LOCALE_META, EagamiI18nService, EagamiIconComponent, EagamiWordmarkComponent, Edit2IconComponent, Edit3IconComponent, EditIconComponent, EjectIconComponent, EmptyStateComponent, EuroIconComponent, ExclamationMarkIconComponent, ExclamationQuestionMarkIconComponent, ExternalLinkIconComponent, EyeIconComponent, EyeOffIconComponent, Facebook2IconComponent, FacebookIconComponent, FastForwardIconComponent, FeatherIconComponent, FieldLabelComponent, FieldMessagesComponent, Figma2IconComponent, FigmaIconComponent, FileAudioIconComponent, FileCheckIconComponent, FileCodeIconComponent, FileIconComponent, FileImageIconComponent, FileMinusIconComponent, FilePdfIconComponent, FilePlusIconComponent, FileTextIconComponent, FileUploaderComponent, FileVideoIconComponent, FilmIconComponent, FilterIconComponent, FilterXIconComponent, FingerprintIconComponent, FirstPlaceMedalIconComponent, FlagIconComponent, FlameIconComponent, FlaskConicalIconComponent, FolderIconComponent, FolderMinusIconComponent, FolderOpenIconComponent, FolderPlusIconComponent, FormFieldComponent, ForwardIconComponent, FramerIconComponent, FrownIconComponent, GaugeIconComponent, GeminiIconComponent, GiftIconComponent, GitBranchIconComponent, GitCommitIconComponent, GitCompareIconComponent, GitMergeIconComponent, GitPullRequestIconComponent, Github2IconComponent, GithubIconComponent, GitlabIconComponent, GlobeIconComponent, GoogleIconComponent, GraduationCapIconComponent, GridIconComponent, GripHorizontalIconComponent, GripVerticalIconComponent, HalfCircleIconComponent, HalfHeartIconComponent, HardDriveIconComponent, HashIconComponent, HeadphonesIconComponent, HeadsetIconComponent, HeartIconComponent, HelpCircleIconComponent, HeptagonIconComponent, HexagonIconComponent, HistoryIconComponent, HomeIconComponent, HourglassIconComponent, ICONS, IconComponentBase, ImageIconComponent, ImagePlayIconComponent, ImagePlusIconComponent, ImageSearchIconComponent, ImagesIconComponent, InboxIconComponent, InfoIconComponent, InputComponent, InstagramIconComponent, ItalicIconComponent, KeyIconComponent, KeyboardIconComponent, KeyframeIconComponent, KubernetesIconComponent, LampIconComponent, LanguagesIconComponent, LaptopIconComponent, LayersIconComponent, LayoutDashboardIconComponent, LayoutIconComponent, LeafIconComponent, LeftHalfStarIconComponent, LifeBuoyIconComponent, LightbulbIconComponent, LineChartComponent, Link2IconComponent, LinkIconComponent, Linkedin2IconComponent, LinkedinIconComponent, ListChecksIconComponent, ListIconComponent, ListOrderedIconComponent, LoaderIconComponent, LockIconComponent, LogInIconComponent, LogOutIconComponent, MailCheckIconComponent, MailIconComponent, MapIconComponent, MapPinIconComponent, MastercardIconComponent, Maximize2IconComponent, MaximizeIconComponent, MegaphoneIconComponent, MehIconComponent, MenuComponent, MenuIconComponent, MenuItemComponent, MenuTriggerDirective, MessageCircleIconComponent, MessageSquareIconComponent, MicIconComponent, MicOffIconComponent, MicVocalIconComponent, MicroscopeIconComponent, MicrosoftIconComponent, Minimize2IconComponent, MinimizeIconComponent, MinusCircleIconComponent, MinusIconComponent, MinusSquareIconComponent, MongodbIconComponent, MonitorIconComponent, MonitorPlayIconComponent, MoonIconComponent, MoreHorizontalIconComponent, MoreVerticalIconComponent, MousePointerIconComponent, MoveIconComponent, MultiSelectComponent, MusicIconComponent, Navigation2IconComponent, NavigationIconComponent, NetlifyIconComponent, NewspaperIconComponent, NodejsIconComponent, NotionIconComponent, NpmIconComponent, NumberInputComponent, OctagonIconComponent, PAGE_SIZE_ALL, PackageIconComponent, PaginatorComponent, PaletteIconComponent, PaperclipIconComponent, PauseCircleIconComponent, PauseIconComponent, PaypalIconComponent, PenToolIconComponent, PentagonIconComponent, PercentIconComponent, PhoneCallIconComponent, PhoneForwardedIconComponent, PhoneIconComponent, PhoneIncomingIconComponent, PhoneMissedIconComponent, PhoneOffIconComponent, PhoneOutgoingIconComponent, PictureInPictureIconComponent, PieChartComponent, PieChartIconComponent, PinIconComponent, PinterestIconComponent, PlaneIconComponent, PlayCircleIconComponent, PlayIconComponent, PlaylistIconComponent, PlugIconComponent, PlusCircleIconComponent, PlusIconComponent, PlusSquareIconComponent, PocketIconComponent, PodcastIconComponent, PopoverComponent, PowerIconComponent, PrinterIconComponent, ProgressBarComponent, ProjectorIconComponent, PythonIconComponent, QrCodeIconComponent, QuestionExclamationMarkIconComponent, QuestionMarkIconComponent, QuoteIconComponent, RadioComponent, RadioGroupComponent, RadioIconComponent, RadioReceiverIconComponent, RadioTowerIconComponent, RangeSliderComponent, RatingComponent, ReactIconComponent, ReceiptIconComponent, RecordIconComponent, RectangleHorizontalIconComponent, RectangleVerticalIconComponent, RedditIconComponent, RedoIconComponent, RefreshCcwIconComponent, RefreshCwIconComponent, Repeat1IconComponent, RepeatIconComponent, ReplyIconComponent, RewindIconComponent, RightHalfStarIconComponent, RocketIconComponent, RotateCcwIconComponent, RotateCcwSquareIconComponent, RotateCwIconComponent, RowsIconComponent, RssIconComponent, SaveIconComponent, ScanIconComponent, ScissorsIconComponent, ScreenShareIconComponent, SearchIconComponent, SecondPlaceMedalIconComponent, SegmentedComponent, SendIconComponent, ServerIconComponent, SettingsIconComponent, Share2IconComponent, ShareIconComponent, ShieldAlertIconComponent, ShieldCheckIconComponent, ShieldIconComponent, ShieldOffIconComponent, ShopifyIconComponent, ShoppingBagIconComponent, ShoppingCartIconComponent, ShuffleIconComponent, SidebarIconComponent, SineWaveIconComponent, SkeletonComponent, SkipBackIconComponent, SkipForwardIconComponent, Slack2IconComponent, SlackIconComponent, SlashIconComponent, SliderComponent, SlidersIconComponent, SmartphoneIconComponent, SmileIconComponent, SnowflakeIconComponent, SoccerBallIconComponent, SparklesIconComponent, SpeakerIconComponent, SpinnerComponent, SpotifyIconComponent, SquareIconComponent, SquarePlayIconComponent, StarIconComponent, StepBackIconComponent, StepComponent, StepForwardIconComponent, StepperComponent, StopCircleIconComponent, StrikethroughIconComponent, StripeIconComponent, SubtitlesIconComponent, SubtitlesOffIconComponent, SunIconComponent, SunriseIconComponent, SunsetIconComponent, SvelteIconComponent, SwitchCameraIconComponent, SwitchComponent, TabComponent, TableIconComponent, TabletIconComponent, TabsComponent, TagComponent, TagIconComponent, TailwindIconComponent, TargetIconComponent, TelegramIconComponent, TerminalIconComponent, TextareaComponent, ThermometerIconComponent, ThirdPlaceMedalIconComponent, ThreadsIconComponent, ThumbsDownIconComponent, ThumbsUpIconComponent, TiktokIconComponent, TimePickerComponent, TimecodeIconComponent, TimelineComponent, TimerIconComponent, ToastComponent, ToastService, ToggleLeftIconComponent, ToggleRightIconComponent, ToolIconComponent, TooltipDirective, TranscodeIconComponent, TransferListComponent, Trash2IconComponent, TrashIconComponent, TreeComponent, TrelloIconComponent, TrendingDownIconComponent, TrendingUpIconComponent, TriangleIconComponent, TrimIconComponent, TrophyIconComponent, TruckIconComponent, TvIconComponent, Twitch2IconComponent, TwitchIconComponent, TwitterIconComponent, TypeIconComponent, UmbrellaIconComponent, UnderlineIconComponent, UndoIconComponent, UnlinkIconComponent, UnlockIconComponent, UploadCloudIconComponent, UploadIconComponent, UserCheckIconComponent, UserCircleIconComponent, UserIconComponent, UserMinusIconComponent, UserPlusIconComponent, UserXIconComponent, UsersIconComponent, VercelIconComponent, VideoIconComponent, VideoOffIconComponent, VirtualListComponent, VoicemailIconComponent, Volume1IconComponent, Volume2IconComponent, VolumeIconComponent, VolumeXIconComponent, VueIconComponent, WCAG_AA, WalletIconComponent, WandIconComponent, WatchIconComponent, WaveformIconComponent, WebcamIconComponent, WhatsappIconComponent, WifiIconComponent, WifiOffIconComponent, WindIconComponent, WordpressIconComponent, XCircleIconComponent, XIconComponent, XOctagonIconComponent, XSquareIconComponent, XTwitterIconComponent, Youtube2IconComponent, YoutubeIconComponent, ZapIconComponent, ZapOffIconComponent, ZoomInIconComponent, ZoomOutIconComponent, applyPalette, ar, computePopoverPosition, contrastRatio, de, derivePalette, el, en, esES, formatViolations, frFR, frenchSpacing, he, hexToOklch, hi, iconDisplayName, is, isGrouped, nl, oklchToHex, pl, provideEagamiUi, ptBR, relativeLuminance, ru, uk, validatePalette, visibleNodeIds, walkTree, zhCN };
|
|
69606
72246
|
|
|
69607
72247
|
//# sourceMappingURL=eagami-ui.mjs.map
|