valtech-components 2.0.1010 → 2.0.1011

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.
@@ -59,13 +59,24 @@ export class PageRefreshService {
59
59
  this.hasHandler.set(false);
60
60
  }
61
61
  /**
62
- * Ejecuta el handler registrado y espera a que termine. Lo invoca
63
- * `val-page-wrapper` al detectar el gesto de pull. No-op si no hay handler.
62
+ * Duración mínima (ms) que el spinner permanece visible, aunque el handler
63
+ * termine antes. Sin esto, un reload rápido (data cacheada) cierra el spinner
64
+ * al instante → se percibe como "no hubo refresh". Con el mínimo, el gesto se
65
+ * siente smooth y CONSISTENTE en todas las vistas que usan el page-wrapper.
66
+ */
67
+ static { this.MIN_SPINNER_MS = 500; }
68
+ /**
69
+ * Ejecuta el handler registrado y espera a que termine, garantizando una
70
+ * duración mínima de spinner. Lo invoca `val-page-wrapper` al detectar el
71
+ * gesto de pull. No-op si no hay handler.
64
72
  */
65
73
  async run() {
66
74
  if (!this.handler)
67
75
  return;
68
- await this.handler();
76
+ const minDelay = new Promise(resolve => setTimeout(resolve, PageRefreshService.MIN_SPINNER_MS));
77
+ // Espera AMBOS: el trabajo real + el mínimo visual. Si el handler tarda más,
78
+ // manda el handler; si es instantáneo, el spinner igual se ve ~500ms.
79
+ await Promise.all([Promise.resolve(this.handler()), minDelay]);
69
80
  }
