@arsedizioni/ars-utils 22.5.12 → 22.5.14

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.
@@ -1,15 +1,27 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Signal, WritableSignal } from '@angular/core';
3
- import { NameValueItem, LoginOAuthType, LoginResult, ApiResult, FolderTree } from '@arsedizioni/ars-utils/core';
3
+ import { NameValueItem, LoginResult, ApiResult, FolderTree } from '@arsedizioni/ars-utils/core';
4
4
  import { SendToDialogResult } from '@arsedizioni/ars-utils/ui';
5
5
  import { HttpInterceptorFn } from '@angular/common/http';
6
6
  import * as rxjs from 'rxjs';
7
+ import { Observable } from 'rxjs';
7
8
 
8
9
  declare const ClipperMessages: {
9
10
  /**
10
11
  * Messages
11
12
  */
12
13
  ERROR: string;
14
+ /**
15
+ * The session is gone: a 401 on a request that was not a login attempt.
16
+ * Emitted once per dead session by `clipperAuthInterceptor`, which re-arms on the first
17
+ * good response.
18
+ */
19
+ ERROR_401: string;
20
+ /**
21
+ * The API is not answering: the interceptor has already sent the request three times over
22
+ * ten seconds. Emitted once, and re-armed on the first good response.
23
+ */
24
+ ERROR_UNAVAILABLE: string;
13
25
  SUCCESS: string;
14
26
  SUCCESS_TOAST: string;
15
27
  LOGIN_CHANGED: string;
@@ -191,10 +203,7 @@ interface ClipperLoginResult extends LoginResult<ClipperUserInfo> {
191
203
  }
192
204
  interface ClipperLoginInfo {
193
205
  context?: ClipperUserInfo;
194
- complianceContext?: any;
195
206
  channels?: ClipperChannelSettings[];
196
- oauth?: LoginOAuthType;
197
- remember?: boolean;
198
207
  }
199
208
  declare enum ClipperQueryDocumentFlags {
200
209
  None = 0,
@@ -319,6 +328,40 @@ interface ClipperDocumentRelevants {
319
328
  hit: number;
320
329
  chunks: number;
321
330
  }
331
+ /** One delivery of a shared note by email, and whether the recipient opened it. */
332
+ interface ClipperDocumentNoteTracking {
333
+ id: string;
334
+ userMailId: number;
335
+ email?: string;
336
+ sentDate: Date;
337
+ openDate?: Date;
338
+ }
339
+ /**
340
+ * A shared note attached to a document.
341
+ *
342
+ * The library never creates or edits one -- notes belong to the application that owns the
343
+ * account -- but the API attaches them to documents and to `metadata()`, so the shape is
344
+ * declared here rather than letting a consumer read a response it cannot see.
345
+ */
346
+ interface ClipperDocumentNote {
347
+ id?: number;
348
+ teamId?: string;
349
+ teamTitle?: string;
350
+ documentId?: string;
351
+ documentTitle?: string;
352
+ color?: string;
353
+ name?: string;
354
+ note?: string;
355
+ trackings?: ClipperDocumentNoteTracking[];
356
+ trackingsCount?: number;
357
+ trackingsOpenedCount?: number;
358
+ expiringDate?: Date;
359
+ isExpired?: boolean;
360
+ isTroubled?: boolean;
361
+ isMenuOpen?: boolean;
362
+ isOver?: boolean;
363
+ created?: Date;
364
+ }
322
365
  interface ClipperDocumentInfo {
323
366
  id?: string;
324
367
  documentId?: string;
@@ -346,6 +389,7 @@ interface ClipperDocumentInfo {
346
389
  originDescription?: string;
347
390
  author?: string;
348
391
  anchors?: ClipperDocumentAnchorInfo[];
392
+ notes?: ClipperDocumentNote[];
349
393
  chunks?: ClipperDocumentAnchorInfo[];
350
394
  chunksList?: string;
351
395
  taxonomy?: string;
@@ -474,13 +518,15 @@ declare enum ClipperExportDocumentsFormat {
474
518
  iCalendar = 2
475
519
  }
476
520
  interface ClipperExportDocumentsParams {
477
- query: ClipperSearchParams;
521
+ query?: ClipperSearchParams;
478
522
  ids: string[];
479
523
  format?: ClipperExportDocumentsFormat;
480
524
  }
481
525
  interface ClipperSendDocumentsByEmailParams extends SendToDialogResult {
482
526
  ids?: string[];
527
+ isCalendar?: boolean;
483
528
  public?: string;
529
+ userNoteId?: number;
484
530
  }
485
531
  interface ClipperDocumentStructure {
486
532
  id: string;
@@ -688,9 +734,36 @@ declare class ClipperSearchUtils {
688
734
  /**
689
735
  * Builds the Clipper auth HTTP interceptor.
690
736
  *
691
- * Takes its two inputs — the Clipper base URI and the service flags — directly
692
- * as arguments (captured in the closure), so it never injects ClipperService:
693
- * registering it does not pull the full Clipper service into the eager bundle.
737
+ * Attaches the credentials and the service-worker bypass header to every request aimed at the
738
+ * Clipper API, and turns HTTP failures into broadcast messages — no UI dependency here.
739
+ *
740
+ * Takes the Clipper base URI and the service flags directly as arguments, captured in the closure,
741
+ * so it never injects `ClipperService`: registering it does not pull the whole Clipper service into
742
+ * the eager bundle. The debounce and the two notification latches live in that same closure, so two
743
+ * applications registering two interceptors never share them.
744
+ *
745
+ * ## What the statuses mean
746
+ *
747
+ * Aligned with the Clipper 7.5 API on 2026-08-25. The meaning of the status codes changed with the
748
+ * API: failures used to arrive as `200 OK` with `success: false`, and this interceptor had to guess.
749
+ * Now the status is the truth — a 401 on an already-authenticated request means the session is
750
+ * gone, a 403 means the permission is missing, and a 5xx means the server broke, which is not the
751
+ * same thing at all and must not sign the user out.
752
+ *
753
+ * A dead session is broadcast as `ClipperMessages.ERROR_401`, for the host application to handle
754
+ * centrally; every other failure stays a `ClipperMessages.ERROR` carrying a message. The two are
755
+ * separate because they call for opposite things: one returns to the sign-in page, the other shows
756
+ * a dialog and leaves the user where they are.
757
+ *
758
+ * Between them sits the third case, which is neither: the API is being replaced. A deployment
759
+ * answers with a 5xx that has no `ApiResult` envelope, or does not answer at all, for the few
760
+ * seconds the process takes to come back. That is not worth a dialog and not worth a redirect
761
+ * either, so the request is simply sent again — twice, five seconds apart — and only if the third
762
+ * attempt fails too does it become `ClipperMessages.ERROR_UNAVAILABLE`.
763
+ *
764
+ * `ClipperServiceFlags.NotifySystemErrors` still governs one narrow case, and only that one: a 5xx
765
+ * that DOES carry an envelope, i.e. a server error the API itself described. Without the flag it is
766
+ * swallowed, as it always was in this library.
694
767
  *
695
768
  * Register it with `withInterceptors`:
696
769
  * @example
@@ -806,11 +879,16 @@ declare class ClipperDocumentsService {
806
879
  index(id: string): rxjs.Observable<ApiResult<ClipperDocumentStructure>>;
807
880
  /**
808
881
  * Gets the last-update metadata for a document.
882
+ *
883
+ * The response carries two things, not one: the last-update string and the shared notes attached
884
+ * to the document. The second was long left undeclared here, so a consumer of this library could
885
+ * not see data the API had already sent it.
809
886
  * @param id - The ID of the document.
810
- * @returns An observable emitting the API result wrapping the last update string.
887
+ * @returns An observable emitting the API result wrapping the last update string and its notes.
811
888
  */
812
889
  metadata(id: string): rxjs.Observable<ApiResult<{
813
890
  item1?: string;
891
+ item2?: ClipperDocumentNote[];
814
892
  }>>;
815
893
  /**
816
894
  * Queries document references, changes or jurisprudence depending on the requested mode.
@@ -907,74 +985,116 @@ declare class ClipperDocumentsService {
907
985
  }
908
986
 
909
987
  /**
910
- * Authentication: credential / OAuth2 login, MFA confirmation, logout and OTP.
911
- * Shared login context, channels and the logged-in flag live in `ClipperCoreService`.
988
+ * Authentication: password login, e-mailed code confirmation, logout and session restore.
989
+ * The login context, the channels and the logged-in flag live in `ClipperCoreService`.
990
+ *
991
+ * Aligned with the Clipper 7.5 API on 2026-08-25. Everything here now goes through `/session/*`
992
+ * and an HttpOnly cookie: there is no bearer token, no `remember` credential the API can replay,
993
+ * and no OAuth token acquired by the caller — the external-provider flow is a full-page redirect
994
+ * handled server-side, and all that reaches this service is the `/session/me` call on the way back.
995
+ *
996
+ * This is a deliberately reduced subset of what the Clipper application itself does. Passkeys and
997
+ * the passwordless recovery code (`/session/otp`) are not here: a library whose job is showing
998
+ * documents signs in with a password, and an application that offers the other ways in owns them.
912
999
  */
913
1000
  declare class ClipperLoginService {
914
1001
  private readonly httpClient;
915
1002
  private readonly broadcastService;
916
1003
  private readonly splashService;
917
1004
  private readonly core;
918
- /**
919
- * Attempts an automatic login using the credentials currently stored in session storage.
920
- * @param onSuccess - Optional callback invoked with the login result value on success.
921
- */
922
- autoLogin(onSuccess?: (value?: any) => void): void;
923
- /**
924
- * Performs an automatic logout and clears the stored session.
925
- * @param onSuccess - Optional callback invoked after a successful logout.
1005
+ /** Whether {@link initialize} has already run. */
1006
+ private initialized;
1007
+ /**
1008
+ * Validates a context that survived a page refresh before trusting it.
1009
+ *
1010
+ * Called by `ClipperService.initialize`, right after `ClipperCoreService.initialize`, so a
1011
+ * consumer gets the restore for free and never has to know this method exists. The auth cookie is
1012
+ * HttpOnly and may have expired while the stored context lived on, so a stored context only ever
1013
+ * means "there WAS a session" — this is what turns it into "there is one".
1014
+ *
1015
+ * A host application that drives its own return from an external provider, or that starts on its
1016
+ * own sign-in page, should call `core.setLoggedIn(false)` before bootstrapping rather than let
1017
+ * this race its own restore.
1018
+ * @returns void
1019
+ */
1020
+ initialize(): void;
1021
+ /**
1022
+ * Asks `/session/me` whether the restored session is still alive. On success the login is
1023
+ * finalised from the current claims; on a dead session the interceptor's 401 handling takes over.
1024
+ *
1025
+ * Nothing is cleared on failure, and that is deliberate: a failure here is not proof of a dead
1026
+ * session — the API may be unreachable, the proxy may have answered 502, the device may be
1027
+ * offline. Clearing on any of those would sign the user out with a perfectly valid cookie.
1028
+ * @returns void
1029
+ */
1030
+ private restoreSession;
1031
+ /**
1032
+ * Authenticates the user with email and password.
1033
+ *
1034
+ * Nothing is replayed from a stored credential any more: the former "remember me" token, which
1035
+ * let the API sign a caller in from something kept for sixty days, is gone. A login always starts
1036
+ * from what the user just typed.
1037
+ * @param email - The user's email address.
1038
+ * @param password - The user's password.
1039
+ * @returns An observable emitting the API result wrapping the login result.
926
1040
  */
927
- autoLogout(onSuccess?: () => void): void;
1041
+ login(email?: string, password?: string): Observable<ApiResult<ClipperLoginResult>>;
928
1042
  /**
929
- * Authenticates the user against the Clipper API, supporting both credential-based and
930
- * OAuth2 login flows.
931
- * @param email - The user's email address (credential login only).
932
- * @param password - The user's password (credential login only).
933
- * @param remember - When `true`, the session is remembered across browser restarts.
934
- * @param oauth - The OAuth2 provider type, when authenticating via SSO.
935
- * @param oauthAccessToken - The OAuth2 bearer token. Defaults to the value stored in session storage.
1043
+ * Confirms a pending e-mailed code challenge, which establishes the session.
1044
+ *
1045
+ * The address travels with the code because the API stores each code under the account it was
1046
+ * issued to: a code alone is not redeemable, which is what stops a guessed code from opening
1047
+ * whatever session happens to be pending. It also keeps the code out of the URL, where it used to
1048
+ * sit — `/login/confirm/{code}` put it in the path, and therefore in the server logs and in the
1049
+ * browser history.
1050
+ * @param code - The one-time confirmation code provided to the user.
1051
+ * @param email - The address the code was sent to.
936
1052
  * @returns An observable emitting the API result wrapping the login result.
937
1053
  */
938
- login(email?: string, password?: string, remember?: boolean, oauth?: LoginOAuthType, oauthAccessToken?: string | undefined): rxjs.Observable<ApiResult<ClipperLoginResult>>;
1054
+ confirm(code: string, email?: string): Observable<ApiResult<ClipperLoginResult>>;
939
1055
  /**
940
- * Finalises the login flow by updating the stored context, setting the logged-in signal,
941
- * initialising channels, and broadcasting `LOGIN_COMPLETED`.
942
- * @param result - The login result returned by the API.
1056
+ * Logs the user out on the server and clears the local state.
1057
+ * @returns An observable that emits once the logout has been processed.
943
1058
  */
944
- private completeLogin;
1059
+ logout(): Observable<ApiResult<unknown>>;
945
1060
  /**
946
- * Submits the MFA confirmation code to complete a two-factor login flow.
947
- * @param code - The one-time confirmation code provided to the user.
948
- * @returns An observable emitting the API result wrapping the login result.
1061
+ * Reads the current session from the server, which resolves it from the auth cookie claims
1062
+ * without touching the database. Used to restore the state after a page refresh instead of
1063
+ * trusting what local storage holds, and to close an external-provider round-trip.
1064
+ * @returns An observable emitting the current session.
949
1065
  */
950
- confirmIdentity(code: string): rxjs.Observable<ApiResult<ClipperLoginResult>>;
1066
+ me(): Observable<ApiResult<ClipperLoginResult>>;
951
1067
  /**
952
- * Logs the user out and clears the current session.
953
- * @param forget - When `true`, all stored user credentials are also removed.
954
- * @returns An observable that completes once the logout request has been processed.
1068
+ * Finalises the login flow after an authentication, a code confirmation or a session restore:
1069
+ * writes the context into the shared state, raises the logged-in signal, rebuilds the channel
1070
+ * list and announces `LOGIN_COMPLETED`.
1071
+ *
1072
+ * `loggingIn` is deliberately left alone. Whoever raised it lowers it — {@link restoreSession}
1073
+ * for a refresh, the host application for an external-login round-trip — because lowering it
1074
+ * here would drop the splash the instant the response arrived, before anything was on screen.
1075
+ * @param result - The login result returned by the API.
1076
+ * @param notify - Whether to broadcast `LOGIN_COMPLETED`. Defaults to `true`.
1077
+ * @returns void
955
1078
  */
956
- logout(forget?: boolean): rxjs.Observable<any>;
1079
+ private completeLogin;
957
1080
  /**
958
- * Requests a new one-time password for the given repository.
959
- * @param id - The repository ID for which the OTP should be generated.
1081
+ * Requests a new one-time password used to authorise a binary download.
1082
+ * @param id - The repository ID of the binary the OTP is generated for.
960
1083
  * @returns An observable emitting the API result wrapping the generated OTP info.
961
1084
  */
962
- newOTP(id: string): rxjs.Observable<ApiResult<ClipperOTPInfo>>;
1085
+ newOTP(id: string): Observable<ApiResult<ClipperOTPInfo>>;
963
1086
  /**
964
1087
  * Persists the current login context to `localStorage`.
965
1088
  * Delegates to `ClipperCoreService.storeContext()`.
1089
+ * @returns void
966
1090
  */
967
1091
  storeContext(): void;
968
1092
  /**
969
- * Updates the stored login context with the values from a fresh login result.
970
- * Delegates to `ClipperCoreService.updateContext()`.
971
- * @param result - The login result containing the new user context and channel settings.
972
- */
973
- updateContext(result: ClipperLoginResult): void;
974
- /**
975
- * Clears all session-storage authentication keys and resets the login state.
1093
+ * Clears every trace of the current session on this device: the stored context, the logged-in
1094
+ * signal and the session-storage keys. Does NOT call the server — use {@link logout} for that.
976
1095
  * Delegates to `ClipperCoreService.clear()`.
977
- * @param clearOAuthToken - When `true`, the OAuth bearer token is also removed.
1096
+ * @param clearOAuthToken - Whether to drop the legacy OAuth token too. Defaults to `true`.
1097
+ * @returns void
978
1098
  */
979
1099
  clear(clearOAuthToken?: boolean): void;
980
1100
  static ɵfac: i0.ɵɵFactoryDeclaration<ClipperLoginService, never>;
@@ -991,7 +1111,7 @@ declare class ClipperLoginService {
991
1111
  */
992
1112
  declare class ClipperService {
993
1113
  private readonly core;
994
- /** Authentication: login/logout, MFA, OTP. */
1114
+ /** Authentication: login/logout, e-mailed code confirmation, session restore, OTP. */
995
1115
  readonly session: ClipperLoginService;
996
1116
  /** Document search, references, export, working-documents bag and saved searches. */
997
1117
  readonly documents: ClipperDocumentsService;
@@ -1030,10 +1150,12 @@ declare class ClipperService {
1030
1150
  /** @returns A signal indicating whether tagging is allowed. */
1031
1151
  get allowTags(): WritableSignal<boolean>;
1032
1152
  /**
1033
- * Initialises the application with the API base URI, optional app URI, and feature flags.
1153
+ * Initialises the application with the API base URI, optional app URI, and feature flags, then
1154
+ * validates any session that survived a page refresh.
1034
1155
  * @param serviceUri - The base URI of the Clipper REST API.
1035
1156
  * @param appUri - Optional URI of the Clipper web application (used to build document links).
1036
1157
  * @param flags - Feature flags that control service behaviour. Defaults to `ClipperServiceFlags.None`.
1158
+ * @returns void
1037
1159
  */
1038
1160
  initialize(serviceUri: string, appUri?: string, flags?: ClipperServiceFlags): void;
1039
1161
  /**
@@ -1077,6 +1199,16 @@ declare class ClipperCoreService {
1077
1199
  * @returns The current login context, or `undefined` if not authenticated.
1078
1200
  */
1079
1201
  get loginInfo(): ClipperLoginInfo | undefined;
1202
+ /**
1203
+ * Seeded from the stored context, which is the only trace a session leaves on this device: the
1204
+ * auth cookie is HttpOnly and unreadable from here. It means "there WAS a session", never "there
1205
+ * is one" -- `ClipperLoginService.initialize` validates it against `/session/me` before it is
1206
+ * trusted, and a failure there ends as a 401 that clears the session.
1207
+ *
1208
+ * It used to be seeded from a `clipper_oauth_token` session-storage key, which nothing has
1209
+ * written since the provider flow moved server-side: the flag was therefore false at every
1210
+ * bootstrap and the whole restore path could never run.
1211
+ */
1080
1212
  private readonly _loggedIn;
1081
1213
  readonly loggedIn: Signal<boolean>;
1082
1214
  readonly loggingIn: i0.WritableSignal<boolean>;
@@ -1094,6 +1226,10 @@ declare class ClipperCoreService {
1094
1226
  * Ensures a login-info object exists and returns it for further mutation.
1095
1227
  * Replaces the inline `if (!this._loginInfo) { ... }` guards now that the field
1096
1228
  * is private to this service.
1229
+ *
1230
+ * Reads through the getter, never the field: the context is loaded from storage lazily, so a
1231
+ * caller that mutates before anyone has read would find the field empty and start from a blank
1232
+ * object, silently dropping a perfectly good stored context.
1097
1233
  * @returns The existing login-info object, or a freshly created empty one.
1098
1234
  */
1099
1235
  ensureLoginInfo(): ClipperLoginInfo;
@@ -1104,11 +1240,21 @@ declare class ClipperCoreService {
1104
1240
  */
1105
1241
  setLoggedIn(value: boolean): void;
1106
1242
  /**
1107
- * Persists the current login context to `localStorage`.
1243
+ * Persists the current login context to `localStorage`, but only when there is a context to
1244
+ * persist. A login-info object with no `context` is not a session: it is the empty shell
1245
+ * `ensureLoginInfo` hands out before anything has been written into it, and storing it would leave
1246
+ * behind a key whose mere presence makes the next bootstrap declare the user logged in.
1108
1247
  */
1109
1248
  storeContext(): void;
1110
1249
  /**
1111
1250
  * Updates the stored login context with the values from a fresh login result.
1251
+ *
1252
+ * Each half is written only when the server actually sent it. An absent `context` or `settings`
1253
+ * means "not carried by this response", never "the user has none": overwriting on absence is what
1254
+ * made a page refresh empty the channel list, because `/session/me` answers without the settings
1255
+ * and this method wrote that emptiness -- through `storeContext`, onto the disk, where it survived
1256
+ * the reload it was born in. An EMPTY array is a different matter and is stored as it comes: that
1257
+ * is the server saying the subscription really is gone.
1112
1258
  * @param result - The login result containing the new user context and channel settings.
1113
1259
  */
1114
1260
  updateContext(result: ClipperLoginResult): void;
@@ -1141,4 +1287,4 @@ declare class ClipperCoreService {
1141
1287
  }
1142
1288
 
1143
1289
  export { ClipperAccountService, ClipperAuthors, ClipperCalendarSearchParams, ClipperCalendarState, ClipperCalendarStates, ClipperChannel, ClipperChannelSettings, ClipperChannels, ClipperCoreService, ClipperDashboard, ClipperDocumentChangeReasons, ClipperDocumentContainer, ClipperDocumentsService, ClipperExportDocumentsFormat, ClipperFacet, ClipperLoginService, ClipperMessages, ClipperModel, ClipperModels, ClipperModule, ClipperModuleGroup, ClipperModuleGroups, ClipperModules, ClipperQueryDocumentFlags, ClipperQueryReferencesMode, ClipperRegions, ClipperSearchCalendarSnapshotResult, ClipperSearchFacetsSnapshot, ClipperSearchParams, ClipperSearchResult, ClipperSearchUtils, ClipperSectorTypes, ClipperSectors, ClipperSelectionMode, ClipperService, ClipperServiceFlags, ClipperSort, ClipperSources, ClipperUtils, clipperAuthInterceptor };
1144
- export type { ClipperAvailableChannel, ClipperChannelSettingsItem, ClipperDashboardItem, ClipperDashboardModelItem, ClipperDeleteWorkingDocumentsParams, ClipperDocumentAnchorInfo, ClipperDocumentInfo, ClipperDocumentRelevantChunkHit, ClipperDocumentRelevants, ClipperDocumentStructure, ClipperDocumentUpdateStateParams, ClipperExportDocumentsParams, ClipperLoginInfo, ClipperLoginResult, ClipperOTPInfo, ClipperReferencesSearchParams, ClipperSearchCalendarSnapshotMonth, ClipperSearchFacet, ClipperSearchFacetGroup, ClipperSearchFacetsResult, ClipperSearchFilter, ClipperSendDocumentsByEmailParams, ClipperTaxonomyParams, ClipperTopicInfo, ClipperUserChannelInfo, ClipperUserInfo, ClipperUserSearch, ClipperUserTrialInfo, ClipperUserWorkingDocument, EditedEventArgs, SectorInfo };
1290
+ export type { ClipperAvailableChannel, ClipperChannelSettingsItem, ClipperDashboardItem, ClipperDashboardModelItem, ClipperDeleteWorkingDocumentsParams, ClipperDocumentAnchorInfo, ClipperDocumentInfo, ClipperDocumentNote, ClipperDocumentNoteTracking, ClipperDocumentRelevantChunkHit, ClipperDocumentRelevants, ClipperDocumentStructure, ClipperDocumentUpdateStateParams, ClipperExportDocumentsParams, ClipperLoginInfo, ClipperLoginResult, ClipperOTPInfo, ClipperReferencesSearchParams, ClipperSearchCalendarSnapshotMonth, ClipperSearchFacet, ClipperSearchFacetGroup, ClipperSearchFacetsResult, ClipperSearchFilter, ClipperSendDocumentsByEmailParams, ClipperTaxonomyParams, ClipperTopicInfo, ClipperUserChannelInfo, ClipperUserInfo, ClipperUserSearch, ClipperUserTrialInfo, ClipperUserWorkingDocument, EditedEventArgs, SectorInfo };
@@ -267,7 +267,7 @@ declare class ClipperSearchCalendarComponent {
267
267
  * asynchronous continuation after the dynamic `import()` is outside the injection context, so an
268
268
  * `inject()` added in there would have failed at runtime.
269
269
  */
270
- declare class ClipperDocumentUtilsService {
270
+ declare class ClipperDocumentViewerService {
271
271
  private readonly dialogService;
272
272
  private readonly clipperService;
273
273
  /**
@@ -284,8 +284,8 @@ declare class ClipperDocumentUtilsService {
284
284
  * @returns void
285
285
  */
286
286
  openDocument(documentId: string, query?: string, queryChunks?: string, selectionMode?: ClipperSelectionMode, selectableModules?: ClipperModule[], theme?: ThemeType, canHandleTooManyResults?: boolean, replaceUrl?: string): void;
287
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<ClipperDocumentUtilsService, never>;
288
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<ClipperDocumentUtilsService>;
287
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ClipperDocumentViewerService, never>;
288
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<ClipperDocumentViewerService>;
289
289
  }
290
290
  /**
291
291
  * Pure helpers on document data. Deliberately NOT a service: there is nothing to inject, and a
@@ -307,7 +307,7 @@ declare class ClipperSearchResultManager extends ClipperDocumentManager {
307
307
  protected readonly destroyRef: DestroyRef;
308
308
  protected readonly changeDetector: ChangeDetectorRef;
309
309
  protected readonly breakpointObserver: BreakpointObserver;
310
- protected readonly documentUtils: ClipperDocumentUtilsService;
310
+ protected readonly documentUtils: ClipperDocumentViewerService;
311
311
  protected readonly themeService: ThemeService;
312
312
  readonly screenService: ScreenService;
313
313
  selection: SelectableModel<ClipperDocumentInfo, string> | undefined;
@@ -945,7 +945,7 @@ declare class ClipperDocumentComponent extends ClipperDocumentManager {
945
945
  */
946
946
  open(documentId: string, query?: string, queryChunks?: string, newWindow?: boolean): void;
947
947
  /**
948
- * Opens a document inline via the {@link ClipperDocumentUtilsService}.
948
+ * Opens a document inline via the {@link ClipperDocumentViewerService}.
949
949
  * @param documentId - The id of the document to open.
950
950
  * @param query - Optional free-text query for highlight.
951
951
  * @param queryChunks - Optional chunk offsets for semantic highlight.
@@ -1297,5 +1297,5 @@ declare class ClipperSearchResultItemComponent {
1297
1297
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ClipperSearchResultItemComponent, "clipper-search-result-item", never, { "parent": { "alias": "parent"; "required": true; "isSignal": true; }; "item": { "alias": "item"; "required": true; "isSignal": true; }; "actions": { "alias": "actions"; "required": true; "isSignal": true; }; "tileNoPictureUrl": { "alias": "tileNoPictureUrl"; "required": false; "isSignal": true; }; "tilePictureUrl": { "alias": "tilePictureUrl"; "required": false; "isSignal": true; }; "isSelectable": { "alias": "isSelectable"; "required": false; "isSignal": true; }; "isReadable": { "alias": "isReadable"; "required": false; "isSignal": true; }; "isReadableModel": { "alias": "isReadableModel"; "required": false; "isSignal": true; }; "displayModifiedTitle": { "alias": "displayModifiedTitle"; "required": false; "isSignal": true; }; "displayModelName": { "alias": "displayModelName"; "required": false; "isSignal": true; }; "displayDate": { "alias": "displayDate"; "required": false; "isSignal": true; }; "displayMode": { "alias": "displayMode"; "required": false; "isSignal": true; }; }, { "item": "itemChange"; }, never, never, true, never>;
1298
1298
  }
1299
1299
 
1300
- export { ClipperBrowserComponent, ClipperBrowserDialogComponent, ClipperDocumentComponent, ClipperDocumentIndexComponent, ClipperDocumentManager, ClipperDocumentMenuComponent, ClipperDocumentUtilsService, ClipperDocumentsUtils, ClipperReferencesComponent, ClipperSearchCalendarComponent, ClipperSearchFacetsComponent, ClipperSearchFreeTextHelpComponent, ClipperSearchFreeTextQueryBuilderComponent, ClipperSearchResultItemComponent, ClipperSearchResultItemDisplayMode, ClipperSearchResultManager };
1300
+ export { ClipperBrowserComponent, ClipperBrowserDialogComponent, ClipperDocumentComponent, ClipperDocumentIndexComponent, ClipperDocumentManager, ClipperDocumentMenuComponent, ClipperDocumentViewerService, ClipperDocumentsUtils, ClipperReferencesComponent, ClipperSearchCalendarComponent, ClipperSearchFacetsComponent, ClipperSearchFreeTextHelpComponent, ClipperSearchFreeTextQueryBuilderComponent, ClipperSearchResultItemComponent, ClipperSearchResultItemDisplayMode, ClipperSearchResultManager };
1301
1301
  export type { ClipperBrowserDialogData, ClipperDocumentDialogData, ClipperDocumentIndexDialogData, ClipperDocumentIndexDialogResult, ClipperReferenceDialogResult, ClipperReferencesDialogData, SearchFreeTextQueryParams };