@indigina/ui-kit 1.1.447 → 1.1.448
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.
|
@@ -4235,7 +4235,6 @@ class KitNavigationMenuComponent {
|
|
|
4235
4235
|
this.KitSvgIconType = KitSvgIconType;
|
|
4236
4236
|
this.KitTooltipPosition = KitTooltipPosition;
|
|
4237
4237
|
this.isAbsoluteLink = isAbsoluteLink;
|
|
4238
|
-
this.setExpandedStateOnRouterChange();
|
|
4239
4238
|
}
|
|
4240
4239
|
ngOnInit() {
|
|
4241
4240
|
this.setExpandedStateOnRouterChange();
|
|
@@ -4268,29 +4267,16 @@ class KitNavigationMenuComponent {
|
|
|
4268
4267
|
this.router.events.pipe(filter(event => event instanceof NavigationEnd), takeUntilDestroyed(this.destroyRef)).subscribe((event) => this.updateNavigationState(this.menuItems(), event.url));
|
|
4269
4268
|
}
|
|
4270
4269
|
updateNavigationState(items, url) {
|
|
4271
|
-
const
|
|
4272
|
-
|
|
4273
|
-
if (!item.link) {
|
|
4274
|
-
return false;
|
|
4275
|
-
}
|
|
4276
|
-
if (item.link === rootPath) {
|
|
4277
|
-
return url === rootPath;
|
|
4278
|
-
}
|
|
4279
|
-
if (!(url === item.link || url.startsWith(item.link))) {
|
|
4280
|
-
return false;
|
|
4281
|
-
}
|
|
4282
|
-
if (!item.queryParams || Object.keys(item.queryParams).length === 0) {
|
|
4283
|
-
return true;
|
|
4284
|
-
}
|
|
4285
|
-
const currentQueryParams = this.router.parseUrl(url).queryParams;
|
|
4286
|
-
return Object.keys(item.queryParams).every(key => currentQueryParams[key] === item.queryParams?.[key]);
|
|
4287
|
-
};
|
|
4270
|
+
const currentPath = this.getPathname(url);
|
|
4271
|
+
const currentQueryParams = this.router.parseUrl(url).queryParams;
|
|
4288
4272
|
items.forEach(item => {
|
|
4289
|
-
|
|
4273
|
+
const itemMatches = this.isItemMatch(item, currentPath, currentQueryParams);
|
|
4274
|
+
if (item.items?.length) {
|
|
4290
4275
|
this.updateNavigationState(item.items, url);
|
|
4291
|
-
|
|
4292
|
-
|
|
4293
|
-
item.active =
|
|
4276
|
+
const hasActiveChild = item.items.some(child => child.active);
|
|
4277
|
+
const hasExpandedChild = item.items.some(child => child.expanded);
|
|
4278
|
+
item.active = hasActiveChild || itemMatches;
|
|
4279
|
+
item.expanded = hasExpandedChild || hasActiveChild || itemMatches;
|
|
4294
4280
|
if (item.expanded) {
|
|
4295
4281
|
this.selectedItem.set(item);
|
|
4296
4282
|
this.selectedAppsItems.set(null);
|
|
@@ -4299,7 +4285,7 @@ class KitNavigationMenuComponent {
|
|
|
4299
4285
|
}
|
|
4300
4286
|
else {
|
|
4301
4287
|
item.expanded = false;
|
|
4302
|
-
item.active =
|
|
4288
|
+
item.active = itemMatches;
|
|
4303
4289
|
if (item.active) {
|
|
4304
4290
|
this.selectedItem.set(item);
|
|
4305
4291
|
this.selectedAppsItems.set(null);
|
|
@@ -4309,6 +4295,44 @@ class KitNavigationMenuComponent {
|
|
|
4309
4295
|
});
|
|
4310
4296
|
this.menuItems.set([...items]);
|
|
4311
4297
|
}
|
|
4298
|
+
isItemMatch(item, currentPath, currentQueryParams) {
|
|
4299
|
+
if (item.link) {
|
|
4300
|
+
return this.isLinkMatch(item, currentPath, currentQueryParams);
|
|
4301
|
+
}
|
|
4302
|
+
return this.isGroupPathMatch(item, currentPath);
|
|
4303
|
+
}
|
|
4304
|
+
isGroupPathMatch(item, currentPath) {
|
|
4305
|
+
if (!item.items?.length) {
|
|
4306
|
+
return false;
|
|
4307
|
+
}
|
|
4308
|
+
return item.items.some(child => {
|
|
4309
|
+
if (child.link) {
|
|
4310
|
+
return this.isSameOrChildPath(this.getPathname(child.link), currentPath);
|
|
4311
|
+
}
|
|
4312
|
+
return this.isGroupPathMatch(child, currentPath);
|
|
4313
|
+
});
|
|
4314
|
+
}
|
|
4315
|
+
isLinkMatch(item, currentPath, currentQueryParams) {
|
|
4316
|
+
const rootPath = '/';
|
|
4317
|
+
if (!item.link) {
|
|
4318
|
+
return false;
|
|
4319
|
+
}
|
|
4320
|
+
const itemPath = this.getPathname(item.link);
|
|
4321
|
+
if (itemPath === rootPath) {
|
|
4322
|
+
return currentPath === rootPath;
|
|
4323
|
+
}
|
|
4324
|
+
if (!this.isSameOrChildPath(currentPath, itemPath)) {
|
|
4325
|
+
return false;
|
|
4326
|
+
}
|
|
4327
|
+
if (!item.queryParams || Object.keys(item.queryParams).length === 0) {
|
|
4328
|
+
return true;
|
|
4329
|
+
}
|
|
4330
|
+
return Object.keys(item.queryParams).every(key => currentQueryParams[key] === item.queryParams?.[key]);
|
|
4331
|
+
}
|
|
4332
|
+
getPathname(url) {
|
|
4333
|
+
const segments = this.router.parseUrl(url).root.children.primary?.segments ?? [];
|
|
4334
|
+
return segments.length ? `/${segments.map(segment => segment.path).join('/')}` : '/';
|
|
4335
|
+
}
|
|
4312
4336
|
collapseAllItems(items) {
|
|
4313
4337
|
this.kitNavigationMenuService.setCollapsedState(true);
|
|
4314
4338
|
items.forEach(item => item.expanded = false);
|
|
@@ -4322,6 +4346,9 @@ class KitNavigationMenuComponent {
|
|
|
4322
4346
|
updateMenuState() {
|
|
4323
4347
|
this.kitNavigationMenuService.setSelectedState(!!this.selectedItem()?.items, !!this.selectedAppsItems());
|
|
4324
4348
|
}
|
|
4349
|
+
isSameOrChildPath(currentPath, targetPath) {
|
|
4350
|
+
return currentPath === targetPath || currentPath.startsWith(`${targetPath}/`);
|
|
4351
|
+
}
|
|
4325
4352
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: KitNavigationMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4326
4353
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: KitNavigationMenuComponent, isStandalone: true, selector: "kit-navigation-menu", inputs: { menuItems: { classPropertyName: "menuItems", publicName: "menuItems", isSignal: true, isRequired: false, transformFunction: null }, appsMenuItems: { classPropertyName: "appsMenuItems", publicName: "appsMenuItems", isSignal: true, isRequired: false, transformFunction: null }, logoPath: { classPropertyName: "logoPath", publicName: "logoPath", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { menuItems: "menuItemsChange" }, ngImport: i0, template: "<div class=\"kit-navigation-menu\"\n [class.collapsed]=\"collapsed()\">\n <div class=\"main-panel\">\n @if (appsMenuItems().length > 1) {\n <button class=\"app-btn\"\n [class.active]=\"selectedAppsItems() && !collapsed()\"\n (click)=\"onAppsMenuButtonClick()\">\n <kit-svg-icon class=\"app-btn-icon\"\n [icon]=\"KitSvgIcon.FOUR_SQUARE\"\n ></kit-svg-icon>\n </button>\n }\n <div class=\"nav-wrap\">\n <div class=\"nav-list\">\n @for (item of menuItems(); track $index) {\n @if (item.items?.length) {\n <a class=\"nav-link\"\n kitTooltip\n kitTooltipFilter=\".nav-link\"\n [kitTooltipPosition]=\"KitTooltipPosition.RIGHT\"\n [title]=\"item.title\"\n [class.active]=\"item.active\"\n (click)=\"handleClick(item)\">\n @if (item.icon) {\n <ng-container *ngTemplateOutlet=\"linkIconTemplate; context: { $implicit: item }\"\n ></ng-container>\n }\n </a>\n } @else {\n @if (item.link) {\n @if (isAbsoluteLink(item.link)) {\n <a class=\"nav-link\"\n kitTooltip\n kitTooltipFilter=\".nav-link\"\n target=\"_blank\"\n [kitTooltipPosition]=\"KitTooltipPosition.RIGHT\"\n [title]=\"item.title\"\n [href]=\"item.link\"\n (click)=\"handleClick(item)\">\n @if (item.icon) {\n <ng-container *ngTemplateOutlet=\"linkIconTemplate; context: { $implicit: item }\"\n ></ng-container>\n }\n </a>\n } @else {\n <a class=\"nav-link\"\n kitTooltip\n kitTooltipFilter=\".nav-link\"\n [kitTooltipPosition]=\"KitTooltipPosition.RIGHT\"\n [title]=\"item.title\"\n [class.active]=\"item.active\"\n [routerLink]=\"item.link\"\n [queryParams]=\"item.queryParams\"\n (click)=\"handleClick(item)\">\n @if (item.icon) {\n <ng-container *ngTemplateOutlet=\"linkIconTemplate; context: { $implicit: item }\"\n ></ng-container>\n }\n </a>\n }\n }\n }\n }\n </div>\n </div>\n </div>\n\n @if (!collapsed() && (selectedItem()?.items || selectedAppsItems())) {\n <kit-navigation-menu-submenu class=\"sub-panel\"\n [@widthExpandCollapseAnimation]\n [menuItem]=\"selectedItem()\"\n [appsMenuItems]=\"selectedAppsItems()\"\n [logoPath]=\"logoPath\"\n (logoClicked)=\"handleLogoClick()\"\n ></kit-navigation-menu-submenu>\n }\n\n <ng-template #linkIconTemplate let-item>\n <kit-svg-icon class=\"nav-link-icon\"\n [icon]=\"item.icon\"\n [ngClass]=\"item?.iconType ?? KitSvgIconType.FILL\"\n ></kit-svg-icon>\n </ng-template>\n</div>\n", styles: [".kit-navigation-menu{display:flex;height:100%}.kit-navigation-menu .app-btn{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:36px;height:36px;border:none;background:none;border-radius:8px;cursor:pointer}.kit-navigation-menu .app-btn-icon{width:16px;height:16px;fill:var(--ui-kit-color-white);stroke:var(--ui-kit-color-white)}.kit-navigation-menu .app-btn:hover{background:var(--ui-kit-color-grey-14)}.kit-navigation-menu .app-btn.active{background:var(--ui-kit-color-main)}.kit-navigation-menu .main-panel{display:flex;flex-direction:column;padding:25px 10px;width:56px;box-sizing:border-box}.kit-navigation-menu .main-panel:has(.app-btn){gap:24px}.kit-navigation-menu .main-panel:has(.app-btn) .nav-list{margin-top:22px}.kit-navigation-menu .sub-panel{display:block;width:200px;overflow:hidden}.kit-navigation-menu .nav-wrap{overflow:auto;scrollbar-width:none}.kit-navigation-menu .nav-list{display:flex;flex-direction:column;gap:30px;margin-top:82px}.kit-navigation-menu .nav-link{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:8px;cursor:pointer}.kit-navigation-menu .nav-link:hover{background:var(--ui-kit-color-grey-14)}.kit-navigation-menu .nav-link.active{background:var(--ui-kit-color-main)}.kit-navigation-menu .nav-link-icon{display:block;width:16px;height:16px;flex-shrink:0}.kit-navigation-menu .nav-link-icon.fill{fill:var(--ui-kit-color-white);stroke:none}.kit-navigation-menu .nav-link-icon.stroke{fill:none;stroke:var(--ui-kit-color-white)}\n"], dependencies: [{ kind: "component", type: KitSvgIconComponent, selector: "kit-svg-icon", inputs: ["icon", "iconClass"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$9.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: KitNavigationMenuSubmenuComponent, selector: "kit-navigation-menu-submenu", inputs: ["menuItem", "appsMenuItems", "logoPath"], outputs: ["logoClicked"] }, { kind: "directive", type: KitTooltipDirective, selector: "[kitTooltip]", inputs: ["kitTooltipPosition", "kitTooltipFilter", "kitTooltipTemplateRef", "kitTooltipVisible"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], animations: [
|
|
4327
4354
|
expandCollapseAnimation('width'),
|
|
@@ -4339,7 +4366,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
|
|
|
4339
4366
|
NgClass,
|
|
4340
4367
|
NgTemplateOutlet,
|
|
4341
4368
|
], template: "<div class=\"kit-navigation-menu\"\n [class.collapsed]=\"collapsed()\">\n <div class=\"main-panel\">\n @if (appsMenuItems().length > 1) {\n <button class=\"app-btn\"\n [class.active]=\"selectedAppsItems() && !collapsed()\"\n (click)=\"onAppsMenuButtonClick()\">\n <kit-svg-icon class=\"app-btn-icon\"\n [icon]=\"KitSvgIcon.FOUR_SQUARE\"\n ></kit-svg-icon>\n </button>\n }\n <div class=\"nav-wrap\">\n <div class=\"nav-list\">\n @for (item of menuItems(); track $index) {\n @if (item.items?.length) {\n <a class=\"nav-link\"\n kitTooltip\n kitTooltipFilter=\".nav-link\"\n [kitTooltipPosition]=\"KitTooltipPosition.RIGHT\"\n [title]=\"item.title\"\n [class.active]=\"item.active\"\n (click)=\"handleClick(item)\">\n @if (item.icon) {\n <ng-container *ngTemplateOutlet=\"linkIconTemplate; context: { $implicit: item }\"\n ></ng-container>\n }\n </a>\n } @else {\n @if (item.link) {\n @if (isAbsoluteLink(item.link)) {\n <a class=\"nav-link\"\n kitTooltip\n kitTooltipFilter=\".nav-link\"\n target=\"_blank\"\n [kitTooltipPosition]=\"KitTooltipPosition.RIGHT\"\n [title]=\"item.title\"\n [href]=\"item.link\"\n (click)=\"handleClick(item)\">\n @if (item.icon) {\n <ng-container *ngTemplateOutlet=\"linkIconTemplate; context: { $implicit: item }\"\n ></ng-container>\n }\n </a>\n } @else {\n <a class=\"nav-link\"\n kitTooltip\n kitTooltipFilter=\".nav-link\"\n [kitTooltipPosition]=\"KitTooltipPosition.RIGHT\"\n [title]=\"item.title\"\n [class.active]=\"item.active\"\n [routerLink]=\"item.link\"\n [queryParams]=\"item.queryParams\"\n (click)=\"handleClick(item)\">\n @if (item.icon) {\n <ng-container *ngTemplateOutlet=\"linkIconTemplate; context: { $implicit: item }\"\n ></ng-container>\n }\n </a>\n }\n }\n }\n }\n </div>\n </div>\n </div>\n\n @if (!collapsed() && (selectedItem()?.items || selectedAppsItems())) {\n <kit-navigation-menu-submenu class=\"sub-panel\"\n [@widthExpandCollapseAnimation]\n [menuItem]=\"selectedItem()\"\n [appsMenuItems]=\"selectedAppsItems()\"\n [logoPath]=\"logoPath\"\n (logoClicked)=\"handleLogoClick()\"\n ></kit-navigation-menu-submenu>\n }\n\n <ng-template #linkIconTemplate let-item>\n <kit-svg-icon class=\"nav-link-icon\"\n [icon]=\"item.icon\"\n [ngClass]=\"item?.iconType ?? KitSvgIconType.FILL\"\n ></kit-svg-icon>\n </ng-template>\n</div>\n", styles: [".kit-navigation-menu{display:flex;height:100%}.kit-navigation-menu .app-btn{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:36px;height:36px;border:none;background:none;border-radius:8px;cursor:pointer}.kit-navigation-menu .app-btn-icon{width:16px;height:16px;fill:var(--ui-kit-color-white);stroke:var(--ui-kit-color-white)}.kit-navigation-menu .app-btn:hover{background:var(--ui-kit-color-grey-14)}.kit-navigation-menu .app-btn.active{background:var(--ui-kit-color-main)}.kit-navigation-menu .main-panel{display:flex;flex-direction:column;padding:25px 10px;width:56px;box-sizing:border-box}.kit-navigation-menu .main-panel:has(.app-btn){gap:24px}.kit-navigation-menu .main-panel:has(.app-btn) .nav-list{margin-top:22px}.kit-navigation-menu .sub-panel{display:block;width:200px;overflow:hidden}.kit-navigation-menu .nav-wrap{overflow:auto;scrollbar-width:none}.kit-navigation-menu .nav-list{display:flex;flex-direction:column;gap:30px;margin-top:82px}.kit-navigation-menu .nav-link{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:8px;cursor:pointer}.kit-navigation-menu .nav-link:hover{background:var(--ui-kit-color-grey-14)}.kit-navigation-menu .nav-link.active{background:var(--ui-kit-color-main)}.kit-navigation-menu .nav-link-icon{display:block;width:16px;height:16px;flex-shrink:0}.kit-navigation-menu .nav-link-icon.fill{fill:var(--ui-kit-color-white);stroke:none}.kit-navigation-menu .nav-link-icon.stroke{fill:none;stroke:var(--ui-kit-color-white)}\n"] }]
|
|
4342
|
-
}],
|
|
4369
|
+
}], propDecorators: { menuItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "menuItems", required: false }] }, { type: i0.Output, args: ["menuItemsChange"] }], appsMenuItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "appsMenuItems", required: false }] }], logoPath: [{
|
|
4343
4370
|
type: Input
|
|
4344
4371
|
}] } });
|
|
4345
4372
|
|