@xosue-utils/inputs 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/xosue-utils-inputs.mjs +948 -3
- package/fesm2022/xosue-utils-inputs.mjs.map +1 -1
- package/lib/color-picker/color-picker-panel.component.d.ts +85 -0
- package/lib/color-picker/services/color-picker-modal/color-picker-modal-service.component.d.ts +15 -0
- package/lib/date-picker/services/date-picker-modal/date-picker-modal-service.component.d.ts +15 -0
- package/lib/datetime-picker/services/datetime-picker-modal/datetime-picker-modal-service.component.d.ts +15 -0
- package/lib/index.d.ts +3 -0
- package/lib/input-modal-service-components.d.ts +16 -0
- package/lib/input-modal-services.component.d.ts +8 -0
- package/lib/month-picker/services/month-picker-modal/month-picker-modal-service.component.d.ts +15 -0
- package/lib/multiselect-combobox/services/multiselect-combobox-modal/multiselect-combobox-modal-service.component.d.ts +17 -0
- package/lib/only-select/services/only-select-modal/only-select-modal-service.component.d.ts +15 -0
- package/lib/phone-entry/services/phone-entry-modal/phone-entry-modal-service.component.d.ts +15 -0
- package/lib/search-entry/services/search-entry-modal/search-entry-modal-service.component.d.ts +15 -0
- package/lib/time-picker/services/time-picker-modal/time-picker-modal-service.component.d.ts +15 -0
- package/package.json +10 -10
- package/public-api.d.ts +2 -1
- /package/{vendor → lib}/lucide-icon/lucide-icon.component.d.ts +0 -0
|
@@ -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
|