@ah-oh/ao-workspaces-design-system 0.0.56 → 0.0.58

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.
@@ -2833,6 +2833,60 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImpo
2833
2833
  }, template: "<div class=\"ao-tabs__header\" role=\"tablist\">\n @for (panel of panels(); track panel.id()) {\n <button\n class=\"ao-tabs__tab\"\n role=\"tab\"\n type=\"button\"\n [class.ao-tabs__tab--active]=\"panel.id() === activeTab()\"\n [class.ao-tabs__tab--disabled]=\"panel.disabled()\"\n [attr.aria-selected]=\"panel.id() === activeTab()\"\n [attr.aria-controls]=\"'panel-' + panel.id()\"\n [attr.aria-disabled]=\"panel.disabled()\"\n [attr.data-tab-id]=\"panel.id()\"\n [attr.tabindex]=\"panel.id() === activeTab() ? 0 : -1\"\n [disabled]=\"panel.disabled()\"\n (click)=\"selectTab(panel)\"\n (keydown)=\"onKeydown($event, panel)\"\n >\n @if (panel.icon()) {\n <ao-icon [svg]=\"panel.icon()!\" size=\"sm\" />\n }\n {{ panel.label() }}\n </button>\n }\n</div>\n<div class=\"ao-tabs__content\">\n @for (panel of panels(); track panel.id()) {\n <div\n class=\"ao-tabs__panel\"\n role=\"tabpanel\"\n [id]=\"'panel-' + panel.id()\"\n [attr.aria-labelledby]=\"panel.id()\"\n [class.ao-tabs__panel--active]=\"panel.id() === activeTab()\"\n [attr.hidden]=\"panel.id() !== activeTab() ? true : null\"\n >\n @if (panel.id() === activeTab()) {\n <ng-container [ngTemplateOutlet]=\"panel.panelContent()\" />\n }\n </div>\n }\n</div>\n", styles: [":host{display:block}.ao-tabs__header{display:flex;gap:20px;border-bottom:1px solid #e9e9e9}.ao-tabs__tab{font-size:13px;font-weight:700;line-height:19.5px;letter-spacing:0;position:relative;display:inline-flex;align-items:center;gap:5px;padding:10px 5px;background:transparent;border:none;color:#212121;cursor:pointer;transition:color .2s ease}.ao-tabs__tab:after{content:\"\";position:absolute;bottom:0;left:0;right:0;height:3px;background:transparent;transition:background-color .2s ease}.ao-tabs__tab:hover:not(:disabled){color:#ff004d}.ao-tabs__tab:focus-visible{outline:2px solid #ff004d;outline-offset:2px}.ao-tabs__tab--active{color:#ff004d}.ao-tabs__tab--active:after{background:#ff004d}.ao-tabs__tab--disabled{color:#909090;cursor:not-allowed}.ao-tabs__content{padding-top:15px}.ao-tabs__panel[hidden]{display:none}\n"] }]
