@ojiepermana/angular-navigation 22.0.27

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.
@@ -0,0 +1,510 @@
1
+ import { DOCUMENT } from '@angular/common';
2
+ import * as i0 from '@angular/core';
3
+ import { inject, signal, computed, isDevMode, Service } from '@angular/core';
4
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
5
+ import { Router, NavigationEnd } from '@angular/router';
6
+
7
+ const DEFAULT_NAV_ID = 'default';
8
+ const PERSISTED_NAV_ID = 'main';
9
+ const DEFAULT_VERTICAL_TYPE = 'sidebar';
10
+ const DEFAULT_HORIZONTAL_TYPE = 'navbar';
11
+ const DEFAULT_VERTICAL_POSITION = 'left';
12
+ const DEFAULT_HORIZONTAL_POSITION = 'top';
13
+ const DEFAULT_DOCKBAR_MODE = 'sticky';
14
+ /** Nama properti per-instance generasi lama (`nav:<id>:<properti>`) yang dibersihkan saat migrasi. */
15
+ const INSTANCE_STORAGE_PROPERTIES = ['orientation', 'appearance', 'position', 'collapsed', 'dockbar-mode'];
16
+ const PERSISTED_STORAGE_PROPERTIES = ['orientation', 'type', 'position'];
17
+ const TYPE_MODE_STORAGE_KEY = 'nav-type-mode';
18
+ /** Nama properti legacy untuk tiap properti persisted saat membaca key `nav:<id>:*` generasi lama. */
19
+ const LEGACY_PROPERTY_NAMES = {
20
+ orientation: 'orientation',
21
+ type: 'appearance',
22
+ position: 'position',
23
+ };
24
+ const LEGACY_NAV_STORAGE_KEYS = ['nav-appearance', 'nav-vertical-appearance', 'nav-horizontal-appearance'];
25
+ const LEGACY_TYPE_MODE_STORAGE_KEYS = ['nav-appearance-mode', 'nav-collapsed', 'nav-dockbar-mode'];
26
+ class NavigationService {
27
+ documentRef = inject(DOCUMENT, { optional: true });
28
+ router = inject(Router, { optional: true });
29
+ routerUrl = signal(this.router?.url ?? '/', /* @ts-ignore */
30
+ ...(ngDevMode ? [{ debugName: "routerUrl" }] : /* istanbul ignore next */ []));
31
+ states = signal({}, /* @ts-ignore */
32
+ ...(ngDevMode ? [{ debugName: "states" }] : /* istanbul ignore next */ []));
33
+ openPanelKeys = signal({}, /* @ts-ignore */
34
+ ...(ngDevMode ? [{ debugName: "openPanelKeys" }] : /* istanbul ignore next */ []));
35
+ drawerOpenState = signal({}, /* @ts-ignore */
36
+ ...(ngDevMode ? [{ debugName: "drawerOpenState" }] : /* istanbul ignore next */ []));
37
+ /** id navigasi → token owner instance, untuk menjaga setiap id hanya dipakai satu <Navigation> hidup. */
38
+ idOwners = new Map();
39
+ openPanelKey = computed(() => this.openPanelKeys()[DEFAULT_NAV_ID] ?? null, /* @ts-ignore */
40
+ ...(ngDevMode ? [{ debugName: "openPanelKey" }] : /* istanbul ignore next */ []));
41
+ exactMatchOptions = {
42
+ paths: 'exact',
43
+ queryParams: 'exact',
44
+ fragment: 'exact',
45
+ matrixParams: 'exact',
46
+ };
47
+ subsetMatchOptions = {
48
+ paths: 'subset',
49
+ queryParams: 'subset',
50
+ fragment: 'ignored',
51
+ matrixParams: 'ignored',
52
+ };
53
+ constructor() {
54
+ this.cleanupLegacyStorage();
55
+ this.router?.events.pipe(takeUntilDestroyed()).subscribe((event) => {
56
+ if (event instanceof NavigationEnd) {
57
+ this.routerUrl.set(event.urlAfterRedirects);
58
+ }
59
+ });
60
+ }
61
+ register(input, owner) {
62
+ const state = this.resolveState(input);
63
+ this.claimId(state.id, owner);
64
+ this.states.update((states) => ({ ...states, [state.id]: state }));
65
+ this.persistState(state);
66
+ return state;
67
+ }
68
+ unregister(id, owner) {
69
+ const navId = this.normalizeId(id);
70
+ this.releaseId(navId, owner);
71
+ this.states.update((states) => this.withoutKey(states, navId));
72
+ this.openPanelKeys.update((state) => this.withoutKey(state, navId));
73
+ this.drawerOpenState.update((state) => this.withoutKey(state, navId));
74
+ }
75
+ /**
76
+ * Validasi keunikan id navigasi: setiap instance `<Navigation>` wajib memakai id unik.
77
+ * `owner` adalah token unik per instance — klaim ulang oleh owner yang sama (mis. perubahan
78
+ * input) diizinkan, tetapi dua instance hidup dengan id sama dianggap salah konfigurasi dan
79
+ * melempar error di mode dev. Pemanggil tanpa owner (akses langsung service) dilewati.
80
+ */
81
+ claimId(id, owner) {
82
+ if (owner === undefined) {
83
+ return;
84
+ }
85
+ const currentOwner = this.idOwners.get(id);
86
+ if (currentOwner !== undefined && currentOwner !== owner && isDevMode()) {
87
+ throw new Error(`[Navigation] Duplikasi id navigasi "${id}". Setiap <Navigation> wajib memakai id unik. ` +
88
+ `Id "main" dikhususkan untuk navigasi utama pada layout/shell (block-shell).`);
89
+ }
90
+ this.idOwners.set(id, owner);
91
+ }
92
+ releaseId(id, owner) {
93
+ if (owner === undefined || this.idOwners.get(id) === owner) {
94
+ this.idOwners.delete(id);
95
+ }
96
+ }
97
+ state(id) {
98
+ const navId = this.normalizeId(id);
99
+ return computed(() => this.states()[navId] ?? null);
100
+ }
101
+ currentState(id) {
102
+ return this.states()[this.normalizeId(id)] ?? null;
103
+ }
104
+ currentPanelKey(id) {
105
+ return this.openPanelKeys()[this.normalizeId(id)] ?? null;
106
+ }
107
+ update(id, patch) {
108
+ const navId = this.normalizeId(id);
109
+ const current = this.states()[navId] ?? this.resolveState({ id: navId, orientation: patch.orientation ?? 'vertical' });
110
+ return this.register({
111
+ id: navId,
112
+ orientation: patch.orientation ?? current.orientation,
113
+ type: patch.type ?? current.type,
114
+ position: patch.position ?? current.position,
115
+ collapsed: patch.collapsed ?? current.collapsed,
116
+ dockbarMode: patch.dockbarMode ?? current.dockbarMode,
117
+ });
118
+ }
119
+ setType(id, type) {
120
+ return this.update(id, { type });
121
+ }
122
+ setPosition(id, position) {
123
+ return this.update(id, { position });
124
+ }
125
+ setCollapsed(id, collapsed) {
126
+ return this.update(id, { collapsed });
127
+ }
128
+ toggleCollapsed(id) {
129
+ const navId = this.normalizeId(id);
130
+ const current = this.states()[navId] ?? this.resolveState({ id: navId, orientation: 'vertical' });
131
+ return this.setCollapsed(navId, !current.collapsed);
132
+ }
133
+ setDockbarMode(id, mode) {
134
+ return this.update(id, { dockbarMode: mode });
135
+ }
136
+ isRouterItem(item) {
137
+ return !!item.link && !item.externalLink;
138
+ }
139
+ hrefFor(item) {
140
+ if (item.href) {
141
+ return item.href;
142
+ }
143
+ if (item.externalLink && typeof item.link === 'string') {
144
+ return item.link;
145
+ }
146
+ return null;
147
+ }
148
+ relFor(item) {
149
+ if (item.rel) {
150
+ return item.rel;
151
+ }
152
+ return item.target === '_blank' || item.externalLink ? 'noopener noreferrer' : null;
153
+ }
154
+ routerLinkActiveOptions(item) {
155
+ return item.isActiveMatchOptions ?? (item.exactMatch ? this.exactMatchOptions : this.subsetMatchOptions);
156
+ }
157
+ itemRole(orientation, level) {
158
+ return orientation === 'horizontal' || level > 0 ? 'menuitem' : null;
159
+ }
160
+ compactLabel(item, compact) {
161
+ return compact ? (item.tooltip ?? item.title ?? null) : null;
162
+ }
163
+ titleFor(item, compact) {
164
+ return item.tooltip ?? (compact ? (item.title ?? null) : null);
165
+ }
166
+ compactFallback(item) {
167
+ return (item.title ?? item.id ?? '?').trim().slice(0, 2);
168
+ }
169
+ iconContext(item, active, level, orientation) {
170
+ return {
171
+ $implicit: item.icon ?? '',
172
+ icon: item.icon ?? '',
173
+ item: item.source,
174
+ active,
175
+ orientation,
176
+ level,
177
+ };
178
+ }
179
+ isItemActive(item, activeIds, explicitActiveUrl) {
180
+ if (item.active || activeIds.has(item.stateId) || activeIds.has(item.key)) {
181
+ return true;
182
+ }
183
+ if (this.matchesActiveUrl(item, explicitActiveUrl)) {
184
+ return true;
185
+ }
186
+ return item.children.some((child) => this.isItemActive(child, activeIds, explicitActiveUrl));
187
+ }
188
+ isPanelOpen(navIdOrItem, item) {
189
+ const { navId, navItem } = this.resolvePanelArgs(navIdOrItem, item);
190
+ return this.openPanelKeys()[navId] === navItem.key;
191
+ }
192
+ openPanel(navIdOrItem, item) {
193
+ const { navId, navItem } = this.resolvePanelArgs(navIdOrItem, item);
194
+ if (navItem.disabled) {
195
+ return;
196
+ }
197
+ this.openPanelKeys.update((state) => ({ ...state, [navId]: navItem.key }));
198
+ }
199
+ togglePanel(navIdOrItem, item) {
200
+ const { navId, navItem } = this.resolvePanelArgs(navIdOrItem, item);
201
+ if (navItem.disabled) {
202
+ return;
203
+ }
204
+ this.openPanelKeys.update((state) => ({
205
+ ...state,
206
+ [navId]: state[navId] === navItem.key ? null : navItem.key,
207
+ }));
208
+ }
209
+ closePanel(id = DEFAULT_NAV_ID) {
210
+ const navId = this.normalizeId(id);
211
+ this.openPanelKeys.update((state) => ({ ...state, [navId]: null }));
212
+ }
213
+ dockbarGroups(items) {
214
+ return items.filter((item) => item.children.length > 0);
215
+ }
216
+ resolveDockbarGroup(id, items, mode, activeIds, activeUrl) {
217
+ const groups = this.dockbarGroups(items);
218
+ const panelKey = this.openPanelKeys()[this.normalizeId(id)] ?? null;
219
+ if (panelKey !== null) {
220
+ const explicit = groups.find((group) => group.key === panelKey);
221
+ if (explicit) {
222
+ return explicit;
223
+ }
224
+ }
225
+ if (mode !== 'sticky') {
226
+ return null;
227
+ }
228
+ return groups.find((group) => this.isItemActive(group, activeIds, activeUrl)) ?? null;
229
+ }
230
+ isDrawerOpen(id) {
231
+ return this.drawerOpenState()[this.normalizeId(id)] ?? false;
232
+ }
233
+ openDrawer(id) {
234
+ const navId = this.normalizeId(id);
235
+ this.drawerOpenState.update((state) => ({ ...state, [navId]: true }));
236
+ }
237
+ toggleDrawer(id) {
238
+ const navId = this.normalizeId(id);
239
+ this.drawerOpenState.update((state) => ({ ...state, [navId]: !(state[navId] ?? false) }));
240
+ }
241
+ closeDrawer(id) {
242
+ const navId = this.normalizeId(id);
243
+ this.drawerOpenState.update((state) => ({ ...state, [navId]: false }));
244
+ }
245
+ matchesActiveUrl(item, explicitActiveUrl) {
246
+ if (!item.link || item.externalLink || typeof item.link !== 'string') {
247
+ return false;
248
+ }
249
+ const activeUrl = explicitActiveUrl ?? this.routerUrl();
250
+ const link = item.link;
251
+ if (link === '/') {
252
+ return activeUrl === '/';
253
+ }
254
+ if (item.exactMatch || item.isActiveMatchOptions?.paths === 'exact') {
255
+ return activeUrl === link;
256
+ }
257
+ return activeUrl === link || activeUrl.startsWith(`${link}/`) || activeUrl.startsWith(`${link}?`);
258
+ }
259
+ resolveState(input) {
260
+ const id = this.normalizeId(input.id);
261
+ const orientation = input.orientation;
262
+ const type = this.resolveType(id, orientation, input.type);
263
+ return {
264
+ id,
265
+ orientation,
266
+ type,
267
+ position: this.resolvePosition(id, orientation, input.position),
268
+ collapsed: this.resolveCollapsed(id, type, input.collapsed),
269
+ dockbarMode: this.resolveDockbarMode(id, type, input.dockbarMode),
270
+ };
271
+ }
272
+ resolveType(id, orientation, type) {
273
+ if (this.isTypeForOrientation(type, orientation)) {
274
+ return type;
275
+ }
276
+ const stored = this.readInstanceStorage(id, 'type');
277
+ if (this.isTypeForOrientation(stored, orientation)) {
278
+ return stored;
279
+ }
280
+ return this.defaultType(orientation);
281
+ }
282
+ resolvePosition(id, orientation, position) {
283
+ if (this.isPositionForOrientation(position, orientation)) {
284
+ return position;
285
+ }
286
+ const stored = this.readInstanceStorage(id, 'position');
287
+ if (this.isPositionForOrientation(stored, orientation)) {
288
+ return stored;
289
+ }
290
+ return orientation === 'horizontal' ? DEFAULT_HORIZONTAL_POSITION : DEFAULT_VERTICAL_POSITION;
291
+ }
292
+ resolveCollapsed(id, type, collapsed) {
293
+ if (typeof collapsed === 'boolean') {
294
+ return collapsed;
295
+ }
296
+ if (type !== 'sidebar') {
297
+ return false;
298
+ }
299
+ return this.readPersistedTypeMode(id) === 'collapsed';
300
+ }
301
+ resolveDockbarMode(id, type, mode) {
302
+ if (this.isDockbarMode(mode)) {
303
+ return mode;
304
+ }
305
+ if (type !== 'dockbar') {
306
+ return DEFAULT_DOCKBAR_MODE;
307
+ }
308
+ const stored = this.readPersistedTypeMode(id);
309
+ return this.isDockbarMode(stored) ? stored : DEFAULT_DOCKBAR_MODE;
310
+ }
311
+ persistState(state) {
312
+ if (!this.shouldPersistInstanceState(state.id)) {
313
+ this.clearInstanceStorage(state.id);
314
+ return;
315
+ }
316
+ this.writeStorage(this.persistedStorageKey('orientation'), state.orientation);
317
+ this.writeStorage(this.persistedStorageKey('type'), state.type);
318
+ this.writeStorage(this.persistedStorageKey('position'), state.position);
319
+ this.writeStorage(TYPE_MODE_STORAGE_KEY, this.persistedTypeMode(state));
320
+ }
321
+ defaultType(orientation) {
322
+ return orientation === 'vertical' ? DEFAULT_VERTICAL_TYPE : DEFAULT_HORIZONTAL_TYPE;
323
+ }
324
+ cleanupLegacyStorage() {
325
+ this.migrateLegacyPersistedStorage();
326
+ for (const key of LEGACY_NAV_STORAGE_KEYS) {
327
+ this.removeStorage(key);
328
+ }
329
+ for (const key of LEGACY_TYPE_MODE_STORAGE_KEYS) {
330
+ this.removeStorage(key);
331
+ }
332
+ const storage = this.storage();
333
+ const keysToRemove = [];
334
+ for (let index = 0; index < (storage?.length ?? 0); index += 1) {
335
+ const key = storage?.key(index);
336
+ if (key && this.isLegacyInstanceStorageKey(key)) {
337
+ keysToRemove.push(key);
338
+ }
339
+ }
340
+ for (const key of keysToRemove) {
341
+ this.removeStorage(key);
342
+ }
343
+ }
344
+ storage() {
345
+ try {
346
+ return this.documentRef?.defaultView?.localStorage ?? null;
347
+ }
348
+ catch {
349
+ return null;
350
+ }
351
+ }
352
+ readStorage(key) {
353
+ try {
354
+ return this.storage()?.getItem(key) ?? null;
355
+ }
356
+ catch {
357
+ return null;
358
+ }
359
+ }
360
+ readInstanceStorage(id, property) {
361
+ if (!this.shouldPersistInstanceState(id)) {
362
+ return null;
363
+ }
364
+ return this.readStorage(this.persistedStorageKey(property));
365
+ }
366
+ readPersistedTypeMode(id) {
367
+ if (!this.shouldPersistInstanceState(id)) {
368
+ return null;
369
+ }
370
+ const stored = this.readStorage(TYPE_MODE_STORAGE_KEY);
371
+ return this.isPersistedTypeMode(stored) ? stored : null;
372
+ }
373
+ writeStorage(key, value) {
374
+ try {
375
+ this.storage()?.setItem(key, value);
376
+ }
377
+ catch {
378
+ return;
379
+ }
380
+ }
381
+ removeStorage(key) {
382
+ try {
383
+ this.storage()?.removeItem(key);
384
+ }
385
+ catch {
386
+ return;
387
+ }
388
+ }
389
+ clearInstanceStorage(id) {
390
+ for (const property of INSTANCE_STORAGE_PROPERTIES) {
391
+ this.removeStorage(this.instanceStorageKey(id, property));
392
+ }
393
+ }
394
+ migrateLegacyPersistedStorage() {
395
+ // Generasi sebelumnya memakai istilah "appearance" — salin nilainya ke key "type" baru.
396
+ if (this.readStorage(this.persistedStorageKey('type')) === null) {
397
+ const legacyType = this.readStorage('nav-appearance');
398
+ if (legacyType !== null) {
399
+ this.writeStorage(this.persistedStorageKey('type'), legacyType);
400
+ }
401
+ }
402
+ if (this.readStorage(TYPE_MODE_STORAGE_KEY) === null) {
403
+ const legacyTypeMode = this.readStorage('nav-appearance-mode');
404
+ if (legacyTypeMode !== null) {
405
+ this.writeStorage(TYPE_MODE_STORAGE_KEY, legacyTypeMode);
406
+ }
407
+ }
408
+ for (const property of PERSISTED_STORAGE_PROPERTIES) {
409
+ const nextKey = this.persistedStorageKey(property);
410
+ const legacyKey = this.instanceStorageKey(PERSISTED_NAV_ID, LEGACY_PROPERTY_NAMES[property]);
411
+ const nextValue = this.readStorage(nextKey);
412
+ const legacyValue = this.readStorage(legacyKey);
413
+ if (nextValue === null && legacyValue !== null) {
414
+ this.writeStorage(nextKey, legacyValue);
415
+ }
416
+ }
417
+ if (this.readStorage(TYPE_MODE_STORAGE_KEY) !== null) {
418
+ return;
419
+ }
420
+ const migratedTypeMode = this.resolveLegacyTypeMode();
421
+ if (migratedTypeMode !== null) {
422
+ this.writeStorage(TYPE_MODE_STORAGE_KEY, migratedTypeMode);
423
+ }
424
+ }
425
+ instanceStorageKey(id, property) {
426
+ return `nav:${id}:${property}`;
427
+ }
428
+ persistedStorageKey(property) {
429
+ return `nav-${property}`;
430
+ }
431
+ persistedTypeMode(state) {
432
+ if (state.type === 'dockbar') {
433
+ return state.dockbarMode;
434
+ }
435
+ return state.collapsed ? 'collapsed' : 'default';
436
+ }
437
+ resolveLegacyTypeMode() {
438
+ const type = this.readStorage(this.persistedStorageKey('type')) ??
439
+ this.readStorage(this.instanceStorageKey(PERSISTED_NAV_ID, 'appearance'));
440
+ const collapsed = this.readStorage('nav-collapsed') ?? this.readStorage(this.instanceStorageKey(PERSISTED_NAV_ID, 'collapsed'));
441
+ const dockbarMode = this.readStorage('nav-dockbar-mode') ??
442
+ this.readStorage(this.instanceStorageKey(PERSISTED_NAV_ID, 'dockbar-mode'));
443
+ if (type === 'dockbar' && this.isDockbarMode(dockbarMode)) {
444
+ return dockbarMode;
445
+ }
446
+ if (type === 'sidebar') {
447
+ return collapsed === 'true' ? 'collapsed' : 'default';
448
+ }
449
+ if (this.isDockbarMode(dockbarMode)) {
450
+ return dockbarMode;
451
+ }
452
+ if (collapsed === 'true') {
453
+ return 'collapsed';
454
+ }
455
+ if (collapsed === 'false') {
456
+ return 'default';
457
+ }
458
+ return null;
459
+ }
460
+ shouldPersistInstanceState(id) {
461
+ return id === PERSISTED_NAV_ID;
462
+ }
463
+ isLegacyInstanceStorageKey(key) {
464
+ return key.startsWith('nav:');
465
+ }
466
+ isPersistedTypeMode(value) {
467
+ return value === 'default' || value === 'collapsed' || this.isDockbarMode(value);
468
+ }
469
+ normalizeId(id) {
470
+ return id.trim() || DEFAULT_NAV_ID;
471
+ }
472
+ withoutKey(record, key) {
473
+ const next = { ...record };
474
+ delete next[key];
475
+ return next;
476
+ }
477
+ resolvePanelArgs(navIdOrItem, item) {
478
+ if (typeof navIdOrItem === 'string') {
479
+ return { navId: this.normalizeId(navIdOrItem), navItem: item };
480
+ }
481
+ return { navId: DEFAULT_NAV_ID, navItem: navIdOrItem };
482
+ }
483
+ isTypeForOrientation(value, orientation) {
484
+ return orientation === 'vertical' ? this.isVerticalType(value) : this.isHorizontalType(value);
485
+ }
486
+ isVerticalType(value) {
487
+ return value === 'sidebar' || value === 'dockbar';
488
+ }
489
+ isHorizontalType(value) {
490
+ return value === 'navbar' || value === 'flyout';
491
+ }
492
+ isPositionForOrientation(value, orientation) {
493
+ return orientation === 'vertical' ? value === 'left' || value === 'right' : value === 'top' || value === 'bottom';
494
+ }
495
+ isDockbarMode(value) {
496
+ return value === 'drawer' || value === 'sticky';
497
+ }
498
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: NavigationService, deps: [], target: i0.ɵɵFactoryTarget.Service });
499
+ static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.0.2", ngImport: i0, type: NavigationService });
500
+ }
501
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: NavigationService, decorators: [{
502
+ type: Service
503
+ }], ctorParameters: () => [] });
504
+
505
+ /**
506
+ * Generated bundle index. Do not edit.
507
+ */
508
+
509
+ export { NavigationService };
510
+ //# sourceMappingURL=ojiepermana-angular-navigation-service.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ojiepermana-angular-navigation-service.mjs","sources":["../../../library/navigation/service/navigation.service.ts","../../../library/navigation/service/ojiepermana-angular-navigation-service.ts"],"sourcesContent":["import { DOCUMENT } from '@angular/common';\nimport { Service, computed, inject, isDevMode, signal, type Signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NavigationEnd, Router, type IsActiveMatchOptions } from '@angular/router';\nimport type {\n NavigationType,\n NavigationDockbarMode,\n NavigationIconContext,\n NavigationNormalizedItem,\n NavigationOrientation,\n NavigationPosition,\n NavigationRegisterInput,\n NavigationState,\n} from './navigation.service.types';\n\nconst DEFAULT_NAV_ID = 'default';\nconst PERSISTED_NAV_ID = 'main';\nconst DEFAULT_VERTICAL_TYPE: NavigationType = 'sidebar';\nconst DEFAULT_HORIZONTAL_TYPE: NavigationType = 'navbar';\nconst DEFAULT_VERTICAL_POSITION: NavigationPosition = 'left';\nconst DEFAULT_HORIZONTAL_POSITION: NavigationPosition = 'top';\nconst DEFAULT_DOCKBAR_MODE: NavigationDockbarMode = 'sticky';\n/** Nama properti per-instance generasi lama (`nav:<id>:<properti>`) yang dibersihkan saat migrasi. */\nconst INSTANCE_STORAGE_PROPERTIES = ['orientation', 'appearance', 'position', 'collapsed', 'dockbar-mode'] as const;\nconst PERSISTED_STORAGE_PROPERTIES = ['orientation', 'type', 'position'] as const;\ntype PersistedStorageProperty = (typeof PERSISTED_STORAGE_PROPERTIES)[number];\ntype NavigationPersistedTypeMode = 'default' | 'collapsed' | NavigationDockbarMode;\nconst TYPE_MODE_STORAGE_KEY = 'nav-type-mode';\n/** Nama properti legacy untuk tiap properti persisted saat membaca key `nav:<id>:*` generasi lama. */\nconst LEGACY_PROPERTY_NAMES: Record<PersistedStorageProperty, string> = {\n orientation: 'orientation',\n type: 'appearance',\n position: 'position',\n};\nconst LEGACY_NAV_STORAGE_KEYS = ['nav-appearance', 'nav-vertical-appearance', 'nav-horizontal-appearance'] as const;\nconst LEGACY_TYPE_MODE_STORAGE_KEYS = ['nav-appearance-mode', 'nav-collapsed', 'nav-dockbar-mode'] as const;\n\n@Service()\nexport class NavigationService {\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, NavigationState>>({});\n private readonly openPanelKeys = signal<Record<string, string | null>>({});\n private readonly drawerOpenState = signal<Record<string, boolean>>({});\n /** id navigasi → token owner instance, untuk menjaga setiap id hanya dipakai satu <Navigation> hidup. */\n private readonly idOwners = new Map<string, object>();\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: NavigationRegisterInput, owner?: object): NavigationState {\n const state = this.resolveState(input);\n this.claimId(state.id, owner);\n this.states.update((states) => ({ ...states, [state.id]: state }));\n this.persistState(state);\n\n return state;\n }\n\n unregister(id: string, owner?: object): void {\n const navId = this.normalizeId(id);\n this.releaseId(navId, owner);\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 /**\n * Validasi keunikan id navigasi: setiap instance `<Navigation>` wajib memakai id unik.\n * `owner` adalah token unik per instance — klaim ulang oleh owner yang sama (mis. perubahan\n * input) diizinkan, tetapi dua instance hidup dengan id sama dianggap salah konfigurasi dan\n * melempar error di mode dev. Pemanggil tanpa owner (akses langsung service) dilewati.\n */\n private claimId(id: string, owner: object | undefined): void {\n if (owner === undefined) {\n return;\n }\n\n const currentOwner = this.idOwners.get(id);\n\n if (currentOwner !== undefined && currentOwner !== owner && isDevMode()) {\n throw new Error(\n `[Navigation] Duplikasi id navigasi \"${id}\". Setiap <Navigation> wajib memakai id unik. ` +\n `Id \"main\" dikhususkan untuk navigasi utama pada layout/shell (block-shell).`,\n );\n }\n\n this.idOwners.set(id, owner);\n }\n\n private releaseId(id: string, owner: object | undefined): void {\n if (owner === undefined || this.idOwners.get(id) === owner) {\n this.idOwners.delete(id);\n }\n }\n\n state(id: string): Signal<NavigationState | null> {\n const navId = this.normalizeId(id);\n return computed(() => this.states()[navId] ?? null);\n }\n\n currentState(id: string): NavigationState | 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<NavigationRegisterInput>): NavigationState {\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 type: patch.type ?? current.type,\n position: patch.position ?? current.position,\n collapsed: patch.collapsed ?? current.collapsed,\n dockbarMode: patch.dockbarMode ?? current.dockbarMode,\n });\n }\n\n setType(id: string, type: NavigationType): NavigationState {\n return this.update(id, { type });\n }\n\n setPosition(id: string, position: NavigationPosition): NavigationState {\n return this.update(id, { position });\n }\n\n setCollapsed(id: string, collapsed: boolean): NavigationState {\n return this.update(id, { collapsed });\n }\n\n toggleCollapsed(id: string): NavigationState {\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: NavigationDockbarMode): NavigationState {\n return this.update(id, { dockbarMode: mode });\n }\n\n isRouterItem(item: NavigationNormalizedItem): boolean {\n return !!item.link && !item.externalLink;\n }\n\n hrefFor(item: NavigationNormalizedItem): 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: NavigationNormalizedItem): 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: NavigationNormalizedItem): IsActiveMatchOptions {\n return item.isActiveMatchOptions ?? (item.exactMatch ? this.exactMatchOptions : this.subsetMatchOptions);\n }\n\n itemRole(orientation: NavigationOrientation, level: number): 'menuitem' | null {\n return orientation === 'horizontal' || level > 0 ? 'menuitem' : null;\n }\n\n compactLabel(item: NavigationNormalizedItem, compact: boolean): string | null {\n return compact ? (item.tooltip ?? item.title ?? null) : null;\n }\n\n titleFor(item: NavigationNormalizedItem, compact: boolean): string | null {\n return item.tooltip ?? (compact ? (item.title ?? null) : null);\n }\n\n compactFallback(item: NavigationNormalizedItem): string {\n return (item.title ?? item.id ?? '?').trim().slice(0, 2);\n }\n\n iconContext(\n item: NavigationNormalizedItem,\n active: boolean,\n level: number,\n orientation: NavigationOrientation,\n ): NavigationIconContext {\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(\n item: NavigationNormalizedItem,\n activeIds: ReadonlySet<string>,\n explicitActiveUrl: string | null,\n ): 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 | NavigationNormalizedItem, item?: NavigationNormalizedItem): boolean {\n const { navId, navItem } = this.resolvePanelArgs(navIdOrItem, item);\n\n return this.openPanelKeys()[navId] === navItem.key;\n }\n\n openPanel(navIdOrItem: string | NavigationNormalizedItem, item?: NavigationNormalizedItem): 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 | NavigationNormalizedItem, item?: NavigationNormalizedItem): 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 dockbarGroups(items: readonly NavigationNormalizedItem[]): readonly NavigationNormalizedItem[] {\n return items.filter((item) => item.children.length > 0);\n }\n\n resolveDockbarGroup(\n id: string,\n items: readonly NavigationNormalizedItem[],\n mode: NavigationDockbarMode,\n activeIds: ReadonlySet<string>,\n activeUrl: string | null,\n ): NavigationNormalizedItem | null {\n const groups = this.dockbarGroups(items);\n const panelKey = this.openPanelKeys()[this.normalizeId(id)] ?? null;\n\n if (panelKey !== null) {\n const explicit = groups.find((group) => group.key === panelKey);\n\n if (explicit) {\n return explicit;\n }\n }\n\n if (mode !== 'sticky') {\n return null;\n }\n\n return groups.find((group) => this.isItemActive(group, activeIds, activeUrl)) ?? 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: NavigationNormalizedItem, 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: NavigationRegisterInput): NavigationState {\n const id = this.normalizeId(input.id);\n const orientation = input.orientation;\n const type = this.resolveType(id, orientation, input.type);\n\n return {\n id,\n orientation,\n type,\n position: this.resolvePosition(id, orientation, input.position),\n collapsed: this.resolveCollapsed(id, type, input.collapsed),\n dockbarMode: this.resolveDockbarMode(id, type, input.dockbarMode),\n };\n }\n\n private resolveType(\n id: string,\n orientation: NavigationOrientation,\n type: NavigationType | null | undefined,\n ): NavigationType {\n if (this.isTypeForOrientation(type, orientation)) {\n return type;\n }\n\n const stored = this.readInstanceStorage(id, 'type');\n if (this.isTypeForOrientation(stored, orientation)) {\n return stored;\n }\n\n return this.defaultType(orientation);\n }\n\n private resolvePosition(\n id: string,\n orientation: NavigationOrientation,\n position: NavigationPosition | null | undefined,\n ): NavigationPosition {\n if (this.isPositionForOrientation(position, orientation)) {\n return position;\n }\n\n const stored = this.readInstanceStorage(id, 'position');\n\n if (this.isPositionForOrientation(stored, orientation)) {\n return stored;\n }\n\n return orientation === 'horizontal' ? DEFAULT_HORIZONTAL_POSITION : DEFAULT_VERTICAL_POSITION;\n }\n\n private resolveCollapsed(\n id: string,\n type: NavigationType | null | undefined,\n collapsed: boolean | null | undefined,\n ): boolean {\n if (typeof collapsed === 'boolean') {\n return collapsed;\n }\n\n if (type !== 'sidebar') {\n return false;\n }\n\n return this.readPersistedTypeMode(id) === 'collapsed';\n }\n\n private resolveDockbarMode(\n id: string,\n type: NavigationType | null | undefined,\n mode: NavigationDockbarMode | null | undefined,\n ): NavigationDockbarMode {\n if (this.isDockbarMode(mode)) {\n return mode;\n }\n\n if (type !== 'dockbar') {\n return DEFAULT_DOCKBAR_MODE;\n }\n\n const stored = this.readPersistedTypeMode(id);\n\n return this.isDockbarMode(stored) ? stored : DEFAULT_DOCKBAR_MODE;\n }\n\n private persistState(state: NavigationState): 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('type'), state.type);\n this.writeStorage(this.persistedStorageKey('position'), state.position);\n this.writeStorage(TYPE_MODE_STORAGE_KEY, this.persistedTypeMode(state));\n }\n\n private defaultType(orientation: NavigationOrientation): NavigationType {\n return orientation === 'vertical' ? DEFAULT_VERTICAL_TYPE : DEFAULT_HORIZONTAL_TYPE;\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_TYPE_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 readPersistedTypeMode(id: string): NavigationPersistedTypeMode | null {\n if (!this.shouldPersistInstanceState(id)) {\n return null;\n }\n\n const stored = this.readStorage(TYPE_MODE_STORAGE_KEY);\n\n return this.isPersistedTypeMode(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 // Generasi sebelumnya memakai istilah \"appearance\" — salin nilainya ke key \"type\" baru.\n if (this.readStorage(this.persistedStorageKey('type')) === null) {\n const legacyType = this.readStorage('nav-appearance');\n\n if (legacyType !== null) {\n this.writeStorage(this.persistedStorageKey('type'), legacyType);\n }\n }\n\n if (this.readStorage(TYPE_MODE_STORAGE_KEY) === null) {\n const legacyTypeMode = this.readStorage('nav-appearance-mode');\n\n if (legacyTypeMode !== null) {\n this.writeStorage(TYPE_MODE_STORAGE_KEY, legacyTypeMode);\n }\n }\n\n for (const property of PERSISTED_STORAGE_PROPERTIES) {\n const nextKey = this.persistedStorageKey(property);\n const legacyKey = this.instanceStorageKey(PERSISTED_NAV_ID, LEGACY_PROPERTY_NAMES[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(TYPE_MODE_STORAGE_KEY) !== null) {\n return;\n }\n\n const migratedTypeMode = this.resolveLegacyTypeMode();\n\n if (migratedTypeMode !== null) {\n this.writeStorage(TYPE_MODE_STORAGE_KEY, migratedTypeMode);\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 persistedTypeMode(state: NavigationState): NavigationPersistedTypeMode {\n if (state.type === 'dockbar') {\n return state.dockbarMode;\n }\n\n return state.collapsed ? 'collapsed' : 'default';\n }\n\n private resolveLegacyTypeMode(): NavigationPersistedTypeMode | null {\n const type =\n this.readStorage(this.persistedStorageKey('type')) ??\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 (type === 'dockbar' && this.isDockbarMode(dockbarMode)) {\n return dockbarMode;\n }\n\n if (type === '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 isPersistedTypeMode(value: string | null | undefined): value is NavigationPersistedTypeMode {\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 | NavigationNormalizedItem,\n item: NavigationNormalizedItem | undefined,\n ): { navId: string; navItem: NavigationNormalizedItem } {\n if (typeof navIdOrItem === 'string') {\n return { navId: this.normalizeId(navIdOrItem), navItem: item as NavigationNormalizedItem };\n }\n\n return { navId: DEFAULT_NAV_ID, navItem: navIdOrItem };\n }\n\n private isTypeForOrientation(\n value: string | null | undefined,\n orientation: NavigationOrientation,\n ): value is NavigationType {\n return orientation === 'vertical' ? this.isVerticalType(value) : this.isHorizontalType(value);\n }\n\n private isVerticalType(value: string | null | undefined): value is 'sidebar' | 'dockbar' {\n return value === 'sidebar' || value === 'dockbar';\n }\n\n private isHorizontalType(value: string | null | undefined): value is 'navbar' | 'flyout' {\n return value === 'navbar' || value === 'flyout';\n }\n\n private isPositionForOrientation(\n value: string | null | undefined,\n orientation: NavigationOrientation,\n ): value is NavigationPosition {\n return orientation === 'vertical' ? value === 'left' || value === 'right' : value === 'top' || value === 'bottom';\n }\n\n private isDockbarMode(value: string | null | undefined): value is NavigationDockbarMode {\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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"}