@edsis/ui 0.0.2 → 0.0.3

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.
Files changed (105) hide show
  1. package/empty/README.md +1 -1
  2. package/fesm2022/edsis-ui-accordion.mjs +15 -15
  3. package/fesm2022/edsis-ui-alert-dialog.mjs +27 -27
  4. package/fesm2022/edsis-ui-alert.mjs +12 -12
  5. package/fesm2022/edsis-ui-aspect-ratio.mjs +3 -3
  6. package/fesm2022/edsis-ui-avatar.mjs +18 -18
  7. package/fesm2022/edsis-ui-badge.mjs +3 -3
  8. package/fesm2022/edsis-ui-breadcrumb.mjs +21 -21
  9. package/fesm2022/edsis-ui-button-group.mjs +9 -9
  10. package/fesm2022/edsis-ui-button.mjs +3 -3
  11. package/fesm2022/edsis-ui-calendar.mjs +3 -3
  12. package/fesm2022/edsis-ui-card.mjs +21 -21
  13. package/fesm2022/edsis-ui-carousel.mjs +18 -18
  14. package/fesm2022/edsis-ui-chart.mjs +80 -78
  15. package/fesm2022/edsis-ui-chart.mjs.map +1 -1
  16. package/fesm2022/edsis-ui-checkbox.mjs +3 -3
  17. package/fesm2022/edsis-ui-collapsible.mjs +12 -12
  18. package/fesm2022/edsis-ui-combobox.mjs +3 -3
  19. package/fesm2022/edsis-ui-command.mjs +41 -35
  20. package/fesm2022/edsis-ui-command.mjs.map +1 -1
  21. package/fesm2022/edsis-ui-composer.mjs +21 -21
  22. package/fesm2022/edsis-ui-context-menu.mjs +13 -7
  23. package/fesm2022/edsis-ui-context-menu.mjs.map +1 -1
  24. package/fesm2022/edsis-ui-date-picker.mjs +3 -3
  25. package/fesm2022/edsis-ui-dialog.mjs +27 -23
  26. package/fesm2022/edsis-ui-dialog.mjs.map +1 -1
  27. package/fesm2022/edsis-ui-dropdown-menu.mjs +58 -46
  28. package/fesm2022/edsis-ui-dropdown-menu.mjs.map +1 -1
  29. package/fesm2022/edsis-ui-editor.mjs +22 -20
  30. package/fesm2022/edsis-ui-editor.mjs.map +1 -1
  31. package/fesm2022/edsis-ui-empty.mjs +18 -18
  32. package/fesm2022/edsis-ui-form.mjs +38 -38
  33. package/fesm2022/edsis-ui-form.mjs.map +1 -1
  34. package/fesm2022/edsis-ui-hover-card.mjs +34 -13
  35. package/fesm2022/edsis-ui-hover-card.mjs.map +1 -1
  36. package/fesm2022/edsis-ui-input-group.mjs +18 -18
  37. package/fesm2022/edsis-ui-input-otp.mjs +15 -15
  38. package/fesm2022/edsis-ui-input.mjs +3 -3
  39. package/fesm2022/edsis-ui-item.mjs +30 -30
  40. package/fesm2022/edsis-ui-kanban.mjs +27 -27
  41. package/fesm2022/edsis-ui-kbd.mjs +6 -6
  42. package/fesm2022/edsis-ui-label.mjs +3 -3
  43. package/fesm2022/edsis-ui-layout-services.mjs +6 -0
  44. package/fesm2022/edsis-ui-layout-services.mjs.map +1 -0
  45. package/fesm2022/edsis-ui-layout-types.mjs +6 -0
  46. package/fesm2022/edsis-ui-layout-types.mjs.map +1 -0
  47. package/fesm2022/edsis-ui-layout.mjs +572 -0
  48. package/fesm2022/edsis-ui-layout.mjs.map +1 -0
  49. package/fesm2022/edsis-ui-menubar.mjs +22 -16
  50. package/fesm2022/edsis-ui-menubar.mjs.map +1 -1
  51. package/fesm2022/edsis-ui-native-select.mjs +9 -9
  52. package/fesm2022/edsis-ui-nav-service.mjs +343 -0
  53. package/fesm2022/edsis-ui-nav-service.mjs.map +1 -0
  54. package/fesm2022/edsis-ui-nav.mjs +2340 -0
  55. package/fesm2022/edsis-ui-nav.mjs.map +1 -0
  56. package/fesm2022/edsis-ui-navigation-menu.mjs +30 -24
  57. package/fesm2022/edsis-ui-navigation-menu.mjs.map +1 -1
  58. package/fesm2022/edsis-ui-page.mjs +397 -0
  59. package/fesm2022/edsis-ui-page.mjs.map +1 -0
  60. package/fesm2022/edsis-ui-pagination.mjs +3 -3
  61. package/fesm2022/edsis-ui-pillbox.mjs +16 -16
  62. package/fesm2022/edsis-ui-pillbox.mjs.map +1 -1
  63. package/fesm2022/edsis-ui-popover.mjs +16 -10
  64. package/fesm2022/edsis-ui-popover.mjs.map +1 -1
  65. package/fesm2022/edsis-ui-progress.mjs +3 -3
  66. package/fesm2022/edsis-ui-radio.mjs +6 -6
  67. package/fesm2022/edsis-ui-resizable.mjs +12 -12
  68. package/fesm2022/edsis-ui-scroll-area.mjs +3 -3
  69. package/fesm2022/edsis-ui-select.mjs +6 -6
  70. package/fesm2022/edsis-ui-separator.mjs +3 -3
  71. package/fesm2022/edsis-ui-sheet.mjs +27 -23
  72. package/fesm2022/edsis-ui-sheet.mjs.map +1 -1
  73. package/fesm2022/edsis-ui-skeleton.mjs +3 -3
  74. package/fesm2022/edsis-ui-slider.mjs +6 -6
  75. package/fesm2022/edsis-ui-spinner.mjs +3 -3
  76. package/fesm2022/edsis-ui-switch.mjs +3 -3
  77. package/fesm2022/edsis-ui-table.mjs +24 -24
  78. package/fesm2022/edsis-ui-tabs.mjs +18 -18
  79. package/fesm2022/edsis-ui-textarea.mjs +3 -3
  80. package/fesm2022/edsis-ui-theme.mjs +209 -0
  81. package/fesm2022/edsis-ui-theme.mjs.map +1 -0
  82. package/fesm2022/edsis-ui-timeline.mjs +18 -18
  83. package/fesm2022/edsis-ui-toast.mjs +3 -3
  84. package/fesm2022/edsis-ui-toggle-group.mjs +9 -9
  85. package/fesm2022/edsis-ui-toggle.mjs +3 -3
  86. package/fesm2022/edsis-ui-tooltip.mjs +12 -12
  87. package/layout/README.md +454 -0
  88. package/nav/README.md +96 -0
  89. package/package.json +31 -2
  90. package/page/README.md +46 -0
  91. package/types/edsis-ui-command.d.ts +4 -1
  92. package/types/edsis-ui-context-menu.d.ts +2 -1
  93. package/types/edsis-ui-dropdown-menu.d.ts +5 -2
  94. package/types/edsis-ui-editor.d.ts +1 -0
  95. package/types/edsis-ui-hover-card.d.ts +3 -1
  96. package/types/edsis-ui-layout-services.d.ts +1 -0
  97. package/types/edsis-ui-layout-types.d.ts +1 -0
  98. package/types/edsis-ui-layout.d.ts +153 -0
  99. package/types/edsis-ui-menubar.d.ts +2 -0
  100. package/types/edsis-ui-nav-service.d.ts +138 -0
  101. package/types/edsis-ui-nav.d.ts +205 -0
  102. package/types/edsis-ui-navigation-menu.d.ts +2 -0
  103. package/types/edsis-ui-page.d.ts +137 -0
  104. package/types/edsis-ui-popover.d.ts +2 -1
  105. package/types/edsis-ui-theme.d.ts +71 -0