2834
2834
  }], propDecorators: { activeTab: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeTab", required: false }] }, { type: i0.Output, args: ["activeTabChange"] }], tabChange: [{ type: i0.Output, args: ["tabChange"] }], panels: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => TabPanelComponent), { isSignal: true }] }] } });
2835
2835
 
2836
+ function buildSearchPagesFromNavItems(items) {
2837
+ return buildSearchPages({ items });
2838
+ }
2839
+ function createSearchPageGroup(args) {
2840
+ const pages = filterSearchPages({ pages: args.pages, query: args.query });
2841
+ if (pages.length === 0)
2842
+ return null;
2843
+ const results = pages.map((page) => createSearchPageResult(page));
2844
+ return { type: 'page', label: 'Seiten', results, totalCount: results.length };
2845
+ }
2846
+ function filterSearchPages(args) {
2847
+ const normalizedQuery = normalizeSearchText(args.query);
2848
+ if (!normalizedQuery)
2849
+ return [];
2850
+ return args.pages.filter(page => getPageSearchText(page).includes(normalizedQuery));
2851
+ }
2852
+ function buildSearchPages(args) {
2853
+ return args.items.flatMap((item) => {
2854
+ const breadcrumb = [...(args.parentBreadcrumb ?? []), item.label];
2855
+ const page = createSearchPage(item, breadcrumb);
2856
+ const children = buildSearchPages({ items: item.children ?? [], parentBreadcrumb: breadcrumb });
2857
+ return page ? [page, ...children] : children;
2858
+ });
2859
+ }
2860
+ function createSearchPage(item, breadcrumb) {
2861
+ if (item.disabled || item.separator || !item.route)
2862
+ return null;
2863
+ return {
2864
+ id: item.id,
2865
+ label: item.label,
2866
+ route: item.route,
2867
+ breadcrumb,
2868
+ };
2869
+ }
2870
+ function createSearchPageResult(page) {
2871
+ return {
2872
+ id: `page:${page.id}`,
2873
+ type: 'page',
2874
+ primary: page.label,
2875
+ secondary: page.breadcrumb?.join(' / '),
2876
+ route: page.route,
2877
+ };
2878
+ }
2879
+ function getPageSearchText(page) {
2880
+ return normalizeSearchText([page.label, page.route, ...(page.breadcrumb ?? []), ...(page.keywords ?? [])].join(' '));
2881
+ }
2882
+ function normalizeSearchText(text) {
2883
+ return text
2884
+ .normalize('NFD')
2885
+ .replace(/[\u0300-\u036f]/g, '')
2886
+ .toLowerCase()
2887
+ .trim();
2888
+ }
2889
+
2836
2890
  class SideNavComponent {
2837
2891
  items = input([], ...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
2838
2892
  bottomItems = input([], ...(ngDevMode ? [{ debugName: "bottomItems" }] : /* istanbul ignore next */ []));
@@ -2914,6 +2968,7 @@ class AiSearchComponent {
2914
2968
  recommendedFilters = input([], ...(ngDevMode ? [{ debugName: "recommendedFilters" }] : /* istanbul ignore next */ []));
2915
2969
  activeFilter = model(null, ...(ngDevMode ? [{ debugName: "activeFilter" }] : /* istanbul ignore next */ []));
2916
2970
  resultGroups = input([], ...(ngDevMode ? [{ debugName: "resultGroups" }] : /* istanbul ignore next */ []));
2971
+ searchPages = input([], ...(ngDevMode ? [{ debugName: "searchPages" }] : /* istanbul ignore next */ []));
2917
2972
  pageSuggestion = input(null, ...(ngDevMode ? [{ debugName: "pageSuggestion" }] : /* istanbul ignore next */ []));
2918
2973
  aiSuggestions = input([], ...(ngDevMode ? [{ debugName: "aiSuggestions" }] : /* istanbul ignore next */ []));
2919
2974
  loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
@@ -2937,13 +2992,26 @@ class AiSearchComponent {
2937
2992
  isVoiceRecording = signal(false, ...(ngDevMode ? [{ debugName: "isVoiceRecording" }] : /* istanbul ignore next */ []));
2938
2993
  voiceError = signal(null, ...(ngDevMode ? [{ debugName: "voiceError" }] : /* istanbul ignore next */ []));
2939
2994
  voiceButtonLabel = computed(() => this.isVoiceRecording() ? 'Voice input stoppen' : 'Voice input starten', ...(ngDevMode ? [{ debugName: "voiceButtonLabel" }] : /* istanbul ignore next */ []));
2940
- effectiveError = computed(() => this.voiceError() ?? this.error(), ...(ngDevMode ? [{ debugName: "effectiveError" }] : /* istanbul ignore next */ []));
2941
2995
  searchInput = viewChild('searchInput', ...(ngDevMode ? [{ debugName: "searchInput" }] : /* istanbul ignore next */ []));
2942
2996
  speechRecognition = null;
2943
2997
  currentVoiceTranscript = '';
2998
+ effectiveResultGroups = computed(() => {
2999
+ if (this.activeFilter() !== null)
3000
+ return this.resultGroups();
3001
+ const pageGroup = createSearchPageGroup({ pages: this.searchPages(), query: this.value() });
3002
+ return pageGroup ? [pageGroup, ...this.resultGroups()] : this.resultGroups();
3003
+ }, ...(ngDevMode ? [{ debugName: "effectiveResultGroups" }] : /* istanbul ignore next */ []));
3004
+ effectiveError = computed(() => {
3005
+ const voiceError = this.voiceError();
3006
+ if (voiceError)
3007
+ return voiceError;
3008
+ if (this.effectiveResultGroups().length > 0)
3009
+ return null;
3010
+ return this.error();
3011
+ }, ...(ngDevMode ? [{ debugName: "effectiveError" }] : /* istanbul ignore next */ []));
2944
3012
  visibleResultGroups = computed(() => {
2945
3013
  let remaining = MAX_VISIBLE_RESULTS;
2946
- return this.resultGroups().reduce((groups, group) => {
3014
+ return this.effectiveResultGroups().reduce((groups, group) => {
2947
3015
  if (remaining <= 0) {
2948
3016
  return groups;
2949
3017
  }
@@ -2963,8 +3031,7 @@ class AiSearchComponent {
2963
3031
  }, ...(ngDevMode ? [{ debugName: "visibleAiSuggestions" }] : /* istanbul ignore next */ []));
2964
3032
  visibleResultCount = computed(() => this.visibleResultGroups().reduce((total, group) => total + group.results.length, 0) +
2965
3033
  this.visibleAiSuggestions().length, ...(ngDevMode ? [{ debugName: "visibleResultCount" }] : /* istanbul ignore next */ []));
2966
- totalResultCount = computed(() => this.resultGroups().reduce((total, group) => total + this.getGroupResultCount(group), 0) +
2967
- this.aiSuggestions().length, ...(ngDevMode ? [{ debugName: "totalResultCount" }] : /* istanbul ignore next */ []));
3034
+ totalResultCount = computed(() => this.effectiveResultGroups().reduce((total, group) => total + this.getGroupResultCount(group), 0) + this.aiSuggestions().length, ...(ngDevMode ? [{ debugName: "totalResultCount" }] : /* istanbul ignore next */ []));
2968
3035
  hasMoreResults = computed(() => this.totalResultCount() > MAX_VISIBLE_RESULTS, ...(ngDevMode ? [{ debugName: "hasMoreResults" }] : /* istanbul ignore next */ []));
2969
3036
  resultSummary = computed(() => {
2970
3037
  const total = this.totalResultCount();
@@ -3185,14 +3252,14 @@ class AiSearchComponent {
3185
3252
  return text.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
3186
3253
  }
3187
3254
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: AiSearchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3188
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.13", type: AiSearchComponent, isStandalone: true, selector: "ao-ai-search", inputs: { placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, recommendedFilters: { classPropertyName: "recommendedFilters", publicName: "recommendedFilters", isSignal: true, isRequired: false, transformFunction: null }, activeFilter: { classPropertyName: "activeFilter", publicName: "activeFilter", isSignal: true, isRequired: false, transformFunction: null }, resultGroups: { classPropertyName: "resultGroups", publicName: "resultGroups", isSignal: true, isRequired: false, transformFunction: null }, pageSuggestion: { classPropertyName: "pageSuggestion", publicName: "pageSuggestion", isSignal: true, isRequired: false, transformFunction: null }, aiSuggestions: { classPropertyName: "aiSuggestions", publicName: "aiSuggestions", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, panelOpen: { classPropertyName: "panelOpen", publicName: "panelOpen", isSignal: true, isRequired: false, transformFunction: null }, voiceLanguage: { classPropertyName: "voiceLanguage", publicName: "voiceLanguage", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", activeFilter: "activeFilterChange", panelOpen: "panelOpenChange", submit: "submit", voiceStart: "voiceStart", queryChange: "queryChange", filterSelect: "filterSelect", filterClear: "filterClear", resultSelect: "resultSelect", aiSuggestionSelect: "aiSuggestionSelect", pageSuggestionSelect: "pageSuggestionSelect", viewAllClick: "viewAllClick" }, host: { listeners: { "document:click": "onDocumentClick($event)" }, classAttribute: "ao-ai-search" }, viewQueries: [{ propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"ai-search\" [class.ai-search--open]=\"panelOpen() && hasPanelContent()\">\n <ao-icon [svg]=\"sparkleIcon\" size=\"sm\" class=\"ai-search__icon-left\" />\n @if (activeFilter(); as f) {\n <span class=\"ai-search__active-chip\" role=\"status\">\n <span class=\"ai-search__active-chip-label\">{{ f.label }}</span>\n <button\n type=\"button\"\n class=\"ai-search__active-chip-remove\"\n [disabled]=\"disabled()\"\n (click)=\"onChipRemove($event)\"\n [attr.aria-label]=\"'Filter ' + f.label + ' entfernen'\"\n >\n <ao-icon [svg]=\"closeIcon\" size=\"xs\" />\n </button>\n </span>\n }\n <input\n #searchInput\n type=\"text\"\n class=\"ai-search__input\"\n [placeholder]=\"effectivePlaceholder()\"\n [value]=\"value()\"\n [disabled]=\"disabled()\"\n (focus)=\"onFocus()\"\n (input)=\"onInput($event)\"\n (keydown.enter)=\"onEnter()\"\n (keydown.escape)=\"onEscape()\"\n (keydown.backspace)=\"onBackspace($event)\"\n aria-label=\"AI Search\"\n autocomplete=\"off\"\n />\n <button\n type=\"button\"\n class=\"ai-search__voice-btn\"\n [class.ai-search__voice-btn--recording]=\"isVoiceRecording()\"\n [disabled]=\"disabled()\"\n (click)=\"onVoiceClick()\"\n [attr.aria-label]=\"voiceButtonLabel()\"\n [attr.aria-pressed]=\"isVoiceRecording()\"\n >\n <ao-icon [svg]=\"micIcon\" size=\"sm\" />\n </button>\n</div>\n\n@if (panelOpen() && hasPanelContent()) {\n <div class=\"ai-search__panel\" role=\"listbox\">\n @if (effectiveError(); as msg) {\n <div class=\"ai-search__panel-section ai-search__status ai-search__status--error\">\n {{ msg }}\n </div>\n } @else if (value().length === 0) {\n @if (showRecommendedFilters()) {\n <div class=\"ai-search__panel-section\">\n <h4 class=\"ai-search__section-title\">Empfohlene Filter</h4>\n <div class=\"ai-search__filter-chips\">\n @for (f of recommendedFilters(); track f.id) {\n <button type=\"button\" class=\"ai-search__filter-chip\" (click)=\"onFilterClick(f)\">\n {{ f.label }}\n </button>\n }\n </div>\n </div>\n }\n } @else {\n @if (loading() && !hasAnyResults()) {\n <div class=\"ai-search__panel-section ai-search__status\">\n <span class=\"ai-search__spinner\" aria-hidden=\"true\"></span>\n Suche l\u00E4uft\u2026\n </div>\n } @else if (showNoResults()) {\n <div class=\"ai-search__panel-section ai-search__status\">Keine Ergebnisse gefunden</div>\n }\n @if (pageSuggestion(); as p) {\n <div class=\"ai-search__panel-section\">\n <h4 class=\"ai-search__section-title\">Pfad</h4>\n <button type=\"button\" class=\"ai-search__path-row\" (click)=\"onPathClick(p)\">\n @for (crumb of p.breadcrumb; track crumb; let last = $last) {\n <span class=\"ai-search__path-crumb\">{{ crumb }}</span>\n @if (!last) {\n <ao-icon [svg]=\"caretRightIcon\" size=\"sm\" class=\"ai-search__path-sep\" />\n }\n }\n </button>\n </div>\n }\n @for (group of visibleResultGroups(); track group.type) {\n <div class=\"ai-search__panel-section\">\n <h4 class=\"ai-search__section-title\">{{ group.label }}</h4>\n @for (r of group.results; track r.id) {\n <button type=\"button\" class=\"ai-search__result-row\" (click)=\"onResultClick(r)\">\n <span class=\"ai-search__result-primary\" [innerHTML]=\"highlight(r.primary)\"></span>\n </button>\n }\n </div>\n }\n @if (visibleAiSuggestions().length) {\n <div class=\"ai-search__panel-section\">\n <h4 class=\"ai-search__section-title\">KI-Vorschl\u00E4ge</h4>\n @for (r of visibleAiSuggestions(); track r.id) {\n <button type=\"button\" class=\"ai-search__ai-row\" (click)=\"onAiSuggestionClick(r)\">\n <ao-icon [svg]=\"sparkleIcon\" size=\"sm\" class=\"ai-search__ai-icon\" />\n <span [innerHTML]=\"highlight(r.primary)\"></span>\n </button>\n }\n </div>\n }\n @if (totalResultCount() > 0) {\n <div class=\"ai-search__result-summary\">\n {{ resultSummary() }}\n </div>\n }\n @if (hasMoreResults()) {\n <button type=\"button\" class=\"ai-search__view-all\" (click)=\"onViewAll()\">\n <span>Alle {{ totalResultCount() }} Ergebnisse anzeigen</span>\n <ao-icon [svg]=\"arrowRightIcon\" size=\"sm\" />\n </button>\n }\n }\n </div>\n}\n", styles: [":host{display:inline-block;position:relative}.ai-search{display:flex;align-items:center;gap:10px;width:400px;height:35px;padding:0 10px 0 15px;border:1px solid #223cff;background-color:#fff;border-radius:9999px;position:relative;z-index:2}.ai-search__icon-left{color:#223cff;flex-shrink:0}.ai-search__active-chip{display:inline-flex;align-items:center;gap:5px;height:23px;padding:0 5px 0 10px;background-color:#223cff14;color:#223cff;border:1px solid #223cff;border-radius:9999px;font-size:13px;font-weight:400;line-height:19.5px;letter-spacing:0;flex-shrink:0;max-width:50%}.ai-search__active-chip-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500}.ai-search__active-chip-remove{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;padding:0;border:none;border-radius:50%;background-color:transparent;color:inherit;cursor:pointer;flex-shrink:0}.ai-search__active-chip-remove:hover:not(:disabled){background-color:#00000014}.ai-search__active-chip-remove:focus-visible{outline:3px solid #223cff;outline-offset:1px}.ai-search__active-chip-remove:disabled{cursor:not-allowed;opacity:.5}.ai-search__input{flex:1;height:100%;padding:0;border:none;background:transparent;color:#212121;font-size:13px;font-weight:400;line-height:19.5px;letter-spacing:0}.ai-search__input::placeholder{color:#212121}.ai-search__input:focus{outline:none}.ai-search__input:disabled{cursor:not-allowed}.ai-search__voice-btn{display:flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:none;border-radius:50%;background-color:transparent;color:#212121;cursor:pointer;transition:color .2s ease;flex-shrink:0}.ai-search__voice-btn:hover:not(:disabled){color:#223cff}.ai-search__voice-btn--recording{color:#223cff;background-color:#223cff14}.ai-search__voice-btn:focus-visible{outline:3px solid #223cff;outline-offset:2px}.ai-search__voice-btn:disabled{opacity:.5;cursor:not-allowed}.ai-search__panel{position:absolute;top:45px;left:0;width:400px;max-height:70vh;overflow-y:auto;background-color:#fff;border:1px solid #e9e9e9;border-radius:5px;box-shadow:0 4px 16px #2121211a;z-index:10}.ai-search__panel-section{padding:15px 0;border-bottom:1px solid #e9e9e9}.ai-search__panel-section:last-of-type{border-bottom:none}.ai-search__section-title{margin:0 0 10px;padding:0 15px;font-size:12px;line-height:18px;letter-spacing:0;color:#909090;font-weight:500}.ai-search__filter-chips{display:flex;flex-direction:column;align-items:flex-start;gap:10px;padding:0 15px}.ai-search__filter-chip{display:inline-flex;align-items:center;padding:5px 15px;border:1px solid #e9e9e9;background-color:#fff;color:#212121;cursor:pointer;border-radius:9999px;font-size:13px;font-weight:400;line-height:19.5px;letter-spacing:0;transition:background-color .15s ease,border-color .15s ease}.ai-search__filter-chip:hover{background-color:#f3f3f3;border-color:#909090}.ai-search__filter-chip:focus-visible{outline:3px solid #223cff;outline-offset:2px}.ai-search__path-row,.ai-search__result-row,.ai-search__ai-row{display:flex;align-items:center;width:100%;padding:10px 15px;border:none;background:transparent;text-align:left;cursor:pointer;font-size:13px;font-weight:400;line-height:19.5px;letter-spacing:0;color:#212121}.ai-search__path-row:hover,.ai-search__result-row:hover,.ai-search__ai-row:hover{background-color:#f3f3f3}.ai-search__path-row:focus-visible,.ai-search__result-row:focus-visible,.ai-search__ai-row:focus-visible{outline:3px solid #223cff;outline-offset:-2px}.ai-search__path-row{gap:10px}.ai-search__path-sep{color:#909090}.ai-search__result-row{display:block;width:100%}.ai-search__result-primary{display:block;width:100%;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ai-search__ai-row{gap:10px}.ai-search__ai-icon{color:#223cff;flex-shrink:0}.ai-search__hl{background-color:#fff59d;color:inherit;padding:0;border-radius:2px}.ai-search__status{display:flex;align-items:center;gap:10px;padding:15px;color:#212121;font-size:13px;font-weight:400;line-height:19.5px;letter-spacing:0}.ai-search__status--error{color:#ff004d}.ai-search__result-summary{padding:10px 15px;border-top:1px solid #e9e9e9;color:#909090;font-size:12px;font-weight:500;line-height:18px;letter-spacing:0}.ai-search__spinner{display:inline-block;width:14px;height:14px;border:2px solid #e9e9e9;border-top-color:#223cff;border-radius:50%;animation:ao-ai-search-spin .8s linear infinite}@keyframes ao-ai-search-spin{to{transform:rotate(360deg)}}.ai-search__view-all{display:flex;align-items:center;justify-content:space-between;width:100%;padding:15px;border:none;border-top:1px solid #e9e9e9;background:transparent;cursor:pointer;text-align:left;color:#212121;font-size:13px;font-weight:400;line-height:19.5px;letter-spacing:0}.ai-search__view-all:hover{background-color:#f3f3f3}.ai-search__view-all:focus-visible{outline:3px solid #223cff;outline-offset:-2px}\n"], dependencies: [{ kind: "component", type: IconComponent, selector: "ao-icon", inputs: ["svg", "size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3255
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.13", type: AiSearchComponent, isStandalone: true, selector: "ao-ai-search", inputs: { placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, recommendedFilters: { classPropertyName: "recommendedFilters", publicName: "recommendedFilters", isSignal: true, isRequired: false, transformFunction: null }, activeFilter: { classPropertyName: "activeFilter", publicName: "activeFilter", isSignal: true, isRequired: false, transformFunction: null }, resultGroups: { classPropertyName: "resultGroups", publicName: "resultGroups", isSignal: true, isRequired: false, transformFunction: null }, searchPages: { classPropertyName: "searchPages", publicName: "searchPages", isSignal: true, isRequired: false, transformFunction: null }, pageSuggestion: { classPropertyName: "pageSuggestion", publicName: "pageSuggestion", isSignal: true, isRequired: false, transformFunction: null }, aiSuggestions: { classPropertyName: "aiSuggestions", publicName: "aiSuggestions", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, panelOpen: { classPropertyName: "panelOpen", publicName: "panelOpen", isSignal: true, isRequired: false, transformFunction: null }, voiceLanguage: { classPropertyName: "voiceLanguage", publicName: "voiceLanguage", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", activeFilter: "activeFilterChange", panelOpen: "panelOpenChange", submit: "submit", voiceStart: "voiceStart", queryChange: "queryChange", filterSelect: "filterSelect", filterClear: "filterClear", resultSelect: "resultSelect", aiSuggestionSelect: "aiSuggestionSelect", pageSuggestionSelect: "pageSuggestionSelect", viewAllClick: "viewAllClick" }, host: { listeners: { "document:click": "onDocumentClick($event)" }, classAttribute: "ao-ai-search" }, viewQueries: [{ propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"ai-search\" [class.ai-search--open]=\"panelOpen() && hasPanelContent()\">\n <ao-icon [svg]=\"sparkleIcon\" size=\"sm\" class=\"ai-search__icon-left\" />\n @if (activeFilter(); as f) {\n <span class=\"ai-search__active-chip\" role=\"status\">\n <span class=\"ai-search__active-chip-label\">{{ f.label }}</span>\n <button\n type=\"button\"\n class=\"ai-search__active-chip-remove\"\n [disabled]=\"disabled()\"\n (click)=\"onChipRemove($event)\"\n [attr.aria-label]=\"'Filter ' + f.label + ' entfernen'\"\n >\n <ao-icon [svg]=\"closeIcon\" size=\"xs\" />\n </button>\n </span>\n }\n <input\n #searchInput\n type=\"text\"\n class=\"ai-search__input\"\n [placeholder]=\"effectivePlaceholder()\"\n [value]=\"value()\"\n [disabled]=\"disabled()\"\n (focus)=\"onFocus()\"\n (input)=\"onInput($event)\"\n (keydown.enter)=\"onEnter()\"\n (keydown.escape)=\"onEscape()\"\n (keydown.backspace)=\"onBackspace($event)\"\n aria-label=\"AI Search\"\n autocomplete=\"off\"\n />\n <button\n type=\"button\"\n class=\"ai-search__voice-btn\"\n [class.ai-search__voice-btn--recording]=\"isVoiceRecording()\"\n [disabled]=\"disabled()\"\n (click)=\"onVoiceClick()\"\n [attr.aria-label]=\"voiceButtonLabel()\"\n [attr.aria-pressed]=\"isVoiceRecording()\"\n >\n <ao-icon [svg]=\"micIcon\" size=\"sm\" />\n </button>\n</div>\n\n@if (panelOpen() && hasPanelContent()) {\n <div class=\"ai-search__panel\" role=\"listbox\">\n @if (effectiveError(); as msg) {\n <div class=\"ai-search__panel-section ai-search__status ai-search__status--error\">\n {{ msg }}\n </div>\n } @else if (value().length === 0) {\n @if (showRecommendedFilters()) {\n <div class=\"ai-search__panel-section\">\n <h4 class=\"ai-search__section-title\">Empfohlene Filter</h4>\n <div class=\"ai-search__filter-chips\">\n @for (f of recommendedFilters(); track f.id) {\n <button type=\"button\" class=\"ai-search__filter-chip\" (click)=\"onFilterClick(f)\">\n {{ f.label }}\n </button>\n }\n </div>\n </div>\n }\n } @else {\n @if (loading() && !hasAnyResults()) {\n <div class=\"ai-search__panel-section ai-search__status\">\n <span class=\"ai-search__spinner\" aria-hidden=\"true\"></span>\n Suche l\u00E4uft\u2026\n </div>\n } @else if (showNoResults()) {\n <div class=\"ai-search__panel-section ai-search__status\">Keine Ergebnisse gefunden</div>\n }\n @if (pageSuggestion(); as p) {\n <div class=\"ai-search__panel-section\">\n <h4 class=\"ai-search__section-title\">Pfad</h4>\n <button type=\"button\" class=\"ai-search__path-row\" (click)=\"onPathClick(p)\">\n @for (crumb of p.breadcrumb; track crumb; let last = $last) {\n <span class=\"ai-search__path-crumb\">{{ crumb }}</span>\n @if (!last) {\n <ao-icon [svg]=\"caretRightIcon\" size=\"sm\" class=\"ai-search__path-sep\" />\n }\n }\n </button>\n </div>\n }\n @for (group of visibleResultGroups(); track group.type) {\n <div class=\"ai-search__panel-section\">\n <h4 class=\"ai-search__section-title\">{{ group.label }}</h4>\n @for (r of group.results; track r.id) {\n <button type=\"button\" class=\"ai-search__result-row\" (click)=\"onResultClick(r)\">\n <span class=\"ai-search__result-primary\" [innerHTML]=\"highlight(r.primary)\"></span>\n </button>\n }\n </div>\n }\n @if (visibleAiSuggestions().length) {\n <div class=\"ai-search__panel-section\">\n <h4 class=\"ai-search__section-title\">KI-Vorschl\u00E4ge</h4>\n @for (r of visibleAiSuggestions(); track r.id) {\n <button type=\"button\" class=\"ai-search__ai-row\" (click)=\"onAiSuggestionClick(r)\">\n <ao-icon [svg]=\"sparkleIcon\" size=\"sm\" class=\"ai-search__ai-icon\" />\n <span [innerHTML]=\"highlight(r.primary)\"></span>\n </button>\n }\n </div>\n }\n @if (totalResultCount() > 0) {\n <div class=\"ai-search__result-summary\">\n {{ resultSummary() }}\n </div>\n }\n @if (hasMoreResults()) {\n <button type=\"button\" class=\"ai-search__view-all\" (click)=\"onViewAll()\">\n <span>Alle {{ totalResultCount() }} Ergebnisse anzeigen</span>\n <ao-icon [svg]=\"arrowRightIcon\" size=\"sm\" />\n </button>\n }\n }\n </div>\n}\n", styles: [":host{display:inline-block;position:relative}.ai-search{display:flex;align-items:center;gap:10px;width:400px;height:35px;padding:0 10px 0 15px;border:1px solid #223cff;background-color:#fff;border-radius:9999px;position:relative;z-index:2}.ai-search__icon-left{color:#223cff;flex-shrink:0}.ai-search__active-chip{display:inline-flex;align-items:center;gap:5px;height:23px;padding:0 5px 0 10px;background-color:#223cff14;color:#223cff;border:1px solid #223cff;border-radius:9999px;font-size:13px;font-weight:400;line-height:19.5px;letter-spacing:0;flex-shrink:0;max-width:50%}.ai-search__active-chip-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500}.ai-search__active-chip-remove{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;padding:0;border:none;border-radius:50%;background-color:transparent;color:inherit;cursor:pointer;flex-shrink:0}.ai-search__active-chip-remove:hover:not(:disabled){background-color:#00000014}.ai-search__active-chip-remove:focus-visible{outline:3px solid #223cff;outline-offset:1px}.ai-search__active-chip-remove:disabled{cursor:not-allowed;opacity:.5}.ai-search__input{flex:1;height:100%;padding:0;border:none;background:transparent;color:#212121;font-size:13px;font-weight:400;line-height:19.5px;letter-spacing:0}.ai-search__input::placeholder{color:#212121}.ai-search__input:focus{outline:none}.ai-search__input:disabled{cursor:not-allowed}.ai-search__voice-btn{display:flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:none;border-radius:50%;background-color:transparent;color:#212121;cursor:pointer;transition:color .2s ease;flex-shrink:0}.ai-search__voice-btn:hover:not(:disabled){color:#223cff}.ai-search__voice-btn--recording{color:#223cff;background-color:#223cff14}.ai-search__voice-btn:focus-visible{outline:3px solid #223cff;outline-offset:2px}.ai-search__voice-btn:disabled{opacity:.5;cursor:not-allowed}.ai-search__panel{position:absolute;top:45px;left:0;width:400px;max-height:70vh;overflow-y:auto;background-color:#fff;border:1px solid #e9e9e9;border-radius:5px;box-shadow:0 4px 16px #2121211a;z-index:10}.ai-search__panel-section{padding:15px 0;border-bottom:1px solid #e9e9e9}.ai-search__panel-section:last-of-type{border-bottom:none}.ai-search__section-title{margin:0 0 10px;padding:0 15px;font-size:12px;line-height:18px;letter-spacing:0;color:#909090;font-weight:500}.ai-search__filter-chips{display:flex;flex-direction:column;align-items:flex-start;gap:10px;padding:0 15px}.ai-search__filter-chip{display:inline-flex;align-items:center;padding:5px 15px;border:1px solid #e9e9e9;background-color:#fff;color:#212121;cursor:pointer;border-radius:9999px;font-size:13px;font-weight:400;line-height:19.5px;letter-spacing:0;transition:background-color .15s ease,border-color .15s ease}.ai-search__filter-chip:hover{background-color:#f3f3f3;border-color:#909090}.ai-search__filter-chip:focus-visible{outline:3px solid #223cff;outline-offset:2px}.ai-search__path-row,.ai-search__result-row,.ai-search__ai-row{display:flex;align-items:center;width:100%;padding:10px 15px;border:none;background:transparent;text-align:left;cursor:pointer;font-size:13px;font-weight:400;line-height:19.5px;letter-spacing:0;color:#212121}.ai-search__path-row:hover,.ai-search__result-row:hover,.ai-search__ai-row:hover{background-color:#f3f3f3}.ai-search__path-row:focus-visible,.ai-search__result-row:focus-visible,.ai-search__ai-row:focus-visible{outline:3px solid #223cff;outline-offset:-2px}.ai-search__path-row{gap:10px}.ai-search__path-sep{color:#909090}.ai-search__result-row{display:block;width:100%}.ai-search__result-primary{display:block;width:100%;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ai-search__ai-row{gap:10px}.ai-search__ai-icon{color:#223cff;flex-shrink:0}.ai-search__hl{background-color:#fff59d;color:inherit;padding:0;border-radius:2px}.ai-search__status{display:flex;align-items:center;gap:10px;padding:15px;color:#212121;font-size:13px;font-weight:400;line-height:19.5px;letter-spacing:0}.ai-search__status--error{color:#ff004d}.ai-search__result-summary{padding:10px 15px;border-top:1px solid #e9e9e9;color:#909090;font-size:12px;font-weight:500;line-height:18px;letter-spacing:0}.ai-search__spinner{display:inline-block;width:14px;height:14px;border:2px solid #e9e9e9;border-top-color:#223cff;border-radius:50%;animation:ao-ai-search-spin .8s linear infinite}@keyframes ao-ai-search-spin{to{transform:rotate(360deg)}}.ai-search__view-all{display:flex;align-items:center;justify-content:space-between;width:100%;padding:15px;border:none;border-top:1px solid #e9e9e9;background:transparent;cursor:pointer;text-align:left;color:#212121;font-size:13px;font-weight:400;line-height:19.5px;letter-spacing:0}.ai-search__view-all:hover{background-color:#f3f3f3}.ai-search__view-all:focus-visible{outline:3px solid #223cff;outline-offset:-2px}\n"], dependencies: [{ kind: "component", type: IconComponent, selector: "ao-icon", inputs: ["svg", "size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3189
3256
  }
3190
3257
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: AiSearchComponent, decorators: [{
3191
3258
  type: Component,
3192
3259
  args: [{ selector: 'ao-ai-search', imports: [IconComponent], changeDetection: ChangeDetectionStrategy.OnPush, host: {
3193
3260
  class: 'ao-ai-search',
3194
3261
  }, template: "<div class=\"ai-search\" [class.ai-search--open]=\"panelOpen() && hasPanelContent()\">\n <ao-icon [svg]=\"sparkleIcon\" size=\"sm\" class=\"ai-search__icon-left\" />\n @if (activeFilter(); as f) {\n <span class=\"ai-search__active-chip\" role=\"status\">\n <span class=\"ai-search__active-chip-label\">{{ f.label }}</span>\n <button\n type=\"button\"\n class=\"ai-search__active-chip-remove\"\n [disabled]=\"disabled()\"\n (click)=\"onChipRemove($event)\"\n [attr.aria-label]=\"'Filter ' + f.label + ' entfernen'\"\n >\n <ao-icon [svg]=\"closeIcon\" size=\"xs\" />\n </button>\n </span>\n }\n <input\n #searchInput\n type=\"text\"\n class=\"ai-search__input\"\n [placeholder]=\"effectivePlaceholder()\"\n [value]=\"value()\"\n [disabled]=\"disabled()\"\n (focus)=\"onFocus()\"\n (input)=\"onInput($event)\"\n (keydown.enter)=\"onEnter()\"\n (keydown.escape)=\"onEscape()\"\n (keydown.backspace)=\"onBackspace($event)\"\n aria-label=\"AI Search\"\n autocomplete=\"off\"\n />\n <button\n type=\"button\"\n class=\"ai-search__voice-btn\"\n [class.ai-search__voice-btn--recording]=\"isVoiceRecording()\"\n [disabled]=\"disabled()\"\n (click)=\"onVoiceClick()\"\n [attr.aria-label]=\"voiceButtonLabel()\"\n [attr.aria-pressed]=\"isVoiceRecording()\"\n >\n <ao-icon [svg]=\"micIcon\" size=\"sm\" />\n </button>\n</div>\n\n@if (panelOpen() && hasPanelContent()) {\n <div class=\"ai-search__panel\" role=\"listbox\">\n @if (effectiveError(); as msg) {\n <div class=\"ai-search__panel-section ai-search__status ai-search__status--error\">\n {{ msg }}\n </div>\n } @else if (value().length === 0) {\n @if (showRecommendedFilters()) {\n <div class=\"ai-search__panel-section\">\n <h4 class=\"ai-search__section-title\">Empfohlene Filter</h4>\n <div class=\"ai-search__filter-chips\">\n @for (f of recommendedFilters(); track f.id) {\n <button type=\"button\" class=\"ai-search__filter-chip\" (click)=\"onFilterClick(f)\">\n {{ f.label }}\n </button>\n }\n </div>\n </div>\n }\n } @else {\n @if (loading() && !hasAnyResults()) {\n <div class=\"ai-search__panel-section ai-search__status\">\n <span class=\"ai-search__spinner\" aria-hidden=\"true\"></span>\n Suche l\u00E4uft\u2026\n </div>\n } @else if (showNoResults()) {\n <div class=\"ai-search__panel-section ai-search__status\">Keine Ergebnisse gefunden</div>\n }\n @if (pageSuggestion(); as p) {\n <div class=\"ai-search__panel-section\">\n <h4 class=\"ai-search__section-title\">Pfad</h4>\n <button type=\"button\" class=\"ai-search__path-row\" (click)=\"onPathClick(p)\">\n @for (crumb of p.breadcrumb; track crumb; let last = $last) {\n <span class=\"ai-search__path-crumb\">{{ crumb }}</span>\n @if (!last) {\n <ao-icon [svg]=\"caretRightIcon\" size=\"sm\" class=\"ai-search__path-sep\" />\n }\n }\n </button>\n </div>\n }\n @for (group of visibleResultGroups(); track group.type) {\n <div class=\"ai-search__panel-section\">\n <h4 class=\"ai-search__section-title\">{{ group.label }}</h4>\n @for (r of group.results; track r.id) {\n <button type=\"button\" class=\"ai-search__result-row\" (click)=\"onResultClick(r)\">\n <span class=\"ai-search__result-primary\" [innerHTML]=\"highlight(r.primary)\"></span>\n </button>\n }\n </div>\n }\n @if (visibleAiSuggestions().length) {\n <div class=\"ai-search__panel-section\">\n <h4 class=\"ai-search__section-title\">KI-Vorschl\u00E4ge</h4>\n @for (r of visibleAiSuggestions(); track r.id) {\n <button type=\"button\" class=\"ai-search__ai-row\" (click)=\"onAiSuggestionClick(r)\">\n <ao-icon [svg]=\"sparkleIcon\" size=\"sm\" class=\"ai-search__ai-icon\" />\n <span [innerHTML]=\"highlight(r.primary)\"></span>\n </button>\n }\n </div>\n }\n @if (totalResultCount() > 0) {\n <div class=\"ai-search__result-summary\">\n {{ resultSummary() }}\n </div>\n }\n @if (hasMoreResults()) {\n <button type=\"button\" class=\"ai-search__view-all\" (click)=\"onViewAll()\">\n <span>Alle {{ totalResultCount() }} Ergebnisse anzeigen</span>\n <ao-icon [svg]=\"arrowRightIcon\" size=\"sm\" />\n </button>\n }\n }\n </div>\n}\n", styles: [":host{display:inline-block;position:relative}.ai-search{display:flex;align-items:center;gap:10px;width:400px;height:35px;padding:0 10px 0 15px;border:1px solid #223cff;background-color:#fff;border-radius:9999px;position:relative;z-index:2}.ai-search__icon-left{color:#223cff;flex-shrink:0}.ai-search__active-chip{display:inline-flex;align-items:center;gap:5px;height:23px;padding:0 5px 0 10px;background-color:#223cff14;color:#223cff;border:1px solid #223cff;border-radius:9999px;font-size:13px;font-weight:400;line-height:19.5px;letter-spacing:0;flex-shrink:0;max-width:50%}.ai-search__active-chip-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500}.ai-search__active-chip-remove{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;padding:0;border:none;border-radius:50%;background-color:transparent;color:inherit;cursor:pointer;flex-shrink:0}.ai-search__active-chip-remove:hover:not(:disabled){background-color:#00000014}.ai-search__active-chip-remove:focus-visible{outline:3px solid #223cff;outline-offset:1px}.ai-search__active-chip-remove:disabled{cursor:not-allowed;opacity:.5}.ai-search__input{flex:1;height:100%;padding:0;border:none;background:transparent;color:#212121;font-size:13px;font-weight:400;line-height:19.5px;letter-spacing:0}.ai-search__input::placeholder{color:#212121}.ai-search__input:focus{outline:none}.ai-search__input:disabled{cursor:not-allowed}.ai-search__voice-btn{display:flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:none;border-radius:50%;background-color:transparent;color:#212121;cursor:pointer;transition:color .2s ease;flex-shrink:0}.ai-search__voice-btn:hover:not(:disabled){color:#223cff}.ai-search__voice-btn--recording{color:#223cff;background-color:#223cff14}.ai-search__voice-btn:focus-visible{outline:3px solid #223cff;outline-offset:2px}.ai-search__voice-btn:disabled{opacity:.5;cursor:not-allowed}.ai-search__panel{position:absolute;top:45px;left:0;width:400px;max-height:70vh;overflow-y:auto;background-color:#fff;border:1px solid #e9e9e9;border-radius:5px;box-shadow:0 4px 16px #2121211a;z-index:10}.ai-search__panel-section{padding:15px 0;border-bottom:1px solid #e9e9e9}.ai-search__panel-section:last-of-type{border-bottom:none}.ai-search__section-title{margin:0 0 10px;padding:0 15px;font-size:12px;line-height:18px;letter-spacing:0;color:#909090;font-weight:500}.ai-search__filter-chips{display:flex;flex-direction:column;align-items:flex-start;gap:10px;padding:0 15px}.ai-search__filter-chip{display:inline-flex;align-items:center;padding:5px 15px;border:1px solid #e9e9e9;background-color:#fff;color:#212121;cursor:pointer;border-radius:9999px;font-size:13px;font-weight:400;line-height:19.5px;letter-spacing:0;transition:background-color .15s ease,border-color .15s ease}.ai-search__filter-chip:hover{background-color:#f3f3f3;border-color:#909090}.ai-search__filter-chip:focus-visible{outline:3px solid #223cff;outline-offset:2px}.ai-search__path-row,.ai-search__result-row,.ai-search__ai-row{display:flex;align-items:center;width:100%;padding:10px 15px;border:none;background:transparent;text-align:left;cursor:pointer;font-size:13px;font-weight:400;line-height:19.5px;letter-spacing:0;color:#212121}.ai-search__path-row:hover,.ai-search__result-row:hover,.ai-search__ai-row:hover{background-color:#f3f3f3}.ai-search__path-row:focus-visible,.ai-search__result-row:focus-visible,.ai-search__ai-row:focus-visible{outline:3px solid #223cff;outline-offset:-2px}.ai-search__path-row{gap:10px}.ai-search__path-sep{color:#909090}.ai-search__result-row{display:block;width:100%}.ai-search__result-primary{display:block;width:100%;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ai-search__ai-row{gap:10px}.ai-search__ai-icon{color:#223cff;flex-shrink:0}.ai-search__hl{background-color:#fff59d;color:inherit;padding:0;border-radius:2px}.ai-search__status{display:flex;align-items:center;gap:10px;padding:15px;color:#212121;font-size:13px;font-weight:400;line-height:19.5px;letter-spacing:0}.ai-search__status--error{color:#ff004d}.ai-search__result-summary{padding:10px 15px;border-top:1px solid #e9e9e9;color:#909090;font-size:12px;font-weight:500;line-height:18px;letter-spacing:0}.ai-search__spinner{display:inline-block;width:14px;height:14px;border:2px solid #e9e9e9;border-top-color:#223cff;border-radius:50%;animation:ao-ai-search-spin .8s linear infinite}@keyframes ao-ai-search-spin{to{transform:rotate(360deg)}}.ai-search__view-all{display:flex;align-items:center;justify-content:space-between;width:100%;padding:15px;border:none;border-top:1px solid #e9e9e9;background:transparent;cursor:pointer;text-align:left;color:#212121;font-size:13px;font-weight:400;line-height:19.5px;letter-spacing:0}.ai-search__view-all:hover{background-color:#f3f3f3}.ai-search__view-all:focus-visible{outline:3px solid #223cff;outline-offset:-2px}\n"] }]
3195
- }], propDecorators: { placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], recommendedFilters: [{ type: i0.Input, args: [{ isSignal: true, alias: "recommendedFilters", required: false }] }], activeFilter: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeFilter", required: false }] }, { type: i0.Output, args: ["activeFilterChange"] }], resultGroups: [{ type: i0.Input, args: [{ isSignal: true, alias: "resultGroups", required: false }] }], pageSuggestion: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageSuggestion", required: false }] }], aiSuggestions: [{ type: i0.Input, args: [{ isSignal: true, alias: "aiSuggestions", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }], panelOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "panelOpen", required: false }] }, { type: i0.Output, args: ["panelOpenChange"] }], voiceLanguage: [{ type: i0.Input, args: [{ isSignal: true, alias: "voiceLanguage", required: false }] }], submit: [{ type: i0.Output, args: ["submit"] }], voiceStart: [{ type: i0.Output, args: ["voiceStart"] }], queryChange: [{ type: i0.Output, args: ["queryChange"] }], filterSelect: [{ type: i0.Output, args: ["filterSelect"] }], filterClear: [{ type: i0.Output, args: ["filterClear"] }], resultSelect: [{ type: i0.Output, args: ["resultSelect"] }], aiSuggestionSelect: [{ type: i0.Output, args: ["aiSuggestionSelect"] }], pageSuggestionSelect: [{ type: i0.Output, args: ["pageSuggestionSelect"] }], viewAllClick: [{ type: i0.Output, args: ["viewAllClick"] }], searchInput: [{ type: i0.ViewChild, args: ['searchInput', { isSignal: true }] }], onDocumentClick: [{
3262
+ }], propDecorators: { placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], recommendedFilters: [{ type: i0.Input, args: [{ isSignal: true, alias: "recommendedFilters", required: false }] }], activeFilter: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeFilter", required: false }] }, { type: i0.Output, args: ["activeFilterChange"] }], resultGroups: [{ type: i0.Input, args: [{ isSignal: true, alias: "resultGroups", required: false }] }], searchPages: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchPages", required: false }] }], pageSuggestion: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageSuggestion", required: false }] }], aiSuggestions: [{ type: i0.Input, args: [{ isSignal: true, alias: "aiSuggestions", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }], panelOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "panelOpen", required: false }] }, { type: i0.Output, args: ["panelOpenChange"] }], voiceLanguage: [{ type: i0.Input, args: [{ isSignal: true, alias: "voiceLanguage", required: false }] }], submit: [{ type: i0.Output, args: ["submit"] }], voiceStart: [{ type: i0.Output, args: ["voiceStart"] }], queryChange: [{ type: i0.Output, args: ["queryChange"] }], filterSelect: [{ type: i0.Output, args: ["filterSelect"] }], filterClear: [{ type: i0.Output, args: ["filterClear"] }], resultSelect: [{ type: i0.Output, args: ["resultSelect"] }], aiSuggestionSelect: [{ type: i0.Output, args: ["aiSuggestionSelect"] }], pageSuggestionSelect: [{ type: i0.Output, args: ["pageSuggestionSelect"] }], viewAllClick: [{ type: i0.Output, args: ["viewAllClick"] }], searchInput: [{ type: i0.ViewChild, args: ['searchInput', { isSignal: true }] }], onDocumentClick: [{
3196
3263
  type: HostListener,
3197
3264
  args: ['document:click', ['$event']]
3198
3265
  }] } });
@@ -5334,10 +5401,30 @@ class WorkspaceNavbarService {
5334
5401
  return app.baseUrl;
5335
5402
  }
5336
5403
  buildJwtRedirectUrl(arg) {
5337
- const url = new URL(arg.targetUrl, window.location.origin);
5404
+ const targetUrl = this.normalizeTargetUrl(arg.targetUrl);
5405
+ const url = new URL(targetUrl, window.location.origin);
5338
5406
  url.searchParams.set('jwtKey', arg.jwtKey);
5339
5407
  return url.toString();
5340
5408
  }
5409
+ normalizeTargetUrl(targetUrl) {
5410
+ const normalizedUrl = targetUrl.trim();
5411
+ if (!normalizedUrl)
5412
+ return window.location.origin;
5413
+ if (this.hasUrlProtocol(normalizedUrl) ||
5414
+ normalizedUrl.startsWith('/') ||
5415
+ normalizedUrl.startsWith('#')) {
5416
+ return normalizedUrl;
5417
+ }
5418
+ if (this.isLocalTargetUrl(normalizedUrl))
5419
+ return `http://${normalizedUrl}`;
5420
+ return `https://${normalizedUrl}`;
5421
+ }
5422
+ hasUrlProtocol(targetUrl) {
5423
+ return /^[a-z][a-z\d+\-.]*:\/\//i.test(targetUrl);
5424
+ }
5425
+ isLocalTargetUrl(targetUrl) {
5426
+ return /^(localhost|127(?:\.\d{1,3}){3}|\[::1\])(?::|\/|$)/i.test(targetUrl);
5427
+ }
5341
5428
  buildLoginPathUrl(path, params) {
5342
5429
  const baseUrl = this.loginUrl.endsWith('/') ? this.loginUrl : `${this.loginUrl}/`;
5343
5430
  const url = new URL(path, baseUrl);
@@ -5998,6 +6085,7 @@ class TopNavComponent {
5998
6085
  recommendedFilters = input([], ...(ngDevMode ? [{ debugName: "recommendedFilters" }] : /* istanbul ignore next */ []));
5999
6086
  activeFilter = model(null, ...(ngDevMode ? [{ debugName: "activeFilter" }] : /* istanbul ignore next */ []));
6000
6087
  resultGroups = input([], ...(ngDevMode ? [{ debugName: "resultGroups" }] : /* istanbul ignore next */ []));
6088
+ searchPages = input(null, ...(ngDevMode ? [{ debugName: "searchPages" }] : /* istanbul ignore next */ []));
6001
6089
  pageSuggestion = input(null, ...(ngDevMode ? [{ debugName: "pageSuggestion" }] : /* istanbul ignore next */ []));
6002
6090
  aiSuggestions = input([], ...(ngDevMode ? [{ debugName: "aiSuggestions" }] : /* istanbul ignore next */ []));
6003
6091
  searchLoading = input(false, ...(ngDevMode ? [{ debugName: "searchLoading" }] : /* istanbul ignore next */ []));
@@ -6024,6 +6112,9 @@ class TopNavComponent {
6024
6112
  const activeId = this.activeItemId();
6025
6113
  return this.items().findIndex(item => item.id === activeId);
6026
6114
  }, ...(ngDevMode ? [{ debugName: "activeIndex" }] : /* istanbul ignore next */ []));
6115
+ effectiveSearchPages = computed(() => {
6116
+ return this.searchPages() ?? buildSearchPagesFromNavItems(this.items());
6117
+ }, ...(ngDevMode ? [{ debugName: "effectiveSearchPages" }] : /* istanbul ignore next */ []));
6027
6118
  constructor() {
6028
6119
  effect(() => {
6029
6120
  const index = this.activeIndex();
@@ -6075,33 +6166,38 @@ class TopNavComponent {
6075
6166
  }
6076
6167
  }
6077
6168
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: TopNavComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6078
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.13", type: TopNavComponent, isStandalone: true, selector: "ao-top-nav", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, activeItemId: { classPropertyName: "activeItemId", publicName: "activeItemId", isSignal: true, isRequired: false, transformFunction: null }, showSearch: { classPropertyName: "showSearch", publicName: "showSearch", isSignal: true, isRequired: false, transformFunction: null }, showNotifications: { classPropertyName: "showNotifications", publicName: "showNotifications", isSignal: true, isRequired: false, transformFunction: null }, notificationCount: { classPropertyName: "notificationCount", publicName: "notificationCount", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholder: { classPropertyName: "searchPlaceholder", publicName: "searchPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, showTools: { classPropertyName: "showTools", publicName: "showTools", isSignal: true, isRequired: false, transformFunction: null }, recommendedFilters: { classPropertyName: "recommendedFilters", publicName: "recommendedFilters", isSignal: true, isRequired: false, transformFunction: null }, activeFilter: { classPropertyName: "activeFilter", publicName: "activeFilter", isSignal: true, isRequired: false, transformFunction: null }, resultGroups: { classPropertyName: "resultGroups", publicName: "resultGroups", isSignal: true, isRequired: false, transformFunction: null }, pageSuggestion: { classPropertyName: "pageSuggestion", publicName: "pageSuggestion", isSignal: true, isRequired: false, transformFunction: null }, aiSuggestions: { classPropertyName: "aiSuggestions", publicName: "aiSuggestions", isSignal: true, isRequired: false, transformFunction: null }, searchLoading: { classPropertyName: "searchLoading", publicName: "searchLoading", isSignal: true, isRequired: false, transformFunction: null }, searchError: { classPropertyName: "searchError", publicName: "searchError", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { activeItemId: "activeItemIdChange", activeFilter: "activeFilterChange", itemClick: "itemClick", itemChange: "itemChange", searchSubmit: "searchSubmit", searchQueryChange: "searchQueryChange", searchResultSelect: "searchResultSelect", searchAiSuggestionSelect: "searchAiSuggestionSelect", searchPageSuggestionSelect: "searchPageSuggestionSelect", searchFilterSelect: "searchFilterSelect", searchFilterClear: "searchFilterClear", searchViewAll: "searchViewAll", notificationClick: "notificationClick" }, host: { classAttribute: "ao-top-nav" }, viewQueries: [{ propertyName: "navItems", predicate: ["navItem"], descendants: true, isSignal: true }], ngImport: i0, template: "<nav class=\"top-nav-outer\" role=\"navigation\" aria-label=\"Main navigation\">\n <div class=\"top-nav\">\n <div class=\"top-nav__list-wrapper\">\n <ul class=\"top-nav__list\" role=\"menubar\">\n @for (item of items(); track item.id) {\n <li role=\"none\">\n <a\n #navItem\n class=\"top-nav__item\"\n [class.top-nav__item--active]=\"item.id === activeItemId()\"\n [class.top-nav__item--disabled]=\"item.disabled\"\n [attr.href]=\"item.route ?? null\"\n [attr.aria-current]=\"item.id === activeItemId() ? 'page' : null\"\n [attr.aria-disabled]=\"item.disabled || null\"\n [attr.tabindex]=\"item.disabled ? -1 : 0\"\n role=\"menuitem\"\n (click)=\"$event.preventDefault(); onItemClick(item)\"\n (keydown)=\"onKeydown($event, item)\"\n >\n @if (item.icon) {\n <ao-icon [svg]=\"item.icon\" size=\"sm\" />\n }\n {{ item.label }}\n </a>\n </li>\n }\n </ul>\n @if (showIndicator()) {\n <span\n class=\"top-nav__indicator\"\n [style.left]=\"indicatorStyle().left\"\n [style.width]=\"indicatorStyle().width\"\n ></span>\n }\n </div>\n\n <div class=\"top-nav__actions\">\n @if (showSearch()) {\n <ao-ai-search\n [placeholder]=\"searchPlaceholder()\"\n [(value)]=\"searchValue\"\n [recommendedFilters]=\"recommendedFilters()\"\n [(activeFilter)]=\"activeFilter\"\n [resultGroups]=\"resultGroups()\"\n [pageSuggestion]=\"pageSuggestion()\"\n [aiSuggestions]=\"aiSuggestions()\"\n [loading]=\"searchLoading()\"\n [error]=\"searchError()\"\n (submit)=\"onSearchSubmit($event)\"\n (queryChange)=\"searchQueryChange.emit($event)\"\n (resultSelect)=\"searchResultSelect.emit($event)\"\n (aiSuggestionSelect)=\"searchAiSuggestionSelect.emit($event)\"\n (pageSuggestionSelect)=\"searchPageSuggestionSelect.emit($event)\"\n (filterSelect)=\"searchFilterSelect.emit($event)\"\n (filterClear)=\"searchFilterClear.emit()\"\n (viewAllClick)=\"searchViewAll.emit($event)\"\n />\n }\n @if (showTools()) {\n <ao-nav-tools />\n }\n @if (showNotifications()) {\n <ao-notification-button\n [count]=\"notificationCount()\"\n (buttonClick)=\"onNotificationClick()\"\n />\n }\n </div>\n </div>\n</nav>\n", styles: [":host{display:block;height:50px;background-color:#fff;border-bottom:1px solid #e9e9e9;padding-left:70px}.top-nav-outer{max-width:1640px;width:calc(100% - 96px);margin:auto;height:100%}@media(max-width:1279px){.top-nav-outer{width:calc(100% - 64px)}}@media(max-width:599px){.top-nav-outer{width:calc(100% - 32px)}}.top-nav{display:flex;align-items:center;justify-content:space-between;height:100%}.top-nav__list-wrapper{position:relative;height:100%}.top-nav__list{display:flex;align-items:center;gap:30px;list-style:none;margin:0;padding:0;height:100%}.top-nav__item{display:flex;align-items:center;gap:5px;height:100%;padding:0;border:none;background:transparent;color:#212121;text-decoration:none;cursor:pointer;transition:color .2s ease;font-size:13px;font-weight:700;line-height:19.5px;letter-spacing:0}.top-nav__item:hover:not(.top-nav__item--disabled){color:#ff004d}.top-nav__item:focus-visible{outline:3px solid #ff004d;outline-offset:-3px}.top-nav__item--active{color:#ff004d}.top-nav__item--disabled{color:#909090;cursor:not-allowed}.top-nav__indicator{position:absolute;bottom:0;height:3px;background-color:#ff004d;transition:left .3s cubic-bezier(.4,0,.2,1),width .3s cubic-bezier(.4,0,.2,1)}.top-nav__actions{display:flex;align-items:center;gap:20px}\n"], dependencies: [{ kind: "component", type: IconComponent, selector: "ao-icon", inputs: ["svg", "size"] }, { kind: "component", type: AiSearchComponent, selector: "ao-ai-search", inputs: ["placeholder", "value", "disabled", "recommendedFilters", "activeFilter", "resultGroups", "pageSuggestion", "aiSuggestions", "loading", "error", "panelOpen", "voiceLanguage"], outputs: ["valueChange", "activeFilterChange", "panelOpenChange", "submit", "voiceStart", "queryChange", "filterSelect", "filterClear", "resultSelect", "aiSuggestionSelect", "pageSuggestionSelect", "viewAllClick"] }, { kind: "component", type: NotificationButtonComponent, selector: "ao-notification-button", inputs: ["count", "maxCount", "disabled"], outputs: ["buttonClick"] }, { kind: "component", type: NavToolsComponent, selector: "ao-nav-tools", inputs: ["activeCompany", "companySearch"], outputs: ["changeCompany"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
6169
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.13", type: TopNavComponent, isStandalone: true, selector: "ao-top-nav", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, activeItemId: { classPropertyName: "activeItemId", publicName: "activeItemId", isSignal: true, isRequired: false, transformFunction: null }, showSearch: { classPropertyName: "showSearch", publicName: "showSearch", isSignal: true, isRequired: false, transformFunction: null }, showNotifications: { classPropertyName: "showNotifications", publicName: "showNotifications", isSignal: true, isRequired: false, transformFunction: null }, notificationCount: { classPropertyName: "notificationCount", publicName: "notificationCount", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholder: { classPropertyName: "searchPlaceholder", publicName: "searchPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, showTools: { classPropertyName: "showTools", publicName: "showTools", isSignal: true, isRequired: false, transformFunction: null }, recommendedFilters: { classPropertyName: "recommendedFilters", publicName: "recommendedFilters", isSignal: true, isRequired: false, transformFunction: null }, activeFilter: { classPropertyName: "activeFilter", publicName: "activeFilter", isSignal: true, isRequired: false, transformFunction: null }, resultGroups: { classPropertyName: "resultGroups", publicName: "resultGroups", isSignal: true, isRequired: false, transformFunction: null }, searchPages: { classPropertyName: "searchPages", publicName: "searchPages", isSignal: true, isRequired: false, transformFunction: null }, pageSuggestion: { classPropertyName: "pageSuggestion", publicName: "pageSuggestion", isSignal: true, isRequired: false, transformFunction: null }, aiSuggestions: { classPropertyName: "aiSuggestions", publicName: "aiSuggestions", isSignal: true, isRequired: false, transformFunction: null }, searchLoading: { classPropertyName: "searchLoading", publicName: "searchLoading", isSignal: true, isRequired: false, transformFunction: null }, searchError: { classPropertyName: "searchError", publicName: "searchError", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { activeItemId: "activeItemIdChange", activeFilter: "activeFilterChange", itemClick: "itemClick", itemChange: "itemChange", searchSubmit: "searchSubmit", searchQueryChange: "searchQueryChange", searchResultSelect: "searchResultSelect", searchAiSuggestionSelect: "searchAiSuggestionSelect", searchPageSuggestionSelect: "searchPageSuggestionSelect", searchFilterSelect: "searchFilterSelect", searchFilterClear: "searchFilterClear", searchViewAll: "searchViewAll", notificationClick: "notificationClick" }, host: { classAttribute: "ao-top-nav" }, viewQueries: [{ propertyName: "navItems", predicate: ["navItem"], descendants: true, isSignal: true }], ngImport: i0, template: "<nav class=\"top-nav-outer\" role=\"navigation\" aria-label=\"Main navigation\">\n <div class=\"top-nav\">\n <div class=\"top-nav__list-wrapper\">\n <ul class=\"top-nav__list\" role=\"menubar\">\n @for (item of items(); track item.id) {\n <li role=\"none\">\n <a\n #navItem\n class=\"top-nav__item\"\n [class.top-nav__item--active]=\"item.id === activeItemId()\"\n [class.top-nav__item--disabled]=\"item.disabled\"\n [attr.href]=\"item.route ?? null\"\n [attr.aria-current]=\"item.id === activeItemId() ? 'page' : null\"\n [attr.aria-disabled]=\"item.disabled || null\"\n [attr.tabindex]=\"item.disabled ? -1 : 0\"\n role=\"menuitem\"\n (click)=\"$event.preventDefault(); onItemClick(item)\"\n (keydown)=\"onKeydown($event, item)\"\n >\n @if (item.icon) {\n <ao-icon [svg]=\"item.icon\" size=\"sm\" />\n }\n {{ item.label }}\n </a>\n </li>\n }\n </ul>\n @if (showIndicator()) {\n <span\n class=\"top-nav__indicator\"\n [style.left]=\"indicatorStyle().left\"\n [style.width]=\"indicatorStyle().width\"\n ></span>\n }\n </div>\n\n <div class=\"top-nav__actions\">\n @if (showSearch()) {\n <ao-ai-search\n [placeholder]=\"searchPlaceholder()\"\n [(value)]=\"searchValue\"\n [recommendedFilters]=\"recommendedFilters()\"\n [(activeFilter)]=\"activeFilter\"\n [resultGroups]=\"resultGroups()\"\n [searchPages]=\"effectiveSearchPages()\"\n [pageSuggestion]=\"pageSuggestion()\"\n [aiSuggestions]=\"aiSuggestions()\"\n [loading]=\"searchLoading()\"\n [error]=\"searchError()\"\n (submit)=\"onSearchSubmit($event)\"\n (queryChange)=\"searchQueryChange.emit($event)\"\n (resultSelect)=\"searchResultSelect.emit($event)\"\n (aiSuggestionSelect)=\"searchAiSuggestionSelect.emit($event)\"\n (pageSuggestionSelect)=\"searchPageSuggestionSelect.emit($event)\"\n (filterSelect)=\"searchFilterSelect.emit($event)\"\n (filterClear)=\"searchFilterClear.emit()\"\n (viewAllClick)=\"searchViewAll.emit($event)\"\n />\n }\n @if (showTools()) {\n <ao-nav-tools />\n }\n @if (showNotifications()) {\n <ao-notification-button\n [count]=\"notificationCount()\"\n (buttonClick)=\"onNotificationClick()\"\n />\n }\n </div>\n </div>\n</nav>\n", styles: [":host{display:block;height:50px;background-color:#fff;border-bottom:1px solid #e9e9e9;padding-left:70px}.top-nav-outer{max-width:1640px;width:calc(100% - 96px);margin:auto;height:100%}@media(max-width:1279px){.top-nav-outer{width:calc(100% - 64px)}}@media(max-width:599px){.top-nav-outer{width:calc(100% - 32px)}}.top-nav{display:flex;align-items:center;justify-content:space-between;height:100%}.top-nav__list-wrapper{position:relative;height:100%}.top-nav__list{display:flex;align-items:center;gap:30px;list-style:none;margin:0;padding:0;height:100%}.top-nav__item{display:flex;align-items:center;gap:5px;height:100%;padding:0;border:none;background:transparent;color:#212121;text-decoration:none;cursor:pointer;transition:color .2s ease;font-size:13px;font-weight:700;line-height:19.5px;letter-spacing:0}.top-nav__item:hover:not(.top-nav__item--disabled){color:#ff004d}.top-nav__item:focus-visible{outline:3px solid #ff004d;outline-offset:-3px}.top-nav__item--active{color:#ff004d}.top-nav__item--disabled{color:#909090;cursor:not-allowed}.top-nav__indicator{position:absolute;bottom:0;height:3px;background-color:#ff004d;transition:left .3s cubic-bezier(.4,0,.2,1),width .3s cubic-bezier(.4,0,.2,1)}.top-nav__actions{display:flex;align-items:center;gap:20px}\n"], dependencies: [{ kind: "component", type: IconComponent, selector: "ao-icon", inputs: ["svg", "size"] }, { kind: "component", type: AiSearchComponent, selector: "ao-ai-search", inputs: ["placeholder", "value", "disabled", "recommendedFilters", "activeFilter", "resultGroups", "searchPages", "pageSuggestion", "aiSuggestions", "loading", "error", "panelOpen", "voiceLanguage"], outputs: ["valueChange", "activeFilterChange", "panelOpenChange", "submit", "voiceStart", "queryChange", "filterSelect", "filterClear", "resultSelect", "aiSuggestionSelect", "pageSuggestionSelect", "viewAllClick"] }, { kind: "component", type: NotificationButtonComponent, selector: "ao-notification-button", inputs: ["count", "maxCount", "disabled"], outputs: ["buttonClick"] }, { kind: "component", type: NavToolsComponent, selector: "ao-nav-tools", inputs: ["activeCompany", "companySearch"], outputs: ["changeCompany"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
6079
6170
  }
6080
6171
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: TopNavComponent, decorators: [{
6081
6172
  type: Component,
6082
6173
  args: [{ selector: 'ao-top-nav', imports: [IconComponent, AiSearchComponent, NotificationButtonComponent, NavToolsComponent], changeDetection: ChangeDetectionStrategy.OnPush, host: {
6083
6174
  class: 'ao-top-nav',
6084
- }, template: "<nav class=\"top-nav-outer\" role=\"navigation\" aria-label=\"Main navigation\">\n <div class=\"top-nav\">\n <div class=\"top-nav__list-wrapper\">\n <ul class=\"top-nav__list\" role=\"menubar\">\n @for (item of items(); track item.id) {\n <li role=\"none\">\n <a\n #navItem\n class=\"top-nav__item\"\n [class.top-nav__item--active]=\"item.id === activeItemId()\"\n [class.top-nav__item--disabled]=\"item.disabled\"\n [attr.href]=\"item.route ?? null\"\n [attr.aria-current]=\"item.id === activeItemId() ? 'page' : null\"\n [attr.aria-disabled]=\"item.disabled || null\"\n [attr.tabindex]=\"item.disabled ? -1 : 0\"\n role=\"menuitem\"\n (click)=\"$event.preventDefault(); onItemClick(item)\"\n (keydown)=\"onKeydown($event, item)\"\n >\n @if (item.icon) {\n <ao-icon [svg]=\"item.icon\" size=\"sm\" />\n }\n {{ item.label }}\n </a>\n </li>\n }\n </ul>\n @if (showIndicator()) {\n <span\n class=\"top-nav__indicator\"\n [style.left]=\"indicatorStyle().left\"\n [style.width]=\"indicatorStyle().width\"\n ></span>\n }\n </div>\n\n <div class=\"top-nav__actions\">\n @if (showSearch()) {\n <ao-ai-search\n [placeholder]=\"searchPlaceholder()\"\n [(value)]=\"searchValue\"\n [recommendedFilters]=\"recommendedFilters()\"\n [(activeFilter)]=\"activeFilter\"\n [resultGroups]=\"resultGroups()\"\n [pageSuggestion]=\"pageSuggestion()\"\n [aiSuggestions]=\"aiSuggestions()\"\n [loading]=\"searchLoading()\"\n [error]=\"searchError()\"\n (submit)=\"onSearchSubmit($event)\"\n (queryChange)=\"searchQueryChange.emit($event)\"\n (resultSelect)=\"searchResultSelect.emit($event)\"\n (aiSuggestionSelect)=\"searchAiSuggestionSelect.emit($event)\"\n (pageSuggestionSelect)=\"searchPageSuggestionSelect.emit($event)\"\n (filterSelect)=\"searchFilterSelect.emit($event)\"\n (filterClear)=\"searchFilterClear.emit()\"\n (viewAllClick)=\"searchViewAll.emit($event)\"\n />\n }\n @if (showTools()) {\n <ao-nav-tools />\n }\n @if (showNotifications()) {\n <ao-notification-button\n [count]=\"notificationCount()\"\n (buttonClick)=\"onNotificationClick()\"\n />\n }\n </div>\n </div>\n</nav>\n", styles: [":host{display:block;height:50px;background-color:#fff;border-bottom:1px solid #e9e9e9;padding-left:70px}.top-nav-outer{max-width:1640px;width:calc(100% - 96px);margin:auto;height:100%}@media(max-width:1279px){.top-nav-outer{width:calc(100% - 64px)}}@media(max-width:599px){.top-nav-outer{width:calc(100% - 32px)}}.top-nav{display:flex;align-items:center;justify-content:space-between;height:100%}.top-nav__list-wrapper{position:relative;height:100%}.top-nav__list{display:flex;align-items:center;gap:30px;list-style:none;margin:0;padding:0;height:100%}.top-nav__item{display:flex;align-items:center;gap:5px;height:100%;padding:0;border:none;background:transparent;color:#212121;text-decoration:none;cursor:pointer;transition:color .2s ease;font-size:13px;font-weight:700;line-height:19.5px;letter-spacing:0}.top-nav__item:hover:not(.top-nav__item--disabled){color:#ff004d}.top-nav__item:focus-visible{outline:3px solid #ff004d;outline-offset:-3px}.top-nav__item--active{color:#ff004d}.top-nav__item--disabled{color:#909090;cursor:not-allowed}.top-nav__indicator{position:absolute;bottom:0;height:3px;background-color:#ff004d;transition:left .3s cubic-bezier(.4,0,.2,1),width .3s cubic-bezier(.4,0,.2,1)}.top-nav__actions{display:flex;align-items:center;gap:20px}\n"] }]
6085
- }], ctorParameters: () => [], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], activeItemId: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeItemId", required: false }] }, { type: i0.Output, args: ["activeItemIdChange"] }], showSearch: [{ type: i0.Input, args: [{ isSignal: true, alias: "showSearch", required: false }] }], showNotifications: [{ type: i0.Input, args: [{ isSignal: true, alias: "showNotifications", required: false }] }], notificationCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "notificationCount", required: false }] }], searchPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchPlaceholder", required: false }] }], showTools: [{ type: i0.Input, args: [{ isSignal: true, alias: "showTools", required: false }] }], recommendedFilters: [{ type: i0.Input, args: [{ isSignal: true, alias: "recommendedFilters", required: false }] }], activeFilter: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeFilter", required: false }] }, { type: i0.Output, args: ["activeFilterChange"] }], resultGroups: [{ type: i0.Input, args: [{ isSignal: true, alias: "resultGroups", required: false }] }], pageSuggestion: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageSuggestion", required: false }] }], aiSuggestions: [{ type: i0.Input, args: [{ isSignal: true, alias: "aiSuggestions", required: false }] }], searchLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchLoading", required: false }] }], searchError: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchError", required: false }] }], itemClick: [{ type: i0.Output, args: ["itemClick"] }], itemChange: [{ type: i0.Output, args: ["itemChange"] }], searchSubmit: [{ type: i0.Output, args: ["searchSubmit"] }], searchQueryChange: [{ type: i0.Output, args: ["searchQueryChange"] }], searchResultSelect: [{ type: i0.Output, args: ["searchResultSelect"] }], searchAiSuggestionSelect: [{ type: i0.Output, args: ["searchAiSuggestionSelect"] }], searchPageSuggestionSelect: [{ type: i0.Output, args: ["searchPageSuggestionSelect"] }], searchFilterSelect: [{ type: i0.Output, args: ["searchFilterSelect"] }], searchFilterClear: [{ type: i0.Output, args: ["searchFilterClear"] }], searchViewAll: [{ type: i0.Output, args: ["searchViewAll"] }], notificationClick: [{ type: i0.Output, args: ["notificationClick"] }], navItems: [{ type: i0.ViewChildren, args: ['navItem', { isSignal: true }] }] } });
6175
+ }, template: "<nav class=\"top-nav-outer\" role=\"navigation\" aria-label=\"Main navigation\">\n <div class=\"top-nav\">\n <div class=\"top-nav__list-wrapper\">\n <ul class=\"top-nav__list\" role=\"menubar\">\n @for (item of items(); track item.id) {\n <li role=\"none\">\n <a\n #navItem\n class=\"top-nav__item\"\n [class.top-nav__item--active]=\"item.id === activeItemId()\"\n [class.top-nav__item--disabled]=\"item.disabled\"\n [attr.href]=\"item.route ?? null\"\n [attr.aria-current]=\"item.id === activeItemId() ? 'page' : null\"\n [attr.aria-disabled]=\"item.disabled || null\"\n [attr.tabindex]=\"item.disabled ? -1 : 0\"\n role=\"menuitem\"\n (click)=\"$event.preventDefault(); onItemClick(item)\"\n (keydown)=\"onKeydown($event, item)\"\n >\n @if (item.icon) {\n <ao-icon [svg]=\"item.icon\" size=\"sm\" />\n }\n {{ item.label }}\n </a>\n </li>\n }\n </ul>\n @if (showIndicator()) {\n <span\n class=\"top-nav__indicator\"\n [style.left]=\"indicatorStyle().left\"\n [style.width]=\"indicatorStyle().width\"\n ></span>\n }\n </div>\n\n <div class=\"top-nav__actions\">\n @if (showSearch()) {\n <ao-ai-search\n [placeholder]=\"searchPlaceholder()\"\n [(value)]=\"searchValue\"\n [recommendedFilters]=\"recommendedFilters()\"\n [(activeFilter)]=\"activeFilter\"\n [resultGroups]=\"resultGroups()\"\n [searchPages]=\"effectiveSearchPages()\"\n [pageSuggestion]=\"pageSuggestion()\"\n [aiSuggestions]=\"aiSuggestions()\"\n [loading]=\"searchLoading()\"\n [error]=\"searchError()\"\n (submit)=\"onSearchSubmit($event)\"\n (queryChange)=\"searchQueryChange.emit($event)\"\n (resultSelect)=\"searchResultSelect.emit($event)\"\n (aiSuggestionSelect)=\"searchAiSuggestionSelect.emit($event)\"\n (pageSuggestionSelect)=\"searchPageSuggestionSelect.emit($event)\"\n (filterSelect)=\"searchFilterSelect.emit($event)\"\n (filterClear)=\"searchFilterClear.emit()\"\n (viewAllClick)=\"searchViewAll.emit($event)\"\n />\n }\n @if (showTools()) {\n <ao-nav-tools />\n }\n @if (showNotifications()) {\n <ao-notification-button\n [count]=\"notificationCount()\"\n (buttonClick)=\"onNotificationClick()\"\n />\n }\n </div>\n </div>\n</nav>\n", styles: [":host{display:block;height:50px;background-color:#fff;border-bottom:1px solid #e9e9e9;padding-left:70px}.top-nav-outer{max-width:1640px;width:calc(100% - 96px);margin:auto;height:100%}@media(max-width:1279px){.top-nav-outer{width:calc(100% - 64px)}}@media(max-width:599px){.top-nav-outer{width:calc(100% - 32px)}}.top-nav{display:flex;align-items:center;justify-content:space-between;height:100%}.top-nav__list-wrapper{position:relative;height:100%}.top-nav__list{display:flex;align-items:center;gap:30px;list-style:none;margin:0;padding:0;height:100%}.top-nav__item{display:flex;align-items:center;gap:5px;height:100%;padding:0;border:none;background:transparent;color:#212121;text-decoration:none;cursor:pointer;transition:color .2s ease;font-size:13px;font-weight:700;line-height:19.5px;letter-spacing:0}.top-nav__item:hover:not(.top-nav__item--disabled){color:#ff004d}.top-nav__item:focus-visible{outline:3px solid #ff004d;outline-offset:-3px}.top-nav__item--active{color:#ff004d}.top-nav__item--disabled{color:#909090;cursor:not-allowed}.top-nav__indicator{position:absolute;bottom:0;height:3px;background-color:#ff004d;transition:left .3s cubic-bezier(.4,0,.2,1),width .3s cubic-bezier(.4,0,.2,1)}.top-nav__actions{display:flex;align-items:center;gap:20px}\n"] }]
6176
+ }], ctorParameters: () => [], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], activeItemId: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeItemId", required: false }] }, { type: i0.Output, args: ["activeItemIdChange"] }], showSearch: [{ type: i0.Input, args: [{ isSignal: true, alias: "showSearch", required: false }] }], showNotifications: [{ type: i0.Input, args: [{ isSignal: true, alias: "showNotifications", required: false }] }], notificationCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "notificationCount", required: false }] }], searchPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchPlaceholder", required: false }] }], showTools: [{ type: i0.Input, args: [{ isSignal: true, alias: "showTools", required: false }] }], recommendedFilters: [{ type: i0.Input, args: [{ isSignal: true, alias: "recommendedFilters", required: false }] }], activeFilter: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeFilter", required: false }] }, { type: i0.Output, args: ["activeFilterChange"] }], resultGroups: [{ type: i0.Input, args: [{ isSignal: true, alias: "resultGroups", required: false }] }], searchPages: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchPages", required: false }] }], pageSuggestion: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageSuggestion", required: false }] }], aiSuggestions: [{ type: i0.Input, args: [{ isSignal: true, alias: "aiSuggestions", required: false }] }], searchLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchLoading", required: false }] }], searchError: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchError", required: false }] }], itemClick: [{ type: i0.Output, args: ["itemClick"] }], itemChange: [{ type: i0.Output, args: ["itemChange"] }], searchSubmit: [{ type: i0.Output, args: ["searchSubmit"] }], searchQueryChange: [{ type: i0.Output, args: ["searchQueryChange"] }], searchResultSelect: [{ type: i0.Output, args: ["searchResultSelect"] }], searchAiSuggestionSelect: [{ type: i0.Output, args: ["searchAiSuggestionSelect"] }], searchPageSuggestionSelect: [{ type: i0.Output, args: ["searchPageSuggestionSelect"] }], searchFilterSelect: [{ type: i0.Output, args: ["searchFilterSelect"] }], searchFilterClear: [{ type: i0.Output, args: ["searchFilterClear"] }], searchViewAll: [{ type: i0.Output, args: ["searchViewAll"] }], notificationClick: [{ type: i0.Output, args: ["notificationClick"] }], navItems: [{ type: i0.ViewChildren, args: ['navItem', { isSignal: true }] }] } });
6086
6177
 