70
81
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PageRefreshService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
71
82
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PageRefreshService, providedIn: 'root' }); }
@@ -101,4 +112,4 @@ export function connectPageRefresh(handler) {
101
112
  svc.register(handler);
102
113
  destroyRef.onDestroy(() => svc.unregister());
103
114
  }
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1yZWZyZXNoLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL3BhZ2UtcmVmcmVzaC9wYWdlLXJlZnJlc2guc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQVF2RTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStCRztBQUVILE1BQU0sT0FBTyxrQkFBa0I7SUFEL0I7UUFFVSxZQUFPLEdBQThCLElBQUksQ0FBQztRQUVsRDs7O1dBR0c7UUFDTSxlQUFVLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBNkJyQztJQTNCQzs7OztPQUlHO0lBQ0gsUUFBUSxDQUFDLE9BQTJCO1FBQ2xDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxVQUFVO1FBQ1IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxHQUFHO1FBQ1AsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUMxQixNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN2QixDQUFDOytHQW5DVSxrQkFBa0I7bUhBQWxCLGtCQUFrQixjQURMLE1BQU07OzRGQUNuQixrQkFBa0I7a0JBRDlCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOztBQXVDbEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE9BQTJCO0lBQzVELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0QyxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RCLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7QUFDL0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc3Ryb3lSZWYsIGluamVjdCwgSW5qZWN0YWJsZSwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogSGFuZGxlciBkZSByZWZyZXNoIHF1ZSByZWdpc3RyYSB1bmEgcMOhZ2luYS4gUHVlZGUgc2VyIHN5bmMgbyBhc3luYyDigJRcbiAqIGB2YWwtcGFnZS13cmFwcGVyYCBlc3BlcmEgKGBhd2FpdGApIGEgcXVlIHRlcm1pbmUgYW50ZXMgZGUgY2VycmFyIGVsIHNwaW5uZXIuXG4gKi9cbmV4cG9ydCB0eXBlIFBhZ2VSZWZyZXNoSGFuZGxlciA9ICgpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuXG4vKipcbiAqIFBhZ2VSZWZyZXNoU2VydmljZSDigJQgYnVzIGRlbCBwdWxsLXRvLXJlZnJlc2ggZXN0w6FuZGFyIGRlbCBmYWN0b3J5LlxuICpcbiAqICoqUG9yIHF1w6kgZXhpc3RlOioqIGB2YWwtcGFnZS13cmFwcGVyYCBwb3NlZSB1biDDum5pY28gYDxpb24tY29udGVudD5gIHkgdG9kYXNcbiAqIGxhcyBww6FnaW5hcyBzZSByZW5kZXJpemFuIGRlbnRybyB2w61hIGA8cm91dGVyLW91dGxldD5gLiBVbiBgPGlvbi1yZWZyZXNoZXI+YFxuICogdGllbmUgcXVlIHZpdmlyIGRlbnRybyBkZSBlc2UgYGlvbi1jb250ZW50YCwgYXPDrSBxdWUgZWwgcmVmcmVzaGVyIE5PIHB1ZWRlXG4gKiBkZWNsYXJhcnNlIGVuIGVsIHRlbXBsYXRlIGRlIGNhZGEgcMOhZ2luYSDigJQgdml2ZSB1bmEgc29sYSB2ZXogZW5cbiAqIGB2YWwtcGFnZS13cmFwcGVyYC4gRXN0ZSBzZXJ2aWNpbyBlcyBlbCBwdWVudGU6IGxhIHDDoWdpbmEgYWN0aXZhIHJlZ2lzdHJhXG4gKiAqcXXDqSBoYWNlciogYWwgcmVmcmVzY2FyOyBlbCBwYWdlLXdyYXBwZXIgZGlzcGFyYSBlbCBnZXN0byB5IGNpZXJyYSBlbCBzcGlubmVyLlxuICpcbiAqICoqVXNvIGVuIHVuYSBww6FnaW5hKiogKHZlciBgZnJvbnRlbmQvQ0xBVURFLm1kYCDigJQgZXMgZWwgcGF0csOzbiBlc3TDoW5kYXIpOlxuICpcbiAqIGBgYHRzXG4gKiBleHBvcnQgY2xhc3MgTWlQYWdlIGltcGxlbWVudHMgVmlld1dpbGxFbnRlciwgVmlld1dpbGxMZWF2ZSB7XG4gKiAgIHByaXZhdGUgcGFnZVJlZnJlc2ggPSBpbmplY3QoUGFnZVJlZnJlc2hTZXJ2aWNlKTtcbiAqXG4gKiAgIGlvblZpZXdXaWxsRW50ZXIoKTogdm9pZCB7XG4gKiAgICAgdGhpcy5wYWdlUmVmcmVzaC5yZWdpc3RlcigoKSA9PiB0aGlzLnJlbG9hZCgpKTtcbiAqICAgfVxuICogICBpb25WaWV3V2lsbExlYXZlKCk6IHZvaWQge1xuICogICAgIHRoaXMucGFnZVJlZnJlc2gudW5yZWdpc3RlcigpO1xuICogICB9XG4gKlxuICogICBwcml2YXRlIGFzeW5jIHJlbG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAqICAgICAvLyByZS1mZXRjaCAvIHJlLXN1c2NyaWJpciBzdHJlYW1zIC8gZXRjLlxuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBQw6FnaW5hcyBxdWUgbm8gbGxhbWFuIGByZWdpc3RlcigpYCBzaW1wbGVtZW50ZSBubyBtdWVzdHJhbiByZWZyZXNoZXIg4oCUXG4gKiBvcHQtaW4sIHNpbiBpbXBhY3RvLlxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFBhZ2VSZWZyZXNoU2VydmljZSB7XG4gIHByaXZhdGUgaGFuZGxlcjogUGFnZVJlZnJlc2hIYW5kbGVyIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIGB0cnVlYCBjdWFuZG8gaGF5IHVuYSBww6FnaW5hIGNvbiBoYW5kbGVyIHJlZ2lzdHJhZG8uIGB2YWwtcGFnZS13cmFwcGVyYFxuICAgKiByZW5kZXJpemEgZWwgYDx2YWwtcmVmcmVzaGVyPmAgc8OzbG8gY3VhbmRvIGVzdG8gZXMgYHRydWVgLlxuICAgKi9cbiAgcmVhZG9ubHkgaGFzSGFuZGxlciA9IHNpZ25hbChmYWxzZSk7XG5cbiAgLyoqXG4gICAqIFJlZ2lzdHJhIGVsIGhhbmRsZXIgZGUgcmVmcmVzaCBkZSBsYSBww6FnaW5hIGFjdGl2YS4gTGxhbWFyIGVuXG4gICAqIGBpb25WaWV3V2lsbEVudGVyYC4gU2kgeWEgaGFiw61hIHVubywgbG8gcmVlbXBsYXphIChzw7NsbyBoYXkgdW5hIHDDoWdpbmFcbiAgICogYWN0aXZhIGEgbGEgdmV6IGVuIGVsIHJvdXRlci1vdXRsZXQgZGUgSW9uaWMpLlxuICAgKi9cbiAgcmVnaXN0ZXIoaGFuZGxlcjogUGFnZVJlZnJlc2hIYW5kbGVyKTogdm9pZCB7XG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlcjtcbiAgICB0aGlzLmhhc0hhbmRsZXIuc2V0KHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFF1aXRhIGVsIGhhbmRsZXIuIExsYW1hciBlbiBgaW9uVmlld1dpbGxMZWF2ZWAgcGFyYSBxdWUgZWwgcmVmcmVzaGVyXG4gICAqIGRlc2FwYXJlemNhIGFsIHNhbGlyIGRlIGxhIHZpc3RhLlxuICAgKi9cbiAgdW5yZWdpc3RlcigpOiB2b2lkIHtcbiAgICB0aGlzLmhhbmRsZXIgPSBudWxsO1xuICAgIHRoaXMuaGFzSGFuZGxlci5zZXQoZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVqZWN1dGEgZWwgaGFuZGxlciByZWdpc3RyYWRvIHkgZXNwZXJhIGEgcXVlIHRlcm1pbmUuIExvIGludm9jYVxuICAgKiBgdmFsLXBhZ2Utd3JhcHBlcmAgYWwgZGV0ZWN0YXIgZWwgZ2VzdG8gZGUgcHVsbC4gTm8tb3Agc2kgbm8gaGF5IGhhbmRsZXIuXG4gICAqL1xuICBhc3luYyBydW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmhhbmRsZXIpIHJldHVybjtcbiAgICBhd2FpdCB0aGlzLmhhbmRsZXIoKTtcbiAgfVxufVxuXG4vKipcbiAqIENvbmVjdGEgdW5hIHDDoWdpbmEgYWwgcHVsbC10by1yZWZyZXNoIGVzdMOhbmRhciBlbiBVTkEgbMOtbmVhLCBzaW4gbGlmZWN5Y2xlXG4gKiBob29rcyBtYW51YWxlczogcmVnaXN0cmEgZWwgaGFuZGxlciB5IGxvIGRlc3JlZ2lzdHJhIGFsIGRlc3RydWlyIGxhIHDDoWdpbmFcbiAqICh2w61hIGBEZXN0cm95UmVmYCkuXG4gKlxuICogREVCRSBsbGFtYXJzZSBlbiB1biBpbmplY3Rpb24gY29udGV4dCAoY29uc3RydWN0b3IgbyBmaWVsZCBpbml0aWFsaXplcikuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBleHBvcnQgY2xhc3MgTWlQYWdlIHtcbiAqICAgcHJpdmF0ZSBkYXRhID0gY3JlYXRlUmVmcmVzaGFibGVTdHJlYW0oKCkgPT4gdGhpcy5zdmMuZ2V0WCgpKTtcbiAqICAgcmVhZG9ubHkgaXRlbXMgPSB0aGlzLmRhdGEuZGF0YTtcbiAqXG4gKiAgIGNvbnN0cnVjdG9yKCkge1xuICogICAgIGNvbm5lY3RQYWdlUmVmcmVzaCgoKSA9PiB0aGlzLmRhdGEucmVsb2FkKCkpO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBSZWVtcGxhemEgZWwgcGF0csOzbiBgbmdPbkluaXRg4oaSYHJlZ2lzdGVyYCAvIGBuZ09uRGVzdHJveWDihpJgdW5yZWdpc3RlcmAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb25uZWN0UGFnZVJlZnJlc2goaGFuZGxlcjogUGFnZVJlZnJlc2hIYW5kbGVyKTogdm9pZCB7XG4gIGNvbnN0IHN2YyA9IGluamVjdChQYWdlUmVmcmVzaFNlcnZpY2UpO1xuICBjb25zdCBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICBzdmMucmVnaXN0ZXIoaGFuZGxlcik7XG4gIGRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IHN2Yy51bnJlZ2lzdGVyKCkpO1xufVxuIl19
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1yZWZyZXNoLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL3BhZ2UtcmVmcmVzaC9wYWdlLXJlZnJlc2guc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQVF2RTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStCRztBQUVILE1BQU0sT0FBTyxrQkFBa0I7SUFEL0I7UUFFVSxZQUFPLEdBQThCLElBQUksQ0FBQztRQUVsRDs7O1dBR0c7UUFDTSxlQUFVLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBMkNyQztJQXpDQzs7OztPQUlHO0lBQ0gsUUFBUSxDQUFDLE9BQTJCO1FBQ2xDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxVQUFVO1FBQ1IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7OztPQUtHO2FBQ3FCLG1CQUFjLEdBQUcsR0FBRyxBQUFOLENBQU87SUFFN0M7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxHQUFHO1FBQ1AsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUMxQixNQUFNLFFBQVEsR0FBRyxJQUFJLE9BQU8sQ0FBTyxPQUFPLENBQUMsRUFBRSxDQUMzQyxVQUFVLENBQUMsT0FBTyxFQUFFLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUN2RCxDQUFDO1FBQ0YsNkVBQTZFO1FBQzdFLHNFQUFzRTtRQUN0RSxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDakUsQ0FBQzsrR0FqRFUsa0JBQWtCO21IQUFsQixrQkFBa0IsY0FETCxNQUFNOzs0RkFDbkIsa0JBQWtCO2tCQUQ5QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7QUFxRGxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxPQUEyQjtJQUM1RCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUN2QyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdEMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN0QixVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0FBQy9DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZXN0cm95UmVmLCBpbmplY3QsIEluamVjdGFibGUsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIEhhbmRsZXIgZGUgcmVmcmVzaCBxdWUgcmVnaXN0cmEgdW5hIHDDoWdpbmEuIFB1ZWRlIHNlciBzeW5jIG8gYXN5bmMg4oCUXG4gKiBgdmFsLXBhZ2Utd3JhcHBlcmAgZXNwZXJhIChgYXdhaXRgKSBhIHF1ZSB0ZXJtaW5lIGFudGVzIGRlIGNlcnJhciBlbCBzcGlubmVyLlxuICovXG5leHBvcnQgdHlwZSBQYWdlUmVmcmVzaEhhbmRsZXIgPSAoKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcblxuLyoqXG4gKiBQYWdlUmVmcmVzaFNlcnZpY2Ug4oCUIGJ1cyBkZWwgcHVsbC10by1yZWZyZXNoIGVzdMOhbmRhciBkZWwgZmFjdG9yeS5cbiAqXG4gKiAqKlBvciBxdcOpIGV4aXN0ZToqKiBgdmFsLXBhZ2Utd3JhcHBlcmAgcG9zZWUgdW4gw7puaWNvIGA8aW9uLWNvbnRlbnQ+YCB5IHRvZGFzXG4gKiBsYXMgcMOhZ2luYXMgc2UgcmVuZGVyaXphbiBkZW50cm8gdsOtYSBgPHJvdXRlci1vdXRsZXQ+YC4gVW4gYDxpb24tcmVmcmVzaGVyPmBcbiAqIHRpZW5lIHF1ZSB2aXZpciBkZW50cm8gZGUgZXNlIGBpb24tY29udGVudGAsIGFzw60gcXVlIGVsIHJlZnJlc2hlciBOTyBwdWVkZVxuICogZGVjbGFyYXJzZSBlbiBlbCB0ZW1wbGF0ZSBkZSBjYWRhIHDDoWdpbmEg4oCUIHZpdmUgdW5hIHNvbGEgdmV6IGVuXG4gKiBgdmFsLXBhZ2Utd3JhcHBlcmAuIEVzdGUgc2VydmljaW8gZXMgZWwgcHVlbnRlOiBsYSBww6FnaW5hIGFjdGl2YSByZWdpc3RyYVxuICogKnF1w6kgaGFjZXIqIGFsIHJlZnJlc2NhcjsgZWwgcGFnZS13cmFwcGVyIGRpc3BhcmEgZWwgZ2VzdG8geSBjaWVycmEgZWwgc3Bpbm5lci5cbiAqXG4gKiAqKlVzbyBlbiB1bmEgcMOhZ2luYSoqICh2ZXIgYGZyb250ZW5kL0NMQVVERS5tZGAg4oCUIGVzIGVsIHBhdHLDs24gZXN0w6FuZGFyKTpcbiAqXG4gKiBgYGB0c1xuICogZXhwb3J0IGNsYXNzIE1pUGFnZSBpbXBsZW1lbnRzIFZpZXdXaWxsRW50ZXIsIFZpZXdXaWxsTGVhdmUge1xuICogICBwcml2YXRlIHBhZ2VSZWZyZXNoID0gaW5qZWN0KFBhZ2VSZWZyZXNoU2VydmljZSk7XG4gKlxuICogICBpb25WaWV3V2lsbEVudGVyKCk6IHZvaWQge1xuICogICAgIHRoaXMucGFnZVJlZnJlc2gucmVnaXN0ZXIoKCkgPT4gdGhpcy5yZWxvYWQoKSk7XG4gKiAgIH1cbiAqICAgaW9uVmlld1dpbGxMZWF2ZSgpOiB2b2lkIHtcbiAqICAgICB0aGlzLnBhZ2VSZWZyZXNoLnVucmVnaXN0ZXIoKTtcbiAqICAgfVxuICpcbiAqICAgcHJpdmF0ZSBhc3luYyByZWxvYWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gKiAgICAgLy8gcmUtZmV0Y2ggLyByZS1zdXNjcmliaXIgc3RyZWFtcyAvIGV0Yy5cbiAqICAgfVxuICogfVxuICogYGBgXG4gKlxuICogUMOhZ2luYXMgcXVlIG5vIGxsYW1hbiBgcmVnaXN0ZXIoKWAgc2ltcGxlbWVudGUgbm8gbXVlc3RyYW4gcmVmcmVzaGVyIOKAlFxuICogb3B0LWluLCBzaW4gaW1wYWN0by5cbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBQYWdlUmVmcmVzaFNlcnZpY2Uge1xuICBwcml2YXRlIGhhbmRsZXI6IFBhZ2VSZWZyZXNoSGFuZGxlciB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBgdHJ1ZWAgY3VhbmRvIGhheSB1bmEgcMOhZ2luYSBjb24gaGFuZGxlciByZWdpc3RyYWRvLiBgdmFsLXBhZ2Utd3JhcHBlcmBcbiAgICogcmVuZGVyaXphIGVsIGA8dmFsLXJlZnJlc2hlcj5gIHPDs2xvIGN1YW5kbyBlc3RvIGVzIGB0cnVlYC5cbiAgICovXG4gIHJlYWRvbmx5IGhhc0hhbmRsZXIgPSBzaWduYWwoZmFsc2UpO1xuXG4gIC8qKlxuICAgKiBSZWdpc3RyYSBlbCBoYW5kbGVyIGRlIHJlZnJlc2ggZGUgbGEgcMOhZ2luYSBhY3RpdmEuIExsYW1hciBlblxuICAgKiBgaW9uVmlld1dpbGxFbnRlcmAuIFNpIHlhIGhhYsOtYSB1bm8sIGxvIHJlZW1wbGF6YSAoc8OzbG8gaGF5IHVuYSBww6FnaW5hXG4gICAqIGFjdGl2YSBhIGxhIHZleiBlbiBlbCByb3V0ZXItb3V0bGV0IGRlIElvbmljKS5cbiAgICovXG4gIHJlZ2lzdGVyKGhhbmRsZXI6IFBhZ2VSZWZyZXNoSGFuZGxlcik6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXI7XG4gICAgdGhpcy5oYXNIYW5kbGVyLnNldCh0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBRdWl0YSBlbCBoYW5kbGVyLiBMbGFtYXIgZW4gYGlvblZpZXdXaWxsTGVhdmVgIHBhcmEgcXVlIGVsIHJlZnJlc2hlclxuICAgKiBkZXNhcGFyZXpjYSBhbCBzYWxpciBkZSBsYSB2aXN0YS5cbiAgICovXG4gIHVucmVnaXN0ZXIoKTogdm9pZCB7XG4gICAgdGhpcy5oYW5kbGVyID0gbnVsbDtcbiAgICB0aGlzLmhhc0hhbmRsZXIuc2V0KGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEdXJhY2nDs24gbcOtbmltYSAobXMpIHF1ZSBlbCBzcGlubmVyIHBlcm1hbmVjZSB2aXNpYmxlLCBhdW5xdWUgZWwgaGFuZGxlclxuICAgKiB0ZXJtaW5lIGFudGVzLiBTaW4gZXN0bywgdW4gcmVsb2FkIHLDoXBpZG8gKGRhdGEgY2FjaGVhZGEpIGNpZXJyYSBlbCBzcGlubmVyXG4gICAqIGFsIGluc3RhbnRlIOKGkiBzZSBwZXJjaWJlIGNvbW8gXCJubyBodWJvIHJlZnJlc2hcIi4gQ29uIGVsIG3DrW5pbW8sIGVsIGdlc3RvIHNlXG4gICAqIHNpZW50ZSBzbW9vdGggeSBDT05TSVNURU5URSBlbiB0b2RhcyBsYXMgdmlzdGFzIHF1ZSB1c2FuIGVsIHBhZ2Utd3JhcHBlci5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IE1JTl9TUElOTkVSX01TID0gNTAwO1xuXG4gIC8qKlxuICAgKiBFamVjdXRhIGVsIGhhbmRsZXIgcmVnaXN0cmFkbyB5IGVzcGVyYSBhIHF1ZSB0ZXJtaW5lLCBnYXJhbnRpemFuZG8gdW5hXG4gICAqIGR1cmFjacOzbiBtw61uaW1hIGRlIHNwaW5uZXIuIExvIGludm9jYSBgdmFsLXBhZ2Utd3JhcHBlcmAgYWwgZGV0ZWN0YXIgZWxcbiAgICogZ2VzdG8gZGUgcHVsbC4gTm8tb3Agc2kgbm8gaGF5IGhhbmRsZXIuXG4gICAqL1xuICBhc3luYyBydW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmhhbmRsZXIpIHJldHVybjtcbiAgICBjb25zdCBtaW5EZWxheSA9IG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT5cbiAgICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgUGFnZVJlZnJlc2hTZXJ2aWNlLk1JTl9TUElOTkVSX01TKVxuICAgICk7XG4gICAgLy8gRXNwZXJhIEFNQk9TOiBlbCB0cmFiYWpvIHJlYWwgKyBlbCBtw61uaW1vIHZpc3VhbC4gU2kgZWwgaGFuZGxlciB0YXJkYSBtw6FzLFxuICAgIC8vIG1hbmRhIGVsIGhhbmRsZXI7IHNpIGVzIGluc3RhbnTDoW5lbywgZWwgc3Bpbm5lciBpZ3VhbCBzZSB2ZSB+NTAwbXMuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoW1Byb21pc2UucmVzb2x2ZSh0aGlzLmhhbmRsZXIoKSksIG1pbkRlbGF5XSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb25lY3RhIHVuYSBww6FnaW5hIGFsIHB1bGwtdG8tcmVmcmVzaCBlc3TDoW5kYXIgZW4gVU5BIGzDrW5lYSwgc2luIGxpZmVjeWNsZVxuICogaG9va3MgbWFudWFsZXM6IHJlZ2lzdHJhIGVsIGhhbmRsZXIgeSBsbyBkZXNyZWdpc3RyYSBhbCBkZXN0cnVpciBsYSBww6FnaW5hXG4gKiAodsOtYSBgRGVzdHJveVJlZmApLlxuICpcbiAqIERFQkUgbGxhbWFyc2UgZW4gdW4gaW5qZWN0aW9uIGNvbnRleHQgKGNvbnN0cnVjdG9yIG8gZmllbGQgaW5pdGlhbGl6ZXIpLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogZXhwb3J0IGNsYXNzIE1pUGFnZSB7XG4gKiAgIHByaXZhdGUgZGF0YSA9IGNyZWF0ZVJlZnJlc2hhYmxlU3RyZWFtKCgpID0+IHRoaXMuc3ZjLmdldFgoKSk7XG4gKiAgIHJlYWRvbmx5IGl0ZW1zID0gdGhpcy5kYXRhLmRhdGE7XG4gKlxuICogICBjb25zdHJ1Y3RvcigpIHtcbiAqICAgICBjb25uZWN0UGFnZVJlZnJlc2goKCkgPT4gdGhpcy5kYXRhLnJlbG9hZCgpKTtcbiAqICAgfVxuICogfVxuICogYGBgXG4gKlxuICogUmVlbXBsYXphIGVsIHBhdHLDs24gYG5nT25Jbml0YOKGkmByZWdpc3RlcmAgLyBgbmdPbkRlc3Ryb3lg4oaSYHVucmVnaXN0ZXJgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29ubmVjdFBhZ2VSZWZyZXNoKGhhbmRsZXI6IFBhZ2VSZWZyZXNoSGFuZGxlcik6IHZvaWQge1xuICBjb25zdCBzdmMgPSBpbmplY3QoUGFnZVJlZnJlc2hTZXJ2aWNlKTtcbiAgY29uc3QgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgc3ZjLnJlZ2lzdGVyKGhhbmRsZXIpO1xuICBkZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiBzdmMudW5yZWdpc3RlcigpKTtcbn1cbiJdfQ==
@@ -2,5 +2,5 @@
2
2
  * Current version of valtech-components.
