@sinequa/atomic-angular 2.0.0 → 2.2.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.0.0",
3
+ "version": "2.2.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.7.0",
38
+ "@sinequa/atomic": ">=2.9.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
- import { SecurityPrincipal, UpdateContainerInput, UploadJobStatus } from "@sinequa/atomic";
1
+ import { SecurityPrincipal, UpdateWorkspaceInput, 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";
@@ -219,7 +219,7 @@ export declare const WorkspacesStore: import("@angular/core").Type<{
219
219
  loadMore: () => Promise<Workspace[]>;
220
220
  fetch: (id: string) => Promise<Workspace>;
221
221
  create: ({ name, description, tags, owners, readers }: CreateWorkspaceInput) => Promise<Workspace>;
222
- update: (id: string, patch: UpdateContainerInput) => Promise<Workspace | null>;
222
+ update: (id: string, patch: UpdateWorkspaceInput) => Promise<Workspace | null>;
223
223
  remove: (ids: string[]) => Promise<RemoveWorkspacesResult>;
224
224
  forget: (id: string) => void;
225
225
  loadDocuments: (workspaceId: string, signal?: AbortSignal) => Promise<WorkspaceDocument[]>;
@@ -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>;
@@ -1515,7 +1521,7 @@ export declare class WorkspaceList {
1515
1521
  loadMore: () => Promise<Workspace[]>;
1516
1522
  fetch: (id: string) => Promise<Workspace>;
1517
1523
  create: ({ name, description, tags, owners, readers }: import("@sinequa/atomic-angular/document-workspaces").CreateWorkspaceInput) => Promise<Workspace>;
1518
- update: (id: string, patch: import("@sinequa/atomic").UpdateContainerInput) => Promise<Workspace | null>;
1524
+ update: (id: string, patch: import("@sinequa/atomic").UpdateWorkspaceInput) => Promise<Workspace | null>;
1519
1525
  remove: (ids: string[]) => Promise<import("@sinequa/atomic-angular/document-workspaces").RemoveWorkspacesResult>;
1520
1526
  forget: (id: string) => void;
1521
1527
  loadDocuments: (workspaceId: string, signal?: AbortSignal) => Promise<import("@sinequa/atomic-angular/document-workspaces").WorkspaceDocument[]>;
@@ -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<"error" | "loading" | "ready">;
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<"error" | "loading" | "ready">;
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
- * The ticks are the store's, not this component's: however many of these are on
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
- private readonly store;
2282
- protected readonly status: import("@angular/core").WritableSignal<"error" | "loading" | "ready">;
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<"none" | "primary" | "secondary" | "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<"small" | "medium" | "md" | "lg" | "sm" | "xs" | "xsmall" | "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<"md" | "lg" | "sm" | null | undefined>;
2665
+ /** The size of the text, as `<SearchInput>` sizes it; follows `size` when absent. */
2666
+ readonly textSize: import("@angular/core").InputSignal<"base" | "sm" | 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<"error" | "loading" | "ready">;
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 };