catarina 1.1.0 → 1.1.1

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.
@@ -615,12 +615,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
615
615
  class SelectInput {
616
616
  el;
617
617
  inputEl;
618
+ optionsContainer;
618
619
  transform; //This option basicly allow to the consumer put the options at the side where he wants
619
620
  options;
620
621
  placeholder = '';
621
622
  type = 'string';
622
623
  value = '';
623
624
  active = false;
625
+ isInsideMenu = false;
624
626
  variant = 'surface';
625
627
  scrolleable = false;
626
628
  customClass = '';
@@ -629,12 +631,72 @@ class SelectInput {
629
631
  outerClick(event) {
630
632
  if (!this.el.nativeElement.contains(event.target)) {
631
633
  this.active = false;
634
+ this.updateDropdownPosition();
632
635
  }
633
636
  }
634
637
  ;
638
+ updateDropdownPosition() {
639
+ if (!isPlatformBrowser(this.platformId))
640
+ return;
641
+ if (!this.isInsideMenu || !this.active || !this.optionsContainer) {
642
+ return;
643
+ }
644
+ // Calcular posición cuando está dentro del menú
645
+ const inputRect = this.inputEl.nativeElement.getBoundingClientRect();
646
+ const optionsEl = this.optionsContainer.nativeElement;
647
+ // Posicionar el dropdown debajo del input usando position fixed
648
+ optionsEl.style.position = 'fixed';
649
+ optionsEl.style.top = `${inputRect.bottom}px`;
650
+ optionsEl.style.left = `${inputRect.left}px`;
651
+ optionsEl.style.width = `${inputRect.width}px`;
652
+ optionsEl.style.zIndex = '1001';
653
+ }
654
+ toggleActive() {
655
+ this.active = !this.active;
656
+ if (this.active && this.isInsideMenu) {
657
+ // Esperar un tick para que el DOM se actualice
658
+ setTimeout(() => {
659
+ this.updateDropdownPosition();
660
+ }, 0);
661
+ }
662
+ }
635
663
  constructor(el) {
636
664
  this.el = el;
637
665
  }
666
+ platformId = inject(PLATFORM_ID);
667
+ scrollHandler;
668
+ resizeHandler;
669
+ ngAfterViewInit() {
670
+ if (!isPlatformBrowser(this.platformId))
671
+ return;
672
+ // Detectar si el select está dentro de un menú
673
+ this.isInsideMenu = !!this.el.nativeElement.closest('cat-menu');
674
+ // Añadir listeners para actualizar posición en scroll/resize
675
+ if (this.isInsideMenu) {
676
+ this.scrollHandler = () => {
677
+ if (this.active) {
678
+ this.updateDropdownPosition();
679
+ }
680
+ };
681
+ this.resizeHandler = () => {
682
+ if (this.active) {
683
+ this.updateDropdownPosition();
684
+ }
685
+ };
686
+ window.addEventListener('scroll', this.scrollHandler, true);
687
+ window.addEventListener('resize', this.resizeHandler);
688
+ }
689
+ }
690
+ ngOnDestroy() {
691
+ if (!isPlatformBrowser(this.platformId))
692
+ return;
693
+ if (this.scrollHandler) {
694
+ window.removeEventListener('scroll', this.scrollHandler, true);
695
+ }
696
+ if (this.resizeHandler) {
697
+ window.removeEventListener('resize', this.resizeHandler);
698
+ }
699
+ }
638
700
  onChange = (value) => { };
639
701
  onTouched = () => { };
640
702
  //Here starts the events from ControlValueAccesor
@@ -668,7 +730,7 @@ class SelectInput {
668
730
  provide: NG_VALUE_ACCESSOR,
669
731
  useExisting: forwardRef(() => SelectInput),
670
732
  multi: true
671
- }], viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<div>\n <input catInput [value]=\"value\" [type]=\"type\" readonly id=\"select\" (mousedown)=\"active =! active\" [placeholder]=\"placeholder\">\n <section role=\"listbox\" [class]=\"selectInputClass\" class=\"options\" [ngClass]=\"active ? 'options-active' : 'options.unactive'\" [style.transform]=\"transform\">\n @if (active) {\n <div role=\"option\"*ngFor=\"let option of options\" (mousedown)=\"choseValue(option)\">\n {{ option }}\n </div>\n }\n </section>\n</div>", styles: ["div{position:relative;display:inline-block}.options-active{background-color:var(--neutral-color-0);z-index:1;border-radius:18px;padding:8px;box-sizing:border-box;width:100%;position:absolute;display:flex;flex-direction:column;transition:.25s}.options-unactive{display:none;transition:.15s}.options>div{background-color:transparent;min-height:1em;padding-top:.5em;padding-left:.5em;padding-right:.8em;color:var(--neutral-color-9);box-sizing:border-box}.options>div:hover{background-color:var(--neutral-color-1)}.scrolleable{height:7em;overflow-y:auto}.scrolleable::-webkit-scrollbar{width:8px;height:8px}.scrolleable::-webkit-scrollbar-track{background:transparent}.scrolleable::-webkit-scrollbar-thumb{background:#888;border-radius:4px}.scrolleable::-webkit-scrollbar-thumb:hover{background:#555}.surface{background-color:var(--element-color-4)}.elevated{background-color:var(--neutral-color-0)}.outlined{background-color:var(--element-color-3);border:1px solid var(--neutral-color-6)}\n"], dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: CatInput, selector: "[catInput]" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
733
+ }], viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["input"], descendants: true }, { propertyName: "optionsContainer", first: true, predicate: ["optionsContainer"], descendants: true }], ngImport: i0, template: "<div>\n <input catInput #input [value]=\"value\" [type]=\"type\" readonly id=\"select\" (mousedown)=\"toggleActive()\" [placeholder]=\"placeholder\">\n <section #optionsContainer role=\"listbox\" [class]=\"selectInputClass\" class=\"options\" [ngClass]=\"active ? 'options-active' : 'options.unactive'\" [style.transform]=\"transform\">\n @if (active) {\n <div role=\"option\"*ngFor=\"let option of options\" (mousedown)=\"choseValue(option)\">\n {{ option }}\n </div>\n }\n </section>\n</div>", styles: ["div{position:relative;display:inline-block}.options-active{background-color:var(--neutral-color-0);z-index:1001;border-radius:18px;padding:8px;box-sizing:border-box;width:100%;position:absolute;display:flex;flex-direction:column;transition:.25s;isolation:isolate}.options-unactive{display:none;transition:.15s}.options>div{background-color:transparent;min-height:1em;padding-top:.5em;padding-left:.5em;padding-right:.8em;color:var(--neutral-color-9);box-sizing:border-box}.options>div:hover{background-color:var(--neutral-color-1)}.scrolleable{height:7em;overflow-y:auto}.scrolleable::-webkit-scrollbar{width:8px;height:8px}.scrolleable::-webkit-scrollbar-track{background:transparent}.scrolleable::-webkit-scrollbar-thumb{background:#888;border-radius:4px}.scrolleable::-webkit-scrollbar-thumb:hover{background:#555}.surface{background-color:var(--element-color-4)}.elevated{background-color:var(--neutral-color-0)}.outlined{background-color:var(--element-color-3);border:1px solid var(--neutral-color-6)}:host{position:relative;z-index:auto}:host-context(cat-menu) .options-active{position:fixed!important;z-index:1001!important;isolation:isolate}\n"], dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: CatInput, selector: "[catInput]" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
672
734
  }
673
735
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SelectInput, decorators: [{
674
736
  type: Component,
@@ -680,10 +742,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
680
742
  provide: NG_VALUE_ACCESSOR,
681
743
  useExisting: forwardRef(() => SelectInput),
682
744
  multi: true
683
- }], template: "<div>\n <input catInput [value]=\"value\" [type]=\"type\" readonly id=\"select\" (mousedown)=\"active =! active\" [placeholder]=\"placeholder\">\n <section role=\"listbox\" [class]=\"selectInputClass\" class=\"options\" [ngClass]=\"active ? 'options-active' : 'options.unactive'\" [style.transform]=\"transform\">\n @if (active) {\n <div role=\"option\"*ngFor=\"let option of options\" (mousedown)=\"choseValue(option)\">\n {{ option }}\n </div>\n }\n </section>\n</div>", styles: ["div{position:relative;display:inline-block}.options-active{background-color:var(--neutral-color-0);z-index:1;border-radius:18px;padding:8px;box-sizing:border-box;width:100%;position:absolute;display:flex;flex-direction:column;transition:.25s}.options-unactive{display:none;transition:.15s}.options>div{background-color:transparent;min-height:1em;padding-top:.5em;padding-left:.5em;padding-right:.8em;color:var(--neutral-color-9);box-sizing:border-box}.options>div:hover{background-color:var(--neutral-color-1)}.scrolleable{height:7em;overflow-y:auto}.scrolleable::-webkit-scrollbar{width:8px;height:8px}.scrolleable::-webkit-scrollbar-track{background:transparent}.scrolleable::-webkit-scrollbar-thumb{background:#888;border-radius:4px}.scrolleable::-webkit-scrollbar-thumb:hover{background:#555}.surface{background-color:var(--element-color-4)}.elevated{background-color:var(--neutral-color-0)}.outlined{background-color:var(--element-color-3);border:1px solid var(--neutral-color-6)}\n"] }]
745
+ }], template: "<div>\n <input catInput #input [value]=\"value\" [type]=\"type\" readonly id=\"select\" (mousedown)=\"toggleActive()\" [placeholder]=\"placeholder\">\n <section #optionsContainer role=\"listbox\" [class]=\"selectInputClass\" class=\"options\" [ngClass]=\"active ? 'options-active' : 'options.unactive'\" [style.transform]=\"transform\">\n @if (active) {\n <div role=\"option\"*ngFor=\"let option of options\" (mousedown)=\"choseValue(option)\">\n {{ option }}\n </div>\n }\n </section>\n</div>", styles: ["div{position:relative;display:inline-block}.options-active{background-color:var(--neutral-color-0);z-index:1001;border-radius:18px;padding:8px;box-sizing:border-box;width:100%;position:absolute;display:flex;flex-direction:column;transition:.25s;isolation:isolate}.options-unactive{display:none;transition:.15s}.options>div{background-color:transparent;min-height:1em;padding-top:.5em;padding-left:.5em;padding-right:.8em;color:var(--neutral-color-9);box-sizing:border-box}.options>div:hover{background-color:var(--neutral-color-1)}.scrolleable{height:7em;overflow-y:auto}.scrolleable::-webkit-scrollbar{width:8px;height:8px}.scrolleable::-webkit-scrollbar-track{background:transparent}.scrolleable::-webkit-scrollbar-thumb{background:#888;border-radius:4px}.scrolleable::-webkit-scrollbar-thumb:hover{background:#555}.surface{background-color:var(--element-color-4)}.elevated{background-color:var(--neutral-color-0)}.outlined{background-color:var(--element-color-3);border:1px solid var(--neutral-color-6)}:host{position:relative;z-index:auto}:host-context(cat-menu) .options-active{position:fixed!important;z-index:1001!important;isolation:isolate}\n"] }]
684
746
  }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { inputEl: [{
685
747
  type: ViewChild,
686
748
  args: ['input']
749
+ }], optionsContainer: [{
750
+ type: ViewChild,
751
+ args: ['optionsContainer', { static: false }]
687
752
  }], transform: [{
688
753
  type: Input
689
754
  }], options: [{
@@ -1119,11 +1184,11 @@ class Menu {
1119
1184
  tryUpdate();
1120
1185
  }
1121
1186
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: Menu, deps: [], target: i0.ɵɵFactoryTarget.Component });
1122
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: Menu, isStandalone: true, selector: "cat-menu", inputs: { variant: "variant", customClass: "customClass" }, host: { properties: { "attr.data-menu-class": "this.dataCustomClass" } }, viewQueries: [{ propertyName: "menuContainer", first: true, predicate: ["menuContainer"], descendants: true }, { propertyName: "menuContent", first: true, predicate: ["menuContent"], descendants: true }, { propertyName: "dropdown", first: true, predicate: ["dropdown"], descendants: true }], ngImport: i0, template: "<div class=\"menu-wrapper\">\n <div class=\"menu\" #menuContainer>\n <div class=\"menu-content\" #menuContent>\n <ng-content></ng-content>\n </div>\n \n @if (showMoreButton()) {\n <button \n class=\"more-button\"\n (click)=\"toggleDropdown()\"\n [attr.aria-expanded]=\"isDropdownOpen()\"\n type=\"button\">\n <span>More</span>\n <svg \n width=\"16\" \n height=\"16\" \n viewBox=\"0 0 16 16\" \n fill=\"currentColor\"\n [style.transform]=\"isDropdownOpen() ? 'rotate(180deg)' : 'rotate(0deg)'\">\n <path d=\"M4 6l4 4 4-4z\"/>\n </svg>\n </button>\n }\n </div>\n \n @if (showMoreButton() && isDropdownOpen()) {\n <div class=\"dropdown\" #dropdown>\n <div class=\"dropdown-content\">\n <!-- Aqu\u00ED se mover\u00E1n los elementos overflow -->\n </div>\n </div>\n }\n</div>", styles: [".menu-wrapper{position:relative;width:100%;box-sizing:border-box}.menu{height:auto;background-color:rgb(var(--element-color-4) / .7);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);margin:.75rem;padding:1.75rem 2.5rem;border-radius:52px;border:1px var(--neutral-color-7) solid;display:flex;gap:1em;align-items:center;position:relative;width:100%;box-sizing:border-box}.menu-content{display:flex;gap:1em;align-items:center;flex:1;flex-wrap:wrap;overflow:hidden;min-width:0}.more-button{display:flex;align-items:center;gap:.5rem;padding:.5rem 1rem;border:none;border-radius:18px;background-color:var(--neutral-color-2);color:var(--neutral-color-9);cursor:pointer;font-size:1rem;font-weight:500;transition:all .2s;white-space:nowrap;flex-shrink:0;margin-left:auto}.more-button:hover{background-color:var(--neutral-color-3)}.more-button svg{transition:transform .2s}.dropdown{position:absolute;top:calc(100% - .75rem);right:.75rem;background-color:rgb(var(--element-color-4) / .95);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:24px;border:1px var(--neutral-color-7) solid;padding:1rem;min-width:200px;max-width:300px;box-shadow:0 8px 24px #00000026;z-index:1000;animation:dropdownSlide .2s ease-out}@keyframes dropdownSlide{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.dropdown-content{display:flex;flex-direction:column;gap:.5rem}.dropdown-content ::ng-deep cat-button,.dropdown-content ::ng-deep button{width:100%;justify-content:flex-start}@media (max-width: 640px){:host{max-width:100vw}.menu-wrapper{max-width:100vw}.menu{padding:1rem 1.5rem;margin:.5rem;max-width:calc(100vw - 1rem);width:calc(100% - 1rem)}.dropdown{right:.5rem;left:.5rem;max-width:none}}:host{display:block;width:100%;box-sizing:border-box}@media (min-width: 641px){:host{max-width:100%}.menu-wrapper{max-width:100%}.menu{max-width:calc(100% - 1.5rem)}}\n"] });
1187
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: Menu, isStandalone: true, selector: "cat-menu", inputs: { variant: "variant", customClass: "customClass" }, host: { properties: { "attr.data-menu-class": "this.dataCustomClass" } }, viewQueries: [{ propertyName: "menuContainer", first: true, predicate: ["menuContainer"], descendants: true }, { propertyName: "menuContent", first: true, predicate: ["menuContent"], descendants: true }, { propertyName: "dropdown", first: true, predicate: ["dropdown"], descendants: true }], ngImport: i0, template: "<div class=\"menu-wrapper\">\n <div class=\"menu\" #menuContainer>\n <div class=\"menu-content\" #menuContent>\n <ng-content></ng-content>\n </div>\n\n @if (showMoreButton()) {\n <button class=\"more-button\" (click)=\"toggleDropdown()\" [attr.aria-expanded]=\"isDropdownOpen()\" type=\"button\">\n <span>More</span>\n @if(isDropdownOpen()){\n <cat-icon size=\"16px\" name=\"chevron-arrow-up\"></cat-icon>\n } @else {\n <cat-icon size=\"16px\" name=\"chevron-arrow-down\"></cat-icon>\n }\n<!-- <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\"\n [style.transform]=\"isDropdownOpen() ? 'rotate(180deg)' : 'rotate(0deg)'\">\n <path d=\"M4 6l4 4 4-4z\" />\n </svg> -->\n </button>\n }\n </div>\n\n @if (showMoreButton() && isDropdownOpen()) {\n <div class=\"dropdown\" #dropdown>\n <div class=\"dropdown-content\">\n <!-- Aqu\u00ED se mover\u00E1n los elementos overflow -->\n </div>\n </div>\n }\n</div>", styles: [".menu-wrapper{position:relative;width:100%;box-sizing:border-box}.menu{height:auto;background-color:rgb(var(--element-color-4) / .7);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);margin:.75rem;padding:1.75rem 2.5rem;border-radius:52px;border:1px var(--neutral-color-7) solid;display:flex;gap:1em;align-items:center;position:relative;width:100%;box-sizing:border-box}.menu-content{display:flex;gap:1em;align-items:center;flex:1;flex-wrap:wrap;overflow:hidden;min-width:0}.more-button{display:flex;align-items:center;gap:.5rem;padding:.5rem 1rem;border:none;border-radius:18px;background-color:var(--neutral-color-9);color:var(--neutral-color-0);cursor:pointer;font-size:1rem;font-weight:500;transition:all .2s;white-space:nowrap;flex-shrink:0;margin-left:auto}.more-button:hover{background-color:var(--neutral-color-8)}.more-button svg{transition:transform .2s}.dropdown{position:absolute;top:calc(100% - .75rem);right:.75rem;background-color:rgb(var(--element-color-4) / .95);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:24px;border:1px var(--neutral-color-7) solid;padding:1rem;min-width:200px;max-width:300px;box-shadow:0 8px 24px #00000026;z-index:1000;animation:dropdownSlide .2s ease-out}@keyframes dropdownSlide{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.dropdown-content{display:flex;flex-direction:column;gap:.5rem}.dropdown-content ::ng-deep cat-button,.dropdown-content ::ng-deep button{width:100%;justify-content:flex-start}@media (max-width: 640px){:host{max-width:100vw}.menu-wrapper{max-width:100vw}.menu{padding:1rem 1.5rem;margin:.5rem;max-width:calc(100vw - 1rem);width:calc(100% - 1rem)}.dropdown{right:.5rem;left:.5rem;max-width:none}}:host{display:block;width:100%;box-sizing:border-box}@media (min-width: 641px){:host{max-width:100%}.menu-wrapper{max-width:100%}.menu{max-width:calc(100% - 1.5rem)}}\n"], dependencies: [{ kind: "component", type: Icon, selector: "cat-icon", inputs: ["size", "color", "name", "src"] }] });
1123
1188
  }
