@sinequa/atomic-angular 2.8.0 → 2.9.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sinequa/atomic-angular",
3
- "version": "2.8.0",
3
+ "version": "2.9.0",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -1551,7 +1551,7 @@ export declare class WorkspaceList {
1551
1551
  labelKey: string;
1552
1552
  }[];
1553
1553
  protected readonly viewMode: import("@angular/core").WritableSignal<ViewMode$1>;
1554
- protected readonly status: import("@angular/core").WritableSignal<"loading" | "ready" | "error">;
1554
+ protected readonly status: import("@angular/core").WritableSignal<"error" | "loading" | "ready">;
1555
1555
  protected readonly loadError: import("@angular/core").WritableSignal<Message | null>;
1556
1556
  protected readonly refreshError: import("@angular/core").WritableSignal<string | null>;
1557
1557
  protected readonly loadingMore: import("@angular/core").WritableSignal<boolean>;
@@ -2135,7 +2135,7 @@ export declare class WorkspaceEditDialog {
2135
2135
  protected readonly busy: import("@angular/core").WritableSignal<boolean>;
2136
2136
  protected readonly error: import("@angular/core").WritableSignal<WorkspaceErrorMessage | null>;
2137
2137
  protected readonly descriptionTooLong: import("@angular/core").Signal<boolean>;
2138
- protected readonly saveLabel: import("@angular/core").Signal<"documentWorkspaces.edit.creating" | "documentWorkspaces.edit.saving" | "documentWorkspaces.common.create" | "documentWorkspaces.common.save">;
2138
+ protected readonly saveLabel: import("@angular/core").Signal<"documentWorkspaces.common.save" | "documentWorkspaces.edit.creating" | "documentWorkspaces.edit.saving" | "documentWorkspaces.common.create">;
2139
2139
  /** What to resolve with once the native dialog has closed: the saved workspace, or the plain dismissal. */
2140
2140
  private outcome;
2141
2141
  constructor();
@@ -2192,7 +2192,7 @@ export declare class WorkspaceDetail {
2192
2192
  protected readonly query: import("@angular/core").WritableSignal<string>;
2193
2193
  /** The search box, bound to `query`. */
2194
2194
  protected readonly searchForm: import("@angular/forms/signals").FieldTree<string, string | number, "writable">;
2195
- protected readonly status: import("@angular/core").WritableSignal<"loading" | "ready" | "error">;
2195
+ protected readonly status: import("@angular/core").WritableSignal<"error" | "loading" | "ready">;
2196
2196
  protected readonly loadError: import("@angular/core").WritableSignal<Message | null>;
2197
2197
  protected readonly refreshError: import("@angular/core").WritableSignal<string | null>;
2198
2198
  protected readonly refreshing: import("@angular/core").WritableSignal<boolean>;
@@ -2327,7 +2327,7 @@ export declare function injectWorkspaceMention(options?: WorkspaceMentionOptions
2327
2327
  /** The workspaces in each category — the whole list, not what the search left. */
2328
2328
  counts: import("@angular/core").Signal<import("@sinequa/atomic-angular/document-workspaces").WorkspaceTabCounts>;
2329
2329
  /** Whether the first page is loading, ready or failed. */
2330
- status: import("@angular/core").Signal<"loading" | "ready" | "error">;
2330
+ status: import("@angular/core").Signal<"error" | "loading" | "ready">;
2331
2331
  /** More workspaces than the loaded ones exist on the server: `loadMore()` fetches the next page. */
2332
2332
  hasMore: import("@angular/core").Signal<boolean>;
2333
2333
  /** The loading cap is reached: some workspaces will never be offered, search included. */
@@ -2374,7 +2374,7 @@ export declare const WORKSPACE_MENTION: InjectionToken<{
2374
2374
  /** The workspaces in each category — the whole list, not what the search left. */
2375
2375
  counts: import("@angular/core").Signal<import("@sinequa/atomic-angular/document-workspaces").WorkspaceTabCounts>;
2376
2376
  /** Whether the first page is loading, ready or failed. */
2377
- status: import("@angular/core").Signal<"loading" | "ready" | "error">;
2377
+ status: import("@angular/core").Signal<"error" | "loading" | "ready">;
2378
2378
  /** More workspaces than the loaded ones exist on the server: `loadMore()` fetches the next page. */
2379
2379
  hasMore: import("@angular/core").Signal<boolean>;
2380
2380
  /** The loading cap is reached: some workspaces will never be offered, search included. */
@@ -2525,7 +2525,7 @@ export declare class WorkspaceMention implements WorkspaceMentionApi, AfterConte
2525
2525
  labelKey: string;
2526
2526
  }[];
2527
2527
  readonly counts: import("@angular/core").Signal<import("@sinequa/atomic-angular/document-workspaces").WorkspaceTabCounts>;
2528
- readonly status: import("@angular/core").Signal<"loading" | "ready" | "error">;
2528
+ readonly status: import("@angular/core").Signal<"error" | "loading" | "ready">;
2529
2529
  readonly hasMore: import("@angular/core").Signal<boolean>;
2530
2530
  readonly truncated: import("@angular/core").Signal<boolean>;
2531
2531
  readonly loadingMore: import("@angular/core").Signal<boolean>;
@@ -2591,11 +2591,11 @@ export declare class WorkspaceMention implements WorkspaceMentionApi, AfterConte
2591
2591
  */
2592
2592
  export declare class WorkspaceMentionNew implements AfterContentInit {
2593
2593
  /** The button's variant. */
2594
- readonly variant: import("@angular/core").InputSignal<"primary" | "secondary" | "none" | "light-accent" | "accent" | "tertiary" | null | undefined>;
2594
+ readonly variant: import("@angular/core").InputSignal<"none" | "primary" | "secondary" | "light-accent" | "accent" | "tertiary" | null | undefined>;
2595
2595
  /** The button's colour scheme. */
2596
2596
  readonly scheme: import("@angular/core").InputSignal<"default" | "neutral" | null | undefined>;
2597
2597
  /** The button's size. */
2598
- readonly size: import("@angular/core").InputSignal<"sm" | "md" | "lg" | "small" | "xs" | "xsmall" | "medium" | "large" | null | undefined>;
2598
+ readonly size: import("@angular/core").InputSignal<"small" | "medium" | "md" | "lg" | "sm" | "xs" | "xsmall" | "large" | null | undefined>;
2599
2599
  private readonly mention;
2600
2600
  private readonly slot;
2601
2601
  /** Whether the host put its own content inside: the icon and the label then stay out. */
@@ -2638,7 +2638,7 @@ export declare class WorkspaceMentionRows {
2638
2638
  labelKey: string;
2639
2639
  }[];
2640
2640
  counts: import("@angular/core").Signal<import("@sinequa/atomic-angular/document-workspaces").WorkspaceTabCounts>;
2641
- status: import("@angular/core").Signal<"loading" | "ready" | "error">;
2641
+ status: import("@angular/core").Signal<"error" | "loading" | "ready">;
2642
2642
  hasMore: import("@angular/core").Signal<boolean>;
2643
2643
  truncated: import("@angular/core").Signal<boolean>;
2644
2644
  loadingMore: import("@angular/core").Signal<boolean>;
@@ -2660,9 +2660,9 @@ export declare class WorkspaceMentionRows {
2660
2660
  /** The search box of the enclosing `<workspace-mention>`: it narrows what the menu offers. */
2661
2661
  export declare class WorkspaceMentionSearch {
2662
2662
  /** The size of the box, as `<SearchInput>` sizes it. */
2663
- readonly size: import("@angular/core").InputSignal<"sm" | "md" | "lg" | null | undefined>;
2663
+ readonly size: import("@angular/core").InputSignal<"md" | "lg" | "sm" | null | undefined>;
2664
2664
  /** The size of the text, as `<SearchInput>` sizes it; follows `size` when absent. */
2665
- readonly textSize: import("@angular/core").InputSignal<"sm" | "base" | null | undefined>;
2665
+ readonly textSize: import("@angular/core").InputSignal<"base" | "sm" | null | undefined>;
2666
2666
  /** The hint shown in the empty box; the translated "Search workspace..." when absent. */
2667
2667
  readonly placeholder: import("@angular/core").InputSignal<string | undefined>;
2668
2668
  /** The accessible name of the box; the placeholder when absent. */
@@ -2709,7 +2709,7 @@ export declare class WorkspaceMentionSelectAll {
2709
2709
  labelKey: string;
2710
2710
  }[];
2711
2711
  counts: import("@angular/core").Signal<import("@sinequa/atomic-angular/document-workspaces").WorkspaceTabCounts>;
2712
- status: import("@angular/core").Signal<"loading" | "ready" | "error">;
2712
+ status: import("@angular/core").Signal<"error" | "loading" | "ready">;
2713
2713
  hasMore: import("@angular/core").Signal<boolean>;
2714
2714
  truncated: import("@angular/core").Signal<boolean>;
2715
2715
  loadingMore: import("@angular/core").Signal<boolean>;
@@ -2745,7 +2745,7 @@ export declare class WorkspaceMentionTabs {
2745
2745
  labelKey: string;
2746
2746
  }[];
2747
2747
  counts: import("@angular/core").Signal<import("@sinequa/atomic-angular/document-workspaces").WorkspaceTabCounts>;
2748
- status: import("@angular/core").Signal<"loading" | "ready" | "error">;
2748
+ status: import("@angular/core").Signal<"error" | "loading" | "ready">;
2749
2749
  hasMore: import("@angular/core").Signal<boolean>;
2750
2750
  truncated: import("@angular/core").Signal<boolean>;
2751
2751
  loadingMore: import("@angular/core").Signal<boolean>;
@@ -2790,14 +2790,14 @@ export declare const NEW_WORKSPACE_NAME_MAX = 50;
2790
2790
  */
2791
2791
  export declare class WorkspacePicker {
2792
2792
  /** `save` attaches `documents` to the chosen workspace; `move` takes `documentIds` from `fromWorkspaceId` to it. */
2793
- readonly mode: import("@angular/core").InputSignal<"save" | "move">;
2793
+ readonly mode: import("@angular/core").InputSignal<"move" | "save">;
2794
2794
  readonly documents: import("@angular/core").InputSignal<readonly PickerDocument[]>;
2795
2795
  readonly fromWorkspaceId: import("@angular/core").InputSignal<string | null>;
2796
2796
  readonly documentIds: import("@angular/core").InputSignal<readonly string[]>;
2797
2797
  /** The documents are in the workspace, and the check mark has been seen. */
2798
2798
  readonly completed: import("@angular/core").OutputEmitterRef<Workspace>;
2799
2799
  private readonly store;
2800
- protected readonly status: import("@angular/core").WritableSignal<"loading" | "ready" | "error">;
2800
+ protected readonly status: import("@angular/core").WritableSignal<"error" | "loading" | "ready">;
2801
2801
  protected readonly busyId: import("@angular/core").WritableSignal<string | null>;
2802
2802
  protected readonly doneId: import("@angular/core").WritableSignal<string | null>;
2803
2803
  protected readonly error: import("@angular/core").WritableSignal<Message | null>;
@@ -11094,9 +11094,15 @@ export declare class ArticleSimilarDocumentsTabPanel {
11094
11094
  "selected": "selected";
11095
11095
  }, never, never, true, never>;
11096
11096
  }
11097
+ /**
11098
+ * Short weekday names in the active language ("Mon", "lun."), Monday first. 2024-01-01 is a Monday.
11099
+ */
11100
+ declare function weekdayNames(lang: string): string[];
11097
11101
  /** One piece of the summary: a translation key (translated by the template's pipe) or a ready text. */
11098
11102
  interface AlertSummaryPart {
11099
11103
  key?: string;
11104
+ /** Interpolation parameters of `key`. */
11105
+ params?: Record<string, unknown>;
11100
11106
  text?: string;
11101
11107
  }
11102
11108
  /**
@@ -11109,6 +11115,11 @@ interface AlertSummaryPart {
11109
11115
  * Tolerant of an alert that lacks `times` or `days`: the piece is left out rather than shown empty.
11110
11116
  */
11111
11117
  declare function alertSummary(lang: string, alert: Alert): AlertSummaryPart[];
11118
+ /**
11119
+ * What an alert watches, in pieces — « “data protection” · Web tab · 2 filters ». Same contract as
11120
+ * {@link alertSummary}: translation keys for the template's pipe, ready text for the rest.
11121
+ */
11122
+ declare function querySummary(query: Query | undefined): AlertSummaryPart[];
11112
11123
  /**
11113
11124
  * The user's alerts: one row per alert (name, when it fires, an on/off switch), "Create" in the header.
11114
11125
  *
@@ -11124,6 +11135,23 @@ export declare class AlertsComponent {
11124
11135
  private readonly transloco;
11125
11136
  private readonly lang;
11126
11137
  query: Query;
11138
+ /**
11139
+ * Whether the form opens in a dialog (`AlertForm`), which is what a click on a row or on "Create" does by
11140
+ * default. Set it to `false` to show the form yourself, wherever you like (see `AlertFormComponent`): the
11141
+ * list then only reports the request, with `editRequested` and `createRequested`.
11142
+ */
11143
+ readonly dialog: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
11144
+ /** The user asked to edit an alert: its index in `UserSettingsStore.alerts()`. Only with `[dialog]="false"`. */
11145
+ readonly editRequested: import("@angular/core").OutputEmitterRef<number>;
11146
+ /** The user asked to create an alert. Only with `[dialog]="false"`. */
11147
+ readonly createRequested: import("@angular/core").OutputEmitterRef<void>;
11148
+ /**
11149
+ * Why the last change could not be saved, shown above the list until the next one. A toast would not do: the
11150
+ * list lives in popovers and modal dialogs, which are in the top layer, above any toast.
11151
+ */
11152
+ protected readonly saveError: import("@angular/core").WritableSignal<{
11153
+ detail?: string;
11154
+ } | undefined>;
11127
11155
  protected readonly alerts: import("@angular/core").Signal<Alert[]>;
11128
11156
  /**
11129
11157
  * The order on screen. A copy of the store's list (the store edits its own array in place), and ahead of it
@@ -11165,7 +11193,16 @@ export declare class AlertsComponent {
11165
11193
  /** The new order of the alerts shown. An alert being deleted is not in it: it goes after them, as it is about to leave. */
11166
11194
  protected saveOrder(shown: Alert[]): Promise<void>;
11167
11195
  static ɵfac: i0.ɵɵFactoryDeclaration<AlertsComponent, never>;
11168
- static ɵcmp: i0.ɵɵComponentDeclaration<AlertsComponent, "Alerts", never, {}, {}, never, never, true, never>;
11196
+ static ɵcmp: i0.ɵɵComponentDeclaration<AlertsComponent, "Alerts", never, {
11197
+ "dialog": {
11198
+ "alias": "dialog";
11199
+ "required": false;
11200
+ "isSignal": true;
11201
+ };
11202
+ }, {
11203
+ "editRequested": "editRequested";
11204
+ "createRequested": "createRequested";
11205
+ }, never, never, true, never>;
11169
11206
  }
11170
11207
  /**
11171
11208
  * The seven weekdays, in display order, each paired with its bit in {@link Alert.Days}.
@@ -11220,22 +11257,47 @@ export interface AlertFormModel {
11220
11257
  export declare function weekdaysFromFlags(mask: Alert.Days): Record<WeekdayKey, boolean>;
11221
11258
  /** Folds the seven booleans of the form model back into an {@link Alert.Days} bitfield. */
11222
11259
  export declare function flagsFromWeekdays(days: Record<WeekdayKey, boolean>): Alert.Days;
11223
- export declare class AlertDialog {
11224
- protected readonly call: import("@sinequa/galactik").CallRef<number | undefined, DialogEvent>;
11260
+ /**
11261
+ * The form that creates or edits one alert: name, frequency and time, weekdays, on/off, and — for an
11262
+ * existing alert — the search it watches.
11263
+ *
11264
+ * It knows nothing of its container. `<alert-form [index]="…" (saved)="…" />` can sit in a dialog (see
11265
+ * {@link AlertDialog}), a panel, a drawer or a page: it saves through {@link UserSettingsStore} and tells its
11266
+ * container with `saved` once the save has succeeded, or `executed` once the user has run the watched search.
11267
+ * A failed save keeps what was typed and is shown inside the form — a toast would sit behind a modal dialog.
11268
+ *
11269
+ * The form renders no button of its own that submits or cancels: those belong to the container. A submit
11270
+ * button placed outside the form submits it by pointing at {@link AlertFormComponent.formId} with its `form`
11271
+ * attribute, and can use {@link AlertFormComponent.saving} to wait for the save.
11272
+ *
11273
+ * The layout follows the width of the form (a container query), not that of the window: frequency and time
11274
+ * share a line from 24rem up and stack below.
11275
+ */
11276
+ export declare class AlertFormComponent {
11225
11277
  private readonly queryService;
11226
11278
  private readonly queryParamsStore;
11227
11279
  private readonly userSettingsStore;
11228
11280
  private readonly transloco;
11229
- readonly dialog: import("@angular/core").Signal<DialogComponent | undefined>;
11281
+ private readonly lang;
11282
+ /** Index, in the user settings, of the alert to edit — leave it unset to create one. */
11283
+ readonly index: import("@angular/core").InputSignal<number | undefined>;
11284
+ /** Emitted once the alert has been saved. */
11285
+ readonly saved: import("@angular/core").OutputEmitterRef<void>;
11286
+ /** Emitted once the user has run the watched search: the query parameters now hold it. */
11287
+ readonly executed: import("@angular/core").OutputEmitterRef<void>;
11288
+ /** Id of the `<form>`: a submit button outside the component points at it with its `form` attribute. */
11289
+ readonly formId: string;
11230
11290
  protected readonly fieldClass = "flex flex-col gap-(--spacing-2xs)";
11231
11291
  protected readonly labelClass = "text-(length:--size-base) font-(--weight-semibold) text-(--font-primary-base)";
11232
11292
  protected readonly errorClass = "text-(length:--size-base) text-(--font-error-base)";
11233
- frequencies: Alert.Frequency[];
11234
- frequency: typeof Alert.Frequency;
11293
+ protected readonly frequencies: Alert.Frequency[];
11294
+ protected readonly frequency: typeof Alert.Frequency;
11295
+ protected readonly Days: typeof Alert.Days;
11296
+ protected readonly querySummary: typeof querySummary;
11235
11297
  /** Libellé traduit d'une fréquence — utilisé par le typeahead du `SelectMenu`. */
11236
- readonly frequencyLabel: (value: Alert.Frequency) => string;
11237
- /** The seven weekdays, exposed to the template for the checkbox grid. */
11238
- readonly weekdays: readonly [{
11298
+ protected readonly frequencyLabel: (value: Alert.Frequency) => string;
11299
+ /** The seven weekdays, exposed to the template for the toggle chips. */
11300
+ protected readonly weekdays: readonly [{
11239
11301
  readonly key: "monday";
11240
11302
  readonly flag: Alert.Days.Monday;
11241
11303
  }, {
@@ -11257,30 +11319,33 @@ export declare class AlertDialog {
11257
11319
  readonly key: "sunday";
11258
11320
  readonly flag: Alert.Days.Sunday;
11259
11321
  }];
11260
- /**
11261
- * The alert being edited, and its index in the user settings — `undefined` in "create" mode.
11262
- *
11263
- * Signals and not plain properties: they are written from `init()`, outside any template listener,
11264
- * and the template branches on them. A plain property mutated there does not mark the view dirty.
11265
- */
11266
- readonly index: import("@angular/core").WritableSignal<number | undefined>;
11267
- readonly alert: import("@angular/core").WritableSignal<Alert | undefined>;
11268
- canUpdateQuery: import("@angular/core").WritableSignal<boolean>;
11269
- updateStatus: import("@angular/core").WritableSignal<"idle" | "updating" | "updated">;
11270
- /** Why the last save failed — shown in the dialog until the next attempt. */
11322
+ /** Their short names in the active language, Monday first — what the chips show. */
11323
+ protected readonly dayNames: import("@angular/core").Signal<string[]>;
11324
+ /** The alert being edited — `undefined` in "create" mode. */
11325
+ readonly alert: import("@angular/core").Signal<Alert | undefined>;
11326
+ /**
11327
+ * Whether the search currently on screen can replace the one the alert watches: it must have results.
11328
+ * Only an existing alert has anything to replace, so a new one issues no search.
11329
+ */
11330
+ private readonly currentSearch;
11331
+ readonly canUpdateQuery: import("@angular/core").Signal<boolean>;
11332
+ readonly updateStatus: import("@angular/core").WritableSignal<"updating" | "updated" | "idle">;
11333
+ /** Why the last save failed — shown in the form until the next attempt. */
11271
11334
  protected readonly saveError: import("@angular/core").WritableSignal<{
11272
11335
  detail?: string;
11273
11336
  } | undefined>;
11274
- /** Form model. Replaces the five former scalar signals. */
11337
+ /** Form model: the stored alert's values, or the defaults of a new one. Follows the alert it edits. */
11275
11338
  readonly alertModel: import("@angular/core").WritableSignal<AlertFormModel>;
11276
11339
  protected readonly alertForm: FieldTree<AlertFormModel, string | number, "writable">;
11340
+ /** True while a submission is being saved — for a container that disables its confirm button meanwhile. */
11341
+ readonly saving: import("@angular/core").Signal<boolean>;
11277
11342
  /**
11278
11343
  * The weekday group shows its error like any other field: once touched — which, for a group the
11279
11344
  * checkboxes cannot blur, means once the form has been submitted.
11280
11345
  */
11281
11346
  protected readonly showDaysError: import("@angular/core").Signal<boolean>;
11282
- constructor();
11283
- private init;
11347
+ /** Checks exactly the days of `mask` — the "Weekdays" and "Every day" shortcuts. */
11348
+ protected setDays(mask: Alert.Days): void;
11284
11349
  /**
11285
11350
  * The submission itself, only ever reached with a valid form: `submit()` marks every field as
11286
11351
  * touched — revealing the messages — and runs the action only when the form is valid.
@@ -11292,8 +11357,35 @@ export declare class AlertDialog {
11292
11357
  protected showError<T>(field: FieldTree<T>): boolean;
11293
11358
  /** Maps the first validation error to its translation key (`alerts.errors.noDaySelected`, …). */
11294
11359
  protected errorKey<T>(field: FieldTree<T>): string;
11295
- updateQuery(): void;
11296
- execute(): void;
11360
+ protected updateQuery(): void;
11361
+ protected execute(): void;
11362
+ static ɵfac: i0.ɵɵFactoryDeclaration<AlertFormComponent, never>;
11363
+ static ɵcmp: i0.ɵɵComponentDeclaration<AlertFormComponent, "alert-form, alertform, AlertFormComponent", never, {
11364
+ "index": {
11365
+ "alias": "index";
11366
+ "required": false;
11367
+ "isSignal": true;
11368
+ };
11369
+ }, {
11370
+ "saved": "saved";
11371
+ "executed": "executed";
11372
+ }, never, never, true, never>;
11373
+ }
11374
+ /**
11375
+ * The modal dialog around {@link AlertFormComponent}: a title, the form, and the Cancel / Confirm buttons.
11376
+ *
11377
+ * It only hosts the form — the fields, the validation and the save are the form's. Confirm sits outside the
11378
+ * `<form>` and submits it through its `form` attribute; the dialog closes when the form says the alert is
11379
+ * saved (`dialog-confirm`) or that the watched search has been run.
11380
+ *
11381
+ * Open it with {@link AlertForm}, which takes the index of the alert to edit (none to create one).
11382
+ */
11383
+ export declare class AlertDialog {
11384
+ protected readonly call: import("@sinequa/galactik").CallRef<number | undefined, DialogEvent>;
11385
+ readonly dialog: import("@angular/core").Signal<DialogComponent | undefined>;
11386
+ /** Index, in the user settings, of the alert being edited — `undefined` in "create" mode. */
11387
+ protected readonly index: import("@angular/core").WritableSignal<number | undefined>;
11388
+ constructor();
11297
11389
  static ɵfac: i0.ɵɵFactoryDeclaration<AlertDialog, never>;
11298
11390
  static ɵcmp: i0.ɵɵComponentDeclaration<AlertDialog, "alert-dialog, alertdialog, AlertDialog", never, {}, {}, never, never, true, never>;
11299
11391
  }
@@ -11721,8 +11813,8 @@ export declare class SignedOutComponent {
11721
11813
  static ɵcmp: i0.ɵɵComponentDeclaration<SignedOutComponent, "signed-out, SignedOut, signedout", never, {}, {}, never, never, true, never>;
11722
11814
  }
11723
11815
  export declare class BookmarkButtonComponent {
11724
- variant: import("@angular/core").InputSignal<"primary" | "secondary" | "none" | "light-accent" | "accent" | "tertiary" | null | undefined>;
11725
- size: import("@angular/core").InputSignal<"small" | "sm" | "md" | "xs" | "xsmall" | "medium" | "lg" | "large" | null | undefined>;
11816
+ variant: import("@angular/core").InputSignal<"none" | "primary" | "secondary" | "light-accent" | "accent" | "tertiary" | null | undefined>;
11817
+ size: import("@angular/core").InputSignal<"small" | "large" | "sm" | "md" | "xs" | "xsmall" | "medium" | "lg" | null | undefined>;
11726
11818
  /**
11727
11819
  * Tab index applied to the inner button.
11728
11820
  *
@@ -12813,7 +12905,7 @@ export declare class SearchFeedbackComponent {
12813
12905
  onClose: import("@angular/core").OutputEmitterRef<void>;
12814
12906
  private readonly injector;
12815
12907
  pages: import("@angular/core").InputSignal<any>;
12816
- variant: import("@angular/core").InputSignal<"primary" | "secondary" | "none" | "light-accent" | "accent" | "tertiary" | null | undefined>;
12908
+ variant: import("@angular/core").InputSignal<"none" | "primary" | "secondary" | "light-accent" | "accent" | "tertiary" | null | undefined>;
12817
12909
  readonly auditService: AuditService;
12818
12910
  protected readonly queryParamsStore: {
12819
12911
  name?: import("@angular/core").Signal<string | undefined> | undefined;
@@ -13146,7 +13238,7 @@ export declare class AggregationDateComponent {
13146
13238
  *
13147
13239
  * @default 'selection'
13148
13240
  */
13149
- emitOn: import("@angular/core").InputSignal<"selection" | "apply">;
13241
+ emitOn: import("@angular/core").InputSignal<"apply" | "selection">;
13150
13242
  readonly title: import("@angular/core").InputSignal<AggregationTitle>;
13151
13243
  readonly displayEmptyDistributionIntervals: import("@angular/core").InputSignal<boolean>;
13152
13244
  onSelect: import("@angular/core").OutputEmitterRef<AggregationItem[]>;
@@ -15606,7 +15698,7 @@ export declare class AggregationComponent {
15606
15698
  *
15607
15699
  * @default 'selection'
15608
15700
  */
15609
- emitOn: import("@angular/core").InputSignal<"selection" | "apply">;
15701
+ emitOn: import("@angular/core").InputSignal<"apply" | "selection">;
15610
15702
  /**
15611
15703
  * Which sub-component renders the aggregation.
15612
15704
  *
@@ -15619,7 +15711,7 @@ export declare class AggregationComponent {
15619
15711
  *
15620
15712
  * @default "auto"
15621
15713
  */
15622
- type: import("@angular/core").InputSignal<"auto" | "list" | "tree" | "date">;
15714
+ type: import("@angular/core").InputSignal<"date" | "list" | "tree" | "auto">;
15623
15715
  /**
15624
15716
  * Whether the host removes itself from the layout (Tailwind's `hidden`, i.e.
15625
15717
  * `display: none`) when it resolves to zero items. When `false` (default), the
@@ -15671,7 +15763,7 @@ export declare class AggregationComponent {
15671
15763
  * The sub-component to render: the explicit `type` input, or the current
15672
15764
  * date/tree/list heuristic when `type` is `"auto"`.
15673
15765
  */
15674
- protected resolvedType: import("@angular/core").Signal<"list" | "tree" | "date">;
15766
+ protected resolvedType: import("@angular/core").Signal<"date" | "list" | "tree">;
15675
15767
  /** Whether a filter is currently applied on this aggregation. */
15676
15768
  private readonly hasFilters;
15677
15769
  /**
@@ -16239,7 +16331,7 @@ export declare class FilterButtonComponent {
16239
16331
  * silently moved to a hidden one.
16240
16332
  */
16241
16333
  overflowed: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
16242
- protected variant: import("@angular/core").WritableSignal<"primary" | "secondary" | "none" | "light-accent" | "accent" | "tertiary" | null | undefined>;
16334
+ protected variant: import("@angular/core").WritableSignal<"none" | "primary" | "secondary" | "light-accent" | "accent" | "tertiary" | null | undefined>;
16243
16335
  protected filter: import("@angular/core").WritableSignal<CFilterEx>;
16244
16336
  /** Unique id wiring the trigger's `popovertarget` to the `<div popover>` `id`. */
16245
16337
  protected readonly popoverId: string;
@@ -18899,7 +18991,7 @@ export declare class SavedSearchesComponent {
18899
18991
  };
18900
18992
  }, {}, never, never, true, never>;
18901
18993
  }
18902
- export type SettingsPanelId = "account" | "appearance" | "shortcuts";
18994
+ export type SettingsPanelId = "account" | "appearance" | "alerts" | "shortcuts";
18903
18995
  /** Payload of `Settings.call()`: the panel to show first (default `account`). */
18904
18996
  export interface SettingsDialogProps {
18905
18997
  panel?: SettingsPanelId;
@@ -19062,6 +19154,27 @@ export declare class SettingsAppearancePanelComponent {
19062
19154
  static ɵfac: i0.ɵɵFactoryDeclaration<SettingsAppearancePanelComponent, never>;
19063
19155
  static ɵcmp: i0.ɵɵComponentDeclaration<SettingsAppearancePanelComponent, "settings-appearance-panel", never, {}, {}, never, never, true, never>;
19064
19156
  }
19157
+ /**
19158
+ * The user's alerts: the list, and — once one is picked, or "Create" is pressed — the form in the same panel.
19159
+ *
19160
+ * The form is not a second dialog on top of the settings: the panel swaps from the list to the form and back,
19161
+ * and a failed save is shown in the form itself, which a toast could not do behind a modal dialog.
19162
+ */
19163
+ export declare class SettingsAlertsPanelComponent {
19164
+ /** The user ran an alert's search: the settings have nothing more to show, the page behind has the results. */
19165
+ readonly closeRequested: import("@angular/core").OutputEmitterRef<void>;
19166
+ /** The form being shown — `index` is the alert to edit, `undefined` to create one — or nothing: the list. */
19167
+ protected readonly form: import("@angular/core").WritableSignal<{
19168
+ index: number | undefined;
19169
+ } | undefined>;
19170
+ protected edit(index: number): void;
19171
+ protected create(): void;
19172
+ protected back(): void;
19173
+ static ɵfac: i0.ɵɵFactoryDeclaration<SettingsAlertsPanelComponent, never>;
19174
+ static ɵcmp: i0.ɵɵComponentDeclaration<SettingsAlertsPanelComponent, "settings-alerts-panel", never, {}, {
19175
+ "closeRequested": "closeRequested";
19176
+ }, never, never, true, never>;
19177
+ }
19065
19178
  /** The keyboard shortcuts currently registered, as documented by the registry itself. */
19066
19179
  export declare class SettingsShortcutsPanelComponent {
19067
19180
  static ɵfac: i0.ɵɵFactoryDeclaration<SettingsShortcutsPanelComponent, never>;