@sinequa/atomic-angular 1.11.0 → 1.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.d.ts CHANGED
@@ -4,7 +4,7 @@ import * as rxjs from 'rxjs';
4
4
  import { BehaviorSubject, Observable, Subject } from 'rxjs';
5
5
  import * as _ngrx_signals from '@ngrx/signals';
6
6
  import * as _sinequa_atomic from '@sinequa/atomic';
7
- import { Article as Article$1, LegacyFilter, KeyOf, Query, QueryParams as QueryParams$1, AggregationItem, TreeAggregationNode, Aggregation, TreeAggregation, Conversion, CCApp, CCColumn, CCQuery, CCWebService, Principal, SpellingCorrectionMode, AuditEvents, CustomHighlights, Result, AuditEventType, AuditEventTypeValues, Suggestion, Filter as Filter$2, PreviewData, TextLocation, TextChunk, UserProfile, CCSortingChoice, LinkResult, ExportQueryModel, ExportOutputFormat, FilterOperator } from '@sinequa/atomic';
7
+ import { Article as Article$1, LegacyFilter, KeyOf, Query, QueryParams as QueryParams$1, AggregationItem, TreeAggregationNode, Aggregation, TreeAggregation, Conversion, CCApp, CCColumn, CCQuery, CCWebService, Principal, SpellingCorrectionMode, AuditEvents, CustomHighlights, Result, AuditEventType, AuditEventTypeValues, Suggestion, Filter as Filter$2, PreviewData, TextLocation, TextChunk, UserProfile, CCSortingChoice, LinkResult, DidYouMeanAction, ExportQueryModel, ExportOutputFormat, FilterOperator } from '@sinequa/atomic';
8
8
  import { Router, Params, Route, NavigationEnd, CanActivateFn, ResolveFn } from '@angular/router';
9
9
  import * as _sinequa_atomic_angular from '@sinequa/atomic-angular';
10
10
  import * as _sinequa_ui from '@sinequa/ui';
