@sinequa/atomic-angular 2.7.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/features/alerts/i18n/de.json +19 -1
- package/features/alerts/i18n/en.json +19 -1
- package/features/alerts/i18n/fr.json +19 -1
- package/features/bookmarks/i18n/de.json +1 -0
- package/features/bookmarks/i18n/en.json +1 -0
- package/features/bookmarks/i18n/fr.json +1 -0
- package/features/collections/i18n/de.json +4 -1
- package/features/collections/i18n/en.json +4 -1
- package/features/collections/i18n/fr.json +4 -1
- package/features/searches/i18n/de.json +2 -0
- package/features/searches/i18n/en.json +2 -0
- package/features/searches/i18n/fr.json +2 -0
- package/features/settings/i18n/de.json +6 -0
- package/features/settings/i18n/en.json +6 -0
- package/features/settings/i18n/fr.json +6 -0
- package/fesm2022/sinequa-atomic-angular.mjs +1396 -642
- package/fesm2022/sinequa-atomic-angular.mjs.map +1 -1
- package/package.json +1 -1
- package/types/sinequa-atomic-angular-document-workspaces.d.ts +15 -15
- package/types/sinequa-atomic-angular.d.ts +218 -46
package/package.json
CHANGED
|
@@ -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<"
|
|
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.
|
|
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<"
|
|
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<"
|
|
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<"
|
|
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<"
|
|
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<"
|
|
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<"
|
|
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<"
|
|
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<"
|
|
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<"
|
|
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<"
|
|
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<"
|
|
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<"
|
|
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<"
|
|
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>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from "@angular/core";
|
|
2
2
|
import { ApplicationRef, ChangeDetectorRef, DestroyRef, ElementRef, EnvironmentProviders, InjectionToken, Injector, OnDestroy, OnInit, PipeTransform, Provider, ResourceRef, Signal, TemplateRef, Type, WritableSignal } from "@angular/core";
|
|
3
3
|
import { TranslocoService } from "@jsverse/transloco";
|
|
4
|
-
import { Aggregation, AggregationItem, Article, AtomicClient, AtomicClientConfig, AuditEventType, AuditEventTypeValues, AuditEvents, CCApp, CCColumn, CCQuery, CCSortingChoice, CCWebService, Conversion, Credentials, CustomHighlights, DidYouMeanAction, ExportOutputFormat, ExportQueryModel, Filter as Filter$1, FilterOperator, KeyOf, LegacyFilter, LinkResult, PreviewData, Principal, Query, QueryParams, RequestOptions, Result, SpellingCorrectionMode, Suggestion, TextChunk, TextLocation, TreeAggregation, TreeAggregationNode, UserProfile
|
|
4
|
+
import { Aggregation, AggregationItem, Article, AtomicClient, AtomicClientConfig, AuditEventType, AuditEventTypeValues, AuditEvents, CCApp, CCColumn, CCQuery, CCSortingChoice, CCWebService, Conversion, Credentials, CustomHighlights, DidYouMeanAction, ExportOutputFormat, ExportQueryModel, Filter as Filter$1, FilterOperator, KeyOf, LegacyFilter, LinkResult, PreviewData, Principal, Query, QueryParams, RequestOptions, Result, SpellingCorrectionMode, Suggestion, TextChunk, TextLocation, TreeAggregation, TreeAggregationNode, UserProfile } from "@sinequa/atomic";
|
|
5
5
|
import { CanActivateFn, NavigationEnd, Params, ResolveFn, Route, Router } from "@angular/router";
|
|
6
6
|
import { VariantProps } from "class-variance-authority";
|
|
7
7
|
import { BreakpointObserverService, DialogComponent, DialogEvent, DialogResult, DropdownDirective, PopoverDirective, SheetComponent, SwitchComponent } from "@sinequa/galactik";
|
|
@@ -10,7 +10,6 @@ import { BehaviorSubject, Observable, Subject } from "rxjs";
|
|
|
10
10
|
import { FieldTree } from "@angular/forms/signals";
|
|
11
11
|
import MarkdownIt from "markdown-it";
|
|
12
12
|
import { Placement } from "@floating-ui/dom";
|
|
13
|
-
import { CdkDragDrop } from "@angular/cdk/drag-drop";
|
|
14
13
|
import { Options as Options$1 } from "vanilla-calendar-pro";
|
|
15
14
|
import { TreeItem } from "@angular/aria/tree";
|
|
16
15
|
import { Toolbar } from "@angular/aria/toolbar";
|
|
@@ -1062,7 +1061,7 @@ export declare class MetadataComponent {
|
|
|
1062
1061
|
}>;
|
|
1063
1062
|
class: import("@angular/core").InputSignal<string | undefined>;
|
|
1064
1063
|
variant: import("@angular/core").InputSignal<"primary" | "secondary" | null | undefined>;
|
|
1065
|
-
size: import("@angular/core").InputSignal<"small" | "
|
|
1064
|
+
size: import("@angular/core").InputSignal<"small" | "sm" | "md" | "xs" | "xsmall" | "medium" | null | undefined>;
|
|
1066
1065
|
scheme: import("@angular/core").InputSignal<"error" | "sage" | "success" | "almond" | "pink" | "grey" | "yellow" | "cherry" | "indigo" | "cyan" | "warning" | "info" | null | undefined>;
|
|
1067
1066
|
metadata: import("@angular/core").InputSignal<(string & Record<never, never>) | KeyOf<Article>>;
|
|
1068
1067
|
article: import("@angular/core").InputSignal<Partial<Article> | (string & Record<never, never>)>;
|
|
@@ -11095,22 +11094,115 @@ export declare class ArticleSimilarDocumentsTabPanel {
|
|
|
11095
11094
|
"selected": "selected";
|
|
11096
11095
|
}, never, never, true, never>;
|
|
11097
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[];
|
|
11101
|
+
/** One piece of the summary: a translation key (translated by the template's pipe) or a ready text. */
|
|
11102
|
+
interface AlertSummaryPart {
|
|
11103
|
+
key?: string;
|
|
11104
|
+
/** Interpolation parameters of `key`. */
|
|
11105
|
+
params?: Record<string, unknown>;
|
|
11106
|
+
text?: string;
|
|
11107
|
+
}
|
|
11108
|
+
/**
|
|
11109
|
+
* Second line of an alert row: what the alert does, so the list answers "when will I be notified?" without
|
|
11110
|
+
* opening the dialog — « Daily · 09:00 · Mon–Fri ». A suspended alert starts with « Paused ».
|
|
11111
|
+
*
|
|
11112
|
+
* Returns the pieces rather than a sentence: the labels live in the `alerts` translation scope, which loads on
|
|
11113
|
+
* demand, and only the template's `transloco` pipe waits for it. The caller joins the pieces with " · ".
|
|
11114
|
+
*
|
|
11115
|
+
* Tolerant of an alert that lacks `times` or `days`: the piece is left out rather than shown empty.
|
|
11116
|
+
*/
|
|
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[];
|
|
11123
|
+
/**
|
|
11124
|
+
* The user's alerts: one row per alert (name, when it fires, an on/off switch), "Create" in the header.
|
|
11125
|
+
*
|
|
11126
|
+
* The rows are reordered by dragging them or with Alt + ↑ / ↓ on a focused row — the gesture is galactik's
|
|
11127
|
+
* `[sortable]`, this component only saves the order it reports. A deletion is applied at once on screen and sent to
|
|
11128
|
+
* the server after `UNDO_DELAY`, unless the user undoes it; it is also sent when the component goes away (the
|
|
11129
|
+
* popover closes).
|
|
11130
|
+
*/
|
|
11098
11131
|
export declare class AlertsComponent {
|
|
11099
11132
|
floating: PopoverDirective | null;
|
|
11100
11133
|
private readonly userSettingsStore;
|
|
11101
11134
|
private readonly injector;
|
|
11102
|
-
|
|
11103
|
-
|
|
11104
|
-
tmpAlerts: Alert[];
|
|
11135
|
+
private readonly transloco;
|
|
11136
|
+
private readonly lang;
|
|
11105
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>;
|
|
11155
|
+
protected readonly alerts: import("@angular/core").Signal<Alert[]>;
|
|
11156
|
+
/**
|
|
11157
|
+
* The order on screen. A copy of the store's list (the store edits its own array in place), and ahead of it
|
|
11158
|
+
* while a new order is being saved: a drop shows its result at once instead of after the round trip.
|
|
11159
|
+
*/
|
|
11160
|
+
private readonly order;
|
|
11161
|
+
/** Alerts removed from the screen: awaiting the end of the undo delay, or being deleted on the server. */
|
|
11162
|
+
private readonly hidden;
|
|
11163
|
+
/** The alert whose deletion can still be undone. */
|
|
11164
|
+
protected readonly pendingDeletion: import("@angular/core").WritableSignal<Alert | undefined>;
|
|
11165
|
+
private undoTimer;
|
|
11166
|
+
/** The alerts to show, in order — what `[sortable]` reorders. */
|
|
11167
|
+
protected readonly visible: import("@angular/core").Signal<Alert[]>;
|
|
11168
|
+
/** The second line of each row. */
|
|
11169
|
+
private readonly summaries;
|
|
11170
|
+
protected readonly summaryOf: (alert: Alert) => AlertSummaryPart[];
|
|
11171
|
+
/** What a screen reader hears after a keyboard move. */
|
|
11172
|
+
protected readonly announceMove: (alert: Alert, position: number, total: number) => string;
|
|
11106
11173
|
constructor();
|
|
11107
|
-
|
|
11174
|
+
/** A click on the switch or the delete button is theirs, not a request to edit the alert. */
|
|
11175
|
+
protected onRowClick(event: Event, alert: Alert): void;
|
|
11176
|
+
/** Enter edits the row only when the row itself has the focus — not when it comes from the switch or the button. */
|
|
11177
|
+
protected onRowEnter(event: Event, alert: Alert): void;
|
|
11178
|
+
private edit;
|
|
11108
11179
|
createAlert(): void;
|
|
11109
|
-
|
|
11110
|
-
|
|
11111
|
-
|
|
11180
|
+
/**
|
|
11181
|
+
* What each switch shows while its change is being saved. The switch flips itself on a click and the store
|
|
11182
|
+
* only changes once the save has succeeded: dropping the entry on a failure changes the bound value back,
|
|
11183
|
+
* which is what puts the switch back where it was.
|
|
11184
|
+
*/
|
|
11185
|
+
private readonly pendingActive;
|
|
11186
|
+
protected isActive(alert: Alert): boolean;
|
|
11187
|
+
protected toggle(alert: Alert, active: boolean): Promise<void>;
|
|
11188
|
+
protected deleteAlert(alert: Alert): void;
|
|
11189
|
+
protected undoDeletion(): void;
|
|
11190
|
+
/** Sends the pending deletion. The row stays hidden until the store no longer holds the alert. */
|
|
11191
|
+
private commitDeletion;
|
|
11192
|
+
private unhide;
|
|
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. */
|
|
11194
|
+
protected saveOrder(shown: Alert[]): Promise<void>;
|
|
11112
11195
|
static ɵfac: i0.ɵɵFactoryDeclaration<AlertsComponent, never>;
|
|
11113
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<AlertsComponent, "Alerts", 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>;
|
|
11114
11206
|
}
|
|
11115
11207
|
/**
|
|
11116
11208
|
* The seven weekdays, in display order, each paired with its bit in {@link Alert.Days}.
|
|
@@ -11165,22 +11257,47 @@ export interface AlertFormModel {
|
|
|
11165
11257
|
export declare function weekdaysFromFlags(mask: Alert.Days): Record<WeekdayKey, boolean>;
|
|
11166
11258
|
/** Folds the seven booleans of the form model back into an {@link Alert.Days} bitfield. */
|
|
11167
11259
|
export declare function flagsFromWeekdays(days: Record<WeekdayKey, boolean>): Alert.Days;
|
|
11168
|
-
|
|
11169
|
-
|
|
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 {
|
|
11170
11277
|
private readonly queryService;
|
|
11171
11278
|
private readonly queryParamsStore;
|
|
11172
11279
|
private readonly userSettingsStore;
|
|
11173
11280
|
private readonly transloco;
|
|
11174
|
-
readonly
|
|
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;
|
|
11175
11290
|
protected readonly fieldClass = "flex flex-col gap-(--spacing-2xs)";
|
|
11176
11291
|
protected readonly labelClass = "text-(length:--size-base) font-(--weight-semibold) text-(--font-primary-base)";
|
|
11177
11292
|
protected readonly errorClass = "text-(length:--size-base) text-(--font-error-base)";
|
|
11178
|
-
frequencies: Alert.Frequency[];
|
|
11179
|
-
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;
|
|
11180
11297
|
/** Libellé traduit d'une fréquence — utilisé par le typeahead du `SelectMenu`. */
|
|
11181
|
-
readonly frequencyLabel: (value: Alert.Frequency) => string;
|
|
11182
|
-
/** The seven weekdays, exposed to the template for the
|
|
11183
|
-
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 [{
|
|
11184
11301
|
readonly key: "monday";
|
|
11185
11302
|
readonly flag: Alert.Days.Monday;
|
|
11186
11303
|
}, {
|
|
@@ -11202,26 +11319,33 @@ export declare class AlertDialog {
|
|
|
11202
11319
|
readonly key: "sunday";
|
|
11203
11320
|
readonly flag: Alert.Days.Sunday;
|
|
11204
11321
|
}];
|
|
11205
|
-
/**
|
|
11206
|
-
|
|
11207
|
-
|
|
11208
|
-
|
|
11209
|
-
|
|
11210
|
-
|
|
11211
|
-
|
|
11212
|
-
|
|
11213
|
-
|
|
11214
|
-
|
|
11215
|
-
|
|
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. */
|
|
11334
|
+
protected readonly saveError: import("@angular/core").WritableSignal<{
|
|
11335
|
+
detail?: string;
|
|
11336
|
+
} | undefined>;
|
|
11337
|
+
/** Form model: the stored alert's values, or the defaults of a new one. Follows the alert it edits. */
|
|
11216
11338
|
readonly alertModel: import("@angular/core").WritableSignal<AlertFormModel>;
|
|
11217
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>;
|
|
11218
11342
|
/**
|
|
11219
11343
|
* The weekday group shows its error like any other field: once touched — which, for a group the
|
|
11220
11344
|
* checkboxes cannot blur, means once the form has been submitted.
|
|
11221
11345
|
*/
|
|
11222
11346
|
protected readonly showDaysError: import("@angular/core").Signal<boolean>;
|
|
11223
|
-
|
|
11224
|
-
|
|
11347
|
+
/** Checks exactly the days of `mask` — the "Weekdays" and "Every day" shortcuts. */
|
|
11348
|
+
protected setDays(mask: Alert.Days): void;
|
|
11225
11349
|
/**
|
|
11226
11350
|
* The submission itself, only ever reached with a valid form: `submit()` marks every field as
|
|
11227
11351
|
* touched — revealing the messages — and runs the action only when the form is valid.
|
|
@@ -11233,8 +11357,35 @@ export declare class AlertDialog {
|
|
|
11233
11357
|
protected showError<T>(field: FieldTree<T>): boolean;
|
|
11234
11358
|
/** Maps the first validation error to its translation key (`alerts.errors.noDaySelected`, …). */
|
|
11235
11359
|
protected errorKey<T>(field: FieldTree<T>): string;
|
|
11236
|
-
updateQuery(): void;
|
|
11237
|
-
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();
|
|
11238
11389
|
static ɵfac: i0.ɵɵFactoryDeclaration<AlertDialog, never>;
|
|
11239
11390
|
static ɵcmp: i0.ɵɵComponentDeclaration<AlertDialog, "alert-dialog, alertdialog, AlertDialog", never, {}, {}, never, never, true, never>;
|
|
11240
11391
|
}
|
|
@@ -11662,8 +11813,8 @@ export declare class SignedOutComponent {
|
|
|
11662
11813
|
static ɵcmp: i0.ɵɵComponentDeclaration<SignedOutComponent, "signed-out, SignedOut, signedout", never, {}, {}, never, never, true, never>;
|
|
11663
11814
|
}
|
|
11664
11815
|
export declare class BookmarkButtonComponent {
|
|
11665
|
-
variant: import("@angular/core").InputSignal<"
|
|
11666
|
-
size: import("@angular/core").InputSignal<"small" | "
|
|
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>;
|
|
11667
11818
|
/**
|
|
11668
11819
|
* Tab index applied to the inner button.
|
|
11669
11820
|
*
|
|
@@ -12754,7 +12905,7 @@ export declare class SearchFeedbackComponent {
|
|
|
12754
12905
|
onClose: import("@angular/core").OutputEmitterRef<void>;
|
|
12755
12906
|
private readonly injector;
|
|
12756
12907
|
pages: import("@angular/core").InputSignal<any>;
|
|
12757
|
-
variant: import("@angular/core").InputSignal<"
|
|
12908
|
+
variant: import("@angular/core").InputSignal<"none" | "primary" | "secondary" | "light-accent" | "accent" | "tertiary" | null | undefined>;
|
|
12758
12909
|
readonly auditService: AuditService;
|
|
12759
12910
|
protected readonly queryParamsStore: {
|
|
12760
12911
|
name?: import("@angular/core").Signal<string | undefined> | undefined;
|
|
@@ -13087,7 +13238,7 @@ export declare class AggregationDateComponent {
|
|
|
13087
13238
|
*
|
|
13088
13239
|
* @default 'selection'
|
|
13089
13240
|
*/
|
|
13090
|
-
emitOn: import("@angular/core").InputSignal<"
|
|
13241
|
+
emitOn: import("@angular/core").InputSignal<"apply" | "selection">;
|
|
13091
13242
|
readonly title: import("@angular/core").InputSignal<AggregationTitle>;
|
|
13092
13243
|
readonly displayEmptyDistributionIntervals: import("@angular/core").InputSignal<boolean>;
|
|
13093
13244
|
onSelect: import("@angular/core").OutputEmitterRef<AggregationItem[]>;
|
|
@@ -15547,7 +15698,7 @@ export declare class AggregationComponent {
|
|
|
15547
15698
|
*
|
|
15548
15699
|
* @default 'selection'
|
|
15549
15700
|
*/
|
|
15550
|
-
emitOn: import("@angular/core").InputSignal<"
|
|
15701
|
+
emitOn: import("@angular/core").InputSignal<"apply" | "selection">;
|
|
15551
15702
|
/**
|
|
15552
15703
|
* Which sub-component renders the aggregation.
|
|
15553
15704
|
*
|
|
@@ -15560,7 +15711,7 @@ export declare class AggregationComponent {
|
|
|
15560
15711
|
*
|
|
15561
15712
|
* @default "auto"
|
|
15562
15713
|
*/
|
|
15563
|
-
type: import("@angular/core").InputSignal<"
|
|
15714
|
+
type: import("@angular/core").InputSignal<"date" | "list" | "tree" | "auto">;
|
|
15564
15715
|
/**
|
|
15565
15716
|
* Whether the host removes itself from the layout (Tailwind's `hidden`, i.e.
|
|
15566
15717
|
* `display: none`) when it resolves to zero items. When `false` (default), the
|
|
@@ -15612,7 +15763,7 @@ export declare class AggregationComponent {
|
|
|
15612
15763
|
* The sub-component to render: the explicit `type` input, or the current
|
|
15613
15764
|
* date/tree/list heuristic when `type` is `"auto"`.
|
|
15614
15765
|
*/
|
|
15615
|
-
protected resolvedType: import("@angular/core").Signal<"
|
|
15766
|
+
protected resolvedType: import("@angular/core").Signal<"date" | "list" | "tree">;
|
|
15616
15767
|
/** Whether a filter is currently applied on this aggregation. */
|
|
15617
15768
|
private readonly hasFilters;
|
|
15618
15769
|
/**
|
|
@@ -15985,7 +16136,7 @@ export declare class AppliedFiltersComponent {
|
|
|
15985
16136
|
/** Chip colour scheme, passed to galactik's `tag`. */
|
|
15986
16137
|
readonly scheme: import("@angular/core").InputSignal<"error" | "sage" | "success" | "almond" | "pink" | "grey" | "yellow" | "cherry" | "indigo" | "cyan" | "warning" | "info" | null | undefined>;
|
|
15987
16138
|
/** Chip size, passed to galactik's `tag`. */
|
|
15988
|
-
readonly size: import("@angular/core").InputSignal<"small" | "
|
|
16139
|
+
readonly size: import("@angular/core").InputSignal<"small" | "sm" | "md" | "xs" | "xsmall" | "medium" | null | undefined>;
|
|
15989
16140
|
/** Extra classes for each chip, merged by galactik's `tag`. */
|
|
15990
16141
|
readonly chipClass: import("@angular/core").InputSignal<string>;
|
|
15991
16142
|
/** A chip was removed. */
|
|
@@ -16180,7 +16331,7 @@ export declare class FilterButtonComponent {
|
|
|
16180
16331
|
* silently moved to a hidden one.
|
|
16181
16332
|
*/
|
|
16182
16333
|
overflowed: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
16183
|
-
protected variant: import("@angular/core").WritableSignal<"
|
|
16334
|
+
protected variant: import("@angular/core").WritableSignal<"none" | "primary" | "secondary" | "light-accent" | "accent" | "tertiary" | null | undefined>;
|
|
16184
16335
|
protected filter: import("@angular/core").WritableSignal<CFilterEx>;
|
|
16185
16336
|
/** Unique id wiring the trigger's `popovertarget` to the `<div popover>` `id`. */
|
|
16186
16337
|
protected readonly popoverId: string;
|
|
@@ -18623,7 +18774,7 @@ export declare class RecentSearchesComponent {
|
|
|
18623
18774
|
}>;
|
|
18624
18775
|
protected readonly transloco: TranslocoService;
|
|
18625
18776
|
private readonly router;
|
|
18626
|
-
protected
|
|
18777
|
+
protected subtextOf: (search: SearchItem) => string | undefined;
|
|
18627
18778
|
protected urlOf: (search: SearchItem) => string;
|
|
18628
18779
|
protected labelOf: (search: SearchItem) => string;
|
|
18629
18780
|
protected readonly range: import("@angular/core").WritableSignal<number>;
|
|
@@ -18820,7 +18971,7 @@ export declare class SavedSearchesComponent {
|
|
|
18820
18971
|
}>;
|
|
18821
18972
|
protected readonly transloco: TranslocoService;
|
|
18822
18973
|
private readonly router;
|
|
18823
|
-
protected
|
|
18974
|
+
protected subtextOf: (search: SearchItem) => string | undefined;
|
|
18824
18975
|
protected urlOf: (search: SearchItem) => string;
|
|
18825
18976
|
protected labelOf: (search: SearchItem) => string;
|
|
18826
18977
|
protected readonly range: import("@angular/core").WritableSignal<number>;
|
|
@@ -18840,7 +18991,7 @@ export declare class SavedSearchesComponent {
|
|
|
18840
18991
|
};
|
|
18841
18992
|
}, {}, never, never, true, never>;
|
|
18842
18993
|
}
|
|
18843
|
-
export type SettingsPanelId = "account" | "appearance" | "shortcuts";
|
|
18994
|
+
export type SettingsPanelId = "account" | "appearance" | "alerts" | "shortcuts";
|
|
18844
18995
|
/** Payload of `Settings.call()`: the panel to show first (default `account`). */
|
|
18845
18996
|
export interface SettingsDialogProps {
|
|
18846
18997
|
panel?: SettingsPanelId;
|
|
@@ -19003,6 +19154,27 @@ export declare class SettingsAppearancePanelComponent {
|
|
|
19003
19154
|
static ɵfac: i0.ɵɵFactoryDeclaration<SettingsAppearancePanelComponent, never>;
|
|
19004
19155
|
static ɵcmp: i0.ɵɵComponentDeclaration<SettingsAppearancePanelComponent, "settings-appearance-panel", never, {}, {}, never, never, true, never>;
|
|
19005
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
|
+
}
|
|
19006
19178
|
/** The keyboard shortcuts currently registered, as documented by the registry itself. */
|
|
19007
19179
|
export declare class SettingsShortcutsPanelComponent {
|
|
19008
19180
|
static ɵfac: i0.ɵɵFactoryDeclaration<SettingsShortcutsPanelComponent, never>;
|