@xosue-utils/inputs 0.1.0 → 0.1.3

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.
@@ -1,14 +1,15 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { InjectionToken, input, booleanAttribute, computed, Component, PLATFORM_ID, Inject, Injectable, inject, Input, ChangeDetectorRef, ElementRef, forwardRef, HostBinding, ChangeDetectionStrategy, HostListener, ViewChild, EventEmitter, Output, ViewChildren, Directive, Pipe } from '@angular/core';
3
+ import { LucideDynamicIcon } from '@lucide/angular';
3
4
  import * as i1 from '@angular/common';
4
5
  import { isPlatformBrowser, CommonModule } from '@angular/common';
5
6
  import * as i2$1 from '@angular/forms';
6
7
  import { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';
7
- import { LucideDynamicIcon } from '@lucide/angular';
8
8
  import { Subject, BehaviorSubject, debounceTime, distinctUntilChanged, switchMap, of, catchError } from 'rxjs';
9
9
  import * as i1$1 from '@angular/common/http';
10
10
  import { HttpClient, HttpHeaders } from '@angular/common/http';
11
11
  import * as i2 from '@angular/router';
12
+ import { RouterModule } from '@angular/router';
12
13
  import { DateTime } from 'luxon';
13
14
  import { DecoratorNode, createEditor, SELECTION_CHANGE_COMMAND, COMMAND_PRIORITY_LOW, CAN_UNDO_COMMAND, CAN_REDO_COMMAND, FORMAT_ELEMENT_COMMAND, $getSelection, $isRangeSelection, FORMAT_TEXT_COMMAND, REDO_COMMAND, UNDO_COMMAND, $getNodeByKey, $getRoot, $createParagraphNode, $createTextNode } from 'lexical';
14
15
  import { $generateNodesFromDOM, $generateHtmlFromNodes } from '@lexical/html';
@@ -11104,6 +11105,951 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImpo
11104
11105
  args: ['sortableContainer', { static: false }]
11105
11106
  }] } });
11106
11107
 
