intelica-library-components 1.1.91 → 1.1.93
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.
|
@@ -6106,11 +6106,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
6106
6106
|
|
|
6107
6107
|
class IntelicaAlertComponent {
|
|
6108
6108
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IntelicaAlertComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6109
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: IntelicaAlertComponent, isStandalone: true, selector: "intelica-alert", ngImport: i0, template: "<!-- \r\n Clases Modificadoras para estados:\r\n prConfirmDialog--warning\r\n prConfirmDialog--danger\r\n prConfirmDialog--error\r\n prConfirmDialog--success\r\n prConfirmDialog--default\r\n-->\r\n<p-confirmDialog #cd
|
|
6109
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: IntelicaAlertComponent, isStandalone: true, selector: "intelica-alert", ngImport: i0, template: "<!-- \r\n Clases Modificadoras para estados:\r\n prConfirmDialog--warning\r\n prConfirmDialog--danger\r\n prConfirmDialog--error\r\n prConfirmDialog--success\r\n prConfirmDialog--default\r\n-->\r\n<p-confirmDialog #cd [styleClass]=\"'prConfirmDialog' + \r\n\t($any(cd.confirmation)?.data?.config?.type ? ' prConfirmDialog--' + $any(cd.confirmation).data.config.type : ' prConfirmDialog--default') +\r\n\t($any(cd.confirmation)?.data?.config?.size ? ' prConfirmDialog--' + $any(cd.confirmation).data.config.size : '')\"\r\n\tkey=\"intelica-alert-dialog\" [closable]=\"false\" [visible]=\"undefined\">\r\n\t<!-- \r\n We use the headless template. \r\n 'message' contains the confirmation object.\r\n 'message.data' contains our custom 'presentationData' object from AlertService.\r\n -->\r\n\t<ng-template pTemplate=\"headless\" let-message let-onAccept=\"onAccept\" let-onReject=\"onReject\">\r\n\t\t<div class=\"prConfirmDialog__content\">\r\n\t\t\t<!-- Close Button -->\r\n\t\t\t@if (message.data.config.showCloseButton) {\r\n\t\t\t<div class=\"prConfirmDialog__close\">\r\n\t\t\t\t<p-button class=\"prButton\" [rounded]=\"false\" [text]=\"true\" (onClick)=\"onReject()\" ariaLabel=\"Cerrar\">\r\n\t\t\t\t\t<i class=\"icon icon-cancel\" style=\"color: #333;\"></i></p-button>\r\n\t\t\t</div>\r\n\t\t\t}\r\n\r\n\t\t\t<!-- Icon -->\r\n\t\t\t<div class=\"prConfirmDialog__icon\">\r\n\t\t\t\t@if (message.data.config.customImageUrl) {\r\n\t\t\t\t<img [src]=\"message.data.config.customImageUrl\" alt=\"Alert icon\" />\r\n\t\t\t\t} @else {\r\n\t\t\t\t<i [class]=\"$any(message).data.iconClass\"></i>\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t\t<div class=\"prConfirmDialog__details\">\r\n\t\t\t\t<!-- Title -->\r\n\t\t\t\t<h2 class=\"prConfirmDialog__title\">{{ message.header }}</h2>\r\n\r\n\t\t\t\t<!-- Subtitle / Message -->\r\n\t\t\t\t@if (message.message) {\r\n\t\t\t\t<p class=\"prConfirmDialog__subtitle\"\r\n\t\t\t\t\t[style.color]=\"$any(message).data.config.styles?.subtitleColor ?? '#555'\">{{ message.message }}</p>\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\r\n\t\t\t<!-- HTML Content -->\r\n\t\t\t@if (message.data.config.htmlContent) {\r\n\t\t\t<div class=\"prConfirmDialog__text\" [innerHTML]=\"$any(message).data.config.htmlContent\"\r\n\t\t\t\t[style.color]=\"$any(message).data.config.styles?.subtitleColor ?? '#555'\"></div>\r\n\t\t\t}\r\n\r\n\t\t\t<!-- Buttons -->\r\n\t\t\t<div class=\"prConfirmDialog__footer\">\r\n\t\t\t\t<!-- Confirm Button -->\r\n\t\t\t\t<p-button class=\"prButton\" [label]=\"message.data.confirmText\" (onClick)=\"onAccept()\" />\r\n\t\t\t\t<!-- Cancel Button -->\r\n\t\t\t\t@if (message.data.showCancelButton) {\r\n\t\t\t\t<p-button class=\"prButton\" [label]=\"message.data.cancelText\" severity=\"secondary\" [outlined]=\"true\"\r\n\t\t\t\t\t(onClick)=\"onReject()\" />\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</ng-template>\r\n</p-confirmDialog>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ConfirmDialogModule }, { kind: "component", type: i1$3.ConfirmDialog, selector: "p-confirmDialog, p-confirmdialog, p-confirm-dialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "closeAriaLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "modal", "visible", "position", "draggable"], outputs: ["onHide"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i2$1.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }] });
|
|
6110
6110
|
}
|
|
6111
6111
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IntelicaAlertComponent, decorators: [{
|
|
6112
6112
|
type: Component,
|
|
6113
|
-
args: [{ selector: "intelica-alert", standalone: true, imports: [CommonModule, ConfirmDialogModule, ButtonModule], template: "<!-- \r\n Clases Modificadoras para estados:\r\n prConfirmDialog--warning\r\n prConfirmDialog--danger\r\n prConfirmDialog--error\r\n prConfirmDialog--success\r\n prConfirmDialog--default\r\n-->\r\n<p-confirmDialog #cd
|
|
6113
|
+
args: [{ selector: "intelica-alert", standalone: true, imports: [CommonModule, ConfirmDialogModule, ButtonModule], template: "<!-- \r\n Clases Modificadoras para estados:\r\n prConfirmDialog--warning\r\n prConfirmDialog--danger\r\n prConfirmDialog--error\r\n prConfirmDialog--success\r\n prConfirmDialog--default\r\n-->\r\n<p-confirmDialog #cd [styleClass]=\"'prConfirmDialog' + \r\n\t($any(cd.confirmation)?.data?.config?.type ? ' prConfirmDialog--' + $any(cd.confirmation).data.config.type : ' prConfirmDialog--default') +\r\n\t($any(cd.confirmation)?.data?.config?.size ? ' prConfirmDialog--' + $any(cd.confirmation).data.config.size : '')\"\r\n\tkey=\"intelica-alert-dialog\" [closable]=\"false\" [visible]=\"undefined\">\r\n\t<!-- \r\n We use the headless template. \r\n 'message' contains the confirmation object.\r\n 'message.data' contains our custom 'presentationData' object from AlertService.\r\n -->\r\n\t<ng-template pTemplate=\"headless\" let-message let-onAccept=\"onAccept\" let-onReject=\"onReject\">\r\n\t\t<div class=\"prConfirmDialog__content\">\r\n\t\t\t<!-- Close Button -->\r\n\t\t\t@if (message.data.config.showCloseButton) {\r\n\t\t\t<div class=\"prConfirmDialog__close\">\r\n\t\t\t\t<p-button class=\"prButton\" [rounded]=\"false\" [text]=\"true\" (onClick)=\"onReject()\" ariaLabel=\"Cerrar\">\r\n\t\t\t\t\t<i class=\"icon icon-cancel\" style=\"color: #333;\"></i></p-button>\r\n\t\t\t</div>\r\n\t\t\t}\r\n\r\n\t\t\t<!-- Icon -->\r\n\t\t\t<div class=\"prConfirmDialog__icon\">\r\n\t\t\t\t@if (message.data.config.customImageUrl) {\r\n\t\t\t\t<img [src]=\"message.data.config.customImageUrl\" alt=\"Alert icon\" />\r\n\t\t\t\t} @else {\r\n\t\t\t\t<i [class]=\"$any(message).data.iconClass\"></i>\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t\t<div class=\"prConfirmDialog__details\">\r\n\t\t\t\t<!-- Title -->\r\n\t\t\t\t<h2 class=\"prConfirmDialog__title\">{{ message.header }}</h2>\r\n\r\n\t\t\t\t<!-- Subtitle / Message -->\r\n\t\t\t\t@if (message.message) {\r\n\t\t\t\t<p class=\"prConfirmDialog__subtitle\"\r\n\t\t\t\t\t[style.color]=\"$any(message).data.config.styles?.subtitleColor ?? '#555'\">{{ message.message }}</p>\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\r\n\t\t\t<!-- HTML Content -->\r\n\t\t\t@if (message.data.config.htmlContent) {\r\n\t\t\t<div class=\"prConfirmDialog__text\" [innerHTML]=\"$any(message).data.config.htmlContent\"\r\n\t\t\t\t[style.color]=\"$any(message).data.config.styles?.subtitleColor ?? '#555'\"></div>\r\n\t\t\t}\r\n\r\n\t\t\t<!-- Buttons -->\r\n\t\t\t<div class=\"prConfirmDialog__footer\">\r\n\t\t\t\t<!-- Confirm Button -->\r\n\t\t\t\t<p-button class=\"prButton\" [label]=\"message.data.confirmText\" (onClick)=\"onAccept()\" />\r\n\t\t\t\t<!-- Cancel Button -->\r\n\t\t\t\t@if (message.data.showCancelButton) {\r\n\t\t\t\t<p-button class=\"prButton\" [label]=\"message.data.cancelText\" severity=\"secondary\" [outlined]=\"true\"\r\n\t\t\t\t\t(onClick)=\"onReject()\" />\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</ng-template>\r\n</p-confirmDialog>" }]
|
|
6114
6114
|
}] });
|
|
6115
6115
|
|
|
6116
6116
|
class GlobalFavoriteService {
|
|
@@ -6862,7 +6862,7 @@ const ALERT_ICON_PATHS = {
|
|
|
6862
6862
|
* [AlertType.ERROR]: 'icon icon-alert',
|
|
6863
6863
|
* }}
|
|
6864
6864
|
*/
|
|
6865
|
-
const ALERT_ICON_OVERRIDES = new InjectionToken(
|
|
6865
|
+
const ALERT_ICON_OVERRIDES = new InjectionToken("ALERT_ICON_OVERRIDES");
|
|
6866
6866
|
/**
|
|
6867
6867
|
* Centralized configuration for each alert type using PrimeNG icons.
|
|
6868
6868
|
*/
|
|
@@ -7292,12 +7292,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
7292
7292
|
class AlertService {
|
|
7293
7293
|
confirmationService = inject(ConfirmationService);
|
|
7294
7294
|
iconOverrides = inject(ALERT_ICON_OVERRIDES, { optional: true });
|
|
7295
|
-
DIALOG_KEY =
|
|
7295
|
+
DIALOG_KEY = "intelica-alert-dialog";
|
|
7296
7296
|
/**
|
|
7297
7297
|
* Displays a warning alert with yellow styling.
|
|
7298
7298
|
* Can be called with (title, subtitle, buttonMode, buttons) OR (title, subtitle, buttons).
|
|
7299
7299
|
*/
|
|
7300
|
-
warning(title, subtitle, modeOrButtons, buttons) {
|
|
7300
|
+
warning(title, subtitle, modeOrButtons, buttons, size) {
|
|
7301
7301
|
const { buttonMode, buttonConfig } = this.resolveArgs(modeOrButtons, buttons);
|
|
7302
7302
|
return this.show({
|
|
7303
7303
|
type: AlertType.WARNING,
|
|
@@ -7305,13 +7305,14 @@ class AlertService {
|
|
|
7305
7305
|
subtitle,
|
|
7306
7306
|
buttonMode,
|
|
7307
7307
|
buttons: buttonConfig,
|
|
7308
|
+
size,
|
|
7308
7309
|
});
|
|
7309
7310
|
}
|
|
7310
7311
|
/**
|
|
7311
7312
|
* Displays a success alert with green styling.
|
|
7312
7313
|
* Can be called with (title, subtitle, buttonMode, buttons) OR (title, subtitle, buttons).
|
|
7313
7314
|
*/
|
|
7314
|
-
success(title, subtitle, modeOrButtons, buttons) {
|
|
7315
|
+
success(title, subtitle, modeOrButtons, buttons, size) {
|
|
7315
7316
|
const { buttonMode, buttonConfig } = this.resolveArgs(modeOrButtons, buttons);
|
|
7316
7317
|
return this.show({
|
|
7317
7318
|
type: AlertType.SUCCESS,
|
|
@@ -7319,13 +7320,14 @@ class AlertService {
|
|
|
7319
7320
|
subtitle,
|
|
7320
7321
|
buttonMode,
|
|
7321
7322
|
buttons: buttonConfig,
|
|
7323
|
+
size,
|
|
7322
7324
|
});
|
|
7323
7325
|
}
|
|
7324
7326
|
/**
|
|
7325
7327
|
* Displays an error alert with red styling.
|
|
7326
7328
|
* Can be called with (title, subtitle, buttonMode, buttons) OR (title, subtitle, buttons).
|
|
7327
7329
|
*/
|
|
7328
|
-
error(title, subtitle, modeOrButtons, buttons) {
|
|
7330
|
+
error(title, subtitle, modeOrButtons, buttons, size) {
|
|
7329
7331
|
const { buttonMode, buttonConfig } = this.resolveArgs(modeOrButtons, buttons);
|
|
7330
7332
|
return this.show({
|
|
7331
7333
|
type: AlertType.ERROR,
|
|
@@ -7333,6 +7335,7 @@ class AlertService {
|
|
|
7333
7335
|
subtitle,
|
|
7334
7336
|
buttonMode,
|
|
7335
7337
|
buttons: buttonConfig,
|
|
7338
|
+
size,
|
|
7336
7339
|
});
|
|
7337
7340
|
}
|
|
7338
7341
|
/**
|
|
@@ -7341,20 +7344,20 @@ class AlertService {
|
|
|
7341
7344
|
* If 3rd arg is string (enum), treat it as mode and 4th as buttons config.
|
|
7342
7345
|
*/
|
|
7343
7346
|
resolveArgs(modeOrButtons, buttons) {
|
|
7344
|
-
if (modeOrButtons && typeof modeOrButtons ===
|
|
7347
|
+
if (modeOrButtons && typeof modeOrButtons === "object") {
|
|
7345
7348
|
// USAGE: success(title, subtitle, { confirmText: 'Ok', cancelText: 'Cancel' })
|
|
7346
7349
|
// Auto-detect mode based on presence of cancelText
|
|
7347
7350
|
const hasCancel = !!modeOrButtons.cancelText;
|
|
7348
7351
|
return {
|
|
7349
7352
|
buttonMode: hasCancel ? AlertButtonMode.CONFIRM_CANCEL : AlertButtonMode.OK_ONLY,
|
|
7350
|
-
buttonConfig: modeOrButtons
|
|
7353
|
+
buttonConfig: modeOrButtons,
|
|
7351
7354
|
};
|
|
7352
7355
|
}
|
|
7353
7356
|
// USAGE: success(title, subtitle, AlertButtonMode.CONFIRM_CANCEL, { ... })
|
|
7354
7357
|
// OR default
|
|
7355
7358
|
return {
|
|
7356
7359
|
buttonMode: modeOrButtons ?? AlertButtonMode.OK_ONLY,
|
|
7357
|
-
buttonConfig: buttons
|
|
7360
|
+
buttonConfig: buttons,
|
|
7358
7361
|
};
|
|
7359
7362
|
}
|
|
7360
7363
|
message(message, type = AlertType.WARNING) {
|
|
@@ -7364,13 +7367,14 @@ class AlertService {
|
|
|
7364
7367
|
buttonMode: AlertButtonMode.OK_ONLY,
|
|
7365
7368
|
});
|
|
7366
7369
|
}
|
|
7367
|
-
confirm(title, subtitle, confirmText = "Confirmar", cancelText = "Cancelar", type = AlertType.WARNING) {
|
|
7370
|
+
confirm(title, subtitle, confirmText = "Confirmar", cancelText = "Cancelar", type = AlertType.WARNING, size) {
|
|
7368
7371
|
return this.show({
|
|
7369
7372
|
type,
|
|
7370
7373
|
title,
|
|
7371
7374
|
subtitle,
|
|
7372
7375
|
buttonMode: AlertButtonMode.CONFIRM_CANCEL,
|
|
7373
7376
|
buttons: { confirmText, cancelText },
|
|
7377
|
+
size,
|
|
7374
7378
|
});
|
|
7375
7379
|
}
|
|
7376
7380
|
showHtml(title, htmlContent, type = AlertType.WARNING, buttonMode = AlertButtonMode.OK_ONLY) {
|
|
@@ -7388,7 +7392,7 @@ class AlertService {
|
|
|
7388
7392
|
});
|
|
7389
7393
|
}
|
|
7390
7394
|
show(config) {
|
|
7391
|
-
return new Promise(
|
|
7395
|
+
return new Promise(resolve => {
|
|
7392
7396
|
const mergedConfig = this.mergeWithDefaults(config);
|
|
7393
7397
|
const typeConfig = ALERT_TYPE_CONFIG[mergedConfig.type];
|
|
7394
7398
|
// Prepare data object for the view
|
|
@@ -7402,15 +7406,9 @@ class AlertService {
|
|
|
7402
7406
|
showCancelButton: this.showCancelButton(mergedConfig),
|
|
7403
7407
|
confirmText: this.getConfirmText(mergedConfig),
|
|
7404
7408
|
cancelText: this.getCancelText(mergedConfig),
|
|
7405
|
-
dialogStyle: {
|
|
7406
|
-
width: mergedConfig.styles?.width ?? "400px",
|
|
7407
|
-
maxWidth: "90vw",
|
|
7408
|
-
borderRadius: "12px",
|
|
7409
|
-
overflow: "hidden",
|
|
7410
|
-
},
|
|
7411
7409
|
confirmButtonStyle: this.getConfirmButtonStyle(mergedConfig),
|
|
7412
7410
|
cancelButtonStyle: this.getCancelButtonStyle(mergedConfig),
|
|
7413
|
-
// Add manual dismiss handler to data so template can call it if needed,
|
|
7411
|
+
// Add manual dismiss handler to data so template can call it if needed,
|
|
7414
7412
|
// though explicit close button in template can just use reject or logic.
|
|
7415
7413
|
// For custom headers/X buttons usually we initiate close.
|
|
7416
7414
|
};
|
|
@@ -8291,13 +8289,40 @@ class GlobalMenuService {
|
|
|
8291
8289
|
selectedProduct = this._selectedProduct.asReadonly();
|
|
8292
8290
|
eventMenu = "MenuBarEvent";
|
|
8293
8291
|
eventProducts = "SelectedProductMenuEvent";
|
|
8292
|
+
COOKIE_PRODUCT = "intelica:selected-product";
|
|
8293
|
+
COOKIE_MENU = "intelica:menu-visible";
|
|
8294
|
+
initialized = false;
|
|
8294
8295
|
initialize() {
|
|
8296
|
+
if (this.initialized)
|
|
8297
|
+
return;
|
|
8295
8298
|
this.listenMenuEvents();
|
|
8299
|
+
this.hydrateFromCookies();
|
|
8300
|
+
this.initialized = true;
|
|
8301
|
+
}
|
|
8302
|
+
hydrateFromCookies() {
|
|
8303
|
+
const productCookie = getCookie(this.COOKIE_PRODUCT);
|
|
8304
|
+
if (productCookie) {
|
|
8305
|
+
try {
|
|
8306
|
+
const parsed = JSON.parse(productCookie);
|
|
8307
|
+
this._selectedProduct.set({
|
|
8308
|
+
product: parsed.product ?? "",
|
|
8309
|
+
icon: parsed.icon ?? "",
|
|
8310
|
+
productId: parsed.productId ?? "",
|
|
8311
|
+
});
|
|
8312
|
+
}
|
|
8313
|
+
catch { }
|
|
8314
|
+
}
|
|
8315
|
+
const menuCookie = getCookie(this.COOKIE_MENU);
|
|
8316
|
+
if (menuCookie !== undefined) {
|
|
8317
|
+
this._isMenuVisible.set(menuCookie === "true");
|
|
8318
|
+
}
|
|
8296
8319
|
}
|
|
8297
8320
|
setMenuVisibility(isVisible) {
|
|
8321
|
+
setCookie(this.COOKIE_MENU, String(isVisible)); // 👈 NUEVO
|
|
8298
8322
|
this.emitMenuEvent(isVisible);
|
|
8299
8323
|
}
|
|
8300
8324
|
setSelectedProduct(product) {
|
|
8325
|
+
setCookie(this.COOKIE_PRODUCT, JSON.stringify(product)); // 👈 NUEVO
|
|
8301
8326
|
this.emitSelectedProductEvent(product);
|
|
8302
8327
|
}
|
|
8303
8328
|
listenMenuEvents() {
|
|
@@ -8306,8 +8331,10 @@ class GlobalMenuService {
|
|
|
8306
8331
|
}
|
|
8307
8332
|
onMenuEvent = (event) => {
|
|
8308
8333
|
const { menuIsVisible } = event.detail ?? {};
|
|
8309
|
-
if (typeof menuIsVisible === "boolean")
|
|
8334
|
+
if (typeof menuIsVisible === "boolean") {
|
|
8310
8335
|
this._isMenuVisible.set(menuIsVisible);
|
|
8336
|
+
setCookie(this.COOKIE_MENU, String(menuIsVisible)); // 👈 NUEVO
|
|
8337
|
+
}
|
|
8311
8338
|
};
|
|
8312
8339
|
onSelectedProductEvent = (event) => {
|
|
8313
8340
|
const detail = event.detail;
|
|
@@ -8315,7 +8342,9 @@ class GlobalMenuService {
|
|
|
8315
8342
|
return;
|
|
8316
8343
|
const { product, icon, productId: authClient } = detail;
|
|
8317
8344
|
if (typeof product === "string" && typeof icon === "string" && typeof authClient === "string") {
|
|
8318
|
-
|
|
8345
|
+
const normalized = { product, icon, productId: authClient };
|
|
8346
|
+
this._selectedProduct.set(normalized);
|
|
8347
|
+
setCookie(this.COOKIE_PRODUCT, JSON.stringify(normalized)); // 👈 NUEVO
|
|
8319
8348
|
}
|
|
8320
8349
|
};
|
|
8321
8350
|
emitMenuEvent(isVisible) {
|