6087
6178
  class SearchResultsPageComponent {
6088
6179
  sanitizer = inject(DomSanitizer);
6089
6180
  hostRef = inject((ElementRef));
6090
6181
  query = input('', ...(ngDevMode ? [{ debugName: "query" }] : /* istanbul ignore next */ []));
6091
6182
  groups = input([], ...(ngDevMode ? [{ debugName: "groups" }] : /* istanbul ignore next */ []));
6183
+ searchPages = input([], ...(ngDevMode ? [{ debugName: "searchPages" }] : /* istanbul ignore next */ []));
6092
6184
  availableTypes = input([], ...(ngDevMode ? [{ debugName: "availableTypes" }] : /* istanbul ignore next */ []));
6093
6185
  typeFilter = model(null, ...(ngDevMode ? [{ debugName: "typeFilter" }] : /* istanbul ignore next */ []));
6094
6186
  resultClick = output();
6095
6187
  caretDownIcon = phosphorCaretDown;
6096
6188
  sparkleIcon = phosphorSparkle;
6097
6189
  typeFilterOpen = signal(false, ...(ngDevMode ? [{ debugName: "typeFilterOpen" }] : /* istanbul ignore next */ []));
6190
+ effectiveGroups = computed(() => {
6191
+ const pageGroup = createSearchPageGroup({ pages: this.searchPages(), query: this.query() });
6192
+ return pageGroup ? [pageGroup, ...this.groups()] : this.groups();
6193
+ }, ...(ngDevMode ? [{ debugName: "effectiveGroups" }] : /* istanbul ignore next */ []));
6098
6194
  typeOptions = computed(() => {
6099
6195
  const configured = this.availableTypes();
6100
6196
  if (configured.length > 0) {
6101
6197
  return configured;
6102
6198
  }
6103
6199
  const seen = new Set();
6104
- const options = this.groups().reduce((items, group) => {
6200
+ const options = this.effectiveGroups().reduce((items, group) => {
6105
6201
  if (seen.has(group.type)) {
6106
6202
  return items;
6107
6203
  }
@@ -6115,9 +6211,9 @@ class SearchResultsPageComponent {
6115
6211
  filteredGroups = computed(() => {
6116
6212
  const type = this.typeFilter();
6117
6213
  if (type === null) {
6118
- return this.groups();
6214
+ return this.effectiveGroups();
6119
6215
  }
6120
- return this.groups().filter(group => group.type === type);
6216
+ return this.effectiveGroups().filter(group => group.type === type);
6121
6217
  }, ...(ngDevMode ? [{ debugName: "filteredGroups" }] : /* istanbul ignore next */ []));
6122
6218
  onDocumentClick(event) {
6123
6219
  if (!this.typeFilterOpen()) {
@@ -6160,14 +6256,14 @@ class SearchResultsPageComponent {
6160
6256
  return text.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
6161
6257
  }
6162
6258
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: SearchResultsPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6163
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.13", type: SearchResultsPageComponent, isStandalone: true, selector: "ao-search-results-page", inputs: { query: { classPropertyName: "query", publicName: "query", isSignal: true, isRequired: false, transformFunction: null }, groups: { classPropertyName: "groups", publicName: "groups", isSignal: true, isRequired: false, transformFunction: null }, availableTypes: { classPropertyName: "availableTypes", publicName: "availableTypes", isSignal: true, isRequired: false, transformFunction: null }, typeFilter: { classPropertyName: "typeFilter", publicName: "typeFilter", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { typeFilter: "typeFilterChange", resultClick: "resultClick" }, host: { listeners: { "document:click": "onDocumentClick($event)" }, classAttribute: "ao-search-results-page" }, ngImport: i0, template: "<header class=\"search-results__header\">\n <h1 class=\"search-results__title\">Suchergebnisse</h1>\n <div class=\"search-results__filters\">\n <div class=\"search-results__type-filter\">\n <button\n ao-button\n variant=\"outline\"\n [iconTrailing]=\"caretDownIcon\"\n [attr.aria-expanded]=\"typeFilterOpen()\"\n aria-haspopup=\"listbox\"\n (click)=\"onTypeFilterClick()\"\n >\n {{ activeTypeLabel() }}\n </button>\n @if (typeFilterOpen()) {\n <div class=\"search-results__type-menu\" role=\"listbox\">\n @for (option of typeOptions(); track option.value ?? 'all') {\n <button\n type=\"button\"\n class=\"search-results__type-option\"\n [class.search-results__type-option--active]=\"option.value === typeFilter()\"\n [attr.aria-selected]=\"option.value === typeFilter()\"\n role=\"option\"\n (click)=\"onTypeOptionClick(option)\"\n >\n {{ option.label }}\n </button>\n }\n </div>\n }\n </div>\n </div>\n</header>\n\n@for (group of filteredGroups(); track group.type) {\n <section class=\"search-results__section\">\n <div class=\"search-results__section-header\">\n <h2 class=\"search-results__section-title\">{{ group.label }}</h2>\n <span class=\"search-results__count\">\n {{ group.totalCount ?? group.results.length }} Ergebnisse\n </span>\n </div>\n\n @if (group.type !== 'ki') {\n @if (group.columns?.length) {\n <div class=\"search-results__row search-results__row--head\">\n @for (col of group.columns; track col) {\n <span class=\"search-results__cell search-results__cell--head\">{{ col }}</span>\n }\n </div>\n }\n @for (r of group.results; track r.id) {\n <button type=\"button\" class=\"search-results__row\" (click)=\"onResultClick(r)\">\n <span\n class=\"search-results__cell search-results__cell--primary\"\n [innerHTML]=\"highlight(r.primary)\"\n ></span>\n <span class=\"search-results__cell\">{{ r.secondary }}</span>\n <span class=\"search-results__cell\">{{ r.tertiary }}</span>\n </button>\n }\n } @else {\n @for (r of group.results; track r.id) {\n <button type=\"button\" class=\"search-results__ai-row\" (click)=\"onResultClick(r)\">\n <ao-icon [svg]=\"sparkleIcon\" size=\"sm\" class=\"search-results__ai-icon\" />\n <span [innerHTML]=\"highlight(r.primary)\"></span>\n </button>\n }\n }\n </section>\n} @empty {\n <div class=\"search-results__empty\">Keine Ergebnisse gefunden</div>\n}\n", styles: [":host{display:block;box-sizing:border-box;width:calc(100% - var(--desktop-margin, 96px));max-width:var(--desktop-boxed, 1640px);margin:0 auto;padding-top:20px}@media(max-width:1279px){:host{width:calc(100% - var(--tablet-margin, 64px))}}@media(max-width:599px){:host{width:calc(100% - var(--mobile-margin, 32px))}}.search-results__header{display:flex;align-items:center;justify-content:space-between;margin-bottom:25px}.search-results__title{margin:0;font-size:24px;font-weight:400;line-height:36px;letter-spacing:0;color:#212121}.search-results__filters{display:flex;gap:10px}.search-results__type-filter{position:relative}.search-results__type-menu{position:absolute;top:calc(100% + 10px);right:0;z-index:10;min-width:180px;padding:5px 0;border:1px solid #e9e9e9;border-radius:5px;background-color:#fff;box-shadow:0 4px 16px #2121211a}.search-results__type-option{display:block;width:100%;padding:10px 15px;border:none;background:transparent;color:#212121;text-align:left;cursor:pointer;font-size:13px;font-weight:400;line-height:19.5px;letter-spacing:0}.search-results__type-option:hover,.search-results__type-option--active{background-color:#f3f3f3}.search-results__type-option:focus-visible{outline:3px solid #ff004d;outline-offset:-3px}.search-results__section{margin-bottom:30px}.search-results__section-header{display:flex;align-items:baseline;justify-content:space-between;padding-bottom:10px;border-bottom:1px solid #e9e9e9;margin-bottom:10px}.search-results__section-title{margin:0;font-size:15px;font-weight:400;line-height:22.5px;letter-spacing:0;color:#212121}.search-results__count{font-size:12px;font-weight:500;line-height:18px;letter-spacing:0;color:#909090}.search-results__row{display:grid;grid-template-columns:1fr 2fr 2fr;gap:15px;width:100%;padding:10px 0;border:none;border-bottom:1px solid #e9e9e9;background:transparent;text-align:left;cursor:pointer;font-size:13px;font-weight:400;line-height:19.5px;letter-spacing:0;color:#212121}.search-results__row:hover:not(.search-results__row--head){background-color:#f3f3f3}.search-results__row--head{cursor:default;color:#909090;font-size:12px;font-weight:500;line-height:18px;letter-spacing:0}.search-results__cell{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.search-results__cell--primary{font-weight:600}.search-results__cell--head{color:#909090}.search-results__ai-row{display:flex;align-items:center;gap:10px;width:100%;padding:10px 0;border:none;background:transparent;text-align:left;cursor:pointer;font-size:13px;font-weight:400;line-height:19.5px;letter-spacing:0;color:#212121}.search-results__ai-row:hover{background-color:#f3f3f3}.search-results__ai-icon{color:#223cff;flex-shrink:0}.search-results__empty{padding:25px 0;color:#909090;font-size:13px;font-weight:400;line-height:19.5px;letter-spacing:0}.search-results__hl{background-color:#fff59d;color:inherit;padding:0;border-radius:2px}\n"], dependencies: [{ kind: "component", type: ButtonComponent, selector: "button[ao-button], a[ao-button]", inputs: ["variant", "icon", "iconTrailing"] }, { kind: "component", type: IconComponent, selector: "ao-icon", inputs: ["svg", "size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
6259
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.13", type: SearchResultsPageComponent, isStandalone: true, selector: "ao-search-results-page", inputs: { query: { classPropertyName: "query", publicName: "query", isSignal: true, isRequired: false, transformFunction: null }, groups: { classPropertyName: "groups", publicName: "groups", isSignal: true, isRequired: false, transformFunction: null }, searchPages: { classPropertyName: "searchPages", publicName: "searchPages", isSignal: true, isRequired: false, transformFunction: null }, availableTypes: { classPropertyName: "availableTypes", publicName: "availableTypes", isSignal: true, isRequired: false, transformFunction: null }, typeFilter: { classPropertyName: "typeFilter", publicName: "typeFilter", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { typeFilter: "typeFilterChange", resultClick: "resultClick" }, host: { listeners: { "document:click": "onDocumentClick($event)" }, classAttribute: "ao-search-results-page" }, ngImport: i0, template: "<header class=\"search-results__header\">\n <h1 class=\"search-results__title\">Suchergebnisse</h1>\n <div class=\"search-results__filters\">\n <div class=\"search-results__type-filter\">\n <button\n ao-button\n variant=\"outline\"\n [iconTrailing]=\"caretDownIcon\"\n [attr.aria-expanded]=\"typeFilterOpen()\"\n aria-haspopup=\"listbox\"\n (click)=\"onTypeFilterClick()\"\n >\n {{ activeTypeLabel() }}\n </button>\n @if (typeFilterOpen()) {\n <div class=\"search-results__type-menu\" role=\"listbox\">\n @for (option of typeOptions(); track option.value ?? 'all') {\n <button\n type=\"button\"\n class=\"search-results__type-option\"\n [class.search-results__type-option--active]=\"option.value === typeFilter()\"\n [attr.aria-selected]=\"option.value === typeFilter()\"\n role=\"option\"\n (click)=\"onTypeOptionClick(option)\"\n >\n {{ option.label }}\n </button>\n }\n </div>\n }\n </div>\n </div>\n</header>\n\n@for (group of filteredGroups(); track group.type) {\n <section class=\"search-results__section\">\n <div class=\"search-results__section-header\">\n <h2 class=\"search-results__section-title\">{{ group.label }}</h2>\n <span class=\"search-results__count\">\n {{ group.totalCount ?? group.results.length }} Ergebnisse\n </span>\n </div>\n\n @if (group.type !== 'ki') {\n @if (group.columns?.length) {\n <div class=\"search-results__row search-results__row--head\">\n @for (col of group.columns; track col) {\n <span class=\"search-results__cell search-results__cell--head\">{{ col }}</span>\n }\n </div>\n }\n @for (r of group.results; track r.id) {\n <button type=\"button\" class=\"search-results__row\" (click)=\"onResultClick(r)\">\n <span\n class=\"search-results__cell search-results__cell--primary\"\n [innerHTML]=\"highlight(r.primary)\"\n ></span>\n <span class=\"search-results__cell\">{{ r.secondary }}</span>\n <span class=\"search-results__cell\">{{ r.tertiary }}</span>\n </button>\n }\n } @else {\n @for (r of group.results; track r.id) {\n <button type=\"button\" class=\"search-results__ai-row\" (click)=\"onResultClick(r)\">\n <ao-icon [svg]=\"sparkleIcon\" size=\"sm\" class=\"search-results__ai-icon\" />\n <span [innerHTML]=\"highlight(r.primary)\"></span>\n </button>\n }\n }\n </section>\n} @empty {\n <div class=\"search-results__empty\">Keine Ergebnisse gefunden</div>\n}\n", styles: [":host{display:block;box-sizing:border-box;width:calc(100% - var(--desktop-margin, 96px));max-width:var(--desktop-boxed, 1640px);margin:0 auto;padding-top:20px}@media(max-width:1279px){:host{width:calc(100% - var(--tablet-margin, 64px))}}@media(max-width:599px){:host{width:calc(100% - var(--mobile-margin, 32px))}}.search-results__header{display:flex;align-items:center;justify-content:space-between;margin-bottom:25px}.search-results__title{margin:0;font-size:24px;font-weight:400;line-height:36px;letter-spacing:0;color:#212121}.search-results__filters{display:flex;gap:10px}.search-results__type-filter{position:relative}.search-results__type-menu{position:absolute;top:calc(100% + 10px);right:0;z-index:10;min-width:180px;padding:5px 0;border:1px solid #e9e9e9;border-radius:5px;background-color:#fff;box-shadow:0 4px 16px #2121211a}.search-results__type-option{display:block;width:100%;padding:10px 15px;border:none;background:transparent;color:#212121;text-align:left;cursor:pointer;font-size:13px;font-weight:400;line-height:19.5px;letter-spacing:0}.search-results__type-option:hover,.search-results__type-option--active{background-color:#f3f3f3}.search-results__type-option:focus-visible{outline:3px solid #ff004d;outline-offset:-3px}.search-results__section{margin-bottom:30px}.search-results__section-header{display:flex;align-items:baseline;justify-content:space-between;padding-bottom:10px;border-bottom:1px solid #e9e9e9;margin-bottom:10px}.search-results__section-title{margin:0;font-size:15px;font-weight:400;line-height:22.5px;letter-spacing:0;color:#212121}.search-results__count{font-size:12px;font-weight:500;line-height:18px;letter-spacing:0;color:#909090}.search-results__row{display:grid;grid-template-columns:1fr 2fr 2fr;gap:15px;width:100%;padding:10px 0;border:none;border-bottom:1px solid #e9e9e9;background:transparent;text-align:left;cursor:pointer;font-size:13px;font-weight:400;line-height:19.5px;letter-spacing:0;color:#212121}.search-results__row:hover:not(.search-results__row--head){background-color:#f3f3f3}.search-results__row--head{cursor:default;color:#909090;font-size:12px;font-weight:500;line-height:18px;letter-spacing:0}.search-results__cell{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.search-results__cell--primary{font-weight:600}.search-results__cell--head{color:#909090}.search-results__ai-row{display:flex;align-items:center;gap:10px;width:100%;padding:10px 0;border:none;background:transparent;text-align:left;cursor:pointer;font-size:13px;font-weight:400;line-height:19.5px;letter-spacing:0;color:#212121}.search-results__ai-row:hover{background-color:#f3f3f3}.search-results__ai-icon{color:#223cff;flex-shrink:0}.search-results__empty{padding:25px 0;color:#909090;font-size:13px;font-weight:400;line-height:19.5px;letter-spacing:0}.search-results__hl{background-color:#fff59d;color:inherit;padding:0;border-radius:2px}\n"], dependencies: [{ kind: "component", type: ButtonComponent, selector: "button[ao-button], a[ao-button]", inputs: ["variant", "icon", "iconTrailing"] }, { kind: "component", type: IconComponent, selector: "ao-icon", inputs: ["svg", "size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
6164
6260
  }
6165
6261
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: SearchResultsPageComponent, decorators: [{
6166
6262
  type: Component,
6167
6263
  args: [{ selector: 'ao-search-results-page', imports: [ButtonComponent, IconComponent], changeDetection: ChangeDetectionStrategy.OnPush, host: {
6168
6264
  class: 'ao-search-results-page',
6169
6265
  }, template: "<header class=\"search-results__header\">\n <h1 class=\"search-results__title\">Suchergebnisse</h1>\n <div class=\"search-results__filters\">\n <div class=\"search-results__type-filter\">\n <button\n ao-button\n variant=\"outline\"\n [iconTrailing]=\"caretDownIcon\"\n [attr.aria-expanded]=\"typeFilterOpen()\"\n aria-haspopup=\"listbox\"\n (click)=\"onTypeFilterClick()\"\n >\n {{ activeTypeLabel() }}\n </button>\n @if (typeFilterOpen()) {\n <div class=\"search-results__type-menu\" role=\"listbox\">\n @for (option of typeOptions(); track option.value ?? 'all') {\n <button\n type=\"button\"\n class=\"search-results__type-option\"\n [class.search-results__type-option--active]=\"option.value === typeFilter()\"\n [attr.aria-selected]=\"option.value === typeFilter()\"\n role=\"option\"\n (click)=\"onTypeOptionClick(option)\"\n >\n {{ option.label }}\n </button>\n }\n </div>\n }\n </div>\n </div>\n</header>\n\n@for (group of filteredGroups(); track group.type) {\n <section class=\"search-results__section\">\n <div class=\"search-results__section-header\">\n <h2 class=\"search-results__section-title\">{{ group.label }}</h2>\n <span class=\"search-results__count\">\n {{ group.totalCount ?? group.results.length }} Ergebnisse\n </span>\n </div>\n\n @if (group.type !== 'ki') {\n @if (group.columns?.length) {\n <div class=\"search-results__row search-results__row--head\">\n @for (col of group.columns; track col) {\n <span class=\"search-results__cell search-results__cell--head\">{{ col }}</span>\n }\n </div>\n }\n @for (r of group.results; track r.id) {\n <button type=\"button\" class=\"search-results__row\" (click)=\"onResultClick(r)\">\n <span\n class=\"search-results__cell search-results__cell--primary\"\n [innerHTML]=\"highlight(r.primary)\"\n ></span>\n <span class=\"search-results__cell\">{{ r.secondary }}</span>\n <span class=\"search-results__cell\">{{ r.tertiary }}</span>\n </button>\n }\n } @else {\n @for (r of group.results; track r.id) {\n <button type=\"button\" class=\"search-results__ai-row\" (click)=\"onResultClick(r)\">\n <ao-icon [svg]=\"sparkleIcon\" size=\"sm\" class=\"search-results__ai-icon\" />\n <span [innerHTML]=\"highlight(r.primary)\"></span>\n </button>\n }\n }\n </section>\n} @empty {\n <div class=\"search-results__empty\">Keine Ergebnisse gefunden</div>\n}\n", styles: [":host{display:block;box-sizing:border-box;width:calc(100% - var(--desktop-margin, 96px));max-width:var(--desktop-boxed, 1640px);margin:0 auto;padding-top:20px}@media(max-width:1279px){:host{width:calc(100% - var(--tablet-margin, 64px))}}@media(max-width:599px){:host{width:calc(100% - var(--mobile-margin, 32px))}}.search-results__header{display:flex;align-items:center;justify-content:space-between;margin-bottom:25px}.search-results__title{margin:0;font-size:24px;font-weight:400;line-height:36px;letter-spacing:0;color:#212121}.search-results__filters{display:flex;gap:10px}.search-results__type-filter{position:relative}.search-results__type-menu{position:absolute;top:calc(100% + 10px);right:0;z-index:10;min-width:180px;padding:5px 0;border:1px solid #e9e9e9;border-radius:5px;background-color:#fff;box-shadow:0 4px 16px #2121211a}.search-results__type-option{display:block;width:100%;padding:10px 15px;border:none;background:transparent;color:#212121;text-align:left;cursor:pointer;font-size:13px;font-weight:400;line-height:19.5px;letter-spacing:0}.search-results__type-option:hover,.search-results__type-option--active{background-color:#f3f3f3}.search-results__type-option:focus-visible{outline:3px solid #ff004d;outline-offset:-3px}.search-results__section{margin-bottom:30px}.search-results__section-header{display:flex;align-items:baseline;justify-content:space-between;padding-bottom:10px;border-bottom:1px solid #e9e9e9;margin-bottom:10px}.search-results__section-title{margin:0;font-size:15px;font-weight:400;line-height:22.5px;letter-spacing:0;color:#212121}.search-results__count{font-size:12px;font-weight:500;line-height:18px;letter-spacing:0;color:#909090}.search-results__row{display:grid;grid-template-columns:1fr 2fr 2fr;gap:15px;width:100%;padding:10px 0;border:none;border-bottom:1px solid #e9e9e9;background:transparent;text-align:left;cursor:pointer;font-size:13px;font-weight:400;line-height:19.5px;letter-spacing:0;color:#212121}.search-results__row:hover:not(.search-results__row--head){background-color:#f3f3f3}.search-results__row--head{cursor:default;color:#909090;font-size:12px;font-weight:500;line-height:18px;letter-spacing:0}.search-results__cell{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.search-results__cell--primary{font-weight:600}.search-results__cell--head{color:#909090}.search-results__ai-row{display:flex;align-items:center;gap:10px;width:100%;padding:10px 0;border:none;background:transparent;text-align:left;cursor:pointer;font-size:13px;font-weight:400;line-height:19.5px;letter-spacing:0;color:#212121}.search-results__ai-row:hover{background-color:#f3f3f3}.search-results__ai-icon{color:#223cff;flex-shrink:0}.search-results__empty{padding:25px 0;color:#909090;font-size:13px;font-weight:400;line-height:19.5px;letter-spacing:0}.search-results__hl{background-color:#fff59d;color:inherit;padding:0;border-radius:2px}\n"] }]
6170
- }], propDecorators: { query: [{ type: i0.Input, args: [{ isSignal: true, alias: "query", required: false }] }], groups: [{ type: i0.Input, args: [{ isSignal: true, alias: "groups", required: false }] }], availableTypes: [{ type: i0.Input, args: [{ isSignal: true, alias: "availableTypes", required: false }] }], typeFilter: [{ type: i0.Input, args: [{ isSignal: true, alias: "typeFilter", required: false }] }, { type: i0.Output, args: ["typeFilterChange"] }], resultClick: [{ type: i0.Output, args: ["resultClick"] }], onDocumentClick: [{
6266
+ }], propDecorators: { query: [{ type: i0.Input, args: [{ isSignal: true, alias: "query", required: false }] }], groups: [{ type: i0.Input, args: [{ isSignal: true, alias: "groups", required: false }] }], searchPages: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchPages", required: false }] }], availableTypes: [{ type: i0.Input, args: [{ isSignal: true, alias: "availableTypes", required: false }] }], typeFilter: [{ type: i0.Input, args: [{ isSignal: true, alias: "typeFilter", required: false }] }, { type: i0.Output, args: ["typeFilterChange"] }], resultClick: [{ type: i0.Output, args: ["resultClick"] }], onDocumentClick: [{
6171
6267
  type: HostListener,
6172
6268
  args: ['document:click', ['$event']]
6173
6269
  }] } });
@@ -7088,7 +7184,10 @@ class ChatComponent {
7088
7184
  product;
7089
7185
  currentThreadId;
7090
7186
  ngOnInit() {
7091
- this.product = this.resolveProduct();
7187
+ const product = this.resolveProduct();
7188
+ if (!product)
7189
+ return;
7190
+ this.product = product;
7092
7191
  this.dispatcher.responses$
7093
7192
  .pipe(takeUntilDestroyed(this.destroyRef))
7094
7193
  .subscribe(response => this.handleResponse(response));
@@ -7098,12 +7197,16 @@ class ChatComponent {
7098
7197
  this.greet();
7099
7198
  }
7100
7199
  newChat() {
7200
+ if (!this.product)
7201
+ return;
7101
7202
  this.setThreadId(undefined);
7102
7203
  this.turns.set([]);
7103
7204
  this.showHistory.set(false);
7104
7205
  this.greet();
7105
7206
  }
7106
7207
  send() {
7208
+ if (!this.product)
7209
+ return;
7107
7210
  const text = this.inputControl.value?.trim();
7108
7211
  if (!text || this.activeRequest())
7109
7212
  return;
@@ -7112,6 +7215,8 @@ class ChatComponent {
7112
7215
  this.dispatchToBackend(text);
7113
7216
  }
7114
7217
  toggleHistory() {
7218
+ if (!this.product)
7219
+ return;
7115
7220
  const next = !this.showHistory();
7116
7221
  this.showHistory.set(next);
7117
7222
  if (next && this.threads() === undefined) {
@@ -7172,6 +7277,8 @@ class ChatComponent {
7172
7277
  }
7173
7278
  }
7174
7279
  greet() {
7280
+ if (!this.product)
7281
+ return;
7175
7282
  this.activeRequest.set(true);
7176
7283
  void this.chat
7177
7284
  .sendMessage({
@@ -7185,6 +7292,8 @@ class ChatComponent {
7185
7292
  .catch(() => this.handleError());
7186
7293
  }
7187
7294
  dispatchToBackend(question) {
7295
+ if (!this.product)
7296
+ return;
7188
7297
  this.activeRequest.set(true);
7189
7298
  this.scrollDown();
7190
7299
  void this.chat
@@ -7293,7 +7402,7 @@ class ChatComponent {
7293
7402
  case Product.ADMIN:
7294
7403
  return 'admin';
7295
7404
  default:
7296
- throw new Error('Product not found');
7405
+ return undefined;
7297
7406
  }
7298
7407
  }
7299
7408
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ChatComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
@@ -7333,6 +7442,7 @@ class WorkspaceNavbarComponent {
7333
7442
  recommendedFilters = input([], ...(ngDevMode ? [{ debugName: "recommendedFilters" }] : /* istanbul ignore next */ []));
7334
7443
  activeFilter = model(null, ...(ngDevMode ? [{ debugName: "activeFilter" }] : /* istanbul ignore next */ []));
7335
7444
  resultGroups = input([], ...(ngDevMode ? [{ debugName: "resultGroups" }] : /* istanbul ignore next */ []));
7445
+ searchPages = input(null, ...(ngDevMode ? [{ debugName: "searchPages" }] : /* istanbul ignore next */ []));
7336
7446
  pageSuggestion = input(null, ...(ngDevMode ? [{ debugName: "pageSuggestion" }] : /* istanbul ignore next */ []));
7337
7447
  aiSuggestions = input([], ...(ngDevMode ? [{ debugName: "aiSuggestions" }] : /* istanbul ignore next */ []));
7338
7448
  searchLoading = input(false, ...(ngDevMode ? [{ debugName: "searchLoading" }] : /* istanbul ignore next */ []));
@@ -7365,6 +7475,9 @@ class WorkspaceNavbarComponent {
7365
7475
  const url = this.currentUrl() ?? '';
7366
7476
  return this.findBestRouteMatch(url, this.activeSubTopNavItems())?.id ?? '';
7367
7477
  }, ...(ngDevMode ? [{ debugName: "activeSubTopNavItemId" }] : /* istanbul ignore next */ []));
7478
+ effectiveSearchPages = computed(() => {
7479
+ return this.searchPages() ?? buildSearchPagesFromNavItems(this.topNavItems());
7480
+ }, ...(ngDevMode ? [{ debugName: "effectiveSearchPages" }] : /* istanbul ignore next */ []));
7368
7481
  activeWorkspaceAppId = computed(() => {
7369
7482
  return this.workspaceNavbarService.activeAppIdSignal() ?? this.appId();
7370
7483
  }, ...(ngDevMode ? [{ debugName: "activeWorkspaceAppId" }] : /* istanbul ignore next */ []));
@@ -7430,11 +7543,19 @@ class WorkspaceNavbarComponent {
7430
7543
  hasSubTopNav = computed(() => this.activeSubTopNavItems().length > 0, ...(ngDevMode ? [{ debugName: "hasSubTopNav" }] : /* istanbul ignore next */ []));
7431
7544
  showTools = computed(() => this.workspaceNavbarService.sessionSignal()?.companyId ===
7432
7545
  WorkspaceNavbarService.HANDBOOK_COMPANY_ID, ...(ngDevMode ? [{ debugName: "showTools" }] : /* istanbul ignore next */ []));
7546
+ canShowChat = computed(() => {
7547
+ const product = this.workspaceNavbarService.sessionSignal()?.product;
7548
+ return this.showTools() && this.isChatProduct(product);
7549
+ }, ...(ngDevMode ? [{ debugName: "canShowChat" }] : /* istanbul ignore next */ []));
7433
7550
  chatOpen = signal(false, ...(ngDevMode ? [{ debugName: "chatOpen" }] : /* istanbul ignore next */ []));
7434
7551
  constructor() {
7435
7552
  effect(() => {
7436
7553
  this.getLogo(this.selectedCompanyId());
7437
7554
  });
7555
+ effect(() => {
7556
+ if (!this.canShowChat())
7557
+ this.chatOpen.set(false);
7558
+ });
7438
7559
  }
7439
7560
  ngAfterViewInit() {
7440
7561
  if (isPlatformBrowser(this.platformId)) {
@@ -7519,6 +7640,9 @@ class WorkspaceNavbarComponent {
7519
7640
  matchesRoute(url, route) {
7520
7641
  return url === route || url.startsWith(route + '/') || url.startsWith(route + '?');
7521
7642
  }
7643
+ isChatProduct(product) {
7644
+ return product === Product.ADMIN || product === Product.SETHUB || product === Product.SZALES;
7645
+ }
7522
7646
  getLogo(companyId) {
7523
7647
  if (!companyId)
7524
7648
  return;
@@ -7527,7 +7651,7 @@ class WorkspaceNavbarComponent {
7527
7651
  });
7528
7652
  }
7529
7653
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: WorkspaceNavbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7530
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.13", type: WorkspaceNavbarComponent, isStandalone: true, selector: "ao-workspace-navbar", inputs: { appId: { classPropertyName: "appId", publicName: "appId", isSignal: true, isRequired: true, transformFunction: null }, production: { classPropertyName: "production", publicName: "production", isSignal: true, isRequired: false, transformFunction: null }, topNavItems: { classPropertyName: "topNavItems", publicName: "topNavItems", isSignal: true, isRequired: false, transformFunction: null }, showSearch: { classPropertyName: "showSearch", publicName: "showSearch", isSignal: true, isRequired: false, transformFunction: null }, showNotifications: { classPropertyName: "showNotifications", publicName: "showNotifications", isSignal: true, isRequired: false, transformFunction: null }, notificationCount: { classPropertyName: "notificationCount", publicName: "notificationCount", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholder: { classPropertyName: "searchPlaceholder", publicName: "searchPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, recommendedFilters: { classPropertyName: "recommendedFilters", publicName: "recommendedFilters", isSignal: true, isRequired: false, transformFunction: null }, activeFilter: { classPropertyName: "activeFilter", publicName: "activeFilter", isSignal: true, isRequired: false, transformFunction: null }, resultGroups: { classPropertyName: "resultGroups", publicName: "resultGroups", isSignal: true, isRequired: false, transformFunction: null }, pageSuggestion: { classPropertyName: "pageSuggestion", publicName: "pageSuggestion", isSignal: true, isRequired: false, transformFunction: null }, aiSuggestions: { classPropertyName: "aiSuggestions", publicName: "aiSuggestions", isSignal: true, isRequired: false, transformFunction: null }, searchLoading: { classPropertyName: "searchLoading", publicName: "searchLoading", isSignal: true, isRequired: false, transformFunction: null }, searchError: { classPropertyName: "searchError", publicName: "searchError", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { activeFilter: "activeFilterChange", topNavItemClick: "topNavItemClick", topNavItemChange: "topNavItemChange", subTopNavItemClick: "subTopNavItemClick", subTopNavItemChange: "subTopNavItemChange", appSwitched: "appSwitched", searchSubmit: "searchSubmit", searchQueryChange: "searchQueryChange", searchViewAll: "searchViewAll", searchResultSelect: "searchResultSelect", searchAiSuggestionSelect: "searchAiSuggestionSelect", searchPageSuggestionSelect: "searchPageSuggestionSelect", searchFilterSelect: "searchFilterSelect", searchFilterClear: "searchFilterClear", notificationClick: "notificationClick" }, host: { classAttribute: "ao-workspace-navbar" }, ngImport: i0, template: "<ao-side-nav\n [items]=\"workspaceAppNavItems()\"\n [bottomItems]=\"bottomNavItems()\"\n [activeItemId]=\"activeWorkspaceAppId()\"\n [expanded]=\"false\"\n (itemClick)=\"onSideNavItemClick($event)\"\n>\n <ao-logo-menu\n aoSideNavLogo\n [items]=\"companyMenuItems()\"\n [selectedItem]=\"selectedCompanyId()\"\n (selectionChange)=\"onCompanyChange($event)\"\n >\n @if (companyLogo()) {\n <img [src]=\"companyLogo()\" alt=\"Logo\" class=\"workspace-navbar__logo\" />\n } @else {\n <svg\n class=\"workspace-navbar__logo\"\n width=\"96\"\n height=\"120\"\n viewBox=\"0 0 96 120\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-label=\"Logo\"\n role=\"img\"\n >\n <path\n d=\"M36.6592 37.5955L31.1625 31.4924C28.1349 28.1284 28.4073 22.9247 31.7689 19.8971C33.2769 18.5401 35.2266 17.7918 37.2633 17.7918C39.5929 17.7918 41.8195 18.7781 43.3664 20.4967C45.458 22.824 46.0484 26.0826 44.911 28.998C44.4465 30.1903 43.7234 31.2338 42.7623 32.0988L36.6592 37.5955ZM95.5987 76.4613L83.6854 63.2299L70.4585 75.1363L48.5725 50.8269L54.6802 45.3279C57.6779 42.6253 60.035 39.2156 61.4949 35.4696C65.0969 26.2497 63.2204 15.9497 56.6001 8.58568C46.9981 -2.06444 30.5149 -2.92488 19.8556 6.66801C9.20088 16.2655 8.3359 32.7464 17.9311 43.4057L23.4255 49.5065L14.1118 57.8957C13.5099 58.438 12.9287 58.9621 12.3817 59.4792L12.3703 59.4655L11.2742 60.4518C4.49141 66.5572 0.493621 74.9372 0.0153502 84.045C-0.00525137 84.4317 -0.000673098 84.8185 0.00390115 85.2029L0.0084674 85.7086L0.00160688 87.1494L17.7823 87.1503L17.7938 85.7224L17.7915 85.4134C17.7892 85.2716 17.7869 85.1297 17.7938 84.9809C18.0203 80.6216 19.938 76.61 23.1852 73.6855L35.341 62.7379L57.2271 87.0473L45.0712 97.995C42.1055 100.668 38.261 102.151 34.2449 102.174L32.817 102.183V120L34.2586 119.998C42.6547 119.977 50.7258 116.86 56.9868 111.226L69.1404 100.281L81.0446 113.503L94.276 101.592L82.3718 88.3677L95.5987 76.4613Z\"\n fill=\"#FF004D\"\n />\n </svg>\n }\n </ao-logo-menu>\n</ao-side-nav>\n\n<div class=\"workspace-navbar__main\" [class.workspace-navbar__main--with-subnav]=\"hasSubTopNav()\">\n <div\n class=\"workspace-navbar__nav-wrapper\"\n [class.workspace-navbar__nav-wrapper--hidden]=\"navHidden()\"\n >\n <ao-top-nav\n [items]=\"topNavItems()\"\n [activeItemId]=\"activeTopNavItemId()\"\n [showSearch]=\"showSearch()\"\n [showNotifications]=\"showNotifications()\"\n [notificationCount]=\"notificationCount()\"\n [searchPlaceholder]=\"searchPlaceholder()\"\n [recommendedFilters]=\"recommendedFilters()\"\n [(activeFilter)]=\"activeFilter\"\n [resultGroups]=\"resultGroups()\"\n [pageSuggestion]=\"pageSuggestion()\"\n [aiSuggestions]=\"aiSuggestions()\"\n [searchLoading]=\"searchLoading()\"\n [searchError]=\"searchError()\"\n (itemClick)=\"onTopNavClick($event)\"\n (itemChange)=\"onTopNavChange($event)\"\n (searchSubmit)=\"searchSubmit.emit($event)\"\n (searchQueryChange)=\"searchQueryChange.emit($event)\"\n (searchViewAll)=\"searchViewAll.emit($event)\"\n (searchResultSelect)=\"searchResultSelect.emit($event)\"\n (searchAiSuggestionSelect)=\"searchAiSuggestionSelect.emit($event)\"\n (searchPageSuggestionSelect)=\"searchPageSuggestionSelect.emit($event)\"\n (searchFilterSelect)=\"searchFilterSelect.emit($event)\"\n (searchFilterClear)=\"searchFilterClear.emit()\"\n (notificationClick)=\"onNotificationClick()\"\n [showTools]=\"showTools()\"\n />\n\n @if (hasSubTopNav()) {\n <ao-sub-top-nav\n [items]=\"activeSubTopNavItems()\"\n [activeItemId]=\"activeSubTopNavItemId()\"\n (itemClick)=\"onSubTopNavClick($event)\"\n (itemChange)=\"onSubTopNavChange($event)\"\n />\n }\n </div>\n\n <main class=\"workspace-navbar__content\">\n <ng-content />\n </main>\n</div>\n\n<button ao-button class=\"handbook-chat\" variant=\"primary\" (click)=\"chatOpen.set(!chatOpen())\">\n <ao-icon [svg]=\"chatIcon\" />\n</button>\n\n<div class=\"chat-container\" [class.open]=\"chatOpen()\">\n <lib-chat [searchType]=\"activeFilter()?.type\" (closed)=\"chatOpen.set(false)\" />\n</div>\n", styles: [":host{display:block;min-height:100vh}.workspace-navbar__main{margin-left:70px;padding-top:50px;min-height:100vh}.workspace-navbar__main.workspace-navbar__main--with-subnav{padding-top:100px}.workspace-navbar__nav-wrapper{position:fixed;top:0;left:0;right:0;z-index:3;transform:translateY(0);transition:transform .25s ease}.workspace-navbar__nav-wrapper--hidden{transform:translateY(-100%)}.workspace-navbar__content{padding:30px 0}.workspace-navbar__logo{max-width:32px;max-height:32px;object-fit:contain}.handbook-chat{position:fixed;right:1.5em;bottom:1.5em;z-index:100}.chat-container{position:fixed;width:500px;height:100vh;right:0;top:0;margin-right:-500px;transition:margin-right .5s ease-in-out;background-color:#fff}.chat-container.open{margin-right:0;z-index:501}\n"], dependencies: [{ kind: "component", type: SideNavComponent, selector: "ao-side-nav", inputs: ["items", "bottomItems", "activeItemId", "expanded"], outputs: ["activeItemIdChange", "itemClick", "itemChange", "bottomItemClick"] }, { kind: "component", type: TopNavComponent, selector: "ao-top-nav", inputs: ["items", "activeItemId", "showSearch", "showNotifications", "notificationCount", "searchPlaceholder", "showTools", "recommendedFilters", "activeFilter", "resultGroups", "pageSuggestion", "aiSuggestions", "searchLoading", "searchError"], outputs: ["activeItemIdChange", "activeFilterChange", "itemClick", "itemChange", "searchSubmit", "searchQueryChange", "searchResultSelect", "searchAiSuggestionSelect", "searchPageSuggestionSelect", "searchFilterSelect", "searchFilterClear", "searchViewAll", "notificationClick"] }, { kind: "component", type: SubTopNavComponent, selector: "ao-sub-top-nav", inputs: ["items", "activeItemId"], outputs: ["activeItemIdChange", "itemClick", "itemChange"] }, { kind: "component", type: LogoMenuComponent, selector: "ao-logo-menu", inputs: ["items", "selectedItem", "searchPlaceholder"], outputs: ["selectedItemChange", "selectionChange"] }, { kind: "component", type: IconComponent, selector: "ao-icon", inputs: ["svg", "size"] }, { kind: "component", type: ButtonComponent, selector: "button[ao-button], a[ao-button]", inputs: ["variant", "icon", "iconTrailing"] }, { kind: "component", type: ChatComponent, selector: "lib-chat", inputs: ["searchType"], outputs: ["closed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
7654
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.13", type: WorkspaceNavbarComponent, isStandalone: true, selector: "ao-workspace-navbar", inputs: { appId: { classPropertyName: "appId", publicName: "appId", isSignal: true, isRequired: true, transformFunction: null }, production: { classPropertyName: "production", publicName: "production", isSignal: true, isRequired: false, transformFunction: null }, topNavItems: { classPropertyName: "topNavItems", publicName: "topNavItems", isSignal: true, isRequired: false, transformFunction: null }, showSearch: { classPropertyName: "showSearch", publicName: "showSearch", isSignal: true, isRequired: false, transformFunction: null }, showNotifications: { classPropertyName: "showNotifications", publicName: "showNotifications", isSignal: true, isRequired: false, transformFunction: null }, notificationCount: { classPropertyName: "notificationCount", publicName: "notificationCount", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholder: { classPropertyName: "searchPlaceholder", publicName: "searchPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, recommendedFilters: { classPropertyName: "recommendedFilters", publicName: "recommendedFilters", isSignal: true, isRequired: false, transformFunction: null }, activeFilter: { classPropertyName: "activeFilter", publicName: "activeFilter", isSignal: true, isRequired: false, transformFunction: null }, resultGroups: { classPropertyName: "resultGroups", publicName: "resultGroups", isSignal: true, isRequired: false, transformFunction: null }, searchPages: { classPropertyName: "searchPages", publicName: "searchPages", isSignal: true, isRequired: false, transformFunction: null }, pageSuggestion: { classPropertyName: "pageSuggestion", publicName: "pageSuggestion", isSignal: true, isRequired: false, transformFunction: null }, aiSuggestions: { classPropertyName: "aiSuggestions", publicName: "aiSuggestions", isSignal: true, isRequired: false, transformFunction: null }, searchLoading: { classPropertyName: "searchLoading", publicName: "searchLoading", isSignal: true, isRequired: false, transformFunction: null }, searchError: { classPropertyName: "searchError", publicName: "searchError", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { activeFilter: "activeFilterChange", topNavItemClick: "topNavItemClick", topNavItemChange: "topNavItemChange", subTopNavItemClick: "subTopNavItemClick", subTopNavItemChange: "subTopNavItemChange", appSwitched: "appSwitched", searchSubmit: "searchSubmit", searchQueryChange: "searchQueryChange", searchViewAll: "searchViewAll", searchResultSelect: "searchResultSelect", searchAiSuggestionSelect: "searchAiSuggestionSelect", searchPageSuggestionSelect: "searchPageSuggestionSelect", searchFilterSelect: "searchFilterSelect", searchFilterClear: "searchFilterClear", notificationClick: "notificationClick" }, host: { classAttribute: "ao-workspace-navbar" }, ngImport: i0, template: "<ao-side-nav\n [items]=\"workspaceAppNavItems()\"\n [bottomItems]=\"bottomNavItems()\"\n [activeItemId]=\"activeWorkspaceAppId()\"\n [expanded]=\"false\"\n (itemClick)=\"onSideNavItemClick($event)\"\n>\n <ao-logo-menu\n aoSideNavLogo\n [items]=\"companyMenuItems()\"\n [selectedItem]=\"selectedCompanyId()\"\n (selectionChange)=\"onCompanyChange($event)\"\n >\n @if (companyLogo()) {\n <img [src]=\"companyLogo()\" alt=\"Logo\" class=\"workspace-navbar__logo\" />\n } @else {\n <svg\n class=\"workspace-navbar__logo\"\n width=\"96\"\n height=\"120\"\n viewBox=\"0 0 96 120\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-label=\"Logo\"\n role=\"img\"\n >\n <path\n d=\"M36.6592 37.5955L31.1625 31.4924C28.1349 28.1284 28.4073 22.9247 31.7689 19.8971C33.2769 18.5401 35.2266 17.7918 37.2633 17.7918C39.5929 17.7918 41.8195 18.7781 43.3664 20.4967C45.458 22.824 46.0484 26.0826 44.911 28.998C44.4465 30.1903 43.7234 31.2338 42.7623 32.0988L36.6592 37.5955ZM95.5987 76.4613L83.6854 63.2299L70.4585 75.1363L48.5725 50.8269L54.6802 45.3279C57.6779 42.6253 60.035 39.2156 61.4949 35.4696C65.0969 26.2497 63.2204 15.9497 56.6001 8.58568C46.9981 -2.06444 30.5149 -2.92488 19.8556 6.66801C9.20088 16.2655 8.3359 32.7464 17.9311 43.4057L23.4255 49.5065L14.1118 57.8957C13.5099 58.438 12.9287 58.9621 12.3817 59.4792L12.3703 59.4655L11.2742 60.4518C4.49141 66.5572 0.493621 74.9372 0.0153502 84.045C-0.00525137 84.4317 -0.000673098 84.8185 0.00390115 85.2029L0.0084674 85.7086L0.00160688 87.1494L17.7823 87.1503L17.7938 85.7224L17.7915 85.4134C17.7892 85.2716 17.7869 85.1297 17.7938 84.9809C18.0203 80.6216 19.938 76.61 23.1852 73.6855L35.341 62.7379L57.2271 87.0473L45.0712 97.995C42.1055 100.668 38.261 102.151 34.2449 102.174L32.817 102.183V120L34.2586 119.998C42.6547 119.977 50.7258 116.86 56.9868 111.226L69.1404 100.281L81.0446 113.503L94.276 101.592L82.3718 88.3677L95.5987 76.4613Z\"\n fill=\"#FF004D\"\n />\n </svg>\n }\n </ao-logo-menu>\n</ao-side-nav>\n\n<div class=\"workspace-navbar__main\" [class.workspace-navbar__main--with-subnav]=\"hasSubTopNav()\">\n <div\n class=\"workspace-navbar__nav-wrapper\"\n [class.workspace-navbar__nav-wrapper--hidden]=\"navHidden()\"\n >\n <ao-top-nav\n [items]=\"topNavItems()\"\n [activeItemId]=\"activeTopNavItemId()\"\n [showSearch]=\"showSearch()\"\n [showNotifications]=\"showNotifications()\"\n [notificationCount]=\"notificationCount()\"\n [searchPlaceholder]=\"searchPlaceholder()\"\n [recommendedFilters]=\"recommendedFilters()\"\n [(activeFilter)]=\"activeFilter\"\n [resultGroups]=\"resultGroups()\"\n [searchPages]=\"effectiveSearchPages()\"\n [pageSuggestion]=\"pageSuggestion()\"\n [aiSuggestions]=\"aiSuggestions()\"\n [searchLoading]=\"searchLoading()\"\n [searchError]=\"searchError()\"\n (itemClick)=\"onTopNavClick($event)\"\n (itemChange)=\"onTopNavChange($event)\"\n (searchSubmit)=\"searchSubmit.emit($event)\"\n (searchQueryChange)=\"searchQueryChange.emit($event)\"\n (searchViewAll)=\"searchViewAll.emit($event)\"\n (searchResultSelect)=\"searchResultSelect.emit($event)\"\n (searchAiSuggestionSelect)=\"searchAiSuggestionSelect.emit($event)\"\n (searchPageSuggestionSelect)=\"searchPageSuggestionSelect.emit($event)\"\n (searchFilterSelect)=\"searchFilterSelect.emit($event)\"\n (searchFilterClear)=\"searchFilterClear.emit()\"\n (notificationClick)=\"onNotificationClick()\"\n [showTools]=\"showTools()\"\n />\n\n @if (hasSubTopNav()) {\n <ao-sub-top-nav\n [items]=\"activeSubTopNavItems()\"\n [activeItemId]=\"activeSubTopNavItemId()\"\n (itemClick)=\"onSubTopNavClick($event)\"\n (itemChange)=\"onSubTopNavChange($event)\"\n />\n }\n </div>\n\n <main class=\"workspace-navbar__content\">\n <ng-content />\n </main>\n</div>\n\n@if (canShowChat()) {\n <button ao-button class=\"handbook-chat\" variant=\"primary\" (click)=\"chatOpen.set(!chatOpen())\">\n <ao-icon [svg]=\"chatIcon\" />\n </button>\n\n <div class=\"chat-container\" [class.open]=\"chatOpen()\">\n <lib-chat [searchType]=\"activeFilter()?.type\" (closed)=\"chatOpen.set(false)\" />\n </div>\n}\n", styles: [":host{display:block;min-height:100vh}.workspace-navbar__main{margin-left:70px;padding-top:50px;min-height:100vh}.workspace-navbar__main.workspace-navbar__main--with-subnav{padding-top:100px}.workspace-navbar__nav-wrapper{position:fixed;top:0;left:0;right:0;z-index:3;transform:translateY(0);transition:transform .25s ease}.workspace-navbar__nav-wrapper--hidden{transform:translateY(-100%)}.workspace-navbar__content{padding:30px 0}.workspace-navbar__logo{max-width:32px;max-height:32px;object-fit:contain}.handbook-chat{position:fixed;right:1.5em;bottom:1.5em;z-index:100}.chat-container{position:fixed;width:500px;height:100vh;right:0;top:0;margin-right:-500px;transition:margin-right .5s ease-in-out;background-color:#fff}.chat-container.open{margin-right:0;z-index:501}\n"], dependencies: [{ kind: "component", type: SideNavComponent, selector: "ao-side-nav", inputs: ["items", "bottomItems", "activeItemId", "expanded"], outputs: ["activeItemIdChange", "itemClick", "itemChange", "bottomItemClick"] }, { kind: "component", type: TopNavComponent, selector: "ao-top-nav", inputs: ["items", "activeItemId", "showSearch", "showNotifications", "notificationCount", "searchPlaceholder", "showTools", "recommendedFilters", "activeFilter", "resultGroups", "searchPages", "pageSuggestion", "aiSuggestions", "searchLoading", "searchError"], outputs: ["activeItemIdChange", "activeFilterChange", "itemClick", "itemChange", "searchSubmit", "searchQueryChange", "searchResultSelect", "searchAiSuggestionSelect", "searchPageSuggestionSelect", "searchFilterSelect", "searchFilterClear", "searchViewAll", "notificationClick"] }, { kind: "component", type: SubTopNavComponent, selector: "ao-sub-top-nav", inputs: ["items", "activeItemId"], outputs: ["activeItemIdChange", "itemClick", "itemChange"] }, { kind: "component", type: LogoMenuComponent, selector: "ao-logo-menu", inputs: ["items", "selectedItem", "searchPlaceholder"], outputs: ["selectedItemChange", "selectionChange"] }, { kind: "component", type: IconComponent, selector: "ao-icon", inputs: ["svg", "size"] }, { kind: "component", type: ButtonComponent, selector: "button[ao-button], a[ao-button]", inputs: ["variant", "icon", "iconTrailing"] }, { kind: "component", type: ChatComponent, selector: "lib-chat", inputs: ["searchType"], outputs: ["closed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
7531
7655
  }
7532
7656
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: WorkspaceNavbarComponent, decorators: [{
7533
7657
  type: Component,
@@ -7541,8 +7665,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImpo
7541
7665
  ChatComponent,
7542
7666
  ], changeDetection: ChangeDetectionStrategy.OnPush, host: {
7543
7667
  class: 'ao-workspace-navbar',
7544
- }, template: "<ao-side-nav\n [items]=\"workspaceAppNavItems()\"\n [bottomItems]=\"bottomNavItems()\"\n [activeItemId]=\"activeWorkspaceAppId()\"\n [expanded]=\"false\"\n (itemClick)=\"onSideNavItemClick($event)\"\n>\n <ao-logo-menu\n aoSideNavLogo\n [items]=\"companyMenuItems()\"\n [selectedItem]=\"selectedCompanyId()\"\n (selectionChange)=\"onCompanyChange($event)\"\n >\n @if (companyLogo()) {\n <img [src]=\"companyLogo()\" alt=\"Logo\" class=\"workspace-navbar__logo\" />\n } @else {\n <svg\n class=\"workspace-navbar__logo\"\n width=\"96\"\n height=\"120\"\n viewBox=\"0 0 96 120\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-label=\"Logo\"\n role=\"img\"\n >\n <path\n d=\"M36.6592 37.5955L31.1625 31.4924C28.1349 28.1284 28.4073 22.9247 31.7689 19.8971C33.2769 18.5401 35.2266 17.7918 37.2633 17.7918C39.5929 17.7918 41.8195 18.7781 43.3664 20.4967C45.458 22.824 46.0484 26.0826 44.911 28.998C44.4465 30.1903 43.7234 31.2338 42.7623 32.0988L36.6592 37.5955ZM95.5987 76.4613L83.6854 63.2299L70.4585 75.1363L48.5725 50.8269L54.6802 45.3279C57.6779 42.6253 60.035 39.2156 61.4949 35.4696C65.0969 26.2497 63.2204 15.9497 56.6001 8.58568C46.9981 -2.06444 30.5149 -2.92488 19.8556 6.66801C9.20088 16.2655 8.3359 32.7464 17.9311 43.4057L23.4255 49.5065L14.1118 57.8957C13.5099 58.438 12.9287 58.9621 12.3817 59.4792L12.3703 59.4655L11.2742 60.4518C4.49141 66.5572 0.493621 74.9372 0.0153502 84.045C-0.00525137 84.4317 -0.000673098 84.8185 0.00390115 85.2029L0.0084674 85.7086L0.00160688 87.1494L17.7823 87.1503L17.7938 85.7224L17.7915 85.4134C17.7892 85.2716 17.7869 85.1297 17.7938 84.9809C18.0203 80.6216 19.938 76.61 23.1852 73.6855L35.341 62.7379L57.2271 87.0473L45.0712 97.995C42.1055 100.668 38.261 102.151 34.2449 102.174L32.817 102.183V120L34.2586 119.998C42.6547 119.977 50.7258 116.86 56.9868 111.226L69.1404 100.281L81.0446 113.503L94.276 101.592L82.3718 88.3677L95.5987 76.4613Z\"\n fill=\"#FF004D\"\n />\n </svg>\n }\n </ao-logo-menu>\n</ao-side-nav>\n\n<div class=\"workspace-navbar__main\" [class.workspace-navbar__main--with-subnav]=\"hasSubTopNav()\">\n <div\n class=\"workspace-navbar__nav-wrapper\"\n [class.workspace-navbar__nav-wrapper--hidden]=\"navHidden()\"\n >\n <ao-top-nav\n [items]=\"topNavItems()\"\n [activeItemId]=\"activeTopNavItemId()\"\n [showSearch]=\"showSearch()\"\n [showNotifications]=\"showNotifications()\"\n [notificationCount]=\"notificationCount()\"\n [searchPlaceholder]=\"searchPlaceholder()\"\n [recommendedFilters]=\"recommendedFilters()\"\n [(activeFilter)]=\"activeFilter\"\n [resultGroups]=\"resultGroups()\"\n [pageSuggestion]=\"pageSuggestion()\"\n [aiSuggestions]=\"aiSuggestions()\"\n [searchLoading]=\"searchLoading()\"\n [searchError]=\"searchError()\"\n (itemClick)=\"onTopNavClick($event)\"\n (itemChange)=\"onTopNavChange($event)\"\n (searchSubmit)=\"searchSubmit.emit($event)\"\n (searchQueryChange)=\"searchQueryChange.emit($event)\"\n (searchViewAll)=\"searchViewAll.emit($event)\"\n (searchResultSelect)=\"searchResultSelect.emit($event)\"\n (searchAiSuggestionSelect)=\"searchAiSuggestionSelect.emit($event)\"\n (searchPageSuggestionSelect)=\"searchPageSuggestionSelect.emit($event)\"\n (searchFilterSelect)=\"searchFilterSelect.emit($event)\"\n (searchFilterClear)=\"searchFilterClear.emit()\"\n (notificationClick)=\"onNotificationClick()\"\n [showTools]=\"showTools()\"\n />\n\n @if (hasSubTopNav()) {\n <ao-sub-top-nav\n [items]=\"activeSubTopNavItems()\"\n [activeItemId]=\"activeSubTopNavItemId()\"\n (itemClick)=\"onSubTopNavClick($event)\"\n (itemChange)=\"onSubTopNavChange($event)\"\n />\n }\n </div>\n\n <main class=\"workspace-navbar__content\">\n <ng-content />\n </main>\n</div>\n\n<button ao-button class=\"handbook-chat\" variant=\"primary\" (click)=\"chatOpen.set(!chatOpen())\">\n <ao-icon [svg]=\"chatIcon\" />\n</button>\n\n<div class=\"chat-container\" [class.open]=\"chatOpen()\">\n <lib-chat [searchType]=\"activeFilter()?.type\" (closed)=\"chatOpen.set(false)\" />\n</div>\n", styles: [":host{display:block;min-height:100vh}.workspace-navbar__main{margin-left:70px;padding-top:50px;min-height:100vh}.workspace-navbar__main.workspace-navbar__main--with-subnav{padding-top:100px}.workspace-navbar__nav-wrapper{position:fixed;top:0;left:0;right:0;z-index:3;transform:translateY(0);transition:transform .25s ease}.workspace-navbar__nav-wrapper--hidden{transform:translateY(-100%)}.workspace-navbar__content{padding:30px 0}.workspace-navbar__logo{max-width:32px;max-height:32px;object-fit:contain}.handbook-chat{position:fixed;right:1.5em;bottom:1.5em;z-index:100}.chat-container{position:fixed;width:500px;height:100vh;right:0;top:0;margin-right:-500px;transition:margin-right .5s ease-in-out;background-color:#fff}.chat-container.open{margin-right:0;z-index:501}\n"] }]
7545
- }], ctorParameters: () => [], propDecorators: { appId: [{ type: i0.Input, args: [{ isSignal: true, alias: "appId", required: true }] }], production: [{ type: i0.Input, args: [{ isSignal: true, alias: "production", required: false }] }], topNavItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "topNavItems", required: false }] }], showSearch: [{ type: i0.Input, args: [{ isSignal: true, alias: "showSearch", required: false }] }], showNotifications: [{ type: i0.Input, args: [{ isSignal: true, alias: "showNotifications", required: false }] }], notificationCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "notificationCount", required: false }] }], searchPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchPlaceholder", required: false }] }], recommendedFilters: [{ type: i0.Input, args: [{ isSignal: true, alias: "recommendedFilters", required: false }] }], activeFilter: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeFilter", required: false }] }, { type: i0.Output, args: ["activeFilterChange"] }], resultGroups: [{ type: i0.Input, args: [{ isSignal: true, alias: "resultGroups", required: false }] }], pageSuggestion: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageSuggestion", required: false }] }], aiSuggestions: [{ type: i0.Input, args: [{ isSignal: true, alias: "aiSuggestions", required: false }] }], searchLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchLoading", required: false }] }], searchError: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchError", required: false }] }], topNavItemClick: [{ type: i0.Output, args: ["topNavItemClick"] }], topNavItemChange: [{ type: i0.Output, args: ["topNavItemChange"] }], subTopNavItemClick: [{ type: i0.Output, args: ["subTopNavItemClick"] }], subTopNavItemChange: [{ type: i0.Output, args: ["subTopNavItemChange"] }], appSwitched: [{ type: i0.Output, args: ["appSwitched"] }], searchSubmit: [{ type: i0.Output, args: ["searchSubmit"] }], searchQueryChange: [{ type: i0.Output, args: ["searchQueryChange"] }], searchViewAll: [{ type: i0.Output, args: ["searchViewAll"] }], searchResultSelect: [{ type: i0.Output, args: ["searchResultSelect"] }], searchAiSuggestionSelect: [{ type: i0.Output, args: ["searchAiSuggestionSelect"] }], searchPageSuggestionSelect: [{ type: i0.Output, args: ["searchPageSuggestionSelect"] }], searchFilterSelect: [{ type: i0.Output, args: ["searchFilterSelect"] }], searchFilterClear: [{ type: i0.Output, args: ["searchFilterClear"] }], notificationClick: [{ type: i0.Output, args: ["notificationClick"] }] } });
7668
+ }, template: "<ao-side-nav\n [items]=\"workspaceAppNavItems()\"\n [bottomItems]=\"bottomNavItems()\"\n [activeItemId]=\"activeWorkspaceAppId()\"\n [expanded]=\"false\"\n (itemClick)=\"onSideNavItemClick($event)\"\n>\n <ao-logo-menu\n aoSideNavLogo\n [items]=\"companyMenuItems()\"\n [selectedItem]=\"selectedCompanyId()\"\n (selectionChange)=\"onCompanyChange($event)\"\n >\n @if (companyLogo()) {\n <img [src]=\"companyLogo()\" alt=\"Logo\" class=\"workspace-navbar__logo\" />\n } @else {\n <svg\n class=\"workspace-navbar__logo\"\n width=\"96\"\n height=\"120\"\n viewBox=\"0 0 96 120\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-label=\"Logo\"\n role=\"img\"\n >\n <path\n d=\"M36.6592 37.5955L31.1625 31.4924C28.1349 28.1284 28.4073 22.9247 31.7689 19.8971C33.2769 18.5401 35.2266 17.7918 37.2633 17.7918C39.5929 17.7918 41.8195 18.7781 43.3664 20.4967C45.458 22.824 46.0484 26.0826 44.911 28.998C44.4465 30.1903 43.7234 31.2338 42.7623 32.0988L36.6592 37.5955ZM95.5987 76.4613L83.6854 63.2299L70.4585 75.1363L48.5725 50.8269L54.6802 45.3279C57.6779 42.6253 60.035 39.2156 61.4949 35.4696C65.0969 26.2497 63.2204 15.9497 56.6001 8.58568C46.9981 -2.06444 30.5149 -2.92488 19.8556 6.66801C9.20088 16.2655 8.3359 32.7464 17.9311 43.4057L23.4255 49.5065L14.1118 57.8957C13.5099 58.438 12.9287 58.9621 12.3817 59.4792L12.3703 59.4655L11.2742 60.4518C4.49141 66.5572 0.493621 74.9372 0.0153502 84.045C-0.00525137 84.4317 -0.000673098 84.8185 0.00390115 85.2029L0.0084674 85.7086L0.00160688 87.1494L17.7823 87.1503L17.7938 85.7224L17.7915 85.4134C17.7892 85.2716 17.7869 85.1297 17.7938 84.9809C18.0203 80.6216 19.938 76.61 23.1852 73.6855L35.341 62.7379L57.2271 87.0473L45.0712 97.995C42.1055 100.668 38.261 102.151 34.2449 102.174L32.817 102.183V120L34.2586 119.998C42.6547 119.977 50.7258 116.86 56.9868 111.226L69.1404 100.281L81.0446 113.503L94.276 101.592L82.3718 88.3677L95.5987 76.4613Z\"\n fill=\"#FF004D\"\n />\n </svg>\n }\n </ao-logo-menu>\n</ao-side-nav>\n\n<div class=\"workspace-navbar__main\" [class.workspace-navbar__main--with-subnav]=\"hasSubTopNav()\">\n <div\n class=\"workspace-navbar__nav-wrapper\"\n [class.workspace-navbar__nav-wrapper--hidden]=\"navHidden()\"\n >\n <ao-top-nav\n [items]=\"topNavItems()\"\n [activeItemId]=\"activeTopNavItemId()\"\n [showSearch]=\"showSearch()\"\n [showNotifications]=\"showNotifications()\"\n [notificationCount]=\"notificationCount()\"\n [searchPlaceholder]=\"searchPlaceholder()\"\n [recommendedFilters]=\"recommendedFilters()\"\n [(activeFilter)]=\"activeFilter\"\n [resultGroups]=\"resultGroups()\"\n [searchPages]=\"effectiveSearchPages()\"\n [pageSuggestion]=\"pageSuggestion()\"\n [aiSuggestions]=\"aiSuggestions()\"\n [searchLoading]=\"searchLoading()\"\n [searchError]=\"searchError()\"\n (itemClick)=\"onTopNavClick($event)\"\n (itemChange)=\"onTopNavChange($event)\"\n (searchSubmit)=\"searchSubmit.emit($event)\"\n (searchQueryChange)=\"searchQueryChange.emit($event)\"\n (searchViewAll)=\"searchViewAll.emit($event)\"\n (searchResultSelect)=\"searchResultSelect.emit($event)\"\n (searchAiSuggestionSelect)=\"searchAiSuggestionSelect.emit($event)\"\n (searchPageSuggestionSelect)=\"searchPageSuggestionSelect.emit($event)\"\n (searchFilterSelect)=\"searchFilterSelect.emit($event)\"\n (searchFilterClear)=\"searchFilterClear.emit()\"\n (notificationClick)=\"onNotificationClick()\"\n [showTools]=\"showTools()\"\n />\n\n @if (hasSubTopNav()) {\n <ao-sub-top-nav\n [items]=\"activeSubTopNavItems()\"\n [activeItemId]=\"activeSubTopNavItemId()\"\n (itemClick)=\"onSubTopNavClick($event)\"\n (itemChange)=\"onSubTopNavChange($event)\"\n />\n }\n </div>\n\n <main class=\"workspace-navbar__content\">\n <ng-content />\n </main>\n</div>\n\n@if (canShowChat()) {\n <button ao-button class=\"handbook-chat\" variant=\"primary\" (click)=\"chatOpen.set(!chatOpen())\">\n <ao-icon [svg]=\"chatIcon\" />\n </button>\n\n <div class=\"chat-container\" [class.open]=\"chatOpen()\">\n <lib-chat [searchType]=\"activeFilter()?.type\" (closed)=\"chatOpen.set(false)\" />\n </div>\n}\n", styles: [":host{display:block;min-height:100vh}.workspace-navbar__main{margin-left:70px;padding-top:50px;min-height:100vh}.workspace-navbar__main.workspace-navbar__main--with-subnav{padding-top:100px}.workspace-navbar__nav-wrapper{position:fixed;top:0;left:0;right:0;z-index:3;transform:translateY(0);transition:transform .25s ease}.workspace-navbar__nav-wrapper--hidden{transform:translateY(-100%)}.workspace-navbar__content{padding:30px 0}.workspace-navbar__logo{max-width:32px;max-height:32px;object-fit:contain}.handbook-chat{position:fixed;right:1.5em;bottom:1.5em;z-index:100}.chat-container{position:fixed;width:500px;height:100vh;right:0;top:0;margin-right:-500px;transition:margin-right .5s ease-in-out;background-color:#fff}.chat-container.open{margin-right:0;z-index:501}\n"] }]
7669
+ }], ctorParameters: () => [], propDecorators: { appId: [{ type: i0.Input, args: [{ isSignal: true, alias: "appId", required: true }] }], production: [{ type: i0.Input, args: [{ isSignal: true, alias: "production", required: false }] }], topNavItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "topNavItems", required: false }] }], showSearch: [{ type: i0.Input, args: [{ isSignal: true, alias: "showSearch", required: false }] }], showNotifications: [{ type: i0.Input, args: [{ isSignal: true, alias: "showNotifications", required: false }] }], notificationCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "notificationCount", required: false }] }], searchPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchPlaceholder", required: false }] }], recommendedFilters: [{ type: i0.Input, args: [{ isSignal: true, alias: "recommendedFilters", required: false }] }], activeFilter: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeFilter", required: false }] }, { type: i0.Output, args: ["activeFilterChange"] }], resultGroups: [{ type: i0.Input, args: [{ isSignal: true, alias: "resultGroups", required: false }] }], searchPages: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchPages", required: false }] }], pageSuggestion: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageSuggestion", required: false }] }], aiSuggestions: [{ type: i0.Input, args: [{ isSignal: true, alias: "aiSuggestions", required: false }] }], searchLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchLoading", required: false }] }], searchError: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchError", required: false }] }], topNavItemClick: [{ type: i0.Output, args: ["topNavItemClick"] }], topNavItemChange: [{ type: i0.Output, args: ["topNavItemChange"] }], subTopNavItemClick: [{ type: i0.Output, args: ["subTopNavItemClick"] }], subTopNavItemChange: [{ type: i0.Output, args: ["subTopNavItemChange"] }], appSwitched: [{ type: i0.Output, args: ["appSwitched"] }], searchSubmit: [{ type: i0.Output, args: ["searchSubmit"] }], searchQueryChange: [{ type: i0.Output, args: ["searchQueryChange"] }], searchViewAll: [{ type: i0.Output, args: ["searchViewAll"] }], searchResultSelect: [{ type: i0.Output, args: ["searchResultSelect"] }], searchAiSuggestionSelect: [{ type: i0.Output, args: ["searchAiSuggestionSelect"] }], searchPageSuggestionSelect: [{ type: i0.Output, args: ["searchPageSuggestionSelect"] }], searchFilterSelect: [{ type: i0.Output, args: ["searchFilterSelect"] }], searchFilterClear: [{ type: i0.Output, args: ["searchFilterClear"] }], notificationClick: [{ type: i0.Output, args: ["notificationClick"] }] } });
7546
7670
 