11108
+ class OnlySelectModalServiceComponent {
11109
+ onlySelectModal;
11110
+ cdr;
11111
+ vm$;
11112
+ sub;
11113
+ constructor(onlySelectModal, cdr) {
11114
+ this.onlySelectModal = onlySelectModal;
11115
+ this.cdr = cdr;
11116
+ this.vm$ = this.onlySelectModal.state$;
11117
+ }
11118
+ ngOnInit() {
11119
+ this.sub = this.onlySelectModal.state$.subscribe(() => this.cdr.markForCheck());
11120
+ }
11121
+ ngOnDestroy() {
11122
+ this.sub?.unsubscribe();
11123
+ }
11124
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: OnlySelectModalServiceComponent, deps: [{ token: OnlySelectModalService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
11125
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.11", type: OnlySelectModalServiceComponent, isStandalone: true, selector: "only-select-modal-service", ngImport: i0, template: "<ng-container *ngIf=\"vm$ | async as session\">\r\n <div class=\"Backdrop\" (click)=\"session.handlers.onBackdropClick($event)\">\r\n <div class=\"Picker\" (click)=\"$event.stopPropagation()\">\r\n <ng-container *ngIf=\"session.view.shouldShowSearch\">\r\n <div class=\"SearchContainer\">\r\n <input\r\n type=\"text\"\r\n class=\"SearchInput NativeInput\"\r\n [value]=\"session.view.searchQuery\"\r\n (input)=\"session.handlers.onSearchInput($event)\"\r\n placeholder=\"Buscar\"\r\n (click)=\"$event.stopPropagation()\"\r\n />\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"OptionsList\">\r\n <div *ngIf=\"session.view.isLoading && !session.view.isSearching\" class=\"LoadingState\">\r\n <lucide-icon name=\"loader-circle\" [spin]=\"true\"></lucide-icon>\r\n <span>Cargando...</span>\r\n </div>\r\n\r\n <div *ngIf=\"session.view.isSearching && !session.view.isLoading\" class=\"LoadingState\">\r\n <lucide-icon name=\"loader-circle\" [spin]=\"true\"></lucide-icon>\r\n <span>Buscando...</span>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"!session.view.isLoading && !session.view.isSearching && session.view.filteredOptions.length === 0\"\r\n class=\"EmptyOptionsMessage\"\r\n role=\"status\"\r\n >\r\n {{ session.view.noOptionsMessage }}\r\n </div>\r\n\r\n <div\r\n *ngFor=\"let option of session.view.filteredOptions\"\r\n class=\"Option\"\r\n (click)=\"session.handlers.onOptionSelect(option)\"\r\n >\r\n <label>\r\n <div class=\"Details\">\r\n <div\r\n class=\"Color\"\r\n *ngIf=\"option.color\"\r\n [style.backgroundColor]=\"option.color\"\r\n ></div>\r\n <div class=\"Image\" *ngIf=\"option.image\">\r\n <img [src]=\"option.image\" alt=\"\" />\r\n </div>\r\n <div class=\"Info\">\r\n <span class=\"Name\">{{ option.name }}</span>\r\n <span class=\"Description\" *ngIf=\"option.description\">{{\r\n option.description\r\n }}</span>\r\n </div>\r\n </div>\r\n <lucide-icon\r\n class=\"CheckIcon\"\r\n [class.Selected]=\"session.view.selectedOption?.value === option.value\"\r\n [name]=\"session.view.selectedOption?.value === option.value ? 'check' : 'x'\"\r\n ></lucide-icon>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: [":host{display:contents}.Backdrop{position:fixed;top:0;left:0;z-index:10050;display:flex;justify-content:center;align-items:center;width:100%;height:100%;padding:12px;background:var(--overlay-scrim);overflow:hidden}@media (width <= 768px){.Backdrop{align-items:flex-start}}.Backdrop .Picker{display:flex;flex-direction:column;gap:5px;width:100%;max-width:600px;max-height:100%;margin:0 auto;background:var(--surface);border-radius:var(--radius-xl);padding:12px;overflow-y:auto;box-shadow:0 0 8px var(--shadow-color);overflow:hidden}.Backdrop .Picker .SearchContainer{width:100%;height:max-content}.Backdrop .Picker .SearchContainer .SearchInput{width:100%;height:32px;border-radius:var(--radius-md);padding:0 8px}.Backdrop .Picker .OptionsList{width:100%;display:flex;flex-direction:column;overflow:hidden;overflow-y:auto}.Backdrop .Picker .OptionsList .Option{width:100%;min-height:max-content;display:flex;justify-content:flex-start;align-items:center}.Backdrop .Picker .OptionsList .Option label{position:relative;width:100%;height:100%;padding:8px;display:flex;align-items:center;cursor:pointer;border-radius:var(--radius-md)}.Backdrop .Picker .OptionsList .Option label:hover{background-color:var(--surface-2)}.Backdrop .Picker .OptionsList .Option label [type=checkbox]{display:none}.Backdrop .Picker .OptionsList .Option label .Details{pointer-events:none;display:flex;align-items:center;gap:5px}.Backdrop .Picker .OptionsList .Option label .Details .Color{width:20px;min-width:20px;height:20px;min-height:20px;border-radius:100px;overflow:hidden}.Backdrop .Picker .OptionsList .Option label .Details .Image{width:35px;min-width:35px;height:35px;min-height:35px;border-radius:100px;overflow:hidden}.Backdrop .Picker .OptionsList .Option label .Details .Image img{width:100%;height:100%;object-fit:cover}.Backdrop .Picker .OptionsList .Option label .Details .Info{display:flex;flex-direction:column}.Backdrop .Picker .OptionsList .Option label .Details .Info .Name{display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.Backdrop .Picker .OptionsList .Option label .Details .Info .Description{margin:0;padding:0;width:100%;font-size:.9rem;color:var(--text-muted);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.Backdrop .Picker .OptionsList .Option label .CheckIcon{width:30px;height:100%;padding:5px;display:flex;justify-content:center;align-items:center;margin-left:auto;color:var(--text-muted)}.Backdrop .Picker .OptionsList .Option label .CheckIcon lucide-icon .lucide-icon-svg{width:1rem;height:1rem}.Backdrop .Picker .OptionsList .Option label .CheckIcon.Selected{color:var(--text-primary)}.LoadingState{display:flex;align-items:center;justify-content:center;gap:8px;padding:var(--spacing-lg);color:var(--text-muted);font-size:.9rem}.LoadingState .fa-spinner{animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.EmptyOptionsMessage{padding:var(--spacing-lg);text-align:center;color:var(--muted-text, var(--text-muted));font-weight:700;font-size:.9rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "component", type: LucideIconComponent, selector: "lucide-icon", inputs: ["name", "size", "spin", "filled"] }] });
11126
+ }
11127
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: OnlySelectModalServiceComponent, decorators: [{
11128
+ type: Component,
11129
+ args: [{ selector: 'only-select-modal-service', standalone: true, imports: [CommonModule, LucideIconComponent], template: "<ng-container *ngIf=\"vm$ | async as session\">\r\n <div class=\"Backdrop\" (click)=\"session.handlers.onBackdropClick($event)\">\r\n <div class=\"Picker\" (click)=\"$event.stopPropagation()\">\r\n <ng-container *ngIf=\"session.view.shouldShowSearch\">\r\n <div class=\"SearchContainer\">\r\n <input\r\n type=\"text\"\r\n class=\"SearchInput NativeInput\"\r\n [value]=\"session.view.searchQuery\"\r\n (input)=\"session.handlers.onSearchInput($event)\"\r\n placeholder=\"Buscar\"\r\n (click)=\"$event.stopPropagation()\"\r\n />\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"OptionsList\">\r\n <div *ngIf=\"session.view.isLoading && !session.view.isSearching\" class=\"LoadingState\">\r\n <lucide-icon name=\"loader-circle\" [spin]=\"true\"></lucide-icon>\r\n <span>Cargando...</span>\r\n </div>\r\n\r\n <div *ngIf=\"session.view.isSearching && !session.view.isLoading\" class=\"LoadingState\">\r\n <lucide-icon name=\"loader-circle\" [spin]=\"true\"></lucide-icon>\r\n <span>Buscando...</span>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"!session.view.isLoading && !session.view.isSearching && session.view.filteredOptions.length === 0\"\r\n class=\"EmptyOptionsMessage\"\r\n role=\"status\"\r\n >\r\n {{ session.view.noOptionsMessage }}\r\n </div>\r\n\r\n <div\r\n *ngFor=\"let option of session.view.filteredOptions\"\r\n class=\"Option\"\r\n (click)=\"session.handlers.onOptionSelect(option)\"\r\n >\r\n <label>\r\n <div class=\"Details\">\r\n <div\r\n class=\"Color\"\r\n *ngIf=\"option.color\"\r\n [style.backgroundColor]=\"option.color\"\r\n ></div>\r\n <div class=\"Image\" *ngIf=\"option.image\">\r\n <img [src]=\"option.image\" alt=\"\" />\r\n </div>\r\n <div class=\"Info\">\r\n <span class=\"Name\">{{ option.name }}</span>\r\n <span class=\"Description\" *ngIf=\"option.description\">{{\r\n option.description\r\n }}</span>\r\n </div>\r\n </div>\r\n <lucide-icon\r\n class=\"CheckIcon\"\r\n [class.Selected]=\"session.view.selectedOption?.value === option.value\"\r\n [name]=\"session.view.selectedOption?.value === option.value ? 'check' : 'x'\"\r\n ></lucide-icon>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: [":host{display:contents}.Backdrop{position:fixed;top:0;left:0;z-index:10050;display:flex;justify-content:center;align-items:center;width:100%;height:100%;padding:12px;background:var(--overlay-scrim);overflow:hidden}@media (width <= 768px){.Backdrop{align-items:flex-start}}.Backdrop .Picker{display:flex;flex-direction:column;gap:5px;width:100%;max-width:600px;max-height:100%;margin:0 auto;background:var(--surface);border-radius:var(--radius-xl);padding:12px;overflow-y:auto;box-shadow:0 0 8px var(--shadow-color);overflow:hidden}.Backdrop .Picker .SearchContainer{width:100%;height:max-content}.Backdrop .Picker .SearchContainer .SearchInput{width:100%;height:32px;border-radius:var(--radius-md);padding:0 8px}.Backdrop .Picker .OptionsList{width:100%;display:flex;flex-direction:column;overflow:hidden;overflow-y:auto}.Backdrop .Picker .OptionsList .Option{width:100%;min-height:max-content;display:flex;justify-content:flex-start;align-items:center}.Backdrop .Picker .OptionsList .Option label{position:relative;width:100%;height:100%;padding:8px;display:flex;align-items:center;cursor:pointer;border-radius:var(--radius-md)}.Backdrop .Picker .OptionsList .Option label:hover{background-color:var(--surface-2)}.Backdrop .Picker .OptionsList .Option label [type=checkbox]{display:none}.Backdrop .Picker .OptionsList .Option label .Details{pointer-events:none;display:flex;align-items:center;gap:5px}.Backdrop .Picker .OptionsList .Option label .Details .Color{width:20px;min-width:20px;height:20px;min-height:20px;border-radius:100px;overflow:hidden}.Backdrop .Picker .OptionsList .Option label .Details .Image{width:35px;min-width:35px;height:35px;min-height:35px;border-radius:100px;overflow:hidden}.Backdrop .Picker .OptionsList .Option label .Details .Image img{width:100%;height:100%;object-fit:cover}.Backdrop .Picker .OptionsList .Option label .Details .Info{display:flex;flex-direction:column}.Backdrop .Picker .OptionsList .Option label .Details .Info .Name{display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.Backdrop .Picker .OptionsList .Option label .Details .Info .Description{margin:0;padding:0;width:100%;font-size:.9rem;color:var(--text-muted);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.Backdrop .Picker .OptionsList .Option label .CheckIcon{width:30px;height:100%;padding:5px;display:flex;justify-content:center;align-items:center;margin-left:auto;color:var(--text-muted)}.Backdrop .Picker .OptionsList .Option label .CheckIcon lucide-icon .lucide-icon-svg{width:1rem;height:1rem}.Backdrop .Picker .OptionsList .Option label .CheckIcon.Selected{color:var(--text-primary)}.LoadingState{display:flex;align-items:center;justify-content:center;gap:8px;padding:var(--spacing-lg);color:var(--text-muted);font-size:.9rem}.LoadingState .fa-spinner{animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.EmptyOptionsMessage{padding:var(--spacing-lg);text-align:center;color:var(--muted-text, var(--text-muted));font-weight:700;font-size:.9rem}\n"] }]
11130
+ }], ctorParameters: () => [{ type: OnlySelectModalService }, { type: i0.ChangeDetectorRef }] });
11131
+
11132
+ class MultiselectComboboxModalServiceComponent {
11133
+ multiselectModal;
11134
+ cdr;
11135
+ vm$;
11136
+ sub;
11137
+ constructor(multiselectModal, cdr) {
11138
+ this.multiselectModal = multiselectModal;
11139
+ this.cdr = cdr;
11140
+ this.vm$ = this.multiselectModal.state$;
11141
+ }
11142
+ ngOnInit() {
11143
+ this.sub = this.multiselectModal.state$.subscribe(() => this.cdr.markForCheck());
11144
+ }
11145
+ ngOnDestroy() {
11146
+ this.sub?.unsubscribe();
11147
+ }
11148
+ isSelected(option, selected) {
11149
+ return selected.some((o) => o.value === option.value);
11150
+ }
11151
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: MultiselectComboboxModalServiceComponent, deps: [{ token: MultiselectComboboxModalService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
11152
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.11", type: MultiselectComboboxModalServiceComponent, isStandalone: true, selector: "multiselect-combobox-modal-service", ngImport: i0, template: "<ng-container *ngIf=\"vm$ | async as session\">\r\n <div class=\"Backdrop\" (click)=\"session.handlers.onBackdropClick($event)\">\r\n <div class=\"Picker\" (click)=\"$event.stopPropagation()\">\r\n <div class=\"Close\" (click)=\"session.handlers.onBackdropClick($event); $event.stopPropagation()\">\r\n Cerrar\r\n </div>\r\n\r\n <ng-container *ngIf=\"session.view.selectedOptions.length > 0\">\r\n <div class=\"SelectedOptions\">\r\n <span\r\n *ngFor=\"let option of session.view.selectedOptions\"\r\n class=\"SelectedOption\"\r\n (click)=\"session.handlers.onRemoveSelected(option, $event)\"\r\n >\r\n {{ option.name }}\r\n <span class=\"RemoveIcon\">\u00D7</span>\r\n </span>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"session.view.shouldShowSearch\">\r\n <div class=\"SearchContainer\">\r\n <input\r\n type=\"text\"\r\n class=\"SearchInput NativeInput\"\r\n [value]=\"session.view.searchQuery\"\r\n (input)=\"session.handlers.onSearchInput($event)\"\r\n placeholder=\"Buscar\"\r\n (click)=\"$event.stopPropagation()\"\r\n />\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"OptionsList\">\r\n <div *ngIf=\"session.view.isLoading && !session.view.isSearching\" class=\"LoadingState\">\r\n <lucide-icon name=\"loader-circle\" [spin]=\"true\"></lucide-icon>\r\n <span>Cargando...</span>\r\n </div>\r\n\r\n <div *ngIf=\"session.view.isSearching && !session.view.isLoading\" class=\"LoadingState\">\r\n <lucide-icon name=\"loader-circle\" [spin]=\"true\"></lucide-icon>\r\n <span>Buscando...</span>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"!session.view.isLoading && !session.view.isSearching && session.view.filteredOptions.length === 0\"\r\n class=\"EmptyOptionsMessage\"\r\n role=\"status\"\r\n >\r\n {{ session.view.noOptionsMessage }}\r\n </div>\r\n\r\n <ng-container *ngIf=\"!(session.view.isLoading && !session.view.isSearching)\">\r\n <div *ngFor=\"let option of session.view.filteredOptions\" class=\"Option\">\r\n <label>\r\n <div class=\"Details\">\r\n <div\r\n class=\"Color\"\r\n *ngIf=\"option.color\"\r\n [style.backgroundColor]=\"option.color\"\r\n ></div>\r\n\r\n <div class=\"Image\" *ngIf=\"option.image\">\r\n <img [src]=\"option.image\" alt=\"\" />\r\n </div>\r\n <div class=\"Info\">\r\n <span class=\"Name\">{{ option.name }}</span>\r\n <span class=\"Description\" *ngIf=\"option.description\">{{\r\n option.description\r\n }}</span>\r\n </div>\r\n </div>\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"isSelected(option, session.view.selectedOptions)\"\r\n (change)=\"session.handlers.onOptionToggle(option, $event)\"\r\n />\r\n <lucide-icon\r\n class=\"CheckIcon\"\r\n [class.Selected]=\"isSelected(option, session.view.selectedOptions)\"\r\n [name]=\"isSelected(option, session.view.selectedOptions) ? 'check' : 'x'\"\r\n ></lucide-icon>\r\n </label>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: [":host{display:contents}.Backdrop{position:fixed;top:0;left:0;z-index:10050;display:flex;justify-content:center;align-items:center;width:100%;height:100%;padding:12px;background:var(--overlay-scrim);overflow:hidden}@media (width <= 768px){.Backdrop{align-items:flex-start}}.Backdrop .Picker{display:flex;flex-direction:column;gap:5px;width:100%;max-width:600px;max-height:100%;margin:0 auto;background:var(--surface);border-radius:var(--radius-xl);padding:12px;overflow:hidden;overflow-y:auto;box-shadow:0 0 8px var(--shadow-color)}.Backdrop .Picker .Close{padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--radius-lg);color:var(--btn-cancel-text);border-color:var(--btn-cancel-border);background-color:var(--btn-cancel-bg);width:max-content;margin-left:auto;cursor:pointer}.Backdrop .Picker .Close:hover{color:var(--btn-cancel-text-hover);border-color:var(--btn-cancel-border-hover);background-color:var(--btn-cancel-bg-hover)}.Backdrop .Picker .Close:active{color:var(--btn-cancel-text-active);border-color:var(--btn-cancel-border-active);background-color:var(--btn-cancel-bg-active)}.Backdrop .Picker .SelectedOptions{display:flex;align-items:center;flex-wrap:wrap;gap:5px;border-bottom:solid 1px var(--border);padding:4px}.Backdrop .Picker .SelectedOptions .SelectedOption{background-color:var(--surface-2, var(--border));border-radius:var(--radius-md);width:max-content;height:25px;padding:0 var(--spacing-sm);padding-right:0;display:flex;justify-content:space-between;align-items:center;gap:3px;overflow:hidden}.Backdrop .Picker .SelectedOptions .SelectedOption .RemoveIcon{cursor:pointer;width:25px;height:25px;display:flex;justify-content:center;align-items:center;font-size:1rem}.Backdrop .Picker .SelectedOptions .SelectedOption .RemoveIcon lucide-icon .lucide-icon-svg{width:1rem;height:1rem}.Backdrop .Picker .SelectedOptions .SelectedOption .RemoveIcon:hover{color:var(--error-text);background-color:var(--border)}.Backdrop .Picker .SearchContainer{width:100%;height:max-content}.Backdrop .Picker .SearchContainer .SearchInput{width:100%;height:32px;border-radius:var(--radius-md);padding:0 8px}.Backdrop .Picker .OptionsList{width:100%;display:flex;flex-direction:column;overflow:hidden;overflow-y:auto}.Backdrop .Picker .OptionsList .Option{width:100%;min-height:max-content;display:flex;justify-content:flex-start;align-items:center}.Backdrop .Picker .OptionsList .Option label{position:relative;width:100%;height:100%;padding:8px;display:flex;align-items:center;cursor:pointer;border-radius:var(--radius-md)}.Backdrop .Picker .OptionsList .Option label:hover{background-color:var(--surface-2)}.Backdrop .Picker .OptionsList .Option label [type=checkbox]{display:none}.Backdrop .Picker .OptionsList .Option label .Details{pointer-events:none;display:flex;align-items:center;gap:5px}.Backdrop .Picker .OptionsList .Option label .Details .Color{width:20px;min-width:20px;height:20px;min-height:20px;border-radius:100px;overflow:hidden}.Backdrop .Picker .OptionsList .Option label .Details .Image{width:35px;min-width:35px;height:35px;min-height:35px;border-radius:100px;overflow:hidden}.Backdrop .Picker .OptionsList .Option label .Details .Image img{width:100%;height:100%;object-fit:cover}.Backdrop .Picker .OptionsList .Option label .Details .Info{display:flex;flex-direction:column}.Backdrop .Picker .OptionsList .Option label .Details .Info .Name{display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.Backdrop .Picker .OptionsList .Option label .Details .Info .Description{margin:0;padding:0;width:100%;font-size:.9rem;color:var(--text-muted);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.Backdrop .Picker .OptionsList .Option label .CheckIcon{width:30px;height:100%;padding:5px;display:flex;justify-content:center;align-items:center;margin-left:auto;color:var(--text-muted)}.Backdrop .Picker .OptionsList .Option label .CheckIcon lucide-icon .lucide-icon-svg{width:1rem;height:1rem}.Backdrop .Picker .OptionsList .Option label .CheckIcon.Selected{color:var(--text-primary)}.LoadingState{display:flex;align-items:center;justify-content:center;gap:8px;padding:var(--spacing-lg);color:var(--text-muted);font-size:.9rem}.LoadingState .fa-spinner{animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.EmptyOptionsMessage{padding:var(--spacing-lg);text-align:center;color:var(--muted-text, var(--text-muted));font-weight:700;font-size:.9rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "component", type: LucideIconComponent, selector: "lucide-icon", inputs: ["name", "size", "spin", "filled"] }] });
11153
+ }
11154
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: MultiselectComboboxModalServiceComponent, decorators: [{
11155
+ type: Component,
11156
+ args: [{ selector: 'multiselect-combobox-modal-service', standalone: true, imports: [CommonModule, LucideIconComponent], template: "<ng-container *ngIf=\"vm$ | async as session\">\r\n <div class=\"Backdrop\" (click)=\"session.handlers.onBackdropClick($event)\">\r\n <div class=\"Picker\" (click)=\"$event.stopPropagation()\">\r\n <div class=\"Close\" (click)=\"session.handlers.onBackdropClick($event); $event.stopPropagation()\">\r\n Cerrar\r\n </div>\r\n\r\n <ng-container *ngIf=\"session.view.selectedOptions.length > 0\">\r\n <div class=\"SelectedOptions\">\r\n <span\r\n *ngFor=\"let option of session.view.selectedOptions\"\r\n class=\"SelectedOption\"\r\n (click)=\"session.handlers.onRemoveSelected(option, $event)\"\r\n >\r\n {{ option.name }}\r\n <span class=\"RemoveIcon\">\u00D7</span>\r\n </span>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"session.view.shouldShowSearch\">\r\n <div class=\"SearchContainer\">\r\n <input\r\n type=\"text\"\r\n class=\"SearchInput NativeInput\"\r\n [value]=\"session.view.searchQuery\"\r\n (input)=\"session.handlers.onSearchInput($event)\"\r\n placeholder=\"Buscar\"\r\n (click)=\"$event.stopPropagation()\"\r\n />\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"OptionsList\">\r\n <div *ngIf=\"session.view.isLoading && !session.view.isSearching\" class=\"LoadingState\">\r\n <lucide-icon name=\"loader-circle\" [spin]=\"true\"></lucide-icon>\r\n <span>Cargando...</span>\r\n </div>\r\n\r\n <div *ngIf=\"session.view.isSearching && !session.view.isLoading\" class=\"LoadingState\">\r\n <lucide-icon name=\"loader-circle\" [spin]=\"true\"></lucide-icon>\r\n <span>Buscando...</span>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"!session.view.isLoading && !session.view.isSearching && session.view.filteredOptions.length === 0\"\r\n class=\"EmptyOptionsMessage\"\r\n role=\"status\"\r\n >\r\n {{ session.view.noOptionsMessage }}\r\n </div>\r\n\r\n <ng-container *ngIf=\"!(session.view.isLoading && !session.view.isSearching)\">\r\n <div *ngFor=\"let option of session.view.filteredOptions\" class=\"Option\">\r\n <label>\r\n <div class=\"Details\">\r\n <div\r\n class=\"Color\"\r\n *ngIf=\"option.color\"\r\n [style.backgroundColor]=\"option.color\"\r\n ></div>\r\n\r\n <div class=\"Image\" *ngIf=\"option.image\">\r\n <img [src]=\"option.image\" alt=\"\" />\r\n </div>\r\n <div class=\"Info\">\r\n <span class=\"Name\">{{ option.name }}</span>\r\n <span class=\"Description\" *ngIf=\"option.description\">{{\r\n option.description\r\n }}</span>\r\n </div>\r\n </div>\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"isSelected(option, session.view.selectedOptions)\"\r\n (change)=\"session.handlers.onOptionToggle(option, $event)\"\r\n />\r\n <lucide-icon\r\n class=\"CheckIcon\"\r\n [class.Selected]=\"isSelected(option, session.view.selectedOptions)\"\r\n [name]=\"isSelected(option, session.view.selectedOptions) ? 'check' : 'x'\"\r\n ></lucide-icon>\r\n </label>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: [":host{display:contents}.Backdrop{position:fixed;top:0;left:0;z-index:10050;display:flex;justify-content:center;align-items:center;width:100%;height:100%;padding:12px;background:var(--overlay-scrim);overflow:hidden}@media (width <= 768px){.Backdrop{align-items:flex-start}}.Backdrop .Picker{display:flex;flex-direction:column;gap:5px;width:100%;max-width:600px;max-height:100%;margin:0 auto;background:var(--surface);border-radius:var(--radius-xl);padding:12px;overflow:hidden;overflow-y:auto;box-shadow:0 0 8px var(--shadow-color)}.Backdrop .Picker .Close{padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--radius-lg);color:var(--btn-cancel-text);border-color:var(--btn-cancel-border);background-color:var(--btn-cancel-bg);width:max-content;margin-left:auto;cursor:pointer}.Backdrop .Picker .Close:hover{color:var(--btn-cancel-text-hover);border-color:var(--btn-cancel-border-hover);background-color:var(--btn-cancel-bg-hover)}.Backdrop .Picker .Close:active{color:var(--btn-cancel-text-active);border-color:var(--btn-cancel-border-active);background-color:var(--btn-cancel-bg-active)}.Backdrop .Picker .SelectedOptions{display:flex;align-items:center;flex-wrap:wrap;gap:5px;border-bottom:solid 1px var(--border);padding:4px}.Backdrop .Picker .SelectedOptions .SelectedOption{background-color:var(--surface-2, var(--border));border-radius:var(--radius-md);width:max-content;height:25px;padding:0 var(--spacing-sm);padding-right:0;display:flex;justify-content:space-between;align-items:center;gap:3px;overflow:hidden}.Backdrop .Picker .SelectedOptions .SelectedOption .RemoveIcon{cursor:pointer;width:25px;height:25px;display:flex;justify-content:center;align-items:center;font-size:1rem}.Backdrop .Picker .SelectedOptions .SelectedOption .RemoveIcon lucide-icon .lucide-icon-svg{width:1rem;height:1rem}.Backdrop .Picker .SelectedOptions .SelectedOption .RemoveIcon:hover{color:var(--error-text);background-color:var(--border)}.Backdrop .Picker .SearchContainer{width:100%;height:max-content}.Backdrop .Picker .SearchContainer .SearchInput{width:100%;height:32px;border-radius:var(--radius-md);padding:0 8px}.Backdrop .Picker .OptionsList{width:100%;display:flex;flex-direction:column;overflow:hidden;overflow-y:auto}.Backdrop .Picker .OptionsList .Option{width:100%;min-height:max-content;display:flex;justify-content:flex-start;align-items:center}.Backdrop .Picker .OptionsList .Option label{position:relative;width:100%;height:100%;padding:8px;display:flex;align-items:center;cursor:pointer;border-radius:var(--radius-md)}.Backdrop .Picker .OptionsList .Option label:hover{background-color:var(--surface-2)}.Backdrop .Picker .OptionsList .Option label [type=checkbox]{display:none}.Backdrop .Picker .OptionsList .Option label .Details{pointer-events:none;display:flex;align-items:center;gap:5px}.Backdrop .Picker .OptionsList .Option label .Details .Color{width:20px;min-width:20px;height:20px;min-height:20px;border-radius:100px;overflow:hidden}.Backdrop .Picker .OptionsList .Option label .Details .Image{width:35px;min-width:35px;height:35px;min-height:35px;border-radius:100px;overflow:hidden}.Backdrop .Picker .OptionsList .Option label .Details .Image img{width:100%;height:100%;object-fit:cover}.Backdrop .Picker .OptionsList .Option label .Details .Info{display:flex;flex-direction:column}.Backdrop .Picker .OptionsList .Option label .Details .Info .Name{display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.Backdrop .Picker .OptionsList .Option label .Details .Info .Description{margin:0;padding:0;width:100%;font-size:.9rem;color:var(--text-muted);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.Backdrop .Picker .OptionsList .Option label .CheckIcon{width:30px;height:100%;padding:5px;display:flex;justify-content:center;align-items:center;margin-left:auto;color:var(--text-muted)}.Backdrop .Picker .OptionsList .Option label .CheckIcon lucide-icon .lucide-icon-svg{width:1rem;height:1rem}.Backdrop .Picker .OptionsList .Option label .CheckIcon.Selected{color:var(--text-primary)}.LoadingState{display:flex;align-items:center;justify-content:center;gap:8px;padding:var(--spacing-lg);color:var(--text-muted);font-size:.9rem}.LoadingState .fa-spinner{animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.EmptyOptionsMessage{padding:var(--spacing-lg);text-align:center;color:var(--muted-text, var(--text-muted));font-weight:700;font-size:.9rem}\n"] }]
11157
+ }], ctorParameters: () => [{ type: MultiselectComboboxModalService }, { type: i0.ChangeDetectorRef }] });
11158
+
11159
+ class SearchEntryModalServiceComponent {
11160
+ searchEntryModal;
11161
+ cdr;
11162
+ vm$;
11163
+ sub;
11164
+ constructor(searchEntryModal, cdr) {
11165
+ this.searchEntryModal = searchEntryModal;
11166
+ this.cdr = cdr;
11167
+ this.vm$ = this.searchEntryModal.state$;
11168
+ }
11169
+ ngOnInit() {
11170
+ this.sub = this.searchEntryModal.state$.subscribe(() => this.cdr.markForCheck());
11171
+ }
11172
+ ngOnDestroy() {
11173
+ this.sub?.unsubscribe();
11174
+ }
11175
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: SearchEntryModalServiceComponent, deps: [{ token: SearchEntryModalService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
11176
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.11", type: SearchEntryModalServiceComponent, isStandalone: true, selector: "search-entry-modal-service", ngImport: i0, template: "<ng-container *ngIf=\"vm$ | async as session\">\r\n <div class=\"Backdrop InputModalBackdrop search-entry-modal\" (click)=\"session.handlers.onBackdropClick($event)\">\r\n <div class=\"Picker\" (click)=\"$event.stopPropagation()\">\r\n <ng-container *ngIf=\"session.view.shouldShowSearch\">\r\n <div class=\"SearchContainer\">\r\n <input\r\n type=\"text\"\r\n class=\"SearchInput NativeInput\"\r\n [placeholder]=\"session.view.placeholder\"\r\n [value]=\"session.view.searchText\"\r\n (input)=\"session.handlers.onSearchInput($event)\"\r\n />\r\n <lucide-icon class=\"Close\" name=\"x\" (click)=\"session.handlers.onCloseIconClick($event); $event.stopPropagation()\"></lucide-icon>\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"OptionsList\">\r\n <div class=\"EmptyState\" *ngIf=\"!session.view.searchText.trim() && !session.view.loading && !session.view.error\">\r\n <lucide-icon name=\"search\"></lucide-icon>\r\n <p>Escribe para buscar productos</p>\r\n <span class=\"Hint\">Busca por nombre, SKU, marca o categor\u00EDa</span>\r\n </div>\r\n\r\n <div class=\"LoadingState\" *ngIf=\"session.view.loading && session.view.searchText.trim()\">\r\n <lucide-icon name=\"loader-circle\" [spin]=\"true\"></lucide-icon>\r\n <span>Buscando...</span>\r\n </div>\r\n\r\n <div class=\"ErrorState\" *ngIf=\"session.view.error && !session.view.loading\">\r\n <lucide-icon name=\"triangle-alert\"></lucide-icon>\r\n <p>Error al realizar la b\u00FAsqueda</p>\r\n <span class=\"Hint\">Intenta nuevamente</span>\r\n </div>\r\n\r\n <ng-container *ngIf=\"!session.view.loading && !session.view.error && session.view.searchText.trim()\">\r\n <a\r\n class=\"Option SearchAllOption\"\r\n [routerLink]=\"['/search', session.view.searchText.trim()]\"\r\n (click)=\"session.handlers.onResultNavigate()\"\r\n >\r\n <label>\r\n <div class=\"Details\">\r\n <div class=\"SearchAllIcon\">\r\n <lucide-icon name=\"search\"></lucide-icon>\r\n </div>\r\n <div class=\"Info\">\r\n <span class=\"Name\">Buscar \"{{ session.view.searchText.trim() }}\" en la p\u00E1gina de b\u00FAsqueda</span>\r\n <span class=\"Description\">Ver todos los resultados</span>\r\n </div>\r\n </div>\r\n <lucide-icon class=\"LinkIcon\" name=\"arrow-right\"></lucide-icon>\r\n </label>\r\n </a>\r\n\r\n <a\r\n class=\"Option\"\r\n *ngFor=\"let option of session.view.filteredOptions\"\r\n [routerLink]=\"[option.to, option.param]\"\r\n (click)=\"session.handlers.onResultNavigate()\"\r\n >\r\n <label>\r\n <div class=\"Details\">\r\n <div\r\n class=\"Color\"\r\n *ngIf=\"option.color\"\r\n [style.backgroundColor]=\"option.color\"\r\n ></div>\r\n\r\n <div class=\"Image\" *ngIf=\"option.image\">\r\n <img\r\n [src]=\"option.image\"\r\n alt=\"Imagen\"\r\n loading=\"lazy\"\r\n onerror=\"this.style.display='none'\"\r\n />\r\n </div>\r\n\r\n <div class=\"Info\">\r\n <span class=\"Name\" [innerHTML]=\"option.name\"></span>\r\n <span\r\n class=\"Description\"\r\n *ngIf=\"option.description\"\r\n [innerHTML]=\"option.description\"\r\n ></span>\r\n </div>\r\n </div>\r\n\r\n <lucide-icon class=\"LinkIcon\" name=\"arrow-right\"></lucide-icon>\r\n </label>\r\n </a>\r\n\r\n <div class=\"NoResults\" *ngIf=\"session.view.filteredOptions.length === 0 && session.view.searchText.trim()\">\r\n <lucide-icon name=\"inbox\"></lucide-icon>\r\n <p>No se encontraron resultados para: <strong>{{ session.view.searchText }}</strong></p>\r\n <span class=\"Hint\">Intenta con otros t\u00E9rminos de b\u00FAsqueda</span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: ["@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}:host{display:contents}.Backdrop{position:fixed;top:0;left:0;z-index:10050;display:flex;justify-content:center;align-items:flex-start;width:100%;height:100%;padding:4px;background:var(--overlay-scrim)}.Backdrop .Picker{max-width:550px;width:100%;margin:0 auto;background:var(--surface);display:flex;flex-direction:column;gap:5px;border-radius:var(--radius-lg);max-height:calc(100vh - 20px);box-shadow:0 0 10px var(--shadow-color)}.Backdrop .Picker .SearchContainer{width:100%;height:max-content;display:flex;align-items:center;padding:8px 8px 0}.Backdrop .Picker .SearchContainer i,.Backdrop .Picker .SearchContainer lucide-icon{width:30px;min-width:30px;height:30px;min-height:30px;border-radius:var(--radius-lg);display:flex;align-items:center;justify-content:center;font-size:1.3rem;color:var(--red);padding:4px;cursor:pointer}.Backdrop .Picker .SearchContainer i lucide-icon .lucide-icon-svg,.Backdrop .Picker .SearchContainer lucide-icon lucide-icon .lucide-icon-svg{width:1.3rem;height:1.3rem}.Backdrop .Picker .SearchContainer .SearchInput{width:100%;height:45px;border-radius:var(--radius-lg)}.Backdrop .Picker .OptionsList{width:100%;display:flex;flex-direction:column;overflow:hidden;overflow-y:auto;padding:0 12px 24px;gap:4px}.Backdrop .Picker .OptionsList .EmptyState{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:3rem 1rem;text-align:center;color:var(--text-muted)}.Backdrop .Picker .OptionsList .EmptyState i,.Backdrop .Picker .OptionsList .EmptyState lucide-icon{font-size:2.5rem;color:var(--text-label);opacity:.5}.Backdrop .Picker .OptionsList .EmptyState i lucide-icon .lucide-icon-svg,.Backdrop .Picker .OptionsList .EmptyState lucide-icon lucide-icon .lucide-icon-svg{width:2.5rem;height:2.5rem}.Backdrop .Picker .OptionsList .EmptyState p{font-size:1rem;font-weight:500;color:var(--text-base);margin:0}.Backdrop .Picker .OptionsList .EmptyState .Hint{font-size:.875rem;color:var(--text-muted);font-style:italic}.Backdrop .Picker .OptionsList .LoadingState{display:flex;align-items:center;justify-content:center;gap:12px;padding:2rem 1rem;color:var(--text-muted);font-size:.9375rem}.Backdrop .Picker .OptionsList .LoadingState i,.Backdrop .Picker .OptionsList .LoadingState lucide-icon{font-size:1.25rem;color:var(--primary);animation:spin 1s linear infinite}.Backdrop .Picker .OptionsList .LoadingState i lucide-icon .lucide-icon-svg,.Backdrop .Picker .OptionsList .LoadingState lucide-icon lucide-icon .lucide-icon-svg{width:1.25rem;height:1.25rem}.Backdrop .Picker .OptionsList .ErrorState{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:2rem 1rem;text-align:center;color:var(--red)}.Backdrop .Picker .OptionsList .ErrorState i,.Backdrop .Picker .OptionsList .ErrorState lucide-icon{font-size:2rem;color:var(--red)}.Backdrop .Picker .OptionsList .ErrorState i lucide-icon .lucide-icon-svg,.Backdrop .Picker .OptionsList .ErrorState lucide-icon lucide-icon .lucide-icon-svg{width:2rem;height:2rem}.Backdrop .Picker .OptionsList .ErrorState p{font-size:1rem;font-weight:500;color:var(--text-base);margin:0}.Backdrop .Picker .OptionsList .ErrorState .Hint{font-size:.875rem;color:var(--text-muted);font-style:italic}.Backdrop .Picker .OptionsList .NoResults{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:2rem 1rem;text-align:center;color:var(--text-muted)}.Backdrop .Picker .OptionsList .NoResults i,.Backdrop .Picker .OptionsList .NoResults lucide-icon{font-size:2rem;color:var(--text-label);opacity:.5}.Backdrop .Picker .OptionsList .NoResults i lucide-icon .lucide-icon-svg,.Backdrop .Picker .OptionsList .NoResults lucide-icon lucide-icon .lucide-icon-svg{width:2rem;height:2rem}.Backdrop .Picker .OptionsList .NoResults p{font-size:1rem;font-weight:600;color:var(--text-base);margin:0}.Backdrop .Picker .OptionsList .NoResults .Hint{font-size:.875rem;color:var(--text-muted);font-style:italic}.Backdrop .Picker .OptionsList .Option{width:100%;min-height:max-content;display:flex;justify-content:flex-start;align-items:center;text-decoration:none;color:inherit}.Backdrop .Picker .OptionsList .Option label{position:relative;width:100%;height:100%;padding:4px 8px;display:flex;align-items:center;cursor:pointer;border-radius:var(--radius-lg);gap:4px}.Backdrop .Picker .OptionsList .Option label:hover{background-color:var(--surface-2)}.Backdrop .Picker .OptionsList .Option.SearchAllOption{border-bottom:1px solid var(--input-border);margin-bottom:4px}.Backdrop .Picker .OptionsList .Option.SearchAllOption label .SearchAllIcon{width:40px;min-width:40px;height:40px;min-height:40px;border-radius:var(--radius-lg);background:linear-gradient(135deg,var(--primary) 0%,var(--primary-dark, var(--primary)) 100%);display:flex;align-items:center;justify-content:center}.Backdrop .Picker .OptionsList .Option.SearchAllOption label .SearchAllIcon i,.Backdrop .Picker .OptionsList .Option.SearchAllOption label .SearchAllIcon lucide-icon{color:#fff;font-size:1.125rem}.Backdrop .Picker .OptionsList .Option.SearchAllOption label .SearchAllIcon i lucide-icon .lucide-icon-svg,.Backdrop .Picker .OptionsList .Option.SearchAllOption label .SearchAllIcon lucide-icon lucide-icon .lucide-icon-svg{width:1.125rem;height:1.125rem}.Backdrop .Picker .OptionsList .Option.SearchAllOption label .Info .Name{font-weight:400;color:var(--primary)}.Backdrop .Picker .OptionsList .Option.SearchAllOption label .Info .Description{font-weight:400;font-size:.875rem;color:var(--text-muted)}.Backdrop .Picker .OptionsList .Option [type=checkbox]{display:none}.Backdrop .Picker .OptionsList .Option .Details{pointer-events:none;display:flex;align-items:center;gap:4px;flex:1;min-width:0}.Backdrop .Picker .OptionsList .Option .Details .Color{width:25px;min-width:25px;height:25px;min-height:25px;border-radius:100px;overflow:hidden;flex-shrink:0}.Backdrop .Picker .OptionsList .Option .Details .Image{width:40px;min-width:40px;height:40px;min-height:40px;border-radius:var(--radius-md);overflow:hidden;background-color:var(--surface-2);flex-shrink:0}.Backdrop .Picker .OptionsList .Option .Details .Image img{width:100%;height:100%;object-fit:contain;border:none}.Backdrop .Picker .OptionsList .Option .Details .Info{display:flex;flex-direction:column;flex:1;min-width:0;gap:2px}.Backdrop .Picker .OptionsList .Option .Details .Info .Name{font-weight:400;font-size:.9rem;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;color:var(--text-base);line-height:1.3}.Backdrop .Picker .OptionsList .Option .Details .Info .Description{font-size:.8rem;color:var(--text-muted);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;line-height:1.3}.Backdrop .Picker .OptionsList .Option .LinkIcon{color:var(--icon-primary);width:24px;min-width:24px;height:24px;flex-shrink:0;display:flex;justify-content:center;align-items:center;margin-left:auto;opacity:.6;transition:opacity .2s ease}.Backdrop .Picker .OptionsList .Option .LinkIcon lucide-icon .lucide-icon-svg{width:1rem;height:1rem}.Backdrop .Picker .OptionsList .Option:hover .LinkIcon{opacity:1}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { 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: LucideIconComponent, selector: "lucide-icon", inputs: ["name", "size", "spin", "filled"] }] });
11177
+ }
11178
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: SearchEntryModalServiceComponent, decorators: [{
11179
+ type: Component,
11180
+ args: [{ selector: 'search-entry-modal-service', standalone: true, imports: [CommonModule, RouterModule, LucideIconComponent], template: "<ng-container *ngIf=\"vm$ | async as session\">\r\n <div class=\"Backdrop InputModalBackdrop search-entry-modal\" (click)=\"session.handlers.onBackdropClick($event)\">\r\n <div class=\"Picker\" (click)=\"$event.stopPropagation()\">\r\n <ng-container *ngIf=\"session.view.shouldShowSearch\">\r\n <div class=\"SearchContainer\">\r\n <input\r\n type=\"text\"\r\n class=\"SearchInput NativeInput\"\r\n [placeholder]=\"session.view.placeholder\"\r\n [value]=\"session.view.searchText\"\r\n (input)=\"session.handlers.onSearchInput($event)\"\r\n />\r\n <lucide-icon class=\"Close\" name=\"x\" (click)=\"session.handlers.onCloseIconClick($event); $event.stopPropagation()\"></lucide-icon>\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"OptionsList\">\r\n <div class=\"EmptyState\" *ngIf=\"!session.view.searchText.trim() && !session.view.loading && !session.view.error\">\r\n <lucide-icon name=\"search\"></lucide-icon>\r\n <p>Escribe para buscar productos</p>\r\n <span class=\"Hint\">Busca por nombre, SKU, marca o categor\u00EDa</span>\r\n </div>\r\n\r\n <div class=\"LoadingState\" *ngIf=\"session.view.loading && session.view.searchText.trim()\">\r\n <lucide-icon name=\"loader-circle\" [spin]=\"true\"></lucide-icon>\r\n <span>Buscando...</span>\r\n </div>\r\n\r\n <div class=\"ErrorState\" *ngIf=\"session.view.error && !session.view.loading\">\r\n <lucide-icon name=\"triangle-alert\"></lucide-icon>\r\n <p>Error al realizar la b\u00FAsqueda</p>\r\n <span class=\"Hint\">Intenta nuevamente</span>\r\n </div>\r\n\r\n <ng-container *ngIf=\"!session.view.loading && !session.view.error && session.view.searchText.trim()\">\r\n <a\r\n class=\"Option SearchAllOption\"\r\n [routerLink]=\"['/search', session.view.searchText.trim()]\"\r\n (click)=\"session.handlers.onResultNavigate()\"\r\n >\r\n <label>\r\n <div class=\"Details\">\r\n <div class=\"SearchAllIcon\">\r\n <lucide-icon name=\"search\"></lucide-icon>\r\n </div>\r\n <div class=\"Info\">\r\n <span class=\"Name\">Buscar \"{{ session.view.searchText.trim() }}\" en la p\u00E1gina de b\u00FAsqueda</span>\r\n <span class=\"Description\">Ver todos los resultados</span>\r\n </div>\r\n </div>\r\n <lucide-icon class=\"LinkIcon\" name=\"arrow-right\"></lucide-icon>\r\n </label>\r\n </a>\r\n\r\n <a\r\n class=\"Option\"\r\n *ngFor=\"let option of session.view.filteredOptions\"\r\n [routerLink]=\"[option.to, option.param]\"\r\n (click)=\"session.handlers.onResultNavigate()\"\r\n >\r\n <label>\r\n <div class=\"Details\">\r\n <div\r\n class=\"Color\"\r\n *ngIf=\"option.color\"\r\n [style.backgroundColor]=\"option.color\"\r\n ></div>\r\n\r\n <div class=\"Image\" *ngIf=\"option.image\">\r\n <img\r\n [src]=\"option.image\"\r\n alt=\"Imagen\"\r\n loading=\"lazy\"\r\n onerror=\"this.style.display='none'\"\r\n />\r\n </div>\r\n\r\n <div class=\"Info\">\r\n <span class=\"Name\" [innerHTML]=\"option.name\"></span>\r\n <span\r\n class=\"Description\"\r\n *ngIf=\"option.description\"\r\n [innerHTML]=\"option.description\"\r\n ></span>\r\n </div>\r\n </div>\r\n\r\n <lucide-icon class=\"LinkIcon\" name=\"arrow-right\"></lucide-icon>\r\n </label>\r\n </a>\r\n\r\n <div class=\"NoResults\" *ngIf=\"session.view.filteredOptions.length === 0 && session.view.searchText.trim()\">\r\n <lucide-icon name=\"inbox\"></lucide-icon>\r\n <p>No se encontraron resultados para: <strong>{{ session.view.searchText }}</strong></p>\r\n <span class=\"Hint\">Intenta con otros t\u00E9rminos de b\u00FAsqueda</span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: ["@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}:host{display:contents}.Backdrop{position:fixed;top:0;left:0;z-index:10050;display:flex;justify-content:center;align-items:flex-start;width:100%;height:100%;padding:4px;background:var(--overlay-scrim)}.Backdrop .Picker{max-width:550px;width:100%;margin:0 auto;background:var(--surface);display:flex;flex-direction:column;gap:5px;border-radius:var(--radius-lg);max-height:calc(100vh - 20px);box-shadow:0 0 10px var(--shadow-color)}.Backdrop .Picker .SearchContainer{width:100%;height:max-content;display:flex;align-items:center;padding:8px 8px 0}.Backdrop .Picker .SearchContainer i,.Backdrop .Picker .SearchContainer lucide-icon{width:30px;min-width:30px;height:30px;min-height:30px;border-radius:var(--radius-lg);display:flex;align-items:center;justify-content:center;font-size:1.3rem;color:var(--red);padding:4px;cursor:pointer}.Backdrop .Picker .SearchContainer i lucide-icon .lucide-icon-svg,.Backdrop .Picker .SearchContainer lucide-icon lucide-icon .lucide-icon-svg{width:1.3rem;height:1.3rem}.Backdrop .Picker .SearchContainer .SearchInput{width:100%;height:45px;border-radius:var(--radius-lg)}.Backdrop .Picker .OptionsList{width:100%;display:flex;flex-direction:column;overflow:hidden;overflow-y:auto;padding:0 12px 24px;gap:4px}.Backdrop .Picker .OptionsList .EmptyState{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:3rem 1rem;text-align:center;color:var(--text-muted)}.Backdrop .Picker .OptionsList .EmptyState i,.Backdrop .Picker .OptionsList .EmptyState lucide-icon{font-size:2.5rem;color:var(--text-label);opacity:.5}.Backdrop .Picker .OptionsList .EmptyState i lucide-icon .lucide-icon-svg,.Backdrop .Picker .OptionsList .EmptyState lucide-icon lucide-icon .lucide-icon-svg{width:2.5rem;height:2.5rem}.Backdrop .Picker .OptionsList .EmptyState p{font-size:1rem;font-weight:500;color:var(--text-base);margin:0}.Backdrop .Picker .OptionsList .EmptyState .Hint{font-size:.875rem;color:var(--text-muted);font-style:italic}.Backdrop .Picker .OptionsList .LoadingState{display:flex;align-items:center;justify-content:center;gap:12px;padding:2rem 1rem;color:var(--text-muted);font-size:.9375rem}.Backdrop .Picker .OptionsList .LoadingState i,.Backdrop .Picker .OptionsList .LoadingState lucide-icon{font-size:1.25rem;color:var(--primary);animation:spin 1s linear infinite}.Backdrop .Picker .OptionsList .LoadingState i lucide-icon .lucide-icon-svg,.Backdrop .Picker .OptionsList .LoadingState lucide-icon lucide-icon .lucide-icon-svg{width:1.25rem;height:1.25rem}.Backdrop .Picker .OptionsList .ErrorState{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:2rem 1rem;text-align:center;color:var(--red)}.Backdrop .Picker .OptionsList .ErrorState i,.Backdrop .Picker .OptionsList .ErrorState lucide-icon{font-size:2rem;color:var(--red)}.Backdrop .Picker .OptionsList .ErrorState i lucide-icon .lucide-icon-svg,.Backdrop .Picker .OptionsList .ErrorState lucide-icon lucide-icon .lucide-icon-svg{width:2rem;height:2rem}.Backdrop .Picker .OptionsList .ErrorState p{font-size:1rem;font-weight:500;color:var(--text-base);margin:0}.Backdrop .Picker .OptionsList .ErrorState .Hint{font-size:.875rem;color:var(--text-muted);font-style:italic}.Backdrop .Picker .OptionsList .NoResults{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:2rem 1rem;text-align:center;color:var(--text-muted)}.Backdrop .Picker .OptionsList .NoResults i,.Backdrop .Picker .OptionsList .NoResults lucide-icon{font-size:2rem;color:var(--text-label);opacity:.5}.Backdrop .Picker .OptionsList .NoResults i lucide-icon .lucide-icon-svg,.Backdrop .Picker .OptionsList .NoResults lucide-icon lucide-icon .lucide-icon-svg{width:2rem;height:2rem}.Backdrop .Picker .OptionsList .NoResults p{font-size:1rem;font-weight:600;color:var(--text-base);margin:0}.Backdrop .Picker .OptionsList .NoResults .Hint{font-size:.875rem;color:var(--text-muted);font-style:italic}.Backdrop .Picker .OptionsList .Option{width:100%;min-height:max-content;display:flex;justify-content:flex-start;align-items:center;text-decoration:none;color:inherit}.Backdrop .Picker .OptionsList .Option label{position:relative;width:100%;height:100%;padding:4px 8px;display:flex;align-items:center;cursor:pointer;border-radius:var(--radius-lg);gap:4px}.Backdrop .Picker .OptionsList .Option label:hover{background-color:var(--surface-2)}.Backdrop .Picker .OptionsList .Option.SearchAllOption{border-bottom:1px solid var(--input-border);margin-bottom:4px}.Backdrop .Picker .OptionsList .Option.SearchAllOption label .SearchAllIcon{width:40px;min-width:40px;height:40px;min-height:40px;border-radius:var(--radius-lg);background:linear-gradient(135deg,var(--primary) 0%,var(--primary-dark, var(--primary)) 100%);display:flex;align-items:center;justify-content:center}.Backdrop .Picker .OptionsList .Option.SearchAllOption label .SearchAllIcon i,.Backdrop .Picker .OptionsList .Option.SearchAllOption label .SearchAllIcon lucide-icon{color:#fff;font-size:1.125rem}.Backdrop .Picker .OptionsList .Option.SearchAllOption label .SearchAllIcon i lucide-icon .lucide-icon-svg,.Backdrop .Picker .OptionsList .Option.SearchAllOption label .SearchAllIcon lucide-icon lucide-icon .lucide-icon-svg{width:1.125rem;height:1.125rem}.Backdrop .Picker .OptionsList .Option.SearchAllOption label .Info .Name{font-weight:400;color:var(--primary)}.Backdrop .Picker .OptionsList .Option.SearchAllOption label .Info .Description{font-weight:400;font-size:.875rem;color:var(--text-muted)}.Backdrop .Picker .OptionsList .Option [type=checkbox]{display:none}.Backdrop .Picker .OptionsList .Option .Details{pointer-events:none;display:flex;align-items:center;gap:4px;flex:1;min-width:0}.Backdrop .Picker .OptionsList .Option .Details .Color{width:25px;min-width:25px;height:25px;min-height:25px;border-radius:100px;overflow:hidden;flex-shrink:0}.Backdrop .Picker .OptionsList .Option .Details .Image{width:40px;min-width:40px;height:40px;min-height:40px;border-radius:var(--radius-md);overflow:hidden;background-color:var(--surface-2);flex-shrink:0}.Backdrop .Picker .OptionsList .Option .Details .Image img{width:100%;height:100%;object-fit:contain;border:none}.Backdrop .Picker .OptionsList .Option .Details .Info{display:flex;flex-direction:column;flex:1;min-width:0;gap:2px}.Backdrop .Picker .OptionsList .Option .Details .Info .Name{font-weight:400;font-size:.9rem;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;color:var(--text-base);line-height:1.3}.Backdrop .Picker .OptionsList .Option .Details .Info .Description{font-size:.8rem;color:var(--text-muted);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;line-height:1.3}.Backdrop .Picker .OptionsList .Option .LinkIcon{color:var(--icon-primary);width:24px;min-width:24px;height:24px;flex-shrink:0;display:flex;justify-content:center;align-items:center;margin-left:auto;opacity:.6;transition:opacity .2s ease}.Backdrop .Picker .OptionsList .Option .LinkIcon lucide-icon .lucide-icon-svg{width:1rem;height:1rem}.Backdrop .Picker .OptionsList .Option:hover .LinkIcon{opacity:1}\n"] }]
11181
+ }], ctorParameters: () => [{ type: SearchEntryModalService }, { type: i0.ChangeDetectorRef }] });
11182
+
11183
+ class PhoneEntryModalServiceComponent {
11184
+ phoneModal;
11185
+ cdr;
11186
+ vm$;
11187
+ sub;
11188
+ constructor(phoneModal, cdr) {
11189
+ this.phoneModal = phoneModal;
11190
+ this.cdr = cdr;
11191
+ this.vm$ = this.phoneModal.state$;
11192
+ }
11193
+ ngOnInit() {
11194
+ this.sub = this.phoneModal.state$.subscribe(() => this.cdr.markForCheck());
11195
+ }
11196
+ ngOnDestroy() {
11197
+ this.sub?.unsubscribe();
11198
+ }
11199
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: PhoneEntryModalServiceComponent, deps: [{ token: PhoneEntryModalService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
11200
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.11", type: PhoneEntryModalServiceComponent, isStandalone: true, selector: "phone-entry-modal-service", ngImport: i0, template: "<ng-container *ngIf=\"vm$ | async as session\">\r\n <div class=\"Backdrop InputModalBackdrop phone-entry-modal\" (click)=\"session.handlers.onBackdropClick($event)\">\r\n <div class=\"Picker\" (click)=\"$event.stopPropagation()\">\r\n <div class=\"SearchContainer\">\r\n <lucide-icon class=\"SearchIcon\" name=\"search\"></lucide-icon>\r\n <input\r\n type=\"text\"\r\n class=\"SearchInput\"\r\n [value]=\"session.view.searchQuery\"\r\n (input)=\"session.handlers.onSearchInput($event)\"\r\n (click)=\"$event.stopPropagation()\"\r\n placeholder=\"Buscar por pa\u00EDs o c\u00F3digo...\"\r\n />\r\n </div>\r\n\r\n <div class=\"CountriesList\">\r\n <div\r\n class=\"Item\"\r\n *ngFor=\"let country of session.view.filteredCountries\"\r\n (click)=\"session.handlers.onSelectCountry(country, $event)\"\r\n >\r\n <img *ngIf=\"country.img\" class=\"Icon\" [src]=\"country.img\" draggable=\"false\" />\r\n <lucide-icon class=\"Icon\" name=\"globe\" *ngIf=\"!country.img\"></lucide-icon>\r\n <span class=\"Code\">{{ country.prefix }}</span>\r\n <span class=\"Country\">{{ country.name }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: [":host(.IsDisable){opacity:.4;pointer-events:none;cursor:not-allowed}:host{display:flex;flex-direction:column;width:100%;height:max-content;-webkit-user-select:auto;user-select:auto}:host .LabelRow{display:flex;align-items:center;justify-content:space-between;gap:6px;width:100%;margin-bottom:2px}:host .Label{color:var(--text-label);flex:1;min-width:0;cursor:pointer;padding:0 3px;margin:0;font-weight:400;-webkit-user-select:none;user-select:none}:host .Label .Opcional{color:var(--text-muted)}:host .Description{-webkit-user-select:none;user-select:none;font-size:.9rem;color:var(--text-base);font-weight:400;width:100%;cursor:pointer;padding:0 3px;margin:0 0 4px;overflow:hidden;word-break:break-all}:host .Entry{display:flex;width:100%;height:32px;justify-content:flex-start;align-items:center;border:solid 0 var(--input-border);border-radius:12px;cursor:pointer;overflow:hidden;background-color:var(--input-bg)}:host .Entry:hover{border:none;outline:solid 1px var(--input-hover-border)}:host .Entry[class~=IsFocus]{border:none;outline:solid 1px var(--input-focus-border)}:host .Entry[class~=Error]{outline:solid 1px var(--input-border-error)}:host .Entry .Input{height:100%;width:100%;border:solid 0 var(--input-border);padding:0 8px;color:var(--input-text);caret-color:var(--primary);text-align:start}:host .Entry .Input:focus{border:none;outline:none}:host .Entry .Input::placeholder{color:var(--input-placeholder)}:host .Entry.NotHover:hover{border:none;outline:none}:host .Backdrop{position:fixed;top:0;left:0;z-index:800;display:flex;justify-content:center;align-items:center;width:100%;height:100%;padding:12px;background:var(--overlay-scrim);overflow:hidden}@media (width <= 768px){:host .Backdrop{align-items:flex-start}}:host .Backdrop .Picker{display:flex;flex-direction:column;gap:5px;width:100%;max-width:600px;max-height:100%;margin:0 auto;background:var(--surface);border-radius:16px;padding:12px;overflow:hidden;overflow-y:auto;box-shadow:0 0 8px var(--shadow-color)}:host{display:contents}.Backdrop{position:fixed;top:0;left:0;z-index:10050;display:flex;justify-content:center;align-items:center;width:100%;height:100%;padding:12px;background:var(--overlay-scrim);overflow:hidden}.Backdrop .Picker{display:flex;flex-direction:column;gap:8px;width:100%;max-width:420px;max-height:90vh;margin:0 auto;background:var(--surface);border-radius:var(--radius-xl);padding:12px;box-shadow:0 0 8px var(--shadow-color)}.Backdrop .Picker .SearchContainer{display:flex;align-items:center;gap:8px;padding:8px;background-color:var(--input-bg);border-radius:var(--radius-md);border:solid 1px var(--input-border)}.Backdrop .Picker .SearchContainer .SearchIcon{color:var(--text-muted);font-size:.9rem;flex-shrink:0}.Backdrop .Picker .SearchContainer .SearchIcon lucide-icon .lucide-icon-svg{width:.9rem;height:.9rem}.Backdrop .Picker .SearchContainer .SearchInput{flex:1;border:none;outline:none;background:transparent;color:var(--input-text);font-size:.9rem}.Backdrop .Picker .SearchContainer .SearchInput::placeholder{color:var(--input-placeholder)}.Backdrop .Picker .CountriesList{display:flex;flex-direction:column;gap:2px;overflow-y:auto;max-height:calc(80vh - 120px)}.Backdrop .Picker .CountriesList .Item{display:flex;align-items:center;gap:var(--spacing-sm);padding:var(--spacing-sm);cursor:pointer;border-radius:var(--radius-md);transition:background-color .2s}.Backdrop .Picker .CountriesList .Item:hover{background-color:var(--surface-2)}.Backdrop .Picker .CountriesList .Item .Icon{width:25px;height:25px;object-fit:contain;flex-shrink:0}.Backdrop .Picker .CountriesList .Item .Code{padding:2px var(--spacing-sm);border-radius:100px;font-size:.8rem;font-weight:500;background-color:var(--primary);color:var(--surface);display:flex;justify-content:center;align-items:center;white-space:nowrap;flex-shrink:0}.Backdrop .Picker .CountriesList .Item .Country{flex:1;color:var(--text-primary);font-size:.9rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "component", type: LucideIconComponent, selector: "lucide-icon", inputs: ["name", "size", "spin", "filled"] }] });
11201
+ }
11202
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: PhoneEntryModalServiceComponent, decorators: [{
11203
+ type: Component,
11204
+ args: [{ selector: 'phone-entry-modal-service', standalone: true, imports: [CommonModule, LucideIconComponent], template: "<ng-container *ngIf=\"vm$ | async as session\">\r\n <div class=\"Backdrop InputModalBackdrop phone-entry-modal\" (click)=\"session.handlers.onBackdropClick($event)\">\r\n <div class=\"Picker\" (click)=\"$event.stopPropagation()\">\r\n <div class=\"SearchContainer\">\r\n <lucide-icon class=\"SearchIcon\" name=\"search\"></lucide-icon>\r\n <input\r\n type=\"text\"\r\n class=\"SearchInput\"\r\n [value]=\"session.view.searchQuery\"\r\n (input)=\"session.handlers.onSearchInput($event)\"\r\n (click)=\"$event.stopPropagation()\"\r\n placeholder=\"Buscar por pa\u00EDs o c\u00F3digo...\"\r\n />\r\n </div>\r\n\r\n <div class=\"CountriesList\">\r\n <div\r\n class=\"Item\"\r\n *ngFor=\"let country of session.view.filteredCountries\"\r\n (click)=\"session.handlers.onSelectCountry(country, $event)\"\r\n >\r\n <img *ngIf=\"country.img\" class=\"Icon\" [src]=\"country.img\" draggable=\"false\" />\r\n <lucide-icon class=\"Icon\" name=\"globe\" *ngIf=\"!country.img\"></lucide-icon>\r\n <span class=\"Code\">{{ country.prefix }}</span>\r\n <span class=\"Country\">{{ country.name }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: [":host(.IsDisable){opacity:.4;pointer-events:none;cursor:not-allowed}:host{display:flex;flex-direction:column;width:100%;height:max-content;-webkit-user-select:auto;user-select:auto}:host .LabelRow{display:flex;align-items:center;justify-content:space-between;gap:6px;width:100%;margin-bottom:2px}:host .Label{color:var(--text-label);flex:1;min-width:0;cursor:pointer;padding:0 3px;margin:0;font-weight:400;-webkit-user-select:none;user-select:none}:host .Label .Opcional{color:var(--text-muted)}:host .Description{-webkit-user-select:none;user-select:none;font-size:.9rem;color:var(--text-base);font-weight:400;width:100%;cursor:pointer;padding:0 3px;margin:0 0 4px;overflow:hidden;word-break:break-all}:host .Entry{display:flex;width:100%;height:32px;justify-content:flex-start;align-items:center;border:solid 0 var(--input-border);border-radius:12px;cursor:pointer;overflow:hidden;background-color:var(--input-bg)}:host .Entry:hover{border:none;outline:solid 1px var(--input-hover-border)}:host .Entry[class~=IsFocus]{border:none;outline:solid 1px var(--input-focus-border)}:host .Entry[class~=Error]{outline:solid 1px var(--input-border-error)}:host .Entry .Input{height:100%;width:100%;border:solid 0 var(--input-border);padding:0 8px;color:var(--input-text);caret-color:var(--primary);text-align:start}:host .Entry .Input:focus{border:none;outline:none}:host .Entry .Input::placeholder{color:var(--input-placeholder)}:host .Entry.NotHover:hover{border:none;outline:none}:host .Backdrop{position:fixed;top:0;left:0;z-index:800;display:flex;justify-content:center;align-items:center;width:100%;height:100%;padding:12px;background:var(--overlay-scrim);overflow:hidden}@media (width <= 768px){:host .Backdrop{align-items:flex-start}}:host .Backdrop .Picker{display:flex;flex-direction:column;gap:5px;width:100%;max-width:600px;max-height:100%;margin:0 auto;background:var(--surface);border-radius:16px;padding:12px;overflow:hidden;overflow-y:auto;box-shadow:0 0 8px var(--shadow-color)}:host{display:contents}.Backdrop{position:fixed;top:0;left:0;z-index:10050;display:flex;justify-content:center;align-items:center;width:100%;height:100%;padding:12px;background:var(--overlay-scrim);overflow:hidden}.Backdrop .Picker{display:flex;flex-direction:column;gap:8px;width:100%;max-width:420px;max-height:90vh;margin:0 auto;background:var(--surface);border-radius:var(--radius-xl);padding:12px;box-shadow:0 0 8px var(--shadow-color)}.Backdrop .Picker .SearchContainer{display:flex;align-items:center;gap:8px;padding:8px;background-color:var(--input-bg);border-radius:var(--radius-md);border:solid 1px var(--input-border)}.Backdrop .Picker .SearchContainer .SearchIcon{color:var(--text-muted);font-size:.9rem;flex-shrink:0}.Backdrop .Picker .SearchContainer .SearchIcon lucide-icon .lucide-icon-svg{width:.9rem;height:.9rem}.Backdrop .Picker .SearchContainer .SearchInput{flex:1;border:none;outline:none;background:transparent;color:var(--input-text);font-size:.9rem}.Backdrop .Picker .SearchContainer .SearchInput::placeholder{color:var(--input-placeholder)}.Backdrop .Picker .CountriesList{display:flex;flex-direction:column;gap:2px;overflow-y:auto;max-height:calc(80vh - 120px)}.Backdrop .Picker .CountriesList .Item{display:flex;align-items:center;gap:var(--spacing-sm);padding:var(--spacing-sm);cursor:pointer;border-radius:var(--radius-md);transition:background-color .2s}.Backdrop .Picker .CountriesList .Item:hover{background-color:var(--surface-2)}.Backdrop .Picker .CountriesList .Item .Icon{width:25px;height:25px;object-fit:contain;flex-shrink:0}.Backdrop .Picker .CountriesList .Item .Code{padding:2px var(--spacing-sm);border-radius:100px;font-size:.8rem;font-weight:500;background-color:var(--primary);color:var(--surface);display:flex;justify-content:center;align-items:center;white-space:nowrap;flex-shrink:0}.Backdrop .Picker .CountriesList .Item .Country{flex:1;color:var(--text-primary);font-size:.9rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n"] }]
11205
+ }], ctorParameters: () => [{ type: PhoneEntryModalService }, { type: i0.ChangeDetectorRef }] });
11206
+
11207
+ class DatePickerModalServiceComponent {
11208
+ datePickerModal;
11209
+ cdr;
11210
+ vm$;
11211
+ sub;
11212
+ constructor(datePickerModal, cdr) {
11213
+ this.datePickerModal = datePickerModal;
11214
+ this.cdr = cdr;
11215
+ this.vm$ = this.datePickerModal.state$;
11216
+ }
11217
+ ngOnInit() {
11218
+ this.sub = this.datePickerModal.state$.subscribe(() => this.cdr.markForCheck());
11219
+ }
11220
+ ngOnDestroy() {
11221
+ this.sub?.unsubscribe();
11222
+ }
11223
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: DatePickerModalServiceComponent, deps: [{ token: DatePickerModalService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
11224
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.11", type: DatePickerModalServiceComponent, isStandalone: true, selector: "date-picker-modal-service", ngImport: i0, template: "<ng-container *ngIf=\"vm$ | async as session\">\r\n <div\r\n class=\"Backdrop InputModalBackdrop date-picker-modal\"\r\n (click)=\"session.handlers.toggleShowPicker($event)\"\r\n >\r\n <div class=\"Picker\" (click)=\"$event.stopPropagation()\">\r\n <div class=\"Preview\" *ngIf=\"session.view.selectedValue\">\r\n <span>{{ session.view.selectedValueExtended }}</span>\r\n </div>\r\n\r\n <div class=\"Cards\">\r\n <div class=\"CardYears\" *ngIf=\"session.view.showYears\">\r\n <div class=\"years Scroll\">\r\n <div\r\n *ngFor=\"let y of session.view.years\"\r\n (click)=\"session.handlers.onSelectYear(y, $event)\"\r\n class=\"year\"\r\n [class.selected]=\"y === session.view.selectedYear\"\r\n >\r\n {{ y }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"CardMonths\" *ngIf=\"session.view.showMonths\">\r\n <div class=\"CardChangeYear\">\r\n <p\r\n class=\"LabelYear\"\r\n (click)=\"session.handlers.openYears($event)\"\r\n >\r\n {{ session.view.selectedYear || 'A\u00F1o' }}\r\n </p>\r\n <lucide-icon class=\"Up\" name=\"chevron-up\" (click)=\"session.handlers.onDecrementYear($event)\"></lucide-icon>\r\n <lucide-icon class=\"Down\" name=\"chevron-down\" (click)=\"session.handlers.onIncrementYear($event)\"></lucide-icon>\r\n </div>\r\n\r\n <div class=\"months Scroll\">\r\n <div\r\n *ngFor=\"let m of session.view.months\"\r\n class=\"month\"\r\n [class.selected]=\"m === session.view.selectedMonth\"\r\n (click)=\"session.handlers.onSelectMonth(m, $event)\"\r\n >\r\n <span class=\"NameMonth\">{{\r\n session.view.MONTH_NAMES[m - 1]\r\n }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"CardDates\">\r\n <div class=\"CardChangeMonth\">\r\n <p\r\n class=\"LabelMonth\"\r\n (click)=\"session.handlers.openMonths($event)\"\r\n >\r\n {{ session.view.formattedMonthAndYear || 'Mes' }}\r\n </p>\r\n <lucide-icon class=\"Up\" name=\"chevron-up\" (click)=\"session.handlers.onDecrementMonth($event)\"></lucide-icon>\r\n <lucide-icon class=\"Down\" name=\"chevron-down\" (click)=\"session.handlers.onIncrementMonth($event)\"></lucide-icon>\r\n </div>\r\n\r\n <div class=\"Labels\">\r\n <div class=\"LabelDay\">DO</div>\r\n <div class=\"LabelDay\">LU</div>\r\n <div class=\"LabelDay\">MA</div>\r\n <div class=\"LabelDay\">MI</div>\r\n <div class=\"LabelDay\">JU</div>\r\n <div class=\"LabelDay\">VI</div>\r\n <div class=\"LabelDay\">SA</div>\r\n </div>\r\n <div class=\"dates\">\r\n <div\r\n *ngFor=\"let d of session.view.calendarDays\"\r\n (click)=\"session.handlers.onClickDay(d, $event)\"\r\n class=\"day Scroll\"\r\n [class.selected]=\"\r\n d.isCurrentMonth && d.day === session.view.selectedDay\r\n \"\r\n [class.outside]=\"!d.isCurrentMonth\"\r\n [class.sunday]=\"d.date.weekday === 7\"\r\n [class.monday]=\"d.date.weekday === 1\"\r\n [class.tuesday]=\"d.date.weekday === 2\"\r\n [class.wednesday]=\"d.date.weekday === 3\"\r\n [class.thursday]=\"d.date.weekday === 4\"\r\n [class.friday]=\"d.date.weekday === 5\"\r\n [class.saturday]=\"d.date.weekday === 6\"\r\n >\r\n {{ d.day.toString().padStart(2, '0') }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"Actions\">\r\n <div class=\"Cancel\" (click)=\"session.handlers.onCancel()\">\r\n Cancelar\r\n </div>\r\n <div class=\"Clear\" (click)=\"session.handlers.onClear()\">Limpiar</div>\r\n <div class=\"Ok\" (click)=\"session.handlers.onAccept()\">Aceptar</div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: [":host(.IsDisable){opacity:.4;pointer-events:none;cursor:not-allowed}:host{display:flex;flex-direction:column;width:100%;height:max-content;-webkit-user-select:auto;user-select:auto}:host .LabelRow{display:flex;align-items:center;justify-content:space-between;gap:6px;width:100%;margin-bottom:2px}:host .Label{color:var(--text-label);flex:1;min-width:0;cursor:pointer;padding:0 3px;margin:0;font-weight:400;-webkit-user-select:none;user-select:none}:host .Label .Opcional{color:var(--text-muted)}:host .Description{-webkit-user-select:none;user-select:none;font-size:.9rem;color:var(--text-base);font-weight:400;width:100%;cursor:pointer;padding:0 3px;margin:0 0 4px;overflow:hidden;word-break:break-all}:host .Entry{display:flex;width:100%;height:32px;justify-content:flex-start;align-items:center;border:solid 0 var(--input-border);border-radius:12px;cursor:pointer;overflow:hidden;background-color:var(--input-bg)}:host .Entry:hover{border:none;outline:solid 1px var(--input-hover-border)}:host .Entry[class~=IsFocus]{border:none;outline:solid 1px var(--input-focus-border)}:host .Entry[class~=Error]{outline:solid 1px var(--input-border-error)}:host .Entry .Input{height:100%;width:100%;border:solid 0 var(--input-border);padding:0 8px;color:var(--input-text);caret-color:var(--primary);text-align:start}:host .Entry .Input:focus{border:none;outline:none}:host .Entry .Input::placeholder{color:var(--input-placeholder)}:host .Entry.NotHover:hover{border:none;outline:none}:host .Backdrop{position:fixed;top:0;left:0;z-index:800;display:flex;justify-content:center;align-items:center;width:100%;height:100%;padding:12px;background:var(--overlay-scrim);overflow:hidden}@media (width <= 768px){:host .Backdrop{align-items:flex-start}}:host .Backdrop .Picker{display:flex;flex-direction:column;gap:5px;width:100%;max-width:600px;max-height:100%;margin:0 auto;background:var(--surface);border-radius:16px;padding:12px;overflow:hidden;overflow-y:auto;box-shadow:0 0 8px var(--shadow-color)}:host{display:contents}.Backdrop{position:fixed;top:0;left:0;z-index:10050;display:flex;justify-content:center;align-items:center;width:100%;height:100%;padding:12px;background:var(--overlay-scrim);overflow:hidden}@media (width <= 768px){.Backdrop{align-items:flex-start}}.Backdrop .Picker{max-width:400px}.Backdrop .Picker .Preview{background-color:var(--surface-2);border-radius:var(--radius-lg);padding:var(--spacing-sm) var(--spacing-sm);text-align:center;color:var(--text-primary);margin-bottom:var(--spacing-sm);font-size:var(--size-sm);font-weight:500}.Backdrop .Picker .Preview:first-letter{text-transform:uppercase}.Backdrop .Picker .Cards{position:relative;width:100%;height:100%}.Backdrop .Picker .Cards .CardMonths .CardChangeYear,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth,.Backdrop .Picker .Cards .CardDates .CardChangeYear,.Backdrop .Picker .Cards .CardDates .CardChangeMonth{width:100%;height:30px;display:flex;align-items:center;margin-bottom:10px}.Backdrop .Picker .Cards .CardMonths .CardChangeYear .LabelYear,.Backdrop .Picker .Cards .CardMonths .CardChangeYear .LabelMonth,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .LabelYear,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .LabelMonth,.Backdrop .Picker .Cards .CardDates .CardChangeYear .LabelYear,.Backdrop .Picker .Cards .CardDates .CardChangeYear .LabelMonth,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .LabelYear,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .LabelMonth{height:30px;padding:0 10px;display:flex;align-items:center;margin-right:auto;font-weight:600;cursor:pointer;border-radius:var(--radius-md)}.Backdrop .Picker .Cards .CardMonths .CardChangeYear .LabelYear:first-letter,.Backdrop .Picker .Cards .CardMonths .CardChangeYear .LabelMonth:first-letter,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .LabelYear:first-letter,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .LabelMonth:first-letter,.Backdrop .Picker .Cards .CardDates .CardChangeYear .LabelYear:first-letter,.Backdrop .Picker .Cards .CardDates .CardChangeYear .LabelMonth:first-letter,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .LabelYear:first-letter,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .LabelMonth:first-letter{text-transform:uppercase}.Backdrop .Picker .Cards .CardMonths .CardChangeYear .LabelYear:hover,.Backdrop .Picker .Cards .CardMonths .CardChangeYear .LabelMonth:hover,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .LabelYear:hover,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .LabelMonth:hover,.Backdrop .Picker .Cards .CardDates .CardChangeYear .LabelYear:hover,.Backdrop .Picker .Cards .CardDates .CardChangeYear .LabelMonth:hover,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .LabelYear:hover,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .LabelMonth:hover{background-color:var(--surface-2)}.Backdrop .Picker .Cards .CardMonths .CardChangeYear .Up,.Backdrop .Picker .Cards .CardMonths .CardChangeYear .Down,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .Up,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .Down,.Backdrop .Picker .Cards .CardDates .CardChangeYear .Up,.Backdrop .Picker .Cards .CardDates .CardChangeYear .Down,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .Up,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .Down{width:30px;height:30px;display:flex;justify-content:center;align-items:center;border-radius:var(--radius-md);cursor:pointer;font-size:.8rem}.Backdrop .Picker .Cards .CardMonths .CardChangeYear .Up lucide-icon .lucide-icon-svg,.Backdrop .Picker .Cards .CardMonths .CardChangeYear .Down lucide-icon .lucide-icon-svg,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .Up lucide-icon .lucide-icon-svg,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .Down lucide-icon .lucide-icon-svg,.Backdrop .Picker .Cards .CardDates .CardChangeYear .Up lucide-icon .lucide-icon-svg,.Backdrop .Picker .Cards .CardDates .CardChangeYear .Down lucide-icon .lucide-icon-svg,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .Up lucide-icon .lucide-icon-svg,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .Down lucide-icon .lucide-icon-svg{width:.8rem;height:.8rem}.Backdrop .Picker .Cards .CardMonths .CardChangeYear .Up:hover,.Backdrop .Picker .Cards .CardMonths .CardChangeYear .Down:hover,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .Up:hover,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .Down:hover,.Backdrop .Picker .Cards .CardDates .CardChangeYear .Up:hover,.Backdrop .Picker .Cards .CardDates .CardChangeYear .Down:hover,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .Up:hover,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .Down:hover{background-color:var(--surface-2)}.Backdrop .Picker .Cards .CardYears{position:absolute;top:0;left:0;z-index:10;width:100%;height:100%;background:var(--xu-on-fill)}.Backdrop .Picker .Cards .CardYears .years{display:grid;grid-template-columns:repeat(4,1fr);grid-auto-rows:35px;justify-items:center;align-items:center;width:100%;height:100%;overflow:hidden;overflow-y:auto}.Backdrop .Picker .Cards .CardYears .years .year{width:100%;height:100%;display:flex;justify-content:center;align-items:center;border-radius:var(--radius-md);text-transform:capitalize;padding:var(--spacing-xs) var(--spacing-md);border-radius:var(--radius-lg);cursor:pointer}.Backdrop .Picker .Cards .CardYears .years .year:hover{background-color:var(--surface-2)}.Backdrop .Picker .Cards .CardYears .years .selected{background-color:var(--primary);color:var(--xu-on-fill);font-weight:700}.Backdrop .Picker .Cards .CardYears .years .selected:hover{background-color:var(--primary)}.Backdrop .Picker .Cards .CardMonths{position:absolute;top:0;left:0;width:100%;height:100%;background:var(--xu-on-fill);overflow:hidden;display:flex;flex-direction:column}.Backdrop .Picker .Cards .CardMonths .months{display:grid;grid-template-columns:repeat(3,1fr);grid-auto-rows:1fr;justify-items:center;align-items:center;width:100%;height:100%;overflow:hidden;overflow-y:auto}.Backdrop .Picker .Cards .CardMonths .months .month{width:100%;height:100%;display:flex;justify-content:center;align-items:center;gap:5px;padding:var(--spacing-xs) var(--spacing-md);border-radius:var(--radius-lg);cursor:pointer}.Backdrop .Picker .Cards .CardMonths .months .month:hover{background-color:var(--surface-2)}.Backdrop .Picker .Cards .CardMonths .months .selected{background-color:var(--primary);color:var(--text-muted);font-weight:700}.Backdrop .Picker .Cards .CardMonths .months .selected:hover{background-color:var(--primary)}.Backdrop .Picker .Cards .CardDates .Labels{display:grid;grid-template-columns:repeat(7,1fr);grid-auto-rows:30px;justify-items:center;align-items:center;width:100%}.Backdrop .Picker .Cards .CardDates .Labels .LabelDay{font-size:.8rem;font-weight:700}.Backdrop .Picker .Cards .CardDates .dates{display:grid;grid-template-columns:repeat(7,1fr);grid-auto-rows:30px;justify-items:center;align-items:center;width:100%;overflow:hidden;overflow-y:auto}.Backdrop .Picker .Cards .CardDates .dates .day{width:100%;height:100%;display:flex;justify-content:center;align-items:center;border-radius:var(--radius-lg);cursor:pointer}.Backdrop .Picker .Cards .CardDates .dates .day:hover{background-color:var(--surface-2)}.Backdrop .Picker .Cards .CardDates .dates .sunday{color:var(--error-text)}.Backdrop .Picker .Cards .CardDates .dates .outside{cursor:auto;color:var(--text-muted);pointer-events:none;cursor:not-allowed}.Backdrop .Picker .Cards .CardDates .dates .selected{background-color:var(--primary);color:var(--xu-on-fill);font-weight:700}.Backdrop .Picker .Cards .CardDates .dates .selected:hover{background-color:var(--primary)}.Backdrop .Picker .Actions{display:flex;justify-content:flex-end;gap:var(--spacing-xs);margin-top:var(--spacing-md)}.Backdrop .Picker .Actions .Ok{padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--radius-lg);color:var(--btn-primary-text);border-color:var(--btn-primary-border);background-color:var(--btn-primary-bg);cursor:pointer}.Backdrop .Picker .Actions .Ok:hover{color:var(--btn-primary-text-hover);border-color:var(--btn-primary-border-hover);background-color:var(--btn-primary-bg-hover)}.Backdrop .Picker .Actions .Ok:active{color:var(--btn-primary-text-active);border-color:var(--btn-primary-border-active);background-color:var(--btn-primary-bg-active)}.Backdrop .Picker .Actions .Ok:disabled{opacity:.6;cursor:not-allowed}.Backdrop .Picker .Actions .Clear{padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--radius-lg);color:var(--btn-secondary-text);border-color:var(--btn-secondary-border);background-color:var(--btn-secondary-bg);cursor:pointer}.Backdrop .Picker .Actions .Clear:hover{color:var(--btn-secondary-text-hover);border-color:var(--btn-secondary-border-hover);background-color:var(--btn-secondary-bg-hover)}.Backdrop .Picker .Actions .Clear:active{color:var(--btn-secondary-text-active);border-color:var(--btn-secondary-border-active);background-color:var(--btn-secondary-bg-active)}.Backdrop .Picker .Actions .Clear:disabled{opacity:.6;cursor:not-allowed}.Backdrop .Picker .Actions .Cancel{padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--radius-lg);color:var(--btn-cancel-text);border-color:var(--btn-cancel-border);background-color:var(--btn-cancel-bg);cursor:pointer}.Backdrop .Picker .Actions .Cancel:hover{color:var(--btn-cancel-text-hover);border-color:var(--btn-cancel-border-hover);background-color:var(--btn-cancel-bg-hover)}.Backdrop .Picker .Actions .Cancel:active{color:var(--btn-cancel-text-active);border-color:var(--btn-cancel-border-active);background-color:var(--btn-cancel-bg-active)}.Backdrop .Picker .Actions .Cancel:disabled{opacity:.6;cursor:not-allowed}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "component", type: LucideIconComponent, selector: "lucide-icon", inputs: ["name", "size", "spin", "filled"] }] });
11225
+ }
11226
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: DatePickerModalServiceComponent, decorators: [{
11227
+ type: Component,
11228
+ args: [{ selector: 'date-picker-modal-service', standalone: true, imports: [CommonModule, LucideIconComponent], template: "<ng-container *ngIf=\"vm$ | async as session\">\r\n <div\r\n class=\"Backdrop InputModalBackdrop date-picker-modal\"\r\n (click)=\"session.handlers.toggleShowPicker($event)\"\r\n >\r\n <div class=\"Picker\" (click)=\"$event.stopPropagation()\">\r\n <div class=\"Preview\" *ngIf=\"session.view.selectedValue\">\r\n <span>{{ session.view.selectedValueExtended }}</span>\r\n </div>\r\n\r\n <div class=\"Cards\">\r\n <div class=\"CardYears\" *ngIf=\"session.view.showYears\">\r\n <div class=\"years Scroll\">\r\n <div\r\n *ngFor=\"let y of session.view.years\"\r\n (click)=\"session.handlers.onSelectYear(y, $event)\"\r\n class=\"year\"\r\n [class.selected]=\"y === session.view.selectedYear\"\r\n >\r\n {{ y }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"CardMonths\" *ngIf=\"session.view.showMonths\">\r\n <div class=\"CardChangeYear\">\r\n <p\r\n class=\"LabelYear\"\r\n (click)=\"session.handlers.openYears($event)\"\r\n >\r\n {{ session.view.selectedYear || 'A\u00F1o' }}\r\n </p>\r\n <lucide-icon class=\"Up\" name=\"chevron-up\" (click)=\"session.handlers.onDecrementYear($event)\"></lucide-icon>\r\n <lucide-icon class=\"Down\" name=\"chevron-down\" (click)=\"session.handlers.onIncrementYear($event)\"></lucide-icon>\r\n </div>\r\n\r\n <div class=\"months Scroll\">\r\n <div\r\n *ngFor=\"let m of session.view.months\"\r\n class=\"month\"\r\n [class.selected]=\"m === session.view.selectedMonth\"\r\n (click)=\"session.handlers.onSelectMonth(m, $event)\"\r\n >\r\n <span class=\"NameMonth\">{{\r\n session.view.MONTH_NAMES[m - 1]\r\n }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"CardDates\">\r\n <div class=\"CardChangeMonth\">\r\n <p\r\n class=\"LabelMonth\"\r\n (click)=\"session.handlers.openMonths($event)\"\r\n >\r\n {{ session.view.formattedMonthAndYear || 'Mes' }}\r\n </p>\r\n <lucide-icon class=\"Up\" name=\"chevron-up\" (click)=\"session.handlers.onDecrementMonth($event)\"></lucide-icon>\r\n <lucide-icon class=\"Down\" name=\"chevron-down\" (click)=\"session.handlers.onIncrementMonth($event)\"></lucide-icon>\r\n </div>\r\n\r\n <div class=\"Labels\">\r\n <div class=\"LabelDay\">DO</div>\r\n <div class=\"LabelDay\">LU</div>\r\n <div class=\"LabelDay\">MA</div>\r\n <div class=\"LabelDay\">MI</div>\r\n <div class=\"LabelDay\">JU</div>\r\n <div class=\"LabelDay\">VI</div>\r\n <div class=\"LabelDay\">SA</div>\r\n </div>\r\n <div class=\"dates\">\r\n <div\r\n *ngFor=\"let d of session.view.calendarDays\"\r\n (click)=\"session.handlers.onClickDay(d, $event)\"\r\n class=\"day Scroll\"\r\n [class.selected]=\"\r\n d.isCurrentMonth && d.day === session.view.selectedDay\r\n \"\r\n [class.outside]=\"!d.isCurrentMonth\"\r\n [class.sunday]=\"d.date.weekday === 7\"\r\n [class.monday]=\"d.date.weekday === 1\"\r\n [class.tuesday]=\"d.date.weekday === 2\"\r\n [class.wednesday]=\"d.date.weekday === 3\"\r\n [class.thursday]=\"d.date.weekday === 4\"\r\n [class.friday]=\"d.date.weekday === 5\"\r\n [class.saturday]=\"d.date.weekday === 6\"\r\n >\r\n {{ d.day.toString().padStart(2, '0') }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"Actions\">\r\n <div class=\"Cancel\" (click)=\"session.handlers.onCancel()\">\r\n Cancelar\r\n </div>\r\n <div class=\"Clear\" (click)=\"session.handlers.onClear()\">Limpiar</div>\r\n <div class=\"Ok\" (click)=\"session.handlers.onAccept()\">Aceptar</div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: [":host(.IsDisable){opacity:.4;pointer-events:none;cursor:not-allowed}:host{display:flex;flex-direction:column;width:100%;height:max-content;-webkit-user-select:auto;user-select:auto}:host .LabelRow{display:flex;align-items:center;justify-content:space-between;gap:6px;width:100%;margin-bottom:2px}:host .Label{color:var(--text-label);flex:1;min-width:0;cursor:pointer;padding:0 3px;margin:0;font-weight:400;-webkit-user-select:none;user-select:none}:host .Label .Opcional{color:var(--text-muted)}:host .Description{-webkit-user-select:none;user-select:none;font-size:.9rem;color:var(--text-base);font-weight:400;width:100%;cursor:pointer;padding:0 3px;margin:0 0 4px;overflow:hidden;word-break:break-all}:host .Entry{display:flex;width:100%;height:32px;justify-content:flex-start;align-items:center;border:solid 0 var(--input-border);border-radius:12px;cursor:pointer;overflow:hidden;background-color:var(--input-bg)}:host .Entry:hover{border:none;outline:solid 1px var(--input-hover-border)}:host .Entry[class~=IsFocus]{border:none;outline:solid 1px var(--input-focus-border)}:host .Entry[class~=Error]{outline:solid 1px var(--input-border-error)}:host .Entry .Input{height:100%;width:100%;border:solid 0 var(--input-border);padding:0 8px;color:var(--input-text);caret-color:var(--primary);text-align:start}:host .Entry .Input:focus{border:none;outline:none}:host .Entry .Input::placeholder{color:var(--input-placeholder)}:host .Entry.NotHover:hover{border:none;outline:none}:host .Backdrop{position:fixed;top:0;left:0;z-index:800;display:flex;justify-content:center;align-items:center;width:100%;height:100%;padding:12px;background:var(--overlay-scrim);overflow:hidden}@media (width <= 768px){:host .Backdrop{align-items:flex-start}}:host .Backdrop .Picker{display:flex;flex-direction:column;gap:5px;width:100%;max-width:600px;max-height:100%;margin:0 auto;background:var(--surface);border-radius:16px;padding:12px;overflow:hidden;overflow-y:auto;box-shadow:0 0 8px var(--shadow-color)}:host{display:contents}.Backdrop{position:fixed;top:0;left:0;z-index:10050;display:flex;justify-content:center;align-items:center;width:100%;height:100%;padding:12px;background:var(--overlay-scrim);overflow:hidden}@media (width <= 768px){.Backdrop{align-items:flex-start}}.Backdrop .Picker{max-width:400px}.Backdrop .Picker .Preview{background-color:var(--surface-2);border-radius:var(--radius-lg);padding:var(--spacing-sm) var(--spacing-sm);text-align:center;color:var(--text-primary);margin-bottom:var(--spacing-sm);font-size:var(--size-sm);font-weight:500}.Backdrop .Picker .Preview:first-letter{text-transform:uppercase}.Backdrop .Picker .Cards{position:relative;width:100%;height:100%}.Backdrop .Picker .Cards .CardMonths .CardChangeYear,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth,.Backdrop .Picker .Cards .CardDates .CardChangeYear,.Backdrop .Picker .Cards .CardDates .CardChangeMonth{width:100%;height:30px;display:flex;align-items:center;margin-bottom:10px}.Backdrop .Picker .Cards .CardMonths .CardChangeYear .LabelYear,.Backdrop .Picker .Cards .CardMonths .CardChangeYear .LabelMonth,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .LabelYear,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .LabelMonth,.Backdrop .Picker .Cards .CardDates .CardChangeYear .LabelYear,.Backdrop .Picker .Cards .CardDates .CardChangeYear .LabelMonth,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .LabelYear,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .LabelMonth{height:30px;padding:0 10px;display:flex;align-items:center;margin-right:auto;font-weight:600;cursor:pointer;border-radius:var(--radius-md)}.Backdrop .Picker .Cards .CardMonths .CardChangeYear .LabelYear:first-letter,.Backdrop .Picker .Cards .CardMonths .CardChangeYear .LabelMonth:first-letter,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .LabelYear:first-letter,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .LabelMonth:first-letter,.Backdrop .Picker .Cards .CardDates .CardChangeYear .LabelYear:first-letter,.Backdrop .Picker .Cards .CardDates .CardChangeYear .LabelMonth:first-letter,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .LabelYear:first-letter,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .LabelMonth:first-letter{text-transform:uppercase}.Backdrop .Picker .Cards .CardMonths .CardChangeYear .LabelYear:hover,.Backdrop .Picker .Cards .CardMonths .CardChangeYear .LabelMonth:hover,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .LabelYear:hover,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .LabelMonth:hover,.Backdrop .Picker .Cards .CardDates .CardChangeYear .LabelYear:hover,.Backdrop .Picker .Cards .CardDates .CardChangeYear .LabelMonth:hover,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .LabelYear:hover,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .LabelMonth:hover{background-color:var(--surface-2)}.Backdrop .Picker .Cards .CardMonths .CardChangeYear .Up,.Backdrop .Picker .Cards .CardMonths .CardChangeYear .Down,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .Up,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .Down,.Backdrop .Picker .Cards .CardDates .CardChangeYear .Up,.Backdrop .Picker .Cards .CardDates .CardChangeYear .Down,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .Up,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .Down{width:30px;height:30px;display:flex;justify-content:center;align-items:center;border-radius:var(--radius-md);cursor:pointer;font-size:.8rem}.Backdrop .Picker .Cards .CardMonths .CardChangeYear .Up lucide-icon .lucide-icon-svg,.Backdrop .Picker .Cards .CardMonths .CardChangeYear .Down lucide-icon .lucide-icon-svg,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .Up lucide-icon .lucide-icon-svg,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .Down lucide-icon .lucide-icon-svg,.Backdrop .Picker .Cards .CardDates .CardChangeYear .Up lucide-icon .lucide-icon-svg,.Backdrop .Picker .Cards .CardDates .CardChangeYear .Down lucide-icon .lucide-icon-svg,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .Up lucide-icon .lucide-icon-svg,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .Down lucide-icon .lucide-icon-svg{width:.8rem;height:.8rem}.Backdrop .Picker .Cards .CardMonths .CardChangeYear .Up:hover,.Backdrop .Picker .Cards .CardMonths .CardChangeYear .Down:hover,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .Up:hover,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .Down:hover,.Backdrop .Picker .Cards .CardDates .CardChangeYear .Up:hover,.Backdrop .Picker .Cards .CardDates .CardChangeYear .Down:hover,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .Up:hover,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .Down:hover{background-color:var(--surface-2)}.Backdrop .Picker .Cards .CardYears{position:absolute;top:0;left:0;z-index:10;width:100%;height:100%;background:var(--xu-on-fill)}.Backdrop .Picker .Cards .CardYears .years{display:grid;grid-template-columns:repeat(4,1fr);grid-auto-rows:35px;justify-items:center;align-items:center;width:100%;height:100%;overflow:hidden;overflow-y:auto}.Backdrop .Picker .Cards .CardYears .years .year{width:100%;height:100%;display:flex;justify-content:center;align-items:center;border-radius:var(--radius-md);text-transform:capitalize;padding:var(--spacing-xs) var(--spacing-md);border-radius:var(--radius-lg);cursor:pointer}.Backdrop .Picker .Cards .CardYears .years .year:hover{background-color:var(--surface-2)}.Backdrop .Picker .Cards .CardYears .years .selected{background-color:var(--primary);color:var(--xu-on-fill);font-weight:700}.Backdrop .Picker .Cards .CardYears .years .selected:hover{background-color:var(--primary)}.Backdrop .Picker .Cards .CardMonths{position:absolute;top:0;left:0;width:100%;height:100%;background:var(--xu-on-fill);overflow:hidden;display:flex;flex-direction:column}.Backdrop .Picker .Cards .CardMonths .months{display:grid;grid-template-columns:repeat(3,1fr);grid-auto-rows:1fr;justify-items:center;align-items:center;width:100%;height:100%;overflow:hidden;overflow-y:auto}.Backdrop .Picker .Cards .CardMonths .months .month{width:100%;height:100%;display:flex;justify-content:center;align-items:center;gap:5px;padding:var(--spacing-xs) var(--spacing-md);border-radius:var(--radius-lg);cursor:pointer}.Backdrop .Picker .Cards .CardMonths .months .month:hover{background-color:var(--surface-2)}.Backdrop .Picker .Cards .CardMonths .months .selected{background-color:var(--primary);color:var(--text-muted);font-weight:700}.Backdrop .Picker .Cards .CardMonths .months .selected:hover{background-color:var(--primary)}.Backdrop .Picker .Cards .CardDates .Labels{display:grid;grid-template-columns:repeat(7,1fr);grid-auto-rows:30px;justify-items:center;align-items:center;width:100%}.Backdrop .Picker .Cards .CardDates .Labels .LabelDay{font-size:.8rem;font-weight:700}.Backdrop .Picker .Cards .CardDates .dates{display:grid;grid-template-columns:repeat(7,1fr);grid-auto-rows:30px;justify-items:center;align-items:center;width:100%;overflow:hidden;overflow-y:auto}.Backdrop .Picker .Cards .CardDates .dates .day{width:100%;height:100%;display:flex;justify-content:center;align-items:center;border-radius:var(--radius-lg);cursor:pointer}.Backdrop .Picker .Cards .CardDates .dates .day:hover{background-color:var(--surface-2)}.Backdrop .Picker .Cards .CardDates .dates .sunday{color:var(--error-text)}.Backdrop .Picker .Cards .CardDates .dates .outside{cursor:auto;color:var(--text-muted);pointer-events:none;cursor:not-allowed}.Backdrop .Picker .Cards .CardDates .dates .selected{background-color:var(--primary);color:var(--xu-on-fill);font-weight:700}.Backdrop .Picker .Cards .CardDates .dates .selected:hover{background-color:var(--primary)}.Backdrop .Picker .Actions{display:flex;justify-content:flex-end;gap:var(--spacing-xs);margin-top:var(--spacing-md)}.Backdrop .Picker .Actions .Ok{padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--radius-lg);color:var(--btn-primary-text);border-color:var(--btn-primary-border);background-color:var(--btn-primary-bg);cursor:pointer}.Backdrop .Picker .Actions .Ok:hover{color:var(--btn-primary-text-hover);border-color:var(--btn-primary-border-hover);background-color:var(--btn-primary-bg-hover)}.Backdrop .Picker .Actions .Ok:active{color:var(--btn-primary-text-active);border-color:var(--btn-primary-border-active);background-color:var(--btn-primary-bg-active)}.Backdrop .Picker .Actions .Ok:disabled{opacity:.6;cursor:not-allowed}.Backdrop .Picker .Actions .Clear{padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--radius-lg);color:var(--btn-secondary-text);border-color:var(--btn-secondary-border);background-color:var(--btn-secondary-bg);cursor:pointer}.Backdrop .Picker .Actions .Clear:hover{color:var(--btn-secondary-text-hover);border-color:var(--btn-secondary-border-hover);background-color:var(--btn-secondary-bg-hover)}.Backdrop .Picker .Actions .Clear:active{color:var(--btn-secondary-text-active);border-color:var(--btn-secondary-border-active);background-color:var(--btn-secondary-bg-active)}.Backdrop .Picker .Actions .Clear:disabled{opacity:.6;cursor:not-allowed}.Backdrop .Picker .Actions .Cancel{padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--radius-lg);color:var(--btn-cancel-text);border-color:var(--btn-cancel-border);background-color:var(--btn-cancel-bg);cursor:pointer}.Backdrop .Picker .Actions .Cancel:hover{color:var(--btn-cancel-text-hover);border-color:var(--btn-cancel-border-hover);background-color:var(--btn-cancel-bg-hover)}.Backdrop .Picker .Actions .Cancel:active{color:var(--btn-cancel-text-active);border-color:var(--btn-cancel-border-active);background-color:var(--btn-cancel-bg-active)}.Backdrop .Picker .Actions .Cancel:disabled{opacity:.6;cursor:not-allowed}\n"] }]
11229
+ }], ctorParameters: () => [{ type: DatePickerModalService }, { type: i0.ChangeDetectorRef }] });
11230
+
11231
+ class TimePickerModalServiceComponent {
11232
+ timePickerModal;
11233
+ cdr;
11234
+ vm$;
11235
+ sub;
11236
+ constructor(timePickerModal, cdr) {
11237
+ this.timePickerModal = timePickerModal;
11238
+ this.cdr = cdr;
11239
+ this.vm$ = this.timePickerModal.state$;
11240
+ }
11241
+ ngOnInit() {
11242
+ this.sub = this.timePickerModal.state$.subscribe(() => this.cdr.markForCheck());
11243
+ }
11244
+ ngOnDestroy() {
11245
+ this.sub?.unsubscribe();
11246
+ }
11247
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: TimePickerModalServiceComponent, deps: [{ token: TimePickerModalService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
11248
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.11", type: TimePickerModalServiceComponent, isStandalone: true, selector: "time-picker-modal-service", ngImport: i0, template: "<ng-container *ngIf=\"vm$ | async as session\">\r\n <div\r\n class=\"Backdrop InputModalBackdrop time-picker-modal\"\r\n (click)=\"session.handlers.toggleShowPicker($event)\"\r\n >\r\n <div class=\"Picker\" (click)=\"$event.stopPropagation()\">\r\n <div class=\"Preview\">\r\n <span>{{\r\n session.view.selectedDateExtended || 'Selecciona una hora y minuto'\r\n }}</span>\r\n </div>\r\n <div class=\"TimePicker\">\r\n <div class=\"Hours Scroll\">\r\n <div\r\n *ngFor=\"let h of session.view.HOURS\"\r\n (click)=\"session.handlers.onSelectHour(h, $event)\"\r\n class=\"hour\"\r\n [class.selected]=\"h === session.view.selectedHour\"\r\n >\r\n {{ h.toString().padStart(2, '0') }}\r\n </div>\r\n </div>\r\n <span class=\"Separate\">:</span>\r\n <div class=\"Minutes Scroll\">\r\n <div\r\n *ngFor=\"let m of session.view.MINUTES\"\r\n (click)=\"session.handlers.onSelectMinute(m, $event)\"\r\n [class.selected]=\"m === session.view.selectedMinute\"\r\n >\r\n {{ m.toString().padStart(2, '0') }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"Actions\">\r\n <div class=\"Cancel\" (click)=\"session.handlers.onCancel()\">\r\n Cancelar\r\n </div>\r\n <div class=\"Clear\" (click)=\"session.handlers.onClear()\">Limpiar</div>\r\n <div class=\"Ok\" (click)=\"session.handlers.onAccept()\">Aceptar</div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: [":host(.IsDisable){opacity:.4;pointer-events:none;cursor:not-allowed}:host{display:flex;flex-direction:column;width:100%;height:max-content;-webkit-user-select:auto;user-select:auto}:host .LabelRow{display:flex;align-items:center;justify-content:space-between;gap:6px;width:100%;margin-bottom:2px}:host .Label{color:var(--text-label);flex:1;min-width:0;cursor:pointer;padding:0 3px;margin:0;font-weight:400;-webkit-user-select:none;user-select:none}:host .Label .Opcional{color:var(--text-muted)}:host .Description{-webkit-user-select:none;user-select:none;font-size:.9rem;color:var(--text-base);font-weight:400;width:100%;cursor:pointer;padding:0 3px;margin:0 0 4px;overflow:hidden;word-break:break-all}:host .Entry{display:flex;width:100%;height:32px;justify-content:flex-start;align-items:center;border:solid 0 var(--input-border);border-radius:12px;cursor:pointer;overflow:hidden;background-color:var(--input-bg)}:host .Entry:hover{border:none;outline:solid 1px var(--input-hover-border)}:host .Entry[class~=IsFocus]{border:none;outline:solid 1px var(--input-focus-border)}:host .Entry[class~=Error]{outline:solid 1px var(--input-border-error)}:host .Entry .Input{height:100%;width:100%;border:solid 0 var(--input-border);padding:0 8px;color:var(--input-text);caret-color:var(--primary);text-align:start}:host .Entry .Input:focus{border:none;outline:none}:host .Entry .Input::placeholder{color:var(--input-placeholder)}:host .Entry.NotHover:hover{border:none;outline:none}:host .Backdrop{position:fixed;top:0;left:0;z-index:800;display:flex;justify-content:center;align-items:center;width:100%;height:100%;padding:12px;background:var(--overlay-scrim);overflow:hidden}@media (width <= 768px){:host .Backdrop{align-items:flex-start}}:host .Backdrop .Picker{display:flex;flex-direction:column;gap:5px;width:100%;max-width:600px;max-height:100%;margin:0 auto;background:var(--surface);border-radius:16px;padding:12px;overflow:hidden;overflow-y:auto;box-shadow:0 0 8px var(--shadow-color)}:host{display:contents}.Backdrop{position:fixed;top:0;left:0;z-index:10050;display:flex;justify-content:center;align-items:center;width:100%;height:100%;padding:12px;background:var(--overlay-scrim);overflow:hidden}@media (width <= 768px){.Backdrop{align-items:flex-start}}.Backdrop .Picker{max-width:400px}.Backdrop .Picker .Preview{background-color:var(--surface-2);border-radius:var(--radius-lg);padding:var(--spacing-sm) var(--spacing-sm);text-align:center;color:var(--text-primary);margin-bottom:var(--spacing-sm);font-size:var(--size-sm);font-weight:500}.Backdrop .Picker .Preview:first-letter{text-transform:uppercase}.Backdrop .Picker .TimePicker{display:grid;grid-template-columns:1fr 10px 1fr;grid-auto-rows:100px;gap:5px;align-items:center;justify-items:center;-webkit-user-select:none;user-select:none;padding-top:var(--spacing-sm)}.Backdrop .Picker .TimePicker .Separate{font-weight:900;font-size:2rem;color:var(--text-muted)}.Backdrop .Picker .TimePicker .Hours,.Backdrop .Picker .TimePicker .Minutes{width:100%;height:100%;overflow:hidden;overflow-y:auto;background-color:var(--surface-2);border-radius:var(--radius-lg);display:grid;grid-template-columns:repeat(1,1fr);grid-auto-rows:30px;scrollbar-width:none;-ms-overflow-style:none}.Backdrop .Picker .TimePicker .Hours::-webkit-scrollbar,.Backdrop .Picker .TimePicker .Minutes::-webkit-scrollbar{display:none}.Backdrop .Picker .TimePicker .Hours div,.Backdrop .Picker .TimePicker .Minutes div{border-radius:var(--radius-lg);padding:var(--spacing-md);display:flex;justify-content:center;align-items:center;cursor:pointer}.Backdrop .Picker .TimePicker .Hours div:hover,.Backdrop .Picker .TimePicker .Minutes div:hover{background-color:var(--surface-3)}.Backdrop .Picker .TimePicker .Hours .selected,.Backdrop .Picker .TimePicker .Minutes .selected{background-color:var(--primary);color:var(--text-muted);font-weight:700}.Backdrop .Picker .TimePicker .Hours .selected:hover,.Backdrop .Picker .TimePicker .Minutes .selected:hover{background-color:var(--primary)}.Backdrop .Picker .Actions{display:flex;justify-content:flex-end;gap:var(--spacing-xs);margin-top:var(--spacing-md)}.Backdrop .Picker .Actions .Ok{padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--radius-lg);color:var(--btn-primary-text);border-color:var(--btn-primary-border);background-color:var(--btn-primary-bg);cursor:pointer}.Backdrop .Picker .Actions .Ok:hover{color:var(--btn-primary-text-hover);border-color:var(--btn-primary-border-hover);background-color:var(--btn-primary-bg-hover)}.Backdrop .Picker .Actions .Ok:active{color:var(--btn-primary-text-active);border-color:var(--btn-primary-border-active);background-color:var(--btn-primary-bg-active)}.Backdrop .Picker .Actions .Ok:disabled{opacity:.6;cursor:not-allowed}.Backdrop .Picker .Actions .Clear{padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--radius-lg);color:var(--btn-secondary-text);border-color:var(--btn-secondary-border);background-color:var(--btn-secondary-bg);cursor:pointer}.Backdrop .Picker .Actions .Clear:hover{color:var(--btn-secondary-text-hover);border-color:var(--btn-secondary-border-hover);background-color:var(--btn-secondary-bg-hover)}.Backdrop .Picker .Actions .Clear:active{color:var(--btn-secondary-text-active);border-color:var(--btn-secondary-border-active);background-color:var(--btn-secondary-bg-active)}.Backdrop .Picker .Actions .Clear:disabled{opacity:.6;cursor:not-allowed}.Backdrop .Picker .Actions .Cancel{padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--radius-lg);color:var(--btn-cancel-text);border-color:var(--btn-cancel-border);background-color:var(--btn-cancel-bg);cursor:pointer}.Backdrop .Picker .Actions .Cancel:hover{color:var(--btn-cancel-text-hover);border-color:var(--btn-cancel-border-hover);background-color:var(--btn-cancel-bg-hover)}.Backdrop .Picker .Actions .Cancel:active{color:var(--btn-cancel-text-active);border-color:var(--btn-cancel-border-active);background-color:var(--btn-cancel-bg-active)}.Backdrop .Picker .Actions .Cancel:disabled{opacity:.6;cursor:not-allowed}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] });
11249
+ }
11250
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: TimePickerModalServiceComponent, decorators: [{
11251
+ type: Component,
11252
+ args: [{ selector: 'time-picker-modal-service', standalone: true, imports: [CommonModule], template: "<ng-container *ngIf=\"vm$ | async as session\">\r\n <div\r\n class=\"Backdrop InputModalBackdrop time-picker-modal\"\r\n (click)=\"session.handlers.toggleShowPicker($event)\"\r\n >\r\n <div class=\"Picker\" (click)=\"$event.stopPropagation()\">\r\n <div class=\"Preview\">\r\n <span>{{\r\n session.view.selectedDateExtended || 'Selecciona una hora y minuto'\r\n }}</span>\r\n </div>\r\n <div class=\"TimePicker\">\r\n <div class=\"Hours Scroll\">\r\n <div\r\n *ngFor=\"let h of session.view.HOURS\"\r\n (click)=\"session.handlers.onSelectHour(h, $event)\"\r\n class=\"hour\"\r\n [class.selected]=\"h === session.view.selectedHour\"\r\n >\r\n {{ h.toString().padStart(2, '0') }}\r\n </div>\r\n </div>\r\n <span class=\"Separate\">:</span>\r\n <div class=\"Minutes Scroll\">\r\n <div\r\n *ngFor=\"let m of session.view.MINUTES\"\r\n (click)=\"session.handlers.onSelectMinute(m, $event)\"\r\n [class.selected]=\"m === session.view.selectedMinute\"\r\n >\r\n {{ m.toString().padStart(2, '0') }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"Actions\">\r\n <div class=\"Cancel\" (click)=\"session.handlers.onCancel()\">\r\n Cancelar\r\n </div>\r\n <div class=\"Clear\" (click)=\"session.handlers.onClear()\">Limpiar</div>\r\n <div class=\"Ok\" (click)=\"session.handlers.onAccept()\">Aceptar</div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: [":host(.IsDisable){opacity:.4;pointer-events:none;cursor:not-allowed}:host{display:flex;flex-direction:column;width:100%;height:max-content;-webkit-user-select:auto;user-select:auto}:host .LabelRow{display:flex;align-items:center;justify-content:space-between;gap:6px;width:100%;margin-bottom:2px}:host .Label{color:var(--text-label);flex:1;min-width:0;cursor:pointer;padding:0 3px;margin:0;font-weight:400;-webkit-user-select:none;user-select:none}:host .Label .Opcional{color:var(--text-muted)}:host .Description{-webkit-user-select:none;user-select:none;font-size:.9rem;color:var(--text-base);font-weight:400;width:100%;cursor:pointer;padding:0 3px;margin:0 0 4px;overflow:hidden;word-break:break-all}:host .Entry{display:flex;width:100%;height:32px;justify-content:flex-start;align-items:center;border:solid 0 var(--input-border);border-radius:12px;cursor:pointer;overflow:hidden;background-color:var(--input-bg)}:host .Entry:hover{border:none;outline:solid 1px var(--input-hover-border)}:host .Entry[class~=IsFocus]{border:none;outline:solid 1px var(--input-focus-border)}:host .Entry[class~=Error]{outline:solid 1px var(--input-border-error)}:host .Entry .Input{height:100%;width:100%;border:solid 0 var(--input-border);padding:0 8px;color:var(--input-text);caret-color:var(--primary);text-align:start}:host .Entry .Input:focus{border:none;outline:none}:host .Entry .Input::placeholder{color:var(--input-placeholder)}:host .Entry.NotHover:hover{border:none;outline:none}:host .Backdrop{position:fixed;top:0;left:0;z-index:800;display:flex;justify-content:center;align-items:center;width:100%;height:100%;padding:12px;background:var(--overlay-scrim);overflow:hidden}@media (width <= 768px){:host .Backdrop{align-items:flex-start}}:host .Backdrop .Picker{display:flex;flex-direction:column;gap:5px;width:100%;max-width:600px;max-height:100%;margin:0 auto;background:var(--surface);border-radius:16px;padding:12px;overflow:hidden;overflow-y:auto;box-shadow:0 0 8px var(--shadow-color)}:host{display:contents}.Backdrop{position:fixed;top:0;left:0;z-index:10050;display:flex;justify-content:center;align-items:center;width:100%;height:100%;padding:12px;background:var(--overlay-scrim);overflow:hidden}@media (width <= 768px){.Backdrop{align-items:flex-start}}.Backdrop .Picker{max-width:400px}.Backdrop .Picker .Preview{background-color:var(--surface-2);border-radius:var(--radius-lg);padding:var(--spacing-sm) var(--spacing-sm);text-align:center;color:var(--text-primary);margin-bottom:var(--spacing-sm);font-size:var(--size-sm);font-weight:500}.Backdrop .Picker .Preview:first-letter{text-transform:uppercase}.Backdrop .Picker .TimePicker{display:grid;grid-template-columns:1fr 10px 1fr;grid-auto-rows:100px;gap:5px;align-items:center;justify-items:center;-webkit-user-select:none;user-select:none;padding-top:var(--spacing-sm)}.Backdrop .Picker .TimePicker .Separate{font-weight:900;font-size:2rem;color:var(--text-muted)}.Backdrop .Picker .TimePicker .Hours,.Backdrop .Picker .TimePicker .Minutes{width:100%;height:100%;overflow:hidden;overflow-y:auto;background-color:var(--surface-2);border-radius:var(--radius-lg);display:grid;grid-template-columns:repeat(1,1fr);grid-auto-rows:30px;scrollbar-width:none;-ms-overflow-style:none}.Backdrop .Picker .TimePicker .Hours::-webkit-scrollbar,.Backdrop .Picker .TimePicker .Minutes::-webkit-scrollbar{display:none}.Backdrop .Picker .TimePicker .Hours div,.Backdrop .Picker .TimePicker .Minutes div{border-radius:var(--radius-lg);padding:var(--spacing-md);display:flex;justify-content:center;align-items:center;cursor:pointer}.Backdrop .Picker .TimePicker .Hours div:hover,.Backdrop .Picker .TimePicker .Minutes div:hover{background-color:var(--surface-3)}.Backdrop .Picker .TimePicker .Hours .selected,.Backdrop .Picker .TimePicker .Minutes .selected{background-color:var(--primary);color:var(--text-muted);font-weight:700}.Backdrop .Picker .TimePicker .Hours .selected:hover,.Backdrop .Picker .TimePicker .Minutes .selected:hover{background-color:var(--primary)}.Backdrop .Picker .Actions{display:flex;justify-content:flex-end;gap:var(--spacing-xs);margin-top:var(--spacing-md)}.Backdrop .Picker .Actions .Ok{padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--radius-lg);color:var(--btn-primary-text);border-color:var(--btn-primary-border);background-color:var(--btn-primary-bg);cursor:pointer}.Backdrop .Picker .Actions .Ok:hover{color:var(--btn-primary-text-hover);border-color:var(--btn-primary-border-hover);background-color:var(--btn-primary-bg-hover)}.Backdrop .Picker .Actions .Ok:active{color:var(--btn-primary-text-active);border-color:var(--btn-primary-border-active);background-color:var(--btn-primary-bg-active)}.Backdrop .Picker .Actions .Ok:disabled{opacity:.6;cursor:not-allowed}.Backdrop .Picker .Actions .Clear{padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--radius-lg);color:var(--btn-secondary-text);border-color:var(--btn-secondary-border);background-color:var(--btn-secondary-bg);cursor:pointer}.Backdrop .Picker .Actions .Clear:hover{color:var(--btn-secondary-text-hover);border-color:var(--btn-secondary-border-hover);background-color:var(--btn-secondary-bg-hover)}.Backdrop .Picker .Actions .Clear:active{color:var(--btn-secondary-text-active);border-color:var(--btn-secondary-border-active);background-color:var(--btn-secondary-bg-active)}.Backdrop .Picker .Actions .Clear:disabled{opacity:.6;cursor:not-allowed}.Backdrop .Picker .Actions .Cancel{padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--radius-lg);color:var(--btn-cancel-text);border-color:var(--btn-cancel-border);background-color:var(--btn-cancel-bg);cursor:pointer}.Backdrop .Picker .Actions .Cancel:hover{color:var(--btn-cancel-text-hover);border-color:var(--btn-cancel-border-hover);background-color:var(--btn-cancel-bg-hover)}.Backdrop .Picker .Actions .Cancel:active{color:var(--btn-cancel-text-active);border-color:var(--btn-cancel-border-active);background-color:var(--btn-cancel-bg-active)}.Backdrop .Picker .Actions .Cancel:disabled{opacity:.6;cursor:not-allowed}\n"] }]
11253
+ }], ctorParameters: () => [{ type: TimePickerModalService }, { type: i0.ChangeDetectorRef }] });
11254
+
11255
+ class DatetimePickerModalServiceComponent {
11256
+ datetimePickerModal;
11257
+ cdr;
11258
+ vm$;
11259
+ sub;
11260
+ constructor(datetimePickerModal, cdr) {
11261
+ this.datetimePickerModal = datetimePickerModal;
11262
+ this.cdr = cdr;
11263
+ this.vm$ = this.datetimePickerModal.state$;
11264
+ }
11265
+ ngOnInit() {
11266
+ this.sub = this.datetimePickerModal.state$.subscribe(() => this.cdr.markForCheck());
11267
+ }
11268
+ ngOnDestroy() {
11269
+ this.sub?.unsubscribe();
11270
+ }
11271
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: DatetimePickerModalServiceComponent, deps: [{ token: DatetimePickerModalService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
11272
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.11", type: DatetimePickerModalServiceComponent, isStandalone: true, selector: "datetime-picker-modal-service", ngImport: i0, template: "<ng-container *ngIf=\"vm$ | async as session\">\r\n <div\r\n class=\"Backdrop InputModalBackdrop datetime-picker-modal\"\r\n (click)=\"session.handlers.toggleShowPicker($event)\"\r\n >\r\n <div class=\"Picker\" (click)=\"$event.stopPropagation()\">\r\n <div class=\"Preview\" *ngIf=\"session.view.selectedValue\">\r\n <span>{{ session.view.selectedDateExtended }}</span>\r\n </div>\r\n\r\n <div class=\"Cards\">\r\n <div class=\"CardYears\" *ngIf=\"session.view.showYears\">\r\n <div class=\"years Scroll\">\r\n <div\r\n *ngFor=\"let y of session.view.years\"\r\n (click)=\"session.handlers.onSelectYear(y, $event)\"\r\n class=\"year\"\r\n [class.selected]=\"y === session.view.selectedYear\"\r\n >\r\n {{ y }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"CardMonths\" *ngIf=\"session.view.showMonths\">\r\n <div class=\"CardChangeYear\">\r\n <span\r\n class=\"LabelYear\"\r\n (click)=\"session.handlers.openYears($event)\"\r\n >\r\n {{ session.view.selectedYear }}\r\n </span>\r\n <lucide-icon class=\"Up\" name=\"chevron-up\" (click)=\"session.handlers.onDecrementYear($event)\"></lucide-icon>\r\n <lucide-icon class=\"Down\" name=\"chevron-down\" (click)=\"session.handlers.onIncrementYear($event)\"></lucide-icon>\r\n </div>\r\n\r\n <div class=\"months Scroll\">\r\n <div\r\n *ngFor=\"let m of session.view.months\"\r\n (click)=\"session.handlers.onSelectMonth(m, $event)\"\r\n class=\"month\"\r\n [class.selected]=\"m === session.view.selectedMonth\"\r\n >\r\n <span class=\"NameMonth\">{{\r\n session.view.MONTH_NAMES[m - 1]\r\n }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"CardDates\">\r\n <div class=\"CardChangeMonth\">\r\n <span\r\n class=\"LabelMonth\"\r\n (click)=\"session.handlers.openMonths($event)\"\r\n >\r\n {{ session.view.formattedMonthAndYear }}\r\n </span>\r\n <lucide-icon class=\"Up\" name=\"chevron-up\" (click)=\"session.handlers.onDecrementMonth($event)\"></lucide-icon>\r\n <lucide-icon class=\"Down\" name=\"chevron-down\" (click)=\"session.handlers.onIncrementMonth($event)\"></lucide-icon>\r\n </div>\r\n\r\n <div class=\"Labels\">\r\n <div class=\"LabelDay\">DO</div>\r\n <div class=\"LabelDay\">LU</div>\r\n <div class=\"LabelDay\">MA</div>\r\n <div class=\"LabelDay\">MI</div>\r\n <div class=\"LabelDay\">JU</div>\r\n <div class=\"LabelDay\">VI</div>\r\n <div class=\"LabelDay\">SA</div>\r\n </div>\r\n <div class=\"dates\">\r\n <div\r\n *ngFor=\"let d of session.view.calendarDays\"\r\n (click)=\"session.handlers.onClickDay(d, $event)\"\r\n class=\"day Scroll\"\r\n [class.selected]=\"\r\n d.isCurrentMonth && d.day === session.view.selectedDay\r\n \"\r\n [class.outside]=\"!d.isCurrentMonth\"\r\n [class.sunday]=\"d.date.weekday === 7\"\r\n [class.monday]=\"d.date.weekday === 1\"\r\n [class.tuesday]=\"d.date.weekday === 2\"\r\n [class.wednesday]=\"d.date.weekday === 3\"\r\n [class.thursday]=\"d.date.weekday === 4\"\r\n [class.friday]=\"d.date.weekday === 5\"\r\n [class.saturday]=\"d.date.weekday === 6\"\r\n >\r\n {{ d.day.toString().padStart(2, '0') }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"TimePicker\">\r\n <div class=\"Hours Scroll\">\r\n <div\r\n *ngFor=\"let h of session.view.HOURS\"\r\n (click)=\"session.handlers.onSelectHour(h, $event)\"\r\n class=\"hour\"\r\n [class.selected]=\"h === session.view.selectedHour\"\r\n >\r\n {{ h.toString().padStart(2, '0') }}\r\n </div>\r\n </div>\r\n <span class=\"Separate\">:</span>\r\n <div class=\"Minutes Scroll\">\r\n <div\r\n *ngFor=\"let m of session.view.MINUTES\"\r\n (click)=\"session.handlers.onSelectMinute(m, $event)\"\r\n [class.selected]=\"m === session.view.selectedMinute\"\r\n >\r\n {{ m.toString().padStart(2, '0') }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"Actions\">\r\n <div class=\"Cancel\" (click)=\"session.handlers.onCancel()\">\r\n Cancelar\r\n </div>\r\n <div class=\"Clear\" (click)=\"session.handlers.onClear()\">Limpiar</div>\r\n <div class=\"Ok\" (click)=\"session.handlers.onAccept()\">Aceptar</div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: [":host(.IsDisable){opacity:.4;pointer-events:none;cursor:not-allowed}:host{display:flex;flex-direction:column;width:100%;height:max-content;-webkit-user-select:auto;user-select:auto}:host .LabelRow{display:flex;align-items:center;justify-content:space-between;gap:6px;width:100%;margin-bottom:2px}:host .Label{color:var(--text-label);flex:1;min-width:0;cursor:pointer;padding:0 3px;margin:0;font-weight:400;-webkit-user-select:none;user-select:none}:host .Label .Opcional{color:var(--text-muted)}:host .Description{-webkit-user-select:none;user-select:none;font-size:.9rem;color:var(--text-base);font-weight:400;width:100%;cursor:pointer;padding:0 3px;margin:0 0 4px;overflow:hidden;word-break:break-all}:host .Entry{display:flex;width:100%;height:32px;justify-content:flex-start;align-items:center;border:solid 0 var(--input-border);border-radius:12px;cursor:pointer;overflow:hidden;background-color:var(--input-bg)}:host .Entry:hover{border:none;outline:solid 1px var(--input-hover-border)}:host .Entry[class~=IsFocus]{border:none;outline:solid 1px var(--input-focus-border)}:host .Entry[class~=Error]{outline:solid 1px var(--input-border-error)}:host .Entry .Input{height:100%;width:100%;border:solid 0 var(--input-border);padding:0 8px;color:var(--input-text);caret-color:var(--primary);text-align:start}:host .Entry .Input:focus{border:none;outline:none}:host .Entry .Input::placeholder{color:var(--input-placeholder)}:host .Entry.NotHover:hover{border:none;outline:none}:host .Backdrop{position:fixed;top:0;left:0;z-index:800;display:flex;justify-content:center;align-items:center;width:100%;height:100%;padding:12px;background:var(--overlay-scrim);overflow:hidden}@media (width <= 768px){:host .Backdrop{align-items:flex-start}}:host .Backdrop .Picker{display:flex;flex-direction:column;gap:5px;width:100%;max-width:600px;max-height:100%;margin:0 auto;background:var(--surface);border-radius:16px;padding:12px;overflow:hidden;overflow-y:auto;box-shadow:0 0 8px var(--shadow-color)}:host{display:contents}.Backdrop{position:fixed;top:0;left:0;z-index:10050;display:flex;justify-content:center;align-items:center;width:100%;height:100%;padding:12px;background:var(--overlay-scrim);overflow:hidden}@media (width <= 768px){.Backdrop{align-items:flex-start}}.Backdrop .Picker{max-width:400px}.Backdrop .Picker .Preview{background-color:var(--surface-2);border-radius:var(--radius-lg);padding:var(--spacing-sm) var(--spacing-sm);text-align:center;color:var(--text-primary);margin-bottom:var(--spacing-sm);font-size:var(--size-sm);font-weight:500}.Backdrop .Picker .Preview:first-letter{text-transform:uppercase}.Backdrop .Picker .Cards{position:relative;width:100%;height:100%}.Backdrop .Picker .Cards .CardMonths .CardChangeYear,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth,.Backdrop .Picker .Cards .CardDates .CardChangeYear,.Backdrop .Picker .Cards .CardDates .CardChangeMonth{width:100%;height:30px;display:flex;align-items:center;margin-bottom:10px}.Backdrop .Picker .Cards .CardMonths .CardChangeYear .LabelYear,.Backdrop .Picker .Cards .CardMonths .CardChangeYear .LabelMonth,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .LabelYear,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .LabelMonth,.Backdrop .Picker .Cards .CardDates .CardChangeYear .LabelYear,.Backdrop .Picker .Cards .CardDates .CardChangeYear .LabelMonth,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .LabelYear,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .LabelMonth{height:30px;padding:0 10px;display:flex;align-items:center;margin-right:auto;font-weight:600;cursor:pointer;border-radius:var(--radius-md)}.Backdrop .Picker .Cards .CardMonths .CardChangeYear .LabelYear:first-letter,.Backdrop .Picker .Cards .CardMonths .CardChangeYear .LabelMonth:first-letter,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .LabelYear:first-letter,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .LabelMonth:first-letter,.Backdrop .Picker .Cards .CardDates .CardChangeYear .LabelYear:first-letter,.Backdrop .Picker .Cards .CardDates .CardChangeYear .LabelMonth:first-letter,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .LabelYear:first-letter,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .LabelMonth:first-letter{text-transform:uppercase}.Backdrop .Picker .Cards .CardMonths .CardChangeYear .LabelYear:hover,.Backdrop .Picker .Cards .CardMonths .CardChangeYear .LabelMonth:hover,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .LabelYear:hover,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .LabelMonth:hover,.Backdrop .Picker .Cards .CardDates .CardChangeYear .LabelYear:hover,.Backdrop .Picker .Cards .CardDates .CardChangeYear .LabelMonth:hover,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .LabelYear:hover,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .LabelMonth:hover{background-color:var(--surface-2)}.Backdrop .Picker .Cards .CardMonths .CardChangeYear .Up,.Backdrop .Picker .Cards .CardMonths .CardChangeYear .Down,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .Up,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .Down,.Backdrop .Picker .Cards .CardDates .CardChangeYear .Up,.Backdrop .Picker .Cards .CardDates .CardChangeYear .Down,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .Up,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .Down{width:30px;height:30px;display:flex;justify-content:center;align-items:center;border-radius:var(--radius-md);cursor:pointer;font-size:.8rem}.Backdrop .Picker .Cards .CardMonths .CardChangeYear .Up lucide-icon .lucide-icon-svg,.Backdrop .Picker .Cards .CardMonths .CardChangeYear .Down lucide-icon .lucide-icon-svg,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .Up lucide-icon .lucide-icon-svg,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .Down lucide-icon .lucide-icon-svg,.Backdrop .Picker .Cards .CardDates .CardChangeYear .Up lucide-icon .lucide-icon-svg,.Backdrop .Picker .Cards .CardDates .CardChangeYear .Down lucide-icon .lucide-icon-svg,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .Up lucide-icon .lucide-icon-svg,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .Down lucide-icon .lucide-icon-svg{width:.8rem;height:.8rem}.Backdrop .Picker .Cards .CardMonths .CardChangeYear .Up:hover,.Backdrop .Picker .Cards .CardMonths .CardChangeYear .Down:hover,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .Up:hover,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .Down:hover,.Backdrop .Picker .Cards .CardDates .CardChangeYear .Up:hover,.Backdrop .Picker .Cards .CardDates .CardChangeYear .Down:hover,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .Up:hover,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .Down:hover{background-color:var(--surface-2)}.Backdrop .Picker .Cards .CardYears{position:absolute;top:0;left:0;z-index:10;width:100%;height:100%;background:var(--xu-on-fill)}.Backdrop .Picker .Cards .CardYears .years{display:grid;grid-template-columns:repeat(4,1fr);grid-auto-rows:35px;justify-items:center;align-items:center;width:100%;height:100%;overflow:hidden;overflow-y:auto}.Backdrop .Picker .Cards .CardYears .years .year{width:100%;height:100%;display:flex;justify-content:center;align-items:center;border-radius:var(--radius-md);text-transform:capitalize;padding:var(--spacing-xs) var(--spacing-md);border-radius:var(--radius-lg);cursor:pointer}.Backdrop .Picker .Cards .CardYears .years .year:hover{background-color:var(--surface-2)}.Backdrop .Picker .Cards .CardYears .years .selected{background-color:var(--primary);color:var(--xu-on-fill);font-weight:700}.Backdrop .Picker .Cards .CardYears .years .selected:hover{background-color:var(--primary)}.Backdrop .Picker .Cards .CardMonths{position:absolute;top:0;left:0;width:100%;height:100%;background:var(--xu-on-fill);overflow:hidden;display:flex;flex-direction:column}.Backdrop .Picker .Cards .CardMonths .months{display:grid;grid-template-columns:repeat(3,1fr);grid-auto-rows:1fr;justify-items:center;align-items:center;width:100%;height:100%;overflow:hidden;overflow-y:auto}.Backdrop .Picker .Cards .CardMonths .months .month{width:100%;height:100%;display:flex;justify-content:center;align-items:center;gap:5px;padding:var(--spacing-xs) var(--spacing-md);border-radius:var(--radius-lg);cursor:pointer}.Backdrop .Picker .Cards .CardMonths .months .month:hover{background-color:var(--surface-2)}.Backdrop .Picker .Cards .CardMonths .months .selected{background-color:var(--primary);color:var(--text-muted);font-weight:700}.Backdrop .Picker .Cards .CardMonths .months .selected:hover{background-color:var(--primary)}.Backdrop .Picker .Cards .CardDates .Labels{display:grid;grid-template-columns:repeat(7,1fr);grid-auto-rows:30px;justify-items:center;align-items:center;width:100%}.Backdrop .Picker .Cards .CardDates .Labels .LabelDay{font-size:.8rem;font-weight:700}.Backdrop .Picker .Cards .CardDates .dates{display:grid;grid-template-columns:repeat(7,1fr);grid-auto-rows:30px;justify-items:center;align-items:center;width:100%;overflow:hidden;overflow-y:auto}.Backdrop .Picker .Cards .CardDates .dates .day{width:100%;height:100%;display:flex;justify-content:center;align-items:center;border-radius:var(--radius-lg);cursor:pointer}.Backdrop .Picker .Cards .CardDates .dates .day:hover{background-color:var(--surface-2)}.Backdrop .Picker .Cards .CardDates .dates .sunday{color:var(--error-text)}.Backdrop .Picker .Cards .CardDates .dates .outside{cursor:auto;color:var(--text-muted);pointer-events:none;cursor:not-allowed}.Backdrop .Picker .Cards .CardDates .dates .selected{background-color:var(--primary);color:var(--xu-on-fill);font-weight:700}.Backdrop .Picker .Cards .CardDates .dates .selected:hover{background-color:var(--primary)}.Backdrop .Picker .TimePicker{display:grid;grid-template-columns:1fr 10px 1fr;grid-auto-rows:100px;gap:5px;align-items:center;justify-items:center;-webkit-user-select:none;user-select:none;border-top:solid 1px var(--border);padding-top:var(--spacing-sm)}.Backdrop .Picker .TimePicker .Separate{font-weight:900;font-size:2rem;color:var(--text-muted)}.Backdrop .Picker .TimePicker .Hours,.Backdrop .Picker .TimePicker .Minutes{width:100%;height:100%;overflow:hidden;overflow-y:auto;background-color:var(--surface-2);border-radius:var(--radius-lg);display:grid;grid-template-columns:repeat(1,1fr);grid-auto-rows:30px;scrollbar-width:none;-ms-overflow-style:none}.Backdrop .Picker .TimePicker .Hours::-webkit-scrollbar,.Backdrop .Picker .TimePicker .Minutes::-webkit-scrollbar{display:none}.Backdrop .Picker .TimePicker .Hours div,.Backdrop .Picker .TimePicker .Minutes div{border-radius:var(--radius-lg);padding:var(--spacing-md);display:flex;justify-content:center;align-items:center;cursor:pointer}.Backdrop .Picker .TimePicker .Hours div:hover,.Backdrop .Picker .TimePicker .Minutes div:hover{background-color:var(--surface-3)}.Backdrop .Picker .TimePicker .Hours .selected,.Backdrop .Picker .TimePicker .Minutes .selected{background-color:var(--primary);color:var(--text-muted);font-weight:700}.Backdrop .Picker .TimePicker .Hours .selected:hover,.Backdrop .Picker .TimePicker .Minutes .selected:hover{background-color:var(--primary)}.Backdrop .Picker .Actions{display:flex;justify-content:flex-end;gap:var(--spacing-xs);margin-top:var(--spacing-md)}.Backdrop .Picker .Actions .Ok{padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--radius-lg);color:var(--btn-primary-text);border-color:var(--btn-primary-border);background-color:var(--btn-primary-bg);cursor:pointer}.Backdrop .Picker .Actions .Ok:hover{color:var(--btn-primary-text-hover);border-color:var(--btn-primary-border-hover);background-color:var(--btn-primary-bg-hover)}.Backdrop .Picker .Actions .Ok:active{color:var(--btn-primary-text-active);border-color:var(--btn-primary-border-active);background-color:var(--btn-primary-bg-active)}.Backdrop .Picker .Actions .Ok:disabled{opacity:.6;cursor:not-allowed}.Backdrop .Picker .Actions .Clear{padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--radius-lg);color:var(--btn-secondary-text);border-color:var(--btn-secondary-border);background-color:var(--btn-secondary-bg);cursor:pointer}.Backdrop .Picker .Actions .Clear:hover{color:var(--btn-secondary-text-hover);border-color:var(--btn-secondary-border-hover);background-color:var(--btn-secondary-bg-hover)}.Backdrop .Picker .Actions .Clear:active{color:var(--btn-secondary-text-active);border-color:var(--btn-secondary-border-active);background-color:var(--btn-secondary-bg-active)}.Backdrop .Picker .Actions .Clear:disabled{opacity:.6;cursor:not-allowed}.Backdrop .Picker .Actions .Cancel{padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--radius-lg);color:var(--btn-cancel-text);border-color:var(--btn-cancel-border);background-color:var(--btn-cancel-bg);cursor:pointer}.Backdrop .Picker .Actions .Cancel:hover{color:var(--btn-cancel-text-hover);border-color:var(--btn-cancel-border-hover);background-color:var(--btn-cancel-bg-hover)}.Backdrop .Picker .Actions .Cancel:active{color:var(--btn-cancel-text-active);border-color:var(--btn-cancel-border-active);background-color:var(--btn-cancel-bg-active)}.Backdrop .Picker .Actions .Cancel:disabled{opacity:.6;cursor:not-allowed}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "component", type: LucideIconComponent, selector: "lucide-icon", inputs: ["name", "size", "spin", "filled"] }] });
11273
+ }
11274
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: DatetimePickerModalServiceComponent, decorators: [{
11275
+ type: Component,
11276
+ args: [{ selector: 'datetime-picker-modal-service', standalone: true, imports: [CommonModule, LucideIconComponent], template: "<ng-container *ngIf=\"vm$ | async as session\">\r\n <div\r\n class=\"Backdrop InputModalBackdrop datetime-picker-modal\"\r\n (click)=\"session.handlers.toggleShowPicker($event)\"\r\n >\r\n <div class=\"Picker\" (click)=\"$event.stopPropagation()\">\r\n <div class=\"Preview\" *ngIf=\"session.view.selectedValue\">\r\n <span>{{ session.view.selectedDateExtended }}</span>\r\n </div>\r\n\r\n <div class=\"Cards\">\r\n <div class=\"CardYears\" *ngIf=\"session.view.showYears\">\r\n <div class=\"years Scroll\">\r\n <div\r\n *ngFor=\"let y of session.view.years\"\r\n (click)=\"session.handlers.onSelectYear(y, $event)\"\r\n class=\"year\"\r\n [class.selected]=\"y === session.view.selectedYear\"\r\n >\r\n {{ y }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"CardMonths\" *ngIf=\"session.view.showMonths\">\r\n <div class=\"CardChangeYear\">\r\n <span\r\n class=\"LabelYear\"\r\n (click)=\"session.handlers.openYears($event)\"\r\n >\r\n {{ session.view.selectedYear }}\r\n </span>\r\n <lucide-icon class=\"Up\" name=\"chevron-up\" (click)=\"session.handlers.onDecrementYear($event)\"></lucide-icon>\r\n <lucide-icon class=\"Down\" name=\"chevron-down\" (click)=\"session.handlers.onIncrementYear($event)\"></lucide-icon>\r\n </div>\r\n\r\n <div class=\"months Scroll\">\r\n <div\r\n *ngFor=\"let m of session.view.months\"\r\n (click)=\"session.handlers.onSelectMonth(m, $event)\"\r\n class=\"month\"\r\n [class.selected]=\"m === session.view.selectedMonth\"\r\n >\r\n <span class=\"NameMonth\">{{\r\n session.view.MONTH_NAMES[m - 1]\r\n }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"CardDates\">\r\n <div class=\"CardChangeMonth\">\r\n <span\r\n class=\"LabelMonth\"\r\n (click)=\"session.handlers.openMonths($event)\"\r\n >\r\n {{ session.view.formattedMonthAndYear }}\r\n </span>\r\n <lucide-icon class=\"Up\" name=\"chevron-up\" (click)=\"session.handlers.onDecrementMonth($event)\"></lucide-icon>\r\n <lucide-icon class=\"Down\" name=\"chevron-down\" (click)=\"session.handlers.onIncrementMonth($event)\"></lucide-icon>\r\n </div>\r\n\r\n <div class=\"Labels\">\r\n <div class=\"LabelDay\">DO</div>\r\n <div class=\"LabelDay\">LU</div>\r\n <div class=\"LabelDay\">MA</div>\r\n <div class=\"LabelDay\">MI</div>\r\n <div class=\"LabelDay\">JU</div>\r\n <div class=\"LabelDay\">VI</div>\r\n <div class=\"LabelDay\">SA</div>\r\n </div>\r\n <div class=\"dates\">\r\n <div\r\n *ngFor=\"let d of session.view.calendarDays\"\r\n (click)=\"session.handlers.onClickDay(d, $event)\"\r\n class=\"day Scroll\"\r\n [class.selected]=\"\r\n d.isCurrentMonth && d.day === session.view.selectedDay\r\n \"\r\n [class.outside]=\"!d.isCurrentMonth\"\r\n [class.sunday]=\"d.date.weekday === 7\"\r\n [class.monday]=\"d.date.weekday === 1\"\r\n [class.tuesday]=\"d.date.weekday === 2\"\r\n [class.wednesday]=\"d.date.weekday === 3\"\r\n [class.thursday]=\"d.date.weekday === 4\"\r\n [class.friday]=\"d.date.weekday === 5\"\r\n [class.saturday]=\"d.date.weekday === 6\"\r\n >\r\n {{ d.day.toString().padStart(2, '0') }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"TimePicker\">\r\n <div class=\"Hours Scroll\">\r\n <div\r\n *ngFor=\"let h of session.view.HOURS\"\r\n (click)=\"session.handlers.onSelectHour(h, $event)\"\r\n class=\"hour\"\r\n [class.selected]=\"h === session.view.selectedHour\"\r\n >\r\n {{ h.toString().padStart(2, '0') }}\r\n </div>\r\n </div>\r\n <span class=\"Separate\">:</span>\r\n <div class=\"Minutes Scroll\">\r\n <div\r\n *ngFor=\"let m of session.view.MINUTES\"\r\n (click)=\"session.handlers.onSelectMinute(m, $event)\"\r\n [class.selected]=\"m === session.view.selectedMinute\"\r\n >\r\n {{ m.toString().padStart(2, '0') }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"Actions\">\r\n <div class=\"Cancel\" (click)=\"session.handlers.onCancel()\">\r\n Cancelar\r\n </div>\r\n <div class=\"Clear\" (click)=\"session.handlers.onClear()\">Limpiar</div>\r\n <div class=\"Ok\" (click)=\"session.handlers.onAccept()\">Aceptar</div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: [":host(.IsDisable){opacity:.4;pointer-events:none;cursor:not-allowed}:host{display:flex;flex-direction:column;width:100%;height:max-content;-webkit-user-select:auto;user-select:auto}:host .LabelRow{display:flex;align-items:center;justify-content:space-between;gap:6px;width:100%;margin-bottom:2px}:host .Label{color:var(--text-label);flex:1;min-width:0;cursor:pointer;padding:0 3px;margin:0;font-weight:400;-webkit-user-select:none;user-select:none}:host .Label .Opcional{color:var(--text-muted)}:host .Description{-webkit-user-select:none;user-select:none;font-size:.9rem;color:var(--text-base);font-weight:400;width:100%;cursor:pointer;padding:0 3px;margin:0 0 4px;overflow:hidden;word-break:break-all}:host .Entry{display:flex;width:100%;height:32px;justify-content:flex-start;align-items:center;border:solid 0 var(--input-border);border-radius:12px;cursor:pointer;overflow:hidden;background-color:var(--input-bg)}:host .Entry:hover{border:none;outline:solid 1px var(--input-hover-border)}:host .Entry[class~=IsFocus]{border:none;outline:solid 1px var(--input-focus-border)}:host .Entry[class~=Error]{outline:solid 1px var(--input-border-error)}:host .Entry .Input{height:100%;width:100%;border:solid 0 var(--input-border);padding:0 8px;color:var(--input-text);caret-color:var(--primary);text-align:start}:host .Entry .Input:focus{border:none;outline:none}:host .Entry .Input::placeholder{color:var(--input-placeholder)}:host .Entry.NotHover:hover{border:none;outline:none}:host .Backdrop{position:fixed;top:0;left:0;z-index:800;display:flex;justify-content:center;align-items:center;width:100%;height:100%;padding:12px;background:var(--overlay-scrim);overflow:hidden}@media (width <= 768px){:host .Backdrop{align-items:flex-start}}:host .Backdrop .Picker{display:flex;flex-direction:column;gap:5px;width:100%;max-width:600px;max-height:100%;margin:0 auto;background:var(--surface);border-radius:16px;padding:12px;overflow:hidden;overflow-y:auto;box-shadow:0 0 8px var(--shadow-color)}:host{display:contents}.Backdrop{position:fixed;top:0;left:0;z-index:10050;display:flex;justify-content:center;align-items:center;width:100%;height:100%;padding:12px;background:var(--overlay-scrim);overflow:hidden}@media (width <= 768px){.Backdrop{align-items:flex-start}}.Backdrop .Picker{max-width:400px}.Backdrop .Picker .Preview{background-color:var(--surface-2);border-radius:var(--radius-lg);padding:var(--spacing-sm) var(--spacing-sm);text-align:center;color:var(--text-primary);margin-bottom:var(--spacing-sm);font-size:var(--size-sm);font-weight:500}.Backdrop .Picker .Preview:first-letter{text-transform:uppercase}.Backdrop .Picker .Cards{position:relative;width:100%;height:100%}.Backdrop .Picker .Cards .CardMonths .CardChangeYear,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth,.Backdrop .Picker .Cards .CardDates .CardChangeYear,.Backdrop .Picker .Cards .CardDates .CardChangeMonth{width:100%;height:30px;display:flex;align-items:center;margin-bottom:10px}.Backdrop .Picker .Cards .CardMonths .CardChangeYear .LabelYear,.Backdrop .Picker .Cards .CardMonths .CardChangeYear .LabelMonth,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .LabelYear,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .LabelMonth,.Backdrop .Picker .Cards .CardDates .CardChangeYear .LabelYear,.Backdrop .Picker .Cards .CardDates .CardChangeYear .LabelMonth,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .LabelYear,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .LabelMonth{height:30px;padding:0 10px;display:flex;align-items:center;margin-right:auto;font-weight:600;cursor:pointer;border-radius:var(--radius-md)}.Backdrop .Picker .Cards .CardMonths .CardChangeYear .LabelYear:first-letter,.Backdrop .Picker .Cards .CardMonths .CardChangeYear .LabelMonth:first-letter,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .LabelYear:first-letter,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .LabelMonth:first-letter,.Backdrop .Picker .Cards .CardDates .CardChangeYear .LabelYear:first-letter,.Backdrop .Picker .Cards .CardDates .CardChangeYear .LabelMonth:first-letter,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .LabelYear:first-letter,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .LabelMonth:first-letter{text-transform:uppercase}.Backdrop .Picker .Cards .CardMonths .CardChangeYear .LabelYear:hover,.Backdrop .Picker .Cards .CardMonths .CardChangeYear .LabelMonth:hover,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .LabelYear:hover,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .LabelMonth:hover,.Backdrop .Picker .Cards .CardDates .CardChangeYear .LabelYear:hover,.Backdrop .Picker .Cards .CardDates .CardChangeYear .LabelMonth:hover,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .LabelYear:hover,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .LabelMonth:hover{background-color:var(--surface-2)}.Backdrop .Picker .Cards .CardMonths .CardChangeYear .Up,.Backdrop .Picker .Cards .CardMonths .CardChangeYear .Down,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .Up,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .Down,.Backdrop .Picker .Cards .CardDates .CardChangeYear .Up,.Backdrop .Picker .Cards .CardDates .CardChangeYear .Down,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .Up,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .Down{width:30px;height:30px;display:flex;justify-content:center;align-items:center;border-radius:var(--radius-md);cursor:pointer;font-size:.8rem}.Backdrop .Picker .Cards .CardMonths .CardChangeYear .Up lucide-icon .lucide-icon-svg,.Backdrop .Picker .Cards .CardMonths .CardChangeYear .Down lucide-icon .lucide-icon-svg,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .Up lucide-icon .lucide-icon-svg,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .Down lucide-icon .lucide-icon-svg,.Backdrop .Picker .Cards .CardDates .CardChangeYear .Up lucide-icon .lucide-icon-svg,.Backdrop .Picker .Cards .CardDates .CardChangeYear .Down lucide-icon .lucide-icon-svg,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .Up lucide-icon .lucide-icon-svg,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .Down lucide-icon .lucide-icon-svg{width:.8rem;height:.8rem}.Backdrop .Picker .Cards .CardMonths .CardChangeYear .Up:hover,.Backdrop .Picker .Cards .CardMonths .CardChangeYear .Down:hover,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .Up:hover,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .Down:hover,.Backdrop .Picker .Cards .CardDates .CardChangeYear .Up:hover,.Backdrop .Picker .Cards .CardDates .CardChangeYear .Down:hover,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .Up:hover,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .Down:hover{background-color:var(--surface-2)}.Backdrop .Picker .Cards .CardYears{position:absolute;top:0;left:0;z-index:10;width:100%;height:100%;background:var(--xu-on-fill)}.Backdrop .Picker .Cards .CardYears .years{display:grid;grid-template-columns:repeat(4,1fr);grid-auto-rows:35px;justify-items:center;align-items:center;width:100%;height:100%;overflow:hidden;overflow-y:auto}.Backdrop .Picker .Cards .CardYears .years .year{width:100%;height:100%;display:flex;justify-content:center;align-items:center;border-radius:var(--radius-md);text-transform:capitalize;padding:var(--spacing-xs) var(--spacing-md);border-radius:var(--radius-lg);cursor:pointer}.Backdrop .Picker .Cards .CardYears .years .year:hover{background-color:var(--surface-2)}.Backdrop .Picker .Cards .CardYears .years .selected{background-color:var(--primary);color:var(--xu-on-fill);font-weight:700}.Backdrop .Picker .Cards .CardYears .years .selected:hover{background-color:var(--primary)}.Backdrop .Picker .Cards .CardMonths{position:absolute;top:0;left:0;width:100%;height:100%;background:var(--xu-on-fill);overflow:hidden;display:flex;flex-direction:column}.Backdrop .Picker .Cards .CardMonths .months{display:grid;grid-template-columns:repeat(3,1fr);grid-auto-rows:1fr;justify-items:center;align-items:center;width:100%;height:100%;overflow:hidden;overflow-y:auto}.Backdrop .Picker .Cards .CardMonths .months .month{width:100%;height:100%;display:flex;justify-content:center;align-items:center;gap:5px;padding:var(--spacing-xs) var(--spacing-md);border-radius:var(--radius-lg);cursor:pointer}.Backdrop .Picker .Cards .CardMonths .months .month:hover{background-color:var(--surface-2)}.Backdrop .Picker .Cards .CardMonths .months .selected{background-color:var(--primary);color:var(--text-muted);font-weight:700}.Backdrop .Picker .Cards .CardMonths .months .selected:hover{background-color:var(--primary)}.Backdrop .Picker .Cards .CardDates .Labels{display:grid;grid-template-columns:repeat(7,1fr);grid-auto-rows:30px;justify-items:center;align-items:center;width:100%}.Backdrop .Picker .Cards .CardDates .Labels .LabelDay{font-size:.8rem;font-weight:700}.Backdrop .Picker .Cards .CardDates .dates{display:grid;grid-template-columns:repeat(7,1fr);grid-auto-rows:30px;justify-items:center;align-items:center;width:100%;overflow:hidden;overflow-y:auto}.Backdrop .Picker .Cards .CardDates .dates .day{width:100%;height:100%;display:flex;justify-content:center;align-items:center;border-radius:var(--radius-lg);cursor:pointer}.Backdrop .Picker .Cards .CardDates .dates .day:hover{background-color:var(--surface-2)}.Backdrop .Picker .Cards .CardDates .dates .sunday{color:var(--error-text)}.Backdrop .Picker .Cards .CardDates .dates .outside{cursor:auto;color:var(--text-muted);pointer-events:none;cursor:not-allowed}.Backdrop .Picker .Cards .CardDates .dates .selected{background-color:var(--primary);color:var(--xu-on-fill);font-weight:700}.Backdrop .Picker .Cards .CardDates .dates .selected:hover{background-color:var(--primary)}.Backdrop .Picker .TimePicker{display:grid;grid-template-columns:1fr 10px 1fr;grid-auto-rows:100px;gap:5px;align-items:center;justify-items:center;-webkit-user-select:none;user-select:none;border-top:solid 1px var(--border);padding-top:var(--spacing-sm)}.Backdrop .Picker .TimePicker .Separate{font-weight:900;font-size:2rem;color:var(--text-muted)}.Backdrop .Picker .TimePicker .Hours,.Backdrop .Picker .TimePicker .Minutes{width:100%;height:100%;overflow:hidden;overflow-y:auto;background-color:var(--surface-2);border-radius:var(--radius-lg);display:grid;grid-template-columns:repeat(1,1fr);grid-auto-rows:30px;scrollbar-width:none;-ms-overflow-style:none}.Backdrop .Picker .TimePicker .Hours::-webkit-scrollbar,.Backdrop .Picker .TimePicker .Minutes::-webkit-scrollbar{display:none}.Backdrop .Picker .TimePicker .Hours div,.Backdrop .Picker .TimePicker .Minutes div{border-radius:var(--radius-lg);padding:var(--spacing-md);display:flex;justify-content:center;align-items:center;cursor:pointer}.Backdrop .Picker .TimePicker .Hours div:hover,.Backdrop .Picker .TimePicker .Minutes div:hover{background-color:var(--surface-3)}.Backdrop .Picker .TimePicker .Hours .selected,.Backdrop .Picker .TimePicker .Minutes .selected{background-color:var(--primary);color:var(--text-muted);font-weight:700}.Backdrop .Picker .TimePicker .Hours .selected:hover,.Backdrop .Picker .TimePicker .Minutes .selected:hover{background-color:var(--primary)}.Backdrop .Picker .Actions{display:flex;justify-content:flex-end;gap:var(--spacing-xs);margin-top:var(--spacing-md)}.Backdrop .Picker .Actions .Ok{padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--radius-lg);color:var(--btn-primary-text);border-color:var(--btn-primary-border);background-color:var(--btn-primary-bg);cursor:pointer}.Backdrop .Picker .Actions .Ok:hover{color:var(--btn-primary-text-hover);border-color:var(--btn-primary-border-hover);background-color:var(--btn-primary-bg-hover)}.Backdrop .Picker .Actions .Ok:active{color:var(--btn-primary-text-active);border-color:var(--btn-primary-border-active);background-color:var(--btn-primary-bg-active)}.Backdrop .Picker .Actions .Ok:disabled{opacity:.6;cursor:not-allowed}.Backdrop .Picker .Actions .Clear{padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--radius-lg);color:var(--btn-secondary-text);border-color:var(--btn-secondary-border);background-color:var(--btn-secondary-bg);cursor:pointer}.Backdrop .Picker .Actions .Clear:hover{color:var(--btn-secondary-text-hover);border-color:var(--btn-secondary-border-hover);background-color:var(--btn-secondary-bg-hover)}.Backdrop .Picker .Actions .Clear:active{color:var(--btn-secondary-text-active);border-color:var(--btn-secondary-border-active);background-color:var(--btn-secondary-bg-active)}.Backdrop .Picker .Actions .Clear:disabled{opacity:.6;cursor:not-allowed}.Backdrop .Picker .Actions .Cancel{padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--radius-lg);color:var(--btn-cancel-text);border-color:var(--btn-cancel-border);background-color:var(--btn-cancel-bg);cursor:pointer}.Backdrop .Picker .Actions .Cancel:hover{color:var(--btn-cancel-text-hover);border-color:var(--btn-cancel-border-hover);background-color:var(--btn-cancel-bg-hover)}.Backdrop .Picker .Actions .Cancel:active{color:var(--btn-cancel-text-active);border-color:var(--btn-cancel-border-active);background-color:var(--btn-cancel-bg-active)}.Backdrop .Picker .Actions .Cancel:disabled{opacity:.6;cursor:not-allowed}\n"] }]
11277
+ }], ctorParameters: () => [{ type: DatetimePickerModalService }, { type: i0.ChangeDetectorRef }] });
11278
+
11279
+ class MonthPickerModalServiceComponent {
11280
+ monthPickerModal;
11281
+ cdr;
11282
+ vm$;
11283
+ sub;
11284
+ constructor(monthPickerModal, cdr) {
11285
+ this.monthPickerModal = monthPickerModal;
11286
+ this.cdr = cdr;
11287
+ this.vm$ = this.monthPickerModal.state$;
11288
+ }
11289
+ ngOnInit() {
11290
+ this.sub = this.monthPickerModal.state$.subscribe(() => this.cdr.markForCheck());
11291
+ }
11292
+ ngOnDestroy() {
11293
+ this.sub?.unsubscribe();
11294
+ }
11295
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: MonthPickerModalServiceComponent, deps: [{ token: MonthPickerModalService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
11296
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.11", type: MonthPickerModalServiceComponent, isStandalone: true, selector: "month-picker-modal-service", ngImport: i0, template: "<ng-container *ngIf=\"vm$ | async as session\">\r\n <div\r\n class=\"Backdrop InputModalBackdrop month-picker-modal\"\r\n (click)=\"session.handlers.toggleShowPicker($event)\"\r\n >\r\n <div class=\"Picker\" (click)=\"$event.stopPropagation()\">\r\n <div class=\"Preview\" *ngIf=\"session.view.selectedValue\">\r\n <span>{{ session.view.selectedDateExtended }}</span>\r\n </div>\r\n\r\n <div class=\"Cards\">\r\n <div class=\"CardYears\" *ngIf=\"session.view.showYears\">\r\n <div class=\"years Scroll\">\r\n <div\r\n *ngFor=\"let y of session.view.years\"\r\n (click)=\"session.handlers.onSelectYear(y, $event)\"\r\n class=\"year\"\r\n [class.selected]=\"y === session.view.selectedYear\"\r\n >\r\n {{ y }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"CardMonths\">\r\n <div class=\"CardChangeYear\">\r\n <span\r\n class=\"LabelYear\"\r\n (click)=\"session.handlers.openYears($event)\"\r\n >\r\n {{ session.view.selectedYear || 'A\u00F1o' }}\r\n </span>\r\n <lucide-icon class=\"Up\" name=\"chevron-up\" (click)=\"session.handlers.onDecrementYear($event)\"></lucide-icon>\r\n <lucide-icon class=\"Down\" name=\"chevron-down\" (click)=\"session.handlers.onIncrementYear($event)\"></lucide-icon>\r\n </div>\r\n\r\n <div class=\"months Scroll\">\r\n <div\r\n *ngFor=\"let m of session.view.months\"\r\n (click)=\"session.handlers.onSelectMonth(m, $event)\"\r\n class=\"month\"\r\n [class.selected]=\"m === session.view.selectedMonth\"\r\n >\r\n <span class=\"NameMonth\">{{\r\n session.view.MONTH_NAMES[m - 1]\r\n }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"Actions\">\r\n <div class=\"Cancel\" (click)=\"session.handlers.onCancel()\">\r\n Cancelar\r\n </div>\r\n <div class=\"Clear\" (click)=\"session.handlers.onClear()\">Limpiar</div>\r\n <div class=\"Ok\" (click)=\"session.handlers.onAccept()\">Aceptar</div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: [":host(.IsDisable){opacity:.4;pointer-events:none;cursor:not-allowed}:host{display:flex;flex-direction:column;width:100%;height:max-content;-webkit-user-select:auto;user-select:auto}:host .LabelRow{display:flex;align-items:center;justify-content:space-between;gap:6px;width:100%;margin-bottom:2px}:host .Label{color:var(--text-label);flex:1;min-width:0;cursor:pointer;padding:0 3px;margin:0;font-weight:400;-webkit-user-select:none;user-select:none}:host .Label .Opcional{color:var(--text-muted)}:host .Description{-webkit-user-select:none;user-select:none;font-size:.9rem;color:var(--text-base);font-weight:400;width:100%;cursor:pointer;padding:0 3px;margin:0 0 4px;overflow:hidden;word-break:break-all}:host .Entry{display:flex;width:100%;height:32px;justify-content:flex-start;align-items:center;border:solid 0 var(--input-border);border-radius:12px;cursor:pointer;overflow:hidden;background-color:var(--input-bg)}:host .Entry:hover{border:none;outline:solid 1px var(--input-hover-border)}:host .Entry[class~=IsFocus]{border:none;outline:solid 1px var(--input-focus-border)}:host .Entry[class~=Error]{outline:solid 1px var(--input-border-error)}:host .Entry .Input{height:100%;width:100%;border:solid 0 var(--input-border);padding:0 8px;color:var(--input-text);caret-color:var(--primary);text-align:start}:host .Entry .Input:focus{border:none;outline:none}:host .Entry .Input::placeholder{color:var(--input-placeholder)}:host .Entry.NotHover:hover{border:none;outline:none}:host .Backdrop{position:fixed;top:0;left:0;z-index:800;display:flex;justify-content:center;align-items:center;width:100%;height:100%;padding:12px;background:var(--overlay-scrim);overflow:hidden}@media (width <= 768px){:host .Backdrop{align-items:flex-start}}:host .Backdrop .Picker{display:flex;flex-direction:column;gap:5px;width:100%;max-width:600px;max-height:100%;margin:0 auto;background:var(--surface);border-radius:16px;padding:12px;overflow:hidden;overflow-y:auto;box-shadow:0 0 8px var(--shadow-color)}:host{display:contents}.Backdrop{position:fixed;top:0;left:0;z-index:10050;display:flex;justify-content:center;align-items:center;width:100%;height:100%;padding:12px;background:var(--overlay-scrim);overflow:hidden}@media (width <= 768px){.Backdrop{align-items:flex-start}}.Backdrop .Picker{max-width:400px}.Backdrop .Picker .Preview{background-color:var(--surface-2);border-radius:var(--radius-lg);padding:var(--spacing-sm) var(--spacing-sm);text-align:center;color:var(--text-primary);margin-bottom:var(--spacing-sm);font-size:var(--size-sm);font-weight:500}.Backdrop .Picker .Preview:first-letter{text-transform:uppercase}.Backdrop .Picker .Cards{position:relative;width:100%;height:100%}.Backdrop .Picker .Cards .CardMonths .CardChangeYear,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth,.Backdrop .Picker .Cards .CardDates .CardChangeYear,.Backdrop .Picker .Cards .CardDates .CardChangeMonth{width:100%;height:30px;display:flex;align-items:center;margin-bottom:10px}.Backdrop .Picker .Cards .CardMonths .CardChangeYear .LabelYear,.Backdrop .Picker .Cards .CardMonths .CardChangeYear .LabelMonth,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .LabelYear,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .LabelMonth,.Backdrop .Picker .Cards .CardDates .CardChangeYear .LabelYear,.Backdrop .Picker .Cards .CardDates .CardChangeYear .LabelMonth,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .LabelYear,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .LabelMonth{height:30px;padding:0 10px;display:flex;align-items:center;margin-right:auto;font-weight:600;cursor:pointer;border-radius:var(--radius-md)}.Backdrop .Picker .Cards .CardMonths .CardChangeYear .LabelYear:first-letter,.Backdrop .Picker .Cards .CardMonths .CardChangeYear .LabelMonth:first-letter,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .LabelYear:first-letter,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .LabelMonth:first-letter,.Backdrop .Picker .Cards .CardDates .CardChangeYear .LabelYear:first-letter,.Backdrop .Picker .Cards .CardDates .CardChangeYear .LabelMonth:first-letter,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .LabelYear:first-letter,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .LabelMonth:first-letter{text-transform:uppercase}.Backdrop .Picker .Cards .CardMonths .CardChangeYear .LabelYear:hover,.Backdrop .Picker .Cards .CardMonths .CardChangeYear .LabelMonth:hover,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .LabelYear:hover,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .LabelMonth:hover,.Backdrop .Picker .Cards .CardDates .CardChangeYear .LabelYear:hover,.Backdrop .Picker .Cards .CardDates .CardChangeYear .LabelMonth:hover,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .LabelYear:hover,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .LabelMonth:hover{background-color:var(--surface-2)}.Backdrop .Picker .Cards .CardMonths .CardChangeYear .Up,.Backdrop .Picker .Cards .CardMonths .CardChangeYear .Down,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .Up,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .Down,.Backdrop .Picker .Cards .CardDates .CardChangeYear .Up,.Backdrop .Picker .Cards .CardDates .CardChangeYear .Down,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .Up,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .Down{width:30px;height:30px;display:flex;justify-content:center;align-items:center;border-radius:var(--radius-md);cursor:pointer;font-size:.8rem}.Backdrop .Picker .Cards .CardMonths .CardChangeYear .Up lucide-icon .lucide-icon-svg,.Backdrop .Picker .Cards .CardMonths .CardChangeYear .Down lucide-icon .lucide-icon-svg,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .Up lucide-icon .lucide-icon-svg,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .Down lucide-icon .lucide-icon-svg,.Backdrop .Picker .Cards .CardDates .CardChangeYear .Up lucide-icon .lucide-icon-svg,.Backdrop .Picker .Cards .CardDates .CardChangeYear .Down lucide-icon .lucide-icon-svg,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .Up lucide-icon .lucide-icon-svg,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .Down lucide-icon .lucide-icon-svg{width:.8rem;height:.8rem}.Backdrop .Picker .Cards .CardMonths .CardChangeYear .Up:hover,.Backdrop .Picker .Cards .CardMonths .CardChangeYear .Down:hover,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .Up:hover,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .Down:hover,.Backdrop .Picker .Cards .CardDates .CardChangeYear .Up:hover,.Backdrop .Picker .Cards .CardDates .CardChangeYear .Down:hover,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .Up:hover,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .Down:hover{background-color:var(--surface-2)}.Backdrop .Picker .Cards .CardYears{position:absolute;top:0;left:0;z-index:10;width:100%;height:100%;background:var(--xu-on-fill)}.Backdrop .Picker .Cards .CardYears .years{display:grid;grid-template-columns:repeat(4,1fr);grid-auto-rows:35px;justify-items:center;align-items:center;width:100%;height:100%;overflow:hidden;overflow-y:auto}.Backdrop .Picker .Cards .CardYears .years .year{width:100%;height:100%;display:flex;justify-content:center;align-items:center;border-radius:var(--radius-md);text-transform:capitalize;padding:var(--spacing-xs) var(--spacing-md);border-radius:var(--radius-lg);cursor:pointer}.Backdrop .Picker .Cards .CardYears .years .year:hover{background-color:var(--surface-2)}.Backdrop .Picker .Cards .CardYears .years .selected{background-color:var(--primary);color:var(--xu-on-fill);font-weight:700}.Backdrop .Picker .Cards .CardYears .years .selected:hover{background-color:var(--primary)}.Backdrop .Picker .Cards .CardMonths{width:100%;height:100%;background:var(--xu-on-fill);overflow:hidden;display:flex;flex-direction:column}.Backdrop .Picker .Cards .CardMonths .months{display:grid;grid-template-columns:repeat(3,1fr);grid-auto-rows:1fr;justify-items:center;align-items:center;width:100%;height:100%;overflow:hidden;overflow-y:auto}.Backdrop .Picker .Cards .CardMonths .months .month{width:100%;height:100%;display:flex;justify-content:center;align-items:center;gap:5px;padding:var(--spacing-xs) var(--spacing-md);border-radius:var(--radius-lg);cursor:pointer}.Backdrop .Picker .Cards .CardMonths .months .month:hover{background-color:var(--surface-2)}.Backdrop .Picker .Cards .CardMonths .months .selected{background-color:var(--primary);color:var(--text-muted);font-weight:700}.Backdrop .Picker .Cards .CardMonths .months .selected:hover{background-color:var(--primary)}.Backdrop .Picker .Actions{display:flex;justify-content:flex-end;gap:var(--spacing-xs);margin-top:var(--spacing-md)}.Backdrop .Picker .Actions .Ok{padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--radius-lg);color:var(--btn-primary-text);border-color:var(--btn-primary-border);background-color:var(--btn-primary-bg);cursor:pointer}.Backdrop .Picker .Actions .Ok:hover{color:var(--btn-primary-text-hover);border-color:var(--btn-primary-border-hover);background-color:var(--btn-primary-bg-hover)}.Backdrop .Picker .Actions .Ok:active{color:var(--btn-primary-text-active);border-color:var(--btn-primary-border-active);background-color:var(--btn-primary-bg-active)}.Backdrop .Picker .Actions .Ok:disabled{opacity:.6;cursor:not-allowed}.Backdrop .Picker .Actions .Clear{padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--radius-lg);color:var(--btn-secondary-text);border-color:var(--btn-secondary-border);background-color:var(--btn-secondary-bg);cursor:pointer}.Backdrop .Picker .Actions .Clear:hover{color:var(--btn-secondary-text-hover);border-color:var(--btn-secondary-border-hover);background-color:var(--btn-secondary-bg-hover)}.Backdrop .Picker .Actions .Clear:active{color:var(--btn-secondary-text-active);border-color:var(--btn-secondary-border-active);background-color:var(--btn-secondary-bg-active)}.Backdrop .Picker .Actions .Clear:disabled{opacity:.6;cursor:not-allowed}.Backdrop .Picker .Actions .Cancel{padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--radius-lg);color:var(--btn-cancel-text);border-color:var(--btn-cancel-border);background-color:var(--btn-cancel-bg);cursor:pointer}.Backdrop .Picker .Actions .Cancel:hover{color:var(--btn-cancel-text-hover);border-color:var(--btn-cancel-border-hover);background-color:var(--btn-cancel-bg-hover)}.Backdrop .Picker .Actions .Cancel:active{color:var(--btn-cancel-text-active);border-color:var(--btn-cancel-border-active);background-color:var(--btn-cancel-bg-active)}.Backdrop .Picker .Actions .Cancel:disabled{opacity:.6;cursor:not-allowed}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "component", type: LucideIconComponent, selector: "lucide-icon", inputs: ["name", "size", "spin", "filled"] }] });
11297
+ }
11298
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: MonthPickerModalServiceComponent, decorators: [{
11299
+ type: Component,
11300
+ args: [{ selector: 'month-picker-modal-service', standalone: true, imports: [CommonModule, LucideIconComponent], template: "<ng-container *ngIf=\"vm$ | async as session\">\r\n <div\r\n class=\"Backdrop InputModalBackdrop month-picker-modal\"\r\n (click)=\"session.handlers.toggleShowPicker($event)\"\r\n >\r\n <div class=\"Picker\" (click)=\"$event.stopPropagation()\">\r\n <div class=\"Preview\" *ngIf=\"session.view.selectedValue\">\r\n <span>{{ session.view.selectedDateExtended }}</span>\r\n </div>\r\n\r\n <div class=\"Cards\">\r\n <div class=\"CardYears\" *ngIf=\"session.view.showYears\">\r\n <div class=\"years Scroll\">\r\n <div\r\n *ngFor=\"let y of session.view.years\"\r\n (click)=\"session.handlers.onSelectYear(y, $event)\"\r\n class=\"year\"\r\n [class.selected]=\"y === session.view.selectedYear\"\r\n >\r\n {{ y }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"CardMonths\">\r\n <div class=\"CardChangeYear\">\r\n <span\r\n class=\"LabelYear\"\r\n (click)=\"session.handlers.openYears($event)\"\r\n >\r\n {{ session.view.selectedYear || 'A\u00F1o' }}\r\n </span>\r\n <lucide-icon class=\"Up\" name=\"chevron-up\" (click)=\"session.handlers.onDecrementYear($event)\"></lucide-icon>\r\n <lucide-icon class=\"Down\" name=\"chevron-down\" (click)=\"session.handlers.onIncrementYear($event)\"></lucide-icon>\r\n </div>\r\n\r\n <div class=\"months Scroll\">\r\n <div\r\n *ngFor=\"let m of session.view.months\"\r\n (click)=\"session.handlers.onSelectMonth(m, $event)\"\r\n class=\"month\"\r\n [class.selected]=\"m === session.view.selectedMonth\"\r\n >\r\n <span class=\"NameMonth\">{{\r\n session.view.MONTH_NAMES[m - 1]\r\n }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"Actions\">\r\n <div class=\"Cancel\" (click)=\"session.handlers.onCancel()\">\r\n Cancelar\r\n </div>\r\n <div class=\"Clear\" (click)=\"session.handlers.onClear()\">Limpiar</div>\r\n <div class=\"Ok\" (click)=\"session.handlers.onAccept()\">Aceptar</div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: [":host(.IsDisable){opacity:.4;pointer-events:none;cursor:not-allowed}:host{display:flex;flex-direction:column;width:100%;height:max-content;-webkit-user-select:auto;user-select:auto}:host .LabelRow{display:flex;align-items:center;justify-content:space-between;gap:6px;width:100%;margin-bottom:2px}:host .Label{color:var(--text-label);flex:1;min-width:0;cursor:pointer;padding:0 3px;margin:0;font-weight:400;-webkit-user-select:none;user-select:none}:host .Label .Opcional{color:var(--text-muted)}:host .Description{-webkit-user-select:none;user-select:none;font-size:.9rem;color:var(--text-base);font-weight:400;width:100%;cursor:pointer;padding:0 3px;margin:0 0 4px;overflow:hidden;word-break:break-all}:host .Entry{display:flex;width:100%;height:32px;justify-content:flex-start;align-items:center;border:solid 0 var(--input-border);border-radius:12px;cursor:pointer;overflow:hidden;background-color:var(--input-bg)}:host .Entry:hover{border:none;outline:solid 1px var(--input-hover-border)}:host .Entry[class~=IsFocus]{border:none;outline:solid 1px var(--input-focus-border)}:host .Entry[class~=Error]{outline:solid 1px var(--input-border-error)}:host .Entry .Input{height:100%;width:100%;border:solid 0 var(--input-border);padding:0 8px;color:var(--input-text);caret-color:var(--primary);text-align:start}:host .Entry .Input:focus{border:none;outline:none}:host .Entry .Input::placeholder{color:var(--input-placeholder)}:host .Entry.NotHover:hover{border:none;outline:none}:host .Backdrop{position:fixed;top:0;left:0;z-index:800;display:flex;justify-content:center;align-items:center;width:100%;height:100%;padding:12px;background:var(--overlay-scrim);overflow:hidden}@media (width <= 768px){:host .Backdrop{align-items:flex-start}}:host .Backdrop .Picker{display:flex;flex-direction:column;gap:5px;width:100%;max-width:600px;max-height:100%;margin:0 auto;background:var(--surface);border-radius:16px;padding:12px;overflow:hidden;overflow-y:auto;box-shadow:0 0 8px var(--shadow-color)}:host{display:contents}.Backdrop{position:fixed;top:0;left:0;z-index:10050;display:flex;justify-content:center;align-items:center;width:100%;height:100%;padding:12px;background:var(--overlay-scrim);overflow:hidden}@media (width <= 768px){.Backdrop{align-items:flex-start}}.Backdrop .Picker{max-width:400px}.Backdrop .Picker .Preview{background-color:var(--surface-2);border-radius:var(--radius-lg);padding:var(--spacing-sm) var(--spacing-sm);text-align:center;color:var(--text-primary);margin-bottom:var(--spacing-sm);font-size:var(--size-sm);font-weight:500}.Backdrop .Picker .Preview:first-letter{text-transform:uppercase}.Backdrop .Picker .Cards{position:relative;width:100%;height:100%}.Backdrop .Picker .Cards .CardMonths .CardChangeYear,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth,.Backdrop .Picker .Cards .CardDates .CardChangeYear,.Backdrop .Picker .Cards .CardDates .CardChangeMonth{width:100%;height:30px;display:flex;align-items:center;margin-bottom:10px}.Backdrop .Picker .Cards .CardMonths .CardChangeYear .LabelYear,.Backdrop .Picker .Cards .CardMonths .CardChangeYear .LabelMonth,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .LabelYear,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .LabelMonth,.Backdrop .Picker .Cards .CardDates .CardChangeYear .LabelYear,.Backdrop .Picker .Cards .CardDates .CardChangeYear .LabelMonth,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .LabelYear,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .LabelMonth{height:30px;padding:0 10px;display:flex;align-items:center;margin-right:auto;font-weight:600;cursor:pointer;border-radius:var(--radius-md)}.Backdrop .Picker .Cards .CardMonths .CardChangeYear .LabelYear:first-letter,.Backdrop .Picker .Cards .CardMonths .CardChangeYear .LabelMonth:first-letter,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .LabelYear:first-letter,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .LabelMonth:first-letter,.Backdrop .Picker .Cards .CardDates .CardChangeYear .LabelYear:first-letter,.Backdrop .Picker .Cards .CardDates .CardChangeYear .LabelMonth:first-letter,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .LabelYear:first-letter,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .LabelMonth:first-letter{text-transform:uppercase}.Backdrop .Picker .Cards .CardMonths .CardChangeYear .LabelYear:hover,.Backdrop .Picker .Cards .CardMonths .CardChangeYear .LabelMonth:hover,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .LabelYear:hover,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .LabelMonth:hover,.Backdrop .Picker .Cards .CardDates .CardChangeYear .LabelYear:hover,.Backdrop .Picker .Cards .CardDates .CardChangeYear .LabelMonth:hover,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .LabelYear:hover,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .LabelMonth:hover{background-color:var(--surface-2)}.Backdrop .Picker .Cards .CardMonths .CardChangeYear .Up,.Backdrop .Picker .Cards .CardMonths .CardChangeYear .Down,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .Up,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .Down,.Backdrop .Picker .Cards .CardDates .CardChangeYear .Up,.Backdrop .Picker .Cards .CardDates .CardChangeYear .Down,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .Up,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .Down{width:30px;height:30px;display:flex;justify-content:center;align-items:center;border-radius:var(--radius-md);cursor:pointer;font-size:.8rem}.Backdrop .Picker .Cards .CardMonths .CardChangeYear .Up lucide-icon .lucide-icon-svg,.Backdrop .Picker .Cards .CardMonths .CardChangeYear .Down lucide-icon .lucide-icon-svg,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .Up lucide-icon .lucide-icon-svg,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .Down lucide-icon .lucide-icon-svg,.Backdrop .Picker .Cards .CardDates .CardChangeYear .Up lucide-icon .lucide-icon-svg,.Backdrop .Picker .Cards .CardDates .CardChangeYear .Down lucide-icon .lucide-icon-svg,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .Up lucide-icon .lucide-icon-svg,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .Down lucide-icon .lucide-icon-svg{width:.8rem;height:.8rem}.Backdrop .Picker .Cards .CardMonths .CardChangeYear .Up:hover,.Backdrop .Picker .Cards .CardMonths .CardChangeYear .Down:hover,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .Up:hover,.Backdrop .Picker .Cards .CardMonths .CardChangeMonth .Down:hover,.Backdrop .Picker .Cards .CardDates .CardChangeYear .Up:hover,.Backdrop .Picker .Cards .CardDates .CardChangeYear .Down:hover,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .Up:hover,.Backdrop .Picker .Cards .CardDates .CardChangeMonth .Down:hover{background-color:var(--surface-2)}.Backdrop .Picker .Cards .CardYears{position:absolute;top:0;left:0;z-index:10;width:100%;height:100%;background:var(--xu-on-fill)}.Backdrop .Picker .Cards .CardYears .years{display:grid;grid-template-columns:repeat(4,1fr);grid-auto-rows:35px;justify-items:center;align-items:center;width:100%;height:100%;overflow:hidden;overflow-y:auto}.Backdrop .Picker .Cards .CardYears .years .year{width:100%;height:100%;display:flex;justify-content:center;align-items:center;border-radius:var(--radius-md);text-transform:capitalize;padding:var(--spacing-xs) var(--spacing-md);border-radius:var(--radius-lg);cursor:pointer}.Backdrop .Picker .Cards .CardYears .years .year:hover{background-color:var(--surface-2)}.Backdrop .Picker .Cards .CardYears .years .selected{background-color:var(--primary);color:var(--xu-on-fill);font-weight:700}.Backdrop .Picker .Cards .CardYears .years .selected:hover{background-color:var(--primary)}.Backdrop .Picker .Cards .CardMonths{width:100%;height:100%;background:var(--xu-on-fill);overflow:hidden;display:flex;flex-direction:column}.Backdrop .Picker .Cards .CardMonths .months{display:grid;grid-template-columns:repeat(3,1fr);grid-auto-rows:1fr;justify-items:center;align-items:center;width:100%;height:100%;overflow:hidden;overflow-y:auto}.Backdrop .Picker .Cards .CardMonths .months .month{width:100%;height:100%;display:flex;justify-content:center;align-items:center;gap:5px;padding:var(--spacing-xs) var(--spacing-md);border-radius:var(--radius-lg);cursor:pointer}.Backdrop .Picker .Cards .CardMonths .months .month:hover{background-color:var(--surface-2)}.Backdrop .Picker .Cards .CardMonths .months .selected{background-color:var(--primary);color:var(--text-muted);font-weight:700}.Backdrop .Picker .Cards .CardMonths .months .selected:hover{background-color:var(--primary)}.Backdrop .Picker .Actions{display:flex;justify-content:flex-end;gap:var(--spacing-xs);margin-top:var(--spacing-md)}.Backdrop .Picker .Actions .Ok{padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--radius-lg);color:var(--btn-primary-text);border-color:var(--btn-primary-border);background-color:var(--btn-primary-bg);cursor:pointer}.Backdrop .Picker .Actions .Ok:hover{color:var(--btn-primary-text-hover);border-color:var(--btn-primary-border-hover);background-color:var(--btn-primary-bg-hover)}.Backdrop .Picker .Actions .Ok:active{color:var(--btn-primary-text-active);border-color:var(--btn-primary-border-active);background-color:var(--btn-primary-bg-active)}.Backdrop .Picker .Actions .Ok:disabled{opacity:.6;cursor:not-allowed}.Backdrop .Picker .Actions .Clear{padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--radius-lg);color:var(--btn-secondary-text);border-color:var(--btn-secondary-border);background-color:var(--btn-secondary-bg);cursor:pointer}.Backdrop .Picker .Actions .Clear:hover{color:var(--btn-secondary-text-hover);border-color:var(--btn-secondary-border-hover);background-color:var(--btn-secondary-bg-hover)}.Backdrop .Picker .Actions .Clear:active{color:var(--btn-secondary-text-active);border-color:var(--btn-secondary-border-active);background-color:var(--btn-secondary-bg-active)}.Backdrop .Picker .Actions .Clear:disabled{opacity:.6;cursor:not-allowed}.Backdrop .Picker .Actions .Cancel{padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--radius-lg);color:var(--btn-cancel-text);border-color:var(--btn-cancel-border);background-color:var(--btn-cancel-bg);cursor:pointer}.Backdrop .Picker .Actions .Cancel:hover{color:var(--btn-cancel-text-hover);border-color:var(--btn-cancel-border-hover);background-color:var(--btn-cancel-bg-hover)}.Backdrop .Picker .Actions .Cancel:active{color:var(--btn-cancel-text-active);border-color:var(--btn-cancel-border-active);background-color:var(--btn-cancel-bg-active)}.Backdrop .Picker .Actions .Cancel:disabled{opacity:.6;cursor:not-allowed}\n"] }]
11301
+ }], ctorParameters: () => [{ type: MonthPickerModalService }, { type: i0.ChangeDetectorRef }] });
11302
+
11303
+ // ============================================================================
11304
+ // IMPORTS
11305
+ // ============================================================================
11306
+ // ============================================================================
11307
+ // COMPONENT DECORATOR
11308
+ // ============================================================================
11309
+ class ColorPickerPanelComponent {
11310
+ // ============================================================================
11311
+ // DEPENDENCIES (Injected Services)
11312
+ // ============================================================================
11313
+ cdr = inject(ChangeDetectorRef);
11314
+ elementRef = inject(ElementRef);
11315
+ platformId = inject(PLATFORM_ID);
11316
+ // ============================================================================
11317
+ // VIEW CHILDREN (Referencias a elementos del DOM)
11318
+ // ============================================================================
11319
+ colorCanvas;
11320
+ hueCanvas;
11321
+ pickerContainer;
11322
+ canvasContainer;
11323
+ mode = 'hex';
11324
+ /** Valor controlado desde el padre (hex o rgb según mode) */
11325
+ textValue = '';
11326
+ textValueChange = new EventEmitter();
11327
+ // ============================================================================
11328
+ // DISABLED STATE (Estado deshabilitado)
11329
+ // ============================================================================
11330
+ get hostDisabledClass() {
11331
+ return this.isDisabled;
11332
+ }
11333
+ set disabled(value) {
11334
+ this.isDisabled = value;
11335
+ this.cdr.markForCheck();
11336
+ }
11337
+ // ============================================================================
11338
+ // INTERNAL STATE (Estado interno del componente)
11339
+ // ============================================================================
11340
+ isDisabled = false;
11341
+ selectedColor = null;
11342
+ isDragging = false;
11343
+ isDraggingHue = false;
11344
+ isDraggingSaturation = false;
11345
+ currentHex = '';
11346
+ currentRgb = '';
11347
+ /** Muestra el color elegido en el recuadro de vista previa (separado de HEX/RGB). */
11348
+ get previewColor() {
11349
+ return this.currentHex || '';
11350
+ }
11351
+ // Valores HSL para el color picker (estilo Chrome)
11352
+ hue = 0; // 0-360
11353
+ saturation = 100; // 0-100
11354
+ lightness = 50; // 0-100
11355
+ // Posición del puntero en el canvas de saturación/luminosidad
11356
+ pointerX = 1; // 0-1 (relativo al canvas)
11357
+ pointerY = 0.5; // 0-1 (relativo al canvas)
11358
+ canvasContext = null;
11359
+ hueCanvasContext = null;
11360
+ // Referencias a los handlers para poder removerlos correctamente
11361
+ documentMouseMoveHandler = (event) => this.handleDocumentMouseMove(event);
11362
+ documentMouseUpHandler = (event) => this.handleDocumentMouseUp(event);
11363
+ documentTouchMoveHandler = (event) => this.handleDocumentTouchMove(event);
11364
+ documentTouchEndHandler = (event) => this.handleDocumentTouchEnd(event);
11365
+ // ============================================================================
11366
+ // DATA (Datos del componente)
11367
+ // ============================================================================
11368
+ colors = [
11369
+ // Colores Primarios
11370
+ { name: 'Rojo', hex: '#FF0000', rgb: 'rgb(255,0,0)' },
11371
+ { name: 'Verde', hex: '#00FF00', rgb: 'rgb(0,255,0)' },
11372
+ { name: 'Azul', hex: '#0000FF', rgb: 'rgb(0,0,255)' },
11373
+ { name: 'Amarillo', hex: '#FFFF00', rgb: 'rgb(255,255,0)' },
11374
+ { name: 'Cian', hex: '#00FFFF', rgb: 'rgb(0,255,255)' },
11375
+ { name: 'Magenta', hex: '#FF00FF', rgb: 'rgb(255,0,255)' },
11376
+ { name: 'Rosa Pastel', hex: '#FFD1DC', rgb: 'rgb(255,209,220)' },
11377
+ { name: 'Azul Pastel', hex: '#B0E0E6', rgb: 'rgb(176,224,230)' },
11378
+ { name: 'Verde Pastel', hex: '#98FB98', rgb: 'rgb(152,251,152)' },
11379
+ { name: 'Amarillo Pastel', hex: '#FFFACD', rgb: 'rgb(255,250,205)' },
11380
+ { name: 'Lavanda Pastel', hex: '#E6E6FA', rgb: 'rgb(230,230,250)' },
11381
+ { name: 'Melocotón Pastel', hex: '#FFDAB9', rgb: 'rgb(255,218,185)' },
11382
+ ];
11383
+ ngOnChanges(changes) {
11384
+ if (changes['textValue'] || changes['mode']) {
11385
+ this.applyValueFromParent(this.textValue);
11386
+ }
11387
+ }
11388
+ applyValueFromParent(value) {
11389
+ const v = value ?? '';
11390
+ if (v && this.isValidColor(v)) {
11391
+ let rgb = null;
11392
+ if (this.mode === 'hex' && v.startsWith('#')) {
11393
+ this.currentHex = v;
11394
+ rgb = this.hexToRgb(v);
11395
+ if (rgb) {
11396
+ this.currentRgb = `rgb(${rgb.r},${rgb.g},${rgb.b})`;
11397
+ }
11398
+ }
11399
+ else if (this.mode === 'rgb' && v.startsWith('rgb')) {
11400
+ this.currentRgb = v;
11401
+ const hex = this.rgbStringToHex(v);
11402
+ if (hex) {
11403
+ this.currentHex = hex;
11404
+ }
11405
+ rgb = this.parseRgbString(v);
11406
+ }
11407
+ if (rgb) {
11408
+ const hsl = this.rgbToHsl(rgb.r, rgb.g, rgb.b);
11409
+ this.hue = hsl.h;
11410
+ this.saturation = hsl.s * 100;
11411
+ this.lightness = hsl.l * 100;
11412
+ this.pointerX = hsl.s;
11413
+ this.pointerY = 1 - hsl.l;
11414
+ setTimeout(() => {
11415
+ this.drawSaturationCanvas();
11416
+ this.drawHueIndicator();
11417
+ }, 0);
11418
+ }
11419
+ }
11420
+ this.cdr.markForCheck();
11421
+ }
11422
+ // ============================================================================
11423
+ // LIFECYCLE HOOKS (Hooks del ciclo de vida)
11424
+ // ============================================================================
11425
+ ngOnInit() {
11426
+ this.colors.sort((a, b) => a.name.localeCompare(b.name));
11427
+ this.applyValueFromParent(this.textValue);
11428
+ }
11429
+ ngAfterViewInit() {
11430
+ if (!isPlatformBrowser(this.platformId))
11431
+ return;
11432
+ setTimeout(() => {
11433
+ this.initHueCanvas();
11434
+ this.initSaturationCanvas();
11435
+ }, 0);
11436
+ document.addEventListener('mousemove', this.documentMouseMoveHandler, true);
11437
+ document.addEventListener('mouseup', this.documentMouseUpHandler, true);
11438
+ document.addEventListener('touchmove', this.documentTouchMoveHandler, { passive: false, capture: true });
11439
+ // Limpiar estados de arrastre
11440
+ document.addEventListener('touchend', this.documentTouchEndHandler, { passive: false, capture: true });
11441
+ }
11442
+ ngOnDestroy() {
11443
+ if (!isPlatformBrowser(this.platformId))
11444
+ return;
11445
+ document.removeEventListener('mousemove', this.documentMouseMoveHandler, true);
11446
+ document.removeEventListener('mouseup', this.documentMouseUpHandler, true);
11447
+ document.removeEventListener('touchmove', this.documentTouchMoveHandler, true);
11448
+ document.removeEventListener('touchend', this.documentTouchEndHandler, true);
11449
+ this.isDragging = false;
11450
+ this.isDraggingSaturation = false;
11451
+ this.isDraggingHue = false;
11452
+ }
11453
+ handleDocumentMouseMove(event) {
11454
+ if (this.isDisabled)
11455
+ return;
11456
+ // Si se está arrastrando en el área de saturación/luminosidad
11457
+ if (this.isDraggingSaturation) {
11458
+ event.preventDefault();
11459
+ event.stopPropagation();
11460
+ this.updateSaturationFromEvent(event);
11461
+ return;
11462
+ }
11463
+ // Si se está arrastrando en la barra de hue
11464
+ if (this.isDraggingHue) {
11465
+ event.preventDefault();
11466
+ event.stopPropagation();
11467
+ this.updateHueFromEvent(event);
11468
+ return;
11469
+ }
11470
+ }
11471
+ handleDocumentMouseUp(event) {
11472
+ // Detener el arrastre de saturación/luminosidad
11473
+ if (this.isDraggingSaturation) {
11474
+ this.isDraggingSaturation = false;
11475
+ }
11476
+ // Detener el arrastre de hue
11477
+ if (this.isDraggingHue) {
11478
+ this.isDraggingHue = false;
11479
+ }
11480
+ }
11481
+ handleDocumentTouchMove(event) {
11482
+ if (this.isDisabled)
11483
+ return;
11484
+ const touch = event.touches[0];
11485
+ if (!touch)
11486
+ return;
11487
+ // Convertir evento táctil a evento de mouse para reutilizar la lógica existente
11488
+ const mouseEvent = this.touchToMouseEvent(touch, event);
11489
+ // Si se está arrastrando en el área de saturación/luminosidad
11490
+ if (this.isDraggingSaturation) {
11491
+ event.preventDefault();
11492
+ event.stopPropagation();
11493
+ this.updateSaturationFromEvent(mouseEvent);
11494
+ return;
11495
+ }
11496
+ // Si se está arrastrando en la barra de hue
11497
+ if (this.isDraggingHue) {
11498
+ event.preventDefault();
11499
+ event.stopPropagation();
11500
+ this.updateHueFromEvent(mouseEvent);
11501
+ return;
11502
+ }
11503
+ }
11504
+ handleDocumentTouchEnd(event) {
11505
+ // Detener el arrastre de saturación/luminosidad
11506
+ if (this.isDraggingSaturation) {
11507
+ this.isDraggingSaturation = false;
11508
+ }
11509
+ // Detener el arrastre de hue
11510
+ if (this.isDraggingHue) {
11511
+ this.isDraggingHue = false;
11512
+ }
11513
+ }
11514
+ touchToMouseEvent(touch, originalEvent) {
11515
+ return {
11516
+ clientX: touch.clientX,
11517
+ clientY: touch.clientY,
11518
+ preventDefault: () => originalEvent.preventDefault(),
11519
+ stopPropagation: () => originalEvent.stopPropagation(),
11520
+ };
11521
+ }
11522
+ // ============================================================================
11523
+ // VALIDATION METHODS (Métodos de validación)
11524
+ // ============================================================================
11525
+ isValidColor(value) {
11526
+ if (this.mode === 'hex') {
11527
+ return /^#[0-9A-Fa-f]{6}$/.test(value);
11528
+ }
11529
+ if (this.mode === 'rgb') {
11530
+ return /^rgb\(\s*\d{1,3}\s*,\s*\d{1,3}\s*,\s*\d{1,3}\s*\)$/.test(value);
11531
+ }
11532
+ return false;
11533
+ }
11534
+ // ============================================================================
11535
+ // PICKER METHODS (Métodos del picker de colores)
11536
+ // ============================================================================
11537
+ initHueCanvas() {
11538
+ if (!this.hueCanvas?.nativeElement) {
11539
+ return;
11540
+ }
11541
+ const canvas = this.hueCanvas.nativeElement;
11542
+ this.hueCanvasContext = canvas.getContext('2d', { willReadFrequently: true });
11543
+ if (!this.hueCanvasContext) {
11544
+ return;
11545
+ }
11546
+ const width = 30; // Ancho fijo de la barra
11547
+ const height = canvas.clientHeight || 300;
11548
+ canvas.width = width;
11549
+ canvas.height = height;
11550
+ const ctx = this.hueCanvasContext;
11551
+ const imageData = ctx.createImageData(width, height);
11552
+ const data = imageData.data;
11553
+ // Dibujar gradiente vertical de hue (0-360°)
11554
+ for (let y = 0; y < height; y++) {
11555
+ const hue = (y / height) * 360; // 0 a 360
11556
+ for (let x = 0; x < width; x++) {
11557
+ const index = (y * width + x) * 4;
11558
+ // Color con saturación y luminosidad al 100% para mostrar el color puro
11559
+ const rgb = this.hslToRgb(hue / 360, 1, 0.5);
11560
+ data[index] = rgb.r; // R
11561
+ data[index + 1] = rgb.g; // G
11562
+ data[index + 2] = rgb.b; // B
11563
+ data[index + 3] = 255; // A
11564
+ }
11565
+ }
11566
+ ctx.putImageData(imageData, 0, 0);
11567
+ }
11568
+ initSaturationCanvas() {
11569
+ if (!this.colorCanvas?.nativeElement || !this.canvasContainer?.nativeElement) {
11570
+ return;
11571
+ }
11572
+ const canvas = this.colorCanvas.nativeElement;
11573
+ const container = this.canvasContainer.nativeElement;
11574
+ this.canvasContext = canvas.getContext('2d', { willReadFrequently: true });
11575
+ if (!this.canvasContext) {
11576
+ return;
11577
+ }
11578
+ const rect = container.getBoundingClientRect();
11579
+ const width = Math.floor(rect.width) || 300;
11580
+ const height = Math.floor(rect.height) || 300;
11581
+ canvas.style.width = '100%';
11582
+ canvas.style.height = '100%';
11583
+ canvas.width = width;
11584
+ canvas.height = height;
11585
+ this.drawSaturationCanvas();
11586
+ }
11587
+ drawSaturationCanvas() {
11588
+ if (!this.canvasContext || !this.colorCanvas?.nativeElement) {
11589
+ return;
11590
+ }
11591
+ const canvas = this.colorCanvas.nativeElement;
11592
+ const width = canvas.width;
11593
+ const height = canvas.height;
11594
+ const ctx = this.canvasContext;
11595
+ const imageData = ctx.createImageData(width, height);
11596
+ const data = imageData.data;
11597
+ const currentHue = this.hue / 360; // Convertir a 0-1
11598
+ // Dibujar gradiente: X = saturación (0-1), Y = luminosidad (1-0)
11599
+ for (let y = 0; y < height; y++) {
11600
+ for (let x = 0; x < width; x++) {
11601
+ const index = (y * width + x) * 4;
11602
+ // Normalizar coordenadas
11603
+ const saturation = x / width; // 0 a 1 (izquierda a derecha)
11604
+ const lightness = 1 - (y / height); // 1 a 0 (arriba a abajo)
11605
+ // Convertir HSL a RGB
11606
+ const rgb = this.hslToRgb(currentHue, saturation, lightness);
11607
+ data[index] = rgb.r; // R
11608
+ data[index + 1] = rgb.g; // G
11609
+ data[index + 2] = rgb.b; // B
11610
+ data[index + 3] = 255; // A
11611
+ }
11612
+ }
11613
+ ctx.putImageData(imageData, 0, 0);
11614
+ // Dibujar el puntero
11615
+ this.drawPointer();
11616
+ }
11617
+ drawPointer() {
11618
+ if (!this.canvasContext || !this.colorCanvas?.nativeElement) {
11619
+ return;
11620
+ }
11621
+ const canvas = this.colorCanvas.nativeElement;
11622
+ const ctx = this.canvasContext;
11623
+ const x = this.pointerX * canvas.width;
11624
+ const y = this.pointerY * canvas.height;
11625
+ // Asegurar que el puntero esté dentro de los límites
11626
+ const clampedX = Math.max(0, Math.min(canvas.width, x));
11627
+ const clampedY = Math.max(0, Math.min(canvas.height, y));
11628
+ // Círculo exterior blanco
11629
+ ctx.beginPath();
11630
+ ctx.arc(clampedX, clampedY, 10, 0, 2 * Math.PI);
11631
+ ctx.strokeStyle = '#fff';
11632
+ ctx.lineWidth = 2;
11633
+ ctx.stroke();
11634
+ // Círculo interior negro
11635
+ ctx.beginPath();
11636
+ ctx.arc(clampedX, clampedY, 8, 0, 2 * Math.PI);
11637
+ ctx.strokeStyle = '#000';
11638
+ ctx.lineWidth = 1;
11639
+ ctx.stroke();
11640
+ }
11641
+ drawHueIndicator() {
11642
+ if (!this.hueCanvasContext || !this.hueCanvas?.nativeElement) {
11643
+ return;
11644
+ }
11645
+ const canvas = this.hueCanvas.nativeElement;
11646
+ const ctx = this.hueCanvasContext;
11647
+ const y = (this.hue / 360) * canvas.height;
11648
+ // Redibujar el canvas de hue
11649
+ this.initHueCanvas();
11650
+ // Dibujar indicador
11651
+ ctx.beginPath();
11652
+ ctx.moveTo(0, y);
11653
+ ctx.lineTo(canvas.width, y);
11654
+ ctx.strokeStyle = '#fff';
11655
+ ctx.lineWidth = 2;
11656
+ ctx.stroke();
11657
+ ctx.beginPath();
11658
+ ctx.moveTo(0, y - 1);
11659
+ ctx.lineTo(canvas.width, y - 1);
11660
+ ctx.strokeStyle = '#000';
11661
+ ctx.lineWidth = 1;
11662
+ ctx.stroke();
11663
+ }
11664
+ hslToRgb(h, s, l) {
11665
+ let r, g, b;
11666
+ if (s === 0) {
11667
+ r = g = b = l; // Gris acromático
11668
+ }
11669
+ else {
11670
+ const hue2rgb = (p, q, t) => {
11671
+ if (t < 0)
11672
+ t += 1;
11673
+ if (t > 1)
11674
+ t -= 1;
11675
+ if (t < 1 / 6)
11676
+ return p + (q - p) * 6 * t;
11677
+ if (t < 1 / 2)
11678
+ return q;
11679
+ if (t < 2 / 3)
11680
+ return p + (q - p) * (2 / 3 - t) * 6;
11681
+ return p;
11682
+ };
11683
+ const q = l < 0.5 ? l * (1 + s) : l + s - l * s;
11684
+ const p = 2 * l - q;
11685
+ r = hue2rgb(p, q, h + 1 / 3);
11686
+ g = hue2rgb(p, q, h);
11687
+ b = hue2rgb(p, q, h - 1 / 3);
11688
+ }
11689
+ return {
11690
+ r: Math.round(r * 255),
11691
+ g: Math.round(g * 255),
11692
+ b: Math.round(b * 255),
11693
+ };
11694
+ }
11695
+ onSaturationMouseDown(event) {
11696
+ if (this.isDisabled || !this.canvasContext)
11697
+ return;
11698
+ event.preventDefault();
11699
+ event.stopPropagation();
11700
+ this.isDraggingSaturation = true;
11701
+ this.updateSaturationFromEvent(event);
11702
+ }
11703
+ onSaturationTouchStart(event) {
11704
+ if (this.isDisabled || !this.canvasContext)
11705
+ return;
11706
+ event.preventDefault();
11707
+ event.stopPropagation();
11708
+ const touch = event.touches[0];
11709
+ if (!touch)
11710
+ return;
11711
+ this.isDraggingSaturation = true;
11712
+ const mouseEvent = this.touchToMouseEvent(touch, event);
11713
+ this.updateSaturationFromEvent(mouseEvent);
11714
+ }
11715
+ onSaturationMouseMove(event) {
11716
+ if (this.isDisabled || !this.canvasContext)
11717
+ return;
11718
+ if (this.isDraggingSaturation) {
11719
+ event.preventDefault();
11720
+ event.stopPropagation(); // Evitar que el evento llegue al document listener
11721
+ this.updateSaturationFromEvent(event);
11722
+ }
11723
+ }
11724
+ onDocumentMouseMove(event) {
11725
+ if (this.isDisabled)
11726
+ return;
11727
+ // Si se está arrastrando en el área de saturación/luminosidad
11728
+ if (this.isDraggingSaturation) {
11729
+ event.preventDefault();
11730
+ event.stopPropagation();
11731
+ this.updateSaturationFromEvent(event);
11732
+ return;
11733
+ }
11734
+ // Si se está arrastrando en la barra de hue
11735
+ if (this.isDraggingHue) {
11736
+ event.preventDefault();
11737
+ event.stopPropagation();
11738
+ this.updateHueFromEvent(event);
11739
+ return;
11740
+ }
11741
+ }
11742
+ updateSaturationFromEvent(event) {
11743
+ if (!this.colorCanvas?.nativeElement || !this.canvasContext)
11744
+ return;
11745
+ const canvas = this.colorCanvas.nativeElement;
11746
+ const rect = canvas.getBoundingClientRect();
11747
+ // Calcular posición relativa al canvas (puede ser negativa o mayor que el tamaño si está fuera)
11748
+ let x = event.clientX - rect.left;
11749
+ let y = event.clientY - rect.top;
11750
+ // Clamp a los bordes del canvas (esto permite que funcione incluso si el mouse está fuera)
11751
+ // Si x o y son negativos o mayores que el tamaño, los limitamos a los bordes
11752
+ x = Math.max(0, Math.min(canvas.width, x));
11753
+ y = Math.max(0, Math.min(canvas.height, y));
11754
+ // Actualizar posiciones relativas (0-1) basadas en las coordenadas clampadas
11755
+ const newPointerX = x / canvas.width;
11756
+ const newPointerY = y / canvas.height;
11757
+ // Solo actualizar si la posición cambió significativamente (optimización)
11758
+ const threshold = 0.001;
11759
+ if (Math.abs(newPointerX - this.pointerX) < threshold && Math.abs(newPointerY - this.pointerY) < threshold) {
11760
+ return;
11761
+ }
11762
+ // Actualizar posiciones
11763
+ this.pointerX = newPointerX;
11764
+ this.pointerY = newPointerY;
11765
+ // Actualizar valores HSL
11766
+ this.saturation = this.pointerX * 100; // 0-100
11767
+ this.lightness = (1 - this.pointerY) * 100; // 0-100
11768
+ // Redibujar el canvas completo (incluyendo el puntero en la nueva posición)
11769
+ // Esto asegura que el puntero anterior se limpie y el nuevo se dibuje correctamente
11770
+ this.drawSaturationCanvas();
11771
+ // Actualizar color y valores mostrados
11772
+ this.updateColorFromHSL();
11773
+ }
11774
+ onHueMouseDown(event) {
11775
+ if (this.isDisabled || !this.hueCanvasContext)
11776
+ return;
11777
+ event.preventDefault();
11778
+ event.stopPropagation();
11779
+ this.isDraggingHue = true;
11780
+ this.updateHueFromEvent(event);
11781
+ }
11782
+ onHueTouchStart(event) {
11783
+ if (this.isDisabled || !this.hueCanvasContext)
11784
+ return;
11785
+ event.preventDefault();
11786
+ event.stopPropagation();
11787
+ const touch = event.touches[0];
11788
+ if (!touch)
11789
+ return;
11790
+ this.isDraggingHue = true;
11791
+ const mouseEvent = this.touchToMouseEvent(touch, event);
11792
+ this.updateHueFromEvent(mouseEvent);
11793
+ }
11794
+ onSaturationTouchMove(event) {
11795
+ if (this.isDisabled || !this.canvasContext)
11796
+ return;
11797
+ if (this.isDraggingSaturation) {
11798
+ event.preventDefault();
11799
+ event.stopPropagation();
11800
+ const touch = event.touches[0];
11801
+ if (!touch)
11802
+ return;
11803
+ const mouseEvent = this.touchToMouseEvent(touch, event);
11804
+ this.updateSaturationFromEvent(mouseEvent);
11805
+ }
11806
+ }
11807
+ onHueTouchMove(event) {
11808
+ if (this.isDisabled || !this.hueCanvasContext)
11809
+ return;
11810
+ if (this.isDraggingHue) {
11811
+ event.preventDefault();
11812
+ event.stopPropagation();
11813
+ const touch = event.touches[0];
11814
+ if (!touch)
11815
+ return;
11816
+ const mouseEvent = this.touchToMouseEvent(touch, event);
11817
+ this.updateHueFromEvent(mouseEvent);
11818
+ }
11819
+ }
11820
+ onHueMouseMove(event) {
11821
+ if (this.isDisabled || !this.hueCanvasContext)
11822
+ return;
11823
+ if (this.isDraggingHue) {
11824
+ event.preventDefault();
11825
+ event.stopPropagation(); // Evitar que el evento llegue al document listener
11826
+ this.updateHueFromEvent(event);
11827
+ }
11828
+ }
11829
+ updateHueFromEvent(event) {
11830
+ if (!this.hueCanvas?.nativeElement || !this.hueCanvasContext)
11831
+ return;
11832
+ const canvas = this.hueCanvas.nativeElement;
11833
+ const rect = canvas.getBoundingClientRect();
11834
+ // Calcular posición relativa al canvas (puede ser negativa o mayor que el tamaño si está fuera)
11835
+ let y = event.clientY - rect.top;
11836
+ // Clamp a los bordes del canvas (esto permite que funcione incluso si el mouse está fuera)
11837
+ // Si y es negativa o mayor que la altura, la limitamos a los bordes
11838
+ // Esto permite que el selector persiga al mouse hasta que vuelva a una posición válida
11839
+ y = Math.max(0, Math.min(canvas.height, y));
11840
+ // Actualizar hue (0-360) basado en la coordenada Y clampada
11841
+ const newHue = (y / canvas.height) * 360;
11842
+ // Solo redibujar si el hue cambió significativamente (optimización)
11843
+ const threshold = 0.1;
11844
+ if (Math.abs(newHue - this.hue) > threshold) {
11845
+ this.hue = newHue;
11846
+ // Redibujar el canvas de saturación con el nuevo hue
11847
+ this.drawSaturationCanvas();
11848
+ this.drawHueIndicator();
11849
+ // Actualizar color
11850
+ this.updateColorFromHSL();
11851
+ }
11852
+ }
11853
+ updateColorFromHSL() {
11854
+ const rgb = this.hslToRgb(this.hue / 360, this.saturation / 100, this.lightness / 100);
11855
+ this.currentRgb = `rgb(${rgb.r},${rgb.g},${rgb.b})`;
11856
+ this.currentHex = this.rgbToHex(rgb.r, rgb.g, rgb.b);
11857
+ // Actualizar el valor según el modo seleccionado
11858
+ const value = this.mode === 'hex' ? this.currentHex : this.currentRgb;
11859
+ this.textValueChange.emit(value);
11860
+ this.cdr.markForCheck();
11861
+ }
11862
+ onMouseUp(event) {
11863
+ if (this.isDraggingSaturation) {
11864
+ this.isDraggingSaturation = false;
11865
+ }
11866
+ if (this.isDraggingHue) {
11867
+ this.isDraggingHue = false;
11868
+ }
11869
+ }
11870
+ rgbToHex(r, g, b) {
11871
+ return '#' + [r, g, b].map(x => {
11872
+ const hex = x.toString(16);
11873
+ return hex.length === 1 ? '0' + hex : hex;
11874
+ }).join('');
11875
+ }
11876
+ hexToRgb(hex) {
11877
+ const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
11878
+ return result
11879
+ ? {
11880
+ r: parseInt(result[1], 16),
11881
+ g: parseInt(result[2], 16),
11882
+ b: parseInt(result[3], 16),
11883
+ }
11884
+ : null;
11885
+ }
11886
+ rgbStringToHex(rgb) {
11887
+ const result = /^rgb\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)$/.exec(rgb);
11888
+ if (!result)
11889
+ return null;
11890
+ const r = parseInt(result[1], 10);
11891
+ const g = parseInt(result[2], 10);
11892
+ const b = parseInt(result[3], 10);
11893
+ // Validar que los valores estén en el rango correcto
11894
+ if (r > 255 || g > 255 || b > 255)
11895
+ return null;
11896
+ return this.rgbToHex(r, g, b);
11897
+ }
11898
+ parseRgbString(rgb) {
11899
+ const result = /^rgb\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)$/.exec(rgb);
11900
+ if (!result)
11901
+ return null;
11902
+ const r = parseInt(result[1], 10);
11903
+ const g = parseInt(result[2], 10);
11904
+ const b = parseInt(result[3], 10);
11905
+ // Validar que los valores estén en el rango correcto
11906
+ if (r > 255 || g > 255 || b > 255)
11907
+ return null;
11908
+ return { r, g, b };
11909
+ }
11910
+ rgbToHsl(r, g, b) {
11911
+ r /= 255;
11912
+ g /= 255;
11913
+ b /= 255;
11914
+ const max = Math.max(r, g, b);
11915
+ const min = Math.min(r, g, b);
11916
+ let h = 0;
11917
+ let s = 0;
11918
+ const l = (max + min) / 2;
11919
+ if (max !== min) {
11920
+ const d = max - min;
11921
+ s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
11922
+ switch (max) {
11923
+ case r:
11924
+ h = ((g - b) / d + (g < b ? 6 : 0)) / 6;
11925
+ break;
11926
+ case g:
11927
+ h = ((b - r) / d + 2) / 6;
11928
+ break;
11929
+ case b:
11930
+ h = ((r - g) / d + 4) / 6;
11931
+ break;
11932
+ }
11933
+ }
11934
+ return {
11935
+ h: h * 360, // 0-360
11936
+ s: s, // 0-1
11937
+ l: l, // 0-1
11938
+ };
11939
+ }
11940
+ selectColor(color) {
11941
+ const value = this.mode === 'hex' ? color.hex : color.rgb;
11942
+ this.currentHex = color.hex;
11943
+ this.currentRgb = color.rgb;
11944
+ // Convertir a HSL y actualizar los valores
11945
+ const rgb = this.hexToRgb(color.hex);
11946
+ if (rgb) {
11947
+ const hsl = this.rgbToHsl(rgb.r, rgb.g, rgb.b);
11948
+ this.hue = hsl.h;
11949
+ this.saturation = hsl.s * 100;
11950
+ this.lightness = hsl.l * 100;
11951
+ // Actualizar posición del puntero
11952
+ this.pointerX = hsl.s;
11953
+ this.pointerY = 1 - hsl.l;
11954
+ setTimeout(() => {
11955
+ this.drawSaturationCanvas();
11956
+ this.drawHueIndicator();
11957
+ }, 0);
11958
+ }
11959
+ this.selectedColor = color;
11960
+ this.textValueChange.emit(value);
11961
+ this.cdr.markForCheck();
11962
+ }
11963
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: ColorPickerPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11964
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.11", type: ColorPickerPanelComponent, isStandalone: true, selector: "color-picker-panel", inputs: { mode: "mode", textValue: "textValue", disabled: "disabled" }, outputs: { textValueChange: "textValueChange" }, host: { listeners: { "document:mousemove": "onDocumentMouseMove($event)", "document:mouseup": "onMouseUp($event)" }, properties: { "class.IsDisable": "this.hostDisabledClass" } }, viewQueries: [{ propertyName: "colorCanvas", first: true, predicate: ["colorCanvas"], descendants: true }, { propertyName: "hueCanvas", first: true, predicate: ["hueCanvas"], descendants: true }, { propertyName: "pickerContainer", first: true, predicate: ["pickerContainer"], descendants: true }, { propertyName: "canvasContainer", first: true, predicate: ["canvasContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"Picker\" #pickerContainer (click)=\"$event.stopPropagation()\">\n <div class=\"ColorPickerMain\">\n <div class=\"CanvasContainer\" #canvasContainer>\n <canvas\n #colorCanvas\n class=\"ColorCanvas\"\n (mousedown)=\"onSaturationMouseDown($event)\"\n (mousemove)=\"onSaturationMouseMove($event)\"\n (touchstart)=\"onSaturationTouchStart($event)\"\n (touchmove)=\"onSaturationTouchMove($event)\"\n ></canvas>\n </div>\n\n <div class=\"HueContainer\">\n <canvas\n #hueCanvas\n class=\"HueCanvas\"\n (mousedown)=\"onHueMouseDown($event)\"\n (mousemove)=\"onHueMouseMove($event)\"\n (touchstart)=\"onHueTouchStart($event)\"\n (touchmove)=\"onHueTouchMove($event)\"\n ></canvas>\n </div>\n </div>\n\n <div class=\"ColorMeta\">\n <div\n class=\"ColorPreview\"\n [style.background-color]=\"previewColor\"\n aria-hidden=\"true\"\n ></div>\n <div class=\"ColorValues\">\n <div class=\"ColorValueRow\">\n <span class=\"Label\">HEX</span>\n <span class=\"Value\">{{ currentHex || '\u2014' }}</span>\n </div>\n <div class=\"ColorValueRow\">\n <span class=\"Label\">RGB</span>\n <span class=\"Value\">{{ currentRgb || '\u2014' }}</span>\n </div>\n </div>\n </div>\n\n <div class=\"SwatchesContainer\">\n <div\n class=\"Swatch\"\n *ngFor=\"let color of colors\"\n [style.background]=\"mode === 'hex' ? color.hex : color.rgb\"\n (click)=\"selectColor(color)\"\n [title]=\"color.name\"\n ></div>\n </div>\n</div>\n", styles: [":host{display:block;width:100%}:host .Picker{display:flex;flex-direction:column;gap:var(--spacing-md);overflow-y:auto}:host .Picker .ColorPickerMain{display:flex;gap:var(--spacing-md);align-items:stretch;width:100%;min-height:200px;max-height:200px}:host .Picker .ColorPickerMain .CanvasContainer{position:relative;flex:1;aspect-ratio:1;border-radius:var(--radius-lg);overflow:hidden;cursor:crosshair}:host .Picker .ColorPickerMain .CanvasContainer .ColorCanvas{width:100%;height:100%;display:block;touch-action:none}:host .Picker .ColorPickerMain .HueContainer{position:relative;width:30px;border-radius:var(--radius-lg);overflow:hidden;cursor:crosshair}:host .Picker .ColorPickerMain .HueContainer .HueCanvas{width:100%;height:100%;display:block;touch-action:none}:host .Picker .ColorMeta{display:flex;gap:var(--spacing-md);align-items:center;padding:var(--spacing-sm);background:var(--surface-2);border:1px solid var(--input-border);border-radius:var(--radius-md)}:host .Picker .ColorMeta .ColorPreview{flex-shrink:0;width:52px;height:52px;border-radius:var(--radius-md);border:1px solid var(--input-border);background-color:var(--input-concats-bg);box-shadow:inset 0 0 0 1px var(--border)}:host .Picker .ColorMeta .ColorValues{flex:1;display:flex;flex-direction:column;gap:var(--spacing-xs);min-width:0}:host .Picker .ColorMeta .ColorValues .ColorValueRow{display:flex;align-items:center;gap:var(--spacing-sm)}:host .Picker .ColorMeta .ColorValues .ColorValueRow .Label{flex-shrink:0;min-width:2.25rem;font-size:.7rem;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--text-muted)}:host .Picker .ColorMeta .ColorValues .ColorValueRow .Value{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.875rem;font-weight:500;color:var(--text-base);word-break:break-all}:host .Picker .SwatchesContainer{display:grid;grid-template-columns:repeat(auto-fill,minmax(20px,1fr));gap:2px;max-height:150px;overflow-y:auto;padding:2px}:host .Picker .SwatchesContainer .Swatch{width:100%;aspect-ratio:1;cursor:pointer;border-radius:var(--radius-sm);border:2px solid transparent;transition:all .2s ease}:host .Picker .SwatchesContainer .Swatch:hover{border-color:var(--primary);transform:scale(1.1);box-shadow:0 2px 8px var(--overlay-scrim)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
11965
+ }
11966
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: ColorPickerPanelComponent, decorators: [{
11967
+ type: Component,
11968
+ args: [{ selector: 'color-picker-panel', standalone: true, imports: [CommonModule], template: "<div class=\"Picker\" #pickerContainer (click)=\"$event.stopPropagation()\">\n <div class=\"ColorPickerMain\">\n <div class=\"CanvasContainer\" #canvasContainer>\n <canvas\n #colorCanvas\n class=\"ColorCanvas\"\n (mousedown)=\"onSaturationMouseDown($event)\"\n (mousemove)=\"onSaturationMouseMove($event)\"\n (touchstart)=\"onSaturationTouchStart($event)\"\n (touchmove)=\"onSaturationTouchMove($event)\"\n ></canvas>\n </div>\n\n <div class=\"HueContainer\">\n <canvas\n #hueCanvas\n class=\"HueCanvas\"\n (mousedown)=\"onHueMouseDown($event)\"\n (mousemove)=\"onHueMouseMove($event)\"\n (touchstart)=\"onHueTouchStart($event)\"\n (touchmove)=\"onHueTouchMove($event)\"\n ></canvas>\n </div>\n </div>\n\n <div class=\"ColorMeta\">\n <div\n class=\"ColorPreview\"\n [style.background-color]=\"previewColor\"\n aria-hidden=\"true\"\n ></div>\n <div class=\"ColorValues\">\n <div class=\"ColorValueRow\">\n <span class=\"Label\">HEX</span>\n <span class=\"Value\">{{ currentHex || '\u2014' }}</span>\n </div>\n <div class=\"ColorValueRow\">\n <span class=\"Label\">RGB</span>\n <span class=\"Value\">{{ currentRgb || '\u2014' }}</span>\n </div>\n </div>\n </div>\n\n <div class=\"SwatchesContainer\">\n <div\n class=\"Swatch\"\n *ngFor=\"let color of colors\"\n [style.background]=\"mode === 'hex' ? color.hex : color.rgb\"\n (click)=\"selectColor(color)\"\n [title]=\"color.name\"\n ></div>\n </div>\n</div>\n", styles: [":host{display:block;width:100%}:host .Picker{display:flex;flex-direction:column;gap:var(--spacing-md);overflow-y:auto}:host .Picker .ColorPickerMain{display:flex;gap:var(--spacing-md);align-items:stretch;width:100%;min-height:200px;max-height:200px}:host .Picker .ColorPickerMain .CanvasContainer{position:relative;flex:1;aspect-ratio:1;border-radius:var(--radius-lg);overflow:hidden;cursor:crosshair}:host .Picker .ColorPickerMain .CanvasContainer .ColorCanvas{width:100%;height:100%;display:block;touch-action:none}:host .Picker .ColorPickerMain .HueContainer{position:relative;width:30px;border-radius:var(--radius-lg);overflow:hidden;cursor:crosshair}:host .Picker .ColorPickerMain .HueContainer .HueCanvas{width:100%;height:100%;display:block;touch-action:none}:host .Picker .ColorMeta{display:flex;gap:var(--spacing-md);align-items:center;padding:var(--spacing-sm);background:var(--surface-2);border:1px solid var(--input-border);border-radius:var(--radius-md)}:host .Picker .ColorMeta .ColorPreview{flex-shrink:0;width:52px;height:52px;border-radius:var(--radius-md);border:1px solid var(--input-border);background-color:var(--input-concats-bg);box-shadow:inset 0 0 0 1px var(--border)}:host .Picker .ColorMeta .ColorValues{flex:1;display:flex;flex-direction:column;gap:var(--spacing-xs);min-width:0}:host .Picker .ColorMeta .ColorValues .ColorValueRow{display:flex;align-items:center;gap:var(--spacing-sm)}:host .Picker .ColorMeta .ColorValues .ColorValueRow .Label{flex-shrink:0;min-width:2.25rem;font-size:.7rem;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--text-muted)}:host .Picker .ColorMeta .ColorValues .ColorValueRow .Value{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.875rem;font-weight:500;color:var(--text-base);word-break:break-all}:host .Picker .SwatchesContainer{display:grid;grid-template-columns:repeat(auto-fill,minmax(20px,1fr));gap:2px;max-height:150px;overflow-y:auto;padding:2px}:host .Picker .SwatchesContainer .Swatch{width:100%;aspect-ratio:1;cursor:pointer;border-radius:var(--radius-sm);border:2px solid transparent;transition:all .2s ease}:host .Picker .SwatchesContainer .Swatch:hover{border-color:var(--primary);transform:scale(1.1);box-shadow:0 2px 8px var(--overlay-scrim)}\n"] }]
11969
+ }], propDecorators: { colorCanvas: [{
11970
+ type: ViewChild,
11971
+ args: ['colorCanvas', { static: false }]
11972
+ }], hueCanvas: [{
11973
+ type: ViewChild,
11974
+ args: ['hueCanvas', { static: false }]
11975
+ }], pickerContainer: [{
11976
+ type: ViewChild,
11977
+ args: ['pickerContainer', { static: false }]
11978
+ }], canvasContainer: [{
11979
+ type: ViewChild,
11980
+ args: ['canvasContainer', { static: false }]
11981
+ }], mode: [{
11982
+ type: Input
11983
+ }], textValue: [{
11984
+ type: Input
11985
+ }], textValueChange: [{
11986
+ type: Output
11987
+ }], hostDisabledClass: [{
11988
+ type: HostBinding,
11989
+ args: ['class.IsDisable']
11990
+ }], disabled: [{
11991
+ type: Input
11992
+ }], onDocumentMouseMove: [{
11993
+ type: HostListener,
11994
+ args: ['document:mousemove', ['$event']]
11995
+ }], onMouseUp: [{
11996
+ type: HostListener,
11997
+ args: ['document:mouseup', ['$event']]
11998
+ }] } });
11999
+
12000
+ class ColorPickerModalServiceComponent {
12001
+ colorPickerModal;
12002
+ cdr;
12003
+ vm$;
12004
+ sub;
12005
+ constructor(colorPickerModal, cdr) {
12006
+ this.colorPickerModal = colorPickerModal;
12007
+ this.cdr = cdr;
12008
+ this.vm$ = this.colorPickerModal.state$;
12009
+ }
12010
+ ngOnInit() {
12011
+ this.sub = this.colorPickerModal.state$.subscribe(() => this.cdr.markForCheck());
12012
+ }
12013
+ ngOnDestroy() {
12014
+ this.sub?.unsubscribe();
12015
+ }
12016
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: ColorPickerModalServiceComponent, deps: [{ token: ColorPickerModalService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
12017
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.11", type: ColorPickerModalServiceComponent, isStandalone: true, selector: "color-picker-modal-service", ngImport: i0, template: "<ng-container *ngIf=\"vm$ | async as session\">\r\n <div class=\"Backdrop InputModalBackdrop color-picker-modal\">\r\n <div class=\"Picker\" (click)=\"$event.stopPropagation()\">\r\n <color-picker-panel\r\n [mode]=\"session.view.mode\"\r\n [textValue]=\"session.view.textValue\"\r\n [disabled]=\"false\"\r\n (textValueChange)=\"session.handlers.onTextValueChange($event)\"\r\n />\r\n <div class=\"Actions\">\r\n <button type=\"button\" class=\"Cancel\" (click)=\"session.handlers.onCancel()\">\r\n Cancelar\r\n </button>\r\n <button type=\"button\" class=\"Ok\" (click)=\"session.handlers.onAccept()\">\r\n Aceptar\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: [":host(.IsDisable){opacity:.4;pointer-events:none;cursor:not-allowed}:host{display:flex;flex-direction:column;width:100%;height:max-content;-webkit-user-select:auto;user-select:auto}:host .LabelRow{display:flex;align-items:center;justify-content:space-between;gap:6px;width:100%;margin-bottom:2px}:host .Label{color:var(--text-label);flex:1;min-width:0;cursor:pointer;padding:0 3px;margin:0;font-weight:400;-webkit-user-select:none;user-select:none}:host .Label .Opcional{color:var(--text-muted)}:host .Description{-webkit-user-select:none;user-select:none;font-size:.9rem;color:var(--text-base);font-weight:400;width:100%;cursor:pointer;padding:0 3px;margin:0 0 4px;overflow:hidden;word-break:break-all}:host .Entry{display:flex;width:100%;height:32px;justify-content:flex-start;align-items:center;border:solid 0 var(--input-border);border-radius:12px;cursor:pointer;overflow:hidden;background-color:var(--input-bg)}:host .Entry:hover{border:none;outline:solid 1px var(--input-hover-border)}:host .Entry[class~=IsFocus]{border:none;outline:solid 1px var(--input-focus-border)}:host .Entry[class~=Error]{outline:solid 1px var(--input-border-error)}:host .Entry .Input{height:100%;width:100%;border:solid 0 var(--input-border);padding:0 8px;color:var(--input-text);caret-color:var(--primary);text-align:start}:host .Entry .Input:focus{border:none;outline:none}:host .Entry .Input::placeholder{color:var(--input-placeholder)}:host .Entry.NotHover:hover{border:none;outline:none}:host .Backdrop{position:fixed;top:0;left:0;z-index:800;display:flex;justify-content:center;align-items:center;width:100%;height:100%;padding:12px;background:var(--overlay-scrim);overflow:hidden}@media (width <= 768px){:host .Backdrop{align-items:flex-start}}:host .Backdrop .Picker{display:flex;flex-direction:column;gap:5px;width:100%;max-width:600px;max-height:100%;margin:0 auto;background:var(--surface);border-radius:16px;padding:12px;overflow:hidden;overflow-y:auto;box-shadow:0 0 8px var(--shadow-color)}:host{display:contents}.Backdrop{position:fixed;top:0;left:0;z-index:10050;display:flex;justify-content:center;align-items:center;width:100%;height:100%;padding:12px;background:var(--overlay-scrim);overflow:hidden}@media (width <= 768px){.Backdrop{align-items:flex-start}}.Backdrop .Picker{display:flex;flex-direction:column;width:100%;max-width:400px;margin:0 auto;background:var(--surface);border-radius:var(--radius-xl);padding:12px;box-shadow:0 0 8px var(--shadow-color);max-height:calc(100vh - 24px);overflow:hidden}.Backdrop .Picker color-picker-panel{flex:1;min-height:0;overflow-y:auto}.Backdrop .Picker .Actions{display:flex;justify-content:flex-end;gap:var(--spacing-xs);margin-top:var(--spacing-md);padding-top:var(--spacing-md);border-top:1px solid var(--border);flex-shrink:0}.Backdrop .Picker .Actions button{border:none;font:inherit}.Backdrop .Picker .Actions .Ok{padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--radius-lg);color:var(--btn-primary-text);border-color:var(--btn-primary-border);background-color:var(--btn-primary-bg);cursor:pointer}.Backdrop .Picker .Actions .Ok:hover{color:var(--btn-primary-text-hover);border-color:var(--btn-primary-border-hover);background-color:var(--btn-primary-bg-hover)}.Backdrop .Picker .Actions .Ok:active{color:var(--btn-primary-text-active);border-color:var(--btn-primary-border-active);background-color:var(--btn-primary-bg-active)}.Backdrop .Picker .Actions .Ok:disabled{opacity:.6;cursor:not-allowed}.Backdrop .Picker .Actions .Cancel{padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--radius-lg);color:var(--btn-cancel-text);border-color:var(--btn-cancel-border);background-color:var(--btn-cancel-bg);cursor:pointer}.Backdrop .Picker .Actions .Cancel:hover{color:var(--btn-cancel-text-hover);border-color:var(--btn-cancel-border-hover);background-color:var(--btn-cancel-bg-hover)}.Backdrop .Picker .Actions .Cancel:active{color:var(--btn-cancel-text-active);border-color:var(--btn-cancel-border-active);background-color:var(--btn-cancel-bg-active)}.Backdrop .Picker .Actions .Cancel:disabled{opacity:.6;cursor:not-allowed}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "component", type: ColorPickerPanelComponent, selector: "color-picker-panel", inputs: ["mode", "textValue", "disabled"], outputs: ["textValueChange"] }] });
12018
+ }
12019
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: ColorPickerModalServiceComponent, decorators: [{
12020
+ type: Component,
12021
+ args: [{ selector: 'color-picker-modal-service', standalone: true, imports: [CommonModule, ColorPickerPanelComponent], template: "<ng-container *ngIf=\"vm$ | async as session\">\r\n <div class=\"Backdrop InputModalBackdrop color-picker-modal\">\r\n <div class=\"Picker\" (click)=\"$event.stopPropagation()\">\r\n <color-picker-panel\r\n [mode]=\"session.view.mode\"\r\n [textValue]=\"session.view.textValue\"\r\n [disabled]=\"false\"\r\n (textValueChange)=\"session.handlers.onTextValueChange($event)\"\r\n />\r\n <div class=\"Actions\">\r\n <button type=\"button\" class=\"Cancel\" (click)=\"session.handlers.onCancel()\">\r\n Cancelar\r\n </button>\r\n <button type=\"button\" class=\"Ok\" (click)=\"session.handlers.onAccept()\">\r\n Aceptar\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: [":host(.IsDisable){opacity:.4;pointer-events:none;cursor:not-allowed}:host{display:flex;flex-direction:column;width:100%;height:max-content;-webkit-user-select:auto;user-select:auto}:host .LabelRow{display:flex;align-items:center;justify-content:space-between;gap:6px;width:100%;margin-bottom:2px}:host .Label{color:var(--text-label);flex:1;min-width:0;cursor:pointer;padding:0 3px;margin:0;font-weight:400;-webkit-user-select:none;user-select:none}:host .Label .Opcional{color:var(--text-muted)}:host .Description{-webkit-user-select:none;user-select:none;font-size:.9rem;color:var(--text-base);font-weight:400;width:100%;cursor:pointer;padding:0 3px;margin:0 0 4px;overflow:hidden;word-break:break-all}:host .Entry{display:flex;width:100%;height:32px;justify-content:flex-start;align-items:center;border:solid 0 var(--input-border);border-radius:12px;cursor:pointer;overflow:hidden;background-color:var(--input-bg)}:host .Entry:hover{border:none;outline:solid 1px var(--input-hover-border)}:host .Entry[class~=IsFocus]{border:none;outline:solid 1px var(--input-focus-border)}:host .Entry[class~=Error]{outline:solid 1px var(--input-border-error)}:host .Entry .Input{height:100%;width:100%;border:solid 0 var(--input-border);padding:0 8px;color:var(--input-text);caret-color:var(--primary);text-align:start}:host .Entry .Input:focus{border:none;outline:none}:host .Entry .Input::placeholder{color:var(--input-placeholder)}:host .Entry.NotHover:hover{border:none;outline:none}:host .Backdrop{position:fixed;top:0;left:0;z-index:800;display:flex;justify-content:center;align-items:center;width:100%;height:100%;padding:12px;background:var(--overlay-scrim);overflow:hidden}@media (width <= 768px){:host .Backdrop{align-items:flex-start}}:host .Backdrop .Picker{display:flex;flex-direction:column;gap:5px;width:100%;max-width:600px;max-height:100%;margin:0 auto;background:var(--surface);border-radius:16px;padding:12px;overflow:hidden;overflow-y:auto;box-shadow:0 0 8px var(--shadow-color)}:host{display:contents}.Backdrop{position:fixed;top:0;left:0;z-index:10050;display:flex;justify-content:center;align-items:center;width:100%;height:100%;padding:12px;background:var(--overlay-scrim);overflow:hidden}@media (width <= 768px){.Backdrop{align-items:flex-start}}.Backdrop .Picker{display:flex;flex-direction:column;width:100%;max-width:400px;margin:0 auto;background:var(--surface);border-radius:var(--radius-xl);padding:12px;box-shadow:0 0 8px var(--shadow-color);max-height:calc(100vh - 24px);overflow:hidden}.Backdrop .Picker color-picker-panel{flex:1;min-height:0;overflow-y:auto}.Backdrop .Picker .Actions{display:flex;justify-content:flex-end;gap:var(--spacing-xs);margin-top:var(--spacing-md);padding-top:var(--spacing-md);border-top:1px solid var(--border);flex-shrink:0}.Backdrop .Picker .Actions button{border:none;font:inherit}.Backdrop .Picker .Actions .Ok{padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--radius-lg);color:var(--btn-primary-text);border-color:var(--btn-primary-border);background-color:var(--btn-primary-bg);cursor:pointer}.Backdrop .Picker .Actions .Ok:hover{color:var(--btn-primary-text-hover);border-color:var(--btn-primary-border-hover);background-color:var(--btn-primary-bg-hover)}.Backdrop .Picker .Actions .Ok:active{color:var(--btn-primary-text-active);border-color:var(--btn-primary-border-active);background-color:var(--btn-primary-bg-active)}.Backdrop .Picker .Actions .Ok:disabled{opacity:.6;cursor:not-allowed}.Backdrop .Picker .Actions .Cancel{padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--radius-lg);color:var(--btn-cancel-text);border-color:var(--btn-cancel-border);background-color:var(--btn-cancel-bg);cursor:pointer}.Backdrop .Picker .Actions .Cancel:hover{color:var(--btn-cancel-text-hover);border-color:var(--btn-cancel-border-hover);background-color:var(--btn-cancel-bg-hover)}.Backdrop .Picker .Actions .Cancel:active{color:var(--btn-cancel-text-active);border-color:var(--btn-cancel-border-active);background-color:var(--btn-cancel-bg-active)}.Backdrop .Picker .Actions .Cancel:disabled{opacity:.6;cursor:not-allowed}\n"] }]
12022
+ }], ctorParameters: () => [{ type: ColorPickerModalService }, { type: i0.ChangeDetectorRef }] });
12023
+
12024
+ /**
12025
+ * Shells globales de modales ligados a inputs (montados en `app-root`).
12026
+ * Un solo punto de entrada para importar en `AppComponent` u otros.
12027
+ */
12028
+ /** Lista para `imports: [..., ...INPUT_MODAL_SERVICE_COMPONENTS]` en el decorador. */
12029
+ const INPUT_MODAL_SERVICE_COMPONENTS = [
12030
+ OnlySelectModalServiceComponent,
12031
+ MultiselectComboboxModalServiceComponent,
12032
+ SearchEntryModalServiceComponent,
12033
+ PhoneEntryModalServiceComponent,
12034
+ DatePickerModalServiceComponent,
12035
+ TimePickerModalServiceComponent,
12036
+ DatetimePickerModalServiceComponent,
12037
+ MonthPickerModalServiceComponent,
12038
+ ColorPickerModalServiceComponent,
12039
+ ];
12040
+
12041
+ /**
12042
+ * Monta en un solo lugar los shells globales de modales de inputs (equivalente a los tags sueltos en `app-root`).
12043
+ */
12044
+ class InputModalServicesComponent {
12045
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: InputModalServicesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
12046
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.11", type: InputModalServicesComponent, isStandalone: true, selector: "input-modal-services", ngImport: i0, template: "<only-select-modal-service></only-select-modal-service>\r\n<multiselect-combobox-modal-service></multiselect-combobox-modal-service>\r\n<search-entry-modal-service></search-entry-modal-service>\r\n<phone-entry-modal-service></phone-entry-modal-service>\r\n<date-picker-modal-service></date-picker-modal-service>\r\n<time-picker-modal-service></time-picker-modal-service>\r\n<datetime-picker-modal-service></datetime-picker-modal-service>\r\n<month-picker-modal-service></month-picker-modal-service>\r\n<color-picker-modal-service></color-picker-modal-service>\r\n", dependencies: [{ kind: "component", type: OnlySelectModalServiceComponent, selector: "only-select-modal-service" }, { kind: "component", type: MultiselectComboboxModalServiceComponent, selector: "multiselect-combobox-modal-service" }, { kind: "component", type: SearchEntryModalServiceComponent, selector: "search-entry-modal-service" }, { kind: "component", type: PhoneEntryModalServiceComponent, selector: "phone-entry-modal-service" }, { kind: "component", type: DatePickerModalServiceComponent, selector: "date-picker-modal-service" }, { kind: "component", type: TimePickerModalServiceComponent, selector: "time-picker-modal-service" }, { kind: "component", type: DatetimePickerModalServiceComponent, selector: "datetime-picker-modal-service" }, { kind: "component", type: MonthPickerModalServiceComponent, selector: "month-picker-modal-service" }, { kind: "component", type: ColorPickerModalServiceComponent, selector: "color-picker-modal-service" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
12047
+ }
12048
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: InputModalServicesComponent, decorators: [{
12049
+ type: Component,
12050
+ args: [{ selector: 'input-modal-services', standalone: true, imports: [...INPUT_MODAL_SERVICE_COMPONENTS], changeDetection: ChangeDetectionStrategy.OnPush, template: "<only-select-modal-service></only-select-modal-service>\r\n<multiselect-combobox-modal-service></multiselect-combobox-modal-service>\r\n<search-entry-modal-service></search-entry-modal-service>\r\n<phone-entry-modal-service></phone-entry-modal-service>\r\n<date-picker-modal-service></date-picker-modal-service>\r\n<time-picker-modal-service></time-picker-modal-service>\r\n<datetime-picker-modal-service></datetime-picker-modal-service>\r\n<month-picker-modal-service></month-picker-modal-service>\r\n<color-picker-modal-service></color-picker-modal-service>\r\n" }]
12051
+ }] });
12052
+
11107
12053
  /**
11108
12054
  * Barrel export para todos los componentes de inputs.
11109
12055
  *
@@ -11117,7 +12063,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImpo
11117
12063
  * import { ALL_INPUT_COMPONENTS } from '@shared/components/inputs';
11118
12064
  * imports: [ALL_INPUT_COMPONENTS]
11119
12065
  */
