@sinequa/atomic-angular 1.9.3 → 1.9.7
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/fesm2022/sinequa-atomic-angular.mjs +138 -49
- package/fesm2022/sinequa-atomic-angular.mjs.map +1 -1
- package/index.d.ts +137 -110
- package/package.json +1 -1
|
@@ -1249,41 +1249,51 @@ const PrincipalStore = signalStore({ providedIn: 'root' }, withDevtools('Princip
|
|
|
1249
1249
|
.map(word => word[0]?.toUpperCase())
|
|
1250
1250
|
.join('');
|
|
1251
1251
|
}),
|
|
1252
|
-
})), withMethods((store) =>
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1252
|
+
})), withMethods((store) => {
|
|
1253
|
+
// Shared across concurrent callers so two overlapping `initialize()` calls (e.g. a guard running
|
|
1254
|
+
// while another initialization is already in flight) await the same fetch instead of racing two
|
|
1255
|
+
// `fetchPrincipal()` requests.
|
|
1256
|
+
let pendingInitialization = null;
|
|
1257
|
+
return {
|
|
1258
|
+
/**
|
|
1259
|
+
* @deprecated use getState(PrincipalStore))
|
|
1260
|
+
*/
|
|
1261
|
+
principal() {
|
|
1262
|
+
const { userOverrideActive: _, ...rest } = getState(store);
|
|
1263
|
+
// this block cannot be put in a computed due to dynamic construction object with signals, which is not supported in computed.
|
|
1264
|
+
// using a method allows us to construct the principal object on each call, ensuring that the signals are properly evaluated and returned as values.
|
|
1265
|
+
const principal = Object.entries(rest).reduce((acc, [k, v]) => {
|
|
1266
|
+
acc[k] = v;
|
|
1267
|
+
return acc;
|
|
1268
|
+
}, {});
|
|
1269
|
+
return principal;
|
|
1270
|
+
},
|
|
1269
1271
|
async initialize() {
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1272
|
+
if (pendingInitialization)
|
|
1273
|
+
return pendingInitialization;
|
|
1274
|
+
pendingInitialization = (async () => {
|
|
1275
|
+
patchState(store, { state: 'loading' });
|
|
1276
|
+
try {
|
|
1277
|
+
// Use the SDK's fetchPrincipal so the principal load goes through the same auth handling
|
|
1278
|
+
// as the rest of atomic (credentials: "include" + the authMode-aware noAutoAuthentication
|
|
1279
|
+
// flag). In SSO mode it sends noAutoAuthentication=false, letting IIS/Windows authenticate.
|
|
1280
|
+
const principal = await fetchPrincipal();
|
|
1281
|
+
const { userOverrideActive = false } = globalConfig;
|
|
1282
|
+
patchState(store, { ...initialPrincipal, ...principal, userOverrideActive, state: 'loaded' });
|
|
1283
|
+
}
|
|
1284
|
+
catch (error) {
|
|
1285
|
+
console.error('Principal fetch failed', error);
|
|
1286
|
+
patchState(store, { state: 'error' });
|
|
1287
|
+
throw error;
|
|
1288
|
+
}
|
|
1289
|
+
finally {
|
|
1290
|
+
pendingInitialization = null;
|
|
1291
|
+
}
|
|
1292
|
+
})();
|
|
1293
|
+
return pendingInitialization;
|
|
1284
1294
|
}
|
|
1285
|
-
}
|
|
1286
|
-
}
|
|
1295
|
+
};
|
|
1296
|
+
}));
|
|
1287
1297
|
|
|
1288
1298
|
/**
|
|
1289
1299
|
* Creates a debounced signal that updates its value after a specified timeout.
|
|
@@ -1580,6 +1590,12 @@ function withThemes(app, themes) {
|
|
|
1580
1590
|
return app;
|
|
1581
1591
|
}
|
|
1582
1592
|
|
|
1593
|
+
/**
|
|
1594
|
+
* Mirrors @sinequa/atomic's `AUTH_REDIRECT_ATTEMPT_KEY` (authentication/constants.ts): the
|
|
1595
|
+
* sessionStorage flag set right before a provider (oauth/saml) full-page redirect. Not re-exported
|
|
1596
|
+
* by atomic, so mirrored here as well — the same mirroring already used in sign-in-form.ts.
|
|
1597
|
+
*/
|
|
1598
|
+
const AUTH_REDIRECT_ATTEMPT_KEY$1 = "sinequa-auth-redirect-attempt";
|
|
1583
1599
|
/**
|
|
1584
1600
|
* sessionStorage flag recording that an SSO re-authentication reload has already been attempted.
|
|
1585
1601
|
*
|
|
@@ -1597,6 +1613,10 @@ function markSsoReloadAttempted() {
|
|
|
1597
1613
|
function clearSsoReloadAttempt() {
|
|
1598
1614
|
sessionStorage.removeItem(SSO_RELOAD_ATTEMPT_KEY);
|
|
1599
1615
|
}
|
|
1616
|
+
// Shared across concurrent callers (e.g. the error interceptor reacting to a 401 while a component
|
|
1617
|
+
// also calls signIn() itself) so only one clearSessionTokens()/login() handshake actually runs; the
|
|
1618
|
+
// others await and receive the same result instead of each clearing/re-establishing the session.
|
|
1619
|
+
let pendingSignIn = null;
|
|
1600
1620
|
/**
|
|
1601
1621
|
* Signs the user in according to the resolved {@link globalConfig.authMode}.
|
|
1602
1622
|
*
|
|
@@ -1614,8 +1634,34 @@ function clearSsoReloadAttempt() {
|
|
|
1614
1634
|
*/
|
|
1615
1635
|
async function signIn() {
|
|
1616
1636
|
assertInInjectionContext(signIn);
|
|
1637
|
+
if (pendingSignIn)
|
|
1638
|
+
return pendingSignIn;
|
|
1617
1639
|
const router = inject(Router);
|
|
1618
1640
|
const lastUrlAfterNavigation = inject(NavigationService).urlAfterNavigation;
|
|
1641
|
+
pendingSignIn = performSignIn(router, lastUrlAfterNavigation).finally(() => {
|
|
1642
|
+
// A provider redirect (oauth/saml) or an SSO reload was just triggered: the page is about to
|
|
1643
|
+
// unload, but browser navigations are asynchronous — other pending work (e.g. a second,
|
|
1644
|
+
// independent signIn() call from a component that bypasses the HTTP interceptor) can still run
|
|
1645
|
+
// before that happens. Keep the mutex held in that case instead of releasing it, so any such
|
|
1646
|
+
// late arrival gets this same (already-decided) outcome rather than starting a fresh recovery
|
|
1647
|
+
// attempt that would misread the one-shot loop-guard flag — already set by THIS attempt — as a
|
|
1648
|
+
// genuine repeat failure and flash the error page moments before the pending navigation succeeds.
|
|
1649
|
+
const navigatingAway = sessionStorage.getItem(AUTH_REDIRECT_ATTEMPT_KEY$1) !== null || hasAttemptedSsoReload();
|
|
1650
|
+
if (!navigatingAway) {
|
|
1651
|
+
pendingSignIn = null;
|
|
1652
|
+
}
|
|
1653
|
+
});
|
|
1654
|
+
return pendingSignIn;
|
|
1655
|
+
}
|
|
1656
|
+
/**
|
|
1657
|
+
* @internal Test-only hook: forces the concurrent-call mutex back to its initial (unheld) state.
|
|
1658
|
+
* Production code never needs this — the mutex only stays held while a redirect/reload triggered
|
|
1659
|
+
* by `signIn()` is pending, a state a real page unload naturally clears by tearing down the module.
|
|
1660
|
+
*/
|
|
1661
|
+
function __resetSignInMutexForTests() {
|
|
1662
|
+
pendingSignIn = null;
|
|
1663
|
+
}
|
|
1664
|
+
async function performSignIn(router, lastUrlAfterNavigation) {
|
|
1619
1665
|
const { loginPath, authMode } = globalConfig;
|
|
1620
1666
|
// Always clear authentication tokens first to clear any existing session
|
|
1621
1667
|
clearSessionTokens();
|
|
@@ -1762,7 +1808,7 @@ async function bootstrapApp({ createRoutes = true } = {}) {
|
|
|
1762
1808
|
}
|
|
1763
1809
|
info('User authenticated, initializing application...');
|
|
1764
1810
|
try {
|
|
1765
|
-
await applicationService.initialize(createRoutes);
|
|
1811
|
+
await applicationService.initialize(createRoutes, { isBootstrap: true });
|
|
1766
1812
|
info(`Application initialized successfully (createRoutes: ${createRoutes}).`);
|
|
1767
1813
|
return true;
|
|
1768
1814
|
}
|
|
@@ -3726,9 +3772,13 @@ function AuthGuard() {
|
|
|
3726
3772
|
router.navigate([loginPath], { queryParams: { returnUrl: state.url } });
|
|
3727
3773
|
return false;
|
|
3728
3774
|
}
|
|
3729
|
-
// If the user is authenticated,
|
|
3775
|
+
// If the user is authenticated, make sure the principal store is loaded. Calling initialize()
|
|
3776
|
+
// whenever it isn't (instead of only when state is exactly "initial") means an initialization
|
|
3777
|
+
// already in flight elsewhere ("loading") is awaited rather than assumed absent — initialize()
|
|
3778
|
+
// itself dedupes concurrent calls into the same in-flight fetch — and a previous failed attempt
|
|
3779
|
+
// ("error") gets retried instead of permanently redirecting to login.
|
|
3730
3780
|
try {
|
|
3731
|
-
if (principalStore.state()
|
|
3781
|
+
if (principalStore.state() !== "loaded") {
|
|
3732
3782
|
await principalStore.initialize();
|
|
3733
3783
|
}
|
|
3734
3784
|
}
|
|
@@ -3741,7 +3791,7 @@ function AuthGuard() {
|
|
|
3741
3791
|
// check if the "princiapl" infos are loaded, if not navigate to the login page
|
|
3742
3792
|
const { passwordExpirationDate, editablePartition, name, state: principalState } = getState(principalStore);
|
|
3743
3793
|
if (principalState !== "loaded") {
|
|
3744
|
-
info("PrincipalStore state is
|
|
3794
|
+
info("PrincipalStore state is not 'loaded' after initialization attempt. Redirecting to login.");
|
|
3745
3795
|
router.navigate([loginPath], { queryParams: { returnUrl: state.url } });
|
|
3746
3796
|
return false;
|
|
3747
3797
|
}
|
|
@@ -3784,9 +3834,12 @@ class ApplicationService {
|
|
|
3784
3834
|
* 1. Calls the `initializeStores` function to initialize all the application's stores.
|
|
3785
3835
|
* 2. Calls the `createRoutes` function to set up the application routes.
|
|
3786
3836
|
*
|
|
3837
|
+
* @param options.isBootstrap - Whether this is the initial app bootstrap (before Angular
|
|
3838
|
+
* Router's own initial navigation), as opposed to a later re-initialization (e.g. user
|
|
3839
|
+
* override). Forwarded to `initializeStores` — see there for why it matters.
|
|
3787
3840
|
* @returns {Promise<void>} A promise that resolves when the initialization and route creation are complete.
|
|
3788
3841
|
*/
|
|
3789
|
-
async initialize(withCreateRoutes = true) {
|
|
3842
|
+
async initialize(withCreateRoutes = true, options) {
|
|
3790
3843
|
// throw an error if no components are registered and withCreateRoutes is true
|
|
3791
3844
|
// components are required to create the routes
|
|
3792
3845
|
if (withCreateRoutes && !this.components.length)
|
|
@@ -3795,7 +3848,7 @@ class ApplicationService {
|
|
|
3795
3848
|
// this will override the value set in your global config
|
|
3796
3849
|
setGlobalConfig({ createRoutes: withCreateRoutes });
|
|
3797
3850
|
info("Initializing application...");
|
|
3798
|
-
await this.initializeStores();
|
|
3851
|
+
await this.initializeStores(options);
|
|
3799
3852
|
info("Application initialized");
|
|
3800
3853
|
// this will set the title and logo of the application
|
|
3801
3854
|
// it will also set the logo in the css variables
|
|
@@ -3824,8 +3877,16 @@ class ApplicationService {
|
|
|
3824
3877
|
* - Resets the query params store (runs on first login as well as on every subsequent
|
|
3825
3878
|
* re-initialization, e.g. user override, so no previous user's search state leaks in).
|
|
3826
3879
|
* - Loads the user settings and logs the state of the user settings store.
|
|
3880
|
+
*
|
|
3881
|
+
* @param options.isBootstrap - During the initial app bootstrap this runs inside a
|
|
3882
|
+
* `provideAppInitializer`, BEFORE Angular Router's own initial navigation has processed the
|
|
3883
|
+
* browser's real URL. Resetting the query params store would otherwise navigate (consuming
|
|
3884
|
+
* the router's initial-navigation slot) and land the user on the wildcard route instead of the
|
|
3885
|
+
* deep link they actually loaded — so URL sync is skipped in that case. Later
|
|
3886
|
+
* re-initializations (user override) run with the router already navigated, so they keep
|
|
3887
|
+
* syncing the reset to the URL as before.
|
|
3827
3888
|
*/
|
|
3828
|
-
async initializeStores() {
|
|
3889
|
+
async initializeStores(options) {
|
|
3829
3890
|
try {
|
|
3830
3891
|
// Fetch the application configuration
|
|
3831
3892
|
await this.appStore.initialize();
|
|
@@ -3835,7 +3896,7 @@ class ApplicationService {
|
|
|
3835
3896
|
info("principalStore", getState(this.principalStore));
|
|
3836
3897
|
// Reset the query params (search text, filters, sort, ...) so a previous user's
|
|
3837
3898
|
// in-memory search state doesn't leak into the next user's session. ES-32053.
|
|
3838
|
-
this.queryParamsStore.reset();
|
|
3899
|
+
this.queryParamsStore.reset({ syncUrl: !options?.isBootstrap });
|
|
3839
3900
|
// Load the user settings
|
|
3840
3901
|
await this.userSettingsStore.initialize();
|
|
3841
3902
|
info("userSettingsStore", getState(this.userSettingsStore));
|
|
@@ -4331,8 +4392,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
|
|
|
4331
4392
|
class NavigationService {
|
|
4332
4393
|
router = inject(Router);
|
|
4333
4394
|
auditService = inject(AuditService);
|
|
4334
|
-
//
|
|
4335
|
-
urlAfterNavigation
|
|
4395
|
+
// Tracks the previous NavigationEnd url, used only to dedupe audit route-change notifications
|
|
4396
|
+
// in navigationEnd$ below. Kept separate from urlAfterNavigation so that getter stays correct
|
|
4397
|
+
// regardless of whether anything subscribes to navigationEnd$.
|
|
4398
|
+
previousNavigationUrl = null;
|
|
4399
|
+
/**
|
|
4400
|
+
* The URL of the current navigation, used to redirect the user after login.
|
|
4401
|
+
*
|
|
4402
|
+
* Sourced directly from `Router.url`, which Angular keeps up to date on every navigation with no
|
|
4403
|
+
* subscription required — unlike a field updated as a side effect of `navigationEnd$` below,
|
|
4404
|
+
* which only happens for whoever actually subscribes to it.
|
|
4405
|
+
*/
|
|
4406
|
+
get urlAfterNavigation() {
|
|
4407
|
+
return this.router.url !== "/login" ? this.router.url : null;
|
|
4408
|
+
}
|
|
4336
4409
|
/**
|
|
4337
4410
|
* Observable that emits events of type `NavigationEnd` from the Angular Router.
|
|
4338
4411
|
*
|
|
@@ -4341,19 +4414,18 @@ class NavigationService {
|
|
|
4341
4414
|
* - Filters the events to only include instances of `NavigationEnd`.
|
|
4342
4415
|
* - Taps into the event stream to extract the route name from the URL and notify the audit service of route changes,
|
|
4343
4416
|
* excluding duplicate navigations.
|
|
4344
|
-
* - Updates the `urlAfterNavigation` property with the current URL after navigation.
|
|
4345
4417
|
* - Shares the replayed value with a buffer size of 1 to ensure subscribers receive the latest emitted value.
|
|
4346
4418
|
*
|
|
4347
4419
|
* @type Observable<RouterEvent>
|
|
4348
4420
|
*/
|
|
4349
4421
|
navigationEnd$ = this.router.events.pipe(map((event) => event), filter$1((event) => event instanceof NavigationEnd), tap((event) => {
|
|
4350
4422
|
const url = event.url.slice(1).split("?")[0]; // Extract route name
|
|
4351
|
-
if (url && url !== this.
|
|
4423
|
+
if (url && url !== this.previousNavigationUrl) {
|
|
4352
4424
|
this.auditService.notifyRouteChange(url);
|
|
4353
4425
|
}
|
|
4354
4426
|
}), tap((event) => {
|
|
4355
4427
|
if (event.url !== "/login") {
|
|
4356
|
-
this.
|
|
4428
|
+
this.previousNavigationUrl = event.url;
|
|
4357
4429
|
}
|
|
4358
4430
|
}), shareReplay(1));
|
|
4359
4431
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: NavigationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
@@ -4615,14 +4687,28 @@ class PreviewService {
|
|
|
4615
4687
|
/**
|
|
4616
4688
|
* Sends a message to the iframe if it exists.
|
|
4617
4689
|
*
|
|
4690
|
+
* Also keeps `selectedHighlightId` in sync with any `select` action, regardless of which
|
|
4691
|
+
* caller triggered it (side panel navigation, snippet auto-select on preview open, assistant
|
|
4692
|
+
* citations, etc.), so that re-enabling highlighting after it was toggled off can restore the
|
|
4693
|
+
* currently selected highlight.
|
|
4694
|
+
*
|
|
4618
4695
|
* @param message - The message to be sent. It can be of any type.
|
|
4619
4696
|
*/
|
|
4620
4697
|
sendMessage(message) {
|
|
4698
|
+
if (this.isSelectMessage(message)) {
|
|
4699
|
+
this.selectedHighlightId.set(message.id);
|
|
4700
|
+
}
|
|
4621
4701
|
const iframe = this.iframe;
|
|
4622
4702
|
if (iframe) {
|
|
4623
4703
|
iframe.postMessage(message, "*");
|
|
4624
4704
|
}
|
|
4625
4705
|
}
|
|
4706
|
+
isSelectMessage(message) {
|
|
4707
|
+
return (typeof message === "object" &&
|
|
4708
|
+
message !== null &&
|
|
4709
|
+
message.action === "select" &&
|
|
4710
|
+
typeof message.id === "string");
|
|
4711
|
+
}
|
|
4626
4712
|
/**
|
|
4627
4713
|
* Get preview id for an entity value for an index
|
|
4628
4714
|
* @param entity the entity type (i.e. "geo")
|
|
@@ -10124,7 +10210,6 @@ class ArticleExtracts {
|
|
|
10124
10210
|
scrollTo(type, index, usePassageHighlighter = false) {
|
|
10125
10211
|
// if previewData contains "matchingpassages" then we use the passage highlighter otherwise we use "extractslocations"
|
|
10126
10212
|
const category = type || this.previewService.highlightCategory;
|
|
10127
|
-
this.previewService.selectedHighlightId.set(`${category}_${index}`);
|
|
10128
10213
|
this.previewService.events.set("scrollTo");
|
|
10129
10214
|
this.previewService.sendMessage({ action: "select", id: `${category}_${index}`, usePassageHighlighter });
|
|
10130
10215
|
}
|
|
@@ -12442,8 +12527,12 @@ class OverrideUserDialogComponent {
|
|
|
12442
12527
|
notify.success(`Welcome back ${fullName}!`, { duration: 2000 });
|
|
12443
12528
|
})
|
|
12444
12529
|
.catch((err) => {
|
|
12530
|
+
// `err.message` already carries the backend's specific reason (e.g. "The user XYZ is
|
|
12531
|
+
// disabled") when @sinequa/atomic's UnauthorizedError is thrown with one — surface it
|
|
12532
|
+
// instead of a generic string so admins know why the override was rejected.
|
|
12533
|
+
const message = err?.message || "An error occurred while overriding";
|
|
12445
12534
|
error("An error occurred while overriding (initialize)", err);
|
|
12446
|
-
notify.error(
|
|
12535
|
+
notify.error(message, { duration: 5000, closeButton: true });
|
|
12447
12536
|
setGlobalConfig({ userOverrideActive: false, userOverride: undefined });
|
|
12448
12537
|
});
|
|
12449
12538
|
}
|
|
@@ -17646,5 +17735,5 @@ const queryNameResolver = () => {
|
|
|
17646
17735
|
* Generated bundle index. Do not edit.
|
|
17647
17736
|
*/
|
|
17648
17737
|
|
|
17649
|
-
export { AGGREGATIONS_NAMES, AGGREGATIONS_NAMES_PRESET_DEFAULT, APP_FEATURES, AdvancedFiltersComponent, AdvancedSearch, AdvancedSearchComponent, AggregationComponent, AggregationDateComponent, AggregationDateRangeDialogComponent, AggregationItemDirective, AggregationListComponent, AggregationPanelComponent, AggregationTreeComponent, AggregationsService, AggregationsStore, Alert, AlertDialog, AlertsComponent, AppService, AppStore, ApplicationService, ApplicationStore, ArticleEntities, ArticleExtracts, ArticleLabels, ArticleSimilarDocuments, AsideFiltersComponent, AuditFeedbackType, AuditService, AuthGuard, AuthPageComponent, AutocompleteService, BOOKMARKS_CONFIG, BOOKMARKS_OPTIONS, BackdropComponent, BackdropService, BookmarkButtonComponent, BookmarksComponent, COLLECTIONS_CONFIG, COLLECTIONS_OPTIONS, COMPONENTS_FOR_DOCUMENT_TYPE, ChangePasswordComponent, ChildMarkerDirective, CollectionsComponent, CollectionsDialog, DRAWER_COMPONENT, DRAWER_STACK_MAX_COUNT, DateComponent, DeleteCollectionDialog, DidYouMeanComponent, DocumentLocatorComponent, DrawerAdvancedFiltersComponent, DrawerComponent, DrawerNavbarComponent, DrawerPreviewComponent, DrawerService, DrawerStackComponent, DrawerStackService, DropdownInputComponent, DropdownListComponent, ErrorComponent, ExportDialog, ExportService, FILTERS_BREAKPOINT, FILTER_DATE_ALLOW_CUSTOM_RANGE, FeatureFlagsDialogComponent, FeedbackDialogComponent, FileSizePipe, FilterButtonComponent, FiltersBarComponent, HIGHLIGHTS, HighlightWordPipe, InfinityScrollDirective, InlineWorker, JsonMethodPluginService, KeyboardNavigatorDirective, LabelService, LabelsEditDialog, LoadingComponent, MetadataComponent, MissingTermsComponent, MoreButtonComponent, MoreComponent, MultiSelectLabelsComponent, MultiSelectionToolbarComponent, NON_SEARCHABLE_COLUMNS, NON_SEARCHABLE_DEFAULTS, NavbarTabsComponent, NavigationService, NoResultComponent, OpenArticleOnCtrlEnterDirective, OperatorPipe, OverflowItemDirective, OverflowManagerDirective, OverflowStopDirective, OverrideUserDialogComponent, PREVIEW_CONFIG, PagerComponent, PreviewNavigator, PreviewService, PrincipalService, PrincipalStore, QueryParamsStore, QueryService, RECENT_SEARCHES_CONFIG, RECENT_SEARCHES_OPTIONS, ROUTE_COMPONENTS, RecentSearchesComponent, ResetUserSettingsDialogComponent, SAVED_SEARCHES_CONFIG, SAVED_SEARCHES_OPTIONS, SavedSearchDialog, SavedSearchesComponent, SavedSearchesService, SearchFeedbackComponent, SearchInputFooter, SearchService, SelectArticleDirective, SelectArticleOnClickDirective, SelectionHistoryService, SelectionService, SelectionStore, ShowBookmarkDirective, SidebarNavComponent, SignInComponent, SignedOutComponent, SortSelectorComponent, SourceComponent, SourceIconPipe, SponsoredResultsComponent, SyslangPipe, THEMES, TextChunkService, ThemeProviderDirective, ThemeSelectorComponent, ThemeStore, ThemeToggleComponent, TranslocoDateImpurePipe, UserProfileDialog, UserProfileFormComponent, UserProfileService, UserSettingsStore, applyThemeToNativeElement, auditInterceptorFn, authInterceptorFn, bodyInterceptorFn, bootstrapApp, buildQuery, debouncedSignal, errorInterceptorFn, getCurrentPath, getCurrentQueryName, getQueryNameFromRoute, injectRouteNavigation, legacyFilterToFilter, processCssVars, queryNameResolver, signIn, themeColorNameToCssVariable, themeColorsToCssVariables, toastInterceptorFn, withAggregationsFeatures, withAlertsFeatures, withAppFeatures, withApplicationFeatures, withAssistantFeatures, withBasketsFeatures, withBookmarkFeatures, withBootstrapApp, withExtractsFeatures, withFetch, withMultiSelectionFeatures,
|
|
17738
|
+
export { AGGREGATIONS_NAMES, AGGREGATIONS_NAMES_PRESET_DEFAULT, APP_FEATURES, AdvancedFiltersComponent, AdvancedSearch, AdvancedSearchComponent, AggregationComponent, AggregationDateComponent, AggregationDateRangeDialogComponent, AggregationItemDirective, AggregationListComponent, AggregationPanelComponent, AggregationTreeComponent, AggregationsService, AggregationsStore, Alert, AlertDialog, AlertsComponent, AppService, AppStore, ApplicationService, ApplicationStore, ArticleEntities, ArticleExtracts, ArticleLabels, ArticleSimilarDocuments, AsideFiltersComponent, AuditFeedbackType, AuditService, AuthGuard, AuthPageComponent, AutocompleteService, BOOKMARKS_CONFIG, BOOKMARKS_OPTIONS, BackdropComponent, BackdropService, BookmarkButtonComponent, BookmarksComponent, COLLECTIONS_CONFIG, COLLECTIONS_OPTIONS, COMPONENTS_FOR_DOCUMENT_TYPE, ChangePasswordComponent, ChildMarkerDirective, CollectionsComponent, CollectionsDialog, DRAWER_COMPONENT, DRAWER_STACK_MAX_COUNT, DateComponent, DeleteCollectionDialog, DidYouMeanComponent, DocumentLocatorComponent, DrawerAdvancedFiltersComponent, DrawerComponent, DrawerNavbarComponent, DrawerPreviewComponent, DrawerService, DrawerStackComponent, DrawerStackService, DropdownInputComponent, DropdownListComponent, ErrorComponent, ExportDialog, ExportService, FILTERS_BREAKPOINT, FILTER_DATE_ALLOW_CUSTOM_RANGE, FeatureFlagsDialogComponent, FeedbackDialogComponent, FileSizePipe, FilterButtonComponent, FiltersBarComponent, HIGHLIGHTS, HighlightWordPipe, InfinityScrollDirective, InlineWorker, JsonMethodPluginService, KeyboardNavigatorDirective, LabelService, LabelsEditDialog, LoadingComponent, MetadataComponent, MissingTermsComponent, MoreButtonComponent, MoreComponent, MultiSelectLabelsComponent, MultiSelectionToolbarComponent, NON_SEARCHABLE_COLUMNS, NON_SEARCHABLE_DEFAULTS, NavbarTabsComponent, NavigationService, NoResultComponent, OpenArticleOnCtrlEnterDirective, OperatorPipe, OverflowItemDirective, OverflowManagerDirective, OverflowStopDirective, OverrideUserDialogComponent, PREVIEW_CONFIG, PagerComponent, PreviewNavigator, PreviewService, PrincipalService, PrincipalStore, QueryParamsStore, QueryService, RECENT_SEARCHES_CONFIG, RECENT_SEARCHES_OPTIONS, ROUTE_COMPONENTS, RecentSearchesComponent, ResetUserSettingsDialogComponent, SAVED_SEARCHES_CONFIG, SAVED_SEARCHES_OPTIONS, SavedSearchDialog, SavedSearchesComponent, SavedSearchesService, SearchFeedbackComponent, SearchInputFooter, SearchService, SelectArticleDirective, SelectArticleOnClickDirective, SelectionHistoryService, SelectionService, SelectionStore, ShowBookmarkDirective, SidebarNavComponent, SignInComponent, SignedOutComponent, SortSelectorComponent, SourceComponent, SourceIconPipe, SponsoredResultsComponent, SyslangPipe, THEMES, TextChunkService, ThemeProviderDirective, ThemeSelectorComponent, ThemeStore, ThemeToggleComponent, TranslocoDateImpurePipe, UserProfileDialog, UserProfileFormComponent, UserProfileService, UserSettingsStore, __resetSignInMutexForTests, applyThemeToNativeElement, auditInterceptorFn, authInterceptorFn, bodyInterceptorFn, bootstrapApp, buildQuery, debouncedSignal, errorInterceptorFn, getCurrentPath, getCurrentQueryName, getQueryNameFromRoute, injectRouteNavigation, legacyFilterToFilter, processCssVars, queryNameResolver, signIn, themeColorNameToCssVariable, themeColorsToCssVariables, toastInterceptorFn, withAggregationsFeatures, withAlertsFeatures, withAppFeatures, withApplicationFeatures, withAssistantFeatures, withBasketsFeatures, withBookmarkFeatures, withBootstrapApp, withExtractsFeatures, withFetch, withMultiSelectionFeatures, withQueryParamsFeatures, withRecentSearchesFeatures, withSavedSearchesFeatures, withSelectionFeatures, withThemeBodyHook, withThemes, withThemesFeatures, withUserSettingsFeatures };
|
|
17650
17739
|
//# sourceMappingURL=sinequa-atomic-angular.mjs.map
|