@sinequa/atomic-angular 2.0.0 → 2.1.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/README.md +249 -249
- package/document-workspaces/i18n/de.json +11 -1
- package/document-workspaces/i18n/en.json +11 -1
- package/document-workspaces/i18n/fr.json +11 -1
- package/document-workspaces/i18n/ja.json +11 -1
- package/fesm2022/sinequa-atomic-angular-document-workspaces.mjs +1218 -76
- package/fesm2022/sinequa-atomic-angular-document-workspaces.mjs.map +1 -1
- package/fesm2022/sinequa-atomic-angular-workspace-elements.mjs +4 -1
- package/fesm2022/sinequa-atomic-angular-workspace-elements.mjs.map +1 -1
- package/fesm2022/sinequa-atomic-angular.mjs +170 -1
- package/fesm2022/sinequa-atomic-angular.mjs.map +1 -1
- package/package.json +6 -2
- package/providers/session-expiry/i18n/de.json +7 -0
- package/providers/session-expiry/i18n/en.json +7 -0
- package/providers/session-expiry/i18n/fr.json +7 -0
- package/types/sinequa-atomic-angular-document-workspaces.d.ts +498 -24
- package/types/sinequa-atomic-angular.d.ts +90 -36
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sinequa/atomic-angular",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"@angular/core": "^22.0.0",
|
|
36
36
|
"@angular/aria": "^22.2.0",
|
|
37
37
|
"@sinequa/galactik": "^2.0.0",
|
|
38
|
-
"@sinequa/atomic": ">=2.
|
|
38
|
+
"@sinequa/atomic": ">=2.8.0",
|
|
39
39
|
"vanilla-calendar-pro": "^3.4.0",
|
|
40
40
|
"chart.js": "^4.4.0",
|
|
41
41
|
"chartjs-chart-matrix": "^3.0.0",
|
|
@@ -147,6 +147,10 @@
|
|
|
147
147
|
{
|
|
148
148
|
"scope": "document-workspaces",
|
|
149
149
|
"path": "document-workspaces/i18n"
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
"scope": "session-expiry",
|
|
153
|
+
"path": "providers/session-expiry/i18n"
|
|
150
154
|
}
|
|
151
155
|
],
|
|
152
156
|
"sideEffects": false,
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"expiringTitle": "Ihre Sitzung läuft bald ab",
|
|
3
|
+
"expiringDescription": "Sie läuft in etwa {{minutes}} Min. ab. Speichern Sie Ihre Arbeit oder melden Sie sich erneut an.",
|
|
4
|
+
"expiredTitle": "Ihre Sitzung ist abgelaufen",
|
|
5
|
+
"expiredDescription": "Melden Sie sich erneut an, um fortzufahren.",
|
|
6
|
+
"reload": "Erneut anmelden"
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"expiringTitle": "Your session is about to expire",
|
|
3
|
+
"expiringDescription": "It expires in about {{minutes}} min. Save your work or sign in again.",
|
|
4
|
+
"expiredTitle": "Your session has expired",
|
|
5
|
+
"expiredDescription": "Sign in again to continue.",
|
|
6
|
+
"reload": "Sign in again"
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"expiringTitle": "Votre session va bientôt expirer",
|
|
3
|
+
"expiringDescription": "Elle expire dans environ {{minutes}} min. Enregistrez votre travail ou reconnectez-vous.",
|
|
4
|
+
"expiredTitle": "Votre session a expiré",
|
|
5
|
+
"expiredDescription": "Reconnectez-vous pour continuer.",
|
|
6
|
+
"reload": "Se reconnecter"
|
|
7
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { SecurityPrincipal, UpdateContainerInput, UploadJobStatus } from "@sinequa/atomic";
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
|
-
import { InjectionToken, PipeTransform, Signal } from "@angular/core";
|
|
3
|
+
import { AfterContentInit, InjectionToken, PipeTransform, Signal } from "@angular/core";
|
|
4
4
|
import { DetailedError } from "tus-js-client";
|
|
5
5
|
import { DialogResult } from "@sinequa/galactik";
|
|
6
6
|
import { SafeResourceUrl } from "@angular/platform-browser";
|
|
@@ -963,6 +963,12 @@ interface WorkspaceTabCounts {
|
|
|
963
963
|
editor: number;
|
|
964
964
|
reader: number;
|
|
965
965
|
}
|
|
966
|
+
/** What the search box looks at: the name only, or the name and the description. */
|
|
967
|
+
type WorkspaceSearchFields = "name" | "name+description";
|
|
968
|
+
interface WorkspaceFilterOptions {
|
|
969
|
+
/** What the query is matched against. Read reactively; the name only when absent. */
|
|
970
|
+
fields?: () => WorkspaceSearchFields;
|
|
971
|
+
}
|
|
966
972
|
/**
|
|
967
973
|
* The workspace list's tab and search box, and the list they produce.
|
|
968
974
|
*
|
|
@@ -971,7 +977,7 @@ interface WorkspaceTabCounts {
|
|
|
971
977
|
*
|
|
972
978
|
* Must be called from an injection context (a component field initializer).
|
|
973
979
|
*/
|
|
974
|
-
export declare function injectWorkspaceFilter(workspaces: Signal<readonly Workspace[]
|
|
980
|
+
export declare function injectWorkspaceFilter(workspaces: Signal<readonly Workspace[]>, options?: WorkspaceFilterOptions): {
|
|
975
981
|
tab: import("@angular/core").WritableSignal<WorkspaceTab>;
|
|
976
982
|
query: import("@angular/core").WritableSignal<string>;
|
|
977
983
|
counts: Signal<WorkspaceTabCounts>;
|
|
@@ -1545,7 +1551,7 @@ export declare class WorkspaceList {
|
|
|
1545
1551
|
labelKey: string;
|
|
1546
1552
|
}[];
|
|
1547
1553
|
protected readonly viewMode: import("@angular/core").WritableSignal<ViewMode$1>;
|
|
1548
|
-
protected readonly status: import("@angular/core").WritableSignal<"
|
|
1554
|
+
protected readonly status: import("@angular/core").WritableSignal<"loading" | "ready" | "error">;
|
|
1549
1555
|
protected readonly loadError: import("@angular/core").WritableSignal<Message | null>;
|
|
1550
1556
|
protected readonly refreshError: import("@angular/core").WritableSignal<string | null>;
|
|
1551
1557
|
protected readonly loadingMore: import("@angular/core").WritableSignal<boolean>;
|
|
@@ -2187,7 +2193,7 @@ export declare class WorkspaceDetail {
|
|
|
2187
2193
|
protected readonly query: import("@angular/core").WritableSignal<string>;
|
|
2188
2194
|
/** The search box, bound to `query`. */
|
|
2189
2195
|
protected readonly searchForm: import("@angular/forms/signals").FieldTree<string, string | number, "writable">;
|
|
2190
|
-
protected readonly status: import("@angular/core").WritableSignal<"
|
|
2196
|
+
protected readonly status: import("@angular/core").WritableSignal<"loading" | "ready" | "error">;
|
|
2191
2197
|
protected readonly loadError: import("@angular/core").WritableSignal<Message | null>;
|
|
2192
2198
|
protected readonly refreshError: import("@angular/core").WritableSignal<string | null>;
|
|
2193
2199
|
protected readonly refreshing: import("@angular/core").WritableSignal<boolean>;
|
|
@@ -2267,37 +2273,505 @@ interface MentionSelection {
|
|
|
2267
2273
|
ids: string[];
|
|
2268
2274
|
count: number;
|
|
2269
2275
|
}
|
|
2276
|
+
/** One displayed workspace, with whether it is ticked. */
|
|
2277
|
+
interface MentionItem {
|
|
2278
|
+
id: string;
|
|
2279
|
+
name: string;
|
|
2280
|
+
description: string;
|
|
2281
|
+
color: WorkspaceColor;
|
|
2282
|
+
documentCount: number;
|
|
2283
|
+
/** The current user's role on it: a host can mark the read-only rows (`reader`) without hiding them. */
|
|
2284
|
+
currentUserRole: WorkspaceRole;
|
|
2285
|
+
selected: boolean;
|
|
2286
|
+
}
|
|
2287
|
+
/** The categories, in order: the translation key of each one's label. */
|
|
2288
|
+
export declare const MENTION_TABS: readonly {
|
|
2289
|
+
id: WorkspaceTab;
|
|
2290
|
+
labelKey: string;
|
|
2291
|
+
}[];
|
|
2292
|
+
interface WorkspaceMentionOptions {
|
|
2293
|
+
/** What the search matches. Read reactively; the name only when absent. */
|
|
2294
|
+
searchFields?: () => WorkspaceSearchFields;
|
|
2295
|
+
/**
|
|
2296
|
+
* The ticked ids, when the host owns the selection (controlled mode): the ticks are then
|
|
2297
|
+
* the host's and the store's are left alone. `undefined` — the default — keeps them in the store.
|
|
2298
|
+
*/
|
|
2299
|
+
selectedIds?: () => readonly string[] | undefined;
|
|
2300
|
+
/** An extra condition a workspace must meet to be offered, on top of the tab and the search. */
|
|
2301
|
+
predicate?: () => ((workspace: Workspace) => boolean) | undefined;
|
|
2302
|
+
/** The ticks changed because of this menu. */
|
|
2303
|
+
onSelectionChange?: (selection: MentionSelection) => void;
|
|
2304
|
+
/** A workspace was created from here, and ticked. */
|
|
2305
|
+
onCreated?: (workspace: Workspace) => void;
|
|
2306
|
+
}
|
|
2307
|
+
/**
|
|
2308
|
+
* The state behind a "mention a workspace" menu — search, category, ticks, "select all"
|
|
2309
|
+
* and "new workspace" — with no markup, so any layout can be drawn over it.
|
|
2310
|
+
*
|
|
2311
|
+
* The ticks are the store's unless the host passes `selectedIds`: however many menus
|
|
2312
|
+
* are on screen they then show the same thing. "Select all" works on what is displayed,
|
|
2313
|
+
* so on the current category and search. Every workspace is offered, the ones shared
|
|
2314
|
+
* read-only too — mentioning one only reads it.
|
|
2315
|
+
*
|
|
2316
|
+
* Must be called from an injection context (a component field initializer).
|
|
2317
|
+
*/
|
|
2318
|
+
export declare function injectWorkspaceMention(options?: WorkspaceMentionOptions): {
|
|
2319
|
+
/** The search text; writable, so a text box can bind to it. */
|
|
2320
|
+
query: import("@angular/core").WritableSignal<string>;
|
|
2321
|
+
clearQuery: () => void;
|
|
2322
|
+
/** The category: all, the ones you own (`editor`), the ones shared with you (`reader`). */
|
|
2323
|
+
tab: import("@angular/core").WritableSignal<WorkspaceTab>;
|
|
2324
|
+
tabs: readonly {
|
|
2325
|
+
id: WorkspaceTab;
|
|
2326
|
+
labelKey: string;
|
|
2327
|
+
}[];
|
|
2328
|
+
/** The workspaces in each category — the whole list, not what the search left. */
|
|
2329
|
+
counts: import("@angular/core").Signal<import("@sinequa/atomic-angular/document-workspaces").WorkspaceTabCounts>;
|
|
2330
|
+
/** Whether the first page is loading, ready or failed. */
|
|
2331
|
+
status: import("@angular/core").Signal<"loading" | "ready" | "error">;
|
|
2332
|
+
/** More workspaces than the loaded ones exist on the server: `loadMore()` fetches the next page. */
|
|
2333
|
+
hasMore: import("@angular/core").Signal<boolean>;
|
|
2334
|
+
/** The loading cap is reached: some workspaces will never be offered, search included. */
|
|
2335
|
+
truncated: import("@angular/core").Signal<boolean>;
|
|
2336
|
+
/** A page is being fetched by `loadMore()`. */
|
|
2337
|
+
loadingMore: import("@angular/core").Signal<boolean>;
|
|
2338
|
+
/** Loads the next page; the search and the categories then run over it too. */
|
|
2339
|
+
loadMore(): Promise<void>;
|
|
2340
|
+
/** What is offered: the category, the search and the predicate applied. */
|
|
2341
|
+
items: import("@angular/core").Signal<MentionItem[]>;
|
|
2342
|
+
/** How many are ticked, displayed or not. */
|
|
2343
|
+
count: import("@angular/core").Signal<number>;
|
|
2344
|
+
/** The ticked ids, displayed or not. */
|
|
2345
|
+
ids: import("@angular/core").Signal<readonly string[]>;
|
|
2346
|
+
allSelected: import("@angular/core").Signal<boolean>;
|
|
2347
|
+
partiallySelected: import("@angular/core").Signal<boolean>;
|
|
2348
|
+
isSelected: (id: string) => boolean;
|
|
2349
|
+
toggle: (id: string, checked: boolean) => void;
|
|
2350
|
+
/** Ticks every displayed workspace, or unticks them all when they already are. */
|
|
2351
|
+
toggleAll: () => void;
|
|
2352
|
+
/** Ticks a workspace from outside — a host that has its own way of choosing one. */
|
|
2353
|
+
select: (id: string) => void;
|
|
2354
|
+
/**
|
|
2355
|
+
* Opens the "new workspace" dialog; the workspace it makes is ticked and shown (the category
|
|
2356
|
+
* and the search are reset so it is not hidden). Resolves with it, or `null` when dismissed.
|
|
2357
|
+
*
|
|
2358
|
+
* The dialog is deliberately not tied to the caller's `DestroyRef`: a menu that closes on
|
|
2359
|
+
* focus-out (a hover-mounted panel) would end it mid-save.
|
|
2360
|
+
*/
|
|
2361
|
+
create(): Promise<Workspace | null>;
|
|
2362
|
+
};
|
|
2363
|
+
type WorkspaceMentionApi = ReturnType<typeof injectWorkspaceMention>;
|
|
2364
|
+
/** Provided by `<workspace-mention>` to the pieces placed inside it. */
|
|
2365
|
+
export declare const WORKSPACE_MENTION: InjectionToken<{
|
|
2366
|
+
/** The search text; writable, so a text box can bind to it. */
|
|
2367
|
+
query: import("@angular/core").WritableSignal<string>;
|
|
2368
|
+
clearQuery: () => void;
|
|
2369
|
+
/** The category: all, the ones you own (`editor`), the ones shared with you (`reader`). */
|
|
2370
|
+
tab: import("@angular/core").WritableSignal<WorkspaceTab>;
|
|
2371
|
+
tabs: readonly {
|
|
2372
|
+
id: WorkspaceTab;
|
|
2373
|
+
labelKey: string;
|
|
2374
|
+
}[];
|
|
2375
|
+
/** The workspaces in each category — the whole list, not what the search left. */
|
|
2376
|
+
counts: import("@angular/core").Signal<import("@sinequa/atomic-angular/document-workspaces").WorkspaceTabCounts>;
|
|
2377
|
+
/** Whether the first page is loading, ready or failed. */
|
|
2378
|
+
status: import("@angular/core").Signal<"loading" | "ready" | "error">;
|
|
2379
|
+
/** More workspaces than the loaded ones exist on the server: `loadMore()` fetches the next page. */
|
|
2380
|
+
hasMore: import("@angular/core").Signal<boolean>;
|
|
2381
|
+
/** The loading cap is reached: some workspaces will never be offered, search included. */
|
|
2382
|
+
truncated: import("@angular/core").Signal<boolean>;
|
|
2383
|
+
/** A page is being fetched by `loadMore()`. */
|
|
2384
|
+
loadingMore: import("@angular/core").Signal<boolean>;
|
|
2385
|
+
/** Loads the next page; the search and the categories then run over it too. */
|
|
2386
|
+
loadMore(): Promise<void>;
|
|
2387
|
+
/** What is offered: the category, the search and the predicate applied. */
|
|
2388
|
+
items: import("@angular/core").Signal<MentionItem[]>;
|
|
2389
|
+
/** How many are ticked, displayed or not. */
|
|
2390
|
+
count: import("@angular/core").Signal<number>;
|
|
2391
|
+
/** The ticked ids, displayed or not. */
|
|
2392
|
+
ids: import("@angular/core").Signal<readonly string[]>;
|
|
2393
|
+
allSelected: import("@angular/core").Signal<boolean>;
|
|
2394
|
+
partiallySelected: import("@angular/core").Signal<boolean>;
|
|
2395
|
+
isSelected: (id: string) => boolean;
|
|
2396
|
+
toggle: (id: string, checked: boolean) => void;
|
|
2397
|
+
/** Ticks every displayed workspace, or unticks them all when they already are. */
|
|
2398
|
+
toggleAll: () => void;
|
|
2399
|
+
/** Ticks a workspace from outside — a host that has its own way of choosing one. */
|
|
2400
|
+
select: (id: string) => void;
|
|
2401
|
+
/**
|
|
2402
|
+
* Opens the "new workspace" dialog; the workspace it makes is ticked and shown (the category
|
|
2403
|
+
* and the search are reset so it is not hidden). Resolves with it, or `null` when dismissed.
|
|
2404
|
+
*
|
|
2405
|
+
* The dialog is deliberately not tied to the caller's `DestroyRef`: a menu that closes on
|
|
2406
|
+
* focus-out (a hover-mounted panel) would end it mid-save.
|
|
2407
|
+
*/
|
|
2408
|
+
create(): Promise<Workspace | null>;
|
|
2409
|
+
}>;
|
|
2410
|
+
/** The enclosing `<workspace-mention>`, for a piece that cannot work outside one. */
|
|
2411
|
+
export declare function injectWorkspaceMentionScope(): WorkspaceMentionApi;
|
|
2270
2412
|
/**
|
|
2271
|
-
* The workspaces as rows to tick, for the "+" / "@" menu of a host chat
|
|
2413
|
+
* The workspaces as rows to tick, for the "+" / "@" menu of a host chat — the ready-made
|
|
2414
|
+
* `<workspace-mention>`, with the search box, "select all" and "new workspace" switched on
|
|
2415
|
+
* by `searchable`, `selectAll` and `allowCreate` (all off by default).
|
|
2416
|
+
*
|
|
2417
|
+
* The ticks are the store's, not this component's, unless `selectedIds` is passed: however
|
|
2418
|
+
* many of these are on screen (one per open menu), and wherever else the selection is read,
|
|
2419
|
+
* they then show the same thing. Every workspace is listed, the ones shared read-only too —
|
|
2420
|
+
* mentioning one only reads it.
|
|
2272
2421
|
*
|
|
2273
|
-
*
|
|
2274
|
-
* screen (one per open menu), and wherever else the selection is read, they show the
|
|
2275
|
-
* same thing. Every workspace is listed, the ones shared read-only too — mentioning
|
|
2276
|
-
* one only reads it.
|
|
2422
|
+
* To lay the pieces out yourself, use `<workspace-mention>` with its own content instead.
|
|
2277
2423
|
*/
|
|
2278
2424
|
export declare class WorkspaceMentionList {
|
|
2425
|
+
/** Shows a search box. */
|
|
2426
|
+
readonly searchable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
2427
|
+
/** Shows "select all". */
|
|
2428
|
+
readonly selectAll: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
2429
|
+
/** Shows "new workspace". */
|
|
2430
|
+
readonly allowCreate: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
2431
|
+
/** What the search matches: the name only (default), or the name and the description. */
|
|
2432
|
+
readonly searchFields: import("@angular/core").InputSignal<WorkspaceSearchFields>;
|
|
2433
|
+
/** The ticked ids when the host owns the selection; absent, they live in the store. */
|
|
2434
|
+
readonly selectedIds: import("@angular/core").InputSignal<readonly string[] | undefined>;
|
|
2279
2435
|
/** The ticks changed because of this list. */
|
|
2280
2436
|
readonly selectionChanged: import("@angular/core").OutputEmitterRef<MentionSelection>;
|
|
2281
|
-
|
|
2282
|
-
|
|
2437
|
+
/** A workspace was created from here, and ticked. */
|
|
2438
|
+
readonly workspaceCreated: import("@angular/core").OutputEmitterRef<Workspace>;
|
|
2439
|
+
private readonly mention;
|
|
2283
2440
|
/** The rows, for this list and for a host that draws its own. */
|
|
2284
|
-
readonly items: import("@angular/core").Signal<
|
|
2285
|
-
id: string;
|
|
2286
|
-
name: string;
|
|
2287
|
-
color: import("@sinequa/atomic-angular/document-workspaces").WorkspaceColor;
|
|
2288
|
-
documentCount: number;
|
|
2289
|
-
selected: boolean;
|
|
2290
|
-
}[]>;
|
|
2291
|
-
constructor();
|
|
2441
|
+
readonly items: import("@angular/core").Signal<import("@sinequa/atomic-angular/document-workspaces").MentionItem[]>;
|
|
2292
2442
|
/** Ticks a workspace from outside — a host that has its own way of choosing one. */
|
|
2293
2443
|
select(id: string): void;
|
|
2294
|
-
protected toggle(id: string, checked: boolean): void;
|
|
2295
|
-
private announce;
|
|
2296
2444
|
static ɵfac: i0.ɵɵFactoryDeclaration<WorkspaceMentionList, never>;
|
|
2297
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<WorkspaceMentionList, "workspace-mention-list", never, {
|
|
2445
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<WorkspaceMentionList, "workspace-mention-list", never, {
|
|
2446
|
+
"searchable": {
|
|
2447
|
+
"alias": "searchable";
|
|
2448
|
+
"required": false;
|
|
2449
|
+
"isSignal": true;
|
|
2450
|
+
};
|
|
2451
|
+
"selectAll": {
|
|
2452
|
+
"alias": "selectAll";
|
|
2453
|
+
"required": false;
|
|
2454
|
+
"isSignal": true;
|
|
2455
|
+
};
|
|
2456
|
+
"allowCreate": {
|
|
2457
|
+
"alias": "allowCreate";
|
|
2458
|
+
"required": false;
|
|
2459
|
+
"isSignal": true;
|
|
2460
|
+
};
|
|
2461
|
+
"searchFields": {
|
|
2462
|
+
"alias": "searchFields";
|
|
2463
|
+
"required": false;
|
|
2464
|
+
"isSignal": true;
|
|
2465
|
+
};
|
|
2466
|
+
"selectedIds": {
|
|
2467
|
+
"alias": "selectedIds";
|
|
2468
|
+
"required": false;
|
|
2469
|
+
"isSignal": true;
|
|
2470
|
+
};
|
|
2471
|
+
}, {
|
|
2298
2472
|
"selectionChanged": "selectionChanged";
|
|
2473
|
+
"workspaceCreated": "workspaceCreated";
|
|
2299
2474
|
}, never, never, true, never>;
|
|
2300
2475
|
}
|
|
2476
|
+
/**
|
|
2477
|
+
* Mention workspaces: the state of the menu (search, category, ticks, "select all", "new
|
|
2478
|
+
* workspace") shared with the pieces placed inside it.
|
|
2479
|
+
*
|
|
2480
|
+
* Empty, it is the ready-made menu — the rows, plus the search box, "select all" and "new
|
|
2481
|
+
* workspace" you switch on:
|
|
2482
|
+
*
|
|
2483
|
+
* ```html
|
|
2484
|
+
* <workspace-mention searchable selectAll allowCreate (selectionChanged)="onMention($event)" />
|
|
2485
|
+
* ```
|
|
2486
|
+
*
|
|
2487
|
+
* With content, it only provides the state, and you lay it out with the pieces
|
|
2488
|
+
* (`workspace-mention-search`, `-select-all`, `-new`, `-tabs`) and your own markup over `items()`:
|
|
2489
|
+
*
|
|
2490
|
+
* ```html
|
|
2491
|
+
* <workspace-mention #ws="workspaceMention" searchFields="name+description" [selectedIds]="ids()" (selectionChanged)="ids.set($event.ids)">
|
|
2492
|
+
* <workspace-mention-search />
|
|
2493
|
+
* @for (w of ws.items(); track w.id) { <my-card [workspace]="w" (click)="ws.toggle(w.id, !w.selected)" /> }
|
|
2494
|
+
* </workspace-mention>
|
|
2495
|
+
* ```
|
|
2496
|
+
*
|
|
2497
|
+
* The ticks are the store's, so every menu on screen shows the same ones — unless `selectedIds`
|
|
2498
|
+
* is passed: the ticks are then the host's, and it hears each change from `selectionChanged`.
|
|
2499
|
+
*/
|
|
2500
|
+
export declare class WorkspaceMention implements WorkspaceMentionApi, AfterContentInit {
|
|
2501
|
+
/** What the search matches: the name only (default), or the name and the description. */
|
|
2502
|
+
readonly searchFields: import("@angular/core").InputSignal<WorkspaceSearchFields>;
|
|
2503
|
+
/** The ticked ids when the host owns the selection; absent, they live in the store. */
|
|
2504
|
+
readonly selectedIds: import("@angular/core").InputSignal<readonly string[] | undefined>;
|
|
2505
|
+
/** An extra condition a workspace must meet to be offered, on top of the category and the search. */
|
|
2506
|
+
readonly predicate: import("@angular/core").InputSignal<((workspace: Workspace) => boolean) | undefined>;
|
|
2507
|
+
/** The ready-made menu only: shows the search box. */
|
|
2508
|
+
readonly searchable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
2509
|
+
/** The ready-made menu only: shows "select all". */
|
|
2510
|
+
readonly selectAll: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
2511
|
+
/** The ready-made menu only: shows "new workspace". */
|
|
2512
|
+
readonly allowCreate: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
2513
|
+
/** The ticks changed because of this menu. */
|
|
2514
|
+
readonly selectionChanged: import("@angular/core").OutputEmitterRef<MentionSelection>;
|
|
2515
|
+
/** A workspace was created from here, and ticked. */
|
|
2516
|
+
readonly workspaceCreated: import("@angular/core").OutputEmitterRef<Workspace>;
|
|
2517
|
+
private readonly slot;
|
|
2518
|
+
/** Whether the host put its own content inside: the ready-made menu then stays out. */
|
|
2519
|
+
protected readonly custom: import("@angular/core").WritableSignal<boolean>;
|
|
2520
|
+
private readonly state;
|
|
2521
|
+
readonly query: import("@angular/core").WritableSignal<string>;
|
|
2522
|
+
readonly clearQuery: () => void;
|
|
2523
|
+
readonly tab: import("@angular/core").WritableSignal<import("@sinequa/atomic-angular/document-workspaces").WorkspaceTab>;
|
|
2524
|
+
readonly tabs: readonly {
|
|
2525
|
+
id: import("@sinequa/atomic-angular/document-workspaces").WorkspaceTab;
|
|
2526
|
+
labelKey: string;
|
|
2527
|
+
}[];
|
|
2528
|
+
readonly counts: import("@angular/core").Signal<import("@sinequa/atomic-angular/document-workspaces").WorkspaceTabCounts>;
|
|
2529
|
+
readonly status: import("@angular/core").Signal<"loading" | "ready" | "error">;
|
|
2530
|
+
readonly hasMore: import("@angular/core").Signal<boolean>;
|
|
2531
|
+
readonly truncated: import("@angular/core").Signal<boolean>;
|
|
2532
|
+
readonly loadingMore: import("@angular/core").Signal<boolean>;
|
|
2533
|
+
readonly loadMore: () => Promise<void>;
|
|
2534
|
+
readonly items: import("@angular/core").Signal<import("@sinequa/atomic-angular/document-workspaces").MentionItem[]>;
|
|
2535
|
+
readonly count: import("@angular/core").Signal<number>;
|
|
2536
|
+
readonly ids: import("@angular/core").Signal<readonly string[]>;
|
|
2537
|
+
readonly allSelected: import("@angular/core").Signal<boolean>;
|
|
2538
|
+
readonly partiallySelected: import("@angular/core").Signal<boolean>;
|
|
2539
|
+
readonly isSelected: (id: string) => boolean;
|
|
2540
|
+
readonly toggle: (id: string, checked: boolean) => void;
|
|
2541
|
+
readonly toggleAll: () => void;
|
|
2542
|
+
readonly select: (id: string) => void;
|
|
2543
|
+
readonly create: () => Promise<Workspace | null>;
|
|
2544
|
+
ngAfterContentInit(): void;
|
|
2545
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<WorkspaceMention, never>;
|
|
2546
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<WorkspaceMention, "workspace-mention", ["workspaceMention"], {
|
|
2547
|
+
"searchFields": {
|
|
2548
|
+
"alias": "searchFields";
|
|
2549
|
+
"required": false;
|
|
2550
|
+
"isSignal": true;
|
|
2551
|
+
};
|
|
2552
|
+
"selectedIds": {
|
|
2553
|
+
"alias": "selectedIds";
|
|
2554
|
+
"required": false;
|
|
2555
|
+
"isSignal": true;
|
|
2556
|
+
};
|
|
2557
|
+
"predicate": {
|
|
2558
|
+
"alias": "predicate";
|
|
2559
|
+
"required": false;
|
|
2560
|
+
"isSignal": true;
|
|
2561
|
+
};
|
|
2562
|
+
"searchable": {
|
|
2563
|
+
"alias": "searchable";
|
|
2564
|
+
"required": false;
|
|
2565
|
+
"isSignal": true;
|
|
2566
|
+
};
|
|
2567
|
+
"selectAll": {
|
|
2568
|
+
"alias": "selectAll";
|
|
2569
|
+
"required": false;
|
|
2570
|
+
"isSignal": true;
|
|
2571
|
+
};
|
|
2572
|
+
"allowCreate": {
|
|
2573
|
+
"alias": "allowCreate";
|
|
2574
|
+
"required": false;
|
|
2575
|
+
"isSignal": true;
|
|
2576
|
+
};
|
|
2577
|
+
}, {
|
|
2578
|
+
"selectionChanged": "selectionChanged";
|
|
2579
|
+
"workspaceCreated": "workspaceCreated";
|
|
2580
|
+
}, never, ["*"], true, never>;
|
|
2581
|
+
}
|
|
2582
|
+
/**
|
|
2583
|
+
* The "+ New workspace" button of the enclosing `<workspace-mention>`: it opens the same
|
|
2584
|
+
* dialog as the workspaces page, and the workspace it makes is ticked.
|
|
2585
|
+
*
|
|
2586
|
+
* Its look is the host's: `variant`, `scheme` and `size` are the button's own, and content
|
|
2587
|
+
* placed inside replaces the icon and the label.
|
|
2588
|
+
*
|
|
2589
|
+
* ```html
|
|
2590
|
+
* <workspace-mention-new variant="primary" size="md">Add a workspace</workspace-mention-new>
|
|
2591
|
+
* ```
|
|
2592
|
+
*/
|
|
2593
|
+
export declare class WorkspaceMentionNew implements AfterContentInit {
|
|
2594
|
+
/** The button's variant. */
|
|
2595
|
+
readonly variant: import("@angular/core").InputSignal<"primary" | "secondary" | "none" | "light-accent" | "accent" | "tertiary" | null | undefined>;
|
|
2596
|
+
/** The button's colour scheme. */
|
|
2597
|
+
readonly scheme: import("@angular/core").InputSignal<"default" | "neutral" | null | undefined>;
|
|
2598
|
+
/** The button's size. */
|
|
2599
|
+
readonly size: import("@angular/core").InputSignal<"sm" | "md" | "lg" | "small" | "xs" | "xsmall" | "medium" | "large" | null | undefined>;
|
|
2600
|
+
private readonly mention;
|
|
2601
|
+
private readonly slot;
|
|
2602
|
+
/** Whether the host put its own content inside: the icon and the label then stay out. */
|
|
2603
|
+
protected readonly custom: import("@angular/core").WritableSignal<boolean>;
|
|
2604
|
+
ngAfterContentInit(): void;
|
|
2605
|
+
protected create(): void;
|
|
2606
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<WorkspaceMentionNew, never>;
|
|
2607
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<WorkspaceMentionNew, "workspace-mention-new", never, {
|
|
2608
|
+
"variant": {
|
|
2609
|
+
"alias": "variant";
|
|
2610
|
+
"required": false;
|
|
2611
|
+
"isSignal": true;
|
|
2612
|
+
};
|
|
2613
|
+
"scheme": {
|
|
2614
|
+
"alias": "scheme";
|
|
2615
|
+
"required": false;
|
|
2616
|
+
"isSignal": true;
|
|
2617
|
+
};
|
|
2618
|
+
"size": {
|
|
2619
|
+
"alias": "size";
|
|
2620
|
+
"required": false;
|
|
2621
|
+
"isSignal": true;
|
|
2622
|
+
};
|
|
2623
|
+
}, {}, never, ["*"], true, never>;
|
|
2624
|
+
}
|
|
2625
|
+
/**
|
|
2626
|
+
* The workspaces of the enclosing `<workspace-mention>` as rows to tick: the default
|
|
2627
|
+
* look of the menu. A host that wants another look loops over the scope's `items()` itself.
|
|
2628
|
+
*
|
|
2629
|
+
* It fills the height its host gives it and scrolls inside it; with no fixed height around it,
|
|
2630
|
+
* it stops at 18rem — or at `--workspace-mention-rows-max-height`, which the host can set (`none` lifts it).
|
|
2631
|
+
*/
|
|
2632
|
+
export declare class WorkspaceMentionRows {
|
|
2633
|
+
protected readonly mention: {
|
|
2634
|
+
query: import("@angular/core").WritableSignal<string>;
|
|
2635
|
+
clearQuery: () => void;
|
|
2636
|
+
tab: import("@angular/core").WritableSignal<import("@sinequa/atomic-angular/document-workspaces").WorkspaceTab>;
|
|
2637
|
+
tabs: readonly {
|
|
2638
|
+
id: import("@sinequa/atomic-angular/document-workspaces").WorkspaceTab;
|
|
2639
|
+
labelKey: string;
|
|
2640
|
+
}[];
|
|
2641
|
+
counts: import("@angular/core").Signal<import("@sinequa/atomic-angular/document-workspaces").WorkspaceTabCounts>;
|
|
2642
|
+
status: import("@angular/core").Signal<"loading" | "ready" | "error">;
|
|
2643
|
+
hasMore: import("@angular/core").Signal<boolean>;
|
|
2644
|
+
truncated: import("@angular/core").Signal<boolean>;
|
|
2645
|
+
loadingMore: import("@angular/core").Signal<boolean>;
|
|
2646
|
+
loadMore(): Promise<void>;
|
|
2647
|
+
items: import("@angular/core").Signal<import("@sinequa/atomic-angular/document-workspaces").MentionItem[]>;
|
|
2648
|
+
count: import("@angular/core").Signal<number>;
|
|
2649
|
+
ids: import("@angular/core").Signal<readonly string[]>;
|
|
2650
|
+
allSelected: import("@angular/core").Signal<boolean>;
|
|
2651
|
+
partiallySelected: import("@angular/core").Signal<boolean>;
|
|
2652
|
+
isSelected: (id: string) => boolean;
|
|
2653
|
+
toggle: (id: string, checked: boolean) => void;
|
|
2654
|
+
toggleAll: () => void;
|
|
2655
|
+
select: (id: string) => void;
|
|
2656
|
+
create(): Promise<import("@sinequa/atomic-angular/document-workspaces").Workspace | null>;
|
|
2657
|
+
};
|
|
2658
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<WorkspaceMentionRows, never>;
|
|
2659
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<WorkspaceMentionRows, "workspace-mention-rows", never, {}, {}, never, never, true, never>;
|
|
2660
|
+
}
|
|
2661
|
+
/** The search box of the enclosing `<workspace-mention>`: it narrows what the menu offers. */
|
|
2662
|
+
export declare class WorkspaceMentionSearch {
|
|
2663
|
+
/** The size of the box, as `<SearchInput>` sizes it. */
|
|
2664
|
+
readonly size: import("@angular/core").InputSignal<"sm" | "md" | "lg" | null | undefined>;
|
|
2665
|
+
/** The size of the text, as `<SearchInput>` sizes it; follows `size` when absent. */
|
|
2666
|
+
readonly textSize: import("@angular/core").InputSignal<"sm" | "base" | null | undefined>;
|
|
2667
|
+
/** The hint shown in the empty box; the translated "Search workspace..." when absent. */
|
|
2668
|
+
readonly placeholder: import("@angular/core").InputSignal<string | undefined>;
|
|
2669
|
+
/** The accessible name of the box; the placeholder when absent. */
|
|
2670
|
+
readonly ariaLabel: import("@angular/core").InputSignal<string | undefined>;
|
|
2671
|
+
private readonly mention;
|
|
2672
|
+
/** Bound to the scope's own query signal. */
|
|
2673
|
+
protected readonly searchForm: import("@angular/forms/signals").FieldTree<string, string | number, "writable">;
|
|
2674
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<WorkspaceMentionSearch, never>;
|
|
2675
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<WorkspaceMentionSearch, "workspace-mention-search", never, {
|
|
2676
|
+
"size": {
|
|
2677
|
+
"alias": "size";
|
|
2678
|
+
"required": false;
|
|
2679
|
+
"isSignal": true;
|
|
2680
|
+
};
|
|
2681
|
+
"textSize": {
|
|
2682
|
+
"alias": "textSize";
|
|
2683
|
+
"required": false;
|
|
2684
|
+
"isSignal": true;
|
|
2685
|
+
};
|
|
2686
|
+
"placeholder": {
|
|
2687
|
+
"alias": "placeholder";
|
|
2688
|
+
"required": false;
|
|
2689
|
+
"isSignal": true;
|
|
2690
|
+
};
|
|
2691
|
+
"ariaLabel": {
|
|
2692
|
+
"alias": "aria-label";
|
|
2693
|
+
"required": false;
|
|
2694
|
+
"isSignal": true;
|
|
2695
|
+
};
|
|
2696
|
+
}, {}, never, never, true, never>;
|
|
2697
|
+
}
|
|
2698
|
+
/**
|
|
2699
|
+
* The "select all" checkbox of the enclosing `<workspace-mention>`. It acts on what is
|
|
2700
|
+
* displayed — the current category and search — and shows a mixed state when only some are ticked.
|
|
2701
|
+
* Absent while the list loads and while nothing is displayed: there is nothing to select.
|
|
2702
|
+
*/
|
|
2703
|
+
export declare class WorkspaceMentionSelectAll {
|
|
2704
|
+
protected readonly mention: {
|
|
2705
|
+
query: import("@angular/core").WritableSignal<string>;
|
|
2706
|
+
clearQuery: () => void;
|
|
2707
|
+
tab: import("@angular/core").WritableSignal<import("@sinequa/atomic-angular/document-workspaces").WorkspaceTab>;
|
|
2708
|
+
tabs: readonly {
|
|
2709
|
+
id: import("@sinequa/atomic-angular/document-workspaces").WorkspaceTab;
|
|
2710
|
+
labelKey: string;
|
|
2711
|
+
}[];
|
|
2712
|
+
counts: import("@angular/core").Signal<import("@sinequa/atomic-angular/document-workspaces").WorkspaceTabCounts>;
|
|
2713
|
+
status: import("@angular/core").Signal<"loading" | "ready" | "error">;
|
|
2714
|
+
hasMore: import("@angular/core").Signal<boolean>;
|
|
2715
|
+
truncated: import("@angular/core").Signal<boolean>;
|
|
2716
|
+
loadingMore: import("@angular/core").Signal<boolean>;
|
|
2717
|
+
loadMore(): Promise<void>;
|
|
2718
|
+
items: import("@angular/core").Signal<import("@sinequa/atomic-angular/document-workspaces").MentionItem[]>;
|
|
2719
|
+
count: import("@angular/core").Signal<number>;
|
|
2720
|
+
ids: import("@angular/core").Signal<readonly string[]>;
|
|
2721
|
+
allSelected: import("@angular/core").Signal<boolean>;
|
|
2722
|
+
partiallySelected: import("@angular/core").Signal<boolean>;
|
|
2723
|
+
isSelected: (id: string) => boolean;
|
|
2724
|
+
toggle: (id: string, checked: boolean) => void;
|
|
2725
|
+
toggleAll: () => void;
|
|
2726
|
+
select: (id: string) => void;
|
|
2727
|
+
create(): Promise<import("@sinequa/atomic-angular/document-workspaces").Workspace | null>;
|
|
2728
|
+
};
|
|
2729
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<WorkspaceMentionSelectAll, never>;
|
|
2730
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<WorkspaceMentionSelectAll, "workspace-mention-select-all", never, {}, {}, never, never, true, never>;
|
|
2731
|
+
}
|
|
2732
|
+
/**
|
|
2733
|
+
* The categories of the enclosing `<workspace-mention>` — all, owned, shared — each with the
|
|
2734
|
+
* number of workspaces it holds. A host that lays the categories out differently (a sidebar)
|
|
2735
|
+
* reads `tabs`, `tab` and `counts` from the scope instead.
|
|
2736
|
+
*/
|
|
2737
|
+
export declare class WorkspaceMentionTabs {
|
|
2738
|
+
/** The accessible name of the category list; the translated "Categories" when absent. */
|
|
2739
|
+
readonly ariaLabel: import("@angular/core").InputSignal<string | undefined>;
|
|
2740
|
+
protected readonly mention: {
|
|
2741
|
+
query: import("@angular/core").WritableSignal<string>;
|
|
2742
|
+
clearQuery: () => void;
|
|
2743
|
+
tab: import("@angular/core").WritableSignal<WorkspaceTab>;
|
|
2744
|
+
tabs: readonly {
|
|
2745
|
+
id: WorkspaceTab;
|
|
2746
|
+
labelKey: string;
|
|
2747
|
+
}[];
|
|
2748
|
+
counts: import("@angular/core").Signal<import("@sinequa/atomic-angular/document-workspaces").WorkspaceTabCounts>;
|
|
2749
|
+
status: import("@angular/core").Signal<"loading" | "ready" | "error">;
|
|
2750
|
+
hasMore: import("@angular/core").Signal<boolean>;
|
|
2751
|
+
truncated: import("@angular/core").Signal<boolean>;
|
|
2752
|
+
loadingMore: import("@angular/core").Signal<boolean>;
|
|
2753
|
+
loadMore(): Promise<void>;
|
|
2754
|
+
items: import("@angular/core").Signal<import("@sinequa/atomic-angular/document-workspaces").MentionItem[]>;
|
|
2755
|
+
count: import("@angular/core").Signal<number>;
|
|
2756
|
+
ids: import("@angular/core").Signal<readonly string[]>;
|
|
2757
|
+
allSelected: import("@angular/core").Signal<boolean>;
|
|
2758
|
+
partiallySelected: import("@angular/core").Signal<boolean>;
|
|
2759
|
+
isSelected: (id: string) => boolean;
|
|
2760
|
+
toggle: (id: string, checked: boolean) => void;
|
|
2761
|
+
toggleAll: () => void;
|
|
2762
|
+
select: (id: string) => void;
|
|
2763
|
+
create(): Promise<import("@sinequa/atomic-angular/document-workspaces").Workspace | null>;
|
|
2764
|
+
};
|
|
2765
|
+
protected onTabChange(tab: string | undefined): void;
|
|
2766
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<WorkspaceMentionTabs, never>;
|
|
2767
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<WorkspaceMentionTabs, "workspace-mention-tabs", never, {
|
|
2768
|
+
"ariaLabel": {
|
|
2769
|
+
"alias": "aria-label";
|
|
2770
|
+
"required": false;
|
|
2771
|
+
"isSignal": true;
|
|
2772
|
+
};
|
|
2773
|
+
}, {}, never, never, true, never>;
|
|
2774
|
+
}
|
|
2301
2775
|
/** What "save" attaches to a workspace: a document that already exists, by name. */
|
|
2302
2776
|
interface PickerDocument {
|
|
2303
2777
|
name: string;
|
|
@@ -2324,7 +2798,7 @@ export declare class WorkspacePicker {
|
|
|
2324
2798
|
/** The documents are in the workspace, and the check mark has been seen. */
|
|
2325
2799
|
readonly completed: import("@angular/core").OutputEmitterRef<Workspace>;
|
|
2326
2800
|
private readonly store;
|
|
2327
|
-
protected readonly status: import("@angular/core").WritableSignal<"
|
|
2801
|
+
protected readonly status: import("@angular/core").WritableSignal<"loading" | "ready" | "error">;
|
|
2328
2802
|
protected readonly busyId: import("@angular/core").WritableSignal<string | null>;
|
|
2329
2803
|
protected readonly doneId: import("@angular/core").WritableSignal<string | null>;
|
|
2330
2804
|
protected readonly error: import("@angular/core").WritableSignal<Message | null>;
|
|
@@ -2524,4 +2998,4 @@ export declare class WorkspacesShell {
|
|
|
2524
2998
|
"askFollowUp": "askFollowUp";
|
|
2525
2999
|
}, never, never, true, never>;
|
|
2526
3000
|
}
|
|
2527
|
-
export type { AddFilesOptions, AskFollowUp, AssignableRole, ConfirmDialogConfig, ConnectionNotice, CreateWorkspaceInput, CurrentUser, DocumentLabels, DocumentStatus, DocumentType, Member, MentionSelection, Pagination, PickedPrincipal, PickerDocument, PrincipalSummary, RemoveWorkspacesResult, ResolvedPrincipal, Selection, SelectionOptions, ShareDialogConfig, TextSearch, TextSearchOptions, TrackFileInput, TrackedUpload, TrackerWorkspace, UploadDialogConfig, UploadEvents, UploadFactory, UploadHandle, UploadOptions, UploadStatus, UploadTarget, UploadTrackerState, Workspace, WorkspaceColor, WorkspaceDocument, WorkspaceEditDialogConfig, WorkspaceEditResult, WorkspacePickerDialogConfig, WorkspacePickerResult, WorkspaceRole, WorkspaceTab, WorkspaceTabCounts, WorkspacesState };
|
|
3001
|
+
export type { AddFilesOptions, AskFollowUp, AssignableRole, ConfirmDialogConfig, ConnectionNotice, CreateWorkspaceInput, CurrentUser, DocumentLabels, DocumentStatus, DocumentType, Member, MentionItem, MentionSelection, Pagination, PickedPrincipal, PickerDocument, PrincipalSummary, RemoveWorkspacesResult, ResolvedPrincipal, Selection, SelectionOptions, ShareDialogConfig, TextSearch, TextSearchOptions, TrackFileInput, TrackedUpload, TrackerWorkspace, UploadDialogConfig, UploadEvents, UploadFactory, UploadHandle, UploadOptions, UploadStatus, UploadTarget, UploadTrackerState, Workspace, WorkspaceColor, WorkspaceDocument, WorkspaceEditDialogConfig, WorkspaceEditResult, WorkspaceFilterOptions, WorkspaceMentionApi, WorkspaceMentionOptions, WorkspacePickerDialogConfig, WorkspacePickerResult, WorkspaceRole, WorkspaceSearchFields, WorkspaceTab, WorkspaceTabCounts, WorkspacesState };
|