11120
- // Texto y texto largo
11121
12066
  /**
11122
12067
  * Array con todos los componentes de inputs completamente standalone.
11123
12068
  *
@@ -11328,5 +12273,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImpo
11328
12273
  * Generated bundle index. Do not edit.
11329
12274
  */
11330
12275
 
11331
- export { ALL_INPUT_COMPONENTS, BooleanEntryComponent, ColorPickerComponent, ContextMenuService, ContextMenuServiceComponent, CounterEntryComponent, DatePickerComponent, DatetimePickerComponent, DecimalEntryComponent, DragScrollDirective, EmailEntryComponent, FieldHelpTooltipComponent, FileSizePipe, IntegerEntryComponent, LucideIconComponent, MediaEntryComponent, MonthPickerComponent, MultichoiceEntryComponent, MultiselectComboboxComponent, OnlySelectComponent, OnlychoiceEntryComponent, OtpEntryComponent, PasswordEntryComponent, PhoneEntryComponent, PriceEntryComponent, RangeEntryComponent, RatingEntryComponent, RichTextEntryComponent, SearchEntryComponent, SignatureEntryComponent, SliderEntryComponent, SwitchEntryComponent, TagsEntryComponent, TextAreaEntryComponent, TextEntryComponent, TimePickerComponent, UrlEntryComponent, XOSUE_UTILS_INPUTS_CONFIG, XOSUE_UTILS_MEDIA_PREVIEW, XOSUE_UTILS_MEDIA_VIEWER, createBackendMediaImageUrlState, provideXosueUtilsInputs, provideXosueUtilsMedia };
12276
+ export { ALL_INPUT_COMPONENTS, BooleanEntryComponent, ColorPickerComponent, ColorPickerModalServiceComponent, ContextMenuService, ContextMenuServiceComponent, CounterEntryComponent, DatePickerComponent, DatePickerModalServiceComponent, DatetimePickerComponent, DatetimePickerModalServiceComponent, DecimalEntryComponent, DragScrollDirective, EmailEntryComponent, FieldHelpTooltipComponent, FileSizePipe, INPUT_MODAL_SERVICE_COMPONENTS, InputModalServicesComponent, IntegerEntryComponent, LucideIconComponent, MediaEntryComponent, MonthPickerComponent, MonthPickerModalServiceComponent, MultichoiceEntryComponent, MultiselectComboboxComponent, MultiselectComboboxModalServiceComponent, OnlySelectComponent, OnlySelectModalServiceComponent, OnlychoiceEntryComponent, OtpEntryComponent, PasswordEntryComponent, PhoneEntryComponent, PhoneEntryModalServiceComponent, PriceEntryComponent, RangeEntryComponent, RatingEntryComponent, RichTextEntryComponent, SearchEntryComponent, SearchEntryModalServiceComponent, SignatureEntryComponent, SliderEntryComponent, SwitchEntryComponent, TagsEntryComponent, TextAreaEntryComponent, TextEntryComponent, TimePickerComponent, TimePickerModalServiceComponent, UrlEntryComponent, XOSUE_UTILS_INPUTS_CONFIG, XOSUE_UTILS_MEDIA_PREVIEW, XOSUE_UTILS_MEDIA_VIEWER, createBackendMediaImageUrlState, formatPhoneForDisplay, provideXosueUtilsInputs, provideXosueUtilsMedia, stripCountryCodeFromNumber };
11332
12277
  //# sourceMappingURL=xosue-utils-inputs.mjs.map