3
3
  * This is automatically updated during the publish process.
4
4
  */
5
- export const VERSION = '2.0.1010';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzIuMC4xMDEwJztcbiJdfQ==
5
+ export const VERSION = '2.0.1011';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzIuMC4xMDExJztcbiJdfQ==
@@ -54,7 +54,7 @@ import 'prismjs/components/prism-json';
54
54
  * Current version of valtech-components.
55
55
  * This is automatically updated during the publish process.
56
56
  */
57
- const VERSION = '2.0.1010';
57
+ const VERSION = '2.0.1011';
58
58
 
59
59
  // Control de estado de refresco (singleton a nivel de módulo)
60
60
  let isRefreshing = false;
@@ -41642,13 +41642,24 @@ class PageRefreshService {
41642
41642
  this.hasHandler.set(false);
41643
41643
  }
41644
41644
  /**
41645
- * Ejecuta el handler registrado y espera a que termine. Lo invoca
41646
- * `val-page-wrapper` al detectar el gesto de pull. No-op si no hay handler.
41645
+ * Duración mínima (ms) que el spinner permanece visible, aunque el handler
41646
+ * termine antes. Sin esto, un reload rápido (data cacheada) cierra el spinner
41647
+ * al instante → se percibe como "no hubo refresh". Con el mínimo, el gesto se
41648
+ * siente smooth y CONSISTENTE en todas las vistas que usan el page-wrapper.
41649
+ */
41650
+ static { this.MIN_SPINNER_MS = 500; }
41651
+ /**
41652
+ * Ejecuta el handler registrado y espera a que termine, garantizando una
41653
+ * duración mínima de spinner. Lo invoca `val-page-wrapper` al detectar el
41654
+ * gesto de pull. No-op si no hay handler.
41647
41655
  */
41648
41656
  async run() {
41649
41657
  if (!this.handler)
41650
41658
  return;
41651
- await this.handler();
41659
+ const minDelay = new Promise(resolve => setTimeout(resolve, PageRefreshService.MIN_SPINNER_MS));
41660
+ // Espera AMBOS: el trabajo real + el mínimo visual. Si el handler tarda más,
41661
+ // manda el handler; si es instantáneo, el spinner igual se ve ~500ms.
41662
+ await Promise.all([Promise.resolve(this.handler()), minDelay]);
41652
41663
  }
41653
41664
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PageRefreshService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
41654
41665
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PageRefreshService, providedIn: 'root' }); }