7547
7671
  /**
7548
7672
  * Robin-flavoured ChoicePicker that keeps the basic A2UI look but turns chip
@@ -7766,5 +7890,5 @@ function escapeHtml(value) {
7766
7890
  * Generated bundle index. Do not edit.
7767
7891
  */
7768
7892
 
7769
- export { AO_CATALOG_ID, AiSearchComponent, AoCatalog, AuthService, ButtonComponent, CheckboxComponent, ChipsInputComponent, DEFAULT_TOOLBAR, DIALOG_DATA, DateInputComponent, DesignSystem, DialogComponent, DialogRef, DialogService, EditableTextComponent, IconButtonComponent, IconComponent, InputComponent, LogoMenuComponent, MarkdownEditorComponent, MenuComponent, MenuItemComponent, MultiselectComponent, NavToolsComponent, NotificationButtonComponent, ROBIN_API_BASE_URL, ROBIN_SEARCH_APP_NAME, RobinChatActionDispatcher, RobinChatService, RobinSearchService, SearchResultsPageComponent, SelectComponent, SideNavComponent, SlideToggleComponent, SubNavActionsService, SubTopNavComponent, TabPanelComponent, TableCellDefDirective, TableCheckboxComponent, TableComponent, TableDatePickerComponent, TableFilterComponent, TableInputComponent, TablePaginationComponent, TableRowActionsComponent, TableSelectComponent, TabsComponent, TooltipDirective, TopNavComponent, WorkspaceNavbarComponent, WorkspaceNavbarService, authInterceptor, provideAuth, provideRobinA2ui, withAuthInterceptor };
7893
+ export { AO_CATALOG_ID, AiSearchComponent, AoCatalog, AuthService, ButtonComponent, CheckboxComponent, ChipsInputComponent, DEFAULT_TOOLBAR, DIALOG_DATA, DateInputComponent, DesignSystem, DialogComponent, DialogRef, DialogService, EditableTextComponent, IconButtonComponent, IconComponent, InputComponent, LogoMenuComponent, MarkdownEditorComponent, MenuComponent, MenuItemComponent, MultiselectComponent, NavToolsComponent, NotificationButtonComponent, ROBIN_API_BASE_URL, ROBIN_SEARCH_APP_NAME, RobinChatActionDispatcher, RobinChatService, RobinSearchService, SearchResultsPageComponent, SelectComponent, SideNavComponent, SlideToggleComponent, SubNavActionsService, SubTopNavComponent, TabPanelComponent, TableCellDefDirective, TableCheckboxComponent, TableComponent, TableDatePickerComponent, TableFilterComponent, TableInputComponent, TablePaginationComponent, TableRowActionsComponent, TableSelectComponent, TabsComponent, TooltipDirective, TopNavComponent, WorkspaceNavbarComponent, WorkspaceNavbarService, authInterceptor, buildSearchPagesFromNavItems, createSearchPageGroup, filterSearchPages, provideAuth, provideRobinA2ui, withAuthInterceptor };
7770
7894
  //# sourceMappingURL=ah-oh-ao-workspaces-design-system.mjs.map