1124
1189
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: Menu, decorators: [{
1125
1190
  type: Component,
1126
- args: [{ selector: 'cat-menu', imports: [], template: "<div class=\"menu-wrapper\">\n <div class=\"menu\" #menuContainer>\n <div class=\"menu-content\" #menuContent>\n <ng-content></ng-content>\n </div>\n \n @if (showMoreButton()) {\n <button \n class=\"more-button\"\n (click)=\"toggleDropdown()\"\n [attr.aria-expanded]=\"isDropdownOpen()\"\n type=\"button\">\n <span>More</span>\n <svg \n width=\"16\" \n height=\"16\" \n viewBox=\"0 0 16 16\" \n fill=\"currentColor\"\n [style.transform]=\"isDropdownOpen() ? 'rotate(180deg)' : 'rotate(0deg)'\">\n <path d=\"M4 6l4 4 4-4z\"/>\n </svg>\n </button>\n }\n </div>\n \n @if (showMoreButton() && isDropdownOpen()) {\n <div class=\"dropdown\" #dropdown>\n <div class=\"dropdown-content\">\n <!-- Aqu\u00ED se mover\u00E1n los elementos overflow -->\n </div>\n </div>\n }\n</div>", styles: [".menu-wrapper{position:relative;width:100%;box-sizing:border-box}.menu{height:auto;background-color:rgb(var(--element-color-4) / .7);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);margin:.75rem;padding:1.75rem 2.5rem;border-radius:52px;border:1px var(--neutral-color-7) solid;display:flex;gap:1em;align-items:center;position:relative;width:100%;box-sizing:border-box}.menu-content{display:flex;gap:1em;align-items:center;flex:1;flex-wrap:wrap;overflow:hidden;min-width:0}.more-button{display:flex;align-items:center;gap:.5rem;padding:.5rem 1rem;border:none;border-radius:18px;background-color:var(--neutral-color-2);color:var(--neutral-color-9);cursor:pointer;font-size:1rem;font-weight:500;transition:all .2s;white-space:nowrap;flex-shrink:0;margin-left:auto}.more-button:hover{background-color:var(--neutral-color-3)}.more-button svg{transition:transform .2s}.dropdown{position:absolute;top:calc(100% - .75rem);right:.75rem;background-color:rgb(var(--element-color-4) / .95);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:24px;border:1px var(--neutral-color-7) solid;padding:1rem;min-width:200px;max-width:300px;box-shadow:0 8px 24px #00000026;z-index:1000;animation:dropdownSlide .2s ease-out}@keyframes dropdownSlide{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.dropdown-content{display:flex;flex-direction:column;gap:.5rem}.dropdown-content ::ng-deep cat-button,.dropdown-content ::ng-deep button{width:100%;justify-content:flex-start}@media (max-width: 640px){:host{max-width:100vw}.menu-wrapper{max-width:100vw}.menu{padding:1rem 1.5rem;margin:.5rem;max-width:calc(100vw - 1rem);width:calc(100% - 1rem)}.dropdown{right:.5rem;left:.5rem;max-width:none}}:host{display:block;width:100%;box-sizing:border-box}@media (min-width: 641px){:host{max-width:100%}.menu-wrapper{max-width:100%}.menu{max-width:calc(100% - 1.5rem)}}\n"] }]
1191
+ args: [{ selector: 'cat-menu', imports: [Icon], template: "<div class=\"menu-wrapper\">\n <div class=\"menu\" #menuContainer>\n <div class=\"menu-content\" #menuContent>\n <ng-content></ng-content>\n </div>\n\n @if (showMoreButton()) {\n <button class=\"more-button\" (click)=\"toggleDropdown()\" [attr.aria-expanded]=\"isDropdownOpen()\" type=\"button\">\n <span>More</span>\n @if(isDropdownOpen()){\n <cat-icon size=\"16px\" name=\"chevron-arrow-up\"></cat-icon>\n } @else {\n <cat-icon size=\"16px\" name=\"chevron-arrow-down\"></cat-icon>\n }\n<!-- <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\"\n [style.transform]=\"isDropdownOpen() ? 'rotate(180deg)' : 'rotate(0deg)'\">\n <path d=\"M4 6l4 4 4-4z\" />\n </svg> -->\n </button>\n }\n </div>\n\n @if (showMoreButton() && isDropdownOpen()) {\n <div class=\"dropdown\" #dropdown>\n <div class=\"dropdown-content\">\n <!-- Aqu\u00ED se mover\u00E1n los elementos overflow -->\n </div>\n </div>\n }\n</div>", styles: [".menu-wrapper{position:relative;width:100%;box-sizing:border-box}.menu{height:auto;background-color:rgb(var(--element-color-4) / .7);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);margin:.75rem;padding:1.75rem 2.5rem;border-radius:52px;border:1px var(--neutral-color-7) solid;display:flex;gap:1em;align-items:center;position:relative;width:100%;box-sizing:border-box}.menu-content{display:flex;gap:1em;align-items:center;flex:1;flex-wrap:wrap;overflow:hidden;min-width:0}.more-button{display:flex;align-items:center;gap:.5rem;padding:.5rem 1rem;border:none;border-radius:18px;background-color:var(--neutral-color-9);color:var(--neutral-color-0);cursor:pointer;font-size:1rem;font-weight:500;transition:all .2s;white-space:nowrap;flex-shrink:0;margin-left:auto}.more-button:hover{background-color:var(--neutral-color-8)}.more-button svg{transition:transform .2s}.dropdown{position:absolute;top:calc(100% - .75rem);right:.75rem;background-color:rgb(var(--element-color-4) / .95);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:24px;border:1px var(--neutral-color-7) solid;padding:1rem;min-width:200px;max-width:300px;box-shadow:0 8px 24px #00000026;z-index:1000;animation:dropdownSlide .2s ease-out}@keyframes dropdownSlide{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.dropdown-content{display:flex;flex-direction:column;gap:.5rem}.dropdown-content ::ng-deep cat-button,.dropdown-content ::ng-deep button{width:100%;justify-content:flex-start}@media (max-width: 640px){:host{max-width:100vw}.menu-wrapper{max-width:100vw}.menu{padding:1rem 1.5rem;margin:.5rem;max-width:calc(100vw - 1rem);width:calc(100% - 1rem)}.dropdown{right:.5rem;left:.5rem;max-width:none}}:host{display:block;width:100%;box-sizing:border-box}@media (min-width: 641px){:host{max-width:100%}.menu-wrapper{max-width:100%}.menu{max-width:calc(100% - 1.5rem)}}\n"] }]
1127
1192
  }], propDecorators: { variant: [{
1128
1193
  type: Input
1129
1194
  }], customClass: [{
@@ -1151,13 +1216,9 @@ class Theming {
1151
1216
  allPalettes$ = this.allPalettesSubject.asObservable();
1152
1217
  generatePalettes(color, dark) {
1153
1218
  this.activeThemeSubject.next(dark);
1154
- //Step 1: Calculate the Color
1155
- const colors = this.hexToRgb(color);
1156
- //Step 2: Get the Primary Palette (static, doesn't change with theme)
1157
- const primaryColors = this.palette(colors, false, 4); // Always use light theme
1158
- //Step 3: Calculate dynamic palettes (neutral and elements)
1219
+ const primaryColors = this.calculatePrimaryColor(color);
1159
1220
  const dynamicPalettes = this.calculateDynamicPalettes(dark);
1160
- //Step 4: Assign All Palettes to Local Variables
1221
+ //Assign All Palettes to Local Variables
1161
1222
  let allPalettes = [primaryColors];
1162
1223
  allPalettes = allPalettes.concat([dynamicPalettes.neutral]);
1163
1224
  allPalettes = allPalettes.concat([dynamicPalettes.elements]);
@@ -1166,6 +1227,20 @@ class Theming {
1166
1227
  this.applyTheme(allPalettes);
1167
1228
  return this.allPalettesSubject.value;
1168
1229
  }
1230
+ calculatePrimaryColor(color) {
1231
+ //Step 1: Calculate the Color
1232
+ const colors = this.hexToRgb(color);
1233
+ //Step 2: Get the Primary Palette (static, doesn't change with theme)
1234
+ const primaryColors = this.palette(colors, false, 4); // Always use light theme
1235
+ const allPalettes = [
1236
+ primaryColors, // Keep primary (static)
1237
+ this.allPalettesSubject.value[1],
1238
+ this.allPalettesSubject.value[2]
1239
+ ];
1240
+ this.allPalettesSubject.next(allPalettes);
1241
+ this.applyTheme(allPalettes);
1242
+ return primaryColors;
1243
+ }
1169
1244
  calculateDynamicPalettes(dark) {
1170
1245
  const theme = dark;
1171
1246
  const contrastTheme = !dark;
@@ -1 +1 @@
1
- {"version":3,"file":"catarina.mjs","sources":["../../../projects/catarina/src/lib/tokens/icon-provider.token.ts","../../../projects/catarina/src/lib/design-system/icon/icon.ts","../../../projects/catarina/src/lib/design-system/icon/icon.html","../../../projects/catarina/src/lib/design-system/button/button.ts","../../../projects/catarina/src/lib/design-system/button/button.html","../../../projects/catarina/src/lib/design-system/panels/card/card.ts","../../../projects/catarina/src/lib/design-system/panels/card/card.html","../../../projects/catarina/src/lib/design-system/panels/accordion/accordion.ts","../../../projects/catarina/src/lib/design-system/panels/accordion/accordion.html","../../../projects/catarina/src/lib/design-system/panels/accordion-group/accordion-group.ts","../../../projects/catarina/src/lib/design-system/panels/accordion-group/accordion-group.html","../../../projects/catarina/src/lib/design-system/form/cat-input/cat-input.ts","../../../projects/catarina/src/lib/design-system/form/color-input/color-input.ts","../../../projects/catarina/src/lib/design-system/form/color-input/color-input.html","../../../projects/catarina/src/lib/design-system/form/select-input/select-input.ts","../../../projects/catarina/src/lib/design-system/form/select-input/select-input.html","../../../projects/catarina/src/lib/design-system/form/date-input/date-input.ts","../../../projects/catarina/src/lib/design-system/form/date-input/date-input.html","../../../projects/catarina/src/lib/design-system/form/file-input/file-input.ts","../../../projects/catarina/src/lib/design-system/form/file-input/file-input.html","../../../projects/catarina/src/lib/design-system/form/password-input/password-input.ts","../../../projects/catarina/src/lib/design-system/form/password-input/password-input.html","../../../projects/catarina/src/lib/design-system/form/range-input/range-input.ts","../../../projects/catarina/src/lib/design-system/form/range-input/range-input.html","../../../projects/catarina/src/lib/design-system/form/text-area-input/text-area-input.ts","../../../projects/catarina/src/lib/design-system/form/text-area-input/text-area-input.html","../../../projects/catarina/src/lib/design-system/form/time-input/time-input.ts","../../../projects/catarina/src/lib/design-system/form/time-input/time-input.html","../../../projects/catarina/src/lib/directives/drag.ts","../../../projects/catarina/src/lib/design-system/overlays/dialog/dialog.ts","../../../projects/catarina/src/lib/design-system/overlays/dialog/dialog.html","../../../projects/catarina/src/lib/design-system/overlays/drawer/drawer.ts","../../../projects/catarina/src/lib/design-system/overlays/drawer/drawer.html","../../../projects/catarina/src/lib/design-system/overlays/menu/menu.ts","../../../projects/catarina/src/lib/design-system/overlays/menu/menu.html","../../../projects/catarina/src/lib/theming/theming.ts","../../../projects/catarina/src/public-api.ts","../../../projects/catarina/src/catarina.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport interface IconProvider {\n getPath(name: string): string;\n}\n\nexport const ICON_PROVIDER = new InjectionToken<IconProvider>('ICON_PROVIDER', {\n providedIn: 'root',\n factory: () => ({\n // Fallback por defecto si no se configura\n getPath: (name: string) => `icons/${name}.svg`\n })\n});\n","import { Component, Input, inject, signal, PLATFORM_ID, OnDestroy } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { isPlatformBrowser } from '@angular/common';\nimport { ICON_PROVIDER } from '../../tokens/icon-provider.token';\n\nconst ICON_NOT_FOUND_SVG = `\n<svg viewBox=\"0 0 24 24\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" \n aria-labelledby=\"placeholderIconTitle\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\">\n <title id=\"placeholderIconTitle\">Icon not found</title>\n <g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g>\n <g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g>\n <g id=\"SVGRepo_iconCarrier\"> \n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\"></rect>\n <path stroke-linecap=\"round\" d=\"M21 21L3 3 21 21zM21 3L3 21 21 3z\"></path> \n </g>\n</svg>\n`;\n\n@Component({\n selector: 'cat-icon',\n imports: [],\n templateUrl: './icon.html',\n styleUrl: './icon.css',\n})\nexport class Icon implements OnDestroy {\n private sanitizer = inject(DomSanitizer);\n private platformId = inject(PLATFORM_ID);\n private iconProvider = inject(ICON_PROVIDER);\n\n private abortController?: AbortController;\n \n svgContent = signal<SafeHtml>('');\n isLoading = signal<boolean>(false);\n\n @Input() size: string = '1em';\n @Input() color = 'currentColor';\n\n ngOnDestroy() {\n this.abortController?.abort();\n }\n\n // Usar nombre (con provider)\n @Input() set name(iconName: string) {\n if (!iconName) return;\n\n const path = this.iconProvider.getPath(iconName);\n\n // Cancelar petición anterior si existe\n this.abortController?.abort();\n\n // Si el path es el fallback por defecto (icons/), no intentes cargarlo\n if (!path || path.startsWith('icons/')) {\n this.showPlaceholder();\n return;\n }\n\n this.loadSvg(path);\n }\n\n // Usar path directo\n @Input() set src(path: string) {\n if (!path) return;\n \n // Cancelar petición anterior si existe\n this.abortController?.abort();\n this.loadSvg(path);\n }\n\n private loadSvg(path: string) {\n // En SSR, mostrar placeholder inmediatamente\n if (!isPlatformBrowser(this.platformId)) {\n this.showPlaceholder();\n return;\n }\n\n // Limpiar contenido y mostrar estado de carga\n this.isLoading.set(true);\n this.svgContent.set('');\n\n // Crear nuevo AbortController para esta petición\n this.abortController = new AbortController();\n\n fetch(path, { \n signal: this.abortController.signal,\n mode: 'cors',\n cache: 'default'\n })\n .then(response => {\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n return response.text();\n })\n .then(svg => {\n // VALIDACIÓN CRÍTICA: Verificar que sea un SVG\n if (!this.isValidSvg(svg)) {\n console.error(`Invalid SVG received from ${path}. Response is not valid SVG.`);\n this.showPlaceholder();\n return;\n }\n\n const processed = this.processSvg(svg);\n if (processed) {\n this.svgContent.set(this.sanitizer.bypassSecurityTrustHtml(processed));\n } else {\n this.showPlaceholder();\n }\n })\n .catch((error) => {\n // Ignorar errores de abort (son esperados)\n if (error.name === 'AbortError') {\n return;\n }\n \n console.error(`Error loading icon from ${path}:`, error.message);\n this.showPlaceholder();\n })\n .finally(() => {\n this.isLoading.set(false);\n });\n }\n\n private showPlaceholder(): void {\n this.isLoading.set(false);\n const processed = this.processSvg(ICON_NOT_FOUND_SVG);\n if (processed) {\n this.svgContent.set(this.sanitizer.bypassSecurityTrustHtml(processed));\n }\n }\n\n private isValidSvg(content: string): boolean {\n // Validaciones estrictas para asegurar que sea SVG\n const trimmed = content.trim();\n \n // 1. Debe comenzar con <svg (ignorando espacios y declaraciones XML)\n const svgRegex = /^\\s*(<\\?xml[^>]*>\\s*)?<\\s*svg\\b/i;\n if (!svgRegex.test(trimmed)) {\n return false;\n }\n\n // 2. Debe terminar con </svg>\n if (!trimmed.includes('</svg>')) {\n return false;\n }\n\n // 3. No debe contener <html>, <head>, <body> (indicaría HTML completo)\n const htmlTags = ['<html', '<head', '<body', '<!DOCTYPE html'];\n for (const tag of htmlTags) {\n if (trimmed.toLowerCase().includes(tag.toLowerCase())) {\n return false;\n }\n }\n\n // 4. Tamaño razonable para un icono (máximo 100KB)\n if (content.length > 100 * 1024) {\n console.warn('SVG file is too large for an icon:', content.length, 'bytes');\n return false;\n }\n\n return true;\n }\n\n private processSvg(svg: string): string | null {\n // Validar antes de procesar\n if (!this.isValidSvg(svg)) {\n return null;\n }\n\n // En SSR, usar procesamiento simple con regex (no hay DOMParser)\n if (!isPlatformBrowser(this.platformId)) {\n return this.processSvgWithRegex(svg);\n }\n\n // En Browser, usar DOMParser para procesamiento robusto\n try {\n const parser = new DOMParser();\n const doc = parser.parseFromString(svg, 'image/svg+xml');\n \n // Verificar que no haya errores de parseo\n const parserError = doc.querySelector('parsererror');\n if (parserError) {\n console.error('SVG parsing error:', parserError.textContent);\n return null;\n }\n\n const svgElement = doc.querySelector('svg');\n if (!svgElement) {\n return null;\n }\n\n // Verificar que sea realmente un elemento SVG\n if (svgElement.tagName.toLowerCase() !== 'svg') {\n return null;\n }\n\n // Modificar solo el elemento <svg> raíz\n svgElement.removeAttribute('width');\n svgElement.removeAttribute('height');\n\n // Cambiar fill y stroke solo si no son \"none\"\n const currentFill = svgElement.getAttribute('fill');\n if (currentFill && currentFill !== 'none') {\n svgElement.setAttribute('fill', 'currentColor');\n }\n\n const currentStroke = svgElement.getAttribute('stroke');\n if (currentStroke && currentStroke !== 'none') {\n svgElement.setAttribute('stroke', 'currentColor');\n }\n\n // Asegurar viewBox (requerido para escalado)\n if (!svgElement.hasAttribute('viewBox')) {\n svgElement.setAttribute('viewBox', '0 0 24 24');\n }\n\n // Serializar de vuelta a string\n return new XMLSerializer().serializeToString(svgElement);\n } catch (error) {\n console.error('Error processing SVG:', error);\n return null;\n }\n }\n\n private processSvgWithRegex(svg: string): string {\n // Procesamiento simple con regex para SSR (donde no hay DOMParser)\n let processed = svg;\n\n // Remover width y height solo del tag <svg> de apertura\n processed = processed.replace(/(<svg[^>]*?)\\s+width=\"[^\"]*\"/i, '$1');\n processed = processed.replace(/(<svg[^>]*?)\\s+height=\"[^\"]*\"/i, '$1');\n\n // Cambiar fill a currentColor si existe y no es \"none\"\n processed = processed.replace(\n /(<svg[^>]*?\\s+fill=\")(?!none)([^\"]*)(\")/i, \n '$1currentColor$3'\n );\n\n // Cambiar stroke a currentColor si existe y no es \"none\"\n processed = processed.replace(\n /(<svg[^>]*?\\s+stroke=\")(?!none)([^\"]*)(\")/i, \n '$1currentColor$3'\n );\n\n // Asegurar viewBox si no existe\n if (!/viewBox=/i.test(processed)) {\n processed = processed.replace(\n /(<svg[^>]*?)>/i, \n '$1 viewBox=\"0 0 24 24\">'\n );\n }\n\n return processed;\n }\n}","<span [innerHTML]=\"svgContent()\" [style.width]=\"size\" [style.height]=\"size\" [style.display]=\"'inline-flex'\"\n [style.color]=\"color\" class=\"cat-icon\">\n</span>","import { Component, Input, Output, EventEmitter, HostBinding } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Icon } from '../icon/icon';\n\n@Component({\n selector: 'cat-button',\n imports: [Icon],\n templateUrl: './button.html',\n styleUrl: './button.scss',\n})\nexport class Button {\n @Input() variant: 'primary' | 'secondary' | 'contrast' | 'outline' | 'ghost' = 'primary';\n @Input() size: 'sm' | 'md' | 'lg' = 'md';\n @Input() disabled = false;\n @Input() type: 'button' | 'submit' | 'reset' = 'button';\n @Input() iconLeft?: string;\n @Input() iconCenter?: string;\n @Input() iconRight?: string;\n @Input() customClass = '';\n\n @Output() clicked = new EventEmitter<MouseEvent>();\n\n get buttonClasses(): string {\n return `${this.variant} ${this.size} ${this.customClass}`;\n }\n\n get iconSize(): string {\n const sizes = { sm: '16px', md: '20px', lg: '24px' };\n return sizes[this.size];\n }\n\n @HostBinding('attr.data-button-class') get dataCustomClass() {\n return this.customClass;\n }\n\n handleClick(event: MouseEvent): void {\n if (!this.disabled) {\n this.clicked.emit(event);\n }\n }\n}\n","<button [class]=\"buttonClasses\" [disabled]=\"disabled\" [type]=\"type\" (click)=\"handleClick($event)\">\n\n @if (iconLeft) {\n <cat-icon [name]=\"iconLeft\" [size]=\"iconSize\" class=\"icon-left\">\n </cat-icon>\n }\n\n <span class=\"button-content\">\n @if (iconCenter) {\n <cat-icon [name]=\"iconCenter\" [size]=\"iconSize\" class=\"icon-left\">\n </cat-icon>\n }\n <ng-content></ng-content>\n </span>\n\n @if (iconRight) {\n <cat-icon [name]=\"iconRight\" [size]=\"iconSize\" class=\"icon-right\">\n </cat-icon>\n }\n</button>","import { Component, Input, HostBinding } from '@angular/core';\n\n@Component({\n selector: 'cat-card',\n templateUrl: './card.html',\n styleUrls: ['./card.css']\n})\nexport class Card {\n @Input() variant: 'surface' | 'outlined' | 'elevated' = 'surface';\n @Input() size: 'sm' | 'md' | 'lg' = 'md';\n @Input() width: string = 'auto';\n @Input() customClass = '';\n\n // Exponer las clases como atributos de datos\n @HostBinding('attr.data-card-variant') get dataVariant() {\n return this.variant;\n }\n \n @HostBinding('attr.data-card-size') get dataSize() {\n return this.size;\n }\n \n @HostBinding('attr.data-card-class') get dataCustomClass() {\n return this.customClass;\n }\n\n /*// También exponer como CSS Custom Properties\n @HostBinding('style.--card-variant') get cssVariant() {\n return this.variant;\n }\n \n @HostBinding('style.--card-custom-class') get cssCustomClass() {\n return this.customClass;\n }\n*/\n get cardClasses(): string {\n return `cat-card ${this.variant} ${this.size} ${this.customClass}`;\n }\n}","<section [class]=\"cardClasses\" [attr.data-class]=\"customClass\" [style]=\"`width: ${width};`\">\n <ng-content></ng-content>\n</section>","import { Component, ElementRef, EventEmitter, HostBinding, Input, Output, ViewChild } from '@angular/core';\nimport { Button as CButton } from '../../button/button';\nimport { NgClass, NgIf } from '@angular/common';\n\n@Component({\n selector: 'cat-accordion',\n imports: [CButton, NgClass, NgIf],\n templateUrl: './accordion.html',\n styleUrl: './accordion.css',\n})\nexport class Accordion {\n @Input() accordionId?: string;\n @Input() status: boolean = false;//false = unactive\n @Input() label: string = 'Accordion Name';\n\n @Input() disabled = false;\n @Input() customClass = '';\n @Input() width: string = 'auto';\n\n //Button Properties\n @Input() buttonVariant: 'primary' | 'secondary' | 'contrast' | 'outline' | 'ghost' = 'secondary';\n @Input() buttonSize: 'sm' | 'md' | 'lg' = 'md';\n @Input() iconLeft: boolean = false;\n @Input() iconCenter: boolean = false;\n @Input() iconRight: boolean = true;\n\n //Panel Properties\n @Input() scrolleable: boolean = false;\n @Input() variant: 'surface' | 'outlined' | 'elevated' = 'surface';\n\n @Output() updateAccordionGroupStatusOutput = new EventEmitter<string>();\n\n @ViewChild('buttonRef', { static: false }) buttonRef!: ElementRef;\n buttonWidth: number = 0;\n\n ngAfterViewInit() {\n // Obtener el ancho del botón después de renderizar\n setTimeout(() => {\n if (this.buttonRef) {\n const button = this.buttonRef.nativeElement.querySelector('button');\n if (button) {\n this.buttonWidth = button.offsetWidth;\n }\n }\n });\n }\n\n // Actualizar cuando cambie el label o otros inputs que afecten tamaño\n ngOnChanges() {\n if (this.buttonRef) {\n const button = this.buttonRef.nativeElement.querySelector('button');\n if (button) {\n this.buttonWidth = button.offsetWidth;\n }\n }\n }\n updateAccordionGroupStatus() {\n this.status = !this.status;\n this.updateAccordionGroupStatusOutput.emit(this.accordionId!);\n }\n\n forceStatus(newStatus: boolean): void {\n this.status = newStatus;\n };\n\n @HostBinding('attr.data-accordion-class') get dataCustomClass() {\n return this.customClass;\n }\n\n get panelClasses(): string {\n return `${this.variant} ${this.customClass} ${this.scrolleable ? 'scrolleable' : undefined}`;\n }\n}\n","<section class=\"accordion\" [style]=\"`width: ${width};`\">\n <div>\n <cat-button [iconLeft]=\"iconLeft ? (status ? 'minus' : 'plus') : undefined\"\n [iconCenter]=\"iconCenter ? (status ? 'minus' : 'plus') : undefined\"\n [iconRight]=\"iconRight && status ? 'minus' : 'plus'\" (clicked)=\"updateAccordionGroupStatus()\"\n [variant]=\"buttonVariant\" [size]=\"buttonSize\" customClass=\"accordion-button\" [disabled]=\"disabled\">\n {{label}}\n </cat-button>\n </div>\n <div [class]=\"panelClasses\" [ngClass]=\"status ? 'accordion-panel-active': 'accordion-panel-unactive'\">\n <ng-content *ngIf=\"status\"></ng-content>\n </div>\n</section>","import { Component, ContentChildren, HostBinding, Input, QueryList } from '@angular/core';\nimport { Accordion as CAccordion } from '../accordion/accordion';\nimport { Subscription } from 'rxjs';\n\n@Component({\n selector: 'cat-accordion-group',\n imports: [],\n templateUrl: './accordion-group.html',\n styleUrl: './accordion-group.css',\n})\nexport class AccordionGroup {\n @Input() singleExpand: boolean = true;\n @Input() customClass: string = '';\n\n @ContentChildren(CAccordion) accordions!: QueryList<CAccordion>;\n\n accordionActiveId?: String;\n\n sub?: Subscription | null;\n\n ngAfterContentInit(): void {\n if (this.singleExpand) {\n this.accordions.forEach(acc => {\n this.sub = acc.updateAccordionGroupStatusOutput.subscribe(id => {\n this.handleOpen(id);\n });\n });\n }\n }\n\n handleOpen(id: string) {\n this.accordions.forEach(acc => acc.forceStatus(false));\n const target = this.accordions.find(acc => acc.accordionId === id);\n if (this.accordionActiveId === id) {\n target?.forceStatus(false);\n this.accordionActiveId = undefined;\n } else {\n target?.forceStatus(true);\n this.accordionActiveId = id;\n }\n }\n\n @HostBinding('attr.data-accordion-group-class') get dataCustomClass() {\n return this.customClass;\n }\n\n get accordionGroupClasses() {\n return `${this.customClass}`;\n }\n}\n","<style>\n section {\n width: 100%;\n }\n</style>\n<section [class]=\"accordionGroupClasses\">\n <ng-content></ng-content>\n</section>","import { Directive, ElementRef, Renderer2, OnInit, inject, Optional, Self, PLATFORM_ID } from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { isPlatformBrowser } from '@angular/common';\n\n@Directive({\n selector: '[catInput]',\n standalone: true,\n host: {\n '[class.cat-input]': 'true',\n '[class.md]': 'true',\n '[class.invalid]': 'isInvalid'\n }\n})\nexport class CatInput implements OnInit {\n private el = inject(ElementRef);\n private platformId = inject(PLATFORM_ID);\n @Optional() @Self() public control: NgControl | null = inject(NgControl, { optional: true, self: true });\n\n private static stylesInjected = false;\n\n ngOnInit(): void {\n if (this.el.nativeElement.tagName.toLowerCase() !== 'input') {\n console.warn('catInput directive can only be used on <input> elements');\n return;\n }\n\n // Inyectar estilos solo una vez\n if (!CatInput.stylesInjected && isPlatformBrowser(this.platformId)) {\n this.injectStyles();\n CatInput.stylesInjected = true;\n }\n }\n\n private injectStyles(): void {\n const style = document.createElement('style');\n style.textContent = `\n .cat-input {\n border: 1px solid var(--neutral-color-3);\n background-color: var(--neutral-color-0);\n color: var(--neutral-color-9);\n border-radius: 18px;\n outline: none;\n transition: all 0.2s;\n }\n\n .cat-input:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .cat-input::placeholder {\n color: var(--neutral-color-6);\n transition: font-size 0.2s;\n }\n\n .cat-input:focus::placeholder {\n font-size: 0.7em;\n }\n\n .cat-input:focus {\n border: 1px solid var(--neutral-color-9);\n }\n\n .cat-input.invalid,\n .cat-input.ng-invalid.ng-touched {\n border: 1px solid red;\n }\n\n .cat-input.ng-valid.ng-touched {\n border: 1px solid green;\n }\n\n .cat-input.md {\n padding: 0.5rem 1rem;\n font-size: 1rem;\n }\n\n .cat-input.sm {\n padding: 0.25rem 0.75rem;\n font-size: 0.875rem;\n }\n\n .cat-input.lg {\n padding: 0.75rem 1.5rem;\n font-size: 1.125rem;\n }\n `;\n document.head.appendChild(style);\n }\n\n get isInvalid(): boolean {\n return !!(this.control && this.control.invalid && this.control.touched);\n }\n}","import { Component, forwardRef, Input } from '@angular/core';\nimport { Icon as CIcon } from '../../icon/icon';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'cat-color-input',\n imports: [CIcon],\n providers: [{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ColorInput),\n multi: true\n }],\n templateUrl: './color-input.html',\n styleUrl: './color-input.css',\n})\nexport class ColorInput implements ControlValueAccessor {\n value: string = '#000000';\n @Input() icon?: boolean = false;\n @Input() size: string ='2em';\n\n private onChange = (value: any) => { };\n onTouched = () => { };\n\n onInput(event: Event) {\n const newValue = (event.target as HTMLInputElement).value;\n this.value = newValue;\n this.onChange(newValue); // informa al padre \n }\n\n // Métodos requeridos por ControlValueAccessor\n writeValue(value: any): void {\n this.value = value || '#000000';\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n\n this.onTouched = fn;\n }\n}\n","<style>\n div {\n position: relative;\n aspect-ratio: 1/1;\n }\n\n div:hover {\n cursor: grab;\n }\n input {\n width: 100%;\n aspect-ratio: 1/1;\n top: 0;\n left: 0;\n }\n cat-icon {\n position: absolute;\n top: 0;\n left: 0;\n pointer-events: none;\n }\n</style>\n<!-- input-color.html -->\n<div [style]=\"`width: ${size};`\">\n <input type=\"color\" [style]=\"icon ? 'opacity: 0;' : 'opacity: 100%;'\" [value]=\"value\" (input)=\"onInput($event)\" (blur)=\"onTouched()\">\n @if (icon) {\n <cat-icon [style]=\"`height: ${size};`\" size=\"100%\" name=\"palette\"></cat-icon> \n }\n</div>","import { NgFor, NgClass } from '@angular/common';\nimport { Component, ElementRef, EventEmitter, forwardRef, HostBinding, HostListener, Input, Output, ViewChild } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { CatInput } from \"../cat-input/cat-input\";\n\n@Component({\n selector: 'cat-select-input',\n imports: [\n NgFor,\n CatInput,\n NgClass\n ],\n providers: [{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SelectInput),\n multi: true\n }],\n templateUrl: './select-input.html',\n styleUrl: './select-input.css',\n})\nexport class SelectInput implements ControlValueAccessor {\n @ViewChild('input') inputEl!: ElementRef<HTMLElement>;\n\n @Input() transform?: string; //This option basicly allow to the consumer put the options at the side where he wants\n @Input() options?: string[];\n @Input() placeholder: string = '';\n @Input() type: 'string' | 'number' = 'string';\n\n value: string | number = '';\n active = false;\n\n @Input() variant: 'surface' | 'elevated' | 'outlined' = 'surface';\n @Input() scrolleable: boolean = false;\n @Input() customClass: string = '';\n\n //@Output() selected = new EventEmitter<string>();\n\n //Accesibility\n @HostListener('document:click', ['$event'])\n outerClick(event: Event) {\n if (!this.el.nativeElement.contains(event.target)) {\n this.active = false;\n }\n };\n\n constructor(\n private el: ElementRef,\n ) { }\n\n onChange = (value: any) => { };\n onTouched = () => { };\n\n //Here starts the events from ControlValueAccesor\n writeValue(value: any): void {\n this.value = value;\n };\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n //Here ends The events from ControlValueAccesor\n\n choseValue(option: any) {\n this.value = option;\n this.onChange(option);\n this.onTouched();\n this.active = false;\n //this.selected.emit(option);\n };\n\n @HostBinding('attr.data-select-input-class') get dataCustomClass() {\n return this.customClass;\n }\n\n get selectInputClass(): string {\n return `${this.variant} ${this.scrolleable ? 'scrolleable' : ''}`;\n }\n}\n","<div>\n <input catInput [value]=\"value\" [type]=\"type\" readonly id=\"select\" (mousedown)=\"active =! active\" [placeholder]=\"placeholder\">\n <section role=\"listbox\" [class]=\"selectInputClass\" class=\"options\" [ngClass]=\"active ? 'options-active' : 'options.unactive'\" [style.transform]=\"transform\">\n @if (active) {\n <div role=\"option\"*ngFor=\"let option of options\" (mousedown)=\"choseValue(option)\">\n {{ option }}\n </div>\n }\n </section>\n</div>","import { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-date-input',\n imports: [],\n templateUrl: './date-input.html',\n styleUrl: './date-input.css',\n})\nexport class DateInput {\n\n}\n","<p>date-input works!</p>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-file-input',\n imports: [],\n templateUrl: './file-input.html',\n styleUrl: './file-input.css',\n})\nexport class FileInput {\n\n}\n","<p>file-input works!</p>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-password-input',\n imports: [],\n templateUrl: './password-input.html',\n styleUrl: './password-input.css',\n})\nexport class PasswordInput {\n\n}\n","<p>password-input works!</p>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-range-input',\n imports: [],\n templateUrl: './range-input.html',\n styleUrl: './range-input.css',\n})\nexport class RangeInput {\n\n}\n","<p>range-input works!</p>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-text-area-input',\n imports: [],\n templateUrl: './text-area-input.html',\n styleUrl: './text-area-input.css',\n})\nexport class TextAreaInput {\n\n}\n","<p>text-area-input works!</p>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-time-input',\n imports: [],\n templateUrl: './time-input.html',\n styleUrl: './time-input.css',\n})\nexport class TimeInput {\n\n}\n","<p>time-input works!</p>\n","import { AfterViewInit, Directive, DOCUMENT, ElementRef, Inject, Renderer2 } from '@angular/core';\n\n@Directive({\n selector: '[CDrag]'\n})\nexport class Drag implements AfterViewInit {\n private offsetX = 0;\n private offsetY = 0;\n private dragging = false;\n\n constructor(\n private el: ElementRef,\n private renderer: Renderer2,\n @Inject(DOCUMENT) private document: Document\n ) { }\n\n ngAfterViewInit() {\n const el = this.el.nativeElement as HTMLElement;\n\n // Si el elemento no tiene position seteado, le ponemos absolute\n if (typeof window !== 'undefined') {\n const computedStyle = window.getComputedStyle(el);\n if (computedStyle.position === 'static') {\n this.renderer.setStyle(el, 'position', 'absolute');\n }\n }\n\n\n el.addEventListener('mousedown', (e: MouseEvent) => {\n this.dragging = true;\n this.offsetX = e.clientX - el.offsetLeft;\n this.offsetY = e.clientY - el.offsetTop;\n el.style.cursor = 'grabbing';\n });\n\n this.document.addEventListener('mousemove', (e: MouseEvent) => {\n if (this.dragging) {\n el.style.left = e.clientX - this.offsetX + 'px';\n el.style.top = e.clientY - this.offsetY + 'px';\n }\n });\n\n this.document.addEventListener('mouseup', () => {\n this.dragging = false;\n el.style.cursor = 'grab';\n });\n }\n\n}\n","import { Component, EventEmitter, HostBinding, HostListener, Input, Output } from '@angular/core';\nimport { Drag } from '../../../directives/drag';\n\n@Component({\n selector: 'cat-dialog',\n imports: [Drag],\n templateUrl: './dialog.html',\n styleUrl: './dialog.css',\n})\nexport class Dialog {\n @Output() closs = new EventEmitter<boolean>();\n @HostListener('window:keydown.escape', ['$event'])\n handleKeyDown(event: Event) {\n this.clossOverlay();\n }\n @Input() variant: 'surface' | 'outlined' | 'elevated' = 'surface';\n @Input() size: 'sm' | 'md' | 'lg' = 'md';\n @Input() customClass = '';\n\n // Exponer las clases como atributos de datos\n @HostBinding('attr.data-card-variant') get dataVariant() {\n return this.variant;\n }\n\n @HostBinding('attr.data-card-size') get dataSize() {\n return this.size;\n }\n\n @HostBinding('attr.data-card-class') get dataCustomClass() {\n return this.customClass;\n }\n\n get dialogClasses(): string {\n return `${this.variant} ${this.size} ${this.customClass}`;\n }\n\n clossOverlay() {\n this.closs.emit(false);\n };\n}\n","<div class=\"dialog-shadow\" (click)=\"clossOverlay()\">\n</div>\n<section CDrag [class]=\"dialogClasses\">\n <ng-content></ng-content>\n</section>","import { Component, EventEmitter, HostBinding, HostListener, Input, Output } from '@angular/core';\nimport { Button } from '../../button/button';\n\n@Component({\n selector: 'cat-drawer',\n imports: [Button],\n templateUrl: './drawer.html',\n styleUrl: './drawer.css',\n})\nexport class Drawer {\n @Output() closs = new EventEmitter<boolean>();\n @HostListener('window:keydown.escape', ['$event'])\n handleKeyDown(event: Event) {\n this.clossOverlay();\n }\n\n @Input() side: 'left' | 'right' | 'top' | 'bottom' = 'left';\n @Input() variant: 'surface' | 'elevated' | 'outlined' = 'surface';\n @Input() customClass: string = '';\n \n @HostBinding('attr.data-drawer-class') get dataCustomClass() {\n return this.customClass;\n }\n\n get drawerClasses(): string {\n return `${this.variant} ${this.side} ${this.customClass}`;\n }\n\n clossOverlay() {\n this.closs.emit(false);\n };\n}\n","<style>\n .dialog-shadow {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: rgba(0, 0, 0, 0.7);\n z-index: 999;\n }\n\n section {\n position: fixed;\n\n overflow: auto;\n\n box-sizing: border-box;\n padding: 0.25rem 0.75rem;\n z-index: 1000;\n transition: 250ms;\n\n user-select: none;\n }\n\n /* Variants */\n .surface {\n background-color: var(--element-color-4);\n }\n\n .elevated {\n background-color: var(--neutral-color-0);\n }\n\n .outlined {\n background-color: var(--element-color-3);\n border: 2px solid var(--neutral-color-9);\n }\n\n .close-button {\n position: absolute;\n }\n\n .left {\n width: 30em;\n height: 100vh;\n width: 30em;\n height: 100vh;\n left: 0;\n top: 0;\n\n & .close-button {\n right: .25rem;\n }\n }\n\n .right {\n width: 30em;\n height: 100vh;\n right: 0;\n top: 0;\n\n & .close-button {\n left: .25rem;\n }\n }\n\n .top {\n width: 100%;\n height: 20em;\n top: 0;\n left: 0;\n\n & .close-button {\n right: .25rem;\n }\n }\n\n .bottom {\n width: 100%;\n height: 20em;\n bottom: 0;\n left: 0;\n\n & .close-button {\n right: .25rem;\n }\n }\n\n @media screen and (orientation: portrait) {\n .top, .bottom {\n height: 70%;\n }\n }\n</style>\n<section [class]=\"drawerClasses\">\n <cat-button iconCenter=\"x-mark\" variant=\"contrast\" class=\"close-button\" (clicked)=\"clossOverlay()\"></cat-button>\n <ng-content></ng-content>\n</section>\n<div class=\"dialog-shadow\" (click)=\"clossOverlay()\">\n</div>","import { isPlatformBrowser } from '@angular/common';\nimport { AfterViewInit, Component, ElementRef, HostBinding, inject, Input, OnDestroy, PLATFORM_ID, signal, ViewChild } from '@angular/core';\n\n@Component({\n selector: 'cat-menu',\n imports: [],\n templateUrl: './menu.html',\n styleUrl: './menu.css',\n})\nexport class Menu implements AfterViewInit, OnDestroy {\n @Input() variant: 'surface' | 'elevated' | 'outlined' = 'surface';\n @Input() customClass: string = '';\n\n @HostBinding('attr.data-menu-class') get dataCustomClass() {\n return this.customClass;\n }\n\n get menuClasses(): string {\n return `${this.variant} ${this.customClass}`;\n }\n\n @ViewChild('menuContainer', { static: false }) menuContainer!: ElementRef<HTMLDivElement>;\n @ViewChild('menuContent', { static: false }) menuContent!: ElementRef<HTMLDivElement>;\n @ViewChild('dropdown', { static: false }) dropdown?: ElementRef<HTMLDivElement>;\n\n private platformId = inject(PLATFORM_ID);\n private resizeObserver?: ResizeObserver;\n private mutationObserver?: MutationObserver;\n\n showMoreButton = signal(false);\n isDropdownOpen = signal(false);\n overflowItems = signal<HTMLElement[]>([]);\n\n ngAfterViewInit() {\n if (!isPlatformBrowser(this.platformId)) return;\n\n setTimeout(() => {\n this.checkOverflow();\n this.setupObservers();\n }, 0);\n }\n\n ngOnDestroy() {\n this.resizeObserver?.disconnect();\n this.mutationObserver?.disconnect();\n if (isPlatformBrowser(this.platformId)) {\n document.removeEventListener('click', this.handleOutsideClick);\n }\n }\n\n private setupObservers() {\n if (!isPlatformBrowser(this.platformId)) return;\n\n this.resizeObserver = new ResizeObserver(() => {\n this.checkOverflow();\n });\n this.resizeObserver.observe(this.menuContainer.nativeElement);\n\n this.mutationObserver = new MutationObserver(() => {\n this.checkOverflow();\n });\n this.mutationObserver.observe(this.menuContent.nativeElement, {\n childList: true,\n subtree: true\n });\n\n document.addEventListener('click', this.handleOutsideClick);\n }\n\n private handleOutsideClick = (event: MouseEvent) => {\n if (!this.isDropdownOpen()) return;\n\n const target = event.target as HTMLElement;\n const clickedInside = this.menuContainer.nativeElement.contains(target) ||\n this.dropdown?.nativeElement.contains(target);\n\n if (!clickedInside) {\n this.isDropdownOpen.set(false);\n }\n };\n\nprivate checkOverflow() {\n // Si el dropdown está abierto, no recalcular (los elementos están en el dropdown)\n // Solo actualizar el contenido del dropdown si es necesario\n if (this.isDropdownOpen()) {\n const overflowItems = this.overflowItems();\n if (overflowItems.length > 0) {\n this.showMoreButton.set(true);\n setTimeout(() => {\n this.waitForDropdownAndUpdate();\n }, 0);\n }\n return;\n }\n\n const container = this.menuContent.nativeElement;\n \n // Restaurar todos los elementos que puedan estar en el dropdown\n this.restoreOverflowItems();\n \n const items = Array.from(container.children) as HTMLElement[];\n\n if (items.length === 0) {\n this.showMoreButton.set(false);\n this.overflowItems.set([]);\n return;\n }\n\n const menuItems = items.filter(item =>\n !item.classList.contains('more-button')\n );\n\n if (menuItems.length === 0) {\n this.showMoreButton.set(false);\n this.overflowItems.set([]);\n return;\n }\n\n // Restaurar todos los elementos a su estado visible antes de calcular\n menuItems.forEach(item => {\n item.style.display = '';\n });\n\n // Forzar un reflow para obtener posiciones correctas\n container.offsetHeight;\n\n // Detectar elementos en la primera fila vs elementos en filas adicionales\n const firstItemTop = menuItems[0]?.getBoundingClientRect().top;\n const firstRowItems: HTMLElement[] = [];\n const overflowItems: HTMLElement[] = [];\n\n menuItems.forEach(item => {\n const itemTop = item.getBoundingClientRect().top;\n // Tolerancia de 1px para manejar diferencias de redondeo\n if (Math.abs(itemTop - firstItemTop) <= 1) {\n firstRowItems.push(item);\n } else {\n overflowItems.push(item);\n }\n });\n\n // Si hay elementos en overflow, mostrar el botón More y ocultar los elementos overflow\n const needsMoreButton = overflowItems.length > 0;\n this.showMoreButton.set(needsMoreButton);\n\n // Ocultar elementos que están en la segunda fila o más\n overflowItems.forEach(item => {\n item.style.display = 'none';\n });\n\n // Mantener visibles solo los elementos de la primera fila\n firstRowItems.forEach(item => {\n item.style.display = '';\n });\n\n if (needsMoreButton) {\n this.overflowItems.set(overflowItems);\n } else {\n this.overflowItems.set([]);\n }\n}\n\n private updateDropdownContent() {\n // Buscar el dropdown directamente en el DOM en lugar de usar ViewChild\n const menuWrapper = this.menuContainer.nativeElement.closest('.menu-wrapper');\n if (!menuWrapper) {\n return;\n }\n\n const dropdown = menuWrapper.querySelector('.dropdown') as HTMLElement;\n if (!dropdown) {\n return;\n }\n\n const dropdownContent = dropdown.querySelector('.dropdown-content');\n if (!dropdownContent) {\n return;\n }\n\n // Limpiar contenido previo - restaurar elementos que puedan estar ahí\n this.restoreOverflowItems();\n\n const overflowItems = this.overflowItems();\n \n if (overflowItems.length === 0) {\n return;\n }\n\n const menuContent = this.menuContent.nativeElement;\n\n overflowItems.forEach(item => {\n // Mover el elemento real al dropdown (preserva todos los event listeners de Angular)\n // El elemento ya está oculto (display: none), así que lo hacemos visible y lo movemos\n item.style.display = '';\n item.style.visibility = 'visible';\n item.style.opacity = '1';\n \n // Añadir un listener para cerrar el dropdown cuando se haga click\n const closeHandler = () => {\n this.isDropdownOpen.set(false);\n };\n \n // Buscar el botón dentro del elemento y añadir el listener\n const button = item.querySelector('button, cat-button, [role=\"button\"]') as HTMLElement;\n if (button) {\n button.addEventListener('click', closeHandler, { once: true });\n } else {\n item.addEventListener('click', closeHandler, { once: true });\n }\n \n // Mover el elemento al dropdown\n dropdownContent.appendChild(item);\n });\n }\n\n private restoreOverflowItems() {\n const overflowItems = this.overflowItems();\n const menuContent = this.menuContent.nativeElement;\n \n overflowItems.forEach(item => {\n // Si el elemento está en el dropdown, moverlo de vuelta al menu-content\n const dropdownContent = item.closest('.dropdown-content');\n if (dropdownContent && item.parentElement === dropdownContent) {\n // Ocultar el elemento y moverlo de vuelta al menu-content\n item.style.display = 'none';\n menuContent.appendChild(item);\n }\n });\n }\n\n toggleDropdown() {\n const newState = !this.isDropdownOpen();\n \n if (!newState) {\n // Si se está cerrando, restaurar los elementos a su posición original\n this.restoreOverflowItems();\n }\n \n this.isDropdownOpen.set(newState);\n\n if (newState) {\n // Recalcular overflow antes de abrir el dropdown\n setTimeout(() => {\n this.checkOverflow();\n // Esperar a que el dropdown esté en el DOM antes de actualizar\n this.waitForDropdownAndUpdate();\n }, 0);\n }\n }\n\n private waitForDropdownAndUpdate() {\n // Intentar actualizar el dropdown, reintentando si no está disponible\n const maxAttempts = 20;\n let attempts = 0;\n\n const tryUpdate = () => {\n attempts++;\n const menuWrapper = this.menuContainer.nativeElement.closest('.menu-wrapper');\n const dropdown = menuWrapper?.querySelector('.dropdown');\n \n if (dropdown) {\n this.updateDropdownContent();\n } else if (attempts < maxAttempts) {\n setTimeout(tryUpdate, 10);\n }\n };\n\n tryUpdate();\n }\n}","<div class=\"menu-wrapper\">\n <div class=\"menu\" #menuContainer>\n <div class=\"menu-content\" #menuContent>\n <ng-content></ng-content>\n </div>\n \n @if (showMoreButton()) {\n <button \n class=\"more-button\"\n (click)=\"toggleDropdown()\"\n [attr.aria-expanded]=\"isDropdownOpen()\"\n type=\"button\">\n <span>More</span>\n <svg \n width=\"16\" \n height=\"16\" \n viewBox=\"0 0 16 16\" \n fill=\"currentColor\"\n [style.transform]=\"isDropdownOpen() ? 'rotate(180deg)' : 'rotate(0deg)'\">\n <path d=\"M4 6l4 4 4-4z\"/>\n </svg>\n </button>\n }\n </div>\n \n @if (showMoreButton() && isDropdownOpen()) {\n <div class=\"dropdown\" #dropdown>\n <div class=\"dropdown-content\">\n <!-- Aquí se moverán los elementos overflow -->\n </div>\n </div>\n }\n</div>","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\ninterface RGB {\n red: number;\n green: number;\n blue: number;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class Theming {\n //Light Theme = False\n private activeThemeSubject = new BehaviorSubject<boolean>(false);\n public activeTheme$ = this.activeThemeSubject.asObservable();\n\n //Palettes\n private allPalettesSubject = new BehaviorSubject<string[][]>([]);\n public allPalettes$ = this.allPalettesSubject.asObservable();\n\n generatePalettes(color: string, dark: boolean): string[][] {\n this.activeThemeSubject.next(dark);\n\n //Step 1: Calculate the Color\n const colors = this.hexToRgb(color);\n\n //Step 2: Get the Primary Palette (static, doesn't change with theme)\n const primaryColors: string[] = this.palette(colors, false, 4); // Always use light theme\n\n //Step 3: Calculate dynamic palettes (neutral and elements)\n const dynamicPalettes = this.calculateDynamicPalettes(dark);\n\n //Step 4: Assign All Palettes to Local Variables\n let allPalettes: string[][] = [primaryColors];\n\n allPalettes = allPalettes.concat([dynamicPalettes.neutral]);\n allPalettes = allPalettes.concat([dynamicPalettes.elements]);\n\n this.allPalettesSubject.next(allPalettes);\n\n //Apply theme\n this.applyTheme(allPalettes);\n \n return this.allPalettesSubject.value;\n }\n\n public calculateDynamicPalettes(dark: boolean): { neutral: string[], elements: string[] } {\n const theme: boolean = dark;\n const contrastTheme: boolean = !dark;\n this.activeThemeSubject.next(dark);\n\n\n // Calculate neutral colors (changes with theme)\n const neutralColors: string[] = contrastTheme\n ? this.palette({ red: 255, green: 255, blue: 255 }, false, 9)\n : this.palette({ red: 0, green: 0, blue: 0 }, true, 9);\n\n // Calculate element colors (changes with theme)\n const elementsColors: string[] = this.elementsColors(theme, 3, 40);\n\n // Update palettes array with dynamic values\n const allPalettes = [\n this.allPalettesSubject.value[0], // Keep primary (static)\n neutralColors,\n elementsColors\n ];\n\n this.allPalettesSubject.next(allPalettes);\n\n // Apply theme to CSS variables\n this.applyTheme(allPalettes);\n \n return {\n neutral: neutralColors,\n elements: elementsColors\n };\n }\n\n private palette(colors: { red: number, green: number, blue: number }, dark: boolean, steps: number) {\n //Palette\n const colorsReturn: string[] = [];\n\n const contrastTheme: boolean = !dark;\n const target = contrastTheme ? 0 : 255;\n\n const umbralR = (target - colors.red) / steps;\n const umbralG = (target - colors.green) / steps;\n const umbralB = (target - colors.blue) / steps;\n\n for (let i = 0; i <= steps; i++) {\n const r = Math.round(colors.red + umbralR * i);\n const g = Math.round(colors.green + umbralG * i);\n const b = Math.round(colors.blue + umbralB * i);\n\n colorsReturn.push(`rgb(${r}, ${g}, ${b})`);\n }\n return colorsReturn;\n };\n\n private elementsColors(theme: boolean, iteration: number, amplitude: number) {\n amplitude = amplitude / iteration;\n const colorsReturn: string[] = [];\n for (let i = 0; i < 5; i++) {\n let r = theme ? 0 + ((85 - 0) / (5 - 1) * i) : 0 + ((255 - 0) / (5 - 1) * i);\n let g = theme ? 0 + ((85 - 0) / (5 - 1) * i) : 0 + ((255 - 0) / (5 - 1) * i);\n let b = theme ? 0 + ((85 - 0) / (5 - 1) * i) : 0 + ((255 - 0) / (5 - 1) * i);\n\n if (i <= iteration && theme === false) {\n r = r + amplitude;\n g = g + amplitude;\n b = b + amplitude;\n } else if (theme === false) {\n r = r - amplitude;\n g = g - amplitude;\n b = b - amplitude;\n }\n colorsReturn.push(`rgb(${r}, ${g},${b})`);\n };\n return colorsReturn;\n };\n\n private applyTheme(palettes: string[][]): void {\n if (typeof document === 'undefined') return;\n\n const root = document.documentElement;\n const cssVars = [\n { prefix: '--primary-color-', index: 0 },\n { prefix: '--neutral-color-', index: 1 },\n { prefix: '--element-color-', index: 2 }\n ];\n\n cssVars.forEach(({ prefix, index }) => {\n palettes[index]?.forEach((color, i) => {\n root.style.setProperty(`${prefix}${i}`, color);\n });\n });\n }\n\n private hexToRgb(hex: string): RGB {\n const value = parseInt(hex.replace('#', ''), 16);\n return {\n red: (value >> 16) & 255,\n green: (value >> 8) & 255,\n blue: value & 255,\n };\n }\n}","/*\n * Public API Surface of catarina\n */\n\n// design-system\nexport * from './lib/design-system/icon/icon';\nexport * from './lib/design-system/button/button';\n\n// Panels\nexport * from './lib/design-system/panels/card/card';\nexport * from './lib/design-system/panels/accordion/accordion';\nexport * from './lib/design-system/panels/accordion-group/accordion-group';\n\n//form\nexport * from './lib/design-system/form/cat-input/cat-input';\nexport * from './lib/design-system/form/color-input/color-input';\nexport * from './lib/design-system/form/select-input/select-input';\n\n//Pending https://tecsify.com/blog/input-en-html/\nexport * from './lib/design-system/form/date-input/date-input';\nexport * from './lib/design-system/form/file-input/file-input';\nexport * from './lib/design-system/form/password-input/password-input';\nexport * from './lib/design-system/form/range-input/range-input';\nexport * from './lib/design-system/form/text-area-input/text-area-input';\nexport * from './lib/design-system/form/time-input/time-input';\n/*\nimage, search, telefono, reset, radio button, checkbox, button, email\n*/\n\n//Overlays\n//Pending\nexport * from './lib/design-system/overlays/dialog/dialog';\nexport * from './lib/design-system/overlays/drawer/drawer';\nexport * from './lib/design-system/overlays/menu/menu';\n\n\n/*Services and Directives */\n\nexport * from './lib/directives/drag';\nexport * from './lib/theming/theming';\n\n// Tokens\nexport * from './lib/tokens/icon-provider.token';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["CButton","CAccordion","CIcon"],"mappings":"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"}
1
+ {"version":3,"file":"catarina.mjs","sources":["../../../projects/catarina/src/lib/tokens/icon-provider.token.ts","../../../projects/catarina/src/lib/design-system/icon/icon.ts","../../../projects/catarina/src/lib/design-system/icon/icon.html","../../../projects/catarina/src/lib/design-system/button/button.ts","../../../projects/catarina/src/lib/design-system/button/button.html","../../../projects/catarina/src/lib/design-system/panels/card/card.ts","../../../projects/catarina/src/lib/design-system/panels/card/card.html","../../../projects/catarina/src/lib/design-system/panels/accordion/accordion.ts","../../../projects/catarina/src/lib/design-system/panels/accordion/accordion.html","../../../projects/catarina/src/lib/design-system/panels/accordion-group/accordion-group.ts","../../../projects/catarina/src/lib/design-system/panels/accordion-group/accordion-group.html","../../../projects/catarina/src/lib/design-system/form/cat-input/cat-input.ts","../../../projects/catarina/src/lib/design-system/form/color-input/color-input.ts","../../../projects/catarina/src/lib/design-system/form/color-input/color-input.html","../../../projects/catarina/src/lib/design-system/form/select-input/select-input.ts","../../../projects/catarina/src/lib/design-system/form/select-input/select-input.html","../../../projects/catarina/src/lib/design-system/form/date-input/date-input.ts","../../../projects/catarina/src/lib/design-system/form/date-input/date-input.html","../../../projects/catarina/src/lib/design-system/form/file-input/file-input.ts","../../../projects/catarina/src/lib/design-system/form/file-input/file-input.html","../../../projects/catarina/src/lib/design-system/form/password-input/password-input.ts","../../../projects/catarina/src/lib/design-system/form/password-input/password-input.html","../../../projects/catarina/src/lib/design-system/form/range-input/range-input.ts","../../../projects/catarina/src/lib/design-system/form/range-input/range-input.html","../../../projects/catarina/src/lib/design-system/form/text-area-input/text-area-input.ts","../../../projects/catarina/src/lib/design-system/form/text-area-input/text-area-input.html","../../../projects/catarina/src/lib/design-system/form/time-input/time-input.ts","../../../projects/catarina/src/lib/design-system/form/time-input/time-input.html","../../../projects/catarina/src/lib/directives/drag.ts","../../../projects/catarina/src/lib/design-system/overlays/dialog/dialog.ts","../../../projects/catarina/src/lib/design-system/overlays/dialog/dialog.html","../../../projects/catarina/src/lib/design-system/overlays/drawer/drawer.ts","../../../projects/catarina/src/lib/design-system/overlays/drawer/drawer.html","../../../projects/catarina/src/lib/design-system/overlays/menu/menu.ts","../../../projects/catarina/src/lib/design-system/overlays/menu/menu.html","../../../projects/catarina/src/lib/theming/theming.ts","../../../projects/catarina/src/public-api.ts","../../../projects/catarina/src/catarina.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport interface IconProvider {\n getPath(name: string): string;\n}\n\nexport const ICON_PROVIDER = new InjectionToken<IconProvider>('ICON_PROVIDER', {\n providedIn: 'root',\n factory: () => ({\n // Fallback por defecto si no se configura\n getPath: (name: string) => `icons/${name}.svg`\n })\n});\n","import { Component, Input, inject, signal, PLATFORM_ID, OnDestroy } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { isPlatformBrowser } from '@angular/common';\nimport { ICON_PROVIDER } from '../../tokens/icon-provider.token';\n\nconst ICON_NOT_FOUND_SVG = `\n<svg viewBox=\"0 0 24 24\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" \n aria-labelledby=\"placeholderIconTitle\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\">\n <title id=\"placeholderIconTitle\">Icon not found</title>\n <g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g>\n <g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g>\n <g id=\"SVGRepo_iconCarrier\"> \n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\"></rect>\n <path stroke-linecap=\"round\" d=\"M21 21L3 3 21 21zM21 3L3 21 21 3z\"></path> \n </g>\n</svg>\n`;\n\n@Component({\n selector: 'cat-icon',\n imports: [],\n templateUrl: './icon.html',\n styleUrl: './icon.css',\n})\nexport class Icon implements OnDestroy {\n private sanitizer = inject(DomSanitizer);\n private platformId = inject(PLATFORM_ID);\n private iconProvider = inject(ICON_PROVIDER);\n\n private abortController?: AbortController;\n \n svgContent = signal<SafeHtml>('');\n isLoading = signal<boolean>(false);\n\n @Input() size: string = '1em';\n @Input() color = 'currentColor';\n\n ngOnDestroy() {\n this.abortController?.abort();\n }\n\n // Usar nombre (con provider)\n @Input() set name(iconName: string) {\n if (!iconName) return;\n\n const path = this.iconProvider.getPath(iconName);\n\n // Cancelar petición anterior si existe\n this.abortController?.abort();\n\n // Si el path es el fallback por defecto (icons/), no intentes cargarlo\n if (!path || path.startsWith('icons/')) {\n this.showPlaceholder();\n return;\n }\n\n this.loadSvg(path);\n }\n\n // Usar path directo\n @Input() set src(path: string) {\n if (!path) return;\n \n // Cancelar petición anterior si existe\n this.abortController?.abort();\n this.loadSvg(path);\n }\n\n private loadSvg(path: string) {\n // En SSR, mostrar placeholder inmediatamente\n if (!isPlatformBrowser(this.platformId)) {\n this.showPlaceholder();\n return;\n }\n\n // Limpiar contenido y mostrar estado de carga\n this.isLoading.set(true);\n this.svgContent.set('');\n\n // Crear nuevo AbortController para esta petición\n this.abortController = new AbortController();\n\n fetch(path, { \n signal: this.abortController.signal,\n mode: 'cors',\n cache: 'default'\n })\n .then(response => {\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n return response.text();\n })\n .then(svg => {\n // VALIDACIÓN CRÍTICA: Verificar que sea un SVG\n if (!this.isValidSvg(svg)) {\n console.error(`Invalid SVG received from ${path}. Response is not valid SVG.`);\n this.showPlaceholder();\n return;\n }\n\n const processed = this.processSvg(svg);\n if (processed) {\n this.svgContent.set(this.sanitizer.bypassSecurityTrustHtml(processed));\n } else {\n this.showPlaceholder();\n }\n })\n .catch((error) => {\n // Ignorar errores de abort (son esperados)\n if (error.name === 'AbortError') {\n return;\n }\n \n console.error(`Error loading icon from ${path}:`, error.message);\n this.showPlaceholder();\n })\n .finally(() => {\n this.isLoading.set(false);\n });\n }\n\n private showPlaceholder(): void {\n this.isLoading.set(false);\n const processed = this.processSvg(ICON_NOT_FOUND_SVG);\n if (processed) {\n this.svgContent.set(this.sanitizer.bypassSecurityTrustHtml(processed));\n }\n }\n\n private isValidSvg(content: string): boolean {\n // Validaciones estrictas para asegurar que sea SVG\n const trimmed = content.trim();\n \n // 1. Debe comenzar con <svg (ignorando espacios y declaraciones XML)\n const svgRegex = /^\\s*(<\\?xml[^>]*>\\s*)?<\\s*svg\\b/i;\n if (!svgRegex.test(trimmed)) {\n return false;\n }\n\n // 2. Debe terminar con </svg>\n if (!trimmed.includes('</svg>')) {\n return false;\n }\n\n // 3. No debe contener <html>, <head>, <body> (indicaría HTML completo)\n const htmlTags = ['<html', '<head', '<body', '<!DOCTYPE html'];\n for (const tag of htmlTags) {\n if (trimmed.toLowerCase().includes(tag.toLowerCase())) {\n return false;\n }\n }\n\n // 4. Tamaño razonable para un icono (máximo 100KB)\n if (content.length > 100 * 1024) {\n console.warn('SVG file is too large for an icon:', content.length, 'bytes');\n return false;\n }\n\n return true;\n }\n\n private processSvg(svg: string): string | null {\n // Validar antes de procesar\n if (!this.isValidSvg(svg)) {\n return null;\n }\n\n // En SSR, usar procesamiento simple con regex (no hay DOMParser)\n if (!isPlatformBrowser(this.platformId)) {\n return this.processSvgWithRegex(svg);\n }\n\n // En Browser, usar DOMParser para procesamiento robusto\n try {\n const parser = new DOMParser();\n const doc = parser.parseFromString(svg, 'image/svg+xml');\n \n // Verificar que no haya errores de parseo\n const parserError = doc.querySelector('parsererror');\n if (parserError) {\n console.error('SVG parsing error:', parserError.textContent);\n return null;\n }\n\n const svgElement = doc.querySelector('svg');\n if (!svgElement) {\n return null;\n }\n\n // Verificar que sea realmente un elemento SVG\n if (svgElement.tagName.toLowerCase() !== 'svg') {\n return null;\n }\n\n // Modificar solo el elemento <svg> raíz\n svgElement.removeAttribute('width');\n svgElement.removeAttribute('height');\n\n // Cambiar fill y stroke solo si no son \"none\"\n const currentFill = svgElement.getAttribute('fill');\n if (currentFill && currentFill !== 'none') {\n svgElement.setAttribute('fill', 'currentColor');\n }\n\n const currentStroke = svgElement.getAttribute('stroke');\n if (currentStroke && currentStroke !== 'none') {\n svgElement.setAttribute('stroke', 'currentColor');\n }\n\n // Asegurar viewBox (requerido para escalado)\n if (!svgElement.hasAttribute('viewBox')) {\n svgElement.setAttribute('viewBox', '0 0 24 24');\n }\n\n // Serializar de vuelta a string\n return new XMLSerializer().serializeToString(svgElement);\n } catch (error) {\n console.error('Error processing SVG:', error);\n return null;\n }\n }\n\n private processSvgWithRegex(svg: string): string {\n // Procesamiento simple con regex para SSR (donde no hay DOMParser)\n let processed = svg;\n\n // Remover width y height solo del tag <svg> de apertura\n processed = processed.replace(/(<svg[^>]*?)\\s+width=\"[^\"]*\"/i, '$1');\n processed = processed.replace(/(<svg[^>]*?)\\s+height=\"[^\"]*\"/i, '$1');\n\n // Cambiar fill a currentColor si existe y no es \"none\"\n processed = processed.replace(\n /(<svg[^>]*?\\s+fill=\")(?!none)([^\"]*)(\")/i, \n '$1currentColor$3'\n );\n\n // Cambiar stroke a currentColor si existe y no es \"none\"\n processed = processed.replace(\n /(<svg[^>]*?\\s+stroke=\")(?!none)([^\"]*)(\")/i, \n '$1currentColor$3'\n );\n\n // Asegurar viewBox si no existe\n if (!/viewBox=/i.test(processed)) {\n processed = processed.replace(\n /(<svg[^>]*?)>/i, \n '$1 viewBox=\"0 0 24 24\">'\n );\n }\n\n return processed;\n }\n}","<span [innerHTML]=\"svgContent()\" [style.width]=\"size\" [style.height]=\"size\" [style.display]=\"'inline-flex'\"\n [style.color]=\"color\" class=\"cat-icon\">\n</span>","import { Component, Input, Output, EventEmitter, HostBinding } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Icon } from '../icon/icon';\n\n@Component({\n selector: 'cat-button',\n imports: [Icon],\n templateUrl: './button.html',\n styleUrl: './button.scss',\n})\nexport class Button {\n @Input() variant: 'primary' | 'secondary' | 'contrast' | 'outline' | 'ghost' = 'primary';\n @Input() size: 'sm' | 'md' | 'lg' = 'md';\n @Input() disabled = false;\n @Input() type: 'button' | 'submit' | 'reset' = 'button';\n @Input() iconLeft?: string;\n @Input() iconCenter?: string;\n @Input() iconRight?: string;\n @Input() customClass = '';\n\n @Output() clicked = new EventEmitter<MouseEvent>();\n\n get buttonClasses(): string {\n return `${this.variant} ${this.size} ${this.customClass}`;\n }\n\n get iconSize(): string {\n const sizes = { sm: '16px', md: '20px', lg: '24px' };\n return sizes[this.size];\n }\n\n @HostBinding('attr.data-button-class') get dataCustomClass() {\n return this.customClass;\n }\n\n handleClick(event: MouseEvent): void {\n if (!this.disabled) {\n this.clicked.emit(event);\n }\n }\n}\n","<button [class]=\"buttonClasses\" [disabled]=\"disabled\" [type]=\"type\" (click)=\"handleClick($event)\">\n\n @if (iconLeft) {\n <cat-icon [name]=\"iconLeft\" [size]=\"iconSize\" class=\"icon-left\">\n </cat-icon>\n }\n\n <span class=\"button-content\">\n @if (iconCenter) {\n <cat-icon [name]=\"iconCenter\" [size]=\"iconSize\" class=\"icon-left\">\n </cat-icon>\n }\n <ng-content></ng-content>\n </span>\n\n @if (iconRight) {\n <cat-icon [name]=\"iconRight\" [size]=\"iconSize\" class=\"icon-right\">\n </cat-icon>\n }\n</button>","import { Component, Input, HostBinding } from '@angular/core';\n\n@Component({\n selector: 'cat-card',\n templateUrl: './card.html',\n styleUrls: ['./card.css']\n})\nexport class Card {\n @Input() variant: 'surface' | 'outlined' | 'elevated' = 'surface';\n @Input() size: 'sm' | 'md' | 'lg' = 'md';\n @Input() width: string = 'auto';\n @Input() customClass = '';\n\n // Exponer las clases como atributos de datos\n @HostBinding('attr.data-card-variant') get dataVariant() {\n return this.variant;\n }\n \n @HostBinding('attr.data-card-size') get dataSize() {\n return this.size;\n }\n \n @HostBinding('attr.data-card-class') get dataCustomClass() {\n return this.customClass;\n }\n\n /*// También exponer como CSS Custom Properties\n @HostBinding('style.--card-variant') get cssVariant() {\n return this.variant;\n }\n \n @HostBinding('style.--card-custom-class') get cssCustomClass() {\n return this.customClass;\n }\n*/\n get cardClasses(): string {\n return `cat-card ${this.variant} ${this.size} ${this.customClass}`;\n }\n}","<section [class]=\"cardClasses\" [attr.data-class]=\"customClass\" [style]=\"`width: ${width};`\">\n <ng-content></ng-content>\n</section>","import { Component, ElementRef, EventEmitter, HostBinding, Input, Output, ViewChild } from '@angular/core';\nimport { Button as CButton } from '../../button/button';\nimport { NgClass, NgIf } from '@angular/common';\n\n@Component({\n selector: 'cat-accordion',\n imports: [CButton, NgClass, NgIf],\n templateUrl: './accordion.html',\n styleUrl: './accordion.css',\n})\nexport class Accordion {\n @Input() accordionId?: string;\n @Input() status: boolean = false;//false = unactive\n @Input() label: string = 'Accordion Name';\n\n @Input() disabled = false;\n @Input() customClass = '';\n @Input() width: string = 'auto';\n\n //Button Properties\n @Input() buttonVariant: 'primary' | 'secondary' | 'contrast' | 'outline' | 'ghost' = 'secondary';\n @Input() buttonSize: 'sm' | 'md' | 'lg' = 'md';\n @Input() iconLeft: boolean = false;\n @Input() iconCenter: boolean = false;\n @Input() iconRight: boolean = true;\n\n //Panel Properties\n @Input() scrolleable: boolean = false;\n @Input() variant: 'surface' | 'outlined' | 'elevated' = 'surface';\n\n @Output() updateAccordionGroupStatusOutput = new EventEmitter<string>();\n\n @ViewChild('buttonRef', { static: false }) buttonRef!: ElementRef;\n buttonWidth: number = 0;\n\n ngAfterViewInit() {\n // Obtener el ancho del botón después de renderizar\n setTimeout(() => {\n if (this.buttonRef) {\n const button = this.buttonRef.nativeElement.querySelector('button');\n if (button) {\n this.buttonWidth = button.offsetWidth;\n }\n }\n });\n }\n\n // Actualizar cuando cambie el label o otros inputs que afecten tamaño\n ngOnChanges() {\n if (this.buttonRef) {\n const button = this.buttonRef.nativeElement.querySelector('button');\n if (button) {\n this.buttonWidth = button.offsetWidth;\n }\n }\n }\n updateAccordionGroupStatus() {\n this.status = !this.status;\n this.updateAccordionGroupStatusOutput.emit(this.accordionId!);\n }\n\n forceStatus(newStatus: boolean): void {\n this.status = newStatus;\n };\n\n @HostBinding('attr.data-accordion-class') get dataCustomClass() {\n return this.customClass;\n }\n\n get panelClasses(): string {\n return `${this.variant} ${this.customClass} ${this.scrolleable ? 'scrolleable' : undefined}`;\n }\n}\n","<section class=\"accordion\" [style]=\"`width: ${width};`\">\n <div>\n <cat-button [iconLeft]=\"iconLeft ? (status ? 'minus' : 'plus') : undefined\"\n [iconCenter]=\"iconCenter ? (status ? 'minus' : 'plus') : undefined\"\n [iconRight]=\"iconRight && status ? 'minus' : 'plus'\" (clicked)=\"updateAccordionGroupStatus()\"\n [variant]=\"buttonVariant\" [size]=\"buttonSize\" customClass=\"accordion-button\" [disabled]=\"disabled\">\n {{label}}\n </cat-button>\n </div>\n <div [class]=\"panelClasses\" [ngClass]=\"status ? 'accordion-panel-active': 'accordion-panel-unactive'\">\n <ng-content *ngIf=\"status\"></ng-content>\n </div>\n</section>","import { Component, ContentChildren, HostBinding, Input, QueryList } from '@angular/core';\nimport { Accordion as CAccordion } from '../accordion/accordion';\nimport { Subscription } from 'rxjs';\n\n@Component({\n selector: 'cat-accordion-group',\n imports: [],\n templateUrl: './accordion-group.html',\n styleUrl: './accordion-group.css',\n})\nexport class AccordionGroup {\n @Input() singleExpand: boolean = true;\n @Input() customClass: string = '';\n\n @ContentChildren(CAccordion) accordions!: QueryList<CAccordion>;\n\n accordionActiveId?: String;\n\n sub?: Subscription | null;\n\n ngAfterContentInit(): void {\n if (this.singleExpand) {\n this.accordions.forEach(acc => {\n this.sub = acc.updateAccordionGroupStatusOutput.subscribe(id => {\n this.handleOpen(id);\n });\n });\n }\n }\n\n handleOpen(id: string) {\n this.accordions.forEach(acc => acc.forceStatus(false));\n const target = this.accordions.find(acc => acc.accordionId === id);\n if (this.accordionActiveId === id) {\n target?.forceStatus(false);\n this.accordionActiveId = undefined;\n } else {\n target?.forceStatus(true);\n this.accordionActiveId = id;\n }\n }\n\n @HostBinding('attr.data-accordion-group-class') get dataCustomClass() {\n return this.customClass;\n }\n\n get accordionGroupClasses() {\n return `${this.customClass}`;\n }\n}\n","<style>\n section {\n width: 100%;\n }\n</style>\n<section [class]=\"accordionGroupClasses\">\n <ng-content></ng-content>\n</section>","import { Directive, ElementRef, Renderer2, OnInit, inject, Optional, Self, PLATFORM_ID } from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { isPlatformBrowser } from '@angular/common';\n\n@Directive({\n selector: '[catInput]',\n standalone: true,\n host: {\n '[class.cat-input]': 'true',\n '[class.md]': 'true',\n '[class.invalid]': 'isInvalid'\n }\n})\nexport class CatInput implements OnInit {\n private el = inject(ElementRef);\n private platformId = inject(PLATFORM_ID);\n @Optional() @Self() public control: NgControl | null = inject(NgControl, { optional: true, self: true });\n\n private static stylesInjected = false;\n\n ngOnInit(): void {\n if (this.el.nativeElement.tagName.toLowerCase() !== 'input') {\n console.warn('catInput directive can only be used on <input> elements');\n return;\n }\n\n // Inyectar estilos solo una vez\n if (!CatInput.stylesInjected && isPlatformBrowser(this.platformId)) {\n this.injectStyles();\n CatInput.stylesInjected = true;\n }\n }\n\n private injectStyles(): void {\n const style = document.createElement('style');\n style.textContent = `\n .cat-input {\n border: 1px solid var(--neutral-color-3);\n background-color: var(--neutral-color-0);\n color: var(--neutral-color-9);\n border-radius: 18px;\n outline: none;\n transition: all 0.2s;\n }\n\n .cat-input:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .cat-input::placeholder {\n color: var(--neutral-color-6);\n transition: font-size 0.2s;\n }\n\n .cat-input:focus::placeholder {\n font-size: 0.7em;\n }\n\n .cat-input:focus {\n border: 1px solid var(--neutral-color-9);\n }\n\n .cat-input.invalid,\n .cat-input.ng-invalid.ng-touched {\n border: 1px solid red;\n }\n\n .cat-input.ng-valid.ng-touched {\n border: 1px solid green;\n }\n\n .cat-input.md {\n padding: 0.5rem 1rem;\n font-size: 1rem;\n }\n\n .cat-input.sm {\n padding: 0.25rem 0.75rem;\n font-size: 0.875rem;\n }\n\n .cat-input.lg {\n padding: 0.75rem 1.5rem;\n font-size: 1.125rem;\n }\n `;\n document.head.appendChild(style);\n }\n\n get isInvalid(): boolean {\n return !!(this.control && this.control.invalid && this.control.touched);\n }\n}","import { Component, forwardRef, Input } from '@angular/core';\nimport { Icon as CIcon } from '../../icon/icon';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'cat-color-input',\n imports: [CIcon],\n providers: [{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ColorInput),\n multi: true\n }],\n templateUrl: './color-input.html',\n styleUrl: './color-input.css',\n})\nexport class ColorInput implements ControlValueAccessor {\n value: string = '#000000';\n @Input() icon?: boolean = false;\n @Input() size: string ='2em';\n\n private onChange = (value: any) => { };\n onTouched = () => { };\n\n onInput(event: Event) {\n const newValue = (event.target as HTMLInputElement).value;\n this.value = newValue;\n this.onChange(newValue); // informa al padre \n }\n\n // Métodos requeridos por ControlValueAccessor\n writeValue(value: any): void {\n this.value = value || '#000000';\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n\n this.onTouched = fn;\n }\n}\n","<style>\n div {\n position: relative;\n aspect-ratio: 1/1;\n }\n\n div:hover {\n cursor: grab;\n }\n input {\n width: 100%;\n aspect-ratio: 1/1;\n top: 0;\n left: 0;\n }\n cat-icon {\n position: absolute;\n top: 0;\n left: 0;\n pointer-events: none;\n }\n</style>\n<!-- input-color.html -->\n<div [style]=\"`width: ${size};`\">\n <input type=\"color\" [style]=\"icon ? 'opacity: 0;' : 'opacity: 100%;'\" [value]=\"value\" (input)=\"onInput($event)\" (blur)=\"onTouched()\">\n @if (icon) {\n <cat-icon [style]=\"`height: ${size};`\" size=\"100%\" name=\"palette\"></cat-icon> \n }\n</div>","import { NgFor, NgClass, isPlatformBrowser } from '@angular/common';\nimport { AfterViewInit, Component, ElementRef, EventEmitter, forwardRef, HostBinding, HostListener, Input, OnDestroy, Output, PLATFORM_ID, inject, ViewChild } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { CatInput } from \"../cat-input/cat-input\";\n\n@Component({\n selector: 'cat-select-input',\n imports: [\n NgFor,\n CatInput,\n NgClass\n ],\n providers: [{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SelectInput),\n multi: true\n }],\n templateUrl: './select-input.html',\n styleUrl: './select-input.css',\n})\nexport class SelectInput implements ControlValueAccessor, AfterViewInit, OnDestroy {\n @ViewChild('input') inputEl!: ElementRef<HTMLElement>;\n @ViewChild('optionsContainer', { static: false }) optionsContainer!: ElementRef<HTMLElement>;\n\n @Input() transform?: string; //This option basicly allow to the consumer put the options at the side where he wants\n @Input() options?: string[];\n @Input() placeholder: string = '';\n @Input() type: 'string' | 'number' = 'string';\n\n value: string | number = '';\n active = false;\n isInsideMenu = false;\n\n @Input() variant: 'surface' | 'elevated' | 'outlined' = 'surface';\n @Input() scrolleable: boolean = false;\n @Input() customClass: string = '';\n\n //@Output() selected = new EventEmitter<string>();\n\n //Accesibility\n @HostListener('document:click', ['$event'])\n outerClick(event: Event) {\n if (!this.el.nativeElement.contains(event.target)) {\n this.active = false;\n this.updateDropdownPosition();\n }\n };\n\n private updateDropdownPosition() {\n if (!isPlatformBrowser(this.platformId)) return;\n if (!this.isInsideMenu || !this.active || !this.optionsContainer) {\n return;\n }\n\n // Calcular posición cuando está dentro del menú\n const inputRect = this.inputEl.nativeElement.getBoundingClientRect();\n const optionsEl = this.optionsContainer.nativeElement;\n \n // Posicionar el dropdown debajo del input usando position fixed\n optionsEl.style.position = 'fixed';\n optionsEl.style.top = `${inputRect.bottom}px`;\n optionsEl.style.left = `${inputRect.left}px`;\n optionsEl.style.width = `${inputRect.width}px`;\n optionsEl.style.zIndex = '1001';\n }\n\n toggleActive() {\n this.active = !this.active;\n if (this.active && this.isInsideMenu) {\n // Esperar un tick para que el DOM se actualice\n setTimeout(() => {\n this.updateDropdownPosition();\n }, 0);\n }\n }\n\n constructor(\n private el: ElementRef,\n ) { }\n\n private platformId = inject(PLATFORM_ID);\n private scrollHandler?: () => void;\n private resizeHandler?: () => void;\n\n ngAfterViewInit() {\n if (!isPlatformBrowser(this.platformId)) return;\n \n // Detectar si el select está dentro de un menú\n this.isInsideMenu = !!this.el.nativeElement.closest('cat-menu');\n \n // Añadir listeners para actualizar posición en scroll/resize\n if (this.isInsideMenu) {\n this.scrollHandler = () => {\n if (this.active) {\n this.updateDropdownPosition();\n }\n };\n this.resizeHandler = () => {\n if (this.active) {\n this.updateDropdownPosition();\n }\n };\n \n window.addEventListener('scroll', this.scrollHandler, true);\n window.addEventListener('resize', this.resizeHandler);\n }\n }\n\n ngOnDestroy() {\n if (!isPlatformBrowser(this.platformId)) return;\n \n if (this.scrollHandler) {\n window.removeEventListener('scroll', this.scrollHandler, true);\n }\n if (this.resizeHandler) {\n window.removeEventListener('resize', this.resizeHandler);\n }\n }\n\n onChange = (value: any) => { };\n onTouched = () => { };\n\n //Here starts the events from ControlValueAccesor\n writeValue(value: any): void {\n this.value = value;\n };\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n //Here ends The events from ControlValueAccesor\n\n choseValue(option: any) {\n this.value = option;\n this.onChange(option);\n this.onTouched();\n this.active = false;\n //this.selected.emit(option);\n };\n\n @HostBinding('attr.data-select-input-class') get dataCustomClass() {\n return this.customClass;\n }\n\n get selectInputClass(): string {\n return `${this.variant} ${this.scrolleable ? 'scrolleable' : ''}`;\n }\n}\n","<div>\n <input catInput #input [value]=\"value\" [type]=\"type\" readonly id=\"select\" (mousedown)=\"toggleActive()\" [placeholder]=\"placeholder\">\n <section #optionsContainer role=\"listbox\" [class]=\"selectInputClass\" class=\"options\" [ngClass]=\"active ? 'options-active' : 'options.unactive'\" [style.transform]=\"transform\">\n @if (active) {\n <div role=\"option\"*ngFor=\"let option of options\" (mousedown)=\"choseValue(option)\">\n {{ option }}\n </div>\n }\n </section>\n</div>","import { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-date-input',\n imports: [],\n templateUrl: './date-input.html',\n styleUrl: './date-input.css',\n})\nexport class DateInput {\n\n}\n","<p>date-input works!</p>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-file-input',\n imports: [],\n templateUrl: './file-input.html',\n styleUrl: './file-input.css',\n})\nexport class FileInput {\n\n}\n","<p>file-input works!</p>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-password-input',\n imports: [],\n templateUrl: './password-input.html',\n styleUrl: './password-input.css',\n})\nexport class PasswordInput {\n\n}\n","<p>password-input works!</p>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-range-input',\n imports: [],\n templateUrl: './range-input.html',\n styleUrl: './range-input.css',\n})\nexport class RangeInput {\n\n}\n","<p>range-input works!</p>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-text-area-input',\n imports: [],\n templateUrl: './text-area-input.html',\n styleUrl: './text-area-input.css',\n})\nexport class TextAreaInput {\n\n}\n","<p>text-area-input works!</p>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-time-input',\n imports: [],\n templateUrl: './time-input.html',\n styleUrl: './time-input.css',\n})\nexport class TimeInput {\n\n}\n","<p>time-input works!</p>\n","import { AfterViewInit, Directive, DOCUMENT, ElementRef, Inject, Renderer2 } from '@angular/core';\n\n@Directive({\n selector: '[CDrag]'\n})\nexport class Drag implements AfterViewInit {\n private offsetX = 0;\n private offsetY = 0;\n private dragging = false;\n\n constructor(\n private el: ElementRef,\n private renderer: Renderer2,\n @Inject(DOCUMENT) private document: Document\n ) { }\n\n ngAfterViewInit() {\n const el = this.el.nativeElement as HTMLElement;\n\n // Si el elemento no tiene position seteado, le ponemos absolute\n if (typeof window !== 'undefined') {\n const computedStyle = window.getComputedStyle(el);\n if (computedStyle.position === 'static') {\n this.renderer.setStyle(el, 'position', 'absolute');\n }\n }\n\n\n el.addEventListener('mousedown', (e: MouseEvent) => {\n this.dragging = true;\n this.offsetX = e.clientX - el.offsetLeft;\n this.offsetY = e.clientY - el.offsetTop;\n el.style.cursor = 'grabbing';\n });\n\n this.document.addEventListener('mousemove', (e: MouseEvent) => {\n if (this.dragging) {\n el.style.left = e.clientX - this.offsetX + 'px';\n el.style.top = e.clientY - this.offsetY + 'px';\n }\n });\n\n this.document.addEventListener('mouseup', () => {\n this.dragging = false;\n el.style.cursor = 'grab';\n });\n }\n\n}\n","import { Component, EventEmitter, HostBinding, HostListener, Input, Output } from '@angular/core';\nimport { Drag } from '../../../directives/drag';\n\n@Component({\n selector: 'cat-dialog',\n imports: [Drag],\n templateUrl: './dialog.html',\n styleUrl: './dialog.css',\n})\nexport class Dialog {\n @Output() closs = new EventEmitter<boolean>();\n @HostListener('window:keydown.escape', ['$event'])\n handleKeyDown(event: Event) {\n this.clossOverlay();\n }\n @Input() variant: 'surface' | 'outlined' | 'elevated' = 'surface';\n @Input() size: 'sm' | 'md' | 'lg' = 'md';\n @Input() customClass = '';\n\n // Exponer las clases como atributos de datos\n @HostBinding('attr.data-card-variant') get dataVariant() {\n return this.variant;\n }\n\n @HostBinding('attr.data-card-size') get dataSize() {\n return this.size;\n }\n\n @HostBinding('attr.data-card-class') get dataCustomClass() {\n return this.customClass;\n }\n\n get dialogClasses(): string {\n return `${this.variant} ${this.size} ${this.customClass}`;\n }\n\n clossOverlay() {\n this.closs.emit(false);\n };\n}\n","<div class=\"dialog-shadow\" (click)=\"clossOverlay()\">\n</div>\n<section CDrag [class]=\"dialogClasses\">\n <ng-content></ng-content>\n</section>","import { Component, EventEmitter, HostBinding, HostListener, Input, Output } from '@angular/core';\nimport { Button } from '../../button/button';\n\n@Component({\n selector: 'cat-drawer',\n imports: [Button],\n templateUrl: './drawer.html',\n styleUrl: './drawer.css',\n})\nexport class Drawer {\n @Output() closs = new EventEmitter<boolean>();\n @HostListener('window:keydown.escape', ['$event'])\n handleKeyDown(event: Event) {\n this.clossOverlay();\n }\n\n @Input() side: 'left' | 'right' | 'top' | 'bottom' = 'left';\n @Input() variant: 'surface' | 'elevated' | 'outlined' = 'surface';\n @Input() customClass: string = '';\n \n @HostBinding('attr.data-drawer-class') get dataCustomClass() {\n return this.customClass;\n }\n\n get drawerClasses(): string {\n return `${this.variant} ${this.side} ${this.customClass}`;\n }\n\n clossOverlay() {\n this.closs.emit(false);\n };\n}\n","<style>\n .dialog-shadow {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: rgba(0, 0, 0, 0.7);\n z-index: 999;\n }\n\n section {\n position: fixed;\n\n overflow: auto;\n\n box-sizing: border-box;\n padding: 0.25rem 0.75rem;\n z-index: 1000;\n transition: 250ms;\n\n user-select: none;\n }\n\n /* Variants */\n .surface {\n background-color: var(--element-color-4);\n }\n\n .elevated {\n background-color: var(--neutral-color-0);\n }\n\n .outlined {\n background-color: var(--element-color-3);\n border: 2px solid var(--neutral-color-9);\n }\n\n .close-button {\n position: absolute;\n }\n\n .left {\n width: 30em;\n height: 100vh;\n width: 30em;\n height: 100vh;\n left: 0;\n top: 0;\n\n & .close-button {\n right: .25rem;\n }\n }\n\n .right {\n width: 30em;\n height: 100vh;\n right: 0;\n top: 0;\n\n & .close-button {\n left: .25rem;\n }\n }\n\n .top {\n width: 100%;\n height: 20em;\n top: 0;\n left: 0;\n\n & .close-button {\n right: .25rem;\n }\n }\n\n .bottom {\n width: 100%;\n height: 20em;\n bottom: 0;\n left: 0;\n\n & .close-button {\n right: .25rem;\n }\n }\n\n @media screen and (orientation: portrait) {\n .top, .bottom {\n height: 70%;\n }\n }\n</style>\n<section [class]=\"drawerClasses\">\n <cat-button iconCenter=\"x-mark\" variant=\"contrast\" class=\"close-button\" (clicked)=\"clossOverlay()\"></cat-button>\n <ng-content></ng-content>\n</section>\n<div class=\"dialog-shadow\" (click)=\"clossOverlay()\">\n</div>","import { isPlatformBrowser } from '@angular/common';\nimport { AfterViewInit, Component, ElementRef, HostBinding, inject, Input, OnDestroy, PLATFORM_ID, signal, ViewChild } from '@angular/core';\nimport { Icon } from '../../icon/icon';\n\n@Component({\n selector: 'cat-menu',\n imports: [Icon],\n templateUrl: './menu.html',\n styleUrl: './menu.css',\n})\nexport class Menu implements AfterViewInit, OnDestroy {\n @Input() variant: 'surface' | 'elevated' | 'outlined' = 'surface';\n @Input() customClass: string = '';\n\n @HostBinding('attr.data-menu-class') get dataCustomClass() {\n return this.customClass;\n }\n\n get menuClasses(): string {\n return `${this.variant} ${this.customClass}`;\n }\n\n @ViewChild('menuContainer', { static: false }) menuContainer!: ElementRef<HTMLDivElement>;\n @ViewChild('menuContent', { static: false }) menuContent!: ElementRef<HTMLDivElement>;\n @ViewChild('dropdown', { static: false }) dropdown?: ElementRef<HTMLDivElement>;\n\n private platformId = inject(PLATFORM_ID);\n private resizeObserver?: ResizeObserver;\n private mutationObserver?: MutationObserver;\n\n showMoreButton = signal(false);\n isDropdownOpen = signal(false);\n overflowItems = signal<HTMLElement[]>([]);\n\n ngAfterViewInit() {\n if (!isPlatformBrowser(this.platformId)) return;\n\n setTimeout(() => {\n this.checkOverflow();\n this.setupObservers();\n }, 0);\n }\n\n ngOnDestroy() {\n this.resizeObserver?.disconnect();\n this.mutationObserver?.disconnect();\n if (isPlatformBrowser(this.platformId)) {\n document.removeEventListener('click', this.handleOutsideClick);\n }\n }\n\n private setupObservers() {\n if (!isPlatformBrowser(this.platformId)) return;\n\n this.resizeObserver = new ResizeObserver(() => {\n this.checkOverflow();\n });\n this.resizeObserver.observe(this.menuContainer.nativeElement);\n\n this.mutationObserver = new MutationObserver(() => {\n this.checkOverflow();\n });\n this.mutationObserver.observe(this.menuContent.nativeElement, {\n childList: true,\n subtree: true\n });\n\n document.addEventListener('click', this.handleOutsideClick);\n }\n\n private handleOutsideClick = (event: MouseEvent) => {\n if (!this.isDropdownOpen()) return;\n\n const target = event.target as HTMLElement;\n const clickedInside = this.menuContainer.nativeElement.contains(target) ||\n this.dropdown?.nativeElement.contains(target);\n\n if (!clickedInside) {\n this.isDropdownOpen.set(false);\n }\n };\n\nprivate checkOverflow() {\n // Si el dropdown está abierto, no recalcular (los elementos están en el dropdown)\n // Solo actualizar el contenido del dropdown si es necesario\n if (this.isDropdownOpen()) {\n const overflowItems = this.overflowItems();\n if (overflowItems.length > 0) {\n this.showMoreButton.set(true);\n setTimeout(() => {\n this.waitForDropdownAndUpdate();\n }, 0);\n }\n return;\n }\n\n const container = this.menuContent.nativeElement;\n \n // Restaurar todos los elementos que puedan estar en el dropdown\n this.restoreOverflowItems();\n \n const items = Array.from(container.children) as HTMLElement[];\n\n if (items.length === 0) {\n this.showMoreButton.set(false);\n this.overflowItems.set([]);\n return;\n }\n\n const menuItems = items.filter(item =>\n !item.classList.contains('more-button')\n );\n\n if (menuItems.length === 0) {\n this.showMoreButton.set(false);\n this.overflowItems.set([]);\n return;\n }\n\n // Restaurar todos los elementos a su estado visible antes de calcular\n menuItems.forEach(item => {\n item.style.display = '';\n });\n\n // Forzar un reflow para obtener posiciones correctas\n container.offsetHeight;\n\n // Detectar elementos en la primera fila vs elementos en filas adicionales\n const firstItemTop = menuItems[0]?.getBoundingClientRect().top;\n const firstRowItems: HTMLElement[] = [];\n const overflowItems: HTMLElement[] = [];\n\n menuItems.forEach(item => {\n const itemTop = item.getBoundingClientRect().top;\n // Tolerancia de 1px para manejar diferencias de redondeo\n if (Math.abs(itemTop - firstItemTop) <= 1) {\n firstRowItems.push(item);\n } else {\n overflowItems.push(item);\n }\n });\n\n // Si hay elementos en overflow, mostrar el botón More y ocultar los elementos overflow\n const needsMoreButton = overflowItems.length > 0;\n this.showMoreButton.set(needsMoreButton);\n\n // Ocultar elementos que están en la segunda fila o más\n overflowItems.forEach(item => {\n item.style.display = 'none';\n });\n\n // Mantener visibles solo los elementos de la primera fila\n firstRowItems.forEach(item => {\n item.style.display = '';\n });\n\n if (needsMoreButton) {\n this.overflowItems.set(overflowItems);\n } else {\n this.overflowItems.set([]);\n }\n}\n\n private updateDropdownContent() {\n // Buscar el dropdown directamente en el DOM en lugar de usar ViewChild\n const menuWrapper = this.menuContainer.nativeElement.closest('.menu-wrapper');\n if (!menuWrapper) {\n return;\n }\n\n const dropdown = menuWrapper.querySelector('.dropdown') as HTMLElement;\n if (!dropdown) {\n return;\n }\n\n const dropdownContent = dropdown.querySelector('.dropdown-content');\n if (!dropdownContent) {\n return;\n }\n\n // Limpiar contenido previo - restaurar elementos que puedan estar ahí\n this.restoreOverflowItems();\n\n const overflowItems = this.overflowItems();\n \n if (overflowItems.length === 0) {\n return;\n }\n\n const menuContent = this.menuContent.nativeElement;\n\n overflowItems.forEach(item => {\n // Mover el elemento real al dropdown (preserva todos los event listeners de Angular)\n // El elemento ya está oculto (display: none), así que lo hacemos visible y lo movemos\n item.style.display = '';\n item.style.visibility = 'visible';\n item.style.opacity = '1';\n \n // Añadir un listener para cerrar el dropdown cuando se haga click\n const closeHandler = () => {\n this.isDropdownOpen.set(false);\n };\n \n // Buscar el botón dentro del elemento y añadir el listener\n const button = item.querySelector('button, cat-button, [role=\"button\"]') as HTMLElement;\n if (button) {\n button.addEventListener('click', closeHandler, { once: true });\n } else {\n item.addEventListener('click', closeHandler, { once: true });\n }\n \n // Mover el elemento al dropdown\n dropdownContent.appendChild(item);\n });\n }\n\n private restoreOverflowItems() {\n const overflowItems = this.overflowItems();\n const menuContent = this.menuContent.nativeElement;\n \n overflowItems.forEach(item => {\n // Si el elemento está en el dropdown, moverlo de vuelta al menu-content\n const dropdownContent = item.closest('.dropdown-content');\n if (dropdownContent && item.parentElement === dropdownContent) {\n // Ocultar el elemento y moverlo de vuelta al menu-content\n item.style.display = 'none';\n menuContent.appendChild(item);\n }\n });\n }\n\n toggleDropdown() {\n const newState = !this.isDropdownOpen();\n \n if (!newState) {\n // Si se está cerrando, restaurar los elementos a su posición original\n this.restoreOverflowItems();\n }\n \n this.isDropdownOpen.set(newState);\n\n if (newState) {\n // Recalcular overflow antes de abrir el dropdown\n setTimeout(() => {\n this.checkOverflow();\n // Esperar a que el dropdown esté en el DOM antes de actualizar\n this.waitForDropdownAndUpdate();\n }, 0);\n }\n }\n\n private waitForDropdownAndUpdate() {\n // Intentar actualizar el dropdown, reintentando si no está disponible\n const maxAttempts = 20;\n let attempts = 0;\n\n const tryUpdate = () => {\n attempts++;\n const menuWrapper = this.menuContainer.nativeElement.closest('.menu-wrapper');\n const dropdown = menuWrapper?.querySelector('.dropdown');\n \n if (dropdown) {\n this.updateDropdownContent();\n } else if (attempts < maxAttempts) {\n setTimeout(tryUpdate, 10);\n }\n };\n\n tryUpdate();\n }\n}","<div class=\"menu-wrapper\">\n <div class=\"menu\" #menuContainer>\n <div class=\"menu-content\" #menuContent>\n <ng-content></ng-content>\n </div>\n\n @if (showMoreButton()) {\n <button class=\"more-button\" (click)=\"toggleDropdown()\" [attr.aria-expanded]=\"isDropdownOpen()\" type=\"button\">\n <span>More</span>\n @if(isDropdownOpen()){\n <cat-icon size=\"16px\" name=\"chevron-arrow-up\"></cat-icon>\n } @else {\n <cat-icon size=\"16px\" name=\"chevron-arrow-down\"></cat-icon>\n }\n<!-- <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\"\n [style.transform]=\"isDropdownOpen() ? 'rotate(180deg)' : 'rotate(0deg)'\">\n <path d=\"M4 6l4 4 4-4z\" />\n </svg> -->\n </button>\n }\n </div>\n\n @if (showMoreButton() && isDropdownOpen()) {\n <div class=\"dropdown\" #dropdown>\n <div class=\"dropdown-content\">\n <!-- Aquí se moverán los elementos overflow -->\n </div>\n </div>\n }\n</div>","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\ninterface RGB {\n red: number;\n green: number;\n blue: number;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class Theming {\n //Light Theme = False\n private activeThemeSubject = new BehaviorSubject<boolean>(false);\n public activeTheme$ = this.activeThemeSubject.asObservable();\n\n //Palettes\n private allPalettesSubject = new BehaviorSubject<string[][]>([]);\n public allPalettes$ = this.allPalettesSubject.asObservable();\n\n generatePalettes(color: string, dark: boolean): string[][] {\n this.activeThemeSubject.next(dark);\n\n const primaryColors = this.calculatePrimaryColor(color);\n\n const dynamicPalettes = this.calculateDynamicPalettes(dark);\n\n //Assign All Palettes to Local Variables\n let allPalettes: string[][] = [primaryColors];\n\n allPalettes = allPalettes.concat([dynamicPalettes.neutral]);\n allPalettes = allPalettes.concat([dynamicPalettes.elements]);\n\n this.allPalettesSubject.next(allPalettes);\n\n //Apply theme\n this.applyTheme(allPalettes);\n\n return this.allPalettesSubject.value;\n }\n\n public calculatePrimaryColor(color: string) {\n //Step 1: Calculate the Color\n const colors = this.hexToRgb(color);\n\n //Step 2: Get the Primary Palette (static, doesn't change with theme)\n const primaryColors: string[] = this.palette(colors, false, 4); // Always use light theme\n\n const allPalettes = [\n primaryColors, // Keep primary (static)\n this.allPalettesSubject.value[1],\n this.allPalettesSubject.value[2]\n ];\n\n this.allPalettesSubject.next(allPalettes);\n\n this.applyTheme(allPalettes);\n \n return primaryColors;\n }\n\n public calculateDynamicPalettes(dark: boolean): { neutral: string[], elements: string[] } {\n const theme: boolean = dark;\n const contrastTheme: boolean = !dark;\n this.activeThemeSubject.next(dark);\n\n\n // Calculate neutral colors (changes with theme)\n const neutralColors: string[] = contrastTheme\n ? this.palette({ red: 255, green: 255, blue: 255 }, false, 9)\n : this.palette({ red: 0, green: 0, blue: 0 }, true, 9);\n\n // Calculate element colors (changes with theme)\n const elementsColors: string[] = this.elementsColors(theme, 3, 40);\n\n // Update palettes array with dynamic values\n const allPalettes = [\n this.allPalettesSubject.value[0], // Keep primary (static)\n neutralColors,\n elementsColors\n ];\n\n this.allPalettesSubject.next(allPalettes);\n\n // Apply theme to CSS variables\n this.applyTheme(allPalettes);\n\n return {\n neutral: neutralColors,\n elements: elementsColors\n };\n }\n\n private palette(colors: { red: number, green: number, blue: number }, dark: boolean, steps: number) {\n //Palette\n const colorsReturn: string[] = [];\n\n const contrastTheme: boolean = !dark;\n const target = contrastTheme ? 0 : 255;\n\n const umbralR = (target - colors.red) / steps;\n const umbralG = (target - colors.green) / steps;\n const umbralB = (target - colors.blue) / steps;\n\n for (let i = 0; i <= steps; i++) {\n const r = Math.round(colors.red + umbralR * i);\n const g = Math.round(colors.green + umbralG * i);\n const b = Math.round(colors.blue + umbralB * i);\n\n colorsReturn.push(`rgb(${r}, ${g}, ${b})`);\n }\n return colorsReturn;\n };\n\n private elementsColors(theme: boolean, iteration: number, amplitude: number) {\n amplitude = amplitude / iteration;\n const colorsReturn: string[] = [];\n for (let i = 0; i < 5; i++) {\n let r = theme ? 0 + ((85 - 0) / (5 - 1) * i) : 0 + ((255 - 0) / (5 - 1) * i);\n let g = theme ? 0 + ((85 - 0) / (5 - 1) * i) : 0 + ((255 - 0) / (5 - 1) * i);\n let b = theme ? 0 + ((85 - 0) / (5 - 1) * i) : 0 + ((255 - 0) / (5 - 1) * i);\n\n if (i <= iteration && theme === false) {\n r = r + amplitude;\n g = g + amplitude;\n b = b + amplitude;\n } else if (theme === false) {\n r = r - amplitude;\n g = g - amplitude;\n b = b - amplitude;\n }\n colorsReturn.push(`rgb(${r}, ${g},${b})`);\n };\n return colorsReturn;\n };\n\n private applyTheme(palettes: string[][]): void {\n if (typeof document === 'undefined') return;\n\n const root = document.documentElement;\n const cssVars = [\n { prefix: '--primary-color-', index: 0 },\n { prefix: '--neutral-color-', index: 1 },\n { prefix: '--element-color-', index: 2 }\n ];\n\n cssVars.forEach(({ prefix, index }) => {\n palettes[index]?.forEach((color, i) => {\n root.style.setProperty(`${prefix}${i}`, color);\n });\n });\n }\n\n private hexToRgb(hex: string): RGB {\n const value = parseInt(hex.replace('#', ''), 16);\n return {\n red: (value >> 16) & 255,\n green: (value >> 8) & 255,\n blue: value & 255,\n };\n }\n}","/*\n * Public API Surface of catarina\n */\n\n// design-system\nexport * from './lib/design-system/icon/icon';\nexport * from './lib/design-system/button/button';\n\n// Panels\nexport * from './lib/design-system/panels/card/card';\nexport * from './lib/design-system/panels/accordion/accordion';\nexport * from './lib/design-system/panels/accordion-group/accordion-group';\n\n//form\nexport * from './lib/design-system/form/cat-input/cat-input';\nexport * from './lib/design-system/form/color-input/color-input';\nexport * from './lib/design-system/form/select-input/select-input';\n\n//Pending https://tecsify.com/blog/input-en-html/\nexport * from './lib/design-system/form/date-input/date-input';\nexport * from './lib/design-system/form/file-input/file-input';\nexport * from './lib/design-system/form/password-input/password-input';\nexport * from './lib/design-system/form/range-input/range-input';\nexport * from './lib/design-system/form/text-area-input/text-area-input';\nexport * from './lib/design-system/form/time-input/time-input';\n/*\nimage, search, telefono, reset, radio button, checkbox, button, email\n*/\n\n//Overlays\n//Pending\nexport * from './lib/design-system/overlays/dialog/dialog';\nexport * from './lib/design-system/overlays/drawer/drawer';\nexport * from './lib/design-system/overlays/menu/menu';\n\n\n/*Services and Directives */\n\nexport * from './lib/directives/drag';\nexport * from './lib/theming/theming';\n\n// Tokens\nexport * from './lib/tokens/icon-provider.token';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["CButton","CAccordion","CIcon"],"mappings":"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"}
package/index.d.ts CHANGED
@@ -124,20 +124,29 @@ declare class ColorInput implements ControlValueAccessor {
124
124
  static ɵcmp: i0.ɵɵComponentDeclaration<ColorInput, "cat-color-input", never, { "icon": { "alias": "icon"; "required": false; }; "size": { "alias": "size"; "required": false; }; }, {}, never, never, true, never>;
125
125
  }
126
126
 
127
- declare class SelectInput implements ControlValueAccessor {
127
+ declare class SelectInput implements ControlValueAccessor, AfterViewInit, OnDestroy {
128
128
  private el;
129
129
  inputEl: ElementRef<HTMLElement>;
130
+ optionsContainer: ElementRef<HTMLElement>;
130
131
  transform?: string;
131
132
  options?: string[];
132
133
  placeholder: string;
133
134
  type: 'string' | 'number';
134
135
  value: string | number;
135
136
  active: boolean;
137
+ isInsideMenu: boolean;
136
138
  variant: 'surface' | 'elevated' | 'outlined';
137
139
  scrolleable: boolean;
138
140
  customClass: string;
139
141
  outerClick(event: Event): void;
142
+ private updateDropdownPosition;
143
+ toggleActive(): void;
140
144
  constructor(el: ElementRef);
145
+ private platformId;
146
+ private scrollHandler?;
147
+ private resizeHandler?;
148
+ ngAfterViewInit(): void;
149
+ ngOnDestroy(): void;
141
150
  onChange: (value: any) => void;
142
151
  onTouched: () => void;
143
152
  writeValue(value: any): void;
@@ -254,6 +263,7 @@ declare class Theming {
254
263
  private allPalettesSubject;
255
264
  allPalettes$: rxjs.Observable<string[][]>;
256
265
  generatePalettes(color: string, dark: boolean): string[][];
266
+ calculatePrimaryColor(color: string): string[];
257
267
  calculateDynamicPalettes(dark: boolean): {
258
268
  neutral: string[];
259
269
  elements: string[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "catarina",
3
- "version": "1.1.0",
3
+ "version": "1.1.1",
4
4
  "description": "Angular 20.3.0 UI Design System, preview: https://jpcn-portfolio.vercel.app/catarina-preview",
5
5
  "keywords": [
6
6
  "angular",
@@ -9,7 +9,7 @@
9
9
  "components",
10
10
  "hydenaky"
11
11
  ],
12
- "author": "hydenaky",
12
+ "author": "Juan Pablo Cañon N. (Hydenaky)",
13
13
  "license": "MIT",
14
14
  "repository": {
15
15
  "type": "git",