ngx-sp-infra 6.5.5 → 6.5.6

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.
@@ -9713,7 +9713,6 @@ class SearchInputComponent {
9713
9713
  this._telas = [];
9714
9714
  // #endregion PRIVATE
9715
9715
  // #region PUBLIC
9716
- this.showIcons = false;
9717
9716
  this.onClose = new EventEmitter();
9718
9717
  this.onSearch = new EventEmitter();
9719
9718
  this.searchQuery = '';
@@ -9729,31 +9728,18 @@ class SearchInputComponent {
9729
9728
  ngAfterViewInit() {
9730
9729
  this.focusInput();
9731
9730
  }
9732
- // #region ==========> UTILS <==========
9733
9731
  onKeydown(event) {
9734
9732
  if (event.key === 'Escape') {
9735
9733
  this.close();
9736
9734
  }
9737
9735
  }
9738
- navigateTo(route) {
9739
- this._router.navigate([route]).then(() => this.close());
9740
- }
9741
9736
  redirect(item) {
9742
- const hostname = window.location.host.includes("localhost") ? "siscandesv6.sispro.com.br" : window.location.host;
9743
- const baseURL = `https://${hostname}/SisproErpCloud`;
9744
- if (item.RotaV6 && item.RotaV6 !== '') {
9745
- // Normaliza os nomes para remover acentos
9746
- const nomeProjeto = item.Projeto.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
9747
- const nomeProjetoRota = item.RotaV6.split('/')[0].normalize('NFD').replace(/[\u0300-\u036f]/g, '');
9748
- let isCorporativo = nomeProjeto != nomeProjetoRota;
9749
- const targetRoute = `${baseURL}/${isCorporativo ? 'Corporativo/' : ''}${item.RotaV6}`;
9750
- window.location.assign(targetRoute);
9751
- }
9752
- else {
9753
- // Se a RotaOS começar com '/', não adiciona outra '/'
9754
- const targetRoute = `${baseURL}${item.RotaOS[0] === '/' ? '' : '/'}${item.RotaOS}`;
9755
- window.location.assign(targetRoute);
9756
- }
9737
+ // Decide which route to use: prefer RotaV6, otherwise RotaOS
9738
+ const routeToUse = (item.RotaV6 && item.RotaV6 !== '') ? item.RotaV6 : item.RotaOS;
9739
+ const targetRoute = this.formatBaseURL(item, routeToUse);
9740
+ // For debugging: log the computed URL. Navigation is intentionally commented out.
9741
+ console.log('Computed targetRoute:', targetRoute);
9742
+ window.location.assign(targetRoute);
9757
9743
  }
9758
9744
  highlightList(pesquisa) {
9759
9745
  const list = document.querySelector('.options-list')?.querySelectorAll('li');
@@ -9767,6 +9753,67 @@ class SearchInputComponent {
9767
9753
  target.innerHTML = highlighted;
9768
9754
  });
9769
9755
  }
9756
+ // FORMATAÇÃO DA ROTA
9757
+ /**
9758
+ * Formata a string de rota para usar no redirecionamento, pode ser OS ou V6.
9759
+ *
9760
+ * @param item Objeto selecionado da lista
9761
+ * @param route Rota desejada (OS ou V6)
9762
+ * @returns String formatada com a rota final
9763
+ *
9764
+ * * O método foi fortemente modificado pelo Github Copilot para rastrear todos os cenários
9765
+ */
9766
+ formatBaseURL(item, route) {
9767
+ // Return full target URL according to these scenarios:
9768
+ // - local + RotaV6 => http(s)://localhost:PORT/<rotaReduzida>
9769
+ // - local + RotaOS => https://<productionHost>/<rotaOS>
9770
+ // - server + RotaV6 => https://<serverHost>/<rotaV6>
9771
+ // - server + RotaOS => https://<serverHost>/<rotaOS>
9772
+ // Normalize route and item fields
9773
+ const routeStr = route || '';
9774
+ const isLocal = window.location.hostname.includes('localhost') || window.location.hostname === '127.0.0.1';
9775
+ // Production host to use when we need to redirect to server from local
9776
+ const productionHost = isLocal ? 'siscandesv6.sispro.com.br' : window.location.host;
9777
+ const protocol = window.location.protocol;
9778
+ const host = window.location.host;
9779
+ // Helper to remove diacritics / accents
9780
+ const normalizarString = (s) => (s || '').normalize('NFD').replace(/[\u0300-\u036f]/g, '');
9781
+ // Determine if given route corresponds to a V6 route (it will match item.RotaV6)
9782
+ const isV6 = item.RotaV6 && routeStr === item.RotaV6;
9783
+ const isOS = item.RotaOS && routeStr === item.RotaOS;
9784
+ // Normalize project names for comparison (remove accents)
9785
+ const nomeProjeto = normalizarString(item.Projeto || '');
9786
+ const primeiroSegmentoRota = routeStr.split('/')[0] || '';
9787
+ const nomeProjetoRota = normalizarString(primeiroSegmentoRota || '');
9788
+ // If the first segment of the route equals the project name, we may remove it for local V6 routing
9789
+ const primeiroSegmentoIsProjeto = nomeProjeto !== '' && nomeProjeto === nomeProjetoRota;
9790
+ // Build final URL
9791
+ let finalURL = '';
9792
+ if (isV6) {
9793
+ if (isLocal) {
9794
+ // On local, route should point to the local app. Remove first segment when it's the project name.
9795
+ const rotaReduzida = primeiroSegmentoIsProjeto && routeStr.includes('/') ? routeStr.split('/').slice(1).join('/') : routeStr;
9796
+ finalURL = `${protocol}//${host}/${rotaReduzida.replace(/^\/+/, '')}`;
9797
+ }
9798
+ else {
9799
+ // On server, use the server host and keep the full V6 route
9800
+ // If the route doesn't start with a product name, it's a Corporativo route
9801
+ const isCorporativo = !primeiroSegmentoIsProjeto;
9802
+ finalURL = `https://${host}/SisproErpCloud/${isCorporativo ? 'Corporativo/' : ''}${routeStr.replace(/^\/+/, '')}`;
9803
+ }
9804
+ }
9805
+ else if (isOS) {
9806
+ // RotaOS always points to the server (production) using https
9807
+ finalURL = `https://${productionHost}/${routeStr.replace(/^\/+/, '')}`;
9808
+ }
9809
+ else {
9810
+ // Fallback: if route is empty or not matched, return current origin
9811
+ finalURL = `${protocol}//${host}`;
9812
+ }
9813
+ console.log('[formatBaseURL] route:', routeStr);
9814
+ console.log('[formatBaseURL] finalURL:', finalURL);
9815
+ return finalURL;
9816
+ }
9770
9817
  // #region PESQUISA
9771
9818
  close() {
9772
9819
  this.onClose.emit();
@@ -9786,7 +9833,7 @@ class SearchInputComponent {
9786
9833
  this.searchInput.nativeElement.focus();
9787
9834
  }
9788
9835
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: SearchInputComponent, deps: [{ token: i1$3.Router }], target: i0.ɵɵFactoryTarget.Component }); }
9789
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: SearchInputComponent, isStandalone: true, selector: "lib-search-input, lib-pesquisa-global", inputs: { showIcons: "showIcons" }, outputs: { onClose: "onClose", onSearch: "onSearch" }, host: { listeners: { "document:keydown": "onKeydown($event)" } }, viewQueries: [{ propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true }], ngImport: i0, template: "<div class=\"search-overlay position-fixed w-100 h-100 d-flex flex-column align-items-center pt-3\">\n <div class=\"search-wrapper d-flex flex-column align-items-center w-100\" style=\"--max-width: 800px\">\n <div class=\"search-container w-100 bg-white d-flex flex-column align-items-start p-3 rounded\">\n <h6>\n <p class=\"fw-bold mb-0\"> Pesquisa global de telas entre os produtos adquiridos </p>\n <span class=\"text-muted fw-bold fst-italic\" style=\"font-size: 12px;\">(para fechar clique no bot\u00E3o ao lado ou aperte ESC)</span>\n </h6>\n\n <div class=\"input-group\">\n <span class=\"input-group-text d-flex align-items-center justify-content-center\" id=\"addon-wrapping\">\n\n @if (loading) { <lib-spinner [size]=\"20\" /> }\n @else { <lib-icon iconName=\"p-lupa\" [iconSize]=\"24\" /> }\n\n </span>\n <input #searchInput type=\"text\" class=\"form-control\" [(ngModel)]=\"searchQuery\" placeholder=\"Pesquise pelo nome da tela\"\n (input)=\"search()\" />\n <button (click)=\"resetSearch()\" class=\"btn btn-outline-primary\" tooltip=\"Limpar\" > <lib-icon iconName=\"p-lixeira\" iconSize=\"medium-small\" /> </button>\n <button (click)=\"close()\" class=\"btn btn-outline-primary\" tooltip=\"Fechar\" > <lib-icon iconName=\"p-fechar\" iconSize=\"medium-small\" /> </button>\n </div>\n <span class=\"text-muted fw-bold fst-italic\" style=\"font-size: 12px;\">Digite pelo menos 3 caracteres para pesquisar...</span>\n </div>\n\n <div class=\"search-results bg-white p-3 rounded mt-3 w-100\"\n [class]=\"(!filteredMenus || !filteredSubmenus || !filteredTelas) ? 'text-center' : ''\" >\n\n @defer (when filteredMenus || filteredSubmenus || filteredTelas) {\n <div class=\"scrollable-content d-flex flex-column gap-4 overflow-y-auto rounded\" style=\"--max-scrollable-height: 650px\">\n\n <div id=\"menus\">\n <h6 class=\"fw-bold\">Menus</h6>\n <ul class=\"options-list d-flex flex-column gap-2 p-0 m-0\">\n @for (menu of filteredMenus; track menu.Projeto+menu.Titulo) {\n <li (click)=\"redirect(menu)\" class=\"glb-cursor-pointer option py-1 px-2 rounded border d-flex align-items-center gap-2\">\n @if (menu.ProjetoIcone) { <lib-icon class=\"text-primary\" [iconName]=\"menu.ProjetoIcone\" iconSize=\"medium-small\" /> }\n <span class=\"fw-bold text-primary\"> {{ menu.Projeto }} </span>\n\n <span class=\"fw-bold\">\n / {{ menu.Titulo }}\n </span>\n </li>\n }\n @empty {\n <li class=\"list-group-item\"> Nenhum menu encontrado com este nome </li>\n }\n </ul>\n </div>\n\n <div id=\"submenus\">\n <h6 class=\"fw-bold\">Submenus</h6>\n <ul class=\"options-list d-flex flex-column gap-2 p-0 m-0\">\n @for (submenu of filteredSubmenus; track submenu.Projeto+submenu.Titulo) {\n <li (click)=\"redirect(submenu)\" class=\"glb-cursor-pointer option py-1 px-2 rounded border d-flex align-items-center gap-2\">\n @if (submenu.ProjetoIcone) { <lib-icon class=\"text-primary\" [iconName]=\"submenu.ProjetoIcone\" iconSize=\"medium-small\" /> }\n <span class=\"fw-bold text-primary\"> {{ submenu.Projeto }} </span>\n\n <span class=\"fw-bold\">\n / {{ submenu.Titulo }}\n </span>\n </li>\n }\n @empty {\n <li class=\"list-group-item\"> Nenhum submenu encontrado com este nome </li>\n }\n </ul>\n </div>\n\n <div id=\"telas\">\n <h6 class=\"fw-bold\">Telas</h6>\n <ul class=\"options-list d-flex flex-column gap-2 p-0 m-0\">\n @for (tela of filteredTelas; track tela.Projeto+tela.Titulo) {\n <li (click)=\"redirect(tela)\" class=\"glb-cursor-pointer option py-1 px-2 rounded border d-flex align-items-center gap-2\">\n @if (tela.ProjetoIcone) { <lib-icon class=\"text-primary\" [iconName]=\"tela.ProjetoIcone\" iconSize=\"medium-small\" /> }\n <span class=\"fw-bold text-primary\"> {{ tela.Projeto }} </span>\n\n <span class=\"fw-bold\">\n / {{ tela.Titulo }}\n </span>\n </li>\n }\n @empty {\n <li class=\"list-group-item\"> Nenhuma tela encontrada com este nome </li>\n }\n </ul>\n </div>\n\n\n <!-- TELAS DEPRECIADA -->\n <!-- <div id=\"telas\">\n <h6 class=\"fw-bold\">Telas</h6>\n <ul class=\"options-list d-flex flex-column gap-2 p-0 m-0\">\n @for (item of filteredItems; track item.modulo+item.label) {\n <li (click)=\"navigateTo(item.route)\" class=\"glb-cursor-pointer option py-1 px-2 rounded border d-flex align-items-center gap-2\">\n @if (item.icon) { <lib-icon class=\"text-primary\" [iconName]=\"item.icon\" iconSize=\"medium-small\" /> }\n <span class=\"fw-bold text-primary\"> {{ item.modulo ? item.modulo : '' }} </span>\n\n @if (item.menu) {\n <span class=\"fw-bold text-primary menu\">\n / @if (showIcons) { <lib-icon iconName=\"p-menu-hamburguer\" iconSize=\"small\" /> } {{ item.menu }}\n </span>\n }\n\n @if (item.submenu) {\n <span class=\"fw-bold text-primary submenu\">\n / @if (showIcons) { <lib-icon iconName=\"p-link\" iconSize=\"small\" /> } {{ item.submenu }}\n </span>\n }\n\n <span class=\"tela\"> {{ item.label }} </span>\n </li>\n }\n @empty {\n <li class=\"list-group-item\"> Nenhuma tela encontrada com este nome </li>\n }\n </ul>\n </div> -->\n\n </div>\n }\n @placeholder {\n <lib-spinner />\n }\n\n </div>\n </div>\n</div>", styles: [".search-overlay{top:0;left:0;background-color:#00000080;z-index:9999}.search-overlay .search-wrapper{max-width:var(--max-width)}.search-overlay .search-wrapper .search-container{box-shadow:0 4px 8px #0003}.search-overlay .search-wrapper .search-results{box-shadow:0 4px 8px #0003;max-width:var(--max-width)}.search-overlay .search-wrapper .search-results .scrollable-content{max-height:var(--max-scrollable-height)}.search-overlay .search-wrapper .search-results .scrollable-content::-webkit-scrollbar{width:4px;background:transparent}.search-overlay .search-wrapper .search-results .scrollable-content::-webkit-scrollbar-thumb{background-color:#636363;border-radius:16px}.search-overlay .search-wrapper .search-results .scrollable-content .options-list{list-style-type:none}.search-overlay .search-wrapper .search-results .scrollable-content .options-list .option{transition:all .2s ease}.search-overlay .search-wrapper .search-results .scrollable-content .options-list .option:hover{background-color:#e5e5e5}.bg-white{background-color:#fff!important}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: LibIconsComponent, selector: "lib-icon", inputs: ["iconName", "iconColor", "iconSize", "iconFill"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i1$4.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "component", type: LibSpinnerComponent, selector: "lib-spinner", inputs: ["type", "theme", "size", "helperText"] }], deferBlockDependencies: [() => [LibIconsComponent]] }); }
9836
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: SearchInputComponent, isStandalone: true, selector: "lib-search-input, lib-pesquisa-global", outputs: { onClose: "onClose", onSearch: "onSearch" }, host: { listeners: { "document:keydown": "onKeydown($event)" } }, viewQueries: [{ propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true }], ngImport: i0, template: "<div class=\"search-overlay position-fixed w-100 h-100 d-flex flex-column align-items-center pt-3\">\n <div class=\"search-wrapper d-flex flex-column align-items-center w-100\" style=\"--max-width: 800px\">\n <div class=\"search-container w-100 bg-white d-flex flex-column align-items-start p-3 rounded\">\n <h6>\n <p class=\"fw-bold mb-0\"> Pesquisa global de telas entre os produtos adquiridos </p>\n <span class=\"text-muted fw-bold fst-italic\" style=\"font-size: 12px;\">(para fechar clique no bot\u00E3o ao lado ou aperte ESC)</span>\n </h6>\n\n <div class=\"input-group\">\n <span class=\"input-group-text d-flex align-items-center justify-content-center\" id=\"addon-wrapping\">\n\n @if (loading) { <lib-spinner [size]=\"20\" /> }\n @else { <lib-icon iconName=\"p-lupa\" [iconSize]=\"24\" /> }\n\n </span>\n <input #searchInput type=\"text\" class=\"form-control\" [(ngModel)]=\"searchQuery\" placeholder=\"Pesquise pelo nome da tela\"\n (input)=\"search()\" />\n <button (click)=\"resetSearch()\" class=\"btn btn-outline-primary\" tooltip=\"Limpar\" > <lib-icon iconName=\"p-lixeira\" iconSize=\"medium-small\" /> </button>\n <button (click)=\"close()\" class=\"btn btn-outline-primary\" tooltip=\"Fechar\" > <lib-icon iconName=\"p-fechar\" iconSize=\"medium-small\" /> </button>\n </div>\n <span class=\"text-muted fw-bold fst-italic\" style=\"font-size: 12px;\">Digite pelo menos 3 caracteres para pesquisar...</span>\n </div>\n\n <div class=\"search-results bg-white p-3 rounded mt-3 w-100\"\n [class]=\"(!filteredMenus || !filteredSubmenus || !filteredTelas) ? 'text-center' : ''\" >\n\n @defer (when filteredMenus || filteredSubmenus || filteredTelas) {\n <div class=\"scrollable-content d-flex flex-column gap-4 overflow-y-auto rounded\" style=\"--max-scrollable-height: 650px\">\n\n <div id=\"menus\">\n <h6 class=\"fw-bold\">Menus</h6>\n <ul class=\"options-list d-flex flex-column gap-2 p-0 m-0\">\n @for (menu of filteredMenus; track menu.Projeto+menu.Titulo) {\n <li (click)=\"redirect(menu)\" class=\"glb-cursor-pointer option py-1 px-2 rounded border d-flex align-items-center gap-2\">\n @if (menu.ProjetoIcone) { <lib-icon class=\"text-primary\" [iconName]=\"menu.ProjetoIcone\" iconSize=\"medium-small\" /> }\n <span class=\"fw-bold text-primary\"> {{ menu.Projeto }} </span>\n\n <span class=\"fw-bold\">\n / {{ menu.Titulo }}\n </span>\n </li>\n }\n @empty {\n <li class=\"list-group-item\"> Nenhum menu encontrado com este nome </li>\n }\n </ul>\n </div>\n\n <div id=\"submenus\">\n <h6 class=\"fw-bold\">Submenus</h6>\n <ul class=\"options-list d-flex flex-column gap-2 p-0 m-0\">\n @for (submenu of filteredSubmenus; track submenu.Projeto+submenu.Titulo) {\n <li (click)=\"redirect(submenu)\" class=\"glb-cursor-pointer option py-1 px-2 rounded border d-flex align-items-center gap-2\">\n @if (submenu.ProjetoIcone) { <lib-icon class=\"text-primary\" [iconName]=\"submenu.ProjetoIcone\" iconSize=\"medium-small\" /> }\n <span class=\"fw-bold text-primary\"> {{ submenu.Projeto }} </span>\n\n <span class=\"fw-bold\">\n / {{ submenu.Titulo }}\n </span>\n </li>\n }\n @empty {\n <li class=\"list-group-item\"> Nenhum submenu encontrado com este nome </li>\n }\n </ul>\n </div>\n\n <div id=\"telas\">\n <h6 class=\"fw-bold\">Telas</h6>\n <ul class=\"options-list d-flex flex-column gap-2 p-0 m-0\">\n @for (tela of filteredTelas; track tela.Projeto+tela.Titulo) {\n <li (click)=\"redirect(tela)\" class=\"glb-cursor-pointer option py-1 px-2 rounded border d-flex align-items-center gap-2\">\n @if (tela.ProjetoIcone) { <lib-icon class=\"text-primary\" [iconName]=\"tela.ProjetoIcone\" iconSize=\"medium-small\" /> }\n <span class=\"fw-bold text-primary\"> {{ tela.Projeto }} </span>\n\n <span class=\"fw-bold\">\n / {{ tela.Titulo }}\n </span>\n </li>\n }\n @empty {\n <li class=\"list-group-item\"> Nenhuma tela encontrada com este nome </li>\n }\n </ul>\n </div>\n\n\n <!-- TELAS DEPRECIADA -->\n <!-- <div id=\"telas\">\n <h6 class=\"fw-bold\">Telas</h6>\n <ul class=\"options-list d-flex flex-column gap-2 p-0 m-0\">\n @for (item of filteredItems; track item.modulo+item.label) {\n <li (click)=\"navigateTo(item.route)\" class=\"glb-cursor-pointer option py-1 px-2 rounded border d-flex align-items-center gap-2\">\n @if (item.icon) { <lib-icon class=\"text-primary\" [iconName]=\"item.icon\" iconSize=\"medium-small\" /> }\n <span class=\"fw-bold text-primary\"> {{ item.modulo ? item.modulo : '' }} </span>\n\n @if (item.menu) {\n <span class=\"fw-bold text-primary menu\">\n / @if (showIcons) { <lib-icon iconName=\"p-menu-hamburguer\" iconSize=\"small\" /> } {{ item.menu }}\n </span>\n }\n\n @if (item.submenu) {\n <span class=\"fw-bold text-primary submenu\">\n / @if (showIcons) { <lib-icon iconName=\"p-link\" iconSize=\"small\" /> } {{ item.submenu }}\n </span>\n }\n\n <span class=\"tela\"> {{ item.label }} </span>\n </li>\n }\n @empty {\n <li class=\"list-group-item\"> Nenhuma tela encontrada com este nome </li>\n }\n </ul>\n </div> -->\n\n </div>\n }\n @placeholder {\n <lib-spinner />\n }\n\n </div>\n </div>\n</div>", styles: [".search-overlay{top:0;left:0;background-color:#00000080;z-index:9999}.search-overlay .search-wrapper{max-width:var(--max-width)}.search-overlay .search-wrapper .search-container{box-shadow:0 4px 8px #0003}.search-overlay .search-wrapper .search-results{box-shadow:0 4px 8px #0003;max-width:var(--max-width)}.search-overlay .search-wrapper .search-results .scrollable-content{max-height:var(--max-scrollable-height)}.search-overlay .search-wrapper .search-results .scrollable-content::-webkit-scrollbar{width:4px;background:transparent}.search-overlay .search-wrapper .search-results .scrollable-content::-webkit-scrollbar-thumb{background-color:#636363;border-radius:16px}.search-overlay .search-wrapper .search-results .scrollable-content .options-list{list-style-type:none}.search-overlay .search-wrapper .search-results .scrollable-content .options-list .option{transition:all .2s ease}.search-overlay .search-wrapper .search-results .scrollable-content .options-list .option:hover{background-color:#e5e5e5}.bg-white{background-color:#fff!important}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: LibIconsComponent, selector: "lib-icon", inputs: ["iconName", "iconColor", "iconSize", "iconFill"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i1$4.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "component", type: LibSpinnerComponent, selector: "lib-spinner", inputs: ["type", "theme", "size", "helperText"] }], deferBlockDependencies: [() => [LibIconsComponent]] }); }
9790
9837
  }
9791
9838
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: SearchInputComponent, decorators: [{
9792
9839
  type: Component,
@@ -9796,9 +9843,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImpo
9796
9843
  TooltipModule,
9797
9844
  LibSpinnerComponent
9798
9845
  ], template: "<div class=\"search-overlay position-fixed w-100 h-100 d-flex flex-column align-items-center pt-3\">\n <div class=\"search-wrapper d-flex flex-column align-items-center w-100\" style=\"--max-width: 800px\">\n <div class=\"search-container w-100 bg-white d-flex flex-column align-items-start p-3 rounded\">\n <h6>\n <p class=\"fw-bold mb-0\"> Pesquisa global de telas entre os produtos adquiridos </p>\n <span class=\"text-muted fw-bold fst-italic\" style=\"font-size: 12px;\">(para fechar clique no bot\u00E3o ao lado ou aperte ESC)</span>\n </h6>\n\n <div class=\"input-group\">\n <span class=\"input-group-text d-flex align-items-center justify-content-center\" id=\"addon-wrapping\">\n\n @if (loading) { <lib-spinner [size]=\"20\" /> }\n @else { <lib-icon iconName=\"p-lupa\" [iconSize]=\"24\" /> }\n\n </span>\n <input #searchInput type=\"text\" class=\"form-control\" [(ngModel)]=\"searchQuery\" placeholder=\"Pesquise pelo nome da tela\"\n (input)=\"search()\" />\n <button (click)=\"resetSearch()\" class=\"btn btn-outline-primary\" tooltip=\"Limpar\" > <lib-icon iconName=\"p-lixeira\" iconSize=\"medium-small\" /> </button>\n <button (click)=\"close()\" class=\"btn btn-outline-primary\" tooltip=\"Fechar\" > <lib-icon iconName=\"p-fechar\" iconSize=\"medium-small\" /> </button>\n </div>\n <span class=\"text-muted fw-bold fst-italic\" style=\"font-size: 12px;\">Digite pelo menos 3 caracteres para pesquisar...</span>\n </div>\n\n <div class=\"search-results bg-white p-3 rounded mt-3 w-100\"\n [class]=\"(!filteredMenus || !filteredSubmenus || !filteredTelas) ? 'text-center' : ''\" >\n\n @defer (when filteredMenus || filteredSubmenus || filteredTelas) {\n <div class=\"scrollable-content d-flex flex-column gap-4 overflow-y-auto rounded\" style=\"--max-scrollable-height: 650px\">\n\n <div id=\"menus\">\n <h6 class=\"fw-bold\">Menus</h6>\n <ul class=\"options-list d-flex flex-column gap-2 p-0 m-0\">\n @for (menu of filteredMenus; track menu.Projeto+menu.Titulo) {\n <li (click)=\"redirect(menu)\" class=\"glb-cursor-pointer option py-1 px-2 rounded border d-flex align-items-center gap-2\">\n @if (menu.ProjetoIcone) { <lib-icon class=\"text-primary\" [iconName]=\"menu.ProjetoIcone\" iconSize=\"medium-small\" /> }\n <span class=\"fw-bold text-primary\"> {{ menu.Projeto }} </span>\n\n <span class=\"fw-bold\">\n / {{ menu.Titulo }}\n </span>\n </li>\n }\n @empty {\n <li class=\"list-group-item\"> Nenhum menu encontrado com este nome </li>\n }\n </ul>\n </div>\n\n <div id=\"submenus\">\n <h6 class=\"fw-bold\">Submenus</h6>\n <ul class=\"options-list d-flex flex-column gap-2 p-0 m-0\">\n @for (submenu of filteredSubmenus; track submenu.Projeto+submenu.Titulo) {\n <li (click)=\"redirect(submenu)\" class=\"glb-cursor-pointer option py-1 px-2 rounded border d-flex align-items-center gap-2\">\n @if (submenu.ProjetoIcone) { <lib-icon class=\"text-primary\" [iconName]=\"submenu.ProjetoIcone\" iconSize=\"medium-small\" /> }\n <span class=\"fw-bold text-primary\"> {{ submenu.Projeto }} </span>\n\n <span class=\"fw-bold\">\n / {{ submenu.Titulo }}\n </span>\n </li>\n }\n @empty {\n <li class=\"list-group-item\"> Nenhum submenu encontrado com este nome </li>\n }\n </ul>\n </div>\n\n <div id=\"telas\">\n <h6 class=\"fw-bold\">Telas</h6>\n <ul class=\"options-list d-flex flex-column gap-2 p-0 m-0\">\n @for (tela of filteredTelas; track tela.Projeto+tela.Titulo) {\n <li (click)=\"redirect(tela)\" class=\"glb-cursor-pointer option py-1 px-2 rounded border d-flex align-items-center gap-2\">\n @if (tela.ProjetoIcone) { <lib-icon class=\"text-primary\" [iconName]=\"tela.ProjetoIcone\" iconSize=\"medium-small\" /> }\n <span class=\"fw-bold text-primary\"> {{ tela.Projeto }} </span>\n\n <span class=\"fw-bold\">\n / {{ tela.Titulo }}\n </span>\n </li>\n }\n @empty {\n <li class=\"list-group-item\"> Nenhuma tela encontrada com este nome </li>\n }\n </ul>\n </div>\n\n\n <!-- TELAS DEPRECIADA -->\n <!-- <div id=\"telas\">\n <h6 class=\"fw-bold\">Telas</h6>\n <ul class=\"options-list d-flex flex-column gap-2 p-0 m-0\">\n @for (item of filteredItems; track item.modulo+item.label) {\n <li (click)=\"navigateTo(item.route)\" class=\"glb-cursor-pointer option py-1 px-2 rounded border d-flex align-items-center gap-2\">\n @if (item.icon) { <lib-icon class=\"text-primary\" [iconName]=\"item.icon\" iconSize=\"medium-small\" /> }\n <span class=\"fw-bold text-primary\"> {{ item.modulo ? item.modulo : '' }} </span>\n\n @if (item.menu) {\n <span class=\"fw-bold text-primary menu\">\n / @if (showIcons) { <lib-icon iconName=\"p-menu-hamburguer\" iconSize=\"small\" /> } {{ item.menu }}\n </span>\n }\n\n @if (item.submenu) {\n <span class=\"fw-bold text-primary submenu\">\n / @if (showIcons) { <lib-icon iconName=\"p-link\" iconSize=\"small\" /> } {{ item.submenu }}\n </span>\n }\n\n <span class=\"tela\"> {{ item.label }} </span>\n </li>\n }\n @empty {\n <li class=\"list-group-item\"> Nenhuma tela encontrada com este nome </li>\n }\n </ul>\n </div> -->\n\n </div>\n }\n @placeholder {\n <lib-spinner />\n }\n\n </div>\n </div>\n</div>", styles: [".search-overlay{top:0;left:0;background-color:#00000080;z-index:9999}.search-overlay .search-wrapper{max-width:var(--max-width)}.search-overlay .search-wrapper .search-container{box-shadow:0 4px 8px #0003}.search-overlay .search-wrapper .search-results{box-shadow:0 4px 8px #0003;max-width:var(--max-width)}.search-overlay .search-wrapper .search-results .scrollable-content{max-height:var(--max-scrollable-height)}.search-overlay .search-wrapper .search-results .scrollable-content::-webkit-scrollbar{width:4px;background:transparent}.search-overlay .search-wrapper .search-results .scrollable-content::-webkit-scrollbar-thumb{background-color:#636363;border-radius:16px}.search-overlay .search-wrapper .search-results .scrollable-content .options-list{list-style-type:none}.search-overlay .search-wrapper .search-results .scrollable-content .options-list .option{transition:all .2s ease}.search-overlay .search-wrapper .search-results .scrollable-content .options-list .option:hover{background-color:#e5e5e5}.bg-white{background-color:#fff!important}\n"] }]
9799
- }], ctorParameters: () => [{ type: i1$3.Router }], propDecorators: { showIcons: [{
9800
- type: Input
9801
- }], onClose: [{
9846
+ }], ctorParameters: () => [{ type: i1$3.Router }], propDecorators: { onClose: [{
9802
9847
  type: Output
9803
9848
  }], onSearch: [{
9804
9849
  type: Output