@@ -4754,13 +4754,18 @@ declare class JsonMethodPluginService {
4754
4754
  declare class NavigationService {
4755
4755
  private readonly router;
4756
4756
  private readonly auditService;
4757
- private previousNavigationUrl;
4757
+ private previousRouteName;
4758
4758
  /**
4759
4759
  * The URL of the current navigation, used to redirect the user after login.
4760
4760
  *
4761
4761
  * Sourced directly from `Router.url`, which Angular keeps up to date on every navigation with no
4762
4762
  * subscription required — unlike a field updated as a side effect of `navigationEnd$` below,
4763
4763
  * which only happens for whoever actually subscribes to it.
4764
+ *
4765
+ * The authentication screens are never returned: sending someone back to `/logout` after they
4766
+ * signed in defeats the sign-in, and back to `/login` loops. The exclusion used to be a literal
4767
+ * `!== "/login"`, which let through `/logout`, `/login?mode=changepassword` — same screen, one
4768
+ * query param — and any application whose `loginPath` is not spelled `/login`.
4764
4769
  */
4765
4770
  get urlAfterNavigation(): string | null;
4766
4771
  /**
@@ -4769,8 +4774,8 @@ declare class NavigationService {
4769
4774
  * This observable performs the following operations:
4770
4775
  * - Maps all router events to `RouterEvent`.
4771
4776
  * - Filters the events to only include instances of `NavigationEnd`.
4772
- * - Taps into the event stream to extract the route name from the URL and notify the audit service of route changes,
4773
- * excluding duplicate navigations.
4777
+ * - Taps into the event stream to notify the audit service when the route itself changes — a new
4778
+ * query, a filter or another page of results stays on the same route and is not one.
4774
4779
  * - Shares the replayed value with a buffer size of 1 to ensure subscribers receive the latest emitted value.
4775
4780
  *
4776
4781
  * @type Observable<RouterEvent>
@@ -4780,6 +4785,24 @@ declare class NavigationService {
4780
4785
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<NavigationService>;
4781
4786
  }
4782
4787
 
4788
+ /**
4789
+ * Whether `url` is one of the authentication screens: the configured `loginPath` (defaulting to
4790
+ * `/login`) or `/logout`.
4791
+ *
4792
+ * Two things follow from it, and both were bugs before it existed:
4793
+ *
4794
+ * - **Nothing redirects to the login screen from one of these routes.** A request still trailing
4795
+ * behind a logout answers 401; recovering from it navigated to `loginPath` and replaced the
4796
+ * "signed out" confirmation the user was reading with the login form they had just left.
4797
+ * - **No `returnUrl` points at one of them.** Signing in only to be returned to `/logout` is a
4798
+ * loop with a friendly face.
4799
+ *
4800
+ * Comparisons are on the path alone, so `/login?mode=changepassword` counts, and by segment, so a
4801
+ * route merely starting with the same letters does not. Query params matter to the screen, never to
4802
+ * the question being asked here.
4803
+ */
4804
+ declare function isAuthRoute(url: string | null | undefined, loginPath?: string): boolean;
4805
+
4783
4806
  /**
4784
4807
  * Creates a debounced signal that updates its value after a specified timeout.
4785
4808
  *
@@ -4952,6 +4975,17 @@ declare function withThemes(app: ApplicationRef, themes: Theme[]): ApplicationRe
4952
4975
  * @returns A promise resolving to a boolean indicating whether the user is authenticated.
4953
4976
  */
4954
4977
  declare function signIn(): Promise<boolean>;
4978
+ /**
4979
+ * Whether a `signIn()` call is currently in flight for this page — kept `true` even after it has
4980
+ * resolved for an oauth/saml redirect that has not unloaded the document yet (see the `.finally()`
4981
+ * above).
4982
+ *
4983
+ * Exposed for `SignInComponent`: `AuthGuard` can mount it while `bootstrapApp()`'s own `signIn()`
4984
+ * is still deciding on, or navigating away for, a provider redirect. Calling `login()` again
4985
+ * directly in that window bypasses this mutex and re-reads the SDK's one-shot redirect guard as a
4986
+ * genuine repeat failure — see the regression this guards against in `sign-in-form.ts`.
4987
+ */
4988
+ declare function isSignInInFlight(): boolean;
4955
4989
  /**
4956
4990
  * @internal Test-only hook: forces the concurrent-call mutex back to its initial (unheld) state.
4957
4991
  * Production code never needs this — the mutex only stays held while a redirect/reload triggered
@@ -5546,10 +5580,10 @@ declare class PreviewService {
5546
5580
  preview(id: string, q: Partial<Query>, customHighlights?: CustomHighlights[], audit?: AuditEvents): Observable<PreviewData>;
5547
5581
  /**
5548
5582
  * Closes the preview with the specified ID and updates the audit log.
5549
- *
5550
- * @param id - The ID of the preview to close.
5551
- * @param query - The partial query object used to retrieve the preview detail.
5552
- */
5583
+ *
5584
+ * @param id - The ID of the preview to close.
5585
+ * @param query - The partial query object used to retrieve the preview detail.
5586
+ */
5553
5587
  close(id: string, query: Partial<Query>): void;
5554
5588
  /**
5555
5589
  * Previews an article in a new browser's tab.
@@ -6747,7 +6781,7 @@ declare class AggregationItemDirective {
6747
6781
  * Tree-only fields (`level`/`expanded`/`hasChildren`) are typed as optional; a tree
6748
6782
  * template can re-annotate them via {@link AggregationTreeItemContext} if desired.
6749
6783
  */
6750
- static ngTemplateContextGuard(_dir: AggregationItemDirective, ctx: unknown): ctx is AggregationItemContext;
6784
+ static ngTemplateContextGuard(_dir: AggregationItemDirective, _ctx: unknown): _ctx is AggregationItemContext;
6751
6785
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AggregationItemDirective, never>;
6752
6786
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AggregationItemDirective, "[aggregationItem]", never, {}, {}, never, never, true, never>;
6753
6787
  }
@@ -8076,6 +8110,22 @@ declare class AggregationDateComponent {
8076
8110
  */
8077
8111
  private seedingForm;
8078
8112
  readonly aggregation: _angular_core.Signal<AggEx | null>;
8113
+ /**
8114
+ * `true` when the aggregation cannot be resolved — missing from the store, or an
8115
+ * empty `[aggregation]` input in controlled mode. Always drives the `hidden`
8116
+ * class on the host — unlike list/tree, there is no separate "resolved but
8117
+ * empty" state to gate behind a `hideWhenEmpty` input here.
8118
+ *
8119
+ * Unlike list/tree, a date aggregation *with* no items stays visible: its custom
8120
+ * range is still usable (same rule as `FilterButton`, which never disables a date
8121
+ * filter).
8122
+ *
8123
+ * Resolved on its own rather than derived from {@link aggregation}: that computed
8124
+ * spreads the resolution into a new object, and the spread of a `null` yields a
8125
+ * non-null `{ items: [] }` shell — the missing case is not observable from it.
8126
+ * Interposing a shared computed is not an option either: its referential equality
8127
+ * check would stop `aggregation()` from recomputing, and with it `dateOptions()`.
8128
+ */
8079
8129
  readonly isEmpty: _angular_core.Signal<boolean>;
8080
8130
  readonly items: _angular_core.Signal<AggregationItem[]>;
8081
8131
  protected readonly dateOptions: _angular_core.Signal<_sinequa_atomic.DateFilter[]>;
@@ -8898,19 +8948,22 @@ declare class SignInComponent {
8898
8948
  autoOAuthProvider: string;
8899
8949
  autoSAMLProvider: string;
8900
8950
  bearerToken: string;
8901
- loginPath: string;
8902
8951
  userOverride: {
8903
8952
  username: string;
8904
8953
  domain: string;
8905
8954
  };
8906
8955
  userOverrideActive: boolean;
8907
8956
  authMode: _sinequa_atomic.AuthMode;
8957
+ auth: _sinequa_atomic.AuthOptions;
8958
+ uiLanguage: string;
8959
+ aggregationCounts: _sinequa_atomic.AggregationCounts;
8908
8960
  useCredentials: boolean;
8909
8961
  useSSO: boolean;
8910
8962
  useSAML: boolean;
8911
8963
  logLevel: _sinequa_atomic.LogLevel;
8964
+ loginPath: string;
8912
8965
  createRoutes: boolean;
8913
- } & Record<string, any>>;
8966
+ }> & Record<string, unknown>;
8914
8967
  /**
8915
8968
  * True when authentication is handled outside the credentials form — i.e. by the
8916
8969
  * browser/proxy (`sso`) or by an auto-configured OAuth/SAML provider. In those modes
@@ -9010,7 +9063,7 @@ declare class SignedOutComponent {
9010
9063
 
9011
9064
  declare class BookmarkButtonComponent {
9012
9065
  variant: _angular_core.InputSignal<"icon" | "default" | "none" | "primary" | "secondary" | "destructive" | "ai" | "link" | "outline" | "accent" | "tertiary" | "ghost" | "light-accent" | null | undefined>;
9013
- size: _angular_core.InputSignal<"icon" | "xs" | "sm" | "md" | "lg" | null | undefined>;
9066
+ size: _angular_core.InputSignal<"icon" | "sm" | "md" | "lg" | "xs" | null | undefined>;
9014
9067
  readonly article: _angular_core.InputSignal<Partial<Article$1>>;
9015
9068
  private readonly userSettingsStore;
9016
9069
  private readonly route;
@@ -9201,6 +9254,14 @@ declare class DidYouMeanComponent {
9201
9254
  protected spellingCorrectionMode: _angular_core.Signal<_sinequa_atomic.SpellingCorrectionMode | undefined>;
9202
9255
  protected correction: _angular_core.Signal<string | undefined>;
9203
9256
  protected original: _angular_core.Signal<string | undefined>;
9257
+ /**
9258
+ * Resolves the action to display from the per-term `appliedChanges` reported by the engine (ES-28698).
9259
+ * Falls back to `spellingCorrectionMode`-based inference for engine versions prior to 11.14 that
9260
+ * do not report `appliedChanges`, or when the applied changes disagree on the action to take
9261
+ * (defaults to `suggestion`, the only case that does not assert a search behavior that may not
9262
+ * actually have happened — the root cause of ES-27719).
9263
+ */
9264
+ protected action: _angular_core.Signal<DidYouMeanAction | undefined>;
9204
9265
  readonly router: Router;
9205
9266
  private readonly queryParamsStore;
9206
9267
  selectCorrected(): void;
@@ -10730,7 +10791,6 @@ declare class SearchFeedbackComponent {
10730
10791
  }
10731
10792
 
10732
10793
  declare class AggregationTreeComponent {
10733
- #private;
10734
10794
  cn: typeof cn;
10735
10795
  class: _angular_core.InputSignal<string>;
10736
10796
  id: _angular_core.InputSignal<string | null>;
@@ -10748,6 +10808,18 @@ declare class AggregationTreeComponent {
10748
10808
  * @default true
10749
10809
  */
10750
10810
  showCheckbox: _angular_core.InputSignalWithTransform<boolean, unknown>;
10811
+ /**
10812
+ * Whether every selection gesture — row click, checkbox click, Enter on the
10813
+ * checkbox — applies the filter immediately, instead of only revealing the
10814
+ * Apply button.
10815
+ *
10816
+ * Independent of the `features.quickFilter` customization flag: `applyOnSelect`
10817
+ * applies even when `quickFilter` is off, and leaves the label-click behavior
10818
+ * untouched when it is off itself.
10819
+ *
10820
+ * @default false
10821
+ */
10822
+ applyOnSelect: _angular_core.InputSignalWithTransform<boolean, unknown>;
10751
10823
  expandedLevel: _angular_core.InputSignalWithTransform<number | undefined, unknown>;
10752
10824
  /**
10753
10825
  * When `false`, applying or clearing filters updates the store without
@@ -10780,6 +10852,20 @@ declare class AggregationTreeComponent {
10780
10852
  * @default undefined — derive from `QueryParamsStore` filters (current behavior)
10781
10853
  */
10782
10854
  controlledSelection: _angular_core.InputSignal<AggregationSelection | undefined>;
10855
+ /**
10856
+ * Whether the host removes itself from the layout (Tailwind's `hidden`, i.e.
10857
+ * `display: none`) when it resolves to zero items with no filter applied.
10858
+ * When `false` (default), the facet stays in the layout with its dimmed,
10859
+ * non-expandable header.
10860
+ *
10861
+ * Does not affect a **missing** aggregation — no entry in the store (or an
10862
+ * empty `[aggregation]` input in controlled mode) — which always hides
10863
+ * unconditionally: a facet with no backing data is not a legitimate empty
10864
+ * state worth an opt-in, it is a misconfiguration.
10865
+ *
10866
+ * @default false
10867
+ */
10868
+ hideWhenEmpty: _angular_core.InputSignalWithTransform<boolean, unknown>;
10783
10869
  onSelect: _angular_core.OutputEmitterRef<AggregationItem[]>;
10784
10870
  onApply: _angular_core.OutputEmitterRef<void>;
10785
10871
  onClear: _angular_core.OutputEmitterRef<void>;
@@ -10810,6 +10896,13 @@ declare class AggregationTreeComponent {
10810
10896
  protected readonly resolvedItemTemplate: _angular_core.Signal<TemplateRef<AggregationItemContext> | undefined>;
10811
10897
  selection: _angular_core.WritableSignal<boolean>;
10812
10898
  isAllSelected: _angular_core.WritableSignal<boolean>;
10899
+ /**
10900
+ * Paths of the nodes the user expanded, so they can be reopened after a refresh
10901
+ * wipes `$opened`. Plain field, not a signal: nothing renders from it.
10902
+ */
10903
+ private readonly openedPaths;
10904
+ /** Re-entrancy guard: `open()` writes to the store, which re-runs the restore effect. */
10905
+ private isRestoringOpenedNodes;
10813
10906
  searchText: _angular_core.ModelSignal<string>;
10814
10907
  private readonly base;
10815
10908
  readonly isControlled: _angular_core.Signal<boolean>;
@@ -11258,7 +11351,31 @@ declare class AggregationTreeComponent {
11258
11351
  readonly linkChildren: _angular_core.Signal<boolean | undefined>;
11259
11352
  aggregation: _angular_core.Signal<AggEx | null>;
11260
11353
  items: _angular_core.Signal<AggregationListItem[]>;
11354
+ /**
11355
+ * `true` when there is nothing to render: the aggregation is missing from the
11356
+ * store, or it resolves to zero items. Drives the panel's dimmed header.
11357
+ */
11261
11358
  isEmpty: _angular_core.Signal<boolean>;
11359
+ /**
11360
+ * `true` when the aggregation cannot be resolved at all: missing from the
11361
+ * store (or an empty `[aggregation]` input in controlled mode). Always hides
11362
+ * the host, regardless of `hideWhenEmpty` — a facet with no backing data has
11363
+ * nothing a dimmed header could ever offer the user.
11364
+ */
11365
+ readonly isMissing: _angular_core.Signal<boolean>;
11366
+ /**
11367
+ * `true` when the host is removed from the layout when `hideWhenEmpty` is
11368
+ * `true`: the aggregation resolves but has nothing to render *and* no filter
11369
+ * is applied. Does not cover a missing aggregation — see {@link isMissing},
11370
+ * which hides unconditionally.
11371
+ *
11372
+ * A tree keeps its facet visible while a filter is applied, even with zero nodes.
11373
+ * Unlike a list, the applied values are not merged back into the item list
11374
+ * (`addCurrentFiltersToItems` skips trees), so a filtered tree can legitimately
11375
+ * resolve to nothing — and hiding it would leave no way to clear that filter from
11376
+ * the facet.
11377
+ */
11378
+ readonly isHidden: _angular_core.Signal<boolean>;
11262
11379
  readonly searchedItems: _angular_core.Signal<TreeAggregationNode[] | {
11263
11380
  name: string | null;
11264
11381
  value: string;
@@ -11272,9 +11389,25 @@ declare class AggregationTreeComponent {
11272
11389
  clear(): void;
11273
11390
  selectAll(): void;
11274
11391
  unselectAll(): void;
11275
- apply(overrideFilters?: LegacyFilter[]): void;
11392
+ /**
11393
+ * @param opts.keepSearchText Leave the search-within-facet text in place. Used by
11394
+ * `applyOnSelect`, where the user is expected to tick several values in a row and
11395
+ * would otherwise lose the search context on the first one.
11396
+ */
11397
+ apply(overrideFilters?: LegacyFilter[], opts?: {
11398
+ keepSearchText?: boolean;
11399
+ }): void;
11276
11400
  loadMore(): void;
11277
11401
  open(node: AggregationListItem): Promise<void>;
11402
+ /**
11403
+ * Reopen the nodes the user had expanded, after a search replaced the aggregation.
11404
+ *
11405
+ * Shallowest first, sequentially: a deep node only exists in the tree once its parent
11406
+ * has been reopened. Nodes whose children were lazily loaded come back empty, so they
11407
+ * are re-fetched through `open()` — which is why this cannot be a plain synchronous pass.
11408
+ */
11409
+ private restoreOpenedNodes;
11410
+ private findNodeByPath;
11278
11411
  select(): void;
11279
11412
  protected treeItemName(item: AggregationListItem): string;
11280
11413
  protected isTreeItemFiltered(item: AggregationListItem, field: string | null | undefined): boolean;
@@ -11282,6 +11415,19 @@ declare class AggregationTreeComponent {
11282
11415
  protected treeChildrenPath(item: AggregationListItem, parentPath: string[]): string[];
11283
11416
  protected selectTreeItem(node: AggregationListItem, parent: AggregationListItem | null, e?: Event, updateChildren?: boolean): void;
11284
11417
  protected toggleTreeNode(e: Event, node: AggregationListItem): void;
11418
+ /** Remember (or forget) an expanded node, keyed by its full `$path`. */
11419
+ private trackOpened;
11420
+ /**
11421
+ * Single decision point for the item interaction paths: select, then apply only
11422
+ * when the caller says so. Never call `apply()` from anywhere else in that path.
11423
+ */
11424
+ private commitTreeSelection;
11425
+ /** Row click, and checkbox click/Enter — the "any selection gesture" surface. */
11426
+ protected onTreeItemRowClick(node: AggregationListItem, parent: AggregationListItem | null, event: Event): void;
11427
+ /**
11428
+ * Label click. `quickFilter` is the app-wide label-only shortcut; `applyOnSelect`
11429
+ * covers the label too. With neither, the click bubbles up to the row handler.
11430
+ */
11285
11431
  protected onTreeItemTextClick(node: AggregationListItem, parent: AggregationListItem | null, event: Event): void;
11286
11432
  protected getFilters(): LegacyFilter[];
11287
11433
  protected getFiltersForTree(): LegacyFilter[];
@@ -11297,7 +11443,7 @@ declare class AggregationTreeComponent {
11297
11443
  private expandItems;
11298
11444
  private traverse;
11299
11445
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AggregationTreeComponent, never>;
11300
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AggregationTreeComponent, "AggregationTree, aggregation-tree, aggregationtree", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": true; "isSignal": true; }; "column": { "alias": "column"; "required": true; "isSignal": true; }; "collapsible": { "alias": "collapsible"; "required": false; "isSignal": true; }; "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "showFiltersCount": { "alias": "showFiltersCount"; "required": false; "isSignal": true; }; "showCheckbox": { "alias": "showCheckbox"; "required": false; "isSignal": true; }; "expandedLevel": { "alias": "expandedLevel"; "required": false; "isSignal": true; }; "syncUrl": { "alias": "syncUrl"; "required": false; "isSignal": true; }; "controlledQuery": { "alias": "query"; "required": false; "isSignal": true; }; "controlledAggregation": { "alias": "aggregation"; "required": false; "isSignal": true; }; "controlledSelection": { "alias": "selection"; "required": false; "isSignal": true; }; "itemTemplateInput": { "alias": "itemTemplate"; "required": false; "isSignal": true; }; "searchText": { "alias": "searchText"; "required": false; "isSignal": true; }; }, { "onSelect": "onSelect"; "onApply": "onApply"; "onClear": "onClear"; "selectionChange": "selectionChange"; "filtersChange": "filtersChange"; "searchText": "searchTextChange"; }, ["itemDirective"], ["label"], true, never>;
11446
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AggregationTreeComponent, "AggregationTree, aggregation-tree, aggregationtree", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": true; "isSignal": true; }; "column": { "alias": "column"; "required": true; "isSignal": true; }; "collapsible": { "alias": "collapsible"; "required": false; "isSignal": true; }; "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "showFiltersCount": { "alias": "showFiltersCount"; "required": false; "isSignal": true; }; "showCheckbox": { "alias": "showCheckbox"; "required": false; "isSignal": true; }; "applyOnSelect": { "alias": "applyOnSelect"; "required": false; "isSignal": true; }; "expandedLevel": { "alias": "expandedLevel"; "required": false; "isSignal": true; }; "syncUrl": { "alias": "syncUrl"; "required": false; "isSignal": true; }; "controlledQuery": { "alias": "query"; "required": false; "isSignal": true; }; "controlledAggregation": { "alias": "aggregation"; "required": false; "isSignal": true; }; "controlledSelection": { "alias": "selection"; "required": false; "isSignal": true; }; "hideWhenEmpty": { "alias": "hideWhenEmpty"; "required": false; "isSignal": true; }; "itemTemplateInput": { "alias": "itemTemplate"; "required": false; "isSignal": true; }; "searchText": { "alias": "searchText"; "required": false; "isSignal": true; }; }, { "onSelect": "onSelect"; "onApply": "onApply"; "onClear": "onClear"; "selectionChange": "selectionChange"; "filtersChange": "filtersChange"; "searchText": "searchTextChange"; }, ["itemDirective"], ["label"], true, never>;
11301
11447
  }
11302
11448
 
11303
11449
  declare class AggregationListComponent {
@@ -11318,6 +11464,18 @@ declare class AggregationListComponent {
11318
11464
  * @default true
11319
11465
  */
11320
11466
  showCheckbox: _angular_core.InputSignalWithTransform<boolean, unknown>;
11467
+ /**
11468
+ * Whether every selection gesture — row click, checkbox click, Enter on the
11469
+ * checkbox — applies the filter immediately, instead of only revealing the
11470
+ * Apply button.
11471
+ *
11472
+ * Independent of the `features.quickFilter` customization flag: `applyOnSelect`
11473
+ * applies even when `quickFilter` is off, and leaves the label-click behavior
11474
+ * untouched when it is off itself.
11475
+ *
11476
+ * @default false
11477
+ */
11478
+ applyOnSelect: _angular_core.InputSignalWithTransform<boolean, unknown>;
11321
11479
  /**
11322
11480
  * When `false`, applying or clearing filters updates the store without
11323
11481
  * synchronizing the URL (no browser history entry, not shareable/restorable).
@@ -11348,6 +11506,19 @@ declare class AggregationListComponent {
11348
11506
  * @default undefined — derive from `QueryParamsStore` filters (current behavior)
11349
11507
  */
11350
11508
  controlledSelection: _angular_core.InputSignal<AggregationSelection | undefined>;
11509
+ /**
11510
+ * Whether the host removes itself from the layout (Tailwind's `hidden`, i.e.
11511
+ * `display: none`) when it resolves to zero items. When `false` (default), the
11512
+ * facet stays in the layout with its dimmed, non-expandable header.
11513
+ *
11514
+ * Does not affect a **missing** aggregation — no entry in the store (or an
11515
+ * empty `[aggregation]` input in controlled mode) — which always hides
11516
+ * unconditionally: a facet with no backing data is not a legitimate empty
11517
+ * state worth an opt-in, it is a misconfiguration.
11518
+ *
11519
+ * @default false
11520
+ */
11521
+ hideWhenEmpty: _angular_core.InputSignalWithTransform<boolean, unknown>;
11351
11522
  onSelect: _angular_core.OutputEmitterRef<AggregationItem[]>;
11352
11523
  onApply: _angular_core.OutputEmitterRef<void>;
11353
11524
  onClear: _angular_core.OutputEmitterRef<void>;
@@ -11838,23 +12009,54 @@ declare class AggregationListComponent {
11838
12009
  readonly virtualizer: _tanstack_angular_virtual.AngularVirtualizer<HTMLDivElement, Element>;
11839
12010
  aggregation: _angular_core.Signal<AggEx | null>;
11840
12011
  items: _angular_core.Signal<AggregationListItem[]>;
12012
+ /**
12013
+ * `true` when there is nothing to render: the aggregation is missing from the
12014
+ * store, or it resolves to zero items. Drives the panel's dimmed header.
12015
+ * Drives the `hidden` class on the host only when `hideWhenEmpty` is `true` —
12016
+ * {@link isMissing} handles the unconditional case on its own.
12017
+ */
11841
12018
  isEmpty: _angular_core.Signal<boolean>;
12019
+ /**
12020
+ * `true` when the aggregation cannot be resolved at all: missing from the
12021
+ * store (or an empty `[aggregation]` input in controlled mode). Always hides
12022
+ * the host, regardless of `hideWhenEmpty` — a facet with no backing data has
12023
+ * nothing a dimmed header could ever offer the user.
12024
+ */
12025
+ isMissing: _angular_core.Signal<boolean>;
11842
12026
  searchedItems: _angular_core.Signal<AggregationItem[]>;
11843
12027
  constructor();
11844
12028
  clear(): void;
11845
12029
  selectAll(): void;
11846
12030
  unselectAll(): void;
11847
- apply(): void;
12031
+ /**
12032
+ * @param opts.keepSearchText Leave the search-within-facet text in place. Used by
12033
+ * `applyOnSelect`, where the user is expected to tick several values in a row and
12034
+ * would otherwise lose the search context on the first one.
12035
+ */
12036
+ apply(opts?: {
12037
+ keepSearchText?: boolean;
12038
+ }): void;
11848
12039
  loadMore(): void;
11849
12040
  select(): void;
11850
12041
  protected listItemName(item: AggregationItem): string;
11851
12042
  protected isListItemFiltered(item: AggregationItem, field: string | null | undefined): boolean;
11852
12043
  protected selectListItem(item: AggregationItem, e?: Event): void;
12044
+ /**
12045
+ * Single decision point for the item interaction paths: select, then apply only
12046
+ * when the caller says so. Never call `apply()` from anywhere else in that path.
12047
+ */
12048
+ private commitListSelection;
12049
+ /** Row click, and checkbox click/Enter — the "any selection gesture" surface. */
12050
+ protected onListItemRowClick(item: AggregationItem, event: Event): void;
12051
+ /**
12052
+ * Label click. `quickFilter` is the app-wide label-only shortcut; `applyOnSelect`
12053
+ * covers the label too. With neither, the click bubbles up to the row handler.
12054
+ */
11853
12055
  protected onListItemTextClick(item: AggregationItem, event: Event): void;
11854
12056
  protected getFilters(): LegacyFilter[];
11855
12057
  private addCurrentFiltersToItems;
11856
12058
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AggregationListComponent, never>;
11857
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AggregationListComponent, "AggregationList, aggregation-list, aggregationlist", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": true; "isSignal": true; }; "column": { "alias": "column"; "required": true; "isSignal": true; }; "collapsible": { "alias": "collapsible"; "required": false; "isSignal": true; }; "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "showFiltersCount": { "alias": "showFiltersCount"; "required": false; "isSignal": true; }; "showCheckbox": { "alias": "showCheckbox"; "required": false; "isSignal": true; }; "syncUrl": { "alias": "syncUrl"; "required": false; "isSignal": true; }; "controlledQuery": { "alias": "query"; "required": false; "isSignal": true; }; "controlledAggregation": { "alias": "aggregation"; "required": false; "isSignal": true; }; "controlledSelection": { "alias": "selection"; "required": false; "isSignal": true; }; "itemTemplateInput": { "alias": "itemTemplate"; "required": false; "isSignal": true; }; "searchText": { "alias": "searchText"; "required": false; "isSignal": true; }; }, { "onSelect": "onSelect"; "onApply": "onApply"; "onClear": "onClear"; "selectionChange": "selectionChange"; "filtersChange": "filtersChange"; "searchText": "searchTextChange"; }, ["itemDirective"], ["label"], true, never>;
12059
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AggregationListComponent, "AggregationList, aggregation-list, aggregationlist", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": true; "isSignal": true; }; "column": { "alias": "column"; "required": true; "isSignal": true; }; "collapsible": { "alias": "collapsible"; "required": false; "isSignal": true; }; "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "showFiltersCount": { "alias": "showFiltersCount"; "required": false; "isSignal": true; }; "showCheckbox": { "alias": "showCheckbox"; "required": false; "isSignal": true; }; "applyOnSelect": { "alias": "applyOnSelect"; "required": false; "isSignal": true; }; "syncUrl": { "alias": "syncUrl"; "required": false; "isSignal": true; }; "controlledQuery": { "alias": "query"; "required": false; "isSignal": true; }; "controlledAggregation": { "alias": "aggregation"; "required": false; "isSignal": true; }; "controlledSelection": { "alias": "selection"; "required": false; "isSignal": true; }; "hideWhenEmpty": { "alias": "hideWhenEmpty"; "required": false; "isSignal": true; }; "itemTemplateInput": { "alias": "itemTemplate"; "required": false; "isSignal": true; }; "searchText": { "alias": "searchText"; "required": false; "isSignal": true; }; }, { "onSelect": "onSelect"; "onApply": "onApply"; "onClear": "onClear"; "selectionChange": "selectionChange"; "filtersChange": "filtersChange"; "searchText": "searchTextChange"; }, ["itemDirective"], ["label"], true, never>;
11858
12060
  }
11859
12061
 
11860
12062
  /**
@@ -12199,6 +12401,7 @@ declare class AggregationComponent {
12199
12401
  aggregations: Aggregation[];
12200
12402
  }>;
12201
12403
  aggregationsService: AggregationsService;
12404
+ private readonly queryParamsStore;
12202
12405
  aggregationDate: _angular_core.Signal<AggregationDateComponent | undefined>;
12203
12406
  aggregationTree: _angular_core.Signal<AggregationTreeComponent | undefined>;
12204
12407
  aggregationList: _angular_core.Signal<AggregationListComponent | undefined>;
@@ -12258,6 +12461,18 @@ declare class AggregationComponent {
12258
12461
  * @default true
12259
12462
  */
12260
12463
  showCheckbox: _angular_core.InputSignalWithTransform<boolean, unknown>;
12464
+ /**
12465
+ * **List/tree only.** Whether every selection gesture — row click, checkbox click,
12466
+ * Enter on the checkbox — applies the filter immediately, instead of only revealing
12467
+ * the Apply button.
12468
+ *
12469
+ * Independent of the `features.quickFilter` customization flag, which governs the
12470
+ * label click only. Ignored by the date variant, which is a radio list: use
12471
+ * `emitOn="selection"` there for the equivalent behavior.
12472
+ *
12473
+ * @default false
12474
+ */
12475
+ applyOnSelect: _angular_core.InputSignalWithTransform<boolean, unknown>;
12261
12476
  expandedLevel: _angular_core.InputSignalWithTransform<number | undefined, unknown>;
12262
12477
  /**
12263
12478
  * Controls whether applying or clearing a filter synchronizes the URL.
@@ -12300,6 +12515,9 @@ declare class AggregationComponent {
12300
12515
  * emissions to a visible Apply button, matching the list/tree select-then-Apply
12301
12516
  * flow. Ignored outside controlled mode.
12302
12517
  *
12518
+ * The list/tree counterpart of `emitOn="selection"` is `applyOnSelect` — do not
12519
+ * use `emitOn` on those variants, it has no effect there.
12520
+ *
12303
12521
  * @default 'selection'
12304
12522
  */
12305
12523
  emitOn: _angular_core.InputSignal<"selection" | "apply">;
@@ -12316,6 +12534,19 @@ declare class AggregationComponent {
12316
12534
  * @default "auto"
12317
12535
  */
12318
12536
  type: _angular_core.InputSignal<"auto" | "list" | "tree" | "date">;
12537
+ /**
12538
+ * Whether the host removes itself from the layout (Tailwind's `hidden`, i.e.
12539
+ * `display: none`) when it resolves to zero items. When `false` (default), the
12540
+ * facet stays in the layout with its dimmed, non-expandable header.
12541
+ *
12542
+ * Does not affect a **missing** aggregation — no entry in the store (or an
12543
+ * empty `[aggregation]` input in controlled mode) — which always hides
12544
+ * unconditionally: a facet with no backing data is not a legitimate empty
12545
+ * state worth an opt-in, it is a misconfiguration.
12546
+ *
12547
+ * @default false
12548
+ */
12549
+ hideWhenEmpty: _angular_core.InputSignalWithTransform<boolean, unknown>;
12319
12550
  /**
12320
12551
  * An output event that emits an array of selected `AggregationItem` objects when the user selects items in the aggregation component. This allows parent components to listen for selection changes and react accordingly, such as applying filters or updating the UI based on the selected items.
12321
12552
  */
@@ -12355,6 +12586,39 @@ declare class AggregationComponent {
12355
12586
  * date/tree/list heuristic when `type` is `"auto"`.
12356
12587
  */
12357
12588
  protected resolvedType: _angular_core.Signal<"list" | "tree" | "date">;
12589
+ /** Whether a filter is currently applied on this aggregation. */
12590
+ private readonly hasFilters;
12591
+ /**
12592
+ * `true` when the aggregation cannot be resolved at all: missing from the store
12593
+ * (or an empty `[aggregation]` input in controlled mode). Always hides the host,
12594
+ * regardless of `hideWhenEmpty` — a facet with no backing data has nothing a
12595
+ * dimmed header could ever offer the user (it can never expand, gain items, or
12596
+ * be searched), so showing it is not a legitimate "empty state" worth an opt-in.
12597
+ */
12598
+ protected readonly isMissing: _angular_core.Signal<boolean>;
12599
+ /**
12600
+ * `true` when the aggregation resolves but has nothing to show: zero items and
12601
+ * no applied filter. When `hideWhenEmpty` is `true`, the host is then removed
12602
+ * from the layout, so a parent laying its facets out with `gap`/`divide` is left
12603
+ * with no phantom slot. When `false` (default), the facet stays with its dimmed,
12604
+ * non-expandable header — unlike {@link isMissing}, this is a legitimate,
12605
+ * temporary state (e.g. the current search matches nothing).
12606
+ *
12607
+ * Two exemptions keep a facet the user can still act on:
12608
+ * - date aggregations, whose custom range stays usable without any bucket — the
12609
+ * same reason `FilterButton` never disables a date filter;
12610
+ * - an aggregation carrying an applied filter. It matters for trees, which can
12611
+ * resolve to zero nodes while filtered (`addCurrentFiltersToItems` does not
12612
+ * merge applied values back into a tree's items); hiding those would leave no
12613
+ * way to clear the filter from the facet. It is a no-op for lists, whose
12614
+ * applied values are always part of the item list. Mirrors
12615
+ * `AggregationTreeComponent.isHidden`.
12616
+ *
12617
+ * Resolved here rather than read from the sub-component's own `isHidden()`: a host
12618
+ * binding must not depend on a `viewChild`, which is still unresolved on the
12619
+ * first change detection pass.
12620
+ */
12621
+ protected readonly isEmpty: _angular_core.Signal<boolean>;
12358
12622
  /**
12359
12623
  * Checks if the specified column is a date filter.
12360
12624
  *
@@ -12363,7 +12627,7 @@ declare class AggregationComponent {
12363
12627
  */
12364
12628
  protected isDate(column: string | undefined): boolean;
12365
12629
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AggregationComponent, never>;
12366
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AggregationComponent, "Aggregation, aggregation", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": true; "isSignal": true; }; "column": { "alias": "column"; "required": true; "isSignal": true; }; "showFiltersCount": { "alias": "showFiltersCount"; "required": false; "isSignal": true; }; "collapsible": { "alias": "collapsible"; "required": false; "isSignal": true; }; "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "showCheckbox": { "alias": "showCheckbox"; "required": false; "isSignal": true; }; "expandedLevel": { "alias": "expandedLevel"; "required": false; "isSignal": true; }; "syncUrl": { "alias": "syncUrl"; "required": false; "isSignal": true; }; "controlledQuery": { "alias": "query"; "required": false; "isSignal": true; }; "controlledAggregation": { "alias": "aggregation"; "required": false; "isSignal": true; }; "controlledSelection": { "alias": "selection"; "required": false; "isSignal": true; }; "emitOn": { "alias": "emitOn"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; }, { "onSelect": "onSelect"; "onApply": "onApply"; "onClear": "onClear"; "selectionChange": "selectionChange"; "filtersChange": "filtersChange"; }, ["itemDirective"], never, true, never>;
12630
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AggregationComponent, "Aggregation, aggregation", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": true; "isSignal": true; }; "column": { "alias": "column"; "required": true; "isSignal": true; }; "showFiltersCount": { "alias": "showFiltersCount"; "required": false; "isSignal": true; }; "collapsible": { "alias": "collapsible"; "required": false; "isSignal": true; }; "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "showCheckbox": { "alias": "showCheckbox"; "required": false; "isSignal": true; }; "applyOnSelect": { "alias": "applyOnSelect"; "required": false; "isSignal": true; }; "expandedLevel": { "alias": "expandedLevel"; "required": false; "isSignal": true; }; "syncUrl": { "alias": "syncUrl"; "required": false; "isSignal": true; }; "controlledQuery": { "alias": "query"; "required": false; "isSignal": true; }; "controlledAggregation": { "alias": "aggregation"; "required": false; "isSignal": true; }; "controlledSelection": { "alias": "selection"; "required": false; "isSignal": true; }; "emitOn": { "alias": "emitOn"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "hideWhenEmpty": { "alias": "hideWhenEmpty"; "required": false; "isSignal": true; }; }, { "onSelect": "onSelect"; "onApply": "onApply"; "onClear": "onClear"; "selectionChange": "selectionChange"; "filtersChange": "filtersChange"; }, ["itemDirective"], never, true, never>;
12367
12631
  }
12368
12632
 
12369
12633
  declare class AggregationPanelComponent {
@@ -12427,12 +12691,35 @@ declare class AsideFiltersComponent {
12427
12691
  * independently — closer to a typical SBA v2 "Facets List".
12428
12692
  */
12429
12693
  exclusive: _angular_core.InputSignalWithTransform<boolean, unknown>;
12694
+ /**
12695
+ * Whether every aggregation section can be collapsed/expanded by the user.
12696
+ * Relayed as-is to each `<Aggregation [collapsible]>`.
12697
+ *
12698
+ * @default true
12699
+ */
12700
+ collapsible: _angular_core.InputSignalWithTransform<boolean, unknown>;
12701
+ /**
12702
+ * Whether every aggregation section starts collapsed. Relayed as-is to each
12703
+ * `<Aggregation [collapsed]>`.
12704
+ *
12705
+ * @default true
12706
+ */
12707
+ collapsed: _angular_core.InputSignalWithTransform<boolean, unknown>;
12708
+ /**
12709
+ * Whether a section removes itself from the layout when its aggregation
12710
+ * resolves to zero items, instead of staying with a dimmed, non-expandable
12711
+ * header. Relayed as-is to each `<Aggregation [hideWhenEmpty]>` — a missing
12712
+ * aggregation always hides regardless of this input.
12713
+ *
12714
+ * @default false
12715
+ */
12716
+ hideWhenEmpty: _angular_core.InputSignalWithTransform<boolean, unknown>;
12430
12717
  private readonly appStore;
12431
12718
  private readonly aggregationsStore;
12432
12719
  private readonly aggregationsService;
12433
12720
  asideFilters: _angular_core.Signal<Pick<Aggregation, "column" | "name">[]>;
12434
12721
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AsideFiltersComponent, never>;
12435
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AsideFiltersComponent, "aside-filters, AsideFilters, asidefilters", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; "aggregations": { "alias": "aggregations"; "required": false; "isSignal": true; }; "exclusive": { "alias": "exclusive"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
12722
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AsideFiltersComponent, "aside-filters, AsideFilters, asidefilters", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; "aggregations": { "alias": "aggregations"; "required": false; "isSignal": true; }; "exclusive": { "alias": "exclusive"; "required": false; "isSignal": true; }; "collapsible": { "alias": "collapsible"; "required": false; "isSignal": true; }; "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; "hideWhenEmpty": { "alias": "hideWhenEmpty"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
12436
12723
  }
12437
12724
 
12438
12725
  type CFilterEx = CFilter & {
@@ -13322,9 +13609,17 @@ declare class MoreButtonComponent {
13322
13609
  excludedFilters: _angular_core.InputSignal<string[]>;
13323
13610
  aggregations: _angular_core.InputSignal<Aggregation[] | undefined>;
13324
13611
  homepage: _angular_core.InputSignalWithTransform<boolean, unknown>;
13612
+ /**
13613
+ * Whether a section removes itself from the layout when its aggregation
13614
+ * resolves to zero items, instead of staying with a dimmed, non-expandable
13615
+ * header. Relayed as-is to `<More [hideWhenEmpty]>`.
13616
+ *
13617
+ * @default false
13618
+ */
13619
+ hideWhenEmpty: _angular_core.InputSignalWithTransform<boolean, unknown>;
13325
13620
  totalFiltersCount: _angular_core.Signal<number>;
13326
13621
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<MoreButtonComponent, never>;
13327
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<MoreButtonComponent, "more-button, MoreButton", never, { "count": { "alias": "count"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "includedFilters": { "alias": "includedFilters"; "required": false; "isSignal": true; }; "excludedFilters": { "alias": "excludedFilters"; "required": false; "isSignal": true; }; "aggregations": { "alias": "aggregations"; "required": false; "isSignal": true; }; "homepage": { "alias": "homepage"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
13622
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MoreButtonComponent, "more-button, MoreButton", never, { "count": { "alias": "count"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "includedFilters": { "alias": "includedFilters"; "required": false; "isSignal": true; }; "excludedFilters": { "alias": "excludedFilters"; "required": false; "isSignal": true; }; "aggregations": { "alias": "aggregations"; "required": false; "isSignal": true; }; "homepage": { "alias": "homepage"; "required": false; "isSignal": true; }; "hideWhenEmpty": { "alias": "hideWhenEmpty"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
13328
13623
  }
13329
13624
 
13330
13625
  declare class FiltersBarComponent {
@@ -13916,6 +14211,15 @@ declare class MoreComponent {
13916
14211
  excludedFilters: _angular_core.InputSignal<string[]>;
13917
14212
  aggregations: _angular_core.InputSignal<Aggregation[] | undefined>;
13918
14213
  homepage: _angular_core.InputSignalWithTransform<boolean, unknown>;
14214
+ /**
14215
+ * Whether a section removes itself from the layout when its aggregation
14216
+ * resolves to zero items, instead of staying with a dimmed, non-expandable
14217
+ * header. Relayed as-is to each `<Aggregation [hideWhenEmpty]>` — a missing
14218
+ * aggregation always hides regardless of this input.
14219
+ *
14220
+ * @default false
14221
+ */
14222
+ hideWhenEmpty: _angular_core.InputSignalWithTransform<boolean, unknown>;
13919
14223
  aggregationsService: AggregationsService;
13920
14224
  /**
13921
14225
  * The overflow filters rendered as accordions: the authorized filters beyond the
@@ -13932,7 +14236,7 @@ declare class MoreComponent {
13932
14236
  name: string;
13933
14237
  }[]>;
13934
14238
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<MoreComponent, never>;
13935
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<MoreComponent, "more, More", never, { "count": { "alias": "count"; "required": false; "isSignal": true; }; "includedFilters": { "alias": "includedFilters"; "required": false; "isSignal": true; }; "excludedFilters": { "alias": "excludedFilters"; "required": false; "isSignal": true; }; "aggregations": { "alias": "aggregations"; "required": false; "isSignal": true; }; "homepage": { "alias": "homepage"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
14239
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MoreComponent, "more, More", never, { "count": { "alias": "count"; "required": false; "isSignal": true; }; "includedFilters": { "alias": "includedFilters"; "required": false; "isSignal": true; }; "excludedFilters": { "alias": "excludedFilters"; "required": false; "isSignal": true; }; "aggregations": { "alias": "aggregations"; "required": false; "isSignal": true; }; "homepage": { "alias": "homepage"; "required": false; "isSignal": true; }; "hideWhenEmpty": { "alias": "hideWhenEmpty"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
13936
14240
  }
13937
14241
 
13938
14242
  /**
@@ -15743,5 +16047,5 @@ type AppFeatures = {
15743
16047
  */
15744
16048
  declare const APP_FEATURES: InjectionToken<AppFeatures>;
15745
16049
 
15746
- export { AGGREGATIONS_NAMES, AGGREGATIONS_NAMES_PRESET_DEFAULT, APP_FEATURES, AdvancedFiltersComponent, AdvancedSearch, AdvancedSearchComponent, AggregationComponent, AggregationDateComponent, AggregationDateRangeDialogComponent, AggregationItemDirective, AggregationListComponent, AggregationPanelComponent, AggregationTreeComponent, AggregationsService, AggregationsStore, Alert, AlertDialog, AlertsComponent, AppService, AppStore, ApplicationService, ApplicationStore, ArticleEntities, ArticleExtracts, ArticleLabels, ArticleSimilarDocuments, AsideFiltersComponent, AuditFeedbackType, AuditService, AuthGuard, AuthPageComponent, AutocompleteService, BOOKMARKS_CONFIG, BOOKMARKS_OPTIONS, BackdropComponent, BackdropService, BookmarkButtonComponent, BookmarksComponent, COLLECTIONS_CONFIG, COLLECTIONS_OPTIONS, COMPONENTS_FOR_DOCUMENT_TYPE, ChangePasswordComponent, ChildMarkerDirective, CollectionsComponent, CollectionsDialog, DRAWER_COMPONENT, DRAWER_STACK_MAX_COUNT, DateComponent, DeleteCollectionDialog, DidYouMeanComponent, DocumentLocatorComponent, DrawerAdvancedFiltersComponent, DrawerComponent, DrawerNavbarComponent, DrawerPreviewComponent, DrawerService, DrawerStackComponent, DrawerStackService, DropdownInputComponent, DropdownListComponent, ErrorComponent, ExportDialog, ExportService, FILTERS_BREAKPOINT, FILTER_DATE_ALLOW_CUSTOM_RANGE, FeatureFlagsDialogComponent, FeedbackDialogComponent, FileSizePipe, FilterButtonComponent, FiltersBarComponent, HIGHLIGHTS, HighlightWordPipe, InfinityScrollDirective, InlineWorker, JsonMethodPluginService, KeyboardNavigatorDirective, LabelService, LabelsEditDialog, LoadingComponent, MetadataComponent, MissingTermsComponent, MoreButtonComponent, MoreComponent, MultiSelectLabelsComponent, MultiSelectionToolbarComponent, NON_SEARCHABLE_COLUMNS, NON_SEARCHABLE_DEFAULTS, NavbarTabsComponent, NavigationService, NoResultComponent, OpenArticleOnCtrlEnterDirective, OperatorPipe, OverflowItemDirective, OverflowManagerDirective, OverflowStopDirective, OverrideUserDialogComponent, PREVIEW_CONFIG, PagerComponent, PreviewNavigator, PreviewService, PrincipalService, PrincipalStore, QueryParamsStore, QueryService, RECENT_SEARCHES_CONFIG, RECENT_SEARCHES_OPTIONS, ROUTE_COMPONENTS, RecentSearchesComponent, ResetUserSettingsDialogComponent, SAVED_SEARCHES_CONFIG, SAVED_SEARCHES_OPTIONS, SavedSearchDialog, SavedSearchesComponent, SavedSearchesService, SearchFeedbackComponent, SearchInputFooter, SearchService, SelectArticleDirective, SelectArticleOnClickDirective, SelectionHistoryService, SelectionService, SelectionStore, ShowBookmarkDirective, SidebarNavComponent, SignInComponent, SignedOutComponent, SortSelectorComponent, SourceComponent, SourceIconPipe, SponsoredResultsComponent, SyslangPipe, THEMES, TextChunkService, ThemeProviderDirective, ThemeSelectorComponent, ThemeStore, ThemeToggleComponent, TranslocoDateImpurePipe, UserProfileDialog, UserProfileFormComponent, UserProfileService, UserSettingsStore, __resetSignInMutexForTests, applyThemeToNativeElement, auditInterceptorFn, authInterceptorFn, bodyInterceptorFn, bootstrapApp, buildQuery, debouncedSignal, errorInterceptorFn, getCurrentPath, getCurrentQueryName, getQueryNameFromRoute, injectRouteNavigation, legacyFilterToFilter, processCssVars, queryNameResolver, signIn, themeColorNameToCssVariable, themeColorsToCssVariables, toastInterceptorFn, withAggregationsFeatures, withAlertsFeatures, withAppFeatures, withApplicationFeatures, withAssistantFeatures, withBasketsFeatures, withBookmarkFeatures, withBootstrapApp, withExtractsFeatures, withFetch, withMultiSelectionFeatures, withQueryParamsFeatures, withRecentSearchesFeatures, withSavedSearchesFeatures, withSelectionFeatures, withThemeBodyHook, withThemes, withThemesFeatures, withUserSettingsFeatures };
16050
+ export { AGGREGATIONS_NAMES, AGGREGATIONS_NAMES_PRESET_DEFAULT, APP_FEATURES, AdvancedFiltersComponent, AdvancedSearch, AdvancedSearchComponent, AggregationComponent, AggregationDateComponent, AggregationDateRangeDialogComponent, AggregationItemDirective, AggregationListComponent, AggregationPanelComponent, AggregationTreeComponent, AggregationsService, AggregationsStore, Alert, AlertDialog, AlertsComponent, AppService, AppStore, ApplicationService, ApplicationStore, ArticleEntities, ArticleExtracts, ArticleLabels, ArticleSimilarDocuments, AsideFiltersComponent, AuditFeedbackType, AuditService, AuthGuard, AuthPageComponent, AutocompleteService, BOOKMARKS_CONFIG, BOOKMARKS_OPTIONS, BackdropComponent, BackdropService, BookmarkButtonComponent, BookmarksComponent, COLLECTIONS_CONFIG, COLLECTIONS_OPTIONS, COMPONENTS_FOR_DOCUMENT_TYPE, ChangePasswordComponent, ChildMarkerDirective, CollectionsComponent, CollectionsDialog, DRAWER_COMPONENT, DRAWER_STACK_MAX_COUNT, DateComponent, DeleteCollectionDialog, DidYouMeanComponent, DocumentLocatorComponent, DrawerAdvancedFiltersComponent, DrawerComponent, DrawerNavbarComponent, DrawerPreviewComponent, DrawerService, DrawerStackComponent, DrawerStackService, DropdownInputComponent, DropdownListComponent, ErrorComponent, ExportDialog, ExportService, FILTERS_BREAKPOINT, FILTER_DATE_ALLOW_CUSTOM_RANGE, FeatureFlagsDialogComponent, FeedbackDialogComponent, FileSizePipe, FilterButtonComponent, FiltersBarComponent, HIGHLIGHTS, HighlightWordPipe, InfinityScrollDirective, InlineWorker, JsonMethodPluginService, KeyboardNavigatorDirective, LabelService, LabelsEditDialog, LoadingComponent, MetadataComponent, MissingTermsComponent, MoreButtonComponent, MoreComponent, MultiSelectLabelsComponent, MultiSelectionToolbarComponent, NON_SEARCHABLE_COLUMNS, NON_SEARCHABLE_DEFAULTS, NavbarTabsComponent, NavigationService, NoResultComponent, OpenArticleOnCtrlEnterDirective, OperatorPipe, OverflowItemDirective, OverflowManagerDirective, OverflowStopDirective, OverrideUserDialogComponent, PREVIEW_CONFIG, PagerComponent, PreviewNavigator, PreviewService, PrincipalService, PrincipalStore, QueryParamsStore, QueryService, RECENT_SEARCHES_CONFIG, RECENT_SEARCHES_OPTIONS, ROUTE_COMPONENTS, RecentSearchesComponent, ResetUserSettingsDialogComponent, SAVED_SEARCHES_CONFIG, SAVED_SEARCHES_OPTIONS, SavedSearchDialog, SavedSearchesComponent, SavedSearchesService, SearchFeedbackComponent, SearchInputFooter, SearchService, SelectArticleDirective, SelectArticleOnClickDirective, SelectionHistoryService, SelectionService, SelectionStore, ShowBookmarkDirective, SidebarNavComponent, SignInComponent, SignedOutComponent, SortSelectorComponent, SourceComponent, SourceIconPipe, SponsoredResultsComponent, SyslangPipe, THEMES, TextChunkService, ThemeProviderDirective, ThemeSelectorComponent, ThemeStore, ThemeToggleComponent, TranslocoDateImpurePipe, UserProfileDialog, UserProfileFormComponent, UserProfileService, UserSettingsStore, __resetSignInMutexForTests, applyThemeToNativeElement, auditInterceptorFn, authInterceptorFn, bodyInterceptorFn, bootstrapApp, buildQuery, debouncedSignal, errorInterceptorFn, getCurrentPath, getCurrentQueryName, getQueryNameFromRoute, injectRouteNavigation, isAuthRoute, isSignInInFlight, legacyFilterToFilter, processCssVars, queryNameResolver, signIn, themeColorNameToCssVariable, themeColorsToCssVariables, toastInterceptorFn, withAggregationsFeatures, withAlertsFeatures, withAppFeatures, withApplicationFeatures, withAssistantFeatures, withBasketsFeatures, withBookmarkFeatures, withBootstrapApp, withExtractsFeatures, withFetch, withMultiSelectionFeatures, withQueryParamsFeatures, withRecentSearchesFeatures, withSavedSearchesFeatures, withSelectionFeatures, withThemeBodyHook, withThemes, withThemesFeatures, withUserSettingsFeatures };
15747
16051
  export type { AgentUserSettings, AggEx, AggregationEx, AggregationItemContext, AggregationListEx, AggregationListItem, AggregationSelection, AggregationTitle, AggregationTreeEx, AggregationTreeItemContext, AggregationsState, AppCJson, AppFeatures, ApplicationState, ArticleMetadata, AssistantDetails, Autocomplete, Basket, Bookmark, BookmarksConfig, CAggregation, CAggregationItem, CCAppState, CCWebServiceLabels, CConverter, CFeedback, CFilter, CFilterEx, CFilterItem, CJ, CJson, CJsonMint, CSources, CollectionsConfig, ComponentMapping, CssVars, DateRange, DocumentOffsets, DocumentPages, DocumentTypeMap, DropdownItem, ExportQueryOptions, Extract, FilterDropdown, KeyboardNavigationOnSelectionHandlers, KeyboardNavigatorOptions, LabelsConfig, MultiSelectionState, MultiSelectionToolbarVariants, NavRouteTab, PageConfiguration, PreviewEvents, PreviewHighlight, PreviewHighlightName, PreviewHighlights, PrincipalState, SearchItem, SearchOptions, SearchesConfig, SelectionHistoryEvent, SelectionState, SelectionStrategy, SideCJson, SortingChoice, Theme, ThemeBodyHookParameters, ThemeScope, ThemeStoreState, UserSettingsState };