@xsmusices/ui 1.41.1 → 1.42.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/{xsmusices-ui-index-BpVmLxoG.mjs → xsmusices-ui-index-DRXscULI.mjs} +1 -4
- package/fesm2022/xsmusices-ui-index-DRXscULI.mjs.map +1 -0
- package/fesm2022/{xsmusices-ui-xs-badge.xsstory-BZnTAQWz.mjs → xsmusices-ui-xs-badge.xsstory-B1QXLQ4H.mjs} +1 -4
- package/fesm2022/xsmusices-ui-xs-badge.xsstory-B1QXLQ4H.mjs.map +1 -0
- package/fesm2022/{xsmusices-ui-xs-item-compact.xsstory-DuSgaCDY.mjs → xsmusices-ui-xs-item-compact.xsstory-LhApuPL7.mjs} +2 -2
- package/fesm2022/{xsmusices-ui-xs-item-compact.xsstory-DuSgaCDY.mjs.map → xsmusices-ui-xs-item-compact.xsstory-LhApuPL7.mjs.map} +1 -1
- package/fesm2022/{xsmusices-ui-xs-item-type.xsstory-BWJQ-hDk.mjs → xsmusices-ui-xs-item-type.xsstory-DUeCnW0R.mjs} +2 -2
- package/fesm2022/{xsmusices-ui-xs-item-type.xsstory-BWJQ-hDk.mjs.map → xsmusices-ui-xs-item-type.xsstory-DUeCnW0R.mjs.map} +1 -1
- package/fesm2022/{xsmusices-ui-xs-items-slider.xsstory-CS4xTKuJ.mjs → xsmusices-ui-xs-items-slider.xsstory-Dt0bXZI_.mjs} +2 -2
- package/fesm2022/{xsmusices-ui-xs-items-slider.xsstory-CS4xTKuJ.mjs.map → xsmusices-ui-xs-items-slider.xsstory-Dt0bXZI_.mjs.map} +1 -1
- package/fesm2022/{xsmusices-ui-xs-list.xsstory-BxAErIEF.mjs → xsmusices-ui-xs-list.xsstory-lElGfvcY.mjs} +2 -2
- package/fesm2022/{xsmusices-ui-xs-list.xsstory-BxAErIEF.mjs.map → xsmusices-ui-xs-list.xsstory-lElGfvcY.mjs.map} +1 -1
- package/fesm2022/{xsmusices-ui-xs-map.xsstory-DBT6h0Hv.mjs → xsmusices-ui-xs-map.xsstory-C__bUaLQ.mjs} +1 -5
- package/fesm2022/xsmusices-ui-xs-map.xsstory-C__bUaLQ.mjs.map +1 -0
- package/fesm2022/{xsmusices-ui-xs-navbar.xsstory-CkdvldoV.mjs → xsmusices-ui-xs-navbar.xsstory-DZrnLMId.mjs} +22 -1
- package/fesm2022/xsmusices-ui-xs-navbar.xsstory-DZrnLMId.mjs.map +1 -0
- package/fesm2022/{xsmusices-ui-xs-table.xsstory-DXiZHI7p.mjs → xsmusices-ui-xs-table.xsstory-s13JV3k9.mjs} +2 -2
- package/fesm2022/{xsmusices-ui-xs-table.xsstory-DXiZHI7p.mjs.map → xsmusices-ui-xs-table.xsstory-s13JV3k9.mjs.map} +1 -1
- package/fesm2022/xsmusices-ui.mjs +40 -131
- package/fesm2022/xsmusices-ui.mjs.map +1 -1
- package/index.d.ts +1 -17
- package/package.json +1 -1
- package/styles/shared-utilities.css +0 -1
- package/fesm2022/xsmusices-ui-index-BpVmLxoG.mjs.map +0 -1
- package/fesm2022/xsmusices-ui-xs-badge.xsstory-BZnTAQWz.mjs.map +0 -1
- package/fesm2022/xsmusices-ui-xs-map.xsstory-DBT6h0Hv.mjs.map +0 -1
- package/fesm2022/xsmusices-ui-xs-navbar.xsstory-CkdvldoV.mjs.map +0 -1
|
@@ -2143,7 +2143,6 @@ class XSDateFormatPipe {
|
|
|
2143
2143
|
: dateTime);
|
|
2144
2144
|
if (Number.isNaN(d.getTime()))
|
|
2145
2145
|
return '';
|
|
2146
|
-
// Handle specific formats
|
|
2147
2146
|
if (format === 'MMMM') {
|
|
2148
2147
|
try {
|
|
2149
2148
|
return new Intl.DateTimeFormat(locale, {
|
|
@@ -2164,7 +2163,6 @@ class XSDateFormatPipe {
|
|
|
2164
2163
|
return d.toLocaleString(locale, { month: 'short' });
|
|
2165
2164
|
}
|
|
2166
2165
|
}
|
|
2167
|
-
// Handle time formats
|
|
2168
2166
|
if (format === 'HH') {
|
|
2169
2167
|
try {
|
|
2170
2168
|
return new Intl.DateTimeFormat('es-ES', {
|
|
@@ -2225,7 +2223,6 @@ class XSDateFormatPipe {
|
|
|
2225
2223
|
return `${day}-${month}-${year} ${hours}:${minutes}`;
|
|
2226
2224
|
}
|
|
2227
2225
|
}
|
|
2228
|
-
// Fallback to default locale string
|
|
2229
2226
|
return d.toLocaleString(locale);
|
|
2230
2227
|
}
|
|
2231
2228
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: XSDateFormatPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
@@ -2331,13 +2328,10 @@ class XSAvatarService {
|
|
|
2331
2328
|
getInitials(name) {
|
|
2332
2329
|
if (!name)
|
|
2333
2330
|
return 'U';
|
|
2334
|
-
// 1. Quitar contenido entre paréntesis y corchetes (ej. Cream (KR) -> Cream)
|
|
2335
2331
|
let clean = name
|
|
2336
2332
|
.replace(/\(.*?\)/g, '')
|
|
2337
2333
|
.replace(/\[.*?\]/g, '');
|
|
2338
|
-
// 2. Dejar solo letras (incluyendo acentos y ñ/ü) y convertir otros caracteres a espacios
|
|
2339
2334
|
clean = clean.replace(/[^a-zA-ZáéíóúÁÉÍÓÚñÑüÜ]/g, ' ');
|
|
2340
|
-
// 3. Dividir por espacios y filtrar partes vacías
|
|
2341
2335
|
const parts = clean
|
|
2342
2336
|
.trim()
|
|
2343
2337
|
.split(/\s+/)
|
|
@@ -2358,9 +2352,9 @@ class XSAvatarService {
|
|
|
2358
2352
|
for (let i = 0; i < name.length; i++) {
|
|
2359
2353
|
hash = name.codePointAt(i) + ((hash << 5) - hash);
|
|
2360
2354
|
}
|
|
2361
|
-
const hue = Math.abs(hash) % 360;
|
|
2362
|
-
const saturation = 65;
|
|
2363
|
-
const lightness = 45;
|
|
2355
|
+
const hue = Math.abs(hash) % 360;
|
|
2356
|
+
const saturation = 65;
|
|
2357
|
+
const lightness = 45;
|
|
2364
2358
|
return this.hslToHex(hue, saturation, lightness);
|
|
2365
2359
|
}
|
|
2366
2360
|
hslToHex(h, s, l) {
|
|
@@ -2424,7 +2418,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImpo
|
|
|
2424
2418
|
}]
|
|
2425
2419
|
}] });
|
|
2426
2420
|
|
|
2427
|
-
// file: lib/tokens/api-url.token.ts
|
|
2428
2421
|
const XS_API_URL = new InjectionToken('URL del servidor API', {
|
|
2429
2422
|
providedIn: 'root',
|
|
2430
2423
|
factory: () => 'https://api-v2.xsmusic.es',
|
|
@@ -2653,7 +2646,6 @@ class NumberToMonthPipe {
|
|
|
2653
2646
|
}
|
|
2654
2647
|
// El constructor de Date usa meses de 0 a 11, por lo que restamos 1 al número.
|
|
2655
2648
|
const date = new Date(2025, monthNumber - 1, 1);
|
|
2656
|
-
// Usamos formatDate para obtener el nombre completo del mes.
|
|
2657
2649
|
return formatDate(date, 'MMMM', locale);
|
|
2658
2650
|
}
|
|
2659
2651
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NumberToMonthPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
@@ -3841,9 +3833,7 @@ class XSSafeUrlPipe {
|
|
|
3841
3833
|
return this.sanitizer.bypassSecurityTrustResourceUrl(value);
|
|
3842
3834
|
}
|
|
3843
3835
|
}
|
|
3844
|
-
catch {
|
|
3845
|
-
// URL inválida: devolver vacío seguro
|
|
3846
|
-
}
|
|
3836
|
+
catch { }
|
|
3847
3837
|
return this.sanitizer.bypassSecurityTrustResourceUrl(EMPTY_SAFE_URL);
|
|
3848
3838
|
}
|
|
3849
3839
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: XSSafeUrlPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
@@ -4590,23 +4580,18 @@ class XSToastService {
|
|
|
4590
4580
|
// Estado centralizado con Signals para máxima performance en Angular 20
|
|
4591
4581
|
_toasts = signal([], ...(ngDevMode ? [{ debugName: "_toasts" }] : []));
|
|
4592
4582
|
toasts = this._toasts.asReadonly();
|
|
4593
|
-
// Eventos de stream para el chat
|
|
4594
4583
|
_chatNotificationClicked = new Subject();
|
|
4595
4584
|
chatNotificationClicked$ = this._chatNotificationClicked.asObservable();
|
|
4596
|
-
/**
|
|
4597
|
-
* Método core privado para instanciar cualquier toast
|
|
4598
|
-
*/
|
|
4599
4585
|
show(config) {
|
|
4600
4586
|
const id = config.id || v4();
|
|
4601
4587
|
const newToast = {
|
|
4602
|
-
message: '',
|
|
4588
|
+
message: '',
|
|
4603
4589
|
...config,
|
|
4604
4590
|
id,
|
|
4605
4591
|
duration: config.duration ?? 3000,
|
|
4606
4592
|
closable: config.closable ?? true,
|
|
4607
4593
|
type: config.type ?? 'info',
|
|
4608
4594
|
};
|
|
4609
|
-
// Actualización atómica del estado
|
|
4610
4595
|
this._toasts.update((state) => [...state, newToast]);
|
|
4611
4596
|
// Auto-cierre: Solo si tiene duración 0 se considera permanente
|
|
4612
4597
|
const isPermanent = newToast.duration === 0;
|
|
@@ -4614,15 +4599,11 @@ class XSToastService {
|
|
|
4614
4599
|
setTimeout(() => this.removeToast(id), newToast.duration);
|
|
4615
4600
|
}
|
|
4616
4601
|
}
|
|
4617
|
-
/**
|
|
4618
|
-
* Elimina un toast por su ID
|
|
4619
|
-
*/
|
|
4620
4602
|
removeToast(id) {
|
|
4621
4603
|
if (!id)
|
|
4622
4604
|
return;
|
|
4623
4605
|
this._toasts.update((state) => state.filter((t) => t.id !== id));
|
|
4624
4606
|
}
|
|
4625
|
-
// --- Métodos de conveniencia ---
|
|
4626
4607
|
showSuccess(message, title, duration) {
|
|
4627
4608
|
this.show({ message, title, type: 'success', duration });
|
|
4628
4609
|
}
|
|
@@ -4654,9 +4635,6 @@ class XSToastService {
|
|
|
4654
4635
|
closable: true,
|
|
4655
4636
|
});
|
|
4656
4637
|
}
|
|
4657
|
-
/**
|
|
4658
|
-
* Notificación específica de Chat con avatares
|
|
4659
|
-
*/
|
|
4660
4638
|
showNotification(message, chatId, items, senderName, messagePreview, duration = 0) {
|
|
4661
4639
|
this.show({
|
|
4662
4640
|
message,
|
|
@@ -4670,15 +4648,9 @@ class XSToastService {
|
|
|
4670
4648
|
closable: true,
|
|
4671
4649
|
});
|
|
4672
4650
|
}
|
|
4673
|
-
/**
|
|
4674
|
-
* Emite el evento de click en chat y limpia el rastro
|
|
4675
|
-
*/
|
|
4676
4651
|
emitChatNotificationClicked(chatId) {
|
|
4677
4652
|
this._chatNotificationClicked.next(chatId);
|
|
4678
4653
|
}
|
|
4679
|
-
/**
|
|
4680
|
-
* Limpia toda la pantalla de notificaciones
|
|
4681
|
-
*/
|
|
4682
4654
|
closeAll() {
|
|
4683
4655
|
this._toasts.set([]);
|
|
4684
4656
|
}
|
|
@@ -5210,11 +5182,11 @@ class XSItemsSliderTitleButtonsComponent {
|
|
|
5210
5182
|
return null;
|
|
5211
5183
|
}
|
|
5212
5184
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: XSItemsSliderTitleButtonsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5213
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: XSItemsSliderTitleButtonsComponent, isStandalone: true, selector: "xs-items-slider-title-buttons", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, titleId: { classPropertyName: "titleId", publicName: "titleId", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: true, transformFunction: null }, hasSortButton: { classPropertyName: "hasSortButton", publicName: "hasSortButton", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, manage: { classPropertyName: "manage", publicName: "manage", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null }, total: { classPropertyName: "total", publicName: "total", isSignal: true, isRequired: false, transformFunction: null }, view: { classPropertyName: "view", publicName: "view", isSignal: true, isRequired: false, transformFunction: null }, hasViewButtons: { classPropertyName: "hasViewButtons", publicName: "hasViewButtons", isSignal: true, isRequired: false, transformFunction: null }, hasSoundcloudItems: { classPropertyName: "hasSoundcloudItems", publicName: "hasSoundcloudItems", isSignal: true, isRequired: false, transformFunction: null }, tabs: { classPropertyName: "tabs", publicName: "tabs", isSignal: true, isRequired: false, transformFunction: null }, selectedTab: { classPropertyName: "selectedTab", publicName: "selectedTab", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, texts: { classPropertyName: "texts", publicName: "texts", isSignal: true, isRequired: false, transformFunction: null }, isPlayingAll: { classPropertyName: "isPlayingAll", publicName: "isPlayingAll", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedTab: "selectedTabChange", onClickChangeView: "onClickChangeView", onClickPlayAll: "onClickPlayAll", onClickSort: "onClickSort", onChangeState: "onChangeState", onClickTab: "onClickTab" }, host: { attributes: { "xs-items-slider-title-buttons-host": "" } }, ngImport: i0, template: "<div\n class=\"flex justify-between\"\n [ngClass]=\"{\n 'items-center w-full px-6 py-2 rounded-xl bg-zinc-900/50 hover:opacity-70 cursor-pointer':\n manage(),\n 'items-end': !manage(),\n }\"\n (click)=\"manage() ? onChangeState.emit(undefined) : null\"\n (keydown.enter)=\"manage() ? onChangeState.emit(undefined) : null\"\n>\n <div\n [id]=\"titleId() ? titleId() : 'profile-' + type() + '-title'\"\n class=\"flex items-center gap-1 font-black text-left\"\n [ngClass]=\"{ 'text-sm': manage() }\"\n >\n
|
|
5185
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: XSItemsSliderTitleButtonsComponent, isStandalone: true, selector: "xs-items-slider-title-buttons", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, titleId: { classPropertyName: "titleId", publicName: "titleId", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: true, transformFunction: null }, hasSortButton: { classPropertyName: "hasSortButton", publicName: "hasSortButton", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, manage: { classPropertyName: "manage", publicName: "manage", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null }, total: { classPropertyName: "total", publicName: "total", isSignal: true, isRequired: false, transformFunction: null }, view: { classPropertyName: "view", publicName: "view", isSignal: true, isRequired: false, transformFunction: null }, hasViewButtons: { classPropertyName: "hasViewButtons", publicName: "hasViewButtons", isSignal: true, isRequired: false, transformFunction: null }, hasSoundcloudItems: { classPropertyName: "hasSoundcloudItems", publicName: "hasSoundcloudItems", isSignal: true, isRequired: false, transformFunction: null }, tabs: { classPropertyName: "tabs", publicName: "tabs", isSignal: true, isRequired: false, transformFunction: null }, selectedTab: { classPropertyName: "selectedTab", publicName: "selectedTab", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, texts: { classPropertyName: "texts", publicName: "texts", isSignal: true, isRequired: false, transformFunction: null }, isPlayingAll: { classPropertyName: "isPlayingAll", publicName: "isPlayingAll", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedTab: "selectedTabChange", onClickChangeView: "onClickChangeView", onClickPlayAll: "onClickPlayAll", onClickSort: "onClickSort", onChangeState: "onChangeState", onClickTab: "onClickTab" }, host: { attributes: { "xs-items-slider-title-buttons-host": "" } }, ngImport: i0, template: "<div\n class=\"flex justify-between\"\n [ngClass]=\"{\n 'items-center w-full px-6 py-2 rounded-xl bg-zinc-900/50 hover:opacity-70 cursor-pointer':\n manage(),\n 'items-end': !manage(),\n }\"\n (click)=\"manage() ? onChangeState.emit(undefined) : null\"\n (keydown.enter)=\"manage() ? onChangeState.emit(undefined) : null\"\n>\n <div\n [id]=\"titleId() ? titleId() : 'profile-' + type() + '-title'\"\n class=\"flex items-center gap-1 font-black text-left\"\n [ngClass]=\"{ 'text-sm': manage() }\"\n >\n @if (type() !== 'setup') {\n @if (label()) {\n {{ label() }}\n }\n @if (label() && total() && total() > 0) {\n <span\n class=\"pt-0.5 text-xs font-extralight\"\n >\n ({{ total() }})\n </span>\n }\n }\n\n @if (type() === 'setup') {\n @if (label()) {\n Setup\n {{ tabSelected?.name | titlecase }}\n }\n @if (tabSelected?.components?.length) {\n <span\n class=\"pt-0.5 text-xs font-extralight\"\n >\n ({{ tabSelected?.components?.length }})\n </span>\n }\n }\n </div>\n\n <div class=\"flex items-center gap-2\">\n <div class=\"flex gap-2 text-xs text-zinc-400\">\n @if (tabs() && tabs()!.length <= 2 && tabs()!.length > 1) {\n @for (tab of tabs()!; track $index; let i = $index) {\n <xs-button\n [variant]=\"selectedTab() !== i ? 'primary' : 'selected'\"\n [label]=\"tab.label\"\n [layout]=\"'badge'\"\n (click)=\"onClickTab.emit(i)\"\n (keydown.enter)=\"onClickTab.emit(i)\"\n >\n {{ tab.label }}\n </xs-button>\n }\n }\n @if (tabs() && tabs()!.length > 2) {\n <xs-button\n label=\"\"\n [variant]=\"selectedTab() === 0 ? 'selected' : 'primary'\"\n [layout]=\"'iconOnlyMini'\"\n [icon]=\"{ name: 'chevron-left' }\"\n [disabled]=\"selectedTab() === 0\"\n (click)=\"onClickTabChevron('left')\"\n (keydown.enter)=\"onClickTabChevron('left')\"\n >\n </xs-button>\n <xs-button\n label=\"\"\n [variant]=\"\n selectedTab() === (tabs()?.length ?? 0) - 1\n ? 'selected'\n : 'primary'\n \"\n [layout]=\"'iconOnlyMini'\"\n [icon]=\"{ name: 'chevron-right' }\"\n [disabled]=\"selectedTab() === (tabs()?.length ?? 0) - 1\"\n (click)=\"onClickTabChevron('right')\"\n (keydown.enter)=\"onClickTabChevron('right')\"\n >\n </xs-button>\n }\n </div>\n\n @if (tabs() && tabs()!.length > 1) {\n <span class=\"text-zinc-900\">|</span>\n }\n\n @if (hasSoundcloudItems()) {\n <xs-button\n icon=\"play\"\n layout=\"iconOnlyMini\"\n variant=\"custom\"\n customClass=\"px-3 py-1 rounded-xl bg-zinc-900/50 hover:opacity-70\"\n (onClick)=\"!isPlayingAll() && onClickPlayAll.emit(undefined)\"\n [title]=\"texts().play\"\n [disabled]=\"loading().play || isPlayingAll()\"\n />\n }\n\n @if (hasSoundcloudItems()) {\n <span class=\"text-zinc-900\">|</span>\n }\n\n @if (hasViewButtons()) {\n <xs-button\n icon=\"image\"\n layout=\"iconOnlyMini\"\n variant=\"custom\"\n customClass=\"px-3 py-1 rounded-xl hover:opacity-70\"\n [ngClass]=\"{\n 'bg-zinc-700': view() === 'cards',\n 'bg-zinc-900': view() === 'list',\n }\"\n (onClick)=\"onClickChangeView.emit('cards')\"\n [title]=\"texts().changeView\"\n />\n <xs-button\n icon=\"list\"\n layout=\"iconOnlyMini\"\n variant=\"custom\"\n customClass=\"px-3 py-1 rounded-xl hover:opacity-70\"\n [ngClass]=\"{\n 'bg-zinc-700': view() === 'list',\n 'bg-zinc-900': view() === 'cards',\n }\"\n (onClick)=\"onClickChangeView.emit('list')\"\n [title]=\"texts().changeView\"\n />\n }\n\n @if (hasSortButton()) {\n <span class=\"text-zinc-900\">|</span>\n }\n\n @if (hasSortButton()) {\n <xs-button\n icon=\"sort\"\n layout=\"iconOnlyMini\"\n variant=\"custom\"\n customClass=\"px-3 py-1 rounded-xl bg-zinc-900/50 hover:opacity-70\"\n (onClick)=\"onClickSort.emit(undefined)\"\n [title]=\"texts().sort\"\n />\n }\n </div>\n\n @if (manage()) {\n <xs-button\n [icon]=\"{ name: !state() ? 'chevron-down' : 'chevron-up' }\"\n layout=\"iconOnlyMini\"\n variant=\"custom\"\n customClass=\"hover:opacity-70\"\n [title]=\"texts().changeView\"\n />\n }\n</div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: XSButtonComponent, selector: "xs-button", inputs: ["id", "label", "type", "icon", "action", "customClass", "variant", "layout", "badgeCount", "isFull", "disabled", "loading", "title", "ariaLabel", "borderRadius", "isGrouped", "groupPosition"], outputs: ["isGroupedChange", "groupPositionChange", "click", "onClick"] }, { kind: "ngmodule", type: PipesModule }, { kind: "pipe", type: i1$1.TitleCasePipe, name: "titlecase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
5214
5186
|
}
|
|
5215
5187
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: XSItemsSliderTitleButtonsComponent, decorators: [{
|
|
5216
5188
|
type: Component,
|
|
5217
|
-
args: [{ selector: 'xs-items-slider-title-buttons', host: { 'xs-items-slider-title-buttons-host': '' }, imports: [CommonModule, XSButtonComponent, PipesModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"flex justify-between\"\n [ngClass]=\"{\n 'items-center w-full px-6 py-2 rounded-xl bg-zinc-900/50 hover:opacity-70 cursor-pointer':\n manage(),\n 'items-end': !manage(),\n }\"\n (click)=\"manage() ? onChangeState.emit(undefined) : null\"\n (keydown.enter)=\"manage() ? onChangeState.emit(undefined) : null\"\n>\n <div\n [id]=\"titleId() ? titleId() : 'profile-' + type() + '-title'\"\n class=\"flex items-center gap-1 font-black text-left\"\n [ngClass]=\"{ 'text-sm': manage() }\"\n >\n
|
|
5189
|
+
args: [{ selector: 'xs-items-slider-title-buttons', host: { 'xs-items-slider-title-buttons-host': '' }, imports: [CommonModule, XSButtonComponent, PipesModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"flex justify-between\"\n [ngClass]=\"{\n 'items-center w-full px-6 py-2 rounded-xl bg-zinc-900/50 hover:opacity-70 cursor-pointer':\n manage(),\n 'items-end': !manage(),\n }\"\n (click)=\"manage() ? onChangeState.emit(undefined) : null\"\n (keydown.enter)=\"manage() ? onChangeState.emit(undefined) : null\"\n>\n <div\n [id]=\"titleId() ? titleId() : 'profile-' + type() + '-title'\"\n class=\"flex items-center gap-1 font-black text-left\"\n [ngClass]=\"{ 'text-sm': manage() }\"\n >\n @if (type() !== 'setup') {\n @if (label()) {\n {{ label() }}\n }\n @if (label() && total() && total() > 0) {\n <span\n class=\"pt-0.5 text-xs font-extralight\"\n >\n ({{ total() }})\n </span>\n }\n }\n\n @if (type() === 'setup') {\n @if (label()) {\n Setup\n {{ tabSelected?.name | titlecase }}\n }\n @if (tabSelected?.components?.length) {\n <span\n class=\"pt-0.5 text-xs font-extralight\"\n >\n ({{ tabSelected?.components?.length }})\n </span>\n }\n }\n </div>\n\n <div class=\"flex items-center gap-2\">\n <div class=\"flex gap-2 text-xs text-zinc-400\">\n @if (tabs() && tabs()!.length <= 2 && tabs()!.length > 1) {\n @for (tab of tabs()!; track $index; let i = $index) {\n <xs-button\n [variant]=\"selectedTab() !== i ? 'primary' : 'selected'\"\n [label]=\"tab.label\"\n [layout]=\"'badge'\"\n (click)=\"onClickTab.emit(i)\"\n (keydown.enter)=\"onClickTab.emit(i)\"\n >\n {{ tab.label }}\n </xs-button>\n }\n }\n @if (tabs() && tabs()!.length > 2) {\n <xs-button\n label=\"\"\n [variant]=\"selectedTab() === 0 ? 'selected' : 'primary'\"\n [layout]=\"'iconOnlyMini'\"\n [icon]=\"{ name: 'chevron-left' }\"\n [disabled]=\"selectedTab() === 0\"\n (click)=\"onClickTabChevron('left')\"\n (keydown.enter)=\"onClickTabChevron('left')\"\n >\n </xs-button>\n <xs-button\n label=\"\"\n [variant]=\"\n selectedTab() === (tabs()?.length ?? 0) - 1\n ? 'selected'\n : 'primary'\n \"\n [layout]=\"'iconOnlyMini'\"\n [icon]=\"{ name: 'chevron-right' }\"\n [disabled]=\"selectedTab() === (tabs()?.length ?? 0) - 1\"\n (click)=\"onClickTabChevron('right')\"\n (keydown.enter)=\"onClickTabChevron('right')\"\n >\n </xs-button>\n }\n </div>\n\n @if (tabs() && tabs()!.length > 1) {\n <span class=\"text-zinc-900\">|</span>\n }\n\n @if (hasSoundcloudItems()) {\n <xs-button\n icon=\"play\"\n layout=\"iconOnlyMini\"\n variant=\"custom\"\n customClass=\"px-3 py-1 rounded-xl bg-zinc-900/50 hover:opacity-70\"\n (onClick)=\"!isPlayingAll() && onClickPlayAll.emit(undefined)\"\n [title]=\"texts().play\"\n [disabled]=\"loading().play || isPlayingAll()\"\n />\n }\n\n @if (hasSoundcloudItems()) {\n <span class=\"text-zinc-900\">|</span>\n }\n\n @if (hasViewButtons()) {\n <xs-button\n icon=\"image\"\n layout=\"iconOnlyMini\"\n variant=\"custom\"\n customClass=\"px-3 py-1 rounded-xl hover:opacity-70\"\n [ngClass]=\"{\n 'bg-zinc-700': view() === 'cards',\n 'bg-zinc-900': view() === 'list',\n }\"\n (onClick)=\"onClickChangeView.emit('cards')\"\n [title]=\"texts().changeView\"\n />\n <xs-button\n icon=\"list\"\n layout=\"iconOnlyMini\"\n variant=\"custom\"\n customClass=\"px-3 py-1 rounded-xl hover:opacity-70\"\n [ngClass]=\"{\n 'bg-zinc-700': view() === 'list',\n 'bg-zinc-900': view() === 'cards',\n }\"\n (onClick)=\"onClickChangeView.emit('list')\"\n [title]=\"texts().changeView\"\n />\n }\n\n @if (hasSortButton()) {\n <span class=\"text-zinc-900\">|</span>\n }\n\n @if (hasSortButton()) {\n <xs-button\n icon=\"sort\"\n layout=\"iconOnlyMini\"\n variant=\"custom\"\n customClass=\"px-3 py-1 rounded-xl bg-zinc-900/50 hover:opacity-70\"\n (onClick)=\"onClickSort.emit(undefined)\"\n [title]=\"texts().sort\"\n />\n }\n </div>\n\n @if (manage()) {\n <xs-button\n [icon]=\"{ name: !state() ? 'chevron-down' : 'chevron-up' }\"\n layout=\"iconOnlyMini\"\n variant=\"custom\"\n customClass=\"hover:opacity-70\"\n [title]=\"texts().changeView\"\n />\n }\n</div>\n" }]
|
|
5218
5190
|
}], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], titleId: [{ type: i0.Input, args: [{ isSignal: true, alias: "titleId", required: false }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: true }] }], hasSortButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasSortButton", required: false }] }], items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], manage: [{ type: i0.Input, args: [{ isSignal: true, alias: "manage", required: false }] }], state: [{ type: i0.Input, args: [{ isSignal: true, alias: "state", required: false }] }], total: [{ type: i0.Input, args: [{ isSignal: true, alias: "total", required: false }] }], view: [{ type: i0.Input, args: [{ isSignal: true, alias: "view", required: false }] }], hasViewButtons: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasViewButtons", required: false }] }], hasSoundcloudItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasSoundcloudItems", required: false }] }], tabs: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabs", required: false }] }], selectedTab: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedTab", required: false }] }, { type: i0.Output, args: ["selectedTabChange"] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], texts: [{ type: i0.Input, args: [{ isSignal: true, alias: "texts", required: false }] }], isPlayingAll: [{ type: i0.Input, args: [{ isSignal: true, alias: "isPlayingAll", required: false }] }], onClickChangeView: [{ type: i0.Output, args: ["onClickChangeView"] }], onClickPlayAll: [{ type: i0.Output, args: ["onClickPlayAll"] }], onClickSort: [{ type: i0.Output, args: ["onClickSort"] }], onChangeState: [{ type: i0.Output, args: ["onChangeState"] }], onClickTab: [{ type: i0.Output, args: ["onClickTab"] }] } });
|
|
5219
5191
|
|
|
5220
5192
|
class XSSkeletonForSliderComponent {
|
|
@@ -5524,7 +5496,7 @@ class XSItemsSliderComponent {
|
|
|
5524
5496
|
this.loadMoreData.emit();
|
|
5525
5497
|
}
|
|
5526
5498
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: XSItemsSliderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5527
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: XSItemsSliderComponent, isStandalone: true, selector: "xs-items-slider", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, typeFrom: { classPropertyName: "typeFrom", publicName: "typeFrom", isSignal: true, isRequired: false, transformFunction: null }, total: { classPropertyName: "total", publicName: "total", isSignal: true, isRequired: false, transformFunction: null }, view: { classPropertyName: "view", publicName: "view", isSignal: true, isRequired: false, transformFunction: null }, hasViewButtons: { classPropertyName: "hasViewButtons", publicName: "hasViewButtons", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, sortButtonInput: { classPropertyName: "sortButtonInput", publicName: "sortButtonInput", isSignal: true, isRequired: false, transformFunction: null }, sortValues: { classPropertyName: "sortValues", publicName: "sortValues", isSignal: true, isRequired: false, transformFunction: null }, manage: { classPropertyName: "manage", publicName: "manage", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null }, user: { classPropertyName: "user", publicName: "user", isSignal: true, isRequired: false, transformFunction: null }, tabs: { classPropertyName: "tabs", publicName: "tabs", isSignal: true, isRequired: false, transformFunction: null }, selectedTab: { classPropertyName: "selectedTab", publicName: "selectedTab", isSignal: true, isRequired: false, transformFunction: null }, hasSoundcloudItems: { classPropertyName: "hasSoundcloudItems", publicName: "hasSoundcloudItems", isSignal: true, isRequired: false, transformFunction: null }, language: { classPropertyName: "language", publicName: "language", isSignal: true, isRequired: false, transformFunction: null }, texts: { classPropertyName: "texts", publicName: "texts", isSignal: true, isRequired: false, transformFunction: null }, itemCardTexts: { classPropertyName: "itemCardTexts", publicName: "itemCardTexts", isSignal: true, isRequired: false, transformFunction: null }, isPlayingAll: { classPropertyName: "isPlayingAll", publicName: "isPlayingAll", isSignal: true, isRequired: false, transformFunction: null }, titleId: { classPropertyName: "titleId", publicName: "titleId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { view: "viewChange", selectedTab: "selectedTabChange", loadMoreData: "loadMoreData", onClickChangeSort: "onClickChangeSort", onClickPlay: "onClickPlay" }, host: { attributes: { "xs-items-slider-host": "" } }, viewQueries: [{ propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n class=\"pt-3 mx-auto max-w-full-xl max-w-7sm\"\n [ngClass]=\"{\n 'mb-3 pt-3': !manage(),\n 'mb-2': manage(),\n }\"\n>\n <xs-items-slider-title-buttons\n [label]=\"label()\"\n [items]=\"items()\"\n [type]=\"type()\"\n [titleId]=\"titleId()\"\n [hasSortButton]=\"hasSortButton()\"\n [manage]=\"manage()\"\n [state]=\"state()\"\n [total]=\"total()\"\n [view]=\"view()\"\n [hasViewButtons]=\"hasViewButtons()\"\n [hasSoundcloudItems]=\"hasSoundcloudItems()\"\n [tabs]=\"tabs()\"\n [selectedTab]=\"selectedTab()\"\n [texts]=\"texts()\"\n [isPlayingAll]=\"isPlayingAll()\"\n (onClickChangeView)=\"onClickChangeView($event)\"\n (onClickPlayAll)=\"onClickPlay.emit()\"\n (onClickSort)=\"onClickSort()\"\n (onClickTab)=\"onClickTab($event)\"\n ></xs-items-slider-title-buttons>\n\n @if ((manage() && state()) || (!manage() && !state())) {\n <!-- CARDS -->\n @if (!loading().items && view() === 'cards') {\n <div class=\"relative\">\n @if (canScrollLeft) {\n <button\n (click)=\"scrollLeftBtn()\"\n class=\"absolute z-10 p-2 text-white transition-opacity -translate-y-1/2 rounded-full shadow-lg left-2 top-1/2 bg-black/70 hover:bg-black/90\"\n >\n <svg\n class=\"w-6 h-6\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M15 19l-7-7 7-7\"\n />\n </svg>\n </button>\n }\n\n @if (type() !== 'setup') {\n <div\n #scrollContainer\n class=\"flex gap-4 py-2 overflow-scroll overflow-x-auto scrollbar-hidden scroll-smooth\"\n (scroll)=\"onScroll()\"\n (wheel)=\"onHorizontalWheel($event)\"\n >\n @for (item of items(); track $index; let i = $index) {\n <div\n class=\"flex flex-col items-center flex-shrink-0\"\n >\n <xs-item-card\n [item]=\"item\"\n [type]=\"$any(type())\"\n [forSlider]=\"true\"\n [styles]=\"true\"\n [i]=\"i\"\n [user]=\"user()\"\n [year]=\"type() === 'media'\"\n [texts]=\"itemCardTexts()\"\n [language]=\"language()\"\n ></xs-item-card>\n </div>\n }\n </div>\n }\n @if (type() === 'setup') {\n <div\n #scrollContainer\n class=\"flex gap-4 py-2 overflow-scroll overflow-x-auto scrollbar-hidden scroll-smooth\"\n (wheel)=\"onHorizontalWheel($event)\"\n >\n @if (items() && items().length > 0 && selectedTab() !== undefined && selectedTab() >= 0 && selectedTab() < items().length && $any(items()[selectedTab()])?.components) {\n @for (component of $any(items()[selectedTab()]).components; track $index; let ii = $index) {\n <div\n class=\"flex flex-col items-center flex-shrink-0\"\n >\n <xs-item-card\n [item]=\"component\"\n [type]=\"'equipment'\"\n [forSlider]=\"true\"\n [styles]=\"true\"\n [i]=\"ii\"\n [user]=\"user()\"\n [texts]=\"itemCardTexts()\"\n [language]=\"language()\"\n ></xs-item-card>\n </div>\n }\n }\n </div>\n }\n\n @if (canScrollRight) {\n <button\n (click)=\"scrollRightBtn()\"\n class=\"absolute z-10 p-2 text-white transition-opacity -translate-y-1/2 rounded-full shadow-lg right-2 top-1/2 bg-black/70 hover:bg-black/90\"\n >\n <svg\n class=\"w-6 h-6\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M9 5l7 7-7 7\"\n />\n </svg>\n </button>\n }\n </div>\n }\n\n @if (loading().items && view() === 'cards') {\n <div class=\"flex gap-4 py-2 overflow-scroll overflow-x-auto scrollbar-hidden scroll-smooth\" (wheel)=\"onHorizontalWheel($event)\">\n @for (i of [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; track $index) {\n <xs-skeleton-for-slider\n type=\"normal\"\n ></xs-skeleton-for-slider>\n }\n </div>\n }\n\n <!-- LIST -->\n @if (view() === 'list') {\n <div\n class=\"grid w-full grid-cols-1 gap-2 lg:gap-3 p-1.5 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4\"\n >\n @if (type() !== 'setup') {\n @for (item of items(); track $index; let i = $index) {\n <!-- <xs-item-compact\n [item]=\"item\"\n [type]=\"type\"\n [user]=\"user\"\n [language]=\"language\"\n ></xs-item-compact> -->\n }\n }\n\n @if (items() && items().length > 0 && selectedTab() !== undefined && selectedTab() >= 0 && selectedTab() < items().length && $any(items()[selectedTab()])?.components) {\n @for (component of $any(items()[selectedTab()]).components; track $index; let ii = $index) {\n <!-- <xs-item-compact\n [item]=\"component\"\n [type]=\"'equipment'\"\n [user]=\"user\"\n [language]=\"language\"\n ></xs-item-compact> -->\n }\n }\n </div>\n @if (!loading().items && items().length >= 10 && total() > items().length) {\n <xs-button\n [label]=\"texts().viewMore\"\n [layout]=\"'between'\"\n [isFull]=\"true\"\n [icon]=\"{ name: 'plus' }\"\n [disabled]=\"loading().more || loading().items\"\n [loading]=\"loading().more || loading().items\"\n (onClick)=\"onScrollTable()\"\n >\n </xs-button>\n }\n }\n }\n</div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: XSItemCardComponent, selector: "xs-item-card", inputs: ["type", "subtypeForced", "item", "viewTransitionName", "forSlider", "forTop", "position", "edit", "year", "styles", "stylesLeft", "link", "clickEmit", "i", "user", "count", "showLabelType", "language", "texts"], outputs: ["onGoToItem"] }, { kind: "component", type: XSItemsSliderTitleButtonsComponent, selector: "xs-items-slider-title-buttons", inputs: ["label", "titleId", "type", "hasSortButton", "items", "manage", "state", "total", "view", "hasViewButtons", "hasSoundcloudItems", "tabs", "selectedTab", "loading", "texts", "isPlayingAll"], outputs: ["selectedTabChange", "onClickChangeView", "onClickPlayAll", "onClickSort", "onChangeState", "onClickTab"] }, { kind: "component", type: XSSkeletonForSliderComponent, selector: "xs-skeleton-for-slider", inputs: ["displayType", "forSlider"] }, { kind: "component", type: XSButtonComponent, selector: "xs-button", inputs: ["id", "label", "type", "icon", "action", "customClass", "variant", "layout", "badgeCount", "isFull", "disabled", "loading", "title", "ariaLabel", "borderRadius", "isGrouped", "groupPosition"], outputs: ["isGroupedChange", "groupPositionChange", "click", "onClick"] }, { kind: "ngmodule", type: PipesModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
5499
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: XSItemsSliderComponent, isStandalone: true, selector: "xs-items-slider", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, typeFrom: { classPropertyName: "typeFrom", publicName: "typeFrom", isSignal: true, isRequired: false, transformFunction: null }, total: { classPropertyName: "total", publicName: "total", isSignal: true, isRequired: false, transformFunction: null }, view: { classPropertyName: "view", publicName: "view", isSignal: true, isRequired: false, transformFunction: null }, hasViewButtons: { classPropertyName: "hasViewButtons", publicName: "hasViewButtons", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, sortButtonInput: { classPropertyName: "sortButtonInput", publicName: "sortButtonInput", isSignal: true, isRequired: false, transformFunction: null }, sortValues: { classPropertyName: "sortValues", publicName: "sortValues", isSignal: true, isRequired: false, transformFunction: null }, manage: { classPropertyName: "manage", publicName: "manage", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null }, user: { classPropertyName: "user", publicName: "user", isSignal: true, isRequired: false, transformFunction: null }, tabs: { classPropertyName: "tabs", publicName: "tabs", isSignal: true, isRequired: false, transformFunction: null }, selectedTab: { classPropertyName: "selectedTab", publicName: "selectedTab", isSignal: true, isRequired: false, transformFunction: null }, hasSoundcloudItems: { classPropertyName: "hasSoundcloudItems", publicName: "hasSoundcloudItems", isSignal: true, isRequired: false, transformFunction: null }, language: { classPropertyName: "language", publicName: "language", isSignal: true, isRequired: false, transformFunction: null }, texts: { classPropertyName: "texts", publicName: "texts", isSignal: true, isRequired: false, transformFunction: null }, itemCardTexts: { classPropertyName: "itemCardTexts", publicName: "itemCardTexts", isSignal: true, isRequired: false, transformFunction: null }, isPlayingAll: { classPropertyName: "isPlayingAll", publicName: "isPlayingAll", isSignal: true, isRequired: false, transformFunction: null }, titleId: { classPropertyName: "titleId", publicName: "titleId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { view: "viewChange", selectedTab: "selectedTabChange", loadMoreData: "loadMoreData", onClickChangeSort: "onClickChangeSort", onClickPlay: "onClickPlay" }, host: { attributes: { "xs-items-slider-host": "" } }, viewQueries: [{ propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n class=\"pt-3 mx-auto max-w-full-xl max-w-7sm\"\n [ngClass]=\"{\n 'mb-3 pt-3': !manage(),\n 'mb-2': manage(),\n }\"\n>\n <xs-items-slider-title-buttons\n [label]=\"label()\"\n [items]=\"items()\"\n [type]=\"type()\"\n [titleId]=\"titleId()\"\n [hasSortButton]=\"hasSortButton()\"\n [manage]=\"manage()\"\n [state]=\"state()\"\n [total]=\"total()\"\n [view]=\"view()\"\n [hasViewButtons]=\"hasViewButtons()\"\n [hasSoundcloudItems]=\"hasSoundcloudItems()\"\n [tabs]=\"tabs()\"\n [selectedTab]=\"selectedTab()\"\n [texts]=\"texts()\"\n [isPlayingAll]=\"isPlayingAll()\"\n (onClickChangeView)=\"onClickChangeView($event)\"\n (onClickPlayAll)=\"onClickPlay.emit()\"\n (onClickSort)=\"onClickSort()\"\n (onClickTab)=\"onClickTab($event)\"\n ></xs-items-slider-title-buttons>\n\n @if ((manage() && state()) || (!manage() && !state())) {\n @if (!loading().items && view() === 'cards') {\n <div class=\"relative\">\n @if (canScrollLeft) {\n <button\n (click)=\"scrollLeftBtn()\"\n class=\"absolute z-10 p-2 text-white transition-opacity -translate-y-1/2 rounded-full shadow-lg left-2 top-1/2 bg-black/70 hover:bg-black/90\"\n >\n <svg\n class=\"w-6 h-6\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M15 19l-7-7 7-7\"\n />\n </svg>\n </button>\n }\n\n @if (type() !== 'setup') {\n <div\n #scrollContainer\n class=\"flex gap-4 py-2 overflow-scroll overflow-x-auto scrollbar-hidden scroll-smooth\"\n (scroll)=\"onScroll()\"\n (wheel)=\"onHorizontalWheel($event)\"\n >\n @for (item of items(); track $index; let i = $index) {\n <div\n class=\"flex flex-col items-center flex-shrink-0\"\n >\n <xs-item-card\n [item]=\"item\"\n [type]=\"$any(type())\"\n [forSlider]=\"true\"\n [styles]=\"true\"\n [i]=\"i\"\n [user]=\"user()\"\n [year]=\"type() === 'media'\"\n [texts]=\"itemCardTexts()\"\n [language]=\"language()\"\n ></xs-item-card>\n </div>\n }\n </div>\n }\n @if (type() === 'setup') {\n <div\n #scrollContainer\n class=\"flex gap-4 py-2 overflow-scroll overflow-x-auto scrollbar-hidden scroll-smooth\"\n (wheel)=\"onHorizontalWheel($event)\"\n >\n @if (items() && items().length > 0 && selectedTab() !== undefined && selectedTab() >= 0 && selectedTab() < items().length && $any(items()[selectedTab()])?.components) {\n @for (component of $any(items()[selectedTab()]).components; track $index; let ii = $index) {\n <div\n class=\"flex flex-col items-center flex-shrink-0\"\n >\n <xs-item-card\n [item]=\"component\"\n [type]=\"'equipment'\"\n [forSlider]=\"true\"\n [styles]=\"true\"\n [i]=\"ii\"\n [user]=\"user()\"\n [texts]=\"itemCardTexts()\"\n [language]=\"language()\"\n ></xs-item-card>\n </div>\n }\n }\n </div>\n }\n\n @if (canScrollRight) {\n <button\n (click)=\"scrollRightBtn()\"\n class=\"absolute z-10 p-2 text-white transition-opacity -translate-y-1/2 rounded-full shadow-lg right-2 top-1/2 bg-black/70 hover:bg-black/90\"\n >\n <svg\n class=\"w-6 h-6\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M9 5l7 7-7 7\"\n />\n </svg>\n </button>\n }\n </div>\n }\n\n @if (loading().items && view() === 'cards') {\n <div class=\"flex gap-4 py-2 overflow-scroll overflow-x-auto scrollbar-hidden scroll-smooth\" (wheel)=\"onHorizontalWheel($event)\">\n @for (i of [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; track $index) {\n <xs-skeleton-for-slider\n type=\"normal\"\n ></xs-skeleton-for-slider>\n }\n </div>\n }\n\n @if (view() === 'list') {\n <div\n class=\"grid w-full grid-cols-1 gap-2 lg:gap-3 p-1.5 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4\"\n >\n @if (type() !== 'setup') {\n @for (item of items(); track $index; let i = $index) {\n }\n }\n\n @if (items() && items().length > 0 && selectedTab() !== undefined && selectedTab() >= 0 && selectedTab() < items().length && $any(items()[selectedTab()])?.components) {\n @for (component of $any(items()[selectedTab()]).components; track $index; let ii = $index) {\n }\n }\n </div>\n @if (!loading().items && items().length >= 10 && total() > items().length) {\n <xs-button\n [label]=\"texts().viewMore\"\n [layout]=\"'between'\"\n [isFull]=\"true\"\n [icon]=\"{ name: 'plus' }\"\n [disabled]=\"loading().more || loading().items\"\n [loading]=\"loading().more || loading().items\"\n (onClick)=\"onScrollTable()\"\n >\n </xs-button>\n }\n }\n }\n</div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: XSItemCardComponent, selector: "xs-item-card", inputs: ["type", "subtypeForced", "item", "viewTransitionName", "forSlider", "forTop", "position", "edit", "year", "styles", "stylesLeft", "link", "clickEmit", "i", "user", "count", "showLabelType", "language", "texts"], outputs: ["onGoToItem"] }, { kind: "component", type: XSItemsSliderTitleButtonsComponent, selector: "xs-items-slider-title-buttons", inputs: ["label", "titleId", "type", "hasSortButton", "items", "manage", "state", "total", "view", "hasViewButtons", "hasSoundcloudItems", "tabs", "selectedTab", "loading", "texts", "isPlayingAll"], outputs: ["selectedTabChange", "onClickChangeView", "onClickPlayAll", "onClickSort", "onChangeState", "onClickTab"] }, { kind: "component", type: XSSkeletonForSliderComponent, selector: "xs-skeleton-for-slider", inputs: ["displayType", "forSlider"] }, { kind: "component", type: XSButtonComponent, selector: "xs-button", inputs: ["id", "label", "type", "icon", "action", "customClass", "variant", "layout", "badgeCount", "isFull", "disabled", "loading", "title", "ariaLabel", "borderRadius", "isGrouped", "groupPosition"], outputs: ["isGroupedChange", "groupPositionChange", "click", "onClick"] }, { kind: "ngmodule", type: PipesModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
5528
5500
|
}
|
|
5529
5501
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: XSItemsSliderComponent, decorators: [{
|
|
5530
5502
|
type: Component,
|
|
@@ -5535,7 +5507,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImpo
|
|
|
5535
5507
|
XSSkeletonForSliderComponent,
|
|
5536
5508
|
XSButtonComponent,
|
|
5537
5509
|
PipesModule,
|
|
5538
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"pt-3 mx-auto max-w-full-xl max-w-7sm\"\n [ngClass]=\"{\n 'mb-3 pt-3': !manage(),\n 'mb-2': manage(),\n }\"\n>\n <xs-items-slider-title-buttons\n [label]=\"label()\"\n [items]=\"items()\"\n [type]=\"type()\"\n [titleId]=\"titleId()\"\n [hasSortButton]=\"hasSortButton()\"\n [manage]=\"manage()\"\n [state]=\"state()\"\n [total]=\"total()\"\n [view]=\"view()\"\n [hasViewButtons]=\"hasViewButtons()\"\n [hasSoundcloudItems]=\"hasSoundcloudItems()\"\n [tabs]=\"tabs()\"\n [selectedTab]=\"selectedTab()\"\n [texts]=\"texts()\"\n [isPlayingAll]=\"isPlayingAll()\"\n (onClickChangeView)=\"onClickChangeView($event)\"\n (onClickPlayAll)=\"onClickPlay.emit()\"\n (onClickSort)=\"onClickSort()\"\n (onClickTab)=\"onClickTab($event)\"\n ></xs-items-slider-title-buttons>\n\n @if ((manage() && state()) || (!manage() && !state())) {\n
|
|
5510
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"pt-3 mx-auto max-w-full-xl max-w-7sm\"\n [ngClass]=\"{\n 'mb-3 pt-3': !manage(),\n 'mb-2': manage(),\n }\"\n>\n <xs-items-slider-title-buttons\n [label]=\"label()\"\n [items]=\"items()\"\n [type]=\"type()\"\n [titleId]=\"titleId()\"\n [hasSortButton]=\"hasSortButton()\"\n [manage]=\"manage()\"\n [state]=\"state()\"\n [total]=\"total()\"\n [view]=\"view()\"\n [hasViewButtons]=\"hasViewButtons()\"\n [hasSoundcloudItems]=\"hasSoundcloudItems()\"\n [tabs]=\"tabs()\"\n [selectedTab]=\"selectedTab()\"\n [texts]=\"texts()\"\n [isPlayingAll]=\"isPlayingAll()\"\n (onClickChangeView)=\"onClickChangeView($event)\"\n (onClickPlayAll)=\"onClickPlay.emit()\"\n (onClickSort)=\"onClickSort()\"\n (onClickTab)=\"onClickTab($event)\"\n ></xs-items-slider-title-buttons>\n\n @if ((manage() && state()) || (!manage() && !state())) {\n @if (!loading().items && view() === 'cards') {\n <div class=\"relative\">\n @if (canScrollLeft) {\n <button\n (click)=\"scrollLeftBtn()\"\n class=\"absolute z-10 p-2 text-white transition-opacity -translate-y-1/2 rounded-full shadow-lg left-2 top-1/2 bg-black/70 hover:bg-black/90\"\n >\n <svg\n class=\"w-6 h-6\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M15 19l-7-7 7-7\"\n />\n </svg>\n </button>\n }\n\n @if (type() !== 'setup') {\n <div\n #scrollContainer\n class=\"flex gap-4 py-2 overflow-scroll overflow-x-auto scrollbar-hidden scroll-smooth\"\n (scroll)=\"onScroll()\"\n (wheel)=\"onHorizontalWheel($event)\"\n >\n @for (item of items(); track $index; let i = $index) {\n <div\n class=\"flex flex-col items-center flex-shrink-0\"\n >\n <xs-item-card\n [item]=\"item\"\n [type]=\"$any(type())\"\n [forSlider]=\"true\"\n [styles]=\"true\"\n [i]=\"i\"\n [user]=\"user()\"\n [year]=\"type() === 'media'\"\n [texts]=\"itemCardTexts()\"\n [language]=\"language()\"\n ></xs-item-card>\n </div>\n }\n </div>\n }\n @if (type() === 'setup') {\n <div\n #scrollContainer\n class=\"flex gap-4 py-2 overflow-scroll overflow-x-auto scrollbar-hidden scroll-smooth\"\n (wheel)=\"onHorizontalWheel($event)\"\n >\n @if (items() && items().length > 0 && selectedTab() !== undefined && selectedTab() >= 0 && selectedTab() < items().length && $any(items()[selectedTab()])?.components) {\n @for (component of $any(items()[selectedTab()]).components; track $index; let ii = $index) {\n <div\n class=\"flex flex-col items-center flex-shrink-0\"\n >\n <xs-item-card\n [item]=\"component\"\n [type]=\"'equipment'\"\n [forSlider]=\"true\"\n [styles]=\"true\"\n [i]=\"ii\"\n [user]=\"user()\"\n [texts]=\"itemCardTexts()\"\n [language]=\"language()\"\n ></xs-item-card>\n </div>\n }\n }\n </div>\n }\n\n @if (canScrollRight) {\n <button\n (click)=\"scrollRightBtn()\"\n class=\"absolute z-10 p-2 text-white transition-opacity -translate-y-1/2 rounded-full shadow-lg right-2 top-1/2 bg-black/70 hover:bg-black/90\"\n >\n <svg\n class=\"w-6 h-6\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M9 5l7 7-7 7\"\n />\n </svg>\n </button>\n }\n </div>\n }\n\n @if (loading().items && view() === 'cards') {\n <div class=\"flex gap-4 py-2 overflow-scroll overflow-x-auto scrollbar-hidden scroll-smooth\" (wheel)=\"onHorizontalWheel($event)\">\n @for (i of [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; track $index) {\n <xs-skeleton-for-slider\n type=\"normal\"\n ></xs-skeleton-for-slider>\n }\n </div>\n }\n\n @if (view() === 'list') {\n <div\n class=\"grid w-full grid-cols-1 gap-2 lg:gap-3 p-1.5 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4\"\n >\n @if (type() !== 'setup') {\n @for (item of items(); track $index; let i = $index) {\n }\n }\n\n @if (items() && items().length > 0 && selectedTab() !== undefined && selectedTab() >= 0 && selectedTab() < items().length && $any(items()[selectedTab()])?.components) {\n @for (component of $any(items()[selectedTab()]).components; track $index; let ii = $index) {\n }\n }\n </div>\n @if (!loading().items && items().length >= 10 && total() > items().length) {\n <xs-button\n [label]=\"texts().viewMore\"\n [layout]=\"'between'\"\n [isFull]=\"true\"\n [icon]=\"{ name: 'plus' }\"\n [disabled]=\"loading().more || loading().items\"\n [loading]=\"loading().more || loading().items\"\n (onClick)=\"onScrollTable()\"\n >\n </xs-button>\n }\n }\n }\n</div>\n" }]
|
|
5539
5511
|
}], ctorParameters: () => [], propDecorators: { scrollContainer: [{ type: i0.ViewChild, args: ['scrollContainer', { isSignal: true }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: true }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], typeFrom: [{ type: i0.Input, args: [{ isSignal: true, alias: "typeFrom", required: false }] }], total: [{ type: i0.Input, args: [{ isSignal: true, alias: "total", required: false }] }], view: [{ type: i0.Input, args: [{ isSignal: true, alias: "view", required: false }] }, { type: i0.Output, args: ["viewChange"] }], hasViewButtons: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasViewButtons", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], sortButtonInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "sortButtonInput", required: false }] }], sortValues: [{ type: i0.Input, args: [{ isSignal: true, alias: "sortValues", required: false }] }], manage: [{ type: i0.Input, args: [{ isSignal: true, alias: "manage", required: false }] }], state: [{ type: i0.Input, args: [{ isSignal: true, alias: "state", required: false }] }], user: [{ type: i0.Input, args: [{ isSignal: true, alias: "user", required: false }] }], tabs: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabs", required: false }] }], selectedTab: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedTab", required: false }] }, { type: i0.Output, args: ["selectedTabChange"] }], hasSoundcloudItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasSoundcloudItems", required: false }] }], language: [{ type: i0.Input, args: [{ isSignal: true, alias: "language", required: false }] }], texts: [{ type: i0.Input, args: [{ isSignal: true, alias: "texts", required: false }] }], itemCardTexts: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemCardTexts", required: false }] }], isPlayingAll: [{ type: i0.Input, args: [{ isSignal: true, alias: "isPlayingAll", required: false }] }], titleId: [{ type: i0.Input, args: [{ isSignal: true, alias: "titleId", required: false }] }], loadMoreData: [{ type: i0.Output, args: ["loadMoreData"] }], onClickChangeSort: [{ type: i0.Output, args: ["onClickChangeSort"] }], onClickPlay: [{ type: i0.Output, args: ["onClickPlay"] }] } });
|
|
5540
5512
|
|
|
5541
5513
|
class XSTitleCollapseComponent {
|
|
@@ -9147,7 +9119,6 @@ class XSModalService {
|
|
|
9147
9119
|
this.translateService.registerTranslations({ es: es$l, en: en$l });
|
|
9148
9120
|
}
|
|
9149
9121
|
open(componentType, options = {}) {
|
|
9150
|
-
// Set default values
|
|
9151
9122
|
const defaultOptions = {
|
|
9152
9123
|
type: 'bottom-sheet',
|
|
9153
9124
|
};
|
|
@@ -11408,7 +11379,6 @@ class XSAuthComponent {
|
|
|
11408
11379
|
get showInfoIcons() {
|
|
11409
11380
|
return this.cfg?.showInfoIcons !== false;
|
|
11410
11381
|
}
|
|
11411
|
-
// --- Header ---
|
|
11412
11382
|
get title() {
|
|
11413
11383
|
this.syncTranslations();
|
|
11414
11384
|
switch (this.activeMode) {
|
|
@@ -11447,7 +11417,6 @@ class XSAuthComponent {
|
|
|
11447
11417
|
return '';
|
|
11448
11418
|
}
|
|
11449
11419
|
}
|
|
11450
|
-
// --- Form fields ---
|
|
11451
11420
|
get loginFields() {
|
|
11452
11421
|
this.syncTranslations();
|
|
11453
11422
|
if (!this._loginFields) {
|
|
@@ -11553,7 +11522,6 @@ class XSAuthComponent {
|
|
|
11553
11522
|
}
|
|
11554
11523
|
return this._twoFactorFields;
|
|
11555
11524
|
}
|
|
11556
|
-
// --- Mode switching ---
|
|
11557
11525
|
changeMode(mode) {
|
|
11558
11526
|
this.service.activeMode = mode;
|
|
11559
11527
|
this.formModel = {};
|
|
@@ -11564,7 +11532,6 @@ class XSAuthComponent {
|
|
|
11564
11532
|
markEmailSent() {
|
|
11565
11533
|
this.emailSent.set(true);
|
|
11566
11534
|
}
|
|
11567
|
-
// --- Form handlers ---
|
|
11568
11535
|
onFormReady(form) {
|
|
11569
11536
|
this.formGroup = form;
|
|
11570
11537
|
Promise.resolve().then(() => {
|
|
@@ -11578,7 +11545,6 @@ class XSAuthComponent {
|
|
|
11578
11545
|
this.formModel = formData ?? {};
|
|
11579
11546
|
this.isFormValid = this.formGroup?.valid ?? false;
|
|
11580
11547
|
}
|
|
11581
|
-
// --- Actions ---
|
|
11582
11548
|
actionSocial(provider) {
|
|
11583
11549
|
this.onAction.emit({
|
|
11584
11550
|
action: provider === 'google'
|
|
@@ -12649,7 +12615,6 @@ class XSFullImageComponent {
|
|
|
12649
12615
|
this.dismiss();
|
|
12650
12616
|
}
|
|
12651
12617
|
}
|
|
12652
|
-
/* ---- Zoom helpers ---- */
|
|
12653
12618
|
resetZoom() {
|
|
12654
12619
|
this.zoom.set(1);
|
|
12655
12620
|
this.translateX.set(0);
|
|
@@ -12665,7 +12630,6 @@ class XSFullImageComponent {
|
|
|
12665
12630
|
this.translateY.set(0);
|
|
12666
12631
|
}
|
|
12667
12632
|
}
|
|
12668
|
-
/* ---- Backdrop click ---- */
|
|
12669
12633
|
onBackdropClick(event) {
|
|
12670
12634
|
if (event.target === event.currentTarget) {
|
|
12671
12635
|
this.dismiss();
|
|
@@ -12676,7 +12640,6 @@ class XSFullImageComponent {
|
|
|
12676
12640
|
event.stopPropagation();
|
|
12677
12641
|
this.dismiss();
|
|
12678
12642
|
}
|
|
12679
|
-
/* ---- Pointer pan (desktop) ---- */
|
|
12680
12643
|
onImagePointerDown(event) {
|
|
12681
12644
|
event.stopPropagation();
|
|
12682
12645
|
if (this.zoom() <= 1)
|
|
@@ -12699,7 +12662,6 @@ class XSFullImageComponent {
|
|
|
12699
12662
|
onPointerUp(_event) {
|
|
12700
12663
|
this.isPointerPanning = false;
|
|
12701
12664
|
}
|
|
12702
|
-
/* ---- Touch handlers (mobile) ---- */
|
|
12703
12665
|
onTouchStart(event) {
|
|
12704
12666
|
if (!isPlatformBrowser(this.platformId))
|
|
12705
12667
|
return;
|
|
@@ -12778,7 +12740,6 @@ class XSFullImageComponent {
|
|
|
12778
12740
|
const dy = touches[0].clientY - touches[1].clientY;
|
|
12779
12741
|
return Math.sqrt(dx * dx + dy * dy);
|
|
12780
12742
|
}
|
|
12781
|
-
/* ---- Scroll wheel zoom (desktop) ---- */
|
|
12782
12743
|
onWheel(event) {
|
|
12783
12744
|
if (!isPlatformBrowser(this.platformId))
|
|
12784
12745
|
return;
|
|
@@ -12786,7 +12747,6 @@ class XSFullImageComponent {
|
|
|
12786
12747
|
const delta = event.deltaY > 0 ? -0.1 : 0.1;
|
|
12787
12748
|
this.setZoom(this.zoom() + delta);
|
|
12788
12749
|
}
|
|
12789
|
-
/* ---- Download ---- */
|
|
12790
12750
|
onDownload(event) {
|
|
12791
12751
|
event.stopPropagation();
|
|
12792
12752
|
if (!isPlatformBrowser(this.platformId))
|
|
@@ -12815,7 +12775,6 @@ class XSFullImageComponent {
|
|
|
12815
12775
|
a.click();
|
|
12816
12776
|
});
|
|
12817
12777
|
}
|
|
12818
|
-
/* ---- Share ---- */
|
|
12819
12778
|
async onShare(event) {
|
|
12820
12779
|
event.stopPropagation();
|
|
12821
12780
|
if (!isPlatformBrowser(this.platformId))
|
|
@@ -16121,7 +16080,7 @@ class XSNavbarComponent {
|
|
|
16121
16080
|
this.translateService.setLanguage(newLang);
|
|
16122
16081
|
}
|
|
16123
16082
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: XSNavbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
16124
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: XSNavbarComponent, isStandalone: true, selector: "xs-navbar", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, mobileTitle: { classPropertyName: "mobileTitle", publicName: "mobileTitle", isSignal: true, isRequired: false, transformFunction: null }, subtitle: { classPropertyName: "subtitle", publicName: "subtitle", isSignal: true, isRequired: false, transformFunction: null }, mobileSubtitle: { classPropertyName: "mobileSubtitle", publicName: "mobileSubtitle", isSignal: true, isRequired: false, transformFunction: null }, showBorder: { classPropertyName: "showBorder", publicName: "showBorder", isSignal: true, isRequired: false, transformFunction: null }, transparent: { classPropertyName: "transparent", publicName: "transparent", isSignal: true, isRequired: false, transformFunction: null }, sticky: { classPropertyName: "sticky", publicName: "sticky", isSignal: true, isRequired: false, transformFunction: null }, showBack: { classPropertyName: "showBack", publicName: "showBack", isSignal: true, isRequired: false, transformFunction: null }, showMenu: { classPropertyName: "showMenu", publicName: "showMenu", isSignal: true, isRequired: false, transformFunction: null }, menuIcon: { classPropertyName: "menuIcon", publicName: "menuIcon", isSignal: true, isRequired: false, transformFunction: null }, showLanguage: { classPropertyName: "showLanguage", publicName: "showLanguage", isSignal: true, isRequired: false, transformFunction: null }, showNotifications: { classPropertyName: "showNotifications", publicName: "showNotifications", isSignal: true, isRequired: false, transformFunction: null }, showChat: { classPropertyName: "showChat", publicName: "showChat", isSignal: true, isRequired: false, transformFunction: null }, showImpersonation: { classPropertyName: "showImpersonation", publicName: "showImpersonation", isSignal: true, isRequired: false, transformFunction: null }, unreadChatMessages: { classPropertyName: "unreadChatMessages", publicName: "unreadChatMessages", isSignal: true, isRequired: false, transformFunction: null }, unreadNotifications: { classPropertyName: "unreadNotifications", publicName: "unreadNotifications", isSignal: true, isRequired: false, transformFunction: null }, homeRoute: { classPropertyName: "homeRoute", publicName: "homeRoute", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, hidden: { classPropertyName: "hidden", publicName: "hidden", isSignal: true, isRequired: false, transformFunction: null }, hideEnvBadge: { classPropertyName: "hideEnvBadge", publicName: "hideEnvBadge", isSignal: true, isRequired: false, transformFunction: null }, maxWidth: { classPropertyName: "maxWidth", publicName: "maxWidth", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { back: "back", menuToggle: "menuToggle", titleClick: "titleClick", notificationsClick: "notificationsClick", chatClick: "chatClick", impersonationClick: "impersonationClick" }, host: { attributes: { "role": "banner" }, properties: { "class.sticky": "sticky()", "class.top-0": "sticky()", "class.z-50": "sticky()" } }, queries: [{ propertyName: "bottomContent", first: true, predicate: ["[bottom]"], descendants: true, read: ElementRef, isSignal: true }], ngImport: i0, template: "@if (!hidden()) {\n<header\n [class.bg-black/80]=\"!transparent()\"\n [class.backdrop-blur-xl]=\"!transparent()\"\n class=\"ease-in-out transition-all duration-300\"\n [attr.aria-label]=\"ariaLabel() || title()\"\n>\n <div\n class=\"mx-auto px-4 pt-3 pb-2\"\n [class.border-b]=\"showBorder()\"\n [class.border-white/5]=\"showBorder()\"\n [style.max-width]=\"maxWidth()\"\n >\n <div class=\"flex items-center justify-between gap-4 w-full\">\n <div class=\"flex items-center min-w-0 flex-1\">\n @if (showLeftButton) {\n <xs-button\n (onClick)=\"showBack() ? back.emit() : menuToggle.emit()\"\n [icon]=\"{ name: showBack() ? 'arrow-left' : (menuIcon()) }\"\n layout=\"iconOnlyHeader\"\n variant=\"custom\"\n customClass=\"flex-none p-2 -ml-2 text-zinc-400 hover:text-white active:scale-90 rounded-xl hover:bg-zinc-900/50\"\n [title]=\"showBack() ? t('GO_BACK') : t('OPEN_MENU')\"\n />\n }\n\n <div class=\"flex flex-col min-w-0 flex-1\">\n <a\n [routerLink]=\"homeRoute()\"\n (click)=\"titleClick.emit()\"\n class=\"inline-block text-2xl sm:text-3xl font-black tracking-[0.01em] text-white uppercase leading-none truncate transition-[letter-spacing_0.5s_ease-out,color_0.2s_ease] hover:tracking-[0.05em] hover:text-zinc-300 will-change-[letter-spacing] no-underline\"\n [attr.aria-label]=\"t('GO_TO') + ' ' + (homeRoute() || t('HOME'))\"\n >\n @if (mobileTitle()) {\n <span class=\"lg:hidden\">{{ mobileTitle() }}</span>\n <span class=\"hidden lg:inline\">{{ title() }}</span>\n } @else {\n {{ title() }}\n }\n </a>\n\n @if (subtitle()) {\n <div\n class=\"flex items-center gap-2 mt-1 animate-in fade-in slide-in-from-left-2 duration-500 min-w-0\"\n >\n <div\n class=\"text-zinc-400 text-[10px] font-black tracking-[0.2em] uppercase leading-none truncate\"\n >\n @if (mobileSubtitle()) {\n <span class=\"lg:hidden\">{{ mobileSubtitle() }}</span>\n <span class=\"hidden lg:inline\">{{ subtitle() }}</span>\n } @else {\n {{ subtitle() }}\n }\n </div>\n </div>\n }\n </div>\n </div>\n\n <div class=\"flex items-center justify-end gap-3 min-w-0\">\n <ng-content select=\"[actions]\"></ng-content>\n\n @if (envName !== 'prod' && !hideEnvBadge() && !isCapacitorNative) {\n <span\n class=\"hidden sm:flex flex-none items-center justify-center w-9 h-9 rounded-xl border text-[9px] font-black tracking-[0.1em] select-none\"\n [class.bg-amber-500/10]=\"envName === 'dev'\"\n [class.border-amber-500/20]=\"envName === 'dev'\"\n [class.text-amber-500]=\"envName === 'dev'\"\n [class.bg-orange-500/10]=\"envName === 'uat'\"\n [class.border-orange-500/20]=\"envName === 'uat'\"\n [class.text-orange-500]=\"envName === 'uat'\"\n [title]=\"envName\"\n >{{ envName }}</span>\n }\n\n @if (showChat()) {\n <button\n (click)=\"chatClick.emit()\"\n class=\"relative flex-none flex items-center justify-center w-9 h-9 bg-zinc-900/40 rounded-xl border border-white/5 hover:bg-zinc-800 active:scale-95 transition-all\"\n type=\"button\"\n [attr.aria-label]=\"t('CHAT')\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" class=\"w-4 h-4\">\n <path d=\"M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H5.17L4 17.17V4h16v12z\"/>\n </svg>\n @if (unreadChatMessages() > 0) {\n <span\n class=\"absolute -top-1 -right-1 min-w-[16px] h-4 px-1 bg-green-500 rounded-full text-[8px] font-bold text-white flex items-center justify-center\"\n [attr.aria-label]=\"unreadChatMessages() + ' ' + t('UNREAD_MESSAGES')\"\n >\n {{ unreadChatMessages() > 9 ? '9+' : unreadChatMessages() }}\n </span>\n }\n </button>\n }\n\n @if (showNotifications()) {\n <xs-button\n (onClick)=\"notificationsClick.emit()\"\n icon=\"bell\"\n layout=\"iconOnly\"\n variant=\"custom\"\n customClass=\"w-9 h-9 bg-zinc-900/40 rounded-xl border border-white/5 hover:bg-zinc-800 active:scale-95\"\n [title]=\"t('NOTIFICATIONS')\"\n [badgeCount]=\"unreadNotifications()\"\n />\n }\n\n @if (showImpersonation()) {\n <button\n (click)=\"impersonationClick.emit()\"\n class=\"flex-none flex items-center justify-center w-9 h-9 bg-amber-500/10 rounded-xl border border-amber-500/20 hover:bg-amber-500/20 active:scale-95 transition-all\"\n type=\"button\"\n [attr.aria-label]=\"t('BACK_TO_ADMIN')\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" class=\"w-4 h-4 text-amber-500\">\n <path d=\"M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm0 10.99h7c-.53 4.12-3.28 7.79-7 8.94V12H5V6.3l7-3.11v8.8z\"/>\n </svg>\n </button>\n }\n\n @if (showLanguage()) {\n <button\n (click)=\"onToggleLang()\"\n class=\"flex-none flex items-center justify-center w-9 h-9 bg-zinc-900/40 rounded-xl border border-white/5 hover:bg-zinc-800 active:scale-95 transition-all\"\n type=\"button\"\n [attr.aria-label]=\"t('SWITCH_LANG_TO') + ' ' + (langSignal() === 'es' ? t('ENGLISH') : t('SPANISH'))\"\n >\n <img\n [src]=\"\n langSignal() === 'es'\n ? ('es' | countryFlag)\n : ('us' | countryFlag)\n \"\n class=\"w-4 h-3 object-cover rounded-[1px] shadow-sm\"\n [alt]=\"langSignal() === 'es' ? t('SPANISH') : t('ENGLISH')\"\n />\n </button>\n }\n </div>\n </div>\n\n @if (hasBottom) {\n <div\n class=\"mt-6 animate-in fade-in slide-in-from-top-2 duration-700\"\n >\n <ng-content select=\"[bottom]\"></ng-content>\n </div>\n }\n </div>\n</header>\n}\n", styles: [":host{display:block;width:100%}:host(.sticky){position:sticky}header{-webkit-backdrop-filter:blur(20px)}button:focus-visible{outline:2px solid rgb(113 113 122);outline-offset:2px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: XSButtonComponent, selector: "xs-button", inputs: ["id", "label", "type", "icon", "action", "customClass", "variant", "layout", "badgeCount", "isFull", "disabled", "loading", "title", "ariaLabel", "borderRadius", "isGrouped", "groupPosition"], outputs: ["isGroupedChange", "groupPositionChange", "click", "onClick"] }, { kind: "pipe", type: CountryFlagPipe, name: "countryFlag" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
16083
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: XSNavbarComponent, isStandalone: true, selector: "xs-navbar", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, mobileTitle: { classPropertyName: "mobileTitle", publicName: "mobileTitle", isSignal: true, isRequired: false, transformFunction: null }, subtitle: { classPropertyName: "subtitle", publicName: "subtitle", isSignal: true, isRequired: false, transformFunction: null }, mobileSubtitle: { classPropertyName: "mobileSubtitle", publicName: "mobileSubtitle", isSignal: true, isRequired: false, transformFunction: null }, showBorder: { classPropertyName: "showBorder", publicName: "showBorder", isSignal: true, isRequired: false, transformFunction: null }, transparent: { classPropertyName: "transparent", publicName: "transparent", isSignal: true, isRequired: false, transformFunction: null }, sticky: { classPropertyName: "sticky", publicName: "sticky", isSignal: true, isRequired: false, transformFunction: null }, showBack: { classPropertyName: "showBack", publicName: "showBack", isSignal: true, isRequired: false, transformFunction: null }, showMenu: { classPropertyName: "showMenu", publicName: "showMenu", isSignal: true, isRequired: false, transformFunction: null }, menuIcon: { classPropertyName: "menuIcon", publicName: "menuIcon", isSignal: true, isRequired: false, transformFunction: null }, showLanguage: { classPropertyName: "showLanguage", publicName: "showLanguage", isSignal: true, isRequired: false, transformFunction: null }, showNotifications: { classPropertyName: "showNotifications", publicName: "showNotifications", isSignal: true, isRequired: false, transformFunction: null }, showChat: { classPropertyName: "showChat", publicName: "showChat", isSignal: true, isRequired: false, transformFunction: null }, showImpersonation: { classPropertyName: "showImpersonation", publicName: "showImpersonation", isSignal: true, isRequired: false, transformFunction: null }, unreadChatMessages: { classPropertyName: "unreadChatMessages", publicName: "unreadChatMessages", isSignal: true, isRequired: false, transformFunction: null }, unreadNotifications: { classPropertyName: "unreadNotifications", publicName: "unreadNotifications", isSignal: true, isRequired: false, transformFunction: null }, homeRoute: { classPropertyName: "homeRoute", publicName: "homeRoute", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, hidden: { classPropertyName: "hidden", publicName: "hidden", isSignal: true, isRequired: false, transformFunction: null }, hideEnvBadge: { classPropertyName: "hideEnvBadge", publicName: "hideEnvBadge", isSignal: true, isRequired: false, transformFunction: null }, maxWidth: { classPropertyName: "maxWidth", publicName: "maxWidth", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { back: "back", menuToggle: "menuToggle", titleClick: "titleClick", notificationsClick: "notificationsClick", chatClick: "chatClick", impersonationClick: "impersonationClick" }, host: { attributes: { "role": "banner" }, properties: { "class.sticky": "sticky()", "class.top-0": "sticky()", "class.z-50": "sticky()" } }, queries: [{ propertyName: "bottomContent", first: true, predicate: ["[bottom]"], descendants: true, read: ElementRef, isSignal: true }], ngImport: i0, template: "@if (!hidden()) {\n<header\n [class.bg-black/80]=\"!transparent()\"\n [class.backdrop-blur-xl]=\"!transparent()\"\n class=\"ease-in-out transition-all duration-300\"\n [attr.aria-label]=\"ariaLabel() || title()\"\n>\n <div\n class=\"mx-auto px-4 pt-3 pb-2\"\n [class.border-b]=\"showBorder()\"\n [class.border-white/5]=\"showBorder()\"\n [style.max-width]=\"maxWidth()\"\n >\n <div class=\"flex items-center justify-between gap-4 w-full\">\n <div class=\"flex items-center min-w-0 flex-1\">\n @if (showLeftButton) {\n <xs-button\n (onClick)=\"showBack() ? back.emit() : menuToggle.emit()\"\n [icon]=\"{ name: showBack() ? 'arrow-left' : (menuIcon()) }\"\n layout=\"iconOnlyHeader\"\n variant=\"custom\"\n customClass=\"flex-none p-2 -ml-2 text-zinc-400 hover:text-white active:scale-90 rounded-xl hover:bg-zinc-900/50\"\n [title]=\"showBack() ? t('GO_BACK') : t('OPEN_MENU')\"\n />\n }\n\n <div class=\"navbar-leading lg:hidden flex-none\">\n <ng-content select=\"[leading]\"></ng-content>\n </div>\n\n <div class=\"navbar-title-wrap flex flex-col min-w-0 flex-1\">\n <a\n [routerLink]=\"homeRoute()\"\n (click)=\"titleClick.emit()\"\n class=\"navbar-default-title inline-block text-2xl sm:text-3xl font-black tracking-[0.01em] text-white uppercase leading-none truncate transition-[letter-spacing_0.5s_ease-out,color_0.2s_ease] hover:tracking-[0.05em] hover:text-zinc-300 will-change-[letter-spacing] no-underline\"\n [attr.aria-label]=\"t('GO_TO') + ' ' + (homeRoute() || t('HOME'))\"\n >\n @if (mobileTitle()) {\n <span class=\"lg:hidden\">{{ mobileTitle() }}</span>\n <span class=\"hidden lg:inline\">{{ title() }}</span>\n } @else {\n {{ title() }}\n }\n </a>\n\n @if (subtitle()) {\n <div\n class=\"navbar-default-subtitle flex items-center gap-2 mt-1 animate-in fade-in slide-in-from-left-2 duration-500 min-w-0\"\n >\n <div\n class=\"text-zinc-400 text-[10px] font-black tracking-[0.2em] uppercase leading-none truncate\"\n >\n @if (mobileSubtitle()) {\n <span class=\"lg:hidden\">{{ mobileSubtitle() }}</span>\n <span class=\"hidden lg:inline\">{{ subtitle() }}</span>\n } @else {\n {{ subtitle() }}\n }\n </div>\n </div>\n }\n </div>\n </div>\n\n <div class=\"flex items-center justify-end gap-3 min-w-0\">\n <ng-content select=\"[actions]\"></ng-content>\n\n @if (envName !== 'prod' && !hideEnvBadge() && !isCapacitorNative) {\n <span\n class=\"hidden sm:flex flex-none items-center justify-center w-9 h-9 rounded-xl border text-[9px] font-black tracking-[0.1em] select-none\"\n [class.bg-amber-500/10]=\"envName === 'dev'\"\n [class.border-amber-500/20]=\"envName === 'dev'\"\n [class.text-amber-500]=\"envName === 'dev'\"\n [class.bg-orange-500/10]=\"envName === 'uat'\"\n [class.border-orange-500/20]=\"envName === 'uat'\"\n [class.text-orange-500]=\"envName === 'uat'\"\n [title]=\"envName\"\n >{{ envName }}</span>\n }\n\n @if (showChat()) {\n <button\n (click)=\"chatClick.emit()\"\n class=\"relative flex-none flex items-center justify-center w-9 h-9 bg-zinc-900/40 rounded-xl border border-white/5 hover:bg-zinc-800 active:scale-95 transition-all\"\n type=\"button\"\n [attr.aria-label]=\"t('CHAT')\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" class=\"w-4 h-4\">\n <path d=\"M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H5.17L4 17.17V4h16v12z\"/>\n </svg>\n @if (unreadChatMessages() > 0) {\n <span\n class=\"absolute -top-1 -right-1 min-w-[16px] h-4 px-1 bg-green-500 rounded-full text-[8px] font-bold text-white flex items-center justify-center\"\n [attr.aria-label]=\"unreadChatMessages() + ' ' + t('UNREAD_MESSAGES')\"\n >\n {{ unreadChatMessages() > 9 ? '9+' : unreadChatMessages() }}\n </span>\n }\n </button>\n }\n\n @if (showNotifications()) {\n <xs-button\n (onClick)=\"notificationsClick.emit()\"\n icon=\"bell\"\n layout=\"iconOnly\"\n variant=\"custom\"\n customClass=\"w-9 h-9 bg-zinc-900/40 rounded-xl border border-white/5 hover:bg-zinc-800 active:scale-95\"\n [title]=\"t('NOTIFICATIONS')\"\n [badgeCount]=\"unreadNotifications()\"\n />\n }\n\n @if (showImpersonation()) {\n <button\n (click)=\"impersonationClick.emit()\"\n class=\"flex-none flex items-center justify-center w-9 h-9 bg-amber-500/10 rounded-xl border border-amber-500/20 hover:bg-amber-500/20 active:scale-95 transition-all\"\n type=\"button\"\n [attr.aria-label]=\"t('BACK_TO_ADMIN')\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" class=\"w-4 h-4 text-amber-500\">\n <path d=\"M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm0 10.99h7c-.53 4.12-3.28 7.79-7 8.94V12H5V6.3l7-3.11v8.8z\"/>\n </svg>\n </button>\n }\n\n @if (showLanguage()) {\n <button\n (click)=\"onToggleLang()\"\n class=\"flex-none flex items-center justify-center w-9 h-9 bg-zinc-900/40 rounded-xl border border-white/5 hover:bg-zinc-800 active:scale-95 transition-all\"\n type=\"button\"\n [attr.aria-label]=\"t('SWITCH_LANG_TO') + ' ' + (langSignal() === 'es' ? t('ENGLISH') : t('SPANISH'))\"\n >\n <img\n [src]=\"\n langSignal() === 'es'\n ? ('es' | countryFlag)\n : ('us' | countryFlag)\n \"\n class=\"w-4 h-3 object-cover rounded-[1px] shadow-sm\"\n [alt]=\"langSignal() === 'es' ? t('SPANISH') : t('ENGLISH')\"\n />\n </button>\n }\n </div>\n </div>\n\n @if (hasBottom) {\n <div\n class=\"mt-6 animate-in fade-in slide-in-from-top-2 duration-700\"\n >\n <ng-content select=\"[bottom]\"></ng-content>\n </div>\n }\n </div>\n</header>\n}\n", styles: [":host{display:block;width:100%}:host(.sticky){position:sticky}header{-webkit-backdrop-filter:blur(20px)}button:focus-visible{outline:2px solid rgb(113 113 122);outline-offset:2px}@media(max-width:1023.98px){.navbar-leading:has(>*)+.navbar-title-wrap .navbar-default-title{font-size:1rem;line-height:1.25rem;letter-spacing:.01em}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: XSButtonComponent, selector: "xs-button", inputs: ["id", "label", "type", "icon", "action", "customClass", "variant", "layout", "badgeCount", "isFull", "disabled", "loading", "title", "ariaLabel", "borderRadius", "isGrouped", "groupPosition"], outputs: ["isGroupedChange", "groupPositionChange", "click", "onClick"] }, { kind: "pipe", type: CountryFlagPipe, name: "countryFlag" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
16125
16084
|
}
|
|
16126
16085
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: XSNavbarComponent, decorators: [{
|
|
16127
16086
|
type: Component,
|
|
@@ -16135,7 +16094,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImpo
|
|
|
16135
16094
|
'[class.sticky]': 'sticky()',
|
|
16136
16095
|
'[class.top-0]': 'sticky()',
|
|
16137
16096
|
'[class.z-50]': 'sticky()',
|
|
16138
|
-
}, changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (!hidden()) {\n<header\n [class.bg-black/80]=\"!transparent()\"\n [class.backdrop-blur-xl]=\"!transparent()\"\n class=\"ease-in-out transition-all duration-300\"\n [attr.aria-label]=\"ariaLabel() || title()\"\n>\n <div\n class=\"mx-auto px-4 pt-3 pb-2\"\n [class.border-b]=\"showBorder()\"\n [class.border-white/5]=\"showBorder()\"\n [style.max-width]=\"maxWidth()\"\n >\n <div class=\"flex items-center justify-between gap-4 w-full\">\n <div class=\"flex items-center min-w-0 flex-1\">\n @if (showLeftButton) {\n <xs-button\n (onClick)=\"showBack() ? back.emit() : menuToggle.emit()\"\n [icon]=\"{ name: showBack() ? 'arrow-left' : (menuIcon()) }\"\n layout=\"iconOnlyHeader\"\n variant=\"custom\"\n customClass=\"flex-none p-2 -ml-2 text-zinc-400 hover:text-white active:scale-90 rounded-xl hover:bg-zinc-900/50\"\n [title]=\"showBack() ? t('GO_BACK') : t('OPEN_MENU')\"\n />\n }\n\n <div class=\"flex flex-col min-w-0 flex-1\">\n <a\n [routerLink]=\"homeRoute()\"\n (click)=\"titleClick.emit()\"\n class=\"inline-block text-2xl sm:text-3xl font-black tracking-[0.01em] text-white uppercase leading-none truncate transition-[letter-spacing_0.5s_ease-out,color_0.2s_ease] hover:tracking-[0.05em] hover:text-zinc-300 will-change-[letter-spacing] no-underline\"\n [attr.aria-label]=\"t('GO_TO') + ' ' + (homeRoute() || t('HOME'))\"\n >\n @if (mobileTitle()) {\n <span class=\"lg:hidden\">{{ mobileTitle() }}</span>\n <span class=\"hidden lg:inline\">{{ title() }}</span>\n } @else {\n {{ title() }}\n }\n </a>\n\n @if (subtitle()) {\n <div\n class=\"flex items-center gap-2 mt-1 animate-in fade-in slide-in-from-left-2 duration-500 min-w-0\"\n >\n <div\n class=\"text-zinc-400 text-[10px] font-black tracking-[0.2em] uppercase leading-none truncate\"\n >\n @if (mobileSubtitle()) {\n <span class=\"lg:hidden\">{{ mobileSubtitle() }}</span>\n <span class=\"hidden lg:inline\">{{ subtitle() }}</span>\n } @else {\n {{ subtitle() }}\n }\n </div>\n </div>\n }\n </div>\n </div>\n\n <div class=\"flex items-center justify-end gap-3 min-w-0\">\n <ng-content select=\"[actions]\"></ng-content>\n\n @if (envName !== 'prod' && !hideEnvBadge() && !isCapacitorNative) {\n <span\n class=\"hidden sm:flex flex-none items-center justify-center w-9 h-9 rounded-xl border text-[9px] font-black tracking-[0.1em] select-none\"\n [class.bg-amber-500/10]=\"envName === 'dev'\"\n [class.border-amber-500/20]=\"envName === 'dev'\"\n [class.text-amber-500]=\"envName === 'dev'\"\n [class.bg-orange-500/10]=\"envName === 'uat'\"\n [class.border-orange-500/20]=\"envName === 'uat'\"\n [class.text-orange-500]=\"envName === 'uat'\"\n [title]=\"envName\"\n >{{ envName }}</span>\n }\n\n @if (showChat()) {\n <button\n (click)=\"chatClick.emit()\"\n class=\"relative flex-none flex items-center justify-center w-9 h-9 bg-zinc-900/40 rounded-xl border border-white/5 hover:bg-zinc-800 active:scale-95 transition-all\"\n type=\"button\"\n [attr.aria-label]=\"t('CHAT')\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" class=\"w-4 h-4\">\n <path d=\"M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H5.17L4 17.17V4h16v12z\"/>\n </svg>\n @if (unreadChatMessages() > 0) {\n <span\n class=\"absolute -top-1 -right-1 min-w-[16px] h-4 px-1 bg-green-500 rounded-full text-[8px] font-bold text-white flex items-center justify-center\"\n [attr.aria-label]=\"unreadChatMessages() + ' ' + t('UNREAD_MESSAGES')\"\n >\n {{ unreadChatMessages() > 9 ? '9+' : unreadChatMessages() }}\n </span>\n }\n </button>\n }\n\n @if (showNotifications()) {\n <xs-button\n (onClick)=\"notificationsClick.emit()\"\n icon=\"bell\"\n layout=\"iconOnly\"\n variant=\"custom\"\n customClass=\"w-9 h-9 bg-zinc-900/40 rounded-xl border border-white/5 hover:bg-zinc-800 active:scale-95\"\n [title]=\"t('NOTIFICATIONS')\"\n [badgeCount]=\"unreadNotifications()\"\n />\n }\n\n @if (showImpersonation()) {\n <button\n (click)=\"impersonationClick.emit()\"\n class=\"flex-none flex items-center justify-center w-9 h-9 bg-amber-500/10 rounded-xl border border-amber-500/20 hover:bg-amber-500/20 active:scale-95 transition-all\"\n type=\"button\"\n [attr.aria-label]=\"t('BACK_TO_ADMIN')\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" class=\"w-4 h-4 text-amber-500\">\n <path d=\"M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm0 10.99h7c-.53 4.12-3.28 7.79-7 8.94V12H5V6.3l7-3.11v8.8z\"/>\n </svg>\n </button>\n }\n\n @if (showLanguage()) {\n <button\n (click)=\"onToggleLang()\"\n class=\"flex-none flex items-center justify-center w-9 h-9 bg-zinc-900/40 rounded-xl border border-white/5 hover:bg-zinc-800 active:scale-95 transition-all\"\n type=\"button\"\n [attr.aria-label]=\"t('SWITCH_LANG_TO') + ' ' + (langSignal() === 'es' ? t('ENGLISH') : t('SPANISH'))\"\n >\n <img\n [src]=\"\n langSignal() === 'es'\n ? ('es' | countryFlag)\n : ('us' | countryFlag)\n \"\n class=\"w-4 h-3 object-cover rounded-[1px] shadow-sm\"\n [alt]=\"langSignal() === 'es' ? t('SPANISH') : t('ENGLISH')\"\n />\n </button>\n }\n </div>\n </div>\n\n @if (hasBottom) {\n <div\n class=\"mt-6 animate-in fade-in slide-in-from-top-2 duration-700\"\n >\n <ng-content select=\"[bottom]\"></ng-content>\n </div>\n }\n </div>\n</header>\n}\n", styles: [":host{display:block;width:100%}:host(.sticky){position:sticky}header{-webkit-backdrop-filter:blur(20px)}button:focus-visible{outline:2px solid rgb(113 113 122);outline-offset:2px}\n"] }]
|
|
16097
|
+
}, changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (!hidden()) {\n<header\n [class.bg-black/80]=\"!transparent()\"\n [class.backdrop-blur-xl]=\"!transparent()\"\n class=\"ease-in-out transition-all duration-300\"\n [attr.aria-label]=\"ariaLabel() || title()\"\n>\n <div\n class=\"mx-auto px-4 pt-3 pb-2\"\n [class.border-b]=\"showBorder()\"\n [class.border-white/5]=\"showBorder()\"\n [style.max-width]=\"maxWidth()\"\n >\n <div class=\"flex items-center justify-between gap-4 w-full\">\n <div class=\"flex items-center min-w-0 flex-1\">\n @if (showLeftButton) {\n <xs-button\n (onClick)=\"showBack() ? back.emit() : menuToggle.emit()\"\n [icon]=\"{ name: showBack() ? 'arrow-left' : (menuIcon()) }\"\n layout=\"iconOnlyHeader\"\n variant=\"custom\"\n customClass=\"flex-none p-2 -ml-2 text-zinc-400 hover:text-white active:scale-90 rounded-xl hover:bg-zinc-900/50\"\n [title]=\"showBack() ? t('GO_BACK') : t('OPEN_MENU')\"\n />\n }\n\n <div class=\"navbar-leading lg:hidden flex-none\">\n <ng-content select=\"[leading]\"></ng-content>\n </div>\n\n <div class=\"navbar-title-wrap flex flex-col min-w-0 flex-1\">\n <a\n [routerLink]=\"homeRoute()\"\n (click)=\"titleClick.emit()\"\n class=\"navbar-default-title inline-block text-2xl sm:text-3xl font-black tracking-[0.01em] text-white uppercase leading-none truncate transition-[letter-spacing_0.5s_ease-out,color_0.2s_ease] hover:tracking-[0.05em] hover:text-zinc-300 will-change-[letter-spacing] no-underline\"\n [attr.aria-label]=\"t('GO_TO') + ' ' + (homeRoute() || t('HOME'))\"\n >\n @if (mobileTitle()) {\n <span class=\"lg:hidden\">{{ mobileTitle() }}</span>\n <span class=\"hidden lg:inline\">{{ title() }}</span>\n } @else {\n {{ title() }}\n }\n </a>\n\n @if (subtitle()) {\n <div\n class=\"navbar-default-subtitle flex items-center gap-2 mt-1 animate-in fade-in slide-in-from-left-2 duration-500 min-w-0\"\n >\n <div\n class=\"text-zinc-400 text-[10px] font-black tracking-[0.2em] uppercase leading-none truncate\"\n >\n @if (mobileSubtitle()) {\n <span class=\"lg:hidden\">{{ mobileSubtitle() }}</span>\n <span class=\"hidden lg:inline\">{{ subtitle() }}</span>\n } @else {\n {{ subtitle() }}\n }\n </div>\n </div>\n }\n </div>\n </div>\n\n <div class=\"flex items-center justify-end gap-3 min-w-0\">\n <ng-content select=\"[actions]\"></ng-content>\n\n @if (envName !== 'prod' && !hideEnvBadge() && !isCapacitorNative) {\n <span\n class=\"hidden sm:flex flex-none items-center justify-center w-9 h-9 rounded-xl border text-[9px] font-black tracking-[0.1em] select-none\"\n [class.bg-amber-500/10]=\"envName === 'dev'\"\n [class.border-amber-500/20]=\"envName === 'dev'\"\n [class.text-amber-500]=\"envName === 'dev'\"\n [class.bg-orange-500/10]=\"envName === 'uat'\"\n [class.border-orange-500/20]=\"envName === 'uat'\"\n [class.text-orange-500]=\"envName === 'uat'\"\n [title]=\"envName\"\n >{{ envName }}</span>\n }\n\n @if (showChat()) {\n <button\n (click)=\"chatClick.emit()\"\n class=\"relative flex-none flex items-center justify-center w-9 h-9 bg-zinc-900/40 rounded-xl border border-white/5 hover:bg-zinc-800 active:scale-95 transition-all\"\n type=\"button\"\n [attr.aria-label]=\"t('CHAT')\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" class=\"w-4 h-4\">\n <path d=\"M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H5.17L4 17.17V4h16v12z\"/>\n </svg>\n @if (unreadChatMessages() > 0) {\n <span\n class=\"absolute -top-1 -right-1 min-w-[16px] h-4 px-1 bg-green-500 rounded-full text-[8px] font-bold text-white flex items-center justify-center\"\n [attr.aria-label]=\"unreadChatMessages() + ' ' + t('UNREAD_MESSAGES')\"\n >\n {{ unreadChatMessages() > 9 ? '9+' : unreadChatMessages() }}\n </span>\n }\n </button>\n }\n\n @if (showNotifications()) {\n <xs-button\n (onClick)=\"notificationsClick.emit()\"\n icon=\"bell\"\n layout=\"iconOnly\"\n variant=\"custom\"\n customClass=\"w-9 h-9 bg-zinc-900/40 rounded-xl border border-white/5 hover:bg-zinc-800 active:scale-95\"\n [title]=\"t('NOTIFICATIONS')\"\n [badgeCount]=\"unreadNotifications()\"\n />\n }\n\n @if (showImpersonation()) {\n <button\n (click)=\"impersonationClick.emit()\"\n class=\"flex-none flex items-center justify-center w-9 h-9 bg-amber-500/10 rounded-xl border border-amber-500/20 hover:bg-amber-500/20 active:scale-95 transition-all\"\n type=\"button\"\n [attr.aria-label]=\"t('BACK_TO_ADMIN')\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" class=\"w-4 h-4 text-amber-500\">\n <path d=\"M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm0 10.99h7c-.53 4.12-3.28 7.79-7 8.94V12H5V6.3l7-3.11v8.8z\"/>\n </svg>\n </button>\n }\n\n @if (showLanguage()) {\n <button\n (click)=\"onToggleLang()\"\n class=\"flex-none flex items-center justify-center w-9 h-9 bg-zinc-900/40 rounded-xl border border-white/5 hover:bg-zinc-800 active:scale-95 transition-all\"\n type=\"button\"\n [attr.aria-label]=\"t('SWITCH_LANG_TO') + ' ' + (langSignal() === 'es' ? t('ENGLISH') : t('SPANISH'))\"\n >\n <img\n [src]=\"\n langSignal() === 'es'\n ? ('es' | countryFlag)\n : ('us' | countryFlag)\n \"\n class=\"w-4 h-3 object-cover rounded-[1px] shadow-sm\"\n [alt]=\"langSignal() === 'es' ? t('SPANISH') : t('ENGLISH')\"\n />\n </button>\n }\n </div>\n </div>\n\n @if (hasBottom) {\n <div\n class=\"mt-6 animate-in fade-in slide-in-from-top-2 duration-700\"\n >\n <ng-content select=\"[bottom]\"></ng-content>\n </div>\n }\n </div>\n</header>\n}\n", styles: [":host{display:block;width:100%}:host(.sticky){position:sticky}header{-webkit-backdrop-filter:blur(20px)}button:focus-visible{outline:2px solid rgb(113 113 122);outline-offset:2px}@media(max-width:1023.98px){.navbar-leading:has(>*)+.navbar-title-wrap .navbar-default-title{font-size:1rem;line-height:1.25rem;letter-spacing:.01em}}\n"] }]
|
|
16139
16098
|
}], propDecorators: { title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], mobileTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "mobileTitle", required: false }] }], subtitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "subtitle", required: false }] }], mobileSubtitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "mobileSubtitle", required: false }] }], showBorder: [{ type: i0.Input, args: [{ isSignal: true, alias: "showBorder", required: false }] }], transparent: [{ type: i0.Input, args: [{ isSignal: true, alias: "transparent", required: false }] }], sticky: [{ type: i0.Input, args: [{ isSignal: true, alias: "sticky", required: false }] }], showBack: [{ type: i0.Input, args: [{ isSignal: true, alias: "showBack", required: false }] }], showMenu: [{ type: i0.Input, args: [{ isSignal: true, alias: "showMenu", required: false }] }], menuIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "menuIcon", required: false }] }], showLanguage: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLanguage", required: false }] }], showNotifications: [{ type: i0.Input, args: [{ isSignal: true, alias: "showNotifications", required: false }] }], showChat: [{ type: i0.Input, args: [{ isSignal: true, alias: "showChat", required: false }] }], showImpersonation: [{ type: i0.Input, args: [{ isSignal: true, alias: "showImpersonation", required: false }] }], unreadChatMessages: [{ type: i0.Input, args: [{ isSignal: true, alias: "unreadChatMessages", required: false }] }], unreadNotifications: [{ type: i0.Input, args: [{ isSignal: true, alias: "unreadNotifications", required: false }] }], homeRoute: [{ type: i0.Input, args: [{ isSignal: true, alias: "homeRoute", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], hidden: [{ type: i0.Input, args: [{ isSignal: true, alias: "hidden", required: false }] }], hideEnvBadge: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideEnvBadge", required: false }] }], maxWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxWidth", required: false }] }], back: [{ type: i0.Output, args: ["back"] }], menuToggle: [{ type: i0.Output, args: ["menuToggle"] }], titleClick: [{ type: i0.Output, args: ["titleClick"] }], notificationsClick: [{ type: i0.Output, args: ["notificationsClick"] }], chatClick: [{ type: i0.Output, args: ["chatClick"] }], impersonationClick: [{ type: i0.Output, args: ["impersonationClick"] }], bottomContent: [{ type: i0.ContentChild, args: ['[bottom]', { ...{
|
|
16140
16099
|
read: ElementRef,
|
|
16141
16100
|
}, isSignal: true }] }] } });
|
|
@@ -16545,7 +16504,6 @@ class OnImageErrorDirective {
|
|
|
16545
16504
|
el.src = this.defaultImagePath;
|
|
16546
16505
|
return;
|
|
16547
16506
|
}
|
|
16548
|
-
// Generar avatar con iniciales
|
|
16549
16507
|
el.src = this.avatarService.generateAvatar(nameForAvatar);
|
|
16550
16508
|
}
|
|
16551
16509
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: OnImageErrorDirective, deps: [{ token: i0.ElementRef }, { token: XS_DEFAULT_IMAGE_PATH }, { token: XSAvatarService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
@@ -16802,7 +16760,7 @@ class XSItemTypeUserComponent extends XSItemTypeBaseComponent {
|
|
|
16802
16760
|
return typeof type === 'string' ? type : '';
|
|
16803
16761
|
}
|
|
16804
16762
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: XSItemTypeUserComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
16805
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: XSItemTypeUserComponent, isStandalone: true, selector: "xs-item-type-user", host: { attributes: { "xs-item-type-user-host": "" } }, usesInheritance: true, ngImport: i0, template: "\n @if (isLink()) {\n <a\n [class]=\"itemClasses\"\n (click)=\"handleClick($event)\"\n >\n <div class=\"flex items-center justify-between w-full\">\n <div class=\"flex items-center flex-1 min-w-0 gap-2\">\n
|
|
16763
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: XSItemTypeUserComponent, isStandalone: true, selector: "xs-item-type-user", host: { attributes: { "xs-item-type-user-host": "" } }, usesInheritance: true, ngImport: i0, template: "\n @if (isLink()) {\n <a\n [class]=\"itemClasses\"\n (click)=\"handleClick($event)\"\n >\n <div class=\"flex items-center justify-between w-full\">\n <div class=\"flex items-center flex-1 min-w-0 gap-2\">\n <div\n class=\"flex-shrink-0 w-10 h-10 overflow-hidden rounded-xl\"\n [ngClass]=\"[\n size() === 'small' ? 'w-8 h-8' : 'w-10 h-10 mr-1',\n ]\"\n >\n <xs-image\n [src]=\"item() | imageApi: 'user' : 'small'\"\n size=\"full\"\n objectFit=\"cover\"\n ></xs-image>\n </div>\n\n <div\n class=\"flex flex-col items-start justify-start w-full min-w-0\"\n >\n <h3\n class=\"w-full text-[16px] font-semibold text-white pr-2\"\n >\n <span class=\"block max-w-full pr-2 truncate\">\n {{ item()['name'] }}\n </span>\n </h3>\n\n <div\n class=\"flex items-center min-w-0 gap-1 text-xs text-zinc-500\"\n >\n <img\n [src]=\"getCountryCode() | countryFlag\"\n [alt]=\"getCountryName()\"\n class=\"flex-shrink-0 w-3 h-3 rounded-sm \"\n />\n <span class=\"flex-1 truncate\">\n {{ getItemType() | XSTypeUser }}\n </span>\n </div>\n </div>\n </div>\n\n @if (\n item()['value'] !== undefined && item()['unit']\n ) {\n <div class=\"flex items-center text-right mr-2\">\n <span class=\"text-white font-semibold text-sm\">\n {{ item()['value'] }}\n </span>\n <span class=\"text-zinc-400 text-xs ml-1\">\n {{ item()['unit'] }}\n </span>\n </div>\n }\n\n @if (showChevron() || loading()) {\n <div\n class=\"flex items-center flex-shrink-0 h-full ml-2\"\n >\n @if (loading()) {\n <div\n class=\"w-4 h-4 border-2 border-white rounded-full border-t-transparent animate-spin\"\n aria-label=\"Cargando\"\n ></div>\n }\n @if (!loading()) {\n <xs-icon\n icon=\"chevron-right\"\n class=\"text-zinc-400\"\n [ngClass]=\"\n item()['value'] !== undefined && item()['unit']\n ? 'ml-1'\n : 'ml-2'\n \"\n ></xs-icon>\n }\n </div>\n }\n </div>\n </a>\n }\n ", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: XSImageComponent, selector: "xs-image", inputs: ["config", "viewTransitionName", "src", "alt", "width", "height", "size", "rounded", "objectFit", "clickable", "item", "typeItem", "imageType", "fallbackSrc", "loading", "priority", "customClass", "generateAvatar"], outputs: ["onClick", "onLoad", "onError"] }, { kind: "component", type: XSIconComponent, selector: "xs-icon", inputs: ["icon", "size", "class"] }, { kind: "pipe", type: XSTypeUserPipe, name: "XSTypeUser" }, { kind: "pipe", type: ImageApiPipe, name: "imageApi" }, { kind: "pipe", type: CountryFlagPipe, name: "countryFlag" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
16806
16764
|
}
|
|
16807
16765
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: XSItemTypeUserComponent, decorators: [{
|
|
16808
16766
|
type: Component,
|
|
@@ -16814,7 +16772,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImpo
|
|
|
16814
16772
|
XSIconComponent,
|
|
16815
16773
|
ImageApiPipe,
|
|
16816
16774
|
CountryFlagPipe,
|
|
16817
|
-
], host: { 'xs-item-type-user-host': '' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "\n @if (isLink()) {\n <a\n [class]=\"itemClasses\"\n (click)=\"handleClick($event)\"\n >\n <div class=\"flex items-center justify-between w-full\">\n <div class=\"flex items-center flex-1 min-w-0 gap-2\">\n
|
|
16775
|
+
], host: { 'xs-item-type-user-host': '' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "\n @if (isLink()) {\n <a\n [class]=\"itemClasses\"\n (click)=\"handleClick($event)\"\n >\n <div class=\"flex items-center justify-between w-full\">\n <div class=\"flex items-center flex-1 min-w-0 gap-2\">\n <div\n class=\"flex-shrink-0 w-10 h-10 overflow-hidden rounded-xl\"\n [ngClass]=\"[\n size() === 'small' ? 'w-8 h-8' : 'w-10 h-10 mr-1',\n ]\"\n >\n <xs-image\n [src]=\"item() | imageApi: 'user' : 'small'\"\n size=\"full\"\n objectFit=\"cover\"\n ></xs-image>\n </div>\n\n <div\n class=\"flex flex-col items-start justify-start w-full min-w-0\"\n >\n <h3\n class=\"w-full text-[16px] font-semibold text-white pr-2\"\n >\n <span class=\"block max-w-full pr-2 truncate\">\n {{ item()['name'] }}\n </span>\n </h3>\n\n <div\n class=\"flex items-center min-w-0 gap-1 text-xs text-zinc-500\"\n >\n <img\n [src]=\"getCountryCode() | countryFlag\"\n [alt]=\"getCountryName()\"\n class=\"flex-shrink-0 w-3 h-3 rounded-sm \"\n />\n <span class=\"flex-1 truncate\">\n {{ getItemType() | XSTypeUser }}\n </span>\n </div>\n </div>\n </div>\n\n @if (\n item()['value'] !== undefined && item()['unit']\n ) {\n <div class=\"flex items-center text-right mr-2\">\n <span class=\"text-white font-semibold text-sm\">\n {{ item()['value'] }}\n </span>\n <span class=\"text-zinc-400 text-xs ml-1\">\n {{ item()['unit'] }}\n </span>\n </div>\n }\n\n @if (showChevron() || loading()) {\n <div\n class=\"flex items-center flex-shrink-0 h-full ml-2\"\n >\n @if (loading()) {\n <div\n class=\"w-4 h-4 border-2 border-white rounded-full border-t-transparent animate-spin\"\n aria-label=\"Cargando\"\n ></div>\n }\n @if (!loading()) {\n <xs-icon\n icon=\"chevron-right\"\n class=\"text-zinc-400\"\n [ngClass]=\"\n item()['value'] !== undefined && item()['unit']\n ? 'ml-1'\n : 'ml-2'\n \"\n ></xs-icon>\n }\n </div>\n }\n </div>\n </a>\n }\n " }]
|
|
16818
16776
|
}] });
|
|
16819
16777
|
|
|
16820
16778
|
class XSItemTypeUserStatsComponent extends XSItemTypeBaseComponent {
|
|
@@ -17051,7 +17009,7 @@ class XSItemTypeTrackingComponent extends XSItemTypeBaseComponent {
|
|
|
17051
17009
|
};
|
|
17052
17010
|
}
|
|
17053
17011
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: XSItemTypeTrackingComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
17054
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: XSItemTypeTrackingComponent, isStandalone: true, selector: "xs-item-type-tracking", host: { attributes: { "xs-item-type-tracking-host": "" } }, usesInheritance: true, ngImport: i0, template: "\n @if (isLink()) {\n <a\n [class]=\"itemClasses\"\n (click)=\"handleClick($event)\"\n >\n <div class=\"flex items-center justify-between w-full\">\n <div class=\"flex items-center flex-1 min-w-0 gap-2\">\n
|
|
17012
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: XSItemTypeTrackingComponent, isStandalone: true, selector: "xs-item-type-tracking", host: { attributes: { "xs-item-type-tracking-host": "" } }, usesInheritance: true, ngImport: i0, template: "\n @if (isLink()) {\n <a\n [class]=\"itemClasses\"\n (click)=\"handleClick($event)\"\n >\n <div class=\"flex items-center justify-between w-full\">\n <div class=\"flex items-center flex-1 min-w-0 gap-2\">\n <div\n class=\"flex-shrink-0 w-10 h-10 overflow-hidden rounded-xl\"\n [ngClass]=\"[\n size() === 'small' ? 'w-8 h-8' : 'w-10 h-10 mr-1',\n ]\"\n >\n <xs-image\n [item]=\"userForImage\"\n typeItem=\"user\"\n imageType=\"small\"\n size=\"full\"\n objectFit=\"cover\"\n [generateAvatar]=\"true\"\n ></xs-image>\n </div>\n <div\n class=\"flex flex-col items-start justify-start w-full min-w-0\"\n >\n <h3\n class=\"w-full text-[16px] font-semibold text-white pr-2\"\n >\n <span class=\"block max-w-full pr-2 truncate\">\n {{ getModule() | firstLetterCase }}\n {{ getAction() }}\n </span>\n </h3>\n <div\n class=\"flex items-center min-w-0 gap-1 text-xs text-zinc-500\"\n >\n <span class=\"flex items-center gap-1\">\n\n <img\n [src]=\"getDeviceCountry() | countryFlag\"\n [alt]=\"getDeviceCountry()\"\n class=\"flex-shrink-0 w-3 h-3 rounded-sm\"\n />\n\n {{ getUserName() }}\n </span>\n </div>\n </div>\n </div>\n\n <div\n class=\"flex flex-col items-end justify-center gap-0 py-0 text-xs text-zinc-300\"\n >\n <span class=\"font-semibold\">{{\n item()['created'] | dateChat | firstLetterCase\n }}</span>\n <span\n class=\"font-extralight\"\n [ngClass]=\"{\n 'text-red-600': item()['isError'],\n 'text-green-500': !item()['isError'],\n }\"\n >\n {{ item()['isError'] ? 'Error' : 'OK' }}\n </span>\n </div>\n </div>\n </a>\n }\n ", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: XSImageComponent, selector: "xs-image", inputs: ["config", "viewTransitionName", "src", "alt", "width", "height", "size", "rounded", "objectFit", "clickable", "item", "typeItem", "imageType", "fallbackSrc", "loading", "priority", "customClass", "generateAvatar"], outputs: ["onClick", "onLoad", "onError"] }, { kind: "pipe", type: CountryFlagPipe, name: "countryFlag" }, { kind: "pipe", type: DateChatPipe, name: "dateChat" }, { kind: "pipe", type: XSFirstLetterPipe, name: "firstLetterCase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
17055
17013
|
}
|
|
17056
17014
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: XSItemTypeTrackingComponent, decorators: [{
|
|
17057
17015
|
type: Component,
|
|
@@ -17062,7 +17020,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImpo
|
|
|
17062
17020
|
DateChatPipe,
|
|
17063
17021
|
XSImageComponent,
|
|
17064
17022
|
XSFirstLetterPipe,
|
|
17065
|
-
], host: { 'xs-item-type-tracking-host': '' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "\n @if (isLink()) {\n <a\n [class]=\"itemClasses\"\n (click)=\"handleClick($event)\"\n >\n <div class=\"flex items-center justify-between w-full\">\n <div class=\"flex items-center flex-1 min-w-0 gap-2\">\n
|
|
17023
|
+
], host: { 'xs-item-type-tracking-host': '' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "\n @if (isLink()) {\n <a\n [class]=\"itemClasses\"\n (click)=\"handleClick($event)\"\n >\n <div class=\"flex items-center justify-between w-full\">\n <div class=\"flex items-center flex-1 min-w-0 gap-2\">\n <div\n class=\"flex-shrink-0 w-10 h-10 overflow-hidden rounded-xl\"\n [ngClass]=\"[\n size() === 'small' ? 'w-8 h-8' : 'w-10 h-10 mr-1',\n ]\"\n >\n <xs-image\n [item]=\"userForImage\"\n typeItem=\"user\"\n imageType=\"small\"\n size=\"full\"\n objectFit=\"cover\"\n [generateAvatar]=\"true\"\n ></xs-image>\n </div>\n <div\n class=\"flex flex-col items-start justify-start w-full min-w-0\"\n >\n <h3\n class=\"w-full text-[16px] font-semibold text-white pr-2\"\n >\n <span class=\"block max-w-full pr-2 truncate\">\n {{ getModule() | firstLetterCase }}\n {{ getAction() }}\n </span>\n </h3>\n <div\n class=\"flex items-center min-w-0 gap-1 text-xs text-zinc-500\"\n >\n <span class=\"flex items-center gap-1\">\n\n <img\n [src]=\"getDeviceCountry() | countryFlag\"\n [alt]=\"getDeviceCountry()\"\n class=\"flex-shrink-0 w-3 h-3 rounded-sm\"\n />\n\n {{ getUserName() }}\n </span>\n </div>\n </div>\n </div>\n\n <div\n class=\"flex flex-col items-end justify-center gap-0 py-0 text-xs text-zinc-300\"\n >\n <span class=\"font-semibold\">{{\n item()['created'] | dateChat | firstLetterCase\n }}</span>\n <span\n class=\"font-extralight\"\n [ngClass]=\"{\n 'text-red-600': item()['isError'],\n 'text-green-500': !item()['isError'],\n }\"\n >\n {{ item()['isError'] ? 'Error' : 'OK' }}\n </span>\n </div>\n </div>\n </a>\n }\n " }]
|
|
17066
17024
|
}] });
|
|
17067
17025
|
|
|
17068
17026
|
class XSItemTypeEventComponent extends XSItemTypeBaseComponent {
|
|
@@ -17088,7 +17046,7 @@ class XSItemTypeEventComponent extends XSItemTypeBaseComponent {
|
|
|
17088
17046
|
});
|
|
17089
17047
|
}
|
|
17090
17048
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: XSItemTypeEventComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
17091
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: XSItemTypeEventComponent, isStandalone: true, selector: "xs-item-type-event", host: { attributes: { "xs-item-type-event-host": "" } }, usesInheritance: true, ngImport: i0, template: "\n @if (isLink()) {\n <a\n [class]=\"itemClasses\"\n (click)=\"handleClick($event)\"\n >\n <div class=\"flex items-center justify-between w-full\">\n <div class=\"flex items-center flex-1 min-w-0 gap-2\">\n
|
|
17049
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: XSItemTypeEventComponent, isStandalone: true, selector: "xs-item-type-event", host: { attributes: { "xs-item-type-event-host": "" } }, usesInheritance: true, ngImport: i0, template: "\n @if (isLink()) {\n <a\n [class]=\"itemClasses\"\n (click)=\"handleClick($event)\"\n >\n <div class=\"flex items-center justify-between w-full\">\n <div class=\"flex items-center flex-1 min-w-0 gap-2\">\n <div\n class=\"flex-shrink-0 w-10 h-10 overflow-hidden rounded-xl\"\n [ngClass]=\"[\n size() === 'small' ? 'w-8 h-8' : 'w-10 h-10 mr-1',\n ]\"\n >\n @if (!item()['imageUrl']) {\n <xs-image\n [src]=\"item() | imageApi: 'event' : 'small'\"\n size=\"full\"\n objectFit=\"cover\"\n ></xs-image>\n }\n @if (item()['imageUrl']) {\n <xs-image\n [src]=\"item()['imageUrl']\"\n size=\"full\"\n objectFit=\"cover\"\n ></xs-image>\n }\n @if (!item()['imageUrl']) {\n <div\n class=\"flex items-center justify-center w-full h-full rounded-xl bg-zinc-700\"\n >\n <xs-icon\n icon=\"calendar\"\n class=\"text-zinc-400\"\n ></xs-icon>\n </div>\n }\n </div>\n\n <div\n class=\"flex flex-col items-start justify-start w-full min-w-0\"\n >\n <h3\n class=\"w-full text-[16px] font-semibold text-white pr-2\"\n >\n <span class=\"block max-w-full pr-2 truncate\">\n {{ getItemTitle() }}\n </span>\n </h3>\n\n <div\n class=\"flex items-center min-w-0 gap-1 text-xs text-zinc-500\"\n >\n <span class=\"flex-1 truncate\"> Evento </span>\n @if (item()['date']) {\n <span class=\"text-zinc-400\">\n \u2022 {{ formatDate(getItemDate()) }}\n </span>\n }\n </div>\n </div>\n </div>\n\n @if (item()['value'] !== undefined && item()['unit']) {\n <div\n class=\"flex items-center text-right mr-2\"\n >\n <span class=\"text-white font-semibold text-sm\">\n {{ item()['value'] }}\n </span>\n <span class=\"text-zinc-400 text-xs ml-1\">\n {{ item()['unit'] }}\n </span>\n </div>\n }\n\n @if (showChevron() || loading()) {\n <div\n class=\"flex items-center flex-shrink-0 h-full ml-2\"\n >\n @if (loading()) {\n <div\n class=\"w-4 h-4 border-2 border-white rounded-full border-t-transparent animate-spin\"\n aria-label=\"Cargando\"\n ></div>\n }\n @if (!loading()) {\n <xs-icon\n icon=\"chevron-right\"\n class=\"text-zinc-400\"\n [ngClass]=\"\n item()['value'] !== undefined && item()['unit']\n ? 'ml-1'\n : 'ml-2'\n \"\n ></xs-icon>\n }\n </div>\n }\n </div>\n </a>\n }\n ", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: XSImageComponent, selector: "xs-image", inputs: ["config", "viewTransitionName", "src", "alt", "width", "height", "size", "rounded", "objectFit", "clickable", "item", "typeItem", "imageType", "fallbackSrc", "loading", "priority", "customClass", "generateAvatar"], outputs: ["onClick", "onLoad", "onError"] }, { kind: "component", type: XSIconComponent, selector: "xs-icon", inputs: ["icon", "size", "class"] }, { kind: "pipe", type: ImageApiPipe, name: "imageApi" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
17092
17050
|
}
|
|
17093
17051
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: XSItemTypeEventComponent, decorators: [{
|
|
17094
17052
|
type: Component,
|
|
@@ -17098,7 +17056,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImpo
|
|
|
17098
17056
|
ImageApiPipe,
|
|
17099
17057
|
XSImageComponent,
|
|
17100
17058
|
XSIconComponent,
|
|
17101
|
-
], host: { 'xs-item-type-event-host': '' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "\n @if (isLink()) {\n <a\n [class]=\"itemClasses\"\n (click)=\"handleClick($event)\"\n >\n <div class=\"flex items-center justify-between w-full\">\n <div class=\"flex items-center flex-1 min-w-0 gap-2\">\n
|
|
17059
|
+
], host: { 'xs-item-type-event-host': '' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "\n @if (isLink()) {\n <a\n [class]=\"itemClasses\"\n (click)=\"handleClick($event)\"\n >\n <div class=\"flex items-center justify-between w-full\">\n <div class=\"flex items-center flex-1 min-w-0 gap-2\">\n <div\n class=\"flex-shrink-0 w-10 h-10 overflow-hidden rounded-xl\"\n [ngClass]=\"[\n size() === 'small' ? 'w-8 h-8' : 'w-10 h-10 mr-1',\n ]\"\n >\n @if (!item()['imageUrl']) {\n <xs-image\n [src]=\"item() | imageApi: 'event' : 'small'\"\n size=\"full\"\n objectFit=\"cover\"\n ></xs-image>\n }\n @if (item()['imageUrl']) {\n <xs-image\n [src]=\"item()['imageUrl']\"\n size=\"full\"\n objectFit=\"cover\"\n ></xs-image>\n }\n @if (!item()['imageUrl']) {\n <div\n class=\"flex items-center justify-center w-full h-full rounded-xl bg-zinc-700\"\n >\n <xs-icon\n icon=\"calendar\"\n class=\"text-zinc-400\"\n ></xs-icon>\n </div>\n }\n </div>\n\n <div\n class=\"flex flex-col items-start justify-start w-full min-w-0\"\n >\n <h3\n class=\"w-full text-[16px] font-semibold text-white pr-2\"\n >\n <span class=\"block max-w-full pr-2 truncate\">\n {{ getItemTitle() }}\n </span>\n </h3>\n\n <div\n class=\"flex items-center min-w-0 gap-1 text-xs text-zinc-500\"\n >\n <span class=\"flex-1 truncate\"> Evento </span>\n @if (item()['date']) {\n <span class=\"text-zinc-400\">\n \u2022 {{ formatDate(getItemDate()) }}\n </span>\n }\n </div>\n </div>\n </div>\n\n @if (item()['value'] !== undefined && item()['unit']) {\n <div\n class=\"flex items-center text-right mr-2\"\n >\n <span class=\"text-white font-semibold text-sm\">\n {{ item()['value'] }}\n </span>\n <span class=\"text-zinc-400 text-xs ml-1\">\n {{ item()['unit'] }}\n </span>\n </div>\n }\n\n @if (showChevron() || loading()) {\n <div\n class=\"flex items-center flex-shrink-0 h-full ml-2\"\n >\n @if (loading()) {\n <div\n class=\"w-4 h-4 border-2 border-white rounded-full border-t-transparent animate-spin\"\n aria-label=\"Cargando\"\n ></div>\n }\n @if (!loading()) {\n <xs-icon\n icon=\"chevron-right\"\n class=\"text-zinc-400\"\n [ngClass]=\"\n item()['value'] !== undefined && item()['unit']\n ? 'ml-1'\n : 'ml-2'\n \"\n ></xs-icon>\n }\n </div>\n }\n </div>\n </a>\n }\n " }]
|
|
17102
17060
|
}] });
|
|
17103
17061
|
|
|
17104
17062
|
class XSItemTypeEquipmentComponent extends XSItemTypeBaseComponent {
|
|
@@ -17118,7 +17076,7 @@ class XSItemTypeEquipmentComponent extends XSItemTypeBaseComponent {
|
|
|
17118
17076
|
return this.item()?.['unit'];
|
|
17119
17077
|
}
|
|
17120
17078
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: XSItemTypeEquipmentComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
17121
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: XSItemTypeEquipmentComponent, isStandalone: true, selector: "xs-item-type-equipment", host: { attributes: { "xs-item-type-equipment-host": "" } }, usesInheritance: true, ngImport: i0, template: "\n @if (isLink()) {\n <a\n [class]=\"itemClasses\"\n (click)=\"handleClick($event)\"\n >\n <div class=\"flex items-center justify-between w-full\">\n <div class=\"flex items-center flex-1 min-w-0 gap-2\">\n
|
|
17079
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: XSItemTypeEquipmentComponent, isStandalone: true, selector: "xs-item-type-equipment", host: { attributes: { "xs-item-type-equipment-host": "" } }, usesInheritance: true, ngImport: i0, template: "\n @if (isLink()) {\n <a\n [class]=\"itemClasses\"\n (click)=\"handleClick($event)\"\n >\n <div class=\"flex items-center justify-between w-full\">\n <div class=\"flex items-center flex-1 min-w-0 gap-2\">\n <div\n class=\"flex-shrink-0 w-10 h-10 overflow-hidden rounded-xl\"\n [ngClass]=\"[\n size() === 'small' ? 'w-8 h-8' : 'w-10 h-10 mr-1',\n ]\"\n >\n @if (!getItemImageUrl()) {\n <xs-image\n [src]=\"item() | imageApi: 'equipment' : 'small'\"\n size=\"full\"\n objectFit=\"cover\"\n ></xs-image>\n }\n @if (getItemImageUrl()) {\n <xs-image\n [src]=\"getItemImageUrl()\"\n size=\"full\"\n objectFit=\"cover\"\n ></xs-image>\n }\n @if (!getItemImageUrl()) {\n <div\n class=\"flex items-center justify-center w-full h-full rounded-xl bg-zinc-700\"\n >\n <xs-icon\n icon=\"cogs\"\n class=\"text-zinc-400\"\n ></xs-icon>\n </div>\n }\n </div>\n\n <div\n class=\"flex flex-col items-start justify-start w-full min-w-0\"\n >\n <h3\n class=\"w-full text-[16px] font-semibold text-white pr-2\"\n >\n <span class=\"block max-w-full pr-2 truncate\">\n {{ getItemTitle() }}\n </span>\n </h3>\n\n <div\n class=\"flex items-center min-w-0 gap-1 text-xs text-zinc-500\"\n >\n <span class=\"flex-1 truncate\"> Equipo </span>\n @if (getItemCategory()) {\n <span\n class=\"text-zinc-400\"\n >\n \u2022 {{ getItemCategory() }}\n </span>\n }\n </div>\n </div>\n </div>\n\n @if (getItemValue() !== undefined && getItemUnit()) {\n <div\n class=\"flex items-center text-right mr-2\"\n >\n <span class=\"text-white font-semibold text-sm\">\n {{ getItemValue() }}\n </span>\n <span class=\"text-zinc-400 text-xs ml-1\">\n {{ getItemUnit() }}\n </span>\n </div>\n }\n\n @if (showChevron() || loading()) {\n <div\n class=\"flex items-center flex-shrink-0 h-full ml-2\"\n >\n @if (loading()) {\n <div\n class=\"w-4 h-4 border-2 border-white rounded-full border-t-transparent animate-spin\"\n aria-label=\"Cargando\"\n ></div>\n }\n @if (!loading()) {\n <xs-icon\n icon=\"chevron-right\"\n class=\"text-zinc-400\"\n [ngClass]=\"\n getItemValue() !== undefined && getItemUnit()\n ? 'ml-1'\n : 'ml-2'\n \"\n ></xs-icon>\n }\n </div>\n }\n </div>\n </a>\n }\n ", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: XSImageComponent, selector: "xs-image", inputs: ["config", "viewTransitionName", "src", "alt", "width", "height", "size", "rounded", "objectFit", "clickable", "item", "typeItem", "imageType", "fallbackSrc", "loading", "priority", "customClass", "generateAvatar"], outputs: ["onClick", "onLoad", "onError"] }, { kind: "component", type: XSIconComponent, selector: "xs-icon", inputs: ["icon", "size", "class"] }, { kind: "pipe", type: ImageApiPipe, name: "imageApi" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
17122
17080
|
}
|
|
17123
17081
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: XSItemTypeEquipmentComponent, decorators: [{
|
|
17124
17082
|
type: Component,
|
|
@@ -17128,7 +17086,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImpo
|
|
|
17128
17086
|
ImageApiPipe,
|
|
17129
17087
|
XSImageComponent,
|
|
17130
17088
|
XSIconComponent,
|
|
17131
|
-
], host: { 'xs-item-type-equipment-host': '' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "\n @if (isLink()) {\n <a\n [class]=\"itemClasses\"\n (click)=\"handleClick($event)\"\n >\n <div class=\"flex items-center justify-between w-full\">\n <div class=\"flex items-center flex-1 min-w-0 gap-2\">\n
|
|
17089
|
+
], host: { 'xs-item-type-equipment-host': '' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "\n @if (isLink()) {\n <a\n [class]=\"itemClasses\"\n (click)=\"handleClick($event)\"\n >\n <div class=\"flex items-center justify-between w-full\">\n <div class=\"flex items-center flex-1 min-w-0 gap-2\">\n <div\n class=\"flex-shrink-0 w-10 h-10 overflow-hidden rounded-xl\"\n [ngClass]=\"[\n size() === 'small' ? 'w-8 h-8' : 'w-10 h-10 mr-1',\n ]\"\n >\n @if (!getItemImageUrl()) {\n <xs-image\n [src]=\"item() | imageApi: 'equipment' : 'small'\"\n size=\"full\"\n objectFit=\"cover\"\n ></xs-image>\n }\n @if (getItemImageUrl()) {\n <xs-image\n [src]=\"getItemImageUrl()\"\n size=\"full\"\n objectFit=\"cover\"\n ></xs-image>\n }\n @if (!getItemImageUrl()) {\n <div\n class=\"flex items-center justify-center w-full h-full rounded-xl bg-zinc-700\"\n >\n <xs-icon\n icon=\"cogs\"\n class=\"text-zinc-400\"\n ></xs-icon>\n </div>\n }\n </div>\n\n <div\n class=\"flex flex-col items-start justify-start w-full min-w-0\"\n >\n <h3\n class=\"w-full text-[16px] font-semibold text-white pr-2\"\n >\n <span class=\"block max-w-full pr-2 truncate\">\n {{ getItemTitle() }}\n </span>\n </h3>\n\n <div\n class=\"flex items-center min-w-0 gap-1 text-xs text-zinc-500\"\n >\n <span class=\"flex-1 truncate\"> Equipo </span>\n @if (getItemCategory()) {\n <span\n class=\"text-zinc-400\"\n >\n \u2022 {{ getItemCategory() }}\n </span>\n }\n </div>\n </div>\n </div>\n\n @if (getItemValue() !== undefined && getItemUnit()) {\n <div\n class=\"flex items-center text-right mr-2\"\n >\n <span class=\"text-white font-semibold text-sm\">\n {{ getItemValue() }}\n </span>\n <span class=\"text-zinc-400 text-xs ml-1\">\n {{ getItemUnit() }}\n </span>\n </div>\n }\n\n @if (showChevron() || loading()) {\n <div\n class=\"flex items-center flex-shrink-0 h-full ml-2\"\n >\n @if (loading()) {\n <div\n class=\"w-4 h-4 border-2 border-white rounded-full border-t-transparent animate-spin\"\n aria-label=\"Cargando\"\n ></div>\n }\n @if (!loading()) {\n <xs-icon\n icon=\"chevron-right\"\n class=\"text-zinc-400\"\n [ngClass]=\"\n getItemValue() !== undefined && getItemUnit()\n ? 'ml-1'\n : 'ml-2'\n \"\n ></xs-icon>\n }\n </div>\n }\n </div>\n </a>\n }\n " }]
|
|
17132
17090
|
}] });
|
|
17133
17091
|
|
|
17134
17092
|
class XSItemTypeMediaComponent extends XSItemTypeBaseComponent {
|
|
@@ -17148,7 +17106,7 @@ class XSItemTypeMediaComponent extends XSItemTypeBaseComponent {
|
|
|
17148
17106
|
return `${minutes}:${remainingSeconds.toString().padStart(2, '0')}`;
|
|
17149
17107
|
}
|
|
17150
17108
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: XSItemTypeMediaComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
17151
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: XSItemTypeMediaComponent, isStandalone: true, selector: "xs-item-type-media", host: { attributes: { "xs-item-type-media-host": "" } }, usesInheritance: true, ngImport: i0, template: "\n @if (isLink()) {\n <a\n [class]=\"itemClasses\"\n (click)=\"handleClick($event)\"\n >\n <div class=\"flex items-center justify-between w-full\">\n <div class=\"flex items-center flex-1 min-w-0 gap-2\">\n
|
|
17109
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: XSItemTypeMediaComponent, isStandalone: true, selector: "xs-item-type-media", host: { attributes: { "xs-item-type-media-host": "" } }, usesInheritance: true, ngImport: i0, template: "\n @if (isLink()) {\n <a\n [class]=\"itemClasses\"\n (click)=\"handleClick($event)\"\n >\n <div class=\"flex items-center justify-between w-full\">\n <div class=\"flex items-center flex-1 min-w-0 gap-2\">\n <div\n class=\"flex-shrink-0 w-10 h-10 overflow-hidden rounded-xl\"\n [ngClass]=\"[\n size() === 'small' ? 'w-8 h-8' : 'w-10 h-10 mr-1',\n ]\"\n >\n @if (!item()['imageUrl']) {\n <xs-image\n [src]=\"item() | imageApi: 'media' : 'small'\"\n size=\"full\"\n objectFit=\"cover\"\n ></xs-image>\n }\n @if (item()['imageUrl']) {\n <xs-image\n [src]=\"item()['imageUrl']\"\n size=\"full\"\n objectFit=\"cover\"\n ></xs-image>\n }\n @if (!item()['imageUrl']) {\n <div\n class=\"flex items-center justify-center w-full h-full rounded-xl bg-zinc-700\"\n >\n <xs-icon\n icon=\"music\"\n class=\"text-zinc-400\"\n ></xs-icon>\n </div>\n }\n </div>\n\n <div\n class=\"flex flex-col items-start justify-start w-full min-w-0\"\n >\n <h3\n class=\"w-full text-[16px] font-semibold text-white pr-2\"\n >\n <span class=\"block max-w-full pr-2 truncate\">\n {{ getItemTitle() }}\n </span>\n </h3>\n\n <div\n class=\"flex items-center min-w-0 gap-1 text-xs text-zinc-500\"\n >\n <span class=\"flex-1 truncate\"> Media </span>\n @if (item()['duration']) {\n <span\n class=\"text-zinc-400\"\n >\n \u2022 {{ formatDuration(getItemDuration()) }}\n </span>\n }\n @if (item()['genre']) {\n <span\n class=\"text-zinc-400\"\n >\n \u2022 {{ item()['genre'] }}\n </span>\n }\n </div>\n </div>\n </div>\n\n @if (item()['value'] !== undefined && item()['unit']) {\n <div\n class=\"flex items-center text-right mr-2\"\n >\n <span class=\"text-white font-semibold text-sm\">\n {{ item()['value'] }}\n </span>\n <span class=\"text-zinc-400 text-xs ml-1\">\n {{ item()['unit'] }}\n </span>\n </div>\n }\n\n @if (showChevron() || loading()) {\n <div\n class=\"flex items-center flex-shrink-0 h-full ml-2\"\n >\n @if (loading()) {\n <div\n class=\"w-4 h-4 border-2 border-white rounded-full border-t-transparent animate-spin\"\n aria-label=\"Cargando\"\n ></div>\n }\n @if (!loading()) {\n <xs-icon\n icon=\"chevron-right\"\n class=\"text-zinc-400\"\n [ngClass]=\"\n item()['value'] !== undefined && item()['unit']\n ? 'ml-1'\n : 'ml-2'\n \"\n ></xs-icon>\n }\n </div>\n }\n </div>\n </a>\n }\n ", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: XSImageComponent, selector: "xs-image", inputs: ["config", "viewTransitionName", "src", "alt", "width", "height", "size", "rounded", "objectFit", "clickable", "item", "typeItem", "imageType", "fallbackSrc", "loading", "priority", "customClass", "generateAvatar"], outputs: ["onClick", "onLoad", "onError"] }, { kind: "component", type: XSIconComponent, selector: "xs-icon", inputs: ["icon", "size", "class"] }, { kind: "pipe", type: ImageApiPipe, name: "imageApi" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
17152
17110
|
}
|
|
17153
17111
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: XSItemTypeMediaComponent, decorators: [{
|
|
17154
17112
|
type: Component,
|
|
@@ -17158,7 +17116,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImpo
|
|
|
17158
17116
|
ImageApiPipe,
|
|
17159
17117
|
XSImageComponent,
|
|
17160
17118
|
XSIconComponent,
|
|
17161
|
-
], host: { 'xs-item-type-media-host': '' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "\n @if (isLink()) {\n <a\n [class]=\"itemClasses\"\n (click)=\"handleClick($event)\"\n >\n <div class=\"flex items-center justify-between w-full\">\n <div class=\"flex items-center flex-1 min-w-0 gap-2\">\n
|
|
17119
|
+
], host: { 'xs-item-type-media-host': '' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "\n @if (isLink()) {\n <a\n [class]=\"itemClasses\"\n (click)=\"handleClick($event)\"\n >\n <div class=\"flex items-center justify-between w-full\">\n <div class=\"flex items-center flex-1 min-w-0 gap-2\">\n <div\n class=\"flex-shrink-0 w-10 h-10 overflow-hidden rounded-xl\"\n [ngClass]=\"[\n size() === 'small' ? 'w-8 h-8' : 'w-10 h-10 mr-1',\n ]\"\n >\n @if (!item()['imageUrl']) {\n <xs-image\n [src]=\"item() | imageApi: 'media' : 'small'\"\n size=\"full\"\n objectFit=\"cover\"\n ></xs-image>\n }\n @if (item()['imageUrl']) {\n <xs-image\n [src]=\"item()['imageUrl']\"\n size=\"full\"\n objectFit=\"cover\"\n ></xs-image>\n }\n @if (!item()['imageUrl']) {\n <div\n class=\"flex items-center justify-center w-full h-full rounded-xl bg-zinc-700\"\n >\n <xs-icon\n icon=\"music\"\n class=\"text-zinc-400\"\n ></xs-icon>\n </div>\n }\n </div>\n\n <div\n class=\"flex flex-col items-start justify-start w-full min-w-0\"\n >\n <h3\n class=\"w-full text-[16px] font-semibold text-white pr-2\"\n >\n <span class=\"block max-w-full pr-2 truncate\">\n {{ getItemTitle() }}\n </span>\n </h3>\n\n <div\n class=\"flex items-center min-w-0 gap-1 text-xs text-zinc-500\"\n >\n <span class=\"flex-1 truncate\"> Media </span>\n @if (item()['duration']) {\n <span\n class=\"text-zinc-400\"\n >\n \u2022 {{ formatDuration(getItemDuration()) }}\n </span>\n }\n @if (item()['genre']) {\n <span\n class=\"text-zinc-400\"\n >\n \u2022 {{ item()['genre'] }}\n </span>\n }\n </div>\n </div>\n </div>\n\n @if (item()['value'] !== undefined && item()['unit']) {\n <div\n class=\"flex items-center text-right mr-2\"\n >\n <span class=\"text-white font-semibold text-sm\">\n {{ item()['value'] }}\n </span>\n <span class=\"text-zinc-400 text-xs ml-1\">\n {{ item()['unit'] }}\n </span>\n </div>\n }\n\n @if (showChevron() || loading()) {\n <div\n class=\"flex items-center flex-shrink-0 h-full ml-2\"\n >\n @if (loading()) {\n <div\n class=\"w-4 h-4 border-2 border-white rounded-full border-t-transparent animate-spin\"\n aria-label=\"Cargando\"\n ></div>\n }\n @if (!loading()) {\n <xs-icon\n icon=\"chevron-right\"\n class=\"text-zinc-400\"\n [ngClass]=\"\n item()['value'] !== undefined && item()['unit']\n ? 'ml-1'\n : 'ml-2'\n \"\n ></xs-icon>\n }\n </div>\n }\n </div>\n </a>\n }\n " }]
|
|
17162
17120
|
}] });
|
|
17163
17121
|
|
|
17164
17122
|
class XSItemTypePlaylistComponent extends XSItemTypeBaseComponent {
|
|
@@ -17182,7 +17140,7 @@ class XSItemTypePlaylistComponent extends XSItemTypeBaseComponent {
|
|
|
17182
17140
|
return `${minutes}:${remainingSeconds.toString().padStart(2, '0')}`;
|
|
17183
17141
|
}
|
|
17184
17142
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: XSItemTypePlaylistComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
17185
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: XSItemTypePlaylistComponent, isStandalone: true, selector: "xs-item-type-playlist", host: { attributes: { "xs-item-type-playlist-host": "" } }, usesInheritance: true, ngImport: i0, template: "\n @if (isLink()) {\n <a\n [class]=\"itemClasses\"\n (click)=\"handleClick($event)\"\n >\n <div class=\"flex items-center justify-between w-full\">\n <div class=\"flex items-center flex-1 min-w-0 gap-2\">\n
|
|
17143
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: XSItemTypePlaylistComponent, isStandalone: true, selector: "xs-item-type-playlist", host: { attributes: { "xs-item-type-playlist-host": "" } }, usesInheritance: true, ngImport: i0, template: "\n @if (isLink()) {\n <a\n [class]=\"itemClasses\"\n (click)=\"handleClick($event)\"\n >\n <div class=\"flex items-center justify-between w-full\">\n <div class=\"flex items-center flex-1 min-w-0 gap-2\">\n <div\n class=\"flex-shrink-0 w-10 h-10 overflow-hidden rounded-xl\"\n [ngClass]=\"[\n size() === 'small' ? 'w-8 h-8' : 'w-10 h-10 mr-1',\n ]\"\n >\n @if (!item()['imageUrl']) {\n <xs-image\n [src]=\"item() | imageApi: 'playlist' : 'small'\"\n size=\"full\"\n objectFit=\"cover\"\n ></xs-image>\n }\n @if (item()['imageUrl']) {\n <xs-image\n [src]=\"item()['imageUrl']\"\n size=\"full\"\n objectFit=\"cover\"\n ></xs-image>\n }\n @if (!item()['imageUrl']) {\n <div\n class=\"flex items-center justify-center w-full h-full rounded-xl bg-zinc-700\"\n >\n <xs-icon\n icon=\"list\"\n class=\"text-zinc-400\"\n ></xs-icon>\n </div>\n }\n </div>\n\n <div\n class=\"flex flex-col items-start justify-start w-full min-w-0\"\n >\n <h3\n class=\"w-full text-[16px] font-semibold text-white pr-2\"\n >\n <span class=\"block max-w-full pr-2 truncate\">\n {{ getItemTitle() }}\n </span>\n </h3>\n\n <div\n class=\"flex items-center min-w-0 gap-1 text-xs text-zinc-500\"\n >\n <span class=\"flex-1 truncate\"> Playlist </span>\n @if (getTracksLength() > 0) {\n <span\n class=\"text-zinc-400\"\n >\n \u2022 {{ getTracksLength() }} pistas\n </span>\n }\n @if (getItemDuration() > 0) {\n <span\n class=\"text-zinc-400\"\n >\n \u2022 {{ formatDuration(getItemDuration()) }}\n </span>\n }\n </div>\n </div>\n </div>\n\n @if (item()['value'] !== undefined && item()['unit']) {\n <div\n class=\"flex items-center text-right mr-2\"\n >\n <span class=\"text-white font-semibold text-sm\">\n {{ item()['value'] }}\n </span>\n <span class=\"text-zinc-400 text-xs ml-1\">\n {{ item()['unit'] }}\n </span>\n </div>\n }\n\n @if (showChevron() || loading()) {\n <div\n class=\"flex items-center flex-shrink-0 h-full ml-2\"\n >\n @if (loading()) {\n <div\n class=\"w-4 h-4 border-2 border-white rounded-full border-t-transparent animate-spin\"\n aria-label=\"Cargando\"\n ></div>\n }\n @if (!loading()) {\n <xs-icon\n icon=\"chevron-right\"\n class=\"text-zinc-400\"\n [ngClass]=\"\n item()['value'] !== undefined && item()['unit']\n ? 'ml-1'\n : 'ml-2'\n \"\n ></xs-icon>\n }\n </div>\n }\n </div>\n </a>\n }\n ", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: XSImageComponent, selector: "xs-image", inputs: ["config", "viewTransitionName", "src", "alt", "width", "height", "size", "rounded", "objectFit", "clickable", "item", "typeItem", "imageType", "fallbackSrc", "loading", "priority", "customClass", "generateAvatar"], outputs: ["onClick", "onLoad", "onError"] }, { kind: "component", type: XSIconComponent, selector: "xs-icon", inputs: ["icon", "size", "class"] }, { kind: "pipe", type: ImageApiPipe, name: "imageApi" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
17186
17144
|
}
|
|
17187
17145
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: XSItemTypePlaylistComponent, decorators: [{
|
|
17188
17146
|
type: Component,
|
|
@@ -17192,7 +17150,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImpo
|
|
|
17192
17150
|
ImageApiPipe,
|
|
17193
17151
|
XSImageComponent,
|
|
17194
17152
|
XSIconComponent,
|
|
17195
|
-
], host: { 'xs-item-type-playlist-host': '' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "\n @if (isLink()) {\n <a\n [class]=\"itemClasses\"\n (click)=\"handleClick($event)\"\n >\n <div class=\"flex items-center justify-between w-full\">\n <div class=\"flex items-center flex-1 min-w-0 gap-2\">\n
|
|
17153
|
+
], host: { 'xs-item-type-playlist-host': '' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "\n @if (isLink()) {\n <a\n [class]=\"itemClasses\"\n (click)=\"handleClick($event)\"\n >\n <div class=\"flex items-center justify-between w-full\">\n <div class=\"flex items-center flex-1 min-w-0 gap-2\">\n <div\n class=\"flex-shrink-0 w-10 h-10 overflow-hidden rounded-xl\"\n [ngClass]=\"[\n size() === 'small' ? 'w-8 h-8' : 'w-10 h-10 mr-1',\n ]\"\n >\n @if (!item()['imageUrl']) {\n <xs-image\n [src]=\"item() | imageApi: 'playlist' : 'small'\"\n size=\"full\"\n objectFit=\"cover\"\n ></xs-image>\n }\n @if (item()['imageUrl']) {\n <xs-image\n [src]=\"item()['imageUrl']\"\n size=\"full\"\n objectFit=\"cover\"\n ></xs-image>\n }\n @if (!item()['imageUrl']) {\n <div\n class=\"flex items-center justify-center w-full h-full rounded-xl bg-zinc-700\"\n >\n <xs-icon\n icon=\"list\"\n class=\"text-zinc-400\"\n ></xs-icon>\n </div>\n }\n </div>\n\n <div\n class=\"flex flex-col items-start justify-start w-full min-w-0\"\n >\n <h3\n class=\"w-full text-[16px] font-semibold text-white pr-2\"\n >\n <span class=\"block max-w-full pr-2 truncate\">\n {{ getItemTitle() }}\n </span>\n </h3>\n\n <div\n class=\"flex items-center min-w-0 gap-1 text-xs text-zinc-500\"\n >\n <span class=\"flex-1 truncate\"> Playlist </span>\n @if (getTracksLength() > 0) {\n <span\n class=\"text-zinc-400\"\n >\n \u2022 {{ getTracksLength() }} pistas\n </span>\n }\n @if (getItemDuration() > 0) {\n <span\n class=\"text-zinc-400\"\n >\n \u2022 {{ formatDuration(getItemDuration()) }}\n </span>\n }\n </div>\n </div>\n </div>\n\n @if (item()['value'] !== undefined && item()['unit']) {\n <div\n class=\"flex items-center text-right mr-2\"\n >\n <span class=\"text-white font-semibold text-sm\">\n {{ item()['value'] }}\n </span>\n <span class=\"text-zinc-400 text-xs ml-1\">\n {{ item()['unit'] }}\n </span>\n </div>\n }\n\n @if (showChevron() || loading()) {\n <div\n class=\"flex items-center flex-shrink-0 h-full ml-2\"\n >\n @if (loading()) {\n <div\n class=\"w-4 h-4 border-2 border-white rounded-full border-t-transparent animate-spin\"\n aria-label=\"Cargando\"\n ></div>\n }\n @if (!loading()) {\n <xs-icon\n icon=\"chevron-right\"\n class=\"text-zinc-400\"\n [ngClass]=\"\n item()['value'] !== undefined && item()['unit']\n ? 'ml-1'\n : 'ml-2'\n \"\n ></xs-icon>\n }\n </div>\n }\n </div>\n </a>\n }\n " }]
|
|
17196
17154
|
}] });
|
|
17197
17155
|
|
|
17198
17156
|
class XSItemTypeOrganizationComponent extends XSItemTypeBaseComponent {
|
|
@@ -17212,7 +17170,7 @@ class XSItemTypeOrganizationComponent extends XSItemTypeBaseComponent {
|
|
|
17212
17170
|
return this.item()?.['unit'];
|
|
17213
17171
|
}
|
|
17214
17172
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: XSItemTypeOrganizationComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
17215
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: XSItemTypeOrganizationComponent, isStandalone: true, selector: "xs-item-type-organization", host: { attributes: { "xs-item-type-organization-host": "" } }, usesInheritance: true, ngImport: i0, template: "\n @if (isLink()) {\n <a\n [class]=\"itemClasses\"\n (click)=\"handleClick($event)\"\n >\n <div class=\"flex items-center justify-between w-full\">\n <div class=\"flex items-center flex-1 min-w-0 gap-2\">\n
|
|
17173
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: XSItemTypeOrganizationComponent, isStandalone: true, selector: "xs-item-type-organization", host: { attributes: { "xs-item-type-organization-host": "" } }, usesInheritance: true, ngImport: i0, template: "\n @if (isLink()) {\n <a\n [class]=\"itemClasses\"\n (click)=\"handleClick($event)\"\n >\n <div class=\"flex items-center justify-between w-full\">\n <div class=\"flex items-center flex-1 min-w-0 gap-2\">\n <div\n class=\"flex-shrink-0 w-10 h-10 overflow-hidden rounded-xl\"\n [ngClass]=\"[\n size() === 'small' ? 'w-8 h-8' : 'w-10 h-10 mr-1',\n ]\"\n >\n @if (!getItemImageUrl()) {\n <xs-image\n [src]=\"item() | imageApi: 'organization' : 'small'\"\n size=\"full\"\n objectFit=\"cover\"\n ></xs-image>\n }\n @if (getItemImageUrl()) {\n <xs-image\n [src]=\"getItemImageUrl()\"\n size=\"full\"\n objectFit=\"cover\"\n ></xs-image>\n }\n @if (!getItemImageUrl()) {\n <div\n class=\"flex items-center justify-center w-full h-full rounded-xl bg-zinc-700\"\n >\n <xs-icon\n icon=\"building\"\n class=\"text-zinc-400\"\n ></xs-icon>\n </div>\n }\n </div>\n\n <div\n class=\"flex flex-col items-start justify-start w-full min-w-0\"\n >\n <h3\n class=\"w-full text-[16px] font-semibold text-white pr-2\"\n >\n <span class=\"block max-w-full pr-2 truncate\">\n {{ getItemTitle() }}\n </span>\n </h3>\n\n <div\n class=\"flex items-center min-w-0 gap-1 text-xs text-zinc-500\"\n >\n <span class=\"flex-1 truncate\"> Organizaci\u00F3n </span>\n @if (getItemOrgType()) {\n <span\n class=\"text-zinc-400\"\n >\n \u2022 {{ getItemOrgType() }}\n </span>\n }\n </div>\n </div>\n </div>\n\n @if (getItemValue() !== undefined && getItemUnit()) {\n <div\n class=\"flex items-center text-right mr-2\"\n >\n <span class=\"text-white font-semibold text-sm\">\n {{ getItemValue() }}\n </span>\n <span class=\"text-zinc-400 text-xs ml-1\">\n {{ getItemUnit() }}\n </span>\n </div>\n }\n\n @if (showChevron() || loading()) {\n <div\n class=\"flex items-center flex-shrink-0 h-full ml-2\"\n >\n @if (loading()) {\n <div\n class=\"w-4 h-4 border-2 border-white rounded-full border-t-transparent animate-spin\"\n aria-label=\"Cargando\"\n ></div>\n }\n @if (!loading()) {\n <xs-icon\n icon=\"chevron-right\"\n class=\"text-zinc-400\"\n [ngClass]=\"\n getItemValue() !== undefined && getItemUnit()\n ? 'ml-1'\n : 'ml-2'\n \"\n ></xs-icon>\n }\n </div>\n }\n </div>\n </a>\n }\n ", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: XSImageComponent, selector: "xs-image", inputs: ["config", "viewTransitionName", "src", "alt", "width", "height", "size", "rounded", "objectFit", "clickable", "item", "typeItem", "imageType", "fallbackSrc", "loading", "priority", "customClass", "generateAvatar"], outputs: ["onClick", "onLoad", "onError"] }, { kind: "component", type: XSIconComponent, selector: "xs-icon", inputs: ["icon", "size", "class"] }, { kind: "pipe", type: ImageApiPipe, name: "imageApi" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
17216
17174
|
}
|
|
17217
17175
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: XSItemTypeOrganizationComponent, decorators: [{
|
|
17218
17176
|
type: Component,
|
|
@@ -17222,7 +17180,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImpo
|
|
|
17222
17180
|
ImageApiPipe,
|
|
17223
17181
|
XSImageComponent,
|
|
17224
17182
|
XSIconComponent,
|
|
17225
|
-
], host: { 'xs-item-type-organization-host': '' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "\n @if (isLink()) {\n <a\n [class]=\"itemClasses\"\n (click)=\"handleClick($event)\"\n >\n <div class=\"flex items-center justify-between w-full\">\n <div class=\"flex items-center flex-1 min-w-0 gap-2\">\n
|
|
17183
|
+
], host: { 'xs-item-type-organization-host': '' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "\n @if (isLink()) {\n <a\n [class]=\"itemClasses\"\n (click)=\"handleClick($event)\"\n >\n <div class=\"flex items-center justify-between w-full\">\n <div class=\"flex items-center flex-1 min-w-0 gap-2\">\n <div\n class=\"flex-shrink-0 w-10 h-10 overflow-hidden rounded-xl\"\n [ngClass]=\"[\n size() === 'small' ? 'w-8 h-8' : 'w-10 h-10 mr-1',\n ]\"\n >\n @if (!getItemImageUrl()) {\n <xs-image\n [src]=\"item() | imageApi: 'organization' : 'small'\"\n size=\"full\"\n objectFit=\"cover\"\n ></xs-image>\n }\n @if (getItemImageUrl()) {\n <xs-image\n [src]=\"getItemImageUrl()\"\n size=\"full\"\n objectFit=\"cover\"\n ></xs-image>\n }\n @if (!getItemImageUrl()) {\n <div\n class=\"flex items-center justify-center w-full h-full rounded-xl bg-zinc-700\"\n >\n <xs-icon\n icon=\"building\"\n class=\"text-zinc-400\"\n ></xs-icon>\n </div>\n }\n </div>\n\n <div\n class=\"flex flex-col items-start justify-start w-full min-w-0\"\n >\n <h3\n class=\"w-full text-[16px] font-semibold text-white pr-2\"\n >\n <span class=\"block max-w-full pr-2 truncate\">\n {{ getItemTitle() }}\n </span>\n </h3>\n\n <div\n class=\"flex items-center min-w-0 gap-1 text-xs text-zinc-500\"\n >\n <span class=\"flex-1 truncate\"> Organizaci\u00F3n </span>\n @if (getItemOrgType()) {\n <span\n class=\"text-zinc-400\"\n >\n \u2022 {{ getItemOrgType() }}\n </span>\n }\n </div>\n </div>\n </div>\n\n @if (getItemValue() !== undefined && getItemUnit()) {\n <div\n class=\"flex items-center text-right mr-2\"\n >\n <span class=\"text-white font-semibold text-sm\">\n {{ getItemValue() }}\n </span>\n <span class=\"text-zinc-400 text-xs ml-1\">\n {{ getItemUnit() }}\n </span>\n </div>\n }\n\n @if (showChevron() || loading()) {\n <div\n class=\"flex items-center flex-shrink-0 h-full ml-2\"\n >\n @if (loading()) {\n <div\n class=\"w-4 h-4 border-2 border-white rounded-full border-t-transparent animate-spin\"\n aria-label=\"Cargando\"\n ></div>\n }\n @if (!loading()) {\n <xs-icon\n icon=\"chevron-right\"\n class=\"text-zinc-400\"\n [ngClass]=\"\n getItemValue() !== undefined && getItemUnit()\n ? 'ml-1'\n : 'ml-2'\n \"\n ></xs-icon>\n }\n </div>\n }\n </div>\n </a>\n }\n " }]
|
|
17226
17184
|
}] });
|
|
17227
17185
|
|
|
17228
17186
|
class XSItemTypeSiteComponent extends XSItemTypeBaseComponent {
|
|
@@ -17240,12 +17198,11 @@ class XSItemTypeSiteComponent extends XSItemTypeBaseComponent {
|
|
|
17240
17198
|
getShortAddress(address) {
|
|
17241
17199
|
if (!address || typeof address !== 'string')
|
|
17242
17200
|
return '';
|
|
17243
|
-
// Mostrar solo la primera parte de la dirección
|
|
17244
17201
|
const parts = address.split(',');
|
|
17245
17202
|
return parts[0].trim();
|
|
17246
17203
|
}
|
|
17247
17204
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: XSItemTypeSiteComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
17248
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: XSItemTypeSiteComponent, isStandalone: true, selector: "xs-item-type-site", host: { attributes: { "xs-item-type-site-host": "" } }, usesInheritance: true, ngImport: i0, template: "\n @if (isLink()) {\n <a\n [class]=\"itemClasses\"\n (click)=\"handleClick($event)\"\n >\n <div class=\"flex items-center justify-between w-full\">\n <div class=\"flex items-center flex-1 min-w-0 gap-2\">\n
|
|
17205
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: XSItemTypeSiteComponent, isStandalone: true, selector: "xs-item-type-site", host: { attributes: { "xs-item-type-site-host": "" } }, usesInheritance: true, ngImport: i0, template: "\n @if (isLink()) {\n <a\n [class]=\"itemClasses\"\n (click)=\"handleClick($event)\"\n >\n <div class=\"flex items-center justify-between w-full\">\n <div class=\"flex items-center flex-1 min-w-0 gap-2\">\n <div\n class=\"flex-shrink-0 w-10 h-10 overflow-hidden rounded-xl\"\n [ngClass]=\"[\n size() === 'small' ? 'w-8 h-8' : 'w-10 h-10 mr-1',\n ]\"\n >\n @if (!item()['imageUrl']) {\n <xs-image\n [src]=\"item() | imageApi: 'site' : 'small'\"\n size=\"full\"\n objectFit=\"cover\"\n ></xs-image>\n }\n @if (item()['imageUrl']) {\n <xs-image\n [src]=\"item()['imageUrl']\"\n size=\"full\"\n objectFit=\"cover\"\n ></xs-image>\n }\n @if (!item()['imageUrl']) {\n <div\n class=\"flex items-center justify-center w-full h-full rounded-xl bg-zinc-700\"\n >\n <xs-icon\n icon=\"map-marker-alt\"\n class=\"text-zinc-400\"\n ></xs-icon>\n </div>\n }\n </div>\n\n <div\n class=\"flex flex-col items-start justify-start w-full min-w-0\"\n >\n <h3\n class=\"w-full text-[16px] font-semibold text-white pr-2\"\n >\n <span class=\"block max-w-full pr-2 truncate\">\n {{ getItemTitle() }}\n </span>\n </h3>\n\n <div\n class=\"flex items-center min-w-0 gap-1 text-xs text-zinc-500\"\n >\n <span class=\"flex-1 truncate\"> Sitio </span>\n @if (item()['address']) {\n <span\n class=\"text-zinc-400\"\n >\n \u2022 {{ getShortAddress(getItemAddress()) }}\n </span>\n }\n </div>\n </div>\n </div>\n\n @if (item()['value'] !== undefined && item()['unit']) {\n <div\n class=\"flex items-center text-right mr-2\"\n >\n <span class=\"text-white font-semibold text-sm\">\n {{ item()['value'] }}\n </span>\n <span class=\"text-zinc-400 text-xs ml-1\">\n {{ item()['unit'] }}\n </span>\n </div>\n }\n\n @if (showChevron() || loading()) {\n <div\n class=\"flex items-center flex-shrink-0 h-full ml-2\"\n >\n @if (loading()) {\n <div\n class=\"w-4 h-4 border-2 border-white rounded-full border-t-transparent animate-spin\"\n aria-label=\"Cargando\"\n ></div>\n }\n @if (!loading()) {\n <xs-icon\n icon=\"chevron-right\"\n class=\"text-zinc-400\"\n [ngClass]=\"\n item()['value'] !== undefined && item()['unit']\n ? 'ml-1'\n : 'ml-2'\n \"\n ></xs-icon>\n }\n </div>\n }\n </div>\n </a>\n }\n ", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: XSImageComponent, selector: "xs-image", inputs: ["config", "viewTransitionName", "src", "alt", "width", "height", "size", "rounded", "objectFit", "clickable", "item", "typeItem", "imageType", "fallbackSrc", "loading", "priority", "customClass", "generateAvatar"], outputs: ["onClick", "onLoad", "onError"] }, { kind: "component", type: XSIconComponent, selector: "xs-icon", inputs: ["icon", "size", "class"] }, { kind: "pipe", type: ImageApiPipe, name: "imageApi" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
17249
17206
|
}
|
|
17250
17207
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: XSItemTypeSiteComponent, decorators: [{
|
|
17251
17208
|
type: Component,
|
|
@@ -17255,7 +17212,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImpo
|
|
|
17255
17212
|
ImageApiPipe,
|
|
17256
17213
|
XSImageComponent,
|
|
17257
17214
|
XSIconComponent,
|
|
17258
|
-
], host: { 'xs-item-type-site-host': '' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "\n @if (isLink()) {\n <a\n [class]=\"itemClasses\"\n (click)=\"handleClick($event)\"\n >\n <div class=\"flex items-center justify-between w-full\">\n <div class=\"flex items-center flex-1 min-w-0 gap-2\">\n
|
|
17215
|
+
], host: { 'xs-item-type-site-host': '' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "\n @if (isLink()) {\n <a\n [class]=\"itemClasses\"\n (click)=\"handleClick($event)\"\n >\n <div class=\"flex items-center justify-between w-full\">\n <div class=\"flex items-center flex-1 min-w-0 gap-2\">\n <div\n class=\"flex-shrink-0 w-10 h-10 overflow-hidden rounded-xl\"\n [ngClass]=\"[\n size() === 'small' ? 'w-8 h-8' : 'w-10 h-10 mr-1',\n ]\"\n >\n @if (!item()['imageUrl']) {\n <xs-image\n [src]=\"item() | imageApi: 'site' : 'small'\"\n size=\"full\"\n objectFit=\"cover\"\n ></xs-image>\n }\n @if (item()['imageUrl']) {\n <xs-image\n [src]=\"item()['imageUrl']\"\n size=\"full\"\n objectFit=\"cover\"\n ></xs-image>\n }\n @if (!item()['imageUrl']) {\n <div\n class=\"flex items-center justify-center w-full h-full rounded-xl bg-zinc-700\"\n >\n <xs-icon\n icon=\"map-marker-alt\"\n class=\"text-zinc-400\"\n ></xs-icon>\n </div>\n }\n </div>\n\n <div\n class=\"flex flex-col items-start justify-start w-full min-w-0\"\n >\n <h3\n class=\"w-full text-[16px] font-semibold text-white pr-2\"\n >\n <span class=\"block max-w-full pr-2 truncate\">\n {{ getItemTitle() }}\n </span>\n </h3>\n\n <div\n class=\"flex items-center min-w-0 gap-1 text-xs text-zinc-500\"\n >\n <span class=\"flex-1 truncate\"> Sitio </span>\n @if (item()['address']) {\n <span\n class=\"text-zinc-400\"\n >\n \u2022 {{ getShortAddress(getItemAddress()) }}\n </span>\n }\n </div>\n </div>\n </div>\n\n @if (item()['value'] !== undefined && item()['unit']) {\n <div\n class=\"flex items-center text-right mr-2\"\n >\n <span class=\"text-white font-semibold text-sm\">\n {{ item()['value'] }}\n </span>\n <span class=\"text-zinc-400 text-xs ml-1\">\n {{ item()['unit'] }}\n </span>\n </div>\n }\n\n @if (showChevron() || loading()) {\n <div\n class=\"flex items-center flex-shrink-0 h-full ml-2\"\n >\n @if (loading()) {\n <div\n class=\"w-4 h-4 border-2 border-white rounded-full border-t-transparent animate-spin\"\n aria-label=\"Cargando\"\n ></div>\n }\n @if (!loading()) {\n <xs-icon\n icon=\"chevron-right\"\n class=\"text-zinc-400\"\n [ngClass]=\"\n item()['value'] !== undefined && item()['unit']\n ? 'ml-1'\n : 'ml-2'\n \"\n ></xs-icon>\n }\n </div>\n }\n </div>\n </a>\n }\n " }]
|
|
17259
17216
|
}] });
|
|
17260
17217
|
|
|
17261
17218
|
class XSItemTypeTipComponent extends XSItemTypeBaseComponent {
|
|
@@ -17279,7 +17236,7 @@ class XSItemTypeTipComponent extends XSItemTypeBaseComponent {
|
|
|
17279
17236
|
return this.item()?.['unit'];
|
|
17280
17237
|
}
|
|
17281
17238
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: XSItemTypeTipComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
17282
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: XSItemTypeTipComponent, isStandalone: true, selector: "xs-item-type-tip", host: { attributes: { "xs-item-type-tip-host": "" } }, usesInheritance: true, ngImport: i0, template: "\n @if (isLink()) {\n <a\n [class]=\"itemClasses\"\n (click)=\"handleClick($event)\"\n >\n <div class=\"flex items-center justify-between w-full\">\n <div class=\"flex items-center flex-1 min-w-0 gap-2\">\n
|
|
17239
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: XSItemTypeTipComponent, isStandalone: true, selector: "xs-item-type-tip", host: { attributes: { "xs-item-type-tip-host": "" } }, usesInheritance: true, ngImport: i0, template: "\n @if (isLink()) {\n <a\n [class]=\"itemClasses\"\n (click)=\"handleClick($event)\"\n >\n <div class=\"flex items-center justify-between w-full\">\n <div class=\"flex items-center flex-1 min-w-0 gap-2\">\n <div\n class=\"flex-shrink-0 w-10 h-10 overflow-hidden rounded-xl\"\n [ngClass]=\"[\n size() === 'small' ? 'w-8 h-8' : 'w-10 h-10 mr-1',\n ]\"\n >\n @if (!getItemImageUrl()) {\n <xs-image\n [src]=\"item() | imageApi: 'tip' : 'small'\"\n size=\"full\"\n objectFit=\"cover\"\n ></xs-image>\n }\n @if (getItemImageUrl()) {\n <xs-image\n [src]=\"getItemImageUrl()\"\n size=\"full\"\n objectFit=\"cover\"\n ></xs-image>\n }\n @if (!getItemImageUrl()) {\n <div\n class=\"flex items-center justify-center w-full h-full rounded-xl bg-zinc-700\"\n >\n <xs-icon\n icon=\"lightbulb\"\n class=\"text-zinc-400\"\n ></xs-icon>\n </div>\n }\n </div>\n\n <div\n class=\"flex flex-col items-start justify-start w-full min-w-0\"\n >\n <h3\n class=\"w-full text-[16px] font-semibold text-white pr-2\"\n >\n <span class=\"block max-w-full pr-2 truncate\">\n {{ getItemTitle() }}\n </span>\n </h3>\n\n <div\n class=\"flex items-center min-w-0 gap-1 text-xs text-zinc-500\"\n >\n <span class=\"flex-1 truncate\"> Tip </span>\n @if (getItemCategory()) {\n <span\n class=\"text-zinc-400\"\n >\n \u2022 {{ getItemCategory() }}\n </span>\n }\n </div>\n </div>\n </div>\n\n @if (getItemValue() !== undefined && getItemUnit()) {\n <div\n class=\"flex items-center text-right mr-2\"\n >\n <span class=\"text-white font-semibold text-sm\">\n {{ getItemValue() }}\n </span>\n <span class=\"text-zinc-400 text-xs ml-1\">\n {{ getItemUnit() }}\n </span>\n </div>\n }\n\n @if (showChevron() || loading()) {\n <div\n class=\"flex items-center flex-shrink-0 h-full ml-2\"\n >\n @if (loading()) {\n <div\n class=\"w-4 h-4 border-2 border-white rounded-full border-t-transparent animate-spin\"\n aria-label=\"Cargando\"\n ></div>\n }\n @if (!loading()) {\n <xs-icon\n icon=\"chevron-right\"\n class=\"text-zinc-400\"\n [ngClass]=\"\n getItemValue() !== undefined && getItemUnit()\n ? 'ml-1'\n : 'ml-2'\n \"\n ></xs-icon>\n }\n </div>\n }\n </div>\n </a>\n }\n ", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: XSImageComponent, selector: "xs-image", inputs: ["config", "viewTransitionName", "src", "alt", "width", "height", "size", "rounded", "objectFit", "clickable", "item", "typeItem", "imageType", "fallbackSrc", "loading", "priority", "customClass", "generateAvatar"], outputs: ["onClick", "onLoad", "onError"] }, { kind: "component", type: XSIconComponent, selector: "xs-icon", inputs: ["icon", "size", "class"] }, { kind: "pipe", type: ImageApiPipe, name: "imageApi" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
17283
17240
|
}
|
|
17284
17241
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: XSItemTypeTipComponent, decorators: [{
|
|
17285
17242
|
type: Component,
|
|
@@ -17289,7 +17246,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImpo
|
|
|
17289
17246
|
ImageApiPipe,
|
|
17290
17247
|
XSImageComponent,
|
|
17291
17248
|
XSIconComponent,
|
|
17292
|
-
], host: { 'xs-item-type-tip-host': '' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "\n @if (isLink()) {\n <a\n [class]=\"itemClasses\"\n (click)=\"handleClick($event)\"\n >\n <div class=\"flex items-center justify-between w-full\">\n <div class=\"flex items-center flex-1 min-w-0 gap-2\">\n
|
|
17249
|
+
], host: { 'xs-item-type-tip-host': '' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "\n @if (isLink()) {\n <a\n [class]=\"itemClasses\"\n (click)=\"handleClick($event)\"\n >\n <div class=\"flex items-center justify-between w-full\">\n <div class=\"flex items-center flex-1 min-w-0 gap-2\">\n <div\n class=\"flex-shrink-0 w-10 h-10 overflow-hidden rounded-xl\"\n [ngClass]=\"[\n size() === 'small' ? 'w-8 h-8' : 'w-10 h-10 mr-1',\n ]\"\n >\n @if (!getItemImageUrl()) {\n <xs-image\n [src]=\"item() | imageApi: 'tip' : 'small'\"\n size=\"full\"\n objectFit=\"cover\"\n ></xs-image>\n }\n @if (getItemImageUrl()) {\n <xs-image\n [src]=\"getItemImageUrl()\"\n size=\"full\"\n objectFit=\"cover\"\n ></xs-image>\n }\n @if (!getItemImageUrl()) {\n <div\n class=\"flex items-center justify-center w-full h-full rounded-xl bg-zinc-700\"\n >\n <xs-icon\n icon=\"lightbulb\"\n class=\"text-zinc-400\"\n ></xs-icon>\n </div>\n }\n </div>\n\n <div\n class=\"flex flex-col items-start justify-start w-full min-w-0\"\n >\n <h3\n class=\"w-full text-[16px] font-semibold text-white pr-2\"\n >\n <span class=\"block max-w-full pr-2 truncate\">\n {{ getItemTitle() }}\n </span>\n </h3>\n\n <div\n class=\"flex items-center min-w-0 gap-1 text-xs text-zinc-500\"\n >\n <span class=\"flex-1 truncate\"> Tip </span>\n @if (getItemCategory()) {\n <span\n class=\"text-zinc-400\"\n >\n \u2022 {{ getItemCategory() }}\n </span>\n }\n </div>\n </div>\n </div>\n\n @if (getItemValue() !== undefined && getItemUnit()) {\n <div\n class=\"flex items-center text-right mr-2\"\n >\n <span class=\"text-white font-semibold text-sm\">\n {{ getItemValue() }}\n </span>\n <span class=\"text-zinc-400 text-xs ml-1\">\n {{ getItemUnit() }}\n </span>\n </div>\n }\n\n @if (showChevron() || loading()) {\n <div\n class=\"flex items-center flex-shrink-0 h-full ml-2\"\n >\n @if (loading()) {\n <div\n class=\"w-4 h-4 border-2 border-white rounded-full border-t-transparent animate-spin\"\n aria-label=\"Cargando\"\n ></div>\n }\n @if (!loading()) {\n <xs-icon\n icon=\"chevron-right\"\n class=\"text-zinc-400\"\n [ngClass]=\"\n getItemValue() !== undefined && getItemUnit()\n ? 'ml-1'\n : 'ml-2'\n \"\n ></xs-icon>\n }\n </div>\n }\n </div>\n </a>\n }\n " }]
|
|
17293
17250
|
}] });
|
|
17294
17251
|
|
|
17295
17252
|
class XSItemTypeComponent {
|
|
@@ -18009,7 +17966,6 @@ class XSTableItemsComponent {
|
|
|
18009
17966
|
ngOnDestroy() {
|
|
18010
17967
|
this.langSubscription.unsubscribe();
|
|
18011
17968
|
}
|
|
18012
|
-
// --- LÓGICA DE VALIDACIÓN ---
|
|
18013
17969
|
isString(val) {
|
|
18014
17970
|
return typeof val === 'string';
|
|
18015
17971
|
}
|
|
@@ -18022,7 +17978,6 @@ class XSTableItemsComponent {
|
|
|
18022
17978
|
isNotArray(value) {
|
|
18023
17979
|
return !Array.isArray(value);
|
|
18024
17980
|
}
|
|
18025
|
-
// --- LÓGICA DE IMAGEN Y DISPLAY ---
|
|
18026
17981
|
get typeForImage() {
|
|
18027
17982
|
if (this.header().key === 'name' && this.item()?.['slides'])
|
|
18028
17983
|
return 'tip';
|
|
@@ -18131,7 +18086,6 @@ class XSTableItemsComponent {
|
|
|
18131
18086
|
}
|
|
18132
18087
|
return type;
|
|
18133
18088
|
}
|
|
18134
|
-
// --- LÓGICA DE FECHAS Y TIEMPO ---
|
|
18135
18089
|
isDateInRangeF(date, minDays, maxDays) {
|
|
18136
18090
|
if (!date)
|
|
18137
18091
|
return false;
|
|
@@ -18192,7 +18146,6 @@ class XSTableItemsComponent {
|
|
|
18192
18146
|
return 0;
|
|
18193
18147
|
}
|
|
18194
18148
|
}
|
|
18195
|
-
// --- LÓGICA DE ESTADOS Y CLASES ---
|
|
18196
18149
|
getStateClasses(state) {
|
|
18197
18150
|
const base = 'inline-flex items-center gap-2 px-3 py-1.5 text-sm font-semibold rounded-xl';
|
|
18198
18151
|
switch (state?.toLowerCase()) {
|
|
@@ -18248,7 +18201,6 @@ class XSTableItemsComponent {
|
|
|
18248
18201
|
getStateFullText = (state) => state
|
|
18249
18202
|
? state.toLowerCase().replaceAll('_', ' ')
|
|
18250
18203
|
: 'desconocido';
|
|
18251
|
-
// --- LÓGICA DE USUARIOS Y ROLES ---
|
|
18252
18204
|
getRoleIcon(role) {
|
|
18253
18205
|
const roles = {
|
|
18254
18206
|
admin: 'crown',
|
|
@@ -18291,7 +18243,6 @@ class XSTableItemsComponent {
|
|
|
18291
18243
|
});
|
|
18292
18244
|
return buttons;
|
|
18293
18245
|
}
|
|
18294
|
-
// --- LÓGICA DE MÉTRICAS ---
|
|
18295
18246
|
sumVisitsf(item) {
|
|
18296
18247
|
if (!item)
|
|
18297
18248
|
return 0;
|
|
@@ -18319,7 +18270,6 @@ class XSTableItemsComponent {
|
|
|
18319
18270
|
return 0;
|
|
18320
18271
|
return ((i.maxUses - (i.usedCount ?? 0)) / i.maxUses) * 100;
|
|
18321
18272
|
}
|
|
18322
|
-
// --- OTROS AYUDANTES ---
|
|
18323
18273
|
getUrlStatsPage = (item) => {
|
|
18324
18274
|
const i = item;
|
|
18325
18275
|
return i.path ? `https://xsmusic.es${i.path}` : '';
|
|
@@ -18449,11 +18399,11 @@ class XSTableCheckboxComponent {
|
|
|
18449
18399
|
this.checkedChange.emit(!this.checked());
|
|
18450
18400
|
}
|
|
18451
18401
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: XSTableCheckboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
18452
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.
|
|
18402
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: XSTableCheckboxComponent, isStandalone: true, selector: "xs-table-checkbox", inputs: { checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { checkedChange: "checkedChange" }, ngImport: i0, template: " <label\n class=\"relative flex items-center justify-center cursor-pointer\"\n >\n <input\n type=\"checkbox\"\n class=\"sr-only peer\"\n [checked]=\"checked()\"\n (change)=\"onToggle()\"\n [attr.aria-label]=\"checked() ? 'Deseleccionar fila' : 'Seleccionar fila'\"\n />\n <div\n class=\"flex items-center justify-center w-5 h-5 border-2 border-zinc-800 rounded-md peer-checked:bg-zinc-100 peer-checked:border-zinc-100 transition-all duration-300\"\n [class.border-zinc-700]=\"checked()\"\n >\n @if (checked()) {\n <xs-icon\n icon=\"check\"\n class=\"text-zinc-900 text-[10px]\"\n />\n }\n </div>\n </label>\n", dependencies: [{ kind: "component", type: XSIconComponent, selector: "xs-icon", inputs: ["icon", "size", "class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
18453
18403
|
}
|
|
18454
18404
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: XSTableCheckboxComponent, decorators: [{
|
|
18455
18405
|
type: Component,
|
|
18456
|
-
args: [{ selector: 'xs-table-checkbox', standalone: true, imports: [XSIconComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: " <label\n class=\"relative flex items-center justify-center cursor-pointer\"\n >\n <input\n type=\"checkbox\"\n class=\"sr-only peer\"\n [checked]=\"checked()\"\n (change)=\"onToggle()\"\n [attr.aria-label]=\"checked() ? 'Deseleccionar fila' : 'Seleccionar fila'\"\n />\n <div\n class=\"w-5 h-5 border-2 border-zinc-800 rounded-md peer-checked:bg-zinc-100 peer-checked:border-zinc-100 transition-all duration-300\"\n [class.border-zinc-700]=\"checked()\"\n >\n <xs-icon\n
|
|
18406
|
+
args: [{ selector: 'xs-table-checkbox', standalone: true, imports: [XSIconComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: " <label\n class=\"relative flex items-center justify-center cursor-pointer\"\n >\n <input\n type=\"checkbox\"\n class=\"sr-only peer\"\n [checked]=\"checked()\"\n (change)=\"onToggle()\"\n [attr.aria-label]=\"checked() ? 'Deseleccionar fila' : 'Seleccionar fila'\"\n />\n <div\n class=\"flex items-center justify-center w-5 h-5 border-2 border-zinc-800 rounded-md peer-checked:bg-zinc-100 peer-checked:border-zinc-100 transition-all duration-300\"\n [class.border-zinc-700]=\"checked()\"\n >\n @if (checked()) {\n <xs-icon\n icon=\"check\"\n class=\"text-zinc-900 text-[10px]\"\n />\n }\n </div>\n </label>\n" }]
|
|
18457
18407
|
}], propDecorators: { checked: [{ type: i0.Input, args: [{ isSignal: true, alias: "checked", required: false }] }], checkedChange: [{ type: i0.Output, args: ["checkedChange"] }] } });
|
|
18458
18408
|
|
|
18459
18409
|
function getVal(item, key) {
|
|
@@ -18552,7 +18502,6 @@ class XSTableComponent {
|
|
|
18552
18502
|
langVersion = signal(0, ...(ngDevMode ? [{ debugName: "langVersion" }] : []));
|
|
18553
18503
|
platformId = inject(PLATFORM_ID);
|
|
18554
18504
|
uid = `xs-table-jump-${Math.random().toString(36).slice(2, 9)}`;
|
|
18555
|
-
// -- Inputs --
|
|
18556
18505
|
headers = input([], ...(ngDevMode ? [{ debugName: "headers" }] : []));
|
|
18557
18506
|
items = input([], ...(ngDevMode ? [{ debugName: "items" }] : []));
|
|
18558
18507
|
loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
|
|
@@ -18588,21 +18537,17 @@ class XSTableComponent {
|
|
|
18588
18537
|
idKey = input('_id', ...(ngDevMode ? [{ debugName: "idKey" }] : []));
|
|
18589
18538
|
page = model(1, ...(ngDevMode ? [{ debugName: "page" }] : []));
|
|
18590
18539
|
pageSize = model(25, ...(ngDevMode ? [{ debugName: "pageSize" }] : []));
|
|
18591
|
-
// -- Sticky mode --
|
|
18592
18540
|
sticky = input(false, ...(ngDevMode ? [{ debugName: "sticky" }] : []));
|
|
18593
18541
|
containerHeight = input('100%', ...(ngDevMode ? [{ debugName: "containerHeight" }] : []));
|
|
18594
|
-
// -- Outputs --
|
|
18595
18542
|
rowClick = output();
|
|
18596
18543
|
selectionChange = output();
|
|
18597
18544
|
selectedAction = output();
|
|
18598
18545
|
sortChange = output();
|
|
18599
18546
|
searchQuerySubmit = output();
|
|
18600
|
-
// -- Content children --
|
|
18601
18547
|
cellTemplate = contentChild('xsCell', ...(ngDevMode ? [{ debugName: "cellTemplate" }] : []));
|
|
18602
18548
|
expandedContent = contentChild('xsExpandedRow', ...(ngDevMode ? [{ debugName: "expandedContent" }] : []));
|
|
18603
18549
|
toolbarExtra = contentChild('toolbarExtra', ...(ngDevMode ? [{ debugName: "toolbarExtra" }] : []));
|
|
18604
18550
|
columnTemplates = input({}, ...(ngDevMode ? [{ debugName: "columnTemplates" }] : []));
|
|
18605
|
-
// -- State signals --
|
|
18606
18551
|
selectedSet = signal(new Set(), ...(ngDevMode ? [{ debugName: "selectedSet" }] : []));
|
|
18607
18552
|
expandedItemId = signal(null, ...(ngDevMode ? [{ debugName: "expandedItemId" }] : []));
|
|
18608
18553
|
sortState = signal({
|
|
@@ -18617,7 +18562,6 @@ class XSTableComponent {
|
|
|
18617
18562
|
searchTimer;
|
|
18618
18563
|
saveTimeoutId;
|
|
18619
18564
|
resizeData = null;
|
|
18620
|
-
// -- Computeds --
|
|
18621
18565
|
showSelection = computed(() => this.selectable() ||
|
|
18622
18566
|
(this.selectedButtons()?.length ?? 0) > 0, ...(ngDevMode ? [{ debugName: "showSelection" }] : []));
|
|
18623
18567
|
hasActions = computed(() => (this.actionButtons()?.length ?? 0) > 0 ||
|
|
@@ -18725,7 +18669,6 @@ class XSTableComponent {
|
|
|
18725
18669
|
this.copyable() ||
|
|
18726
18670
|
this.toolbarButtons().length > 0 ||
|
|
18727
18671
|
!!this.toolbarExtra(), ...(ngDevMode ? [{ debugName: "showToolbar" }] : []));
|
|
18728
|
-
// -- Lifecycle --
|
|
18729
18672
|
constructor() {
|
|
18730
18673
|
if (typeof this.translateService?.registerTranslations ===
|
|
18731
18674
|
'function') {
|
|
@@ -18754,7 +18697,6 @@ class XSTableComponent {
|
|
|
18754
18697
|
clearTimeout(this.saveTimeoutId);
|
|
18755
18698
|
});
|
|
18756
18699
|
}
|
|
18757
|
-
// -- Search --
|
|
18758
18700
|
onSearchInput(value) {
|
|
18759
18701
|
clearTimeout(this.searchTimer);
|
|
18760
18702
|
this.searchTimer = setTimeout(() => {
|
|
@@ -18774,7 +18716,6 @@ class XSTableComponent {
|
|
|
18774
18716
|
this.searchQuery.set('');
|
|
18775
18717
|
this.searchQuerySubmit.emit('');
|
|
18776
18718
|
}
|
|
18777
|
-
// -- Persistence --
|
|
18778
18719
|
loadState() {
|
|
18779
18720
|
const k = this.storageKey();
|
|
18780
18721
|
if (!k)
|
|
@@ -18817,7 +18758,6 @@ class XSTableComponent {
|
|
|
18817
18758
|
/* ignore */
|
|
18818
18759
|
}
|
|
18819
18760
|
}
|
|
18820
|
-
// -- Pagination --
|
|
18821
18761
|
jumpPageTimeoutId;
|
|
18822
18762
|
onJumpPageInput(event) {
|
|
18823
18763
|
const target = event.target;
|
|
@@ -18841,7 +18781,6 @@ class XSTableComponent {
|
|
|
18841
18781
|
this.pageSize.set(Number(value));
|
|
18842
18782
|
this.page.set(1);
|
|
18843
18783
|
}
|
|
18844
|
-
// -- Sort --
|
|
18845
18784
|
toggleSort(header) {
|
|
18846
18785
|
if (!header.action)
|
|
18847
18786
|
return;
|
|
@@ -18858,7 +18797,6 @@ class XSTableComponent {
|
|
|
18858
18797
|
});
|
|
18859
18798
|
this.scheduleSave();
|
|
18860
18799
|
}
|
|
18861
|
-
// -- Selection --
|
|
18862
18800
|
onToggleAll(checked) {
|
|
18863
18801
|
this.selectedSet.update((set) => {
|
|
18864
18802
|
const newSet = new Set(set);
|
|
@@ -18881,7 +18819,6 @@ class XSTableComponent {
|
|
|
18881
18819
|
return newSet;
|
|
18882
18820
|
});
|
|
18883
18821
|
}
|
|
18884
|
-
// -- Row click --
|
|
18885
18822
|
onRowClick(item) {
|
|
18886
18823
|
if (this.expandable()) {
|
|
18887
18824
|
const id = getItemId(item, this.idKey());
|
|
@@ -18890,7 +18827,6 @@ class XSTableComponent {
|
|
|
18890
18827
|
if (this.hasActions())
|
|
18891
18828
|
this.rowClick.emit(item);
|
|
18892
18829
|
}
|
|
18893
|
-
// -- Three dots --
|
|
18894
18830
|
onThreeDotsClick() {
|
|
18895
18831
|
const items = this.selectedButtons().map((btn) => ({
|
|
18896
18832
|
name: btn.name || btn.action,
|
|
@@ -18906,7 +18842,6 @@ class XSTableComponent {
|
|
|
18906
18842
|
}
|
|
18907
18843
|
});
|
|
18908
18844
|
}
|
|
18909
|
-
// -- Export --
|
|
18910
18845
|
async onCopyVisible() {
|
|
18911
18846
|
const h = this.processedHeaders();
|
|
18912
18847
|
const rows = this.renderedItems();
|
|
@@ -18941,7 +18876,6 @@ class XSTableComponent {
|
|
|
18941
18876
|
a.click();
|
|
18942
18877
|
URL.revokeObjectURL(url);
|
|
18943
18878
|
}
|
|
18944
|
-
// -- Cell context --
|
|
18945
18879
|
getCellContext(item, header, rowIndex) {
|
|
18946
18880
|
return { $implicit: item, header, rowIndex };
|
|
18947
18881
|
}
|
|
@@ -18964,7 +18898,6 @@ class XSTableComponent {
|
|
|
18964
18898
|
return cellString(item, header, this.idKey());
|
|
18965
18899
|
}
|
|
18966
18900
|
trackById = (index, item) => getItemId(item, this.idKey()) || index;
|
|
18967
|
-
// -- Column resize --
|
|
18968
18901
|
onResizeStart(key, event) {
|
|
18969
18902
|
event.preventDefault();
|
|
18970
18903
|
const target = event.currentTarget;
|
|
@@ -18999,7 +18932,6 @@ class XSTableComponent {
|
|
|
18999
18932
|
[this.resizeData.key]: newWidth,
|
|
19000
18933
|
}));
|
|
19001
18934
|
}
|
|
19002
|
-
// -- Column toggle --
|
|
19003
18935
|
toggleColumn(key) {
|
|
19004
18936
|
this.visibleColumnKeys.update((current) => {
|
|
19005
18937
|
const s = new Set(current ?? this.headers().map((h) => h.key));
|
|
@@ -19011,7 +18943,6 @@ class XSTableComponent {
|
|
|
19011
18943
|
const v = this.visibleColumnKeys();
|
|
19012
18944
|
return v ? v.has(key) : true;
|
|
19013
18945
|
}
|
|
19014
|
-
// -- Column reorder --
|
|
19015
18946
|
onHeaderDragStart(key, event) {
|
|
19016
18947
|
event.dataTransfer?.setData('text/plain', key);
|
|
19017
18948
|
}
|
|
@@ -20800,9 +20731,7 @@ class XSMapLibreService {
|
|
|
20800
20731
|
}
|
|
20801
20732
|
this.loadedImages.add(url);
|
|
20802
20733
|
}
|
|
20803
|
-
catch {
|
|
20804
|
-
// ignore
|
|
20805
|
-
}
|
|
20734
|
+
catch { }
|
|
20806
20735
|
}));
|
|
20807
20736
|
await new Promise((r) => setTimeout(r, 50));
|
|
20808
20737
|
}
|
|
@@ -23195,28 +23124,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImpo
|
|
|
23195
23124
|
args: [{ selector: 'xs-feedback', host: { 'xs-feedback-host': '' }, imports: [CommonModule, FormsModule, XSIconComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"xs-feedback-container\">\n @if (state() === 'initial') {\n <div class=\"xs-feedback-row\">\n <span class=\"xs-feedback-question\">{{ effectiveQuestion() }}</span>\n <div class=\"xs-feedback-actions\">\n <button\n class=\"xs-feedback-btn xs-feedback-btn--positive\"\n (click)=\"onVote('positive')\"\n aria-label=\"Positivo\"\n type=\"button\">\n <xs-icon icon=\"thumbs-up\" size=\"sm\"></xs-icon>\n </button>\n <button\n class=\"xs-feedback-btn xs-feedback-btn--negative\"\n (click)=\"onVote('negative')\"\n aria-label=\"Negativo\"\n type=\"button\">\n <xs-icon icon=\"thumbs-down\" size=\"sm\"></xs-icon>\n </button>\n </div>\n </div>\n }\n\n @if (state() === 'positive') {\n <div class=\"xs-feedback-row\">\n <span class=\"xs-feedback-thanks\">Gracias por tu feedback</span>\n @if (effectiveAllowComment()) {\n <div class=\"xs-feedback-comment-row\">\n <input\n class=\"xs-feedback-input\"\n type=\"text\"\n placeholder=\"Comentario opcional...\"\n [ngModel]=\"commentText()\"\n (ngModelChange)=\"commentText.set($event)\"\n (keyup.enter)=\"onSubmitComment()\"\n />\n <button\n class=\"xs-feedback-submit\"\n (click)=\"onSubmitComment()\"\n type=\"button\">\n Enviar\n </button>\n <button\n class=\"xs-feedback-skip\"\n (click)=\"onSkipComment()\"\n type=\"button\">\n Omitir\n </button>\n </div>\n }\n </div>\n }\n\n @if (state() === 'negative') {\n <div class=\"xs-feedback-col\">\n <span class=\"xs-feedback-thanks\">Gracias por tu feedback</span>\n @if (effectiveShowNegativeOptions() && effectiveNegativeOptions().length > 0) {\n <span class=\"xs-feedback-subtitle\">\u00BFQu\u00E9 ha fallado?</span>\n <div class=\"xs-feedback-options\">\n @for (option of effectiveNegativeOptions(); track option) {\n <button\n class=\"xs-feedback-option\"\n [class.xs-feedback-option--selected]=\"selectedReason() === option\"\n (click)=\"onNegativeReasonSelect(option)\"\n type=\"button\">\n {{ option }}\n </button>\n }\n </div>\n }\n @if (effectiveAllowComment()) {\n <div class=\"xs-feedback-comment-row\">\n <input\n class=\"xs-feedback-input\"\n type=\"text\"\n placeholder=\"Comentario opcional...\"\n [ngModel]=\"commentText()\"\n (ngModelChange)=\"commentText.set($event)\"\n (keyup.enter)=\"onSubmitComment()\"\n />\n <button\n class=\"xs-feedback-submit\"\n (click)=\"onSubmitComment()\"\n type=\"button\">\n Enviar\n </button>\n <button\n class=\"xs-feedback-skip\"\n (click)=\"onSkipComment()\"\n type=\"button\">\n Omitir\n </button>\n </div>\n }\n </div>\n }\n\n @if (state() === 'submitted') {\n <div class=\"xs-feedback-row\">\n <span class=\"xs-feedback-thanks\">Gracias por tu feedback</span>\n </div>\n }\n</div>\n", styles: [":host{display:block;width:100%}.xs-feedback-container{width:100%;border-radius:.75rem;background-color:#18181b80;padding:.75rem 1rem}.xs-feedback-row{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.xs-feedback-col{display:flex;flex-direction:column;gap:.5rem}.xs-feedback-question{font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(161 161 170 / var(--tw-text-opacity, 1))}.xs-feedback-thanks{font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(113 113 122 / var(--tw-text-opacity, 1))}.xs-feedback-subtitle{font-size:.75rem;line-height:1rem;--tw-text-opacity: 1;color:rgb(113 113 122 / var(--tw-text-opacity, 1))}.xs-feedback-actions{display:flex;flex-shrink:0;align-items:center;gap:.25rem}.xs-feedback-btn{display:flex;height:1.75rem;width:1.75rem;cursor:pointer;align-items:center;justify-content:center;border-radius:.375rem;--tw-text-opacity: 1;color:rgb(113 113 122 / var(--tw-text-opacity, 1));transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}.xs-feedback-btn:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.xs-feedback-btn--positive:hover{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.xs-feedback-btn--negative:hover{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.xs-feedback-options{display:flex;flex-wrap:wrap;gap:.5rem}.xs-feedback-option{cursor:pointer;border-radius:.5rem;border-width:1px;border-color:#3f3f4680;background-color:transparent;padding:.375rem .75rem;font-size:.75rem;line-height:1rem;--tw-text-opacity: 1;color:rgb(161 161 170 / var(--tw-text-opacity, 1));transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}.xs-feedback-option:hover{--tw-border-opacity: 1;border-color:rgb(113 113 122 / var(--tw-border-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.xs-feedback-option--selected{--tw-border-opacity: 1;border-color:rgb(113 113 122 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(39 39 42 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.xs-feedback-comment-row{margin-top:.25rem;display:flex;align-items:center;gap:.5rem}.xs-feedback-input{flex:1 1 0%;border-radius:.5rem;border-width:1px;border-color:#3f3f4680;background-color:transparent;padding:.375rem .75rem;font-size:.75rem;line-height:1rem;--tw-text-opacity: 1;color:rgb(212 212 216 / var(--tw-text-opacity, 1))}.xs-feedback-input::placeholder{--tw-placeholder-opacity: 1;color:rgb(82 82 91 / var(--tw-placeholder-opacity, 1))}.xs-feedback-input{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.xs-feedback-input:focus{--tw-border-opacity: 1;border-color:rgb(113 113 122 / var(--tw-border-opacity, 1));outline:2px solid transparent;outline-offset:2px}.xs-feedback-submit{cursor:pointer;border-radius:.5rem;--tw-bg-opacity: 1;background-color:rgb(63 63 70 / var(--tw-bg-opacity, 1));padding:.375rem .75rem;font-size:.75rem;line-height:1rem;--tw-text-opacity: 1;color:rgb(212 212 216 / var(--tw-text-opacity, 1));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.xs-feedback-submit:hover{--tw-bg-opacity: 1;background-color:rgb(82 82 91 / var(--tw-bg-opacity, 1))}.xs-feedback-skip{cursor:pointer;border-radius:.5rem;padding:.375rem .75rem;font-size:.75rem;line-height:1rem;--tw-text-opacity: 1;color:rgb(113 113 122 / var(--tw-text-opacity, 1));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.xs-feedback-skip:hover{--tw-text-opacity: 1;color:rgb(212 212 216 / var(--tw-text-opacity, 1))}\n"] }]
|
|
23196
23125
|
}], propDecorators: { survey: [{ type: i0.Input, args: [{ isSignal: true, alias: "survey", required: true }] }], question: [{ type: i0.Input, args: [{ isSignal: true, alias: "question", required: false }] }], allowComment: [{ type: i0.Input, args: [{ isSignal: true, alias: "allowComment", required: false }] }], showNegativeOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "showNegativeOptions", required: false }] }], negativeOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "negativeOptions", required: false }] }], voteSubmitted: [{ type: i0.Output, args: ["voteSubmitted"] }], commentSubmitted: [{ type: i0.Output, args: ["commentSubmitted"] }], negativeReasonSubmitted: [{ type: i0.Output, args: ["negativeReasonSubmitted"] }], dismissed: [{ type: i0.Output, args: ["dismissed"] }] } });
|
|
23197
23126
|
|
|
23198
|
-
// Core UI primitives — always bundled
|
|
23199
|
-
|
|
23200
23127
|
// Form components — lazy-loadable (brings @ngx-formly)
|
|
23201
23128
|
|
|
23202
|
-
// Layout components — section titles, tabs, breadcrumbs, scroll
|
|
23203
|
-
|
|
23204
|
-
// Data display — tables, lists, cards, filters, info blocks
|
|
23205
|
-
|
|
23206
23129
|
// Chart components — lazy-loadable (brings chart.js ~220KB)
|
|
23207
23130
|
|
|
23208
|
-
// Profile components — used in artist/event/site detail pages
|
|
23209
|
-
|
|
23210
|
-
// Alert components — notification system
|
|
23211
|
-
|
|
23212
|
-
// Auth components — login, register, 2FA
|
|
23213
|
-
|
|
23214
23131
|
// Map components — lazy-loadable (brings maplibre ~1MB)
|
|
23215
23132
|
|
|
23216
|
-
/*
|
|
23217
|
-
* Public API Surface of xs-ui
|
|
23218
|
-
*/
|
|
23219
|
-
|
|
23220
23133
|
const LIB_STORIES = [
|
|
23221
23134
|
() => import('./xsmusices-ui-xs-action-sheet.xsstory-CBpZBlfx.mjs').then((m) => m.story),
|
|
23222
23135
|
() => import('./xsmusices-ui-xs-block.xsstory-GXV6UFJo.mjs').then((m) => m.story),
|
|
@@ -23228,14 +23141,14 @@ const LIB_STORIES = [
|
|
|
23228
23141
|
() => import('./xsmusices-ui-xs-icon.xsstory-asFaHy5H.mjs').then((m) => m.story),
|
|
23229
23142
|
() => import('./xsmusices-ui-xs-image.xsstory-BaeUg3Zp.mjs').then((m) => m.story),
|
|
23230
23143
|
() => import('./xsmusices-ui-xs-modal.xsstory-B96CYHF0.mjs').then((m) => m.story),
|
|
23231
|
-
() => import('./xsmusices-ui-xs-navbar.xsstory-
|
|
23144
|
+
() => import('./xsmusices-ui-xs-navbar.xsstory-DZrnLMId.mjs').then((m) => m.story),
|
|
23232
23145
|
() => import('./xsmusices-ui-xs-navbar-sidebar.xsstory-DHmPSARx.mjs').then((m) => m.story),
|
|
23233
23146
|
() => import('./xsmusices-ui-stats-card.xsstory-PWTUDysc.mjs').then((m) => m.story),
|
|
23234
23147
|
() => import('./xsmusices-ui-xs-toast.xsstory-BBhGu-j4.mjs').then((m) => m.story),
|
|
23235
23148
|
() => import('./xsmusices-ui-xs-alert.xsstory-CXTRbHHS.mjs').then((m) => m.story),
|
|
23236
23149
|
() => import('./xsmusices-ui-xs-alert-group.xsstory-HMGGLHfv.mjs').then((m) => m.story),
|
|
23237
23150
|
() => import('./xsmusices-ui-xs-auth.xsstory-DxO8iDpd.mjs').then((m) => m.story),
|
|
23238
|
-
() => import('./xsmusices-ui-xs-badge.xsstory-
|
|
23151
|
+
() => import('./xsmusices-ui-xs-badge.xsstory-B1QXLQ4H.mjs').then((m) => m.story),
|
|
23239
23152
|
() => import('./xsmusices-ui-xs-breadcrumbs.xsstory-CNyBeURd.mjs').then((m) => m.story),
|
|
23240
23153
|
() => import('./xsmusices-ui-xs-date-mini.xsstory-DXog7Yhg.mjs').then((m) => m.story),
|
|
23241
23154
|
() => import('./xsmusices-ui-xs-filter-panel.xsstory-DbvxGppo.mjs').then((m) => m.story),
|
|
@@ -23243,11 +23156,11 @@ const LIB_STORIES = [
|
|
|
23243
23156
|
() => import('./xsmusices-ui-xs-info-blocks.xsstory-BHtaC7U6.mjs').then((m) => m.story),
|
|
23244
23157
|
() => import('./xsmusices-ui-xs-item-card.xsstory-EGJ6itkx.mjs').then((m) => m.story),
|
|
23245
23158
|
() => import('./xsmusices-ui-xs-item-action.xsstory-839UkJyC.mjs').then((m) => m.story),
|
|
23246
|
-
() => import('./xsmusices-ui-xs-item-compact.xsstory-
|
|
23247
|
-
() => import('./xsmusices-ui-xs-item-type.xsstory-
|
|
23248
|
-
() => import('./xsmusices-ui-xs-items-slider.xsstory-
|
|
23249
|
-
() => import('./xsmusices-ui-xs-list.xsstory-
|
|
23250
|
-
() => import('./xsmusices-ui-xs-map.xsstory-
|
|
23159
|
+
() => import('./xsmusices-ui-xs-item-compact.xsstory-LhApuPL7.mjs').then((m) => m.story),
|
|
23160
|
+
() => import('./xsmusices-ui-xs-item-type.xsstory-DUeCnW0R.mjs').then((m) => m.story),
|
|
23161
|
+
() => import('./xsmusices-ui-xs-items-slider.xsstory-Dt0bXZI_.mjs').then((m) => m.story),
|
|
23162
|
+
() => import('./xsmusices-ui-xs-list.xsstory-lElGfvcY.mjs').then((m) => m.story),
|
|
23163
|
+
() => import('./xsmusices-ui-xs-map.xsstory-C__bUaLQ.mjs').then((m) => m.story),
|
|
23251
23164
|
() => import('./xsmusices-ui-xs-maplibre.xsstory-u_NroLqJ.mjs').then((m) => m.story),
|
|
23252
23165
|
() => import('./xsmusices-ui-xs-profile-comments.xsstory-CHpCDxLe.mjs').then((m) => m.story),
|
|
23253
23166
|
() => import('./xsmusices-ui-xs-profile-current-event.xsstory-BtRq4wE4.mjs').then((m) => m.story),
|
|
@@ -23261,7 +23174,7 @@ const LIB_STORIES = [
|
|
|
23261
23174
|
() => import('./xsmusices-ui-xs-profile-verified.xsstory-HtbUlJFX.mjs').then((m) => m.story),
|
|
23262
23175
|
() => import('./xsmusices-ui-xs-skeleton-for-slider.xsstory-k-uutKIV.mjs').then((m) => m.story),
|
|
23263
23176
|
() => import('./xsmusices-ui-xs-table-items.xsstory-vR5x6wZe.mjs').then((m) => m.story),
|
|
23264
|
-
() => import('./xsmusices-ui-xs-table.xsstory-
|
|
23177
|
+
() => import('./xsmusices-ui-xs-table.xsstory-s13JV3k9.mjs').then((m) => m.story),
|
|
23265
23178
|
() => import('./xsmusices-ui-xs-title-collapse.xsstory-COqb1jdP.mjs').then((m) => m.story),
|
|
23266
23179
|
() => Promise.resolve().then(function () { return xsSpinner_xsstory; }).then((m) => m.story),
|
|
23267
23180
|
() => import('./xsmusices-ui-country-flag.xsstory-BPTu5b4i.mjs').then((m) => m.story),
|
|
@@ -23417,10 +23330,6 @@ const uiComponentsExportWithDateMini = [
|
|
|
23417
23330
|
XSDateMiniComponent,
|
|
23418
23331
|
];
|
|
23419
23332
|
|
|
23420
|
-
/*
|
|
23421
|
-
* Public API Surface of xs-ui
|
|
23422
|
-
*/
|
|
23423
|
-
|
|
23424
23333
|
/**
|
|
23425
23334
|
* Generated bundle index. Do not edit.
|
|
23426
23335
|
*/
|