@edsis/ui 21.3.13 → 21.3.15
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.
|
@@ -5,12 +5,16 @@ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
|
5
5
|
import { Router, NavigationEnd } from '@angular/router';
|
|
6
6
|
|
|
7
7
|
const DEFAULT_NAV_ID = 'default';
|
|
8
|
+
const PERSISTED_NAV_ID = 'main';
|
|
8
9
|
const DEFAULT_VERTICAL_APPEARANCE = 'sidebar';
|
|
9
10
|
const DEFAULT_HORIZONTAL_APPEARANCE = 'navbar';
|
|
10
11
|
const DEFAULT_POSITION = 'left';
|
|
11
12
|
const DEFAULT_DOCKBAR_MODE = 'sticky';
|
|
12
|
-
const
|
|
13
|
-
const
|
|
13
|
+
const INSTANCE_STORAGE_PROPERTIES = ['orientation', 'appearance', 'position', 'collapsed', 'dockbar-mode'];
|
|
14
|
+
const PERSISTED_STORAGE_PROPERTIES = ['orientation', 'appearance', 'position'];
|
|
15
|
+
const APPEARANCE_MODE_STORAGE_KEY = 'nav-appearance-mode';
|
|
16
|
+
const LEGACY_NAV_STORAGE_KEYS = ['nav-vertical-appearance', 'nav-horizontal-appearance'];
|
|
17
|
+
const LEGACY_APPEARANCE_MODE_STORAGE_KEYS = ['nav-collapsed', 'nav-dockbar-mode'];
|
|
14
18
|
class NavService {
|
|
15
19
|
documentRef = inject(DOCUMENT, { optional: true });
|
|
16
20
|
router = inject(Router, { optional: true });
|
|
@@ -32,7 +36,7 @@ class NavService {
|
|
|
32
36
|
matrixParams: 'ignored',
|
|
33
37
|
};
|
|
34
38
|
constructor() {
|
|
35
|
-
this.
|
|
39
|
+
this.cleanupLegacyStorage();
|
|
36
40
|
this.router?.events.pipe(takeUntilDestroyed()).subscribe((event) => {
|
|
37
41
|
if (event instanceof NavigationEnd) {
|
|
38
42
|
this.routerUrl.set(event.urlAfterRedirects);
|
|
@@ -40,7 +44,6 @@ class NavService {
|
|
|
40
44
|
});
|
|
41
45
|
}
|
|
42
46
|
register(input) {
|
|
43
|
-
this.ensureAppearanceDefaults();
|
|
44
47
|
const state = this.resolveState(input);
|
|
45
48
|
this.states.update((states) => ({ ...states, [state.id]: state }));
|
|
46
49
|
this.persistState(state);
|
|
@@ -200,75 +203,83 @@ class NavService {
|
|
|
200
203
|
resolveState(input) {
|
|
201
204
|
const id = this.normalizeId(input.id);
|
|
202
205
|
const orientation = input.orientation;
|
|
206
|
+
const appearance = this.resolveAppearance(id, orientation, input.appearance);
|
|
203
207
|
return {
|
|
204
208
|
id,
|
|
205
209
|
orientation,
|
|
206
|
-
appearance
|
|
210
|
+
appearance,
|
|
207
211
|
position: this.resolvePosition(id, input.position),
|
|
208
|
-
collapsed: this.resolveCollapsed(id, input.collapsed),
|
|
209
|
-
dockbarMode: this.resolveDockbarMode(id, input.dockbarMode),
|
|
212
|
+
collapsed: this.resolveCollapsed(id, appearance, input.collapsed),
|
|
213
|
+
dockbarMode: this.resolveDockbarMode(id, appearance, input.dockbarMode),
|
|
210
214
|
};
|
|
211
215
|
}
|
|
212
216
|
resolveAppearance(id, orientation, appearance) {
|
|
213
217
|
if (this.isAppearanceForOrientation(appearance, orientation)) {
|
|
214
218
|
return appearance;
|
|
215
219
|
}
|
|
216
|
-
const stored = this.
|
|
220
|
+
const stored = this.readInstanceStorage(id, 'appearance');
|
|
217
221
|
if (this.isAppearanceForOrientation(stored, orientation)) {
|
|
218
222
|
return stored;
|
|
219
223
|
}
|
|
220
|
-
return this.
|
|
224
|
+
return this.defaultAppearance(orientation);
|
|
221
225
|
}
|
|
222
226
|
resolvePosition(id, position) {
|
|
223
227
|
if (this.isPosition(position)) {
|
|
224
228
|
return position;
|
|
225
229
|
}
|
|
226
|
-
const stored = this.
|
|
230
|
+
const stored = this.readInstanceStorage(id, 'position');
|
|
227
231
|
return this.isPosition(stored) ? stored : DEFAULT_POSITION;
|
|
228
232
|
}
|
|
229
|
-
resolveCollapsed(id, collapsed) {
|
|
233
|
+
resolveCollapsed(id, appearance, collapsed) {
|
|
230
234
|
if (typeof collapsed === 'boolean') {
|
|
231
235
|
return collapsed;
|
|
232
236
|
}
|
|
233
|
-
|
|
234
|
-
if (stored === 'true') {
|
|
235
|
-
return true;
|
|
236
|
-
}
|
|
237
|
-
if (stored === 'false') {
|
|
237
|
+
if (appearance !== 'sidebar') {
|
|
238
238
|
return false;
|
|
239
239
|
}
|
|
240
|
-
return
|
|
240
|
+
return this.readPersistedAppearanceMode(id) === 'collapsed';
|
|
241
241
|
}
|
|
242
|
-
resolveDockbarMode(id, mode) {
|
|
242
|
+
resolveDockbarMode(id, appearance, mode) {
|
|
243
243
|
if (this.isDockbarMode(mode)) {
|
|
244
244
|
return mode;
|
|
245
245
|
}
|
|
246
|
-
|
|
246
|
+
if (appearance !== 'dockbar') {
|
|
247
|
+
return DEFAULT_DOCKBAR_MODE;
|
|
248
|
+
}
|
|
249
|
+
const stored = this.readPersistedAppearanceMode(id);
|
|
247
250
|
return this.isDockbarMode(stored) ? stored : DEFAULT_DOCKBAR_MODE;
|
|
248
251
|
}
|
|
249
252
|
persistState(state) {
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
this.writeStorage(this.instanceStorageKey(state.id, 'collapsed'), String(state.collapsed));
|
|
254
|
-
this.writeStorage(this.instanceStorageKey(state.id, 'dockbar-mode'), state.dockbarMode);
|
|
255
|
-
}
|
|
256
|
-
readOrientationAppearance(orientation) {
|
|
257
|
-
const key = orientation === 'vertical' ? VERTICAL_APPEARANCE_STORAGE_KEY : HORIZONTAL_APPEARANCE_STORAGE_KEY;
|
|
258
|
-
const fallback = orientation === 'vertical' ? DEFAULT_VERTICAL_APPEARANCE : DEFAULT_HORIZONTAL_APPEARANCE;
|
|
259
|
-
const stored = this.readStorage(key);
|
|
260
|
-
if (this.isAppearanceForOrientation(stored, orientation)) {
|
|
261
|
-
return stored;
|
|
253
|
+
if (!this.shouldPersistInstanceState(state.id)) {
|
|
254
|
+
this.clearInstanceStorage(state.id);
|
|
255
|
+
return;
|
|
262
256
|
}
|
|
263
|
-
this.writeStorage(
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
257
|
+
this.writeStorage(this.persistedStorageKey('orientation'), state.orientation);
|
|
258
|
+
this.writeStorage(this.persistedStorageKey('appearance'), state.appearance);
|
|
259
|
+
this.writeStorage(this.persistedStorageKey('position'), state.position);
|
|
260
|
+
this.writeStorage(APPEARANCE_MODE_STORAGE_KEY, this.persistedAppearanceMode(state));
|
|
261
|
+
}
|
|
262
|
+
defaultAppearance(orientation) {
|
|
263
|
+
return orientation === 'vertical' ? DEFAULT_VERTICAL_APPEARANCE : DEFAULT_HORIZONTAL_APPEARANCE;
|
|
264
|
+
}
|
|
265
|
+
cleanupLegacyStorage() {
|
|
266
|
+
this.migrateLegacyPersistedStorage();
|
|
267
|
+
for (const key of LEGACY_NAV_STORAGE_KEYS) {
|
|
268
|
+
this.removeStorage(key);
|
|
269
|
+
}
|
|
270
|
+
for (const key of LEGACY_APPEARANCE_MODE_STORAGE_KEYS) {
|
|
271
|
+
this.removeStorage(key);
|
|
269
272
|
}
|
|
270
|
-
|
|
271
|
-
|
|
273
|
+
const storage = this.storage();
|
|
274
|
+
const keysToRemove = [];
|
|
275
|
+
for (let index = 0; index < (storage?.length ?? 0); index += 1) {
|
|
276
|
+
const key = storage?.key(index);
|
|
277
|
+
if (key && this.isLegacyInstanceStorageKey(key)) {
|
|
278
|
+
keysToRemove.push(key);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
for (const key of keysToRemove) {
|
|
282
|
+
this.removeStorage(key);
|
|
272
283
|
}
|
|
273
284
|
}
|
|
274
285
|
storage() {
|
|
@@ -287,6 +298,19 @@ class NavService {
|
|
|
287
298
|
return null;
|
|
288
299
|
}
|
|
289
300
|
}
|
|
301
|
+
readInstanceStorage(id, property) {
|
|
302
|
+
if (!this.shouldPersistInstanceState(id)) {
|
|
303
|
+
return null;
|
|
304
|
+
}
|
|
305
|
+
return this.readStorage(this.persistedStorageKey(property));
|
|
306
|
+
}
|
|
307
|
+
readPersistedAppearanceMode(id) {
|
|
308
|
+
if (!this.shouldPersistInstanceState(id)) {
|
|
309
|
+
return null;
|
|
310
|
+
}
|
|
311
|
+
const stored = this.readStorage(APPEARANCE_MODE_STORAGE_KEY);
|
|
312
|
+
return this.isPersistedAppearanceMode(stored) ? stored : null;
|
|
313
|
+
}
|
|
290
314
|
writeStorage(key, value) {
|
|
291
315
|
try {
|
|
292
316
|
this.storage()?.setItem(key, value);
|
|
@@ -295,9 +319,81 @@ class NavService {
|
|
|
295
319
|
return;
|
|
296
320
|
}
|
|
297
321
|
}
|
|
322
|
+
removeStorage(key) {
|
|
323
|
+
try {
|
|
324
|
+
this.storage()?.removeItem(key);
|
|
325
|
+
}
|
|
326
|
+
catch {
|
|
327
|
+
return;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
clearInstanceStorage(id) {
|
|
331
|
+
for (const property of INSTANCE_STORAGE_PROPERTIES) {
|
|
332
|
+
this.removeStorage(this.instanceStorageKey(id, property));
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
migrateLegacyPersistedStorage() {
|
|
336
|
+
for (const property of PERSISTED_STORAGE_PROPERTIES) {
|
|
337
|
+
const nextKey = this.persistedStorageKey(property);
|
|
338
|
+
const legacyKey = this.instanceStorageKey(PERSISTED_NAV_ID, property);
|
|
339
|
+
const nextValue = this.readStorage(nextKey);
|
|
340
|
+
const legacyValue = this.readStorage(legacyKey);
|
|
341
|
+
if (nextValue === null && legacyValue !== null) {
|
|
342
|
+
this.writeStorage(nextKey, legacyValue);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
if (this.readStorage(APPEARANCE_MODE_STORAGE_KEY) !== null) {
|
|
346
|
+
return;
|
|
347
|
+
}
|
|
348
|
+
const migratedAppearanceMode = this.resolveLegacyAppearanceMode();
|
|
349
|
+
if (migratedAppearanceMode !== null) {
|
|
350
|
+
this.writeStorage(APPEARANCE_MODE_STORAGE_KEY, migratedAppearanceMode);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
298
353
|
instanceStorageKey(id, property) {
|
|
299
354
|
return `nav:${id}:${property}`;
|
|
300
355
|
}
|
|
356
|
+
persistedStorageKey(property) {
|
|
357
|
+
return `nav-${property}`;
|
|
358
|
+
}
|
|
359
|
+
persistedAppearanceMode(state) {
|
|
360
|
+
if (state.appearance === 'dockbar') {
|
|
361
|
+
return state.dockbarMode;
|
|
362
|
+
}
|
|
363
|
+
return state.collapsed ? 'collapsed' : 'default';
|
|
364
|
+
}
|
|
365
|
+
resolveLegacyAppearanceMode() {
|
|
366
|
+
const appearance = this.readStorage(this.persistedStorageKey('appearance')) ??
|
|
367
|
+
this.readStorage(this.instanceStorageKey(PERSISTED_NAV_ID, 'appearance'));
|
|
368
|
+
const collapsed = this.readStorage('nav-collapsed') ?? this.readStorage(this.instanceStorageKey(PERSISTED_NAV_ID, 'collapsed'));
|
|
369
|
+
const dockbarMode = this.readStorage('nav-dockbar-mode') ??
|
|
370
|
+
this.readStorage(this.instanceStorageKey(PERSISTED_NAV_ID, 'dockbar-mode'));
|
|
371
|
+
if (appearance === 'dockbar' && this.isDockbarMode(dockbarMode)) {
|
|
372
|
+
return dockbarMode;
|
|
373
|
+
}
|
|
374
|
+
if (appearance === 'sidebar') {
|
|
375
|
+
return collapsed === 'true' ? 'collapsed' : 'default';
|
|
376
|
+
}
|
|
377
|
+
if (this.isDockbarMode(dockbarMode)) {
|
|
378
|
+
return dockbarMode;
|
|
379
|
+
}
|
|
380
|
+
if (collapsed === 'true') {
|
|
381
|
+
return 'collapsed';
|
|
382
|
+
}
|
|
383
|
+
if (collapsed === 'false') {
|
|
384
|
+
return 'default';
|
|
385
|
+
}
|
|
386
|
+
return null;
|
|
387
|
+
}
|
|
388
|
+
shouldPersistInstanceState(id) {
|
|
389
|
+
return id === PERSISTED_NAV_ID;
|
|
390
|
+
}
|
|
391
|
+
isLegacyInstanceStorageKey(key) {
|
|
392
|
+
return key.startsWith('nav:');
|
|
393
|
+
}
|
|
394
|
+
isPersistedAppearanceMode(value) {
|
|
395
|
+
return value === 'default' || value === 'collapsed' || this.isDockbarMode(value);
|
|
396
|
+
}
|
|
301
397
|
normalizeId(id) {
|
|
302
398
|
return id.trim() || DEFAULT_NAV_ID;
|
|
303
399
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edsis-ui-nav-service.mjs","sources":["../../../library/ui/nav/service/nav.service.ts","../../../library/ui/nav/service/edsis-ui-nav-service.ts"],"sourcesContent":["import { DOCUMENT } from '@angular/common';\nimport { Injectable, computed, inject, signal, type Signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NavigationEnd, Router, type IsActiveMatchOptions } from '@angular/router';\nimport type {\n UiNavAppearance,\n UiNavDockbarMode,\n UiNavIconContext,\n UiNavNormalizedItem,\n UiNavOrientation,\n UiNavPosition,\n UiNavRegisterInput,\n UiNavState,\n} from './nav.service.types';\n\nconst DEFAULT_NAV_ID = 'default';\nconst DEFAULT_VERTICAL_APPEARANCE: UiNavAppearance = 'sidebar';\nconst DEFAULT_HORIZONTAL_APPEARANCE: UiNavAppearance = 'navbar';\nconst DEFAULT_POSITION: UiNavPosition = 'left';\nconst DEFAULT_DOCKBAR_MODE: UiNavDockbarMode = 'sticky';\nconst VERTICAL_APPEARANCE_STORAGE_KEY = 'nav-vertical-appearance';\nconst HORIZONTAL_APPEARANCE_STORAGE_KEY = 'nav-horizontal-appearance';\n\n@Injectable({ providedIn: 'root' })\nexport class NavService {\n private readonly documentRef = inject(DOCUMENT, { optional: true });\n private readonly router = inject(Router, { optional: true });\n private readonly routerUrl = signal(this.router?.url ?? '/');\n private readonly states = signal<Record<string, UiNavState>>({});\n private readonly openPanelKeys = signal<Record<string, string | null>>({});\n private readonly drawerOpenState = signal<Record<string, boolean>>({});\n\n readonly openPanelKey = computed(() => this.openPanelKeys()[DEFAULT_NAV_ID] ?? null);\n\n readonly exactMatchOptions: IsActiveMatchOptions = {\n paths: 'exact',\n queryParams: 'exact',\n fragment: 'exact',\n matrixParams: 'exact',\n };\n\n readonly subsetMatchOptions: IsActiveMatchOptions = {\n paths: 'subset',\n queryParams: 'subset',\n fragment: 'ignored',\n matrixParams: 'ignored',\n };\n\n constructor() {\n this.ensureAppearanceDefaults();\n\n this.router?.events.pipe(takeUntilDestroyed()).subscribe((event) => {\n if (event instanceof NavigationEnd) {\n this.routerUrl.set(event.urlAfterRedirects);\n }\n });\n }\n\n register(input: UiNavRegisterInput): UiNavState {\n this.ensureAppearanceDefaults();\n\n const state = this.resolveState(input);\n this.states.update((states) => ({ ...states, [state.id]: state }));\n this.persistState(state);\n\n return state;\n }\n\n unregister(id: string): void {\n const navId = this.normalizeId(id);\n this.states.update((states) => this.withoutKey(states, navId));\n this.openPanelKeys.update((state) => this.withoutKey(state, navId));\n this.drawerOpenState.update((state) => this.withoutKey(state, navId));\n }\n\n state(id: string): Signal<UiNavState | null> {\n const navId = this.normalizeId(id);\n return computed(() => this.states()[navId] ?? null);\n }\n\n currentState(id: string): UiNavState | null {\n return this.states()[this.normalizeId(id)] ?? null;\n }\n\n currentPanelKey(id: string): string | null {\n return this.openPanelKeys()[this.normalizeId(id)] ?? null;\n }\n\n update(id: string, patch: Partial<UiNavRegisterInput>): UiNavState {\n const navId = this.normalizeId(id);\n const current =\n this.states()[navId] ?? this.resolveState({ id: navId, orientation: patch.orientation ?? 'vertical' });\n\n return this.register({\n id: navId,\n orientation: patch.orientation ?? current.orientation,\n appearance: patch.appearance ?? current.appearance,\n position: patch.position ?? current.position,\n collapsed: patch.collapsed ?? current.collapsed,\n dockbarMode: patch.dockbarMode ?? current.dockbarMode,\n });\n }\n\n setAppearance(id: string, appearance: UiNavAppearance): UiNavState {\n return this.update(id, { appearance });\n }\n\n setPosition(id: string, position: UiNavPosition): UiNavState {\n return this.update(id, { position });\n }\n\n setCollapsed(id: string, collapsed: boolean): UiNavState {\n return this.update(id, { collapsed });\n }\n\n toggleCollapsed(id: string): UiNavState {\n const navId = this.normalizeId(id);\n const current = this.states()[navId] ?? this.resolveState({ id: navId, orientation: 'vertical' });\n\n return this.setCollapsed(navId, !current.collapsed);\n }\n\n setDockbarMode(id: string, mode: UiNavDockbarMode): UiNavState {\n return this.update(id, { dockbarMode: mode });\n }\n\n isRouterItem(item: UiNavNormalizedItem): boolean {\n return !!item.link && !item.externalLink;\n }\n\n hrefFor(item: UiNavNormalizedItem): string | null {\n if (item.href) {\n return item.href;\n }\n\n if (item.externalLink && typeof item.link === 'string') {\n return item.link;\n }\n\n return null;\n }\n\n relFor(item: UiNavNormalizedItem): string | null {\n if (item.rel) {\n return item.rel;\n }\n\n return item.target === '_blank' || item.externalLink ? 'noopener noreferrer' : null;\n }\n\n routerLinkActiveOptions(item: UiNavNormalizedItem): IsActiveMatchOptions {\n return item.isActiveMatchOptions ?? (item.exactMatch ? this.exactMatchOptions : this.subsetMatchOptions);\n }\n\n itemRole(orientation: UiNavOrientation, level: number): 'menuitem' | null {\n return orientation === 'horizontal' || level > 0 ? 'menuitem' : null;\n }\n\n compactLabel(item: UiNavNormalizedItem, compact: boolean): string | null {\n return compact ? (item.tooltip ?? item.title ?? null) : null;\n }\n\n titleFor(item: UiNavNormalizedItem, compact: boolean): string | null {\n return item.tooltip ?? (compact ? (item.title ?? null) : null);\n }\n\n compactFallback(item: UiNavNormalizedItem): string {\n return (item.title ?? item.id ?? '?').trim().slice(0, 2);\n }\n\n iconContext(\n item: UiNavNormalizedItem,\n active: boolean,\n level: number,\n orientation: UiNavOrientation,\n ): UiNavIconContext {\n return {\n $implicit: item.icon ?? '',\n icon: item.icon ?? '',\n item: item.source,\n active,\n orientation,\n level,\n };\n }\n\n isItemActive(item: UiNavNormalizedItem, activeIds: ReadonlySet<string>, explicitActiveUrl: string | null): boolean {\n if (item.active || activeIds.has(item.stateId) || activeIds.has(item.key)) {\n return true;\n }\n\n if (this.matchesActiveUrl(item, explicitActiveUrl)) {\n return true;\n }\n\n return item.children.some((child) => this.isItemActive(child, activeIds, explicitActiveUrl));\n }\n\n isPanelOpen(navIdOrItem: string | UiNavNormalizedItem, item?: UiNavNormalizedItem): boolean {\n const { navId, navItem } = this.resolvePanelArgs(navIdOrItem, item);\n\n return this.openPanelKeys()[navId] === navItem.key;\n }\n\n openPanel(navIdOrItem: string | UiNavNormalizedItem, item?: UiNavNormalizedItem): void {\n const { navId, navItem } = this.resolvePanelArgs(navIdOrItem, item);\n\n if (navItem.disabled) {\n return;\n }\n\n this.openPanelKeys.update((state) => ({ ...state, [navId]: navItem.key }));\n }\n\n togglePanel(navIdOrItem: string | UiNavNormalizedItem, item?: UiNavNormalizedItem): void {\n const { navId, navItem } = this.resolvePanelArgs(navIdOrItem, item);\n\n if (navItem.disabled) {\n return;\n }\n\n this.openPanelKeys.update((state) => ({\n ...state,\n [navId]: state[navId] === navItem.key ? null : navItem.key,\n }));\n }\n\n closePanel(id = DEFAULT_NAV_ID): void {\n const navId = this.normalizeId(id);\n this.openPanelKeys.update((state) => ({ ...state, [navId]: null }));\n }\n\n isDrawerOpen(id: string): boolean {\n return this.drawerOpenState()[this.normalizeId(id)] ?? false;\n }\n\n openDrawer(id: string): void {\n const navId = this.normalizeId(id);\n this.drawerOpenState.update((state) => ({ ...state, [navId]: true }));\n }\n\n toggleDrawer(id: string): void {\n const navId = this.normalizeId(id);\n this.drawerOpenState.update((state) => ({ ...state, [navId]: !(state[navId] ?? false) }));\n }\n\n closeDrawer(id: string): void {\n const navId = this.normalizeId(id);\n this.drawerOpenState.update((state) => ({ ...state, [navId]: false }));\n }\n\n private matchesActiveUrl(item: UiNavNormalizedItem, explicitActiveUrl: string | null): boolean {\n if (!item.link || item.externalLink || typeof item.link !== 'string') {\n return false;\n }\n\n const activeUrl = explicitActiveUrl ?? this.routerUrl();\n const link = item.link;\n\n if (link === '/') {\n return activeUrl === '/';\n }\n\n if (item.exactMatch || item.isActiveMatchOptions?.paths === 'exact') {\n return activeUrl === link;\n }\n\n return activeUrl === link || activeUrl.startsWith(`${link}/`) || activeUrl.startsWith(`${link}?`);\n }\n\n private resolveState(input: UiNavRegisterInput): UiNavState {\n const id = this.normalizeId(input.id);\n const orientation = input.orientation;\n\n return {\n id,\n orientation,\n appearance: this.resolveAppearance(id, orientation, input.appearance),\n position: this.resolvePosition(id, input.position),\n collapsed: this.resolveCollapsed(id, input.collapsed),\n dockbarMode: this.resolveDockbarMode(id, input.dockbarMode),\n };\n }\n\n private resolveAppearance(\n id: string,\n orientation: UiNavOrientation,\n appearance: UiNavAppearance | null | undefined,\n ): UiNavAppearance {\n if (this.isAppearanceForOrientation(appearance, orientation)) {\n return appearance;\n }\n\n const stored = this.readStorage(this.instanceStorageKey(id, 'appearance'));\n if (this.isAppearanceForOrientation(stored, orientation)) {\n return stored;\n }\n\n return this.readOrientationAppearance(orientation);\n }\n\n private resolvePosition(id: string, position: UiNavPosition | null | undefined): UiNavPosition {\n if (this.isPosition(position)) {\n return position;\n }\n\n const stored = this.readStorage(this.instanceStorageKey(id, 'position'));\n\n return this.isPosition(stored) ? stored : DEFAULT_POSITION;\n }\n\n private resolveCollapsed(id: string, collapsed: boolean | null | undefined): boolean {\n if (typeof collapsed === 'boolean') {\n return collapsed;\n }\n\n const stored = this.readStorage(this.instanceStorageKey(id, 'collapsed'));\n\n if (stored === 'true') {\n return true;\n }\n\n if (stored === 'false') {\n return false;\n }\n\n return false;\n }\n\n private resolveDockbarMode(id: string, mode: UiNavDockbarMode | null | undefined): UiNavDockbarMode {\n if (this.isDockbarMode(mode)) {\n return mode;\n }\n\n const stored = this.readStorage(this.instanceStorageKey(id, 'dockbar-mode'));\n\n return this.isDockbarMode(stored) ? stored : DEFAULT_DOCKBAR_MODE;\n }\n\n private persistState(state: UiNavState): void {\n this.writeStorage(this.instanceStorageKey(state.id, 'orientation'), state.orientation);\n this.writeStorage(this.instanceStorageKey(state.id, 'appearance'), state.appearance);\n this.writeStorage(this.instanceStorageKey(state.id, 'position'), state.position);\n this.writeStorage(this.instanceStorageKey(state.id, 'collapsed'), String(state.collapsed));\n this.writeStorage(this.instanceStorageKey(state.id, 'dockbar-mode'), state.dockbarMode);\n }\n\n private readOrientationAppearance(orientation: UiNavOrientation): UiNavAppearance {\n const key = orientation === 'vertical' ? VERTICAL_APPEARANCE_STORAGE_KEY : HORIZONTAL_APPEARANCE_STORAGE_KEY;\n const fallback = orientation === 'vertical' ? DEFAULT_VERTICAL_APPEARANCE : DEFAULT_HORIZONTAL_APPEARANCE;\n const stored = this.readStorage(key);\n\n if (this.isAppearanceForOrientation(stored, orientation)) {\n return stored;\n }\n\n this.writeStorage(key, fallback);\n\n return fallback;\n }\n\n private ensureAppearanceDefaults(): void {\n if (!this.isVerticalAppearance(this.readStorage(VERTICAL_APPEARANCE_STORAGE_KEY))) {\n this.writeStorage(VERTICAL_APPEARANCE_STORAGE_KEY, DEFAULT_VERTICAL_APPEARANCE);\n }\n\n if (!this.isHorizontalAppearance(this.readStorage(HORIZONTAL_APPEARANCE_STORAGE_KEY))) {\n this.writeStorage(HORIZONTAL_APPEARANCE_STORAGE_KEY, DEFAULT_HORIZONTAL_APPEARANCE);\n }\n }\n\n private storage(): Storage | null {\n try {\n return this.documentRef?.defaultView?.localStorage ?? null;\n } catch {\n return null;\n }\n }\n\n private readStorage(key: string): string | null {\n try {\n return this.storage()?.getItem(key) ?? null;\n } catch {\n return null;\n }\n }\n\n private writeStorage(key: string, value: string): void {\n try {\n this.storage()?.setItem(key, value);\n } catch {\n return;\n }\n }\n\n private instanceStorageKey(id: string, property: string): string {\n return `nav:${id}:${property}`;\n }\n\n private normalizeId(id: string): string {\n return id.trim() || DEFAULT_NAV_ID;\n }\n\n private withoutKey<T>(record: Record<string, T>, key: string): Record<string, T> {\n const next = { ...record };\n delete next[key];\n\n return next;\n }\n\n private resolvePanelArgs(\n navIdOrItem: string | UiNavNormalizedItem,\n item: UiNavNormalizedItem | undefined,\n ): { navId: string; navItem: UiNavNormalizedItem } {\n if (typeof navIdOrItem === 'string') {\n return { navId: this.normalizeId(navIdOrItem), navItem: item as UiNavNormalizedItem };\n }\n\n return { navId: DEFAULT_NAV_ID, navItem: navIdOrItem };\n }\n\n private isAppearanceForOrientation(\n value: string | null | undefined,\n orientation: UiNavOrientation,\n ): value is UiNavAppearance {\n return orientation === 'vertical' ? this.isVerticalAppearance(value) : this.isHorizontalAppearance(value);\n }\n\n private isVerticalAppearance(value: string | null | undefined): value is 'sidebar' | 'dockbar' {\n return value === 'sidebar' || value === 'dockbar';\n }\n\n private isHorizontalAppearance(value: string | null | undefined): value is 'navbar' | 'flyout' {\n return value === 'navbar' || value === 'flyout';\n }\n\n private isPosition(value: string | null | undefined): value is UiNavPosition {\n return value === 'left' || value === 'right';\n }\n\n private isDockbarMode(value: string | null | undefined): value is UiNavDockbarMode {\n return value === 'drawer' || value === 'sticky';\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"edsis-ui-nav-service.mjs","sources":["../../../library/ui/nav/service/nav.service.ts","../../../library/ui/nav/service/edsis-ui-nav-service.ts"],"sourcesContent":["import { DOCUMENT } from '@angular/common';\nimport { Injectable, computed, inject, signal, type Signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NavigationEnd, Router, type IsActiveMatchOptions } from '@angular/router';\nimport type {\n UiNavAppearance,\n UiNavDockbarMode,\n UiNavIconContext,\n UiNavNormalizedItem,\n UiNavOrientation,\n UiNavPosition,\n UiNavRegisterInput,\n UiNavState,\n} from './nav.service.types';\n\nconst DEFAULT_NAV_ID = 'default';\nconst PERSISTED_NAV_ID = 'main';\nconst DEFAULT_VERTICAL_APPEARANCE: UiNavAppearance = 'sidebar';\nconst DEFAULT_HORIZONTAL_APPEARANCE: UiNavAppearance = 'navbar';\nconst DEFAULT_POSITION: UiNavPosition = 'left';\nconst DEFAULT_DOCKBAR_MODE: UiNavDockbarMode = 'sticky';\nconst INSTANCE_STORAGE_PROPERTIES = ['orientation', 'appearance', 'position', 'collapsed', 'dockbar-mode'] as const;\ntype InstanceStorageProperty = (typeof INSTANCE_STORAGE_PROPERTIES)[number];\nconst PERSISTED_STORAGE_PROPERTIES = ['orientation', 'appearance', 'position'] as const;\ntype PersistedStorageProperty = (typeof PERSISTED_STORAGE_PROPERTIES)[number];\ntype UiNavPersistedAppearanceMode = 'default' | 'collapsed' | UiNavDockbarMode;\nconst APPEARANCE_MODE_STORAGE_KEY = 'nav-appearance-mode';\nconst LEGACY_NAV_STORAGE_KEYS = ['nav-vertical-appearance', 'nav-horizontal-appearance'] as const;\nconst LEGACY_APPEARANCE_MODE_STORAGE_KEYS = ['nav-collapsed', 'nav-dockbar-mode'] as const;\n\n@Injectable({ providedIn: 'root' })\nexport class NavService {\n private readonly documentRef = inject(DOCUMENT, { optional: true });\n private readonly router = inject(Router, { optional: true });\n private readonly routerUrl = signal(this.router?.url ?? '/');\n private readonly states = signal<Record<string, UiNavState>>({});\n private readonly openPanelKeys = signal<Record<string, string | null>>({});\n private readonly drawerOpenState = signal<Record<string, boolean>>({});\n\n readonly openPanelKey = computed(() => this.openPanelKeys()[DEFAULT_NAV_ID] ?? null);\n\n readonly exactMatchOptions: IsActiveMatchOptions = {\n paths: 'exact',\n queryParams: 'exact',\n fragment: 'exact',\n matrixParams: 'exact',\n };\n\n readonly subsetMatchOptions: IsActiveMatchOptions = {\n paths: 'subset',\n queryParams: 'subset',\n fragment: 'ignored',\n matrixParams: 'ignored',\n };\n\n constructor() {\n this.cleanupLegacyStorage();\n\n this.router?.events.pipe(takeUntilDestroyed()).subscribe((event) => {\n if (event instanceof NavigationEnd) {\n this.routerUrl.set(event.urlAfterRedirects);\n }\n });\n }\n\n register(input: UiNavRegisterInput): UiNavState {\n const state = this.resolveState(input);\n this.states.update((states) => ({ ...states, [state.id]: state }));\n this.persistState(state);\n\n return state;\n }\n\n unregister(id: string): void {\n const navId = this.normalizeId(id);\n this.states.update((states) => this.withoutKey(states, navId));\n this.openPanelKeys.update((state) => this.withoutKey(state, navId));\n this.drawerOpenState.update((state) => this.withoutKey(state, navId));\n }\n\n state(id: string): Signal<UiNavState | null> {\n const navId = this.normalizeId(id);\n return computed(() => this.states()[navId] ?? null);\n }\n\n currentState(id: string): UiNavState | null {\n return this.states()[this.normalizeId(id)] ?? null;\n }\n\n currentPanelKey(id: string): string | null {\n return this.openPanelKeys()[this.normalizeId(id)] ?? null;\n }\n\n update(id: string, patch: Partial<UiNavRegisterInput>): UiNavState {\n const navId = this.normalizeId(id);\n const current =\n this.states()[navId] ?? this.resolveState({ id: navId, orientation: patch.orientation ?? 'vertical' });\n\n return this.register({\n id: navId,\n orientation: patch.orientation ?? current.orientation,\n appearance: patch.appearance ?? current.appearance,\n position: patch.position ?? current.position,\n collapsed: patch.collapsed ?? current.collapsed,\n dockbarMode: patch.dockbarMode ?? current.dockbarMode,\n });\n }\n\n setAppearance(id: string, appearance: UiNavAppearance): UiNavState {\n return this.update(id, { appearance });\n }\n\n setPosition(id: string, position: UiNavPosition): UiNavState {\n return this.update(id, { position });\n }\n\n setCollapsed(id: string, collapsed: boolean): UiNavState {\n return this.update(id, { collapsed });\n }\n\n toggleCollapsed(id: string): UiNavState {\n const navId = this.normalizeId(id);\n const current = this.states()[navId] ?? this.resolveState({ id: navId, orientation: 'vertical' });\n\n return this.setCollapsed(navId, !current.collapsed);\n }\n\n setDockbarMode(id: string, mode: UiNavDockbarMode): UiNavState {\n return this.update(id, { dockbarMode: mode });\n }\n\n isRouterItem(item: UiNavNormalizedItem): boolean {\n return !!item.link && !item.externalLink;\n }\n\n hrefFor(item: UiNavNormalizedItem): string | null {\n if (item.href) {\n return item.href;\n }\n\n if (item.externalLink && typeof item.link === 'string') {\n return item.link;\n }\n\n return null;\n }\n\n relFor(item: UiNavNormalizedItem): string | null {\n if (item.rel) {\n return item.rel;\n }\n\n return item.target === '_blank' || item.externalLink ? 'noopener noreferrer' : null;\n }\n\n routerLinkActiveOptions(item: UiNavNormalizedItem): IsActiveMatchOptions {\n return item.isActiveMatchOptions ?? (item.exactMatch ? this.exactMatchOptions : this.subsetMatchOptions);\n }\n\n itemRole(orientation: UiNavOrientation, level: number): 'menuitem' | null {\n return orientation === 'horizontal' || level > 0 ? 'menuitem' : null;\n }\n\n compactLabel(item: UiNavNormalizedItem, compact: boolean): string | null {\n return compact ? (item.tooltip ?? item.title ?? null) : null;\n }\n\n titleFor(item: UiNavNormalizedItem, compact: boolean): string | null {\n return item.tooltip ?? (compact ? (item.title ?? null) : null);\n }\n\n compactFallback(item: UiNavNormalizedItem): string {\n return (item.title ?? item.id ?? '?').trim().slice(0, 2);\n }\n\n iconContext(\n item: UiNavNormalizedItem,\n active: boolean,\n level: number,\n orientation: UiNavOrientation,\n ): UiNavIconContext {\n return {\n $implicit: item.icon ?? '',\n icon: item.icon ?? '',\n item: item.source,\n active,\n orientation,\n level,\n };\n }\n\n isItemActive(item: UiNavNormalizedItem, activeIds: ReadonlySet<string>, explicitActiveUrl: string | null): boolean {\n if (item.active || activeIds.has(item.stateId) || activeIds.has(item.key)) {\n return true;\n }\n\n if (this.matchesActiveUrl(item, explicitActiveUrl)) {\n return true;\n }\n\n return item.children.some((child) => this.isItemActive(child, activeIds, explicitActiveUrl));\n }\n\n isPanelOpen(navIdOrItem: string | UiNavNormalizedItem, item?: UiNavNormalizedItem): boolean {\n const { navId, navItem } = this.resolvePanelArgs(navIdOrItem, item);\n\n return this.openPanelKeys()[navId] === navItem.key;\n }\n\n openPanel(navIdOrItem: string | UiNavNormalizedItem, item?: UiNavNormalizedItem): void {\n const { navId, navItem } = this.resolvePanelArgs(navIdOrItem, item);\n\n if (navItem.disabled) {\n return;\n }\n\n this.openPanelKeys.update((state) => ({ ...state, [navId]: navItem.key }));\n }\n\n togglePanel(navIdOrItem: string | UiNavNormalizedItem, item?: UiNavNormalizedItem): void {\n const { navId, navItem } = this.resolvePanelArgs(navIdOrItem, item);\n\n if (navItem.disabled) {\n return;\n }\n\n this.openPanelKeys.update((state) => ({\n ...state,\n [navId]: state[navId] === navItem.key ? null : navItem.key,\n }));\n }\n\n closePanel(id = DEFAULT_NAV_ID): void {\n const navId = this.normalizeId(id);\n this.openPanelKeys.update((state) => ({ ...state, [navId]: null }));\n }\n\n isDrawerOpen(id: string): boolean {\n return this.drawerOpenState()[this.normalizeId(id)] ?? false;\n }\n\n openDrawer(id: string): void {\n const navId = this.normalizeId(id);\n this.drawerOpenState.update((state) => ({ ...state, [navId]: true }));\n }\n\n toggleDrawer(id: string): void {\n const navId = this.normalizeId(id);\n this.drawerOpenState.update((state) => ({ ...state, [navId]: !(state[navId] ?? false) }));\n }\n\n closeDrawer(id: string): void {\n const navId = this.normalizeId(id);\n this.drawerOpenState.update((state) => ({ ...state, [navId]: false }));\n }\n\n private matchesActiveUrl(item: UiNavNormalizedItem, explicitActiveUrl: string | null): boolean {\n if (!item.link || item.externalLink || typeof item.link !== 'string') {\n return false;\n }\n\n const activeUrl = explicitActiveUrl ?? this.routerUrl();\n const link = item.link;\n\n if (link === '/') {\n return activeUrl === '/';\n }\n\n if (item.exactMatch || item.isActiveMatchOptions?.paths === 'exact') {\n return activeUrl === link;\n }\n\n return activeUrl === link || activeUrl.startsWith(`${link}/`) || activeUrl.startsWith(`${link}?`);\n }\n\n private resolveState(input: UiNavRegisterInput): UiNavState {\n const id = this.normalizeId(input.id);\n const orientation = input.orientation;\n const appearance = this.resolveAppearance(id, orientation, input.appearance);\n\n return {\n id,\n orientation,\n appearance,\n position: this.resolvePosition(id, input.position),\n collapsed: this.resolveCollapsed(id, appearance, input.collapsed),\n dockbarMode: this.resolveDockbarMode(id, appearance, input.dockbarMode),\n };\n }\n\n private resolveAppearance(\n id: string,\n orientation: UiNavOrientation,\n appearance: UiNavAppearance | null | undefined,\n ): UiNavAppearance {\n if (this.isAppearanceForOrientation(appearance, orientation)) {\n return appearance;\n }\n\n const stored = this.readInstanceStorage(id, 'appearance');\n if (this.isAppearanceForOrientation(stored, orientation)) {\n return stored;\n }\n\n return this.defaultAppearance(orientation);\n }\n\n private resolvePosition(id: string, position: UiNavPosition | null | undefined): UiNavPosition {\n if (this.isPosition(position)) {\n return position;\n }\n\n const stored = this.readInstanceStorage(id, 'position');\n\n return this.isPosition(stored) ? stored : DEFAULT_POSITION;\n }\n\n private resolveCollapsed(\n id: string,\n appearance: UiNavAppearance | null | undefined,\n collapsed: boolean | null | undefined,\n ): boolean {\n if (typeof collapsed === 'boolean') {\n return collapsed;\n }\n\n if (appearance !== 'sidebar') {\n return false;\n }\n\n return this.readPersistedAppearanceMode(id) === 'collapsed';\n }\n\n private resolveDockbarMode(\n id: string,\n appearance: UiNavAppearance | null | undefined,\n mode: UiNavDockbarMode | null | undefined,\n ): UiNavDockbarMode {\n if (this.isDockbarMode(mode)) {\n return mode;\n }\n\n if (appearance !== 'dockbar') {\n return DEFAULT_DOCKBAR_MODE;\n }\n\n const stored = this.readPersistedAppearanceMode(id);\n\n return this.isDockbarMode(stored) ? stored : DEFAULT_DOCKBAR_MODE;\n }\n\n private persistState(state: UiNavState): void {\n if (!this.shouldPersistInstanceState(state.id)) {\n this.clearInstanceStorage(state.id);\n return;\n }\n\n this.writeStorage(this.persistedStorageKey('orientation'), state.orientation);\n this.writeStorage(this.persistedStorageKey('appearance'), state.appearance);\n this.writeStorage(this.persistedStorageKey('position'), state.position);\n this.writeStorage(APPEARANCE_MODE_STORAGE_KEY, this.persistedAppearanceMode(state));\n }\n\n private defaultAppearance(orientation: UiNavOrientation): UiNavAppearance {\n return orientation === 'vertical' ? DEFAULT_VERTICAL_APPEARANCE : DEFAULT_HORIZONTAL_APPEARANCE;\n }\n\n private cleanupLegacyStorage(): void {\n this.migrateLegacyPersistedStorage();\n\n for (const key of LEGACY_NAV_STORAGE_KEYS) {\n this.removeStorage(key);\n }\n\n for (const key of LEGACY_APPEARANCE_MODE_STORAGE_KEYS) {\n this.removeStorage(key);\n }\n\n const storage = this.storage();\n const keysToRemove: string[] = [];\n\n for (let index = 0; index < (storage?.length ?? 0); index += 1) {\n const key = storage?.key(index);\n\n if (key && this.isLegacyInstanceStorageKey(key)) {\n keysToRemove.push(key);\n }\n }\n\n for (const key of keysToRemove) {\n this.removeStorage(key);\n }\n }\n\n private storage(): Storage | null {\n try {\n return this.documentRef?.defaultView?.localStorage ?? null;\n } catch {\n return null;\n }\n }\n\n private readStorage(key: string): string | null {\n try {\n return this.storage()?.getItem(key) ?? null;\n } catch {\n return null;\n }\n }\n\n private readInstanceStorage(id: string, property: PersistedStorageProperty): string | null {\n if (!this.shouldPersistInstanceState(id)) {\n return null;\n }\n\n return this.readStorage(this.persistedStorageKey(property));\n }\n\n private readPersistedAppearanceMode(id: string): UiNavPersistedAppearanceMode | null {\n if (!this.shouldPersistInstanceState(id)) {\n return null;\n }\n\n const stored = this.readStorage(APPEARANCE_MODE_STORAGE_KEY);\n\n return this.isPersistedAppearanceMode(stored) ? stored : null;\n }\n\n private writeStorage(key: string, value: string): void {\n try {\n this.storage()?.setItem(key, value);\n } catch {\n return;\n }\n }\n\n private removeStorage(key: string): void {\n try {\n this.storage()?.removeItem(key);\n } catch {\n return;\n }\n }\n\n private clearInstanceStorage(id: string): void {\n for (const property of INSTANCE_STORAGE_PROPERTIES) {\n this.removeStorage(this.instanceStorageKey(id, property));\n }\n }\n\n private migrateLegacyPersistedStorage(): void {\n for (const property of PERSISTED_STORAGE_PROPERTIES) {\n const nextKey = this.persistedStorageKey(property);\n const legacyKey = this.instanceStorageKey(PERSISTED_NAV_ID, property);\n const nextValue = this.readStorage(nextKey);\n const legacyValue = this.readStorage(legacyKey);\n\n if (nextValue === null && legacyValue !== null) {\n this.writeStorage(nextKey, legacyValue);\n }\n }\n\n if (this.readStorage(APPEARANCE_MODE_STORAGE_KEY) !== null) {\n return;\n }\n\n const migratedAppearanceMode = this.resolveLegacyAppearanceMode();\n\n if (migratedAppearanceMode !== null) {\n this.writeStorage(APPEARANCE_MODE_STORAGE_KEY, migratedAppearanceMode);\n }\n }\n\n private instanceStorageKey(id: string, property: string): string {\n return `nav:${id}:${property}`;\n }\n\n private persistedStorageKey(property: PersistedStorageProperty): string {\n return `nav-${property}`;\n }\n\n private persistedAppearanceMode(state: UiNavState): UiNavPersistedAppearanceMode {\n if (state.appearance === 'dockbar') {\n return state.dockbarMode;\n }\n\n return state.collapsed ? 'collapsed' : 'default';\n }\n\n private resolveLegacyAppearanceMode(): UiNavPersistedAppearanceMode | null {\n const appearance =\n this.readStorage(this.persistedStorageKey('appearance')) ??\n this.readStorage(this.instanceStorageKey(PERSISTED_NAV_ID, 'appearance'));\n const collapsed =\n this.readStorage('nav-collapsed') ?? this.readStorage(this.instanceStorageKey(PERSISTED_NAV_ID, 'collapsed'));\n const dockbarMode =\n this.readStorage('nav-dockbar-mode') ??\n this.readStorage(this.instanceStorageKey(PERSISTED_NAV_ID, 'dockbar-mode'));\n\n if (appearance === 'dockbar' && this.isDockbarMode(dockbarMode)) {\n return dockbarMode;\n }\n\n if (appearance === 'sidebar') {\n return collapsed === 'true' ? 'collapsed' : 'default';\n }\n\n if (this.isDockbarMode(dockbarMode)) {\n return dockbarMode;\n }\n\n if (collapsed === 'true') {\n return 'collapsed';\n }\n\n if (collapsed === 'false') {\n return 'default';\n }\n\n return null;\n }\n\n private shouldPersistInstanceState(id: string): boolean {\n return id === PERSISTED_NAV_ID;\n }\n\n private isLegacyInstanceStorageKey(key: string): boolean {\n return key.startsWith('nav:');\n }\n\n private isPersistedAppearanceMode(value: string | null | undefined): value is UiNavPersistedAppearanceMode {\n return value === 'default' || value === 'collapsed' || this.isDockbarMode(value);\n }\n\n private normalizeId(id: string): string {\n return id.trim() || DEFAULT_NAV_ID;\n }\n\n private withoutKey<T>(record: Record<string, T>, key: string): Record<string, T> {\n const next = { ...record };\n delete next[key];\n\n return next;\n }\n\n private resolvePanelArgs(\n navIdOrItem: string | UiNavNormalizedItem,\n item: UiNavNormalizedItem | undefined,\n ): { navId: string; navItem: UiNavNormalizedItem } {\n if (typeof navIdOrItem === 'string') {\n return { navId: this.normalizeId(navIdOrItem), navItem: item as UiNavNormalizedItem };\n }\n\n return { navId: DEFAULT_NAV_ID, navItem: navIdOrItem };\n }\n\n private isAppearanceForOrientation(\n value: string | null | undefined,\n orientation: UiNavOrientation,\n ): value is UiNavAppearance {\n return orientation === 'vertical' ? this.isVerticalAppearance(value) : this.isHorizontalAppearance(value);\n }\n\n private isVerticalAppearance(value: string | null | undefined): value is 'sidebar' | 'dockbar' {\n return value === 'sidebar' || value === 'dockbar';\n }\n\n private isHorizontalAppearance(value: string | null | undefined): value is 'navbar' | 'flyout' {\n return value === 'navbar' || value === 'flyout';\n }\n\n private isPosition(value: string | null | undefined): value is UiNavPosition {\n return value === 'left' || value === 'right';\n }\n\n private isDockbarMode(value: string | null | undefined): value is UiNavDockbarMode {\n return value === 'drawer' || value === 'sticky';\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|