@randstad-uca/design-system 1.0.58 → 1.0.60

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.
@@ -5,13 +5,16 @@ export declare class DatePickerComponent extends BaseControl {
5
5
  isRenderClearButton: boolean;
6
6
  minDate?: string;
7
7
  maxDate?: string;
8
+ eighteenOrOlder: boolean;
8
9
  private isOpen;
9
10
  private selectedDate;
10
11
  private viewDate;
11
12
  private isMobile;
12
13
  private calendarWidth;
14
+ private inputValue;
13
15
  private inputContainer;
14
16
  static styles: import("lit").CSSResult;
17
+ private setMessageErrorFormatInvalid;
15
18
  /**
16
19
  * Ciclo de vida: se ejecuta al conectar el componente al DOM.
17
20
  * Inicializa el modo responsivo y listeners globales.
@@ -30,7 +33,7 @@ export declare class DatePickerComponent extends BaseControl {
30
33
  /**
31
34
  * Ciclo de vida: se llama después de cada actualización.
32
35
  * Se usa para recalcular el ancho si la apertura del calendario ha cambiado.
33
-
36
+
34
37
  * @param changedProperties - Mapa de propiedades que han cambiado.
35
38
  */
36
39
  updated(changedProperties: Map<string, any>): void;
@@ -46,7 +49,7 @@ export declare class DatePickerComponent extends BaseControl {
46
49
  /**
47
50
  * Maneja el evento de entrada del usuario en el input.
48
51
  * Valida el formato de la fecha y actualiza el estado del componente.
49
-
52
+
50
53
  * @param e - Objeto de evento de entrada.
51
54
  */
52
55
  handleInput(e: Event): void;
@@ -59,7 +62,7 @@ export declare class DatePickerComponent extends BaseControl {
59
62
  private handleClickOutside;
60
63
  /**
61
64
  * Abre o cierra el calendario al hacer clic en el botón de calendario.
62
-
65
+
63
66
  * @param e - Objeto de evento del clic.
64
67
  */
65
68
  handleCalendarButtonClick(e: Event): void;
@@ -73,14 +76,14 @@ export declare class DatePickerComponent extends BaseControl {
73
76
  private handleDateSelect;
74
77
  /**
75
78
  * Maneja el cambio de la fecha de vista en el calendario.
76
-
79
+
77
80
  * @param e - Objeto de evento con la nueva fecha de vista.
78
81
  */
79
82
  private handleViewDateChange;
80
83
  /**
81
84
  * Cierra el calendario y actualiza el valor del componente.
82
85
  * Emite un evento 'date-selected' con el valor de la fecha seleccionada.
83
-
86
+
84
87
  * @param valueSet - La fecha en formato de cadena (ej: 'dd-MM-yyyy') a establecer.
85
88
  */
86
89
  private closeOverlay;
@@ -88,17 +91,25 @@ export declare class DatePickerComponent extends BaseControl {
88
91
  * Analiza la propiedad 'value' externa y actualiza el estado interno del componente.
89
92
  * Se ejecuta cuando una propiedad cambia desde fuera (p. ej., Storybook, componente padre).
90
93
  * No emite eventos ni interactúa con el DOM para evitar bucles de renderizado.
91
-
94
+
92
95
  * @param value La cadena de fecha pasada desde una propiedad externa.
93
96
  */
94
97
  private _syncValue;
95
98
  /**
96
- * Valida la entrada del usuario en el campo de texto.
99
+ * Valida una fecha basándose en las reglas del componente.
100
+ * Esto incluye la validación de edad y el rango de fechas.
97
101
 
102
+ * @param date - El objeto Date a validar.
103
+ * @returns `true` si la fecha es válida, `false` de lo contrario.
104
+ */
105
+ private _validateDate;
106
+ /**
107
+ * Valida la entrada del usuario en el campo de texto.
108
+
98
109
  * Este método se llama con cada pulsación de tecla o cambio en el input.
99
110
  * Se encarga de validar el formato, verificar si la fecha está dentro de los límites
100
111
  * y de actualizar el estado de error y el valor del input.
101
-
112
+
102
113
  * @param value La cadena de fecha que el usuario ha introducido.
103
114
  * @param fromInput Indica si la llamada proviene directamente de la interacción del usuario.
104
115
  */
@@ -107,7 +118,7 @@ export declare class DatePickerComponent extends BaseControl {
107
118
  * Intenta analizar una cadena de fecha en múltiples formatos.
108
119
  * Este método es la fuente de la verdad para el análisis de fechas.
109
120
  * Soporta los formatos 'dd-MM-yyyy' y 'yyyy-MM-dd', retornando un objeto Date.
110
-
121
+
111
122
  * @param dateString La cadena de fecha a analizar.
112
123
  * @returns Un objeto Date si es válido, de lo contrario, null.
113
124
  */
@@ -115,24 +126,24 @@ export declare class DatePickerComponent extends BaseControl {
115
126
  /**
116
127
  * Analiza una cadena de fecha con formato 'yyyy-MM-dd'.
117
128
  * Este método auxiliar ayuda a procesar la propiedad minDate y maxDate.
118
-
129
+
119
130
  * @param dateString La cadena de fecha en formato 'yyyy-MM-dd'.
120
-
131
+
121
132
  * @returns Un objeto Date si es válido, de lo contrario, null.
122
133
  */
123
134
  private _parseDateString;
124
135
  /**
125
136
  * Retorna el rango de fechas válido del componente.
126
137
  * Analiza las propiedades 'minDate' y 'maxDate' para determinar el rango permitido.
127
-
138
+
128
139
  * @returns Un objeto con las fechas mínima y máxima, o null si no se define un rango.
129
140
  */
130
141
  private _getValidDateRange;
131
142
  /**
132
143
  * Verifica si una fecha dada está dentro del rango permitido.
133
-
144
+
134
145
  * @param date La fecha a verificar.
135
-
146
+
136
147
  * @returns Verdadero si la fecha está dentro de los límites, de lo contrario, falso.
137
148
  */
138
149
  private _isWithinBounds;
package/dist/index.js CHANGED
@@ -3300,7 +3300,7 @@ const Yt=o`@layer{:host{display:inline-flex;height:var(--md-radio-icon-size, 20p
3300
3300
  <div class="calendar-container" style="width: ${this.calendarWidth}px;">
3301
3301
  ${i}
3302
3302
  </div>
3303
- `}};a([A({type:Object}),s("design:type",Object)],si.prototype,"selectedDate",void 0),a([A({type:Object}),s("design:type",Date)],si.prototype,"viewDate",void 0),a([A({type:Boolean}),s("design:type",Object)],si.prototype,"isMobile",void 0),a([A({type:Number}),s("design:type",Number)],si.prototype,"calendarWidth",void 0),a([A({type:Object}),s("design:type",Object)],si.prototype,"minDate",void 0),a([A({type:Object}),s("design:type",Object)],si.prototype,"maxDate",void 0),a([T(),s("design:type",String)],si.prototype,"currentView",void 0),si=a([d("calendar-overlay")],si);let di=class extends L{constructor(){super(...arguments),this.isRenderClearButton=!0,this.isOpen=!1,this.selectedDate=null,this.viewDate=new Date,this.isMobile=!1,this.calendarWidth=0,this.updateResponsiveModeBound=this.updateResponsiveMode.bind(this),this.handleClickOutside=t=>{t.composedPath().includes(this)||(this.isOpen=!1)}}static{this.styles=o`
3303
+ `}};a([A({type:Object}),s("design:type",Object)],si.prototype,"selectedDate",void 0),a([A({type:Object}),s("design:type",Date)],si.prototype,"viewDate",void 0),a([A({type:Boolean}),s("design:type",Object)],si.prototype,"isMobile",void 0),a([A({type:Number}),s("design:type",Number)],si.prototype,"calendarWidth",void 0),a([A({type:Object}),s("design:type",Object)],si.prototype,"minDate",void 0),a([A({type:Object}),s("design:type",Object)],si.prototype,"maxDate",void 0),a([T(),s("design:type",String)],si.prototype,"currentView",void 0),si=a([d("calendar-overlay")],si);let di=class extends L{constructor(){super(...arguments),this.isRenderClearButton=!0,this.eighteenOrOlder=!1,this.isOpen=!1,this.selectedDate=null,this.viewDate=new Date,this.isMobile=!1,this.calendarWidth=0,this.inputValue=null,this.updateResponsiveModeBound=this.updateResponsiveMode.bind(this),this.handleClickOutside=t=>{t.composedPath().includes(this)||(this.isOpen=!1)}}static{this.styles=o`
3304
3304
  ${X}
3305
3305
  ${Q}
3306
3306
  ${K}
@@ -3401,19 +3401,19 @@ const Yt=o`@layer{:host{display:inline-flex;height:var(--md-radio-icon-size, 20p
3401
3401
  .calendar-button randstad-icon {
3402
3402
  font-size: 18px;
3403
3403
  }
3404
- `}connectedCallback(){super.connectedCallback(),this.updateResponsiveMode(),window.addEventListener("resize",this.updateResponsiveModeBound),document.addEventListener("click",this.handleClickOutside)}disconnectedCallback(){window.removeEventListener("resize",this.updateResponsiveModeBound),document.removeEventListener("click",this.handleClickOutside),super.disconnectedCallback()}firstUpdated(){this.setInitialWidth()}updated(t){t.has("value")&&this._syncValue(this.value),(t.has("isOpen")||t.has("value"))&&this.setInitialWidth(),super.updated(t)}setInitialWidth(){this.inputContainer&&(this.calendarWidth=this.inputContainer.getBoundingClientRect().width)}updateResponsiveMode(){this.isMobile=window.innerWidth<=940,this.setInitialWidth()}handleInput(t){const e=t.target;this._parseAndValidateDate(e.value,!0)}handleCalendarButtonClick(t){this.disabled||(t.stopPropagation(),this.isOpen=!this.isOpen,this.selectedDate?this.viewDate=this.selectedDate:this.viewDate=new Date,this.requestUpdate())}handleClearDate(){this.selectedDate=null,this.error=!1,this.errorMessage=null,this.closeOverlay(null)}handleDateSelect(t){const e=t.detail.date;e&&(this.selectedDate=e,this.viewDate=e,this.closeOverlay(Je(e,"dd-MM-yyyy")))}handleViewDateChange(t){this.viewDate=t.detail.date}closeOverlay(t){this.value=t,this.dispatchEvent(new CustomEvent("date-selected",{detail:{value:t}})),this.isOpen=!1}_syncValue(t){if(""===t||null===t)return void(this.error||(this.selectedDate=null,this.errorMessage=null));const e=this._parseDate(t);e&&this._isWithinBounds(e)?(this.selectedDate=e,this.viewDate=e,this.error=!1,this.errorMessage=null,this.value=Je(e,"dd-MM-yyyy")):(this.selectedDate=null,this.error=!0,this.errorMessage="Formato de fecha no válido o fuera de rango. Se esperaba 'dd-MM-yyyy'.")}_parseAndValidateDate(t,e){if(this.disabled)return;if(""===t||null===t)return this.selectedDate=null,this.error=!1,this.errorMessage=null,void(e&&this.closeOverlay(null));const i=this._parseDate(t);if(i)if(this._isWithinBounds(i))this.selectedDate=i,this.viewDate=i,this.error=!1,this.errorMessage=null,e&&this.closeOverlay(Je(i,"dd-MM-yyyy"));else{this.error=!0;const t=this._getValidDateRange();this.errorMessage=`La fecha debe estar entre ${t?.minDate?Je(t.minDate,"dd-MM-yyyy"):"el inicio de los tiempos"} y ${t?.maxDate?Je(t.maxDate,"dd-MM-yyyy"):"el fin de los tiempos"}.`,e&&this.closeOverlay(null),console.error("La fecha está fuera del rango permitido.")}else this.error=!0,this.errorMessage="Formato de fecha no válido. Se esperaba 'dd-MM-yyyy' o 'yyyy-MM-dd'.",e&&this.closeOverlay(null),console.error("Formato de fecha no válido.")}_parseDate(t){const e=t.split("-").map(Number);if(3===e.length){const[i,o,r]=e;if(i&&o&&r&&o>=1&&o<=12&&r>1e3){const e=new Date(r,o-1,i,12);if(me(e)&&Je(e,"dd-MM-yyyy")===t)return e}}const i=t.split("-").map(Number);if(3===i.length){const[e,o,r]=i;if(e&&o&&r&&o>=1&&o<=12&&e>1e3){const i=new Date(e,o-1,r,12);if(me(i)&&Je(i,"yyyy-MM-dd")===t)return i}}return null}_parseDateString(t){if(!t)return null;const e=t.split("-").map(Number);if(3===e.length&&!isNaN(e[0])&&!isNaN(e[1])&&!isNaN(e[2])){return new Date(e[0],e[1]-1,e[2],12)}return null}_getValidDateRange(){const t=this._parseDateString(this.minDate),e=this._parseDateString(this.maxDate);return t||e?t&&e&&ii(t,e)?null:{minDate:t,maxDate:e}:{minDate:null,maxDate:null}}_isWithinBounds(t){const e=this._getValidDateRange();return!e||(!e.minDate||!oi(t,e.minDate))&&(!e.maxDate||!ii(t,e.maxDate))}render(){const t=n({"input-wrapper":!0,active:this.isOpen,error:this.error,disabled:this.disabled}),o=`width: ${this.width||"100%"};`,r=this._getValidDateRange();return e`
3404
+ `}setMessageErrorFormatInvalid(){return"formato de fecha inválido, se esperaba 'dd-MM-yyyy'"}connectedCallback(){super.connectedCallback(),this.updateResponsiveMode(),window.addEventListener("resize",this.updateResponsiveModeBound),document.addEventListener("click",this.handleClickOutside)}disconnectedCallback(){window.removeEventListener("resize",this.updateResponsiveModeBound),document.removeEventListener("click",this.handleClickOutside),super.disconnectedCallback()}firstUpdated(){this.setInitialWidth()}updated(t){t.has("value")&&this._syncValue(this.value),(t.has("isOpen")||t.has("value"))&&this.setInitialWidth(),super.updated(t)}setInitialWidth(){this.inputContainer&&(this.calendarWidth=this.inputContainer.getBoundingClientRect().width)}updateResponsiveMode(){this.isMobile=window.innerWidth<=940,this.setInitialWidth()}handleInput(t){const e=t.target;this.inputValue=e.value,this._parseAndValidateDate(e.value,!0)}handleCalendarButtonClick(t){this.disabled||(t.stopPropagation(),this.isOpen=!this.isOpen,this.selectedDate?this.viewDate=this.selectedDate:this.viewDate=new Date,this.requestUpdate())}handleClearDate(){this.inputValue=null,this.selectedDate=null,this.error=!1,this.errorMessage=null,this.closeOverlay(null)}handleDateSelect(t){const e=t.detail.date;if(!e)return;if(this._validateDate(e)){this.selectedDate=e,this.viewDate=e;const t=Je(e,"dd-MM-yyyy");this.inputValue=t,this.closeOverlay(t)}else{const t=Je(e,"dd-MM-yyyy");this.inputValue=t,this.selectedDate=null,this.closeOverlay(null)}}handleViewDateChange(t){this.viewDate=t.detail.date}closeOverlay(t){this.value=t,this.dispatchEvent(new CustomEvent("date-selected",{detail:{value:t}})),this.isOpen=!1}_syncValue(t){if(""===t||null===t)return void(this.error||(this.selectedDate=null,this.inputValue=null,this.errorMessage=null));const e=this._parseDate(t);e&&this._validateDate(e)?(this.selectedDate=e,this.viewDate=e,this.error=!1,this.errorMessage=null,this.value=Je(e,"dd-MM-yyyy"),this.inputValue=this.value):this.selectedDate=e}_validateDate(t){if(!t)return!1;if(this.error=!1,this.errorMessage=null,this.eighteenOrOlder){const e=function(t,e,i){return be(t,-18,i)}(new Date);if(ii(t,e))return this.error=!0,this.errorMessage="tenés que ser mayor de 18 años",!1}if(!this._isWithinBounds(t)){const t=this._getValidDateRange();return this.error=!0,this.errorMessage=`la fecha debe estar entre ${t?.minDate?Je(t.minDate,"dd-MM-yyyy"):""} y ${t?.maxDate?Je(t.maxDate,"dd-MM-yyyy"):""}.`,!1}return!0}_parseAndValidateDate(t,e){if(this.disabled)return;if(""===t||null===t)return this.selectedDate=null,this.error=!1,this.errorMessage=null,void(e&&this.closeOverlay(null));const i=this._parseDate(t);if(i){this._validateDate(i)?(this.selectedDate=i,this.viewDate=i,this.error=!1,this.errorMessage=null,e&&this.closeOverlay(Je(i,"dd-MM-yyyy"))):(this.error=!0,this.selectedDate=null,e&&this.closeOverlay(null))}else this.error=!0,this.errorMessage=this.setMessageErrorFormatInvalid(),this.selectedDate=null,e&&this.closeOverlay(null)}_parseDate(t){const e=t.split("-").map(Number);if(3===e.length){const[i,o,r]=e;if(i&&o&&r&&o>=1&&o<=12&&r>1e3){const e=new Date(r,o-1,i,12);if(me(e)&&Je(e,"dd-MM-yyyy")===t)return e}}const i=t.split("-").map(Number);if(3===i.length){const[e,o,r]=i;if(e&&o&&r&&o>=1&&o<=12&&e>1e3){const i=new Date(e,o-1,r,12);if(me(i)&&Je(i,"yyyy-MM-dd")===t)return i}}return null}_parseDateString(t){if(!t)return null;const e=t.split("-").map(Number);if(3===e.length&&!isNaN(e[0])&&!isNaN(e[1])&&!isNaN(e[2])){return new Date(e[0],e[1]-1,e[2],12)}return null}_getValidDateRange(){const t=this._parseDateString(this.minDate),e=this._parseDateString(this.maxDate);return t||e?t&&e&&ii(t,e)?null:{minDate:t,maxDate:e}:{minDate:null,maxDate:null}}_isWithinBounds(t){const e=this._getValidDateRange();return!e||(!e.minDate||!oi(t,e.minDate))&&(!e.maxDate||!ii(t,e.maxDate))}render(){const t=n({"input-wrapper":!0,active:this.isOpen,error:this.error,disabled:this.disabled}),o=`width: ${this.width||"100%"};`,r=this._getValidDateRange();return e`
3405
3405
  <div class="datepicker-container" style="${this.labelColor?` --label-color: ${this.labelColor}`:""} ${o}">
3406
3406
  ${this.renderLabelContainer()}
3407
3407
 
3408
3408
  <div class="input-container">
3409
3409
  <div class="${t}" style="width: 100%">
3410
3410
  <input
3411
- type="text"
3412
- class="date-input"
3413
- .value="${this.value}"
3414
- placeholder="${this.placeholder}"
3415
- ?disabled=${this.disabled}
3416
- @input=${this.handleInput}
3411
+ type="text"
3412
+ class="date-input"
3413
+ .value="${this.inputValue??""}"
3414
+ placeholder="${this.placeholder}"
3415
+ ?disabled=${this.disabled}
3416
+ @input=${this.handleInput}
3417
3417
  />
3418
3418
 
3419
3419
  ${this.isRenderClearButton&&this.selectedDate&&!this.disabled?e`
@@ -3439,21 +3439,21 @@ const Yt=o`@layer{:host{display:inline-flex;height:var(--md-radio-icon-size, 20p
3439
3439
  .selectedDate=${this.selectedDate}
3440
3440
  .viewDate=${this.viewDate}
3441
3441
  .calendarWidth=${this.calendarWidth}
3442
- .minDate=${r?.minDate}
3443
- .maxDate=${r?.maxDate}
3442
+ .minDate=${r?.minDate}
3443
+ .maxDate=${r?.maxDate}
3444
3444
  @close=${()=>this.isOpen=!1}
3445
3445
  @view-date-change=${this.handleViewDateChange}
3446
3446
  @date-selected=${this.handleDateSelect}
3447
3447
  >
3448
3448
  </calendar-overlay>
3449
3449
  `:i}
3450
-
3450
+
3451
3451
  ${this.renderError()}
3452
3452
  </div>
3453
3453
 
3454
3454
  ${this.renderHelper()}
3455
3455
  </div>
3456
- `}};a([A({type:String}),s("design:type",String)],di.prototype,"width",void 0),a([A({type:Boolean}),s("design:type",Object)],di.prototype,"isRenderClearButton",void 0),a([A({type:String}),s("design:type",String)],di.prototype,"minDate",void 0),a([A({type:String}),s("design:type",String)],di.prototype,"maxDate",void 0),a([T(),s("design:type",Object)],di.prototype,"isOpen",void 0),a([T(),s("design:type",Object)],di.prototype,"selectedDate",void 0),a([T(),s("design:type",Date)],di.prototype,"viewDate",void 0),a([T(),s("design:type",Object)],di.prototype,"isMobile",void 0),a([T(),s("design:type",Number)],di.prototype,"calendarWidth",void 0),a([z(".input-container"),s("design:type",HTMLDivElement)],di.prototype,"inputContainer",void 0),di=a([d("datepicker-component")],di);const li={"application/pdf":"PDF","application/msword":"Word (.doc)","application/vnd.openxmlformats-officedocument.wordprocessingml.document":"Word (.docx)","image/jpeg":"JPEG","image/png":"PNG","text/plain":"Texto (.txt)"};let ci=class extends L{constructor(){super(...arguments),this.files=[],this.maxFiles=1,this.acceptedFileTypes=[],this.maxFileSize=5242880,this.buttonText="Agregar archivo",this.simulatedDelay=0,this.loading=!1,this.progress=0}static{this.styles=o`
3456
+ `}};a([A({type:String}),s("design:type",String)],di.prototype,"width",void 0),a([A({type:Boolean}),s("design:type",Object)],di.prototype,"isRenderClearButton",void 0),a([A({type:String}),s("design:type",String)],di.prototype,"minDate",void 0),a([A({type:String}),s("design:type",String)],di.prototype,"maxDate",void 0),a([A({type:Boolean}),s("design:type",Object)],di.prototype,"eighteenOrOlder",void 0),a([T(),s("design:type",Object)],di.prototype,"isOpen",void 0),a([T(),s("design:type",Object)],di.prototype,"selectedDate",void 0),a([T(),s("design:type",Date)],di.prototype,"viewDate",void 0),a([T(),s("design:type",Object)],di.prototype,"isMobile",void 0),a([T(),s("design:type",Number)],di.prototype,"calendarWidth",void 0),a([T(),s("design:type",Object)],di.prototype,"inputValue",void 0),a([z(".input-container"),s("design:type",HTMLDivElement)],di.prototype,"inputContainer",void 0),di=a([d("datepicker-component")],di);const li={"application/pdf":"PDF","application/msword":"Word (.doc)","application/vnd.openxmlformats-officedocument.wordprocessingml.document":"Word (.docx)","image/jpeg":"JPEG","image/png":"PNG","text/plain":"Texto (.txt)"};let ci=class extends L{constructor(){super(...arguments),this.files=[],this.maxFiles=1,this.acceptedFileTypes=[],this.maxFileSize=5242880,this.buttonText="Agregar archivo",this.simulatedDelay=0,this.loading=!1,this.progress=0}static{this.styles=o`
3457
3457
  ${X}
3458
3458
  ${Q}
3459
3459
  ${K}
@@ -3514,7 +3514,7 @@ const Yt=o`@layer{:host{display:inline-flex;height:var(--md-radio-icon-size, 20p
3514
3514
  .progress-bar {
3515
3515
  width: 100%;
3516
3516
  }
3517
- `}updated(t){super.updated(t),this.applyWidth()}applyWidth(){this.width&&this.style.setProperty("--upload-file-width",this.width)}getReadableFileTypes(){const t=this.acceptedFileTypes.map((t=>li[t]||t));if(t.length<=1)return t.join("");const e=t.pop();return`${t.join(", ")} y ${e}`}validateFiles(t){const e=this.maxFileSize/1024/1024;for(const i of t){if(this.acceptedFileTypes.length>0&&!this.acceptedFileTypes.includes(i.type))return this.errorMessage=`Formato de archivo no válido. Se aceptan: ${this.getReadableFileTypes()}.`,!1;if(i.size>this.maxFileSize)return this.errorMessage=`El archivo es demasiado grande. El tamaño máximo es de ${e}MB.`,!1}return!0}async handleFiles(t){if(this.error=!1,this.errorMessage=null,!t||this.disabled||this.loading)return;const e=Number.isFinite(this.maxFiles)&&this.maxFiles>0?this.maxFiles:1,i=Array.from(t),o=e-this.files.length;if(o<=0)return this.error=!0,void(this.errorMessage=`Se ha alcanzado el número máximo de archivos (${e}).`);const r=i.slice(0,o);if(!this.validateFiles(r))return void(this.error=!0);const n=this.simulatedDelay??0;if(n<=0)return this.files=[...this.files,...r],void this.dispatchEvent(new CustomEvent("files-changed",{detail:this.files}));this.loading=!0,this.progress=0,await this.updateComplete;const a=Date.now(),s=setInterval((()=>{const t=Date.now()-a,e=Math.min(Math.round(t/n*100),100);this.progress=e,this.progress>=100&&(clearInterval(s),this.files=[...this.files,...r],this.loading=!1,this.progress=0,this.dispatchEvent(new CustomEvent("files-changed",{detail:this.files})))}),10);this.fileInput&&(this.fileInput.value="")}onFileInputChange(t){const e=t.target;this.handleFiles(e.files),this.fileInput&&(this.fileInput.value="")}removeFile(t){this.files=this.files.filter(((e,i)=>i!==t)),this.dispatchEvent(new CustomEvent("files-changed",{detail:this.files})),0===this.files.length&&(this.error=!1,this.errorMessage=null)}render(){const t=this.files.length>=this.maxFiles,o=this.disabled||t;return e`
3517
+ `}updated(t){super.updated(t),this.applyWidth()}applyWidth(){this.width&&this.style.setProperty("--upload-file-width",this.width)}getReadableFileTypes(){const t=this.acceptedFileTypes.map((t=>li[t]||t));if(t.length<=1)return t.join("");const e=t.pop();return`${t.join(", ")} y ${e}`}validateFiles(t){const e=this.maxFileSize/1024/1024;for(const i of t){if(this.acceptedFileTypes.length>0&&!this.acceptedFileTypes.includes(i.type))return this.errorMessage=`formato de archivo no válido, se aceptan: ${this.getReadableFileTypes()}`,!1;if(i.size>this.maxFileSize)return this.errorMessage=`el archivo es demasiado grande, el máximo es de ${e}MB`,!1}return!0}async handleFiles(t){if(this.error=!1,this.errorMessage=null,!t||this.disabled||this.loading)return;const e=Number.isFinite(this.maxFiles)&&this.maxFiles>0?this.maxFiles:1,i=Array.from(t),o=e-this.files.length;if(o<=0)return this.error=!0,void(this.errorMessage=`se ha alcanzado el número máximo de archivos (${e}).`);const r=i.slice(0,o);if(!this.validateFiles(r))return void(this.error=!0);const n=this.simulatedDelay??0;if(n<=0)return this.files=[...this.files,...r],void this.dispatchEvent(new CustomEvent("files-changed",{detail:this.files}));this.loading=!0,this.progress=0,await this.updateComplete;const a=Date.now(),s=setInterval((()=>{const t=Date.now()-a,e=Math.min(Math.round(t/n*100),100);this.progress=e,this.progress>=100&&(clearInterval(s),this.files=[...this.files,...r],this.loading=!1,this.progress=0,this.dispatchEvent(new CustomEvent("files-changed",{detail:this.files})))}),10);this.fileInput&&(this.fileInput.value="")}onFileInputChange(t){const e=t.target;this.handleFiles(e.files),this.fileInput&&(this.fileInput.value="")}removeFile(t){this.files=this.files.filter(((e,i)=>i!==t)),this.dispatchEvent(new CustomEvent("files-changed",{detail:this.files})),0===this.files.length&&(this.error=!1,this.errorMessage=null)}render(){const t=this.files.length>=this.maxFiles,o=this.disabled||t;return e`
3518
3518
  <div class="file-container" style="${this.labelColor?`--label-color: ${this.labelColor};`:""}">
3519
3519
  ${this.renderLabelContainer()}
3520
3520