@ojiepermana/angular 0.1.1 → 21.0.2
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/README.md +41 -249
- package/collection.json +25 -0
- package/fesm2022/ojiepermana-angular-chart.mjs +3714 -0
- package/fesm2022/ojiepermana-angular-chart.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-component.mjs +3463 -0
- package/fesm2022/ojiepermana-angular-component.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-generator-api.mjs +67 -0
- package/fesm2022/ojiepermana-angular-generator-api.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-layout.mjs +296 -408
- package/fesm2022/ojiepermana-angular-layout.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-navigation.mjs +2198 -404
- package/fesm2022/ojiepermana-angular-navigation.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-theme.mjs +381 -1
- package/fesm2022/ojiepermana-angular-theme.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular.mjs +16 -1
- package/fesm2022/ojiepermana-angular.mjs.map +1 -1
- package/generator/api/README.md +183 -0
- package/generator/api/bin/schematics/init/index.js +88 -0
- package/generator/api/bin/schematics/sdk/index.js +58 -0
- package/generator/api/bin/src/config/loader.js +41 -0
- package/generator/api/bin/src/config/schema.js +56 -0
- package/generator/api/bin/src/emit/client.js +246 -0
- package/generator/api/bin/src/emit/metadata.js +295 -0
- package/generator/api/bin/src/emit/models.js +106 -0
- package/generator/api/bin/src/emit/navigation.js +56 -0
- package/generator/api/bin/src/emit/operations.js +122 -0
- package/generator/api/bin/src/emit/public-api.js +54 -0
- package/generator/api/bin/src/emit/services.js +87 -0
- package/generator/api/bin/src/engine.js +65 -0
- package/generator/api/bin/src/layout/per-domain.js +346 -0
- package/generator/api/bin/src/parser/bundle.js +25 -0
- package/generator/api/bin/src/parser/ir.js +320 -0
- package/generator/api/bin/src/parser/types.js +7 -0
- package/generator/api/bin/src/render/template.js +58 -0
- package/generator/api/bin/src/writer/index.js +69 -0
- package/generator/api/schematics/init/schema.json +19 -0
- package/generator/api/schematics/sdk/schema.json +19 -0
- package/generator/api/sdk.config.example.json +22 -0
- package/generator/guide/README.md +84 -0
- package/generator/guide/bin/schematics/build/index.js +35 -0
- package/generator/guide/bin/schematics/init/index.js +70 -0
- package/generator/guide/bin/src/config/loader.js +50 -0
- package/generator/guide/bin/src/config/schema.js +12 -0
- package/generator/guide/bin/src/engine/component.js +73 -0
- package/generator/guide/bin/src/engine/frontmatter.js +42 -0
- package/generator/guide/bin/src/engine/index.js +42 -0
- package/generator/guide/bin/src/engine/naming.js +39 -0
- package/generator/guide/bin/src/engine/render.js +18 -0
- package/generator/guide/bin/src/engine/routes.js +106 -0
- package/generator/guide/bin/src/engine/walk.js +35 -0
- package/generator/guide/guide.config.example.json +9 -0
- package/generator/guide/schematics/build/schema.json +14 -0
- package/generator/guide/schematics/init/schema.json +19 -0
- package/package.json +58 -38
- package/theme/styles/etos.css +38 -0
- package/theme/styles/index.css +32 -8
- package/theme/styles/themes/brand/etos/color.css +21 -0
- package/theme/styles/themes/brand/etos/style.css +50 -0
- package/theme/styles/themes/library/_components.css +63 -0
- package/theme/styles/themes/library/_layers.css +15 -0
- package/theme/styles/themes/library/_material-overrides.css +254 -0
- package/theme/styles/themes/library/_tokens.css +54 -0
- package/theme/styles/themes/library/color/amber.css +18 -0
- package/theme/styles/themes/library/color/blue.css +23 -0
- package/theme/styles/themes/library/color/green.css +18 -0
- package/theme/styles/themes/library/color/index.css +9 -0
- package/theme/styles/themes/library/color/purple.css +18 -0
- package/theme/styles/themes/library/color/red.css +18 -0
- package/theme/styles/themes/library/style/brutal.css +47 -0
- package/theme/styles/themes/library/style/default.css +51 -0
- package/theme/styles/themes/library/style/index.css +8 -0
- package/theme/styles/themes/library/style/sharp.css +47 -0
- package/theme/styles/themes/library/style/soft.css +47 -0
- package/theme/styles/themes/mode/dark.css +20 -0
- package/theme/styles/themes/mode/index.css +6 -0
- package/theme/styles/themes/mode/light.css +24 -0
- package/theme/styles/themes/taildwind.css +109 -0
- package/types/ojiepermana-angular-chart.d.ts +1094 -0
- package/types/ojiepermana-angular-component.d.ts +1174 -0
- package/types/ojiepermana-angular-generator-api.d.ts +85 -0
- package/types/ojiepermana-angular-layout.d.ts +125 -76
- package/types/ojiepermana-angular-navigation.d.ts +256 -116
- package/types/ojiepermana-angular-theme.d.ts +170 -1
- package/types/ojiepermana-angular.d.ts +2 -1
- package/fesm2022/ojiepermana-angular-internal.mjs +0 -489
- package/fesm2022/ojiepermana-angular-internal.mjs.map +0 -1
- package/fesm2022/ojiepermana-angular-navigation-horizontal.mjs +0 -721
- package/fesm2022/ojiepermana-angular-navigation-horizontal.mjs.map +0 -1
- package/fesm2022/ojiepermana-angular-navigation-vertical.mjs +0 -1647
- package/fesm2022/ojiepermana-angular-navigation-vertical.mjs.map +0 -1
- package/fesm2022/ojiepermana-angular-shell.mjs +0 -19
- package/fesm2022/ojiepermana-angular-shell.mjs.map +0 -1
- package/fesm2022/ojiepermana-angular-theme-component.mjs +0 -235
- package/fesm2022/ojiepermana-angular-theme-component.mjs.map +0 -1
- package/fesm2022/ojiepermana-angular-theme-directive.mjs +0 -29
- package/fesm2022/ojiepermana-angular-theme-directive.mjs.map +0 -1
- package/fesm2022/ojiepermana-angular-theme-service.mjs +0 -241
- package/fesm2022/ojiepermana-angular-theme-service.mjs.map +0 -1
- package/layout/README.md +0 -144
- package/layout/src/component/horizontal/horizontal.css +0 -130
- package/layout/src/component/vertical/vertical.css +0 -75
- package/layout/src/layout.css +0 -16
- package/navigation/README.md +0 -301
- package/navigation/horizontal/README.md +0 -49
- package/shell/README.md +0 -41
- package/styles/index.css +0 -2
- package/styles/resets.css +0 -22
- package/theme/README.md +0 -379
- package/theme/styles/adapters/material-ui/index.css +0 -205
- package/theme/styles/modes/dark.css +0 -84
- package/theme/styles/presets/colors/blue.css +0 -45
- package/theme/styles/presets/colors/brand.css +0 -52
- package/theme/styles/presets/colors/cyan.css +0 -45
- package/theme/styles/presets/colors/green.css +0 -45
- package/theme/styles/presets/colors/index.css +0 -7
- package/theme/styles/presets/colors/orange.css +0 -45
- package/theme/styles/presets/colors/purple.css +0 -45
- package/theme/styles/presets/colors/red.css +0 -45
- package/theme/styles/presets/styles/flat.css +0 -61
- package/theme/styles/presets/styles/glass.css +0 -28
- package/theme/styles/presets/styles/index.css +0 -2
- package/theme/styles/roles/index.css +0 -67
- package/theme/styles/tokens/foundation.css +0 -136
- package/theme/styles/tokens/semantic.css +0 -87
- package/theme/styles/utilities/index.css +0 -88
- package/types/ojiepermana-angular-internal.d.ts +0 -90
- package/types/ojiepermana-angular-navigation-horizontal.d.ts +0 -81
- package/types/ojiepermana-angular-navigation-vertical.d.ts +0 -262
- package/types/ojiepermana-angular-shell.d.ts +0 -14
- package/types/ojiepermana-angular-theme-component.d.ts +0 -46
- package/types/ojiepermana-angular-theme-directive.d.ts +0 -10
- package/types/ojiepermana-angular-theme-service.d.ts +0 -68
- /package/{navigation/vertical → chart}/README.md +0 -0
|
@@ -1,489 +0,0 @@
|
|
|
1
|
-
import { provideLucideConfig, icons, LucideDynamicIcon } from '@lucide/angular';
|
|
2
|
-
import * as i0 from '@angular/core';
|
|
3
|
-
import { input, computed, ViewEncapsulation, ChangeDetectionStrategy, Component, forwardRef } from '@angular/core';
|
|
4
|
-
import { NgTemplateOutlet } from '@angular/common';
|
|
5
|
-
import { getNavigationChildren, hasNavigationChildren, shouldRenderNavigationItem } from '@ojiepermana/angular/navigation';
|
|
6
|
-
|
|
7
|
-
const libraryLucideConfigProvider = provideLucideConfig({
|
|
8
|
-
absoluteStrokeWidth: true,
|
|
9
|
-
strokeWidth: 1.35,
|
|
10
|
-
});
|
|
11
|
-
|
|
12
|
-
class LocalStorageStateAdapter {
|
|
13
|
-
config;
|
|
14
|
-
constructor(config) {
|
|
15
|
-
this.config = config;
|
|
16
|
-
}
|
|
17
|
-
clear(axis) {
|
|
18
|
-
if (!this.config.isBrowser || !this.config.storage) {
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
this.config.storage.removeItem(this.key(axis));
|
|
22
|
-
this.config.storage.removeItem(this.legacyKey(axis));
|
|
23
|
-
}
|
|
24
|
-
persist(axis, value) {
|
|
25
|
-
if (!this.config.isBrowser || !this.config.storage) {
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
|
-
this.config.storage.setItem(this.key(axis), value);
|
|
29
|
-
this.config.storage.removeItem(this.legacyKey(axis));
|
|
30
|
-
}
|
|
31
|
-
readValue(axis) {
|
|
32
|
-
if (!this.config.isBrowser || !this.config.storage) {
|
|
33
|
-
return null;
|
|
34
|
-
}
|
|
35
|
-
const storedValue = this.config.storage.getItem(this.key(axis));
|
|
36
|
-
if (storedValue !== null) {
|
|
37
|
-
return storedValue;
|
|
38
|
-
}
|
|
39
|
-
const legacyValue = this.config.storage.getItem(this.legacyKey(axis));
|
|
40
|
-
if (legacyValue !== null) {
|
|
41
|
-
this.config.storage.setItem(this.key(axis), legacyValue);
|
|
42
|
-
this.config.storage.removeItem(this.legacyKey(axis));
|
|
43
|
-
return legacyValue;
|
|
44
|
-
}
|
|
45
|
-
return null;
|
|
46
|
-
}
|
|
47
|
-
read(axis, fallback, isValid) {
|
|
48
|
-
if (!this.config.isBrowser || !this.config.storage) {
|
|
49
|
-
return fallback;
|
|
50
|
-
}
|
|
51
|
-
const storedValue = this.config.storage.getItem(this.key(axis));
|
|
52
|
-
if (storedValue && isValid(storedValue)) {
|
|
53
|
-
return storedValue;
|
|
54
|
-
}
|
|
55
|
-
const legacyValue = this.config.storage.getItem(this.legacyKey(axis));
|
|
56
|
-
if (legacyValue && isValid(legacyValue)) {
|
|
57
|
-
this.config.storage.setItem(this.key(axis), legacyValue);
|
|
58
|
-
this.config.storage.removeItem(this.legacyKey(axis));
|
|
59
|
-
return legacyValue;
|
|
60
|
-
}
|
|
61
|
-
return fallback;
|
|
62
|
-
}
|
|
63
|
-
key(axis) {
|
|
64
|
-
return this.config.keys[axis];
|
|
65
|
-
}
|
|
66
|
-
legacyKey(axis) {
|
|
67
|
-
return `${this.config.legacyPrefix}:${axis}`;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
const navigationLucideIconRegistry = buildNavigationLucideIconRegistry();
|
|
72
|
-
function buildNavigationLucideIconRegistry() {
|
|
73
|
-
const registry = new Map();
|
|
74
|
-
for (const icon of Object.values(icons)) {
|
|
75
|
-
registry.set(icon.icon.name, icon);
|
|
76
|
-
for (const alias of icon.icon.aliases ?? []) {
|
|
77
|
-
registry.set(alias, icon);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
return registry;
|
|
81
|
-
}
|
|
82
|
-
class NavigationItemContent {
|
|
83
|
-
item = input.required(...(ngDevMode ? [{ debugName: "item" }] : /* istanbul ignore next */ []));
|
|
84
|
-
level = input(0, ...(ngDevMode ? [{ debugName: "level" }] : /* istanbul ignore next */ []));
|
|
85
|
-
variant = input('horizontal', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
86
|
-
resolvedIcon = computed(() => {
|
|
87
|
-
const iconName = this.item().icon;
|
|
88
|
-
return iconName ? (navigationLucideIconRegistry.get(iconName) ?? null) : null;
|
|
89
|
-
}, ...(ngDevMode ? [{ debugName: "resolvedIcon" }] : /* istanbul ignore next */ []));
|
|
90
|
-
horizontalIconClass = computed(() => this.joinClasses('horizontal-navigation-item-icon', this.item().classes?.icon), ...(ngDevMode ? [{ debugName: "horizontalIconClass" }] : /* istanbul ignore next */ []));
|
|
91
|
-
verticalIconClass = computed(() => this.joinClasses('kit-navigation-item-icon', this.item().classes?.icon), ...(ngDevMode ? [{ debugName: "verticalIconClass" }] : /* istanbul ignore next */ []));
|
|
92
|
-
horizontalTitleClass = computed(() => this.joinClasses('horizontal-navigation-item-label', this.item().classes?.title), ...(ngDevMode ? [{ debugName: "horizontalTitleClass" }] : /* istanbul ignore next */ []));
|
|
93
|
-
titleClass = computed(() => this.item().classes?.title ?? null, ...(ngDevMode ? [{ debugName: "titleClass" }] : /* istanbul ignore next */ []));
|
|
94
|
-
subtitleClass = computed(() => this.item().classes?.subtitle ?? null, ...(ngDevMode ? [{ debugName: "subtitleClass" }] : /* istanbul ignore next */ []));
|
|
95
|
-
horizontalBadgeClass = computed(() => this.joinClasses('horizontal-navigation-item-badge', !this.item().badge?.classes ? 'bg-primary text-primary-foreground' : null, this.item().badge?.classes), ...(ngDevMode ? [{ debugName: "horizontalBadgeClass" }] : /* istanbul ignore next */ []));
|
|
96
|
-
verticalBadgeClass = computed(() => this.joinClasses('kit-navigation-item-badge-content', this.item().badge?.classes), ...(ngDevMode ? [{ debugName: "verticalBadgeClass" }] : /* istanbul ignore next */ []));
|
|
97
|
-
titleContainerClass = computed(() => this.variant() === 'vertical-group' ? 'kit-navigation-group-title' : 'kit-navigation-item-title', ...(ngDevMode ? [{ debugName: "titleContainerClass" }] : /* istanbul ignore next */ []));
|
|
98
|
-
subtitleContainerClass = computed(() => this.variant() === 'vertical-group' ? 'kit-navigation-group-subtitle' : 'kit-navigation-item-subtitle', ...(ngDevMode ? [{ debugName: "subtitleContainerClass" }] : /* istanbul ignore next */ []));
|
|
99
|
-
joinClasses(...classNames) {
|
|
100
|
-
const value = classNames.filter((className) => !!className).join(' ');
|
|
101
|
-
return value || null;
|
|
102
|
-
}
|
|
103
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: NavigationItemContent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
104
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: NavigationItemContent, isStandalone: true, selector: "navigation-item-content", inputs: { item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: true, transformFunction: null }, level: { classPropertyName: "level", publicName: "level", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, providers: [libraryLucideConfigProvider], ngImport: i0, template: `
|
|
105
|
-
@if (variant() === 'horizontal') {
|
|
106
|
-
<span class="horizontal-navigation-item-body">
|
|
107
|
-
<span
|
|
108
|
-
class="horizontal-navigation-item-leading"
|
|
109
|
-
[class.horizontal-navigation-item-leading--nested]="level() > 0">
|
|
110
|
-
@if (resolvedIcon(); as icon) {
|
|
111
|
-
<svg
|
|
112
|
-
[lucideIcon]="icon"
|
|
113
|
-
[absoluteStrokeWidth]="true"
|
|
114
|
-
[attr.class]="horizontalIconClass()"
|
|
115
|
-
aria-hidden="true"></svg>
|
|
116
|
-
}
|
|
117
|
-
<span [attr.class]="horizontalTitleClass()">
|
|
118
|
-
{{ item().title }}
|
|
119
|
-
</span>
|
|
120
|
-
</span>
|
|
121
|
-
|
|
122
|
-
@if (item().badge?.title) {
|
|
123
|
-
<span [attr.class]="horizontalBadgeClass()">
|
|
124
|
-
{{ item().badge?.title }}
|
|
125
|
-
</span>
|
|
126
|
-
}
|
|
127
|
-
</span>
|
|
128
|
-
} @else {
|
|
129
|
-
<span class="kit-navigation-item-content">
|
|
130
|
-
@if (resolvedIcon(); as icon) {
|
|
131
|
-
<svg
|
|
132
|
-
[lucideIcon]="icon"
|
|
133
|
-
[absoluteStrokeWidth]="true"
|
|
134
|
-
[attr.class]="verticalIconClass()"
|
|
135
|
-
[size]="18"
|
|
136
|
-
aria-hidden="true"></svg>
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
<div class="kit-navigation-item-title-wrapper">
|
|
140
|
-
<div [class]="titleContainerClass()">
|
|
141
|
-
<span [attr.class]="titleClass()">
|
|
142
|
-
{{ item().title }}
|
|
143
|
-
</span>
|
|
144
|
-
</div>
|
|
145
|
-
|
|
146
|
-
@if (item().subtitle) {
|
|
147
|
-
<div [class]="subtitleContainerClass()">
|
|
148
|
-
<span [attr.class]="subtitleClass()">
|
|
149
|
-
{{ item().subtitle }}
|
|
150
|
-
</span>
|
|
151
|
-
</div>
|
|
152
|
-
}
|
|
153
|
-
</div>
|
|
154
|
-
|
|
155
|
-
@if (item().badge?.title) {
|
|
156
|
-
<div class="kit-navigation-item-badge">
|
|
157
|
-
<div [attr.class]="verticalBadgeClass()">
|
|
158
|
-
{{ item().badge?.title }}
|
|
159
|
-
</div>
|
|
160
|
-
</div>
|
|
161
|
-
}
|
|
162
|
-
</span>
|
|
163
|
-
}
|
|
164
|
-
`, isInline: true, styles: [":host{display:contents}.kit-navigation-item-content{display:flex;align-items:center;width:100%;min-width:0}.kit-navigation-item-title-wrapper{display:flex;flex:1 1 auto;min-width:0;flex-direction:column}.kit-navigation-item-title,.kit-navigation-group-title,.kit-navigation-item-subtitle,.kit-navigation-group-subtitle{min-width:0}\n"], dependencies: [{ kind: "component", type: LucideDynamicIcon, selector: "svg[lucideIcon]", inputs: ["lucideIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
165
|
-
}
|
|
166
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: NavigationItemContent, decorators: [{
|
|
167
|
-
type: Component,
|
|
168
|
-
args: [{ selector: 'navigation-item-content', template: `
|
|
169
|
-
@if (variant() === 'horizontal') {
|
|
170
|
-
<span class="horizontal-navigation-item-body">
|
|
171
|
-
<span
|
|
172
|
-
class="horizontal-navigation-item-leading"
|
|
173
|
-
[class.horizontal-navigation-item-leading--nested]="level() > 0">
|
|
174
|
-
@if (resolvedIcon(); as icon) {
|
|
175
|
-
<svg
|
|
176
|
-
[lucideIcon]="icon"
|
|
177
|
-
[absoluteStrokeWidth]="true"
|
|
178
|
-
[attr.class]="horizontalIconClass()"
|
|
179
|
-
aria-hidden="true"></svg>
|
|
180
|
-
}
|
|
181
|
-
<span [attr.class]="horizontalTitleClass()">
|
|
182
|
-
{{ item().title }}
|
|
183
|
-
</span>
|
|
184
|
-
</span>
|
|
185
|
-
|
|
186
|
-
@if (item().badge?.title) {
|
|
187
|
-
<span [attr.class]="horizontalBadgeClass()">
|
|
188
|
-
{{ item().badge?.title }}
|
|
189
|
-
</span>
|
|
190
|
-
}
|
|
191
|
-
</span>
|
|
192
|
-
} @else {
|
|
193
|
-
<span class="kit-navigation-item-content">
|
|
194
|
-
@if (resolvedIcon(); as icon) {
|
|
195
|
-
<svg
|
|
196
|
-
[lucideIcon]="icon"
|
|
197
|
-
[absoluteStrokeWidth]="true"
|
|
198
|
-
[attr.class]="verticalIconClass()"
|
|
199
|
-
[size]="18"
|
|
200
|
-
aria-hidden="true"></svg>
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
<div class="kit-navigation-item-title-wrapper">
|
|
204
|
-
<div [class]="titleContainerClass()">
|
|
205
|
-
<span [attr.class]="titleClass()">
|
|
206
|
-
{{ item().title }}
|
|
207
|
-
</span>
|
|
208
|
-
</div>
|
|
209
|
-
|
|
210
|
-
@if (item().subtitle) {
|
|
211
|
-
<div [class]="subtitleContainerClass()">
|
|
212
|
-
<span [attr.class]="subtitleClass()">
|
|
213
|
-
{{ item().subtitle }}
|
|
214
|
-
</span>
|
|
215
|
-
</div>
|
|
216
|
-
}
|
|
217
|
-
</div>
|
|
218
|
-
|
|
219
|
-
@if (item().badge?.title) {
|
|
220
|
-
<div class="kit-navigation-item-badge">
|
|
221
|
-
<div [attr.class]="verticalBadgeClass()">
|
|
222
|
-
{{ item().badge?.title }}
|
|
223
|
-
</div>
|
|
224
|
-
</div>
|
|
225
|
-
}
|
|
226
|
-
</span>
|
|
227
|
-
}
|
|
228
|
-
`, imports: [LucideDynamicIcon], providers: [libraryLucideConfigProvider], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, styles: [":host{display:contents}.kit-navigation-item-content{display:flex;align-items:center;width:100%;min-width:0}.kit-navigation-item-title-wrapper{display:flex;flex:1 1 auto;min-width:0;flex-direction:column}.kit-navigation-item-title,.kit-navigation-group-title,.kit-navigation-item-subtitle,.kit-navigation-group-subtitle{min-width:0}\n"] }]
|
|
229
|
-
}], propDecorators: { item: [{ type: i0.Input, args: [{ isSignal: true, alias: "item", required: true }] }], level: [{ type: i0.Input, args: [{ isSignal: true, alias: "level", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }] } });
|
|
230
|
-
|
|
231
|
-
function trackNavigationTreeItem(index, item) {
|
|
232
|
-
return item.id || item.title || index;
|
|
233
|
-
}
|
|
234
|
-
function getNavigationTreePathKey(parentKey, item) {
|
|
235
|
-
const key = item.id || item.title;
|
|
236
|
-
if (!key) {
|
|
237
|
-
return parentKey;
|
|
238
|
-
}
|
|
239
|
-
return `${parentKey}/${key}`;
|
|
240
|
-
}
|
|
241
|
-
function isNavigationTreeItemExpanded(expandedByParent, parentKey, item) {
|
|
242
|
-
return expandedByParent[parentKey] === getNavigationTreePathKey(parentKey, item);
|
|
243
|
-
}
|
|
244
|
-
function toggleNavigationTreeItemExpanded(expandedByParent, parentKey, item) {
|
|
245
|
-
const key = getNavigationTreePathKey(parentKey, item);
|
|
246
|
-
if (expandedByParent[parentKey] === key) {
|
|
247
|
-
const next = { ...expandedByParent };
|
|
248
|
-
delete next[parentKey];
|
|
249
|
-
return next;
|
|
250
|
-
}
|
|
251
|
-
return {
|
|
252
|
-
...expandedByParent,
|
|
253
|
-
[parentKey]: key,
|
|
254
|
-
};
|
|
255
|
-
}
|
|
256
|
-
function hasActiveNavigationDescendant(item, isItemActive) {
|
|
257
|
-
for (const child of getNavigationChildren(item)) {
|
|
258
|
-
if (isItemActive(child)) {
|
|
259
|
-
return true;
|
|
260
|
-
}
|
|
261
|
-
if (hasNavigationChildren(child) && hasActiveNavigationDescendant(child, isItemActive)) {
|
|
262
|
-
return true;
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
return false;
|
|
266
|
-
}
|
|
267
|
-
function isNavigationTreeDescendant(parent, item) {
|
|
268
|
-
for (const child of getNavigationChildren(parent)) {
|
|
269
|
-
if (child === item) {
|
|
270
|
-
return true;
|
|
271
|
-
}
|
|
272
|
-
if (hasNavigationChildren(child) && isNavigationTreeDescendant(child, item)) {
|
|
273
|
-
return true;
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
return false;
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
class NavigationTreeOutlet {
|
|
280
|
-
items = input([], ...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
|
|
281
|
-
level = input(0, ...(ngDevMode ? [{ debugName: "level" }] : /* istanbul ignore next */ []));
|
|
282
|
-
parentKey = input('root', ...(ngDevMode ? [{ debugName: "parentKey" }] : /* istanbul ignore next */ []));
|
|
283
|
-
data = input(null, ...(ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []));
|
|
284
|
-
branchTemplate = input.required(...(ngDevMode ? [{ debugName: "branchTemplate" }] : /* istanbul ignore next */ []));
|
|
285
|
-
leafTemplate = input.required(...(ngDevMode ? [{ debugName: "leafTemplate" }] : /* istanbul ignore next */ []));
|
|
286
|
-
groupTemplate = input.required(...(ngDevMode ? [{ debugName: "groupTemplate" }] : /* istanbul ignore next */ []));
|
|
287
|
-
dividerTemplate = input(null, ...(ngDevMode ? [{ debugName: "dividerTemplate" }] : /* istanbul ignore next */ []));
|
|
288
|
-
spacerTemplate = input(null, ...(ngDevMode ? [{ debugName: "spacerTemplate" }] : /* istanbul ignore next */ []));
|
|
289
|
-
trackByFn = input(trackNavigationTreeItem, ...(ngDevMode ? [{ debugName: "trackByFn" }] : /* istanbul ignore next */ []));
|
|
290
|
-
shouldRenderItemFn = input(shouldRenderNavigationItem, ...(ngDevMode ? [{ debugName: "shouldRenderItemFn" }] : /* istanbul ignore next */ []));
|
|
291
|
-
hasChildrenFn = input(hasNavigationChildren, ...(ngDevMode ? [{ debugName: "hasChildrenFn" }] : /* istanbul ignore next */ []));
|
|
292
|
-
resolveParentKeyFn = input(getNavigationTreePathKey, ...(ngDevMode ? [{ debugName: "resolveParentKeyFn" }] : /* istanbul ignore next */ []));
|
|
293
|
-
trackItem(index, item) {
|
|
294
|
-
return this.trackByFn()(index, item);
|
|
295
|
-
}
|
|
296
|
-
shouldRender(item) {
|
|
297
|
-
return this.shouldRenderItemFn()(item);
|
|
298
|
-
}
|
|
299
|
-
hasChildren(item) {
|
|
300
|
-
return this.hasChildrenFn()(item);
|
|
301
|
-
}
|
|
302
|
-
resolveParentKey(parentKey, item) {
|
|
303
|
-
return this.resolveParentKeyFn()(parentKey, item);
|
|
304
|
-
}
|
|
305
|
-
templateContext(item, isLast) {
|
|
306
|
-
return {
|
|
307
|
-
$implicit: item,
|
|
308
|
-
level: this.level(),
|
|
309
|
-
parentKey: this.parentKey(),
|
|
310
|
-
isLast,
|
|
311
|
-
data: this.data(),
|
|
312
|
-
};
|
|
313
|
-
}
|
|
314
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: NavigationTreeOutlet, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
315
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: NavigationTreeOutlet, isStandalone: true, selector: "navigation-tree-outlet", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, level: { classPropertyName: "level", publicName: "level", isSignal: true, isRequired: false, transformFunction: null }, parentKey: { classPropertyName: "parentKey", publicName: "parentKey", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, branchTemplate: { classPropertyName: "branchTemplate", publicName: "branchTemplate", isSignal: true, isRequired: true, transformFunction: null }, leafTemplate: { classPropertyName: "leafTemplate", publicName: "leafTemplate", isSignal: true, isRequired: true, transformFunction: null }, groupTemplate: { classPropertyName: "groupTemplate", publicName: "groupTemplate", isSignal: true, isRequired: true, transformFunction: null }, dividerTemplate: { classPropertyName: "dividerTemplate", publicName: "dividerTemplate", isSignal: true, isRequired: false, transformFunction: null }, spacerTemplate: { classPropertyName: "spacerTemplate", publicName: "spacerTemplate", isSignal: true, isRequired: false, transformFunction: null }, trackByFn: { classPropertyName: "trackByFn", publicName: "trackByFn", isSignal: true, isRequired: false, transformFunction: null }, shouldRenderItemFn: { classPropertyName: "shouldRenderItemFn", publicName: "shouldRenderItemFn", isSignal: true, isRequired: false, transformFunction: null }, hasChildrenFn: { classPropertyName: "hasChildrenFn", publicName: "hasChildrenFn", isSignal: true, isRequired: false, transformFunction: null }, resolveParentKeyFn: { classPropertyName: "resolveParentKeyFn", publicName: "resolveParentKeyFn", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
316
|
-
@for (child of items(); track trackItem($index, child); let isLast = $last) {
|
|
317
|
-
@if (shouldRender(child)) {
|
|
318
|
-
@switch (child.type) {
|
|
319
|
-
@case ('basic') {
|
|
320
|
-
<ng-container
|
|
321
|
-
[ngTemplateOutlet]="leafTemplate()"
|
|
322
|
-
[ngTemplateOutletContext]="templateContext(child, isLast)"></ng-container>
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
@case ('aside') {
|
|
326
|
-
@if (hasChildren(child)) {
|
|
327
|
-
<ng-container
|
|
328
|
-
[ngTemplateOutlet]="branchTemplate()"
|
|
329
|
-
[ngTemplateOutletContext]="templateContext(child, isLast)"></ng-container>
|
|
330
|
-
} @else {
|
|
331
|
-
<ng-container
|
|
332
|
-
[ngTemplateOutlet]="leafTemplate()"
|
|
333
|
-
[ngTemplateOutletContext]="templateContext(child, isLast)"></ng-container>
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
@case ('collapsable') {
|
|
338
|
-
@if (hasChildren(child)) {
|
|
339
|
-
<ng-container
|
|
340
|
-
[ngTemplateOutlet]="branchTemplate()"
|
|
341
|
-
[ngTemplateOutletContext]="templateContext(child, isLast)"></ng-container>
|
|
342
|
-
} @else {
|
|
343
|
-
<ng-container
|
|
344
|
-
[ngTemplateOutlet]="leafTemplate()"
|
|
345
|
-
[ngTemplateOutletContext]="templateContext(child, isLast)"></ng-container>
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
|
-
|
|
349
|
-
@case ('group') {
|
|
350
|
-
@if (hasChildren(child)) {
|
|
351
|
-
<ng-container
|
|
352
|
-
[ngTemplateOutlet]="groupTemplate()"
|
|
353
|
-
[ngTemplateOutletContext]="templateContext(child, isLast)"></ng-container>
|
|
354
|
-
<navigation-tree-outlet
|
|
355
|
-
[items]="child.children || []"
|
|
356
|
-
[level]="level() + 1"
|
|
357
|
-
[parentKey]="resolveParentKey(parentKey(), child)"
|
|
358
|
-
[data]="data()"
|
|
359
|
-
[branchTemplate]="branchTemplate()"
|
|
360
|
-
[leafTemplate]="leafTemplate()"
|
|
361
|
-
[groupTemplate]="groupTemplate()"
|
|
362
|
-
[dividerTemplate]="dividerTemplate()"
|
|
363
|
-
[spacerTemplate]="spacerTemplate()"
|
|
364
|
-
[trackByFn]="trackByFn()"
|
|
365
|
-
[shouldRenderItemFn]="shouldRenderItemFn()"
|
|
366
|
-
[hasChildrenFn]="hasChildrenFn()"
|
|
367
|
-
[resolveParentKeyFn]="resolveParentKeyFn()" />
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
@case ('divider') {
|
|
372
|
-
@if (dividerTemplate()) {
|
|
373
|
-
<ng-container
|
|
374
|
-
[ngTemplateOutlet]="dividerTemplate()"
|
|
375
|
-
[ngTemplateOutletContext]="templateContext(child, isLast)"></ng-container>
|
|
376
|
-
}
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
@case ('spacer') {
|
|
380
|
-
@if (spacerTemplate()) {
|
|
381
|
-
<ng-container
|
|
382
|
-
[ngTemplateOutlet]="spacerTemplate()"
|
|
383
|
-
[ngTemplateOutletContext]="templateContext(child, isLast)"></ng-container>
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
|
|
387
|
-
@default {
|
|
388
|
-
<ng-container
|
|
389
|
-
[ngTemplateOutlet]="leafTemplate()"
|
|
390
|
-
[ngTemplateOutletContext]="templateContext(child, isLast)"></ng-container>
|
|
391
|
-
}
|
|
392
|
-
}
|
|
393
|
-
}
|
|
394
|
-
}
|
|
395
|
-
`, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "component", type: i0.forwardRef(() => NavigationTreeOutlet), selector: "navigation-tree-outlet", inputs: ["items", "level", "parentKey", "data", "branchTemplate", "leafTemplate", "groupTemplate", "dividerTemplate", "spacerTemplate", "trackByFn", "shouldRenderItemFn", "hasChildrenFn", "resolveParentKeyFn"] }, { kind: "directive", type: i0.forwardRef(() => NgTemplateOutlet), selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
396
|
-
}
|
|
397
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: NavigationTreeOutlet, decorators: [{
|
|
398
|
-
type: Component,
|
|
399
|
-
args: [{ selector: 'navigation-tree-outlet', template: `
|
|
400
|
-
@for (child of items(); track trackItem($index, child); let isLast = $last) {
|
|
401
|
-
@if (shouldRender(child)) {
|
|
402
|
-
@switch (child.type) {
|
|
403
|
-
@case ('basic') {
|
|
404
|
-
<ng-container
|
|
405
|
-
[ngTemplateOutlet]="leafTemplate()"
|
|
406
|
-
[ngTemplateOutletContext]="templateContext(child, isLast)"></ng-container>
|
|
407
|
-
}
|
|
408
|
-
|
|
409
|
-
@case ('aside') {
|
|
410
|
-
@if (hasChildren(child)) {
|
|
411
|
-
<ng-container
|
|
412
|
-
[ngTemplateOutlet]="branchTemplate()"
|
|
413
|
-
[ngTemplateOutletContext]="templateContext(child, isLast)"></ng-container>
|
|
414
|
-
} @else {
|
|
415
|
-
<ng-container
|
|
416
|
-
[ngTemplateOutlet]="leafTemplate()"
|
|
417
|
-
[ngTemplateOutletContext]="templateContext(child, isLast)"></ng-container>
|
|
418
|
-
}
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
@case ('collapsable') {
|
|
422
|
-
@if (hasChildren(child)) {
|
|
423
|
-
<ng-container
|
|
424
|
-
[ngTemplateOutlet]="branchTemplate()"
|
|
425
|
-
[ngTemplateOutletContext]="templateContext(child, isLast)"></ng-container>
|
|
426
|
-
} @else {
|
|
427
|
-
<ng-container
|
|
428
|
-
[ngTemplateOutlet]="leafTemplate()"
|
|
429
|
-
[ngTemplateOutletContext]="templateContext(child, isLast)"></ng-container>
|
|
430
|
-
}
|
|
431
|
-
}
|
|
432
|
-
|
|
433
|
-
@case ('group') {
|
|
434
|
-
@if (hasChildren(child)) {
|
|
435
|
-
<ng-container
|
|
436
|
-
[ngTemplateOutlet]="groupTemplate()"
|
|
437
|
-
[ngTemplateOutletContext]="templateContext(child, isLast)"></ng-container>
|
|
438
|
-
<navigation-tree-outlet
|
|
439
|
-
[items]="child.children || []"
|
|
440
|
-
[level]="level() + 1"
|
|
441
|
-
[parentKey]="resolveParentKey(parentKey(), child)"
|
|
442
|
-
[data]="data()"
|
|
443
|
-
[branchTemplate]="branchTemplate()"
|
|
444
|
-
[leafTemplate]="leafTemplate()"
|
|
445
|
-
[groupTemplate]="groupTemplate()"
|
|
446
|
-
[dividerTemplate]="dividerTemplate()"
|
|
447
|
-
[spacerTemplate]="spacerTemplate()"
|
|
448
|
-
[trackByFn]="trackByFn()"
|
|
449
|
-
[shouldRenderItemFn]="shouldRenderItemFn()"
|
|
450
|
-
[hasChildrenFn]="hasChildrenFn()"
|
|
451
|
-
[resolveParentKeyFn]="resolveParentKeyFn()" />
|
|
452
|
-
}
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
@case ('divider') {
|
|
456
|
-
@if (dividerTemplate()) {
|
|
457
|
-
<ng-container
|
|
458
|
-
[ngTemplateOutlet]="dividerTemplate()"
|
|
459
|
-
[ngTemplateOutletContext]="templateContext(child, isLast)"></ng-container>
|
|
460
|
-
}
|
|
461
|
-
}
|
|
462
|
-
|
|
463
|
-
@case ('spacer') {
|
|
464
|
-
@if (spacerTemplate()) {
|
|
465
|
-
<ng-container
|
|
466
|
-
[ngTemplateOutlet]="spacerTemplate()"
|
|
467
|
-
[ngTemplateOutletContext]="templateContext(child, isLast)"></ng-container>
|
|
468
|
-
}
|
|
469
|
-
}
|
|
470
|
-
|
|
471
|
-
@default {
|
|
472
|
-
<ng-container
|
|
473
|
-
[ngTemplateOutlet]="leafTemplate()"
|
|
474
|
-
[ngTemplateOutletContext]="templateContext(child, isLast)"></ng-container>
|
|
475
|
-
}
|
|
476
|
-
}
|
|
477
|
-
}
|
|
478
|
-
}
|
|
479
|
-
`, imports: [NgTemplateOutlet, forwardRef(() => NavigationTreeOutlet)], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, styles: [":host{display:block}\n"] }]
|
|
480
|
-
}], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], level: [{ type: i0.Input, args: [{ isSignal: true, alias: "level", required: false }] }], parentKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "parentKey", required: false }] }], data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }], branchTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "branchTemplate", required: true }] }], leafTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "leafTemplate", required: true }] }], groupTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "groupTemplate", required: true }] }], dividerTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "dividerTemplate", required: false }] }], spacerTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "spacerTemplate", required: false }] }], trackByFn: [{ type: i0.Input, args: [{ isSignal: true, alias: "trackByFn", required: false }] }], shouldRenderItemFn: [{ type: i0.Input, args: [{ isSignal: true, alias: "shouldRenderItemFn", required: false }] }], hasChildrenFn: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasChildrenFn", required: false }] }], resolveParentKeyFn: [{ type: i0.Input, args: [{ isSignal: true, alias: "resolveParentKeyFn", required: false }] }] } });
|
|
481
|
-
|
|
482
|
-
/* Internal composition utilities for library entrypoints. Not part of the supported consumer API. */
|
|
483
|
-
|
|
484
|
-
/**
|
|
485
|
-
* Generated bundle index. Do not edit.
|
|
486
|
-
*/
|
|
487
|
-
|
|
488
|
-
export { LocalStorageStateAdapter, NavigationItemContent, NavigationTreeOutlet, getNavigationTreePathKey, hasActiveNavigationDescendant, isNavigationTreeDescendant, isNavigationTreeItemExpanded, libraryLucideConfigProvider, toggleNavigationTreeItemExpanded, trackNavigationTreeItem };
|
|
489
|
-
//# sourceMappingURL=ojiepermana-angular-internal.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ojiepermana-angular-internal.mjs","sources":["../../../projects/library/internal/src/lucide-config.provider.ts","../../../projects/library/internal/src/local-storage-state.ts","../../../projects/library/internal/src/navigation/navigation-item-content.ts","../../../projects/library/internal/src/navigation/navigation-tree.utils.ts","../../../projects/library/internal/src/navigation/navigation-tree-outlet.ts","../../../projects/library/internal/public-api.ts","../../../projects/library/internal/ojiepermana-angular-internal.ts"],"sourcesContent":["import { provideLucideConfig } from '@lucide/angular';\n\nexport const libraryLucideConfigProvider = provideLucideConfig({\n absoluteStrokeWidth: true,\n strokeWidth: 1.35,\n});\n","interface StorageLike {\n getItem(key: string): string | null;\n setItem(key: string, value: string): void;\n removeItem(key: string): void;\n}\n\ninterface LocalStorageStateAdapterConfig<Axis extends string> {\n readonly isBrowser: boolean;\n readonly storage: StorageLike | null;\n readonly keys: Record<Axis, string>;\n readonly legacyPrefix: string;\n}\n\nexport class LocalStorageStateAdapter<Axis extends string> {\n constructor(private readonly config: LocalStorageStateAdapterConfig<Axis>) {}\n\n clear(axis: Axis): void {\n if (!this.config.isBrowser || !this.config.storage) {\n return;\n }\n\n this.config.storage.removeItem(this.key(axis));\n this.config.storage.removeItem(this.legacyKey(axis));\n }\n\n persist(axis: Axis, value: string): void {\n if (!this.config.isBrowser || !this.config.storage) {\n return;\n }\n\n this.config.storage.setItem(this.key(axis), value);\n this.config.storage.removeItem(this.legacyKey(axis));\n }\n\n readValue(axis: Axis): string | null {\n if (!this.config.isBrowser || !this.config.storage) {\n return null;\n }\n\n const storedValue = this.config.storage.getItem(this.key(axis));\n\n if (storedValue !== null) {\n return storedValue;\n }\n\n const legacyValue = this.config.storage.getItem(this.legacyKey(axis));\n\n if (legacyValue !== null) {\n this.config.storage.setItem(this.key(axis), legacyValue);\n this.config.storage.removeItem(this.legacyKey(axis));\n return legacyValue;\n }\n\n return null;\n }\n\n read<T extends string>(axis: Axis, fallback: T, isValid: (value: string) => value is T): T {\n if (!this.config.isBrowser || !this.config.storage) {\n return fallback;\n }\n\n const storedValue = this.config.storage.getItem(this.key(axis));\n\n if (storedValue && isValid(storedValue)) {\n return storedValue;\n }\n\n const legacyValue = this.config.storage.getItem(this.legacyKey(axis));\n\n if (legacyValue && isValid(legacyValue)) {\n this.config.storage.setItem(this.key(axis), legacyValue);\n this.config.storage.removeItem(this.legacyKey(axis));\n return legacyValue;\n }\n\n return fallback;\n }\n\n private key(axis: Axis): string {\n return this.config.keys[axis];\n }\n\n private legacyKey(axis: Axis): string {\n return `${this.config.legacyPrefix}:${axis}`;\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input, ViewEncapsulation } from '@angular/core';\nimport { LucideDynamicIcon, icons as lucideIcons, type LucideIcon } from '@lucide/angular';\nimport { NavigationItem } from '@ojiepermana/angular/navigation';\n\nimport { libraryLucideConfigProvider } from '../lucide-config.provider';\n\ntype NavigationItemContentVariant = 'horizontal' | 'vertical' | 'vertical-group';\n\nconst navigationLucideIconRegistry = buildNavigationLucideIconRegistry();\n\nfunction buildNavigationLucideIconRegistry(): ReadonlyMap<string, LucideIcon> {\n const registry = new Map<string, LucideIcon>();\n\n for (const icon of Object.values(lucideIcons) as LucideIcon[]) {\n registry.set(icon.icon.name, icon);\n\n for (const alias of icon.icon.aliases ?? []) {\n registry.set(alias, icon);\n }\n }\n\n return registry;\n}\n\n@Component({\n selector: 'navigation-item-content',\n template: `\n @if (variant() === 'horizontal') {\n <span class=\"horizontal-navigation-item-body\">\n <span\n class=\"horizontal-navigation-item-leading\"\n [class.horizontal-navigation-item-leading--nested]=\"level() > 0\">\n @if (resolvedIcon(); as icon) {\n <svg\n [lucideIcon]=\"icon\"\n [absoluteStrokeWidth]=\"true\"\n [attr.class]=\"horizontalIconClass()\"\n aria-hidden=\"true\"></svg>\n }\n <span [attr.class]=\"horizontalTitleClass()\">\n {{ item().title }}\n </span>\n </span>\n\n @if (item().badge?.title) {\n <span [attr.class]=\"horizontalBadgeClass()\">\n {{ item().badge?.title }}\n </span>\n }\n </span>\n } @else {\n <span class=\"kit-navigation-item-content\">\n @if (resolvedIcon(); as icon) {\n <svg\n [lucideIcon]=\"icon\"\n [absoluteStrokeWidth]=\"true\"\n [attr.class]=\"verticalIconClass()\"\n [size]=\"18\"\n aria-hidden=\"true\"></svg>\n }\n\n <div class=\"kit-navigation-item-title-wrapper\">\n <div [class]=\"titleContainerClass()\">\n <span [attr.class]=\"titleClass()\">\n {{ item().title }}\n </span>\n </div>\n\n @if (item().subtitle) {\n <div [class]=\"subtitleContainerClass()\">\n <span [attr.class]=\"subtitleClass()\">\n {{ item().subtitle }}\n </span>\n </div>\n }\n </div>\n\n @if (item().badge?.title) {\n <div class=\"kit-navigation-item-badge\">\n <div [attr.class]=\"verticalBadgeClass()\">\n {{ item().badge?.title }}\n </div>\n </div>\n }\n </span>\n }\n `,\n styles: [\n `\n :host {\n display: contents;\n }\n\n .kit-navigation-item-content {\n display: flex;\n align-items: center;\n width: 100%;\n min-width: 0;\n }\n\n .kit-navigation-item-title-wrapper {\n display: flex;\n flex: 1 1 auto;\n min-width: 0;\n flex-direction: column;\n }\n\n .kit-navigation-item-title,\n .kit-navigation-group-title,\n .kit-navigation-item-subtitle,\n .kit-navigation-group-subtitle {\n min-width: 0;\n }\n `,\n ],\n imports: [LucideDynamicIcon],\n providers: [libraryLucideConfigProvider],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class NavigationItemContent {\n item = input.required<NavigationItem>();\n level = input(0);\n variant = input<NavigationItemContentVariant>('horizontal');\n\n protected readonly resolvedIcon = computed(() => {\n const iconName = this.item().icon;\n return iconName ? (navigationLucideIconRegistry.get(iconName) ?? null) : null;\n });\n\n protected readonly horizontalIconClass = computed(() =>\n this.joinClasses('horizontal-navigation-item-icon', this.item().classes?.icon),\n );\n protected readonly verticalIconClass = computed(() =>\n this.joinClasses('kit-navigation-item-icon', this.item().classes?.icon),\n );\n protected readonly horizontalTitleClass = computed(() =>\n this.joinClasses('horizontal-navigation-item-label', this.item().classes?.title),\n );\n protected readonly titleClass = computed(() => this.item().classes?.title ?? null);\n protected readonly subtitleClass = computed(() => this.item().classes?.subtitle ?? null);\n protected readonly horizontalBadgeClass = computed(() =>\n this.joinClasses(\n 'horizontal-navigation-item-badge',\n !this.item().badge?.classes ? 'bg-primary text-primary-foreground' : null,\n this.item().badge?.classes,\n ),\n );\n protected readonly verticalBadgeClass = computed(() =>\n this.joinClasses('kit-navigation-item-badge-content', this.item().badge?.classes),\n );\n protected readonly titleContainerClass = computed(() =>\n this.variant() === 'vertical-group' ? 'kit-navigation-group-title' : 'kit-navigation-item-title',\n );\n protected readonly subtitleContainerClass = computed(() =>\n this.variant() === 'vertical-group' ? 'kit-navigation-group-subtitle' : 'kit-navigation-item-subtitle',\n );\n\n private joinClasses(...classNames: Array<string | null | undefined | false>): string | null {\n const value = classNames.filter((className): className is string => !!className).join(' ');\n return value || null;\n }\n}\n","import { NavigationItem, getNavigationChildren, hasNavigationChildren } from '@ojiepermana/angular/navigation';\n\nexport type NavigationExpandedItemsByParent = Record<string, string>;\n\nexport function trackNavigationTreeItem(index: number, item: NavigationItem): string | number | undefined {\n return item.id || item.title || index;\n}\n\nexport function getNavigationTreePathKey(parentKey: string, item: NavigationItem): string {\n const key = item.id || item.title;\n if (!key) {\n return parentKey;\n }\n\n return `${parentKey}/${key}`;\n}\n\nexport function isNavigationTreeItemExpanded(\n expandedByParent: NavigationExpandedItemsByParent,\n parentKey: string,\n item: NavigationItem,\n): boolean {\n return expandedByParent[parentKey] === getNavigationTreePathKey(parentKey, item);\n}\n\nexport function toggleNavigationTreeItemExpanded(\n expandedByParent: NavigationExpandedItemsByParent,\n parentKey: string,\n item: NavigationItem,\n): NavigationExpandedItemsByParent {\n const key = getNavigationTreePathKey(parentKey, item);\n\n if (expandedByParent[parentKey] === key) {\n const next = { ...expandedByParent };\n delete next[parentKey];\n return next;\n }\n\n return {\n ...expandedByParent,\n [parentKey]: key,\n };\n}\n\nexport function hasActiveNavigationDescendant(\n item: NavigationItem,\n isItemActive: (item: NavigationItem) => boolean,\n): boolean {\n for (const child of getNavigationChildren(item)) {\n if (isItemActive(child)) {\n return true;\n }\n\n if (hasNavigationChildren(child) && hasActiveNavigationDescendant(child, isItemActive)) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function isNavigationTreeDescendant(parent: NavigationItem, item: NavigationItem): boolean {\n for (const child of getNavigationChildren(parent)) {\n if (child === item) {\n return true;\n }\n\n if (hasNavigationChildren(child) && isNavigationTreeDescendant(child, item)) {\n return true;\n }\n }\n\n return false;\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, forwardRef, input, TemplateRef, ViewEncapsulation } from '@angular/core';\nimport { NavigationItem, hasNavigationChildren, shouldRenderNavigationItem } from '@ojiepermana/angular/navigation';\n\nimport { getNavigationTreePathKey, trackNavigationTreeItem } from './navigation-tree.utils';\n\nexport type NavigationTreeTemplateData = Record<string, unknown>;\n\nexport interface NavigationTreeItemContext {\n $implicit: NavigationItem;\n level: number;\n parentKey: string;\n isLast: boolean;\n data: NavigationTreeTemplateData | null;\n}\n\n@Component({\n selector: 'navigation-tree-outlet',\n template: `\n @for (child of items(); track trackItem($index, child); let isLast = $last) {\n @if (shouldRender(child)) {\n @switch (child.type) {\n @case ('basic') {\n <ng-container\n [ngTemplateOutlet]=\"leafTemplate()\"\n [ngTemplateOutletContext]=\"templateContext(child, isLast)\"></ng-container>\n }\n\n @case ('aside') {\n @if (hasChildren(child)) {\n <ng-container\n [ngTemplateOutlet]=\"branchTemplate()\"\n [ngTemplateOutletContext]=\"templateContext(child, isLast)\"></ng-container>\n } @else {\n <ng-container\n [ngTemplateOutlet]=\"leafTemplate()\"\n [ngTemplateOutletContext]=\"templateContext(child, isLast)\"></ng-container>\n }\n }\n\n @case ('collapsable') {\n @if (hasChildren(child)) {\n <ng-container\n [ngTemplateOutlet]=\"branchTemplate()\"\n [ngTemplateOutletContext]=\"templateContext(child, isLast)\"></ng-container>\n } @else {\n <ng-container\n [ngTemplateOutlet]=\"leafTemplate()\"\n [ngTemplateOutletContext]=\"templateContext(child, isLast)\"></ng-container>\n }\n }\n\n @case ('group') {\n @if (hasChildren(child)) {\n <ng-container\n [ngTemplateOutlet]=\"groupTemplate()\"\n [ngTemplateOutletContext]=\"templateContext(child, isLast)\"></ng-container>\n <navigation-tree-outlet\n [items]=\"child.children || []\"\n [level]=\"level() + 1\"\n [parentKey]=\"resolveParentKey(parentKey(), child)\"\n [data]=\"data()\"\n [branchTemplate]=\"branchTemplate()\"\n [leafTemplate]=\"leafTemplate()\"\n [groupTemplate]=\"groupTemplate()\"\n [dividerTemplate]=\"dividerTemplate()\"\n [spacerTemplate]=\"spacerTemplate()\"\n [trackByFn]=\"trackByFn()\"\n [shouldRenderItemFn]=\"shouldRenderItemFn()\"\n [hasChildrenFn]=\"hasChildrenFn()\"\n [resolveParentKeyFn]=\"resolveParentKeyFn()\" />\n }\n }\n\n @case ('divider') {\n @if (dividerTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"dividerTemplate()\"\n [ngTemplateOutletContext]=\"templateContext(child, isLast)\"></ng-container>\n }\n }\n\n @case ('spacer') {\n @if (spacerTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"spacerTemplate()\"\n [ngTemplateOutletContext]=\"templateContext(child, isLast)\"></ng-container>\n }\n }\n\n @default {\n <ng-container\n [ngTemplateOutlet]=\"leafTemplate()\"\n [ngTemplateOutletContext]=\"templateContext(child, isLast)\"></ng-container>\n }\n }\n }\n }\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n imports: [NgTemplateOutlet, forwardRef(() => NavigationTreeOutlet)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class NavigationTreeOutlet {\n items = input<NavigationItem[]>([]);\n level = input(0);\n parentKey = input('root');\n data = input<NavigationTreeTemplateData | null>(null);\n\n branchTemplate = input.required<TemplateRef<NavigationTreeItemContext>>();\n leafTemplate = input.required<TemplateRef<NavigationTreeItemContext>>();\n groupTemplate = input.required<TemplateRef<NavigationTreeItemContext>>();\n dividerTemplate = input<TemplateRef<NavigationTreeItemContext> | null>(null);\n spacerTemplate = input<TemplateRef<NavigationTreeItemContext> | null>(null);\n\n trackByFn = input<(index: number, item: NavigationItem) => string | number | undefined>(trackNavigationTreeItem);\n shouldRenderItemFn = input<(item: NavigationItem) => boolean>(shouldRenderNavigationItem);\n hasChildrenFn = input<(item: NavigationItem) => boolean>(hasNavigationChildren);\n resolveParentKeyFn = input<(parentKey: string, item: NavigationItem) => string>(getNavigationTreePathKey);\n\n trackItem(index: number, item: NavigationItem): string | number | undefined {\n return this.trackByFn()(index, item);\n }\n\n shouldRender(item: NavigationItem): boolean {\n return this.shouldRenderItemFn()(item);\n }\n\n hasChildren(item: NavigationItem): boolean {\n return this.hasChildrenFn()(item);\n }\n\n resolveParentKey(parentKey: string, item: NavigationItem): string {\n return this.resolveParentKeyFn()(parentKey, item);\n }\n\n templateContext(item: NavigationItem, isLast: boolean): NavigationTreeItemContext {\n return {\n $implicit: item,\n level: this.level(),\n parentKey: this.parentKey(),\n isLast,\n data: this.data(),\n };\n }\n}\n","/* Internal composition utilities for library entrypoints. Not part of the supported consumer API. */\n\nexport { libraryLucideConfigProvider } from './src/lucide-config.provider';\nexport { LocalStorageStateAdapter } from './src/local-storage-state';\nexport { NavigationItemContent } from './src/navigation/navigation-item-content';\nexport {\n NavigationTreeOutlet,\n type NavigationTreeItemContext,\n type NavigationTreeTemplateData,\n} from './src/navigation/navigation-tree-outlet';\nexport {\n getNavigationTreePathKey,\n hasActiveNavigationDescendant,\n isNavigationTreeDescendant,\n isNavigationTreeItemExpanded,\n toggleNavigationTreeItemExpanded,\n trackNavigationTreeItem,\n type NavigationExpandedItemsByParent,\n} from './src/navigation/navigation-tree.utils';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["lucideIcons"],"mappings":"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"}
|