@edsis/ui 0.0.2 → 21.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/empty/README.md +1 -1
- package/fesm2022/edsis-ui-accordion.mjs +15 -15
- package/fesm2022/edsis-ui-alert-dialog.mjs +27 -27
- package/fesm2022/edsis-ui-alert.mjs +12 -12
- package/fesm2022/edsis-ui-aspect-ratio.mjs +3 -3
- package/fesm2022/edsis-ui-avatar.mjs +18 -18
- package/fesm2022/edsis-ui-badge.mjs +3 -3
- package/fesm2022/edsis-ui-breadcrumb.mjs +21 -21
- package/fesm2022/edsis-ui-button-group.mjs +9 -9
- package/fesm2022/edsis-ui-button.mjs +3 -3
- package/fesm2022/edsis-ui-calendar.mjs +3 -3
- package/fesm2022/edsis-ui-card.mjs +21 -21
- package/fesm2022/edsis-ui-carousel.mjs +18 -18
- package/fesm2022/edsis-ui-chart.mjs +80 -78
- package/fesm2022/edsis-ui-chart.mjs.map +1 -1
- package/fesm2022/edsis-ui-checkbox.mjs +3 -3
- package/fesm2022/edsis-ui-collapsible.mjs +12 -12
- package/fesm2022/edsis-ui-combobox.mjs +3 -3
- package/fesm2022/edsis-ui-command.mjs +41 -35
- package/fesm2022/edsis-ui-command.mjs.map +1 -1
- package/fesm2022/edsis-ui-composer.mjs +21 -21
- package/fesm2022/edsis-ui-context-menu.mjs +13 -7
- package/fesm2022/edsis-ui-context-menu.mjs.map +1 -1
- package/fesm2022/edsis-ui-date-picker.mjs +3 -3
- package/fesm2022/edsis-ui-dialog.mjs +27 -23
- package/fesm2022/edsis-ui-dialog.mjs.map +1 -1
- package/fesm2022/edsis-ui-dropdown-menu.mjs +58 -46
- package/fesm2022/edsis-ui-dropdown-menu.mjs.map +1 -1
- package/fesm2022/edsis-ui-editor.mjs +22 -20
- package/fesm2022/edsis-ui-editor.mjs.map +1 -1
- package/fesm2022/edsis-ui-empty.mjs +18 -18
- package/fesm2022/edsis-ui-form.mjs +38 -38
- package/fesm2022/edsis-ui-form.mjs.map +1 -1
- package/fesm2022/edsis-ui-hover-card.mjs +34 -13
- package/fesm2022/edsis-ui-hover-card.mjs.map +1 -1
- package/fesm2022/edsis-ui-input-group.mjs +18 -18
- package/fesm2022/edsis-ui-input-otp.mjs +15 -15
- package/fesm2022/edsis-ui-input.mjs +3 -3
- package/fesm2022/edsis-ui-item.mjs +30 -30
- package/fesm2022/edsis-ui-kanban.mjs +27 -27
- package/fesm2022/edsis-ui-kbd.mjs +6 -6
- package/fesm2022/edsis-ui-label.mjs +3 -3
- package/fesm2022/edsis-ui-layout-services.mjs +6 -0
- package/fesm2022/edsis-ui-layout-services.mjs.map +1 -0
- package/fesm2022/edsis-ui-layout-types.mjs +6 -0
- package/fesm2022/edsis-ui-layout-types.mjs.map +1 -0
- package/fesm2022/edsis-ui-layout.mjs +572 -0
- package/fesm2022/edsis-ui-layout.mjs.map +1 -0
- package/fesm2022/edsis-ui-menubar.mjs +22 -16
- package/fesm2022/edsis-ui-menubar.mjs.map +1 -1
- package/fesm2022/edsis-ui-native-select.mjs +9 -9
- package/fesm2022/edsis-ui-nav-service.mjs +343 -0
- package/fesm2022/edsis-ui-nav-service.mjs.map +1 -0
- package/fesm2022/edsis-ui-nav.mjs +2340 -0
- package/fesm2022/edsis-ui-nav.mjs.map +1 -0
- package/fesm2022/edsis-ui-navigation-menu.mjs +30 -24
- package/fesm2022/edsis-ui-navigation-menu.mjs.map +1 -1
- package/fesm2022/edsis-ui-page.mjs +397 -0
- package/fesm2022/edsis-ui-page.mjs.map +1 -0
- package/fesm2022/edsis-ui-pagination.mjs +3 -3
- package/fesm2022/edsis-ui-pillbox.mjs +16 -16
- package/fesm2022/edsis-ui-pillbox.mjs.map +1 -1
- package/fesm2022/edsis-ui-popover.mjs +16 -10
- package/fesm2022/edsis-ui-popover.mjs.map +1 -1
- package/fesm2022/edsis-ui-progress.mjs +3 -3
- package/fesm2022/edsis-ui-radio.mjs +6 -6
- package/fesm2022/edsis-ui-resizable.mjs +12 -12
- package/fesm2022/edsis-ui-scroll-area.mjs +3 -3
- package/fesm2022/edsis-ui-select.mjs +6 -6
- package/fesm2022/edsis-ui-separator.mjs +3 -3
- package/fesm2022/edsis-ui-sheet.mjs +27 -23
- package/fesm2022/edsis-ui-sheet.mjs.map +1 -1
- package/fesm2022/edsis-ui-skeleton.mjs +3 -3
- package/fesm2022/edsis-ui-slider.mjs +6 -6
- package/fesm2022/edsis-ui-spinner.mjs +3 -3
- package/fesm2022/edsis-ui-switch.mjs +3 -3
- package/fesm2022/edsis-ui-table.mjs +24 -24
- package/fesm2022/edsis-ui-tabs.mjs +18 -18
- package/fesm2022/edsis-ui-textarea.mjs +3 -3
- package/fesm2022/edsis-ui-theme.mjs +209 -0
- package/fesm2022/edsis-ui-theme.mjs.map +1 -0
- package/fesm2022/edsis-ui-timeline.mjs +18 -18
- package/fesm2022/edsis-ui-toast.mjs +3 -3
- package/fesm2022/edsis-ui-toggle-group.mjs +9 -9
- package/fesm2022/edsis-ui-toggle.mjs +3 -3
- package/fesm2022/edsis-ui-tooltip.mjs +12 -12
- package/layout/README.md +454 -0
- package/nav/README.md +96 -0
- package/package.json +31 -2
- package/page/README.md +46 -0
- package/types/edsis-ui-command.d.ts +4 -1
- package/types/edsis-ui-context-menu.d.ts +2 -1
- package/types/edsis-ui-dropdown-menu.d.ts +4 -1
- package/types/edsis-ui-editor.d.ts +1 -0
- package/types/edsis-ui-hover-card.d.ts +3 -1
- package/types/edsis-ui-layout-services.d.ts +1 -0
- package/types/edsis-ui-layout-types.d.ts +1 -0
- package/types/edsis-ui-layout.d.ts +153 -0
- package/types/edsis-ui-menubar.d.ts +2 -0
- package/types/edsis-ui-nav-service.d.ts +138 -0
- package/types/edsis-ui-nav.d.ts +205 -0
- package/types/edsis-ui-navigation-menu.d.ts +2 -0
- package/types/edsis-ui-page.d.ts +137 -0
- package/types/edsis-ui-popover.d.ts +2 -1
- 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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"}
|