@@ -0,0 +1,343 @@
1
+ import { DOCUMENT } from '@angular/common';
2
+ import * as i0 from '@angular/core';
3
+ import { inject, signal, computed, Injectable } 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 DEFAULT_VERTICAL_APPEARANCE = 'sidebar';
9
+ const DEFAULT_HORIZONTAL_APPEARANCE = 'navbar';
10
+ const DEFAULT_POSITION = 'left';
11
+ const DEFAULT_DOCKBAR_MODE = 'sticky';
12
+ const VERTICAL_APPEARANCE_STORAGE_KEY = 'nav-vertical-appearance';
13
+ const HORIZONTAL_APPEARANCE_STORAGE_KEY = 'nav-horizontal-appearance';
14
+ class NavService {
15
+ documentRef = inject(DOCUMENT, { optional: true });
16
+ router = inject(Router, { optional: true });
17
+ routerUrl = signal(this.router?.url ?? '/', ...(ngDevMode ? [{ debugName: "routerUrl" }] : /* istanbul ignore next */ []));
18
+ states = signal({}, ...(ngDevMode ? [{ debugName: "states" }] : /* istanbul ignore next */ []));
19
+ openPanelKeys = signal({}, ...(ngDevMode ? [{ debugName: "openPanelKeys" }] : /* istanbul ignore next */ []));
20
+ drawerOpenState = signal({}, ...(ngDevMode ? [{ debugName: "drawerOpenState" }] : /* istanbul ignore next */ []));
21
+ openPanelKey = computed(() => this.openPanelKeys()[DEFAULT_NAV_ID] ?? null, ...(ngDevMode ? [{ debugName: "openPanelKey" }] : /* istanbul ignore next */ []));
22
+ exactMatchOptions = {
23
+ paths: 'exact',
24
+ queryParams: 'exact',
25
+ fragment: 'exact',
26
+ matrixParams: 'exact',
27
+ };
28
+ subsetMatchOptions = {
29
+ paths: 'subset',
30
+ queryParams: 'subset',
31
+ fragment: 'ignored',
32
+ matrixParams: 'ignored',
33
+ };
34
+ constructor() {
35
+ this.ensureAppearanceDefaults();
36
+ this.router?.events.pipe(takeUntilDestroyed()).subscribe((event) => {
37
+ if (event instanceof NavigationEnd) {
38
+ this.routerUrl.set(event.urlAfterRedirects);
39
+ }
40
+ });
41
+ }
42
+ register(input) {
43
+ this.ensureAppearanceDefaults();
44
+ const state = this.resolveState(input);
45
+ this.states.update((states) => ({ ...states, [state.id]: state }));
46
+ this.persistState(state);
47
+ return state;
48
+ }
49
+ unregister(id) {
50
+ const navId = this.normalizeId(id);
51
+ this.states.update((states) => this.withoutKey(states, navId));
52
+ this.openPanelKeys.update((state) => this.withoutKey(state, navId));
53
+ this.drawerOpenState.update((state) => this.withoutKey(state, navId));
54
+ }
55
+ state(id) {
56
+ const navId = this.normalizeId(id);
57
+ return computed(() => this.states()[navId] ?? null);
58
+ }
59
+ currentState(id) {
60
+ return this.states()[this.normalizeId(id)] ?? null;
61
+ }
62
+ currentPanelKey(id) {
63
+ return this.openPanelKeys()[this.normalizeId(id)] ?? null;
64
+ }
65
+ update(id, patch) {
66
+ const navId = this.normalizeId(id);
67
+ const current = this.states()[navId] ?? this.resolveState({ id: navId, orientation: patch.orientation ?? 'vertical' });
68
+ return this.register({
69
+ id: navId,
70
+ orientation: patch.orientation ?? current.orientation,
71
+ appearance: patch.appearance ?? current.appearance,
72
+ position: patch.position ?? current.position,
73
+ collapsed: patch.collapsed ?? current.collapsed,
74
+ dockbarMode: patch.dockbarMode ?? current.dockbarMode,
75
+ });
76
+ }
77
+ setAppearance(id, appearance) {
78
+ return this.update(id, { appearance });
79
+ }
80
+ setPosition(id, position) {
81
+ return this.update(id, { position });
82
+ }
83
+ setCollapsed(id, collapsed) {
84
+ return this.update(id, { collapsed });
85
+ }
86
+ toggleCollapsed(id) {
87
+ const navId = this.normalizeId(id);
88
+ const current = this.states()[navId] ?? this.resolveState({ id: navId, orientation: 'vertical' });
89
+ return this.setCollapsed(navId, !current.collapsed);
90
+ }
91
+ setDockbarMode(id, mode) {
92
+ return this.update(id, { dockbarMode: mode });
93
+ }
94
+ isRouterItem(item) {
95
+ return !!item.link && !item.externalLink;
96
+ }
97
+ hrefFor(item) {
98
+ if (item.href) {
99
+ return item.href;
100
+ }
101
+ if (item.externalLink && typeof item.link === 'string') {
102
+ return item.link;
103
+ }
104
+ return null;
105
+ }
106
+ relFor(item) {
107
+ if (item.rel) {
108
+ return item.rel;
109
+ }
110
+ return item.target === '_blank' || item.externalLink ? 'noopener noreferrer' : null;
111
+ }
112
+ routerLinkActiveOptions(item) {
113
+ return item.isActiveMatchOptions ?? (item.exactMatch ? this.exactMatchOptions : this.subsetMatchOptions);
114
+ }
115
+ itemRole(orientation, level) {
116
+ return orientation === 'horizontal' || level > 0 ? 'menuitem' : null;
117
+ }
118
+ compactLabel(item, compact) {
119
+ return compact ? (item.tooltip ?? item.title ?? null) : null;
120
+ }
121
+ titleFor(item, compact) {
122
+ return item.tooltip ?? (compact ? (item.title ?? null) : null);
123
+ }
124
+ compactFallback(item) {
125
+ return (item.title ?? item.id ?? '?').trim().slice(0, 2);
126
+ }
127
+ iconContext(item, active, level, orientation) {
128
+ return {
129
+ $implicit: item.icon ?? '',
130
+ icon: item.icon ?? '',
131
+ item: item.source,
132
+ active,
133
+ orientation,
134
+ level,
135
+ };
136
+ }
137
+ isItemActive(item, activeIds, explicitActiveUrl) {
138
+ if (item.active || activeIds.has(item.stateId) || activeIds.has(item.key)) {
139
+ return true;
140
+ }
141
+ if (this.matchesActiveUrl(item, explicitActiveUrl)) {
142
+ return true;
143
+ }
144
+ return item.children.some((child) => this.isItemActive(child, activeIds, explicitActiveUrl));
145
+ }
146
+ isPanelOpen(navIdOrItem, item) {
147
+ const { navId, navItem } = this.resolvePanelArgs(navIdOrItem, item);
148
+ return this.openPanelKeys()[navId] === navItem.key;
149
+ }
150
+ openPanel(navIdOrItem, item) {
151
+ const { navId, navItem } = this.resolvePanelArgs(navIdOrItem, item);
152
+ if (navItem.disabled) {
153
+ return;
154
+ }
155
+ this.openPanelKeys.update((state) => ({ ...state, [navId]: navItem.key }));
156
+ }
157
+ togglePanel(navIdOrItem, item) {
158
+ const { navId, navItem } = this.resolvePanelArgs(navIdOrItem, item);
159
+ if (navItem.disabled) {
160
+ return;
161
+ }
162
+ this.openPanelKeys.update((state) => ({
163
+ ...state,
164
+ [navId]: state[navId] === navItem.key ? null : navItem.key,
165
+ }));
166
+ }
167
+ closePanel(id = DEFAULT_NAV_ID) {
168
+ const navId = this.normalizeId(id);
169
+ this.openPanelKeys.update((state) => ({ ...state, [navId]: null }));
170
+ }
171
+ isDrawerOpen(id) {
172
+ return this.drawerOpenState()[this.normalizeId(id)] ?? false;
173
+ }
174
+ openDrawer(id) {
175
+ const navId = this.normalizeId(id);
176
+ this.drawerOpenState.update((state) => ({ ...state, [navId]: true }));
177
+ }
178
+ toggleDrawer(id) {
179
+ const navId = this.normalizeId(id);
180
+ this.drawerOpenState.update((state) => ({ ...state, [navId]: !(state[navId] ?? false) }));
181
+ }
182
+ closeDrawer(id) {
183
+ const navId = this.normalizeId(id);
184
+ this.drawerOpenState.update((state) => ({ ...state, [navId]: false }));
185
+ }
186
+ matchesActiveUrl(item, explicitActiveUrl) {
187
+ if (!item.link || item.externalLink || typeof item.link !== 'string') {
188
+ return false;
189
+ }
190
+ const activeUrl = explicitActiveUrl ?? this.routerUrl();
191
+ const link = item.link;
192
+ if (link === '/') {
193
+ return activeUrl === '/';
194
+ }
195
+ if (item.exactMatch || item.isActiveMatchOptions?.paths === 'exact') {
196
+ return activeUrl === link;
197
+ }
198
+ return activeUrl === link || activeUrl.startsWith(`${link}/`) || activeUrl.startsWith(`${link}?`);
199
+ }
200
+ resolveState(input) {
201
+ const id = this.normalizeId(input.id);
202
+ const orientation = input.orientation;
203
+ return {
204
+ id,
205
+ orientation,
206
+ appearance: this.resolveAppearance(id, orientation, input.appearance),
207
+ position: this.resolvePosition(id, input.position),
208
+ collapsed: this.resolveCollapsed(id, input.collapsed),
209
+ dockbarMode: this.resolveDockbarMode(id, input.dockbarMode),
210
+ };
211
+ }
212
+ resolveAppearance(id, orientation, appearance) {
213
+ if (this.isAppearanceForOrientation(appearance, orientation)) {
214
+ return appearance;
215
+ }
216
+ const stored = this.readStorage(this.instanceStorageKey(id, 'appearance'));
217
+ if (this.isAppearanceForOrientation(stored, orientation)) {
218
+ return stored;
219
+ }
220
+ return this.readOrientationAppearance(orientation);
221
+ }
222
+ resolvePosition(id, position) {
223
+ if (this.isPosition(position)) {
224
+ return position;
225
+ }
226
+ const stored = this.readStorage(this.instanceStorageKey(id, 'position'));
227
+ return this.isPosition(stored) ? stored : DEFAULT_POSITION;
228
+ }
229
+ resolveCollapsed(id, collapsed) {
230
+ if (typeof collapsed === 'boolean') {
231
+ return collapsed;
232
+ }
233
+ const stored = this.readStorage(this.instanceStorageKey(id, 'collapsed'));
234
+ if (stored === 'true') {
235
+ return true;
236
+ }
237
+ if (stored === 'false') {
238
+ return false;
239
+ }
240
+ return false;
241
+ }
242
+ resolveDockbarMode(id, mode) {
243
+ if (this.isDockbarMode(mode)) {
244
+ return mode;
245
+ }
246
+ const stored = this.readStorage(this.instanceStorageKey(id, 'dockbar-mode'));
247
+ return this.isDockbarMode(stored) ? stored : DEFAULT_DOCKBAR_MODE;
248
+ }
249
+ persistState(state) {
250
+ this.writeStorage(this.instanceStorageKey(state.id, 'orientation'), state.orientation);
251
+ this.writeStorage(this.instanceStorageKey(state.id, 'appearance'), state.appearance);
252
+ this.writeStorage(this.instanceStorageKey(state.id, 'position'), state.position);
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;
262
+ }
263
+ this.writeStorage(key, fallback);
264
+ return fallback;
265
+ }
266
+ ensureAppearanceDefaults() {
267
+ if (!this.isVerticalAppearance(this.readStorage(VERTICAL_APPEARANCE_STORAGE_KEY))) {
268
+ this.writeStorage(VERTICAL_APPEARANCE_STORAGE_KEY, DEFAULT_VERTICAL_APPEARANCE);
269
+ }
270
+ if (!this.isHorizontalAppearance(this.readStorage(HORIZONTAL_APPEARANCE_STORAGE_KEY))) {
271
+ this.writeStorage(HORIZONTAL_APPEARANCE_STORAGE_KEY, DEFAULT_HORIZONTAL_APPEARANCE);
272
+ }
273
+ }
274
+ storage() {
275
+ try {
276
+ return this.documentRef?.defaultView?.localStorage ?? null;
277
+ }
278
+ catch {
279
+ return null;
280
+ }
281
+ }
282
+ readStorage(key) {
283
+ try {
284
+ return this.storage()?.getItem(key) ?? null;
285
+ }
286
+ catch {
287
+ return null;
288
+ }
289
+ }
290
+ writeStorage(key, value) {
291
+ try {
292
+ this.storage()?.setItem(key, value);
293
+ }
294
+ catch {
295
+ return;
296
+ }
297
+ }
298
+ instanceStorageKey(id, property) {
299
+ return `nav:${id}:${property}`;
300
+ }
301
+ normalizeId(id) {
302
+ return id.trim() || DEFAULT_NAV_ID;
303
+ }
304
+ withoutKey(record, key) {
305
+ const next = { ...record };
306
+ delete next[key];
307
+ return next;
308
+ }
309
+ resolvePanelArgs(navIdOrItem, item) {
310
+ if (typeof navIdOrItem === 'string') {
311
+ return { navId: this.normalizeId(navIdOrItem), navItem: item };
312
+ }
313
+ return { navId: DEFAULT_NAV_ID, navItem: navIdOrItem };
314
+ }
315
+ isAppearanceForOrientation(value, orientation) {
316
+ return orientation === 'vertical' ? this.isVerticalAppearance(value) : this.isHorizontalAppearance(value);
317
+ }
318
+ isVerticalAppearance(value) {
319
+ return value === 'sidebar' || value === 'dockbar';
320
+ }
321
+ isHorizontalAppearance(value) {
322
+ return value === 'navbar' || value === 'flyout';
323
+ }
324
+ isPosition(value) {
325
+ return value === 'left' || value === 'right';
326
+ }
327
+ isDockbarMode(value) {
328
+ return value === 'drawer' || value === 'sticky';
329
+ }
330
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: NavService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
331
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: NavService, providedIn: 'root' });
332
+ }
333
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: NavService, decorators: [{
334
+ type: Injectable,
335
+ args: [{ providedIn: 'root' }]
336
+ }], ctorParameters: () => [] });
337
+
338
+ /**
339
+ * Generated bundle index. Do not edit.
340
+ */
341
+
342
+ export { NavService };
343
+ //# sourceMappingURL=edsis-ui-nav-service.mjs.map
@@ -0,0 +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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"}