inugami-ng 0.0.25 → 0.0.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/inugami-ng-components-inu-aside-menu.mjs +20 -6
- package/fesm2022/inugami-ng-components-inu-aside-menu.mjs.map +1 -1
- package/fesm2022/inugami-ng-components-inu-open-api.mjs +40 -11
- package/fesm2022/inugami-ng-components-inu-open-api.mjs.map +1 -1
- package/fesm2022/inugami-ng-components-inu-svg-isometric.mjs +0 -1
- package/fesm2022/inugami-ng-components-inu-svg-isometric.mjs.map +1 -1
- package/fesm2022/inugami-ng-models.mjs.map +1 -1
- package/package.json +1 -1
- package/types/inugami-ng-components-inu-open-api.d.ts +2 -0
- package/types/inugami-ng-models.d.ts +1 -0
|
@@ -2,24 +2,38 @@ import * as i0 from '@angular/core';
|
|
|
2
2
|
import { inject, input, computed, Component } from '@angular/core';
|
|
3
3
|
import { InuIcon } from 'inugami-icons';
|
|
4
4
|
import { NgClass } from '@angular/common';
|
|
5
|
-
import { ActivatedRoute, RouterLinkActive, RouterLink } from '@angular/router';
|
|
5
|
+
import { ActivatedRoute, Router, NavigationEnd, RouterLinkActive, RouterLink } from '@angular/router';
|
|
6
6
|
import { toSignal } from '@angular/core/rxjs-interop';
|
|
7
|
+
import { filter, map } from 'rxjs';
|
|
7
8
|
|
|
8
9
|
class InuAsideMenuChildren {
|
|
9
10
|
//==================================================================================================================
|
|
10
11
|
// ATTRIBUTES
|
|
11
12
|
//==================================================================================================================
|
|
12
|
-
|
|
13
|
+
activatedRoute = inject(ActivatedRoute);
|
|
14
|
+
router = inject(Router);
|
|
15
|
+
activeFragment = toSignal(this.activatedRoute.fragment);
|
|
16
|
+
currentUrlString = toSignal(this.router.events.pipe(filter(event => event instanceof NavigationEnd), map(() => this.router.url.split('?')[0])), { initialValue: this.router.url.split('?')[0] });
|
|
13
17
|
children = input([], ...(ngDevMode ? [{ debugName: "children" }] : []));
|
|
14
18
|
level = input(0, ...(ngDevMode ? [{ debugName: "level" }] : []));
|
|
15
19
|
currentStyleClass = computed(() => ['inu-aside-menu-children', `level level-${this.level()}`]
|
|
16
20
|
.join(' '), ...(ngDevMode ? [{ debugName: "currentStyleClass" }] : []));
|
|
21
|
+
showChildren(childLink) {
|
|
22
|
+
if (!childLink.children || childLink.children.length == 0) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
if (childLink.forceShowChildren != undefined && childLink.forceShowChildren) {
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
const url = this.currentUrlString();
|
|
29
|
+
return url === childLink.path;
|
|
30
|
+
}
|
|
17
31
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuAsideMenuChildren, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
18
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: InuAsideMenuChildren, isStandalone: true, selector: "inu-aside-menu-children", inputs: { children: { classPropertyName: "children", publicName: "children", isSignal: true, isRequired: false, transformFunction: null }, level: { classPropertyName: "level", publicName: "level", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (children()) {\n <div [class]=\"currentStyleClass()\">\n <ul class=\"inu-aside-menu-children-grp\">\n @for (child of children(); track child) {\n <li class=\"inu-aside-menu-children-item\">\n @if (child.title) {\n <div class=\"inu-aside-menu-children-title\">{{ child.title! }}</div>\n }\n @if (child.links) {\n <ul class=\"inu-aside-menu-children-links\">\n @for (childLink of child.links; track childLink) {\n <li class=\"inu-aside-menu-children-link\">\n <div class=\"inu-aside-menu-link-current-link\">\n <div class=\"inu-aside-menu-link-icon\">\n @if (childLink.icon) {\n <inu-icon [icon]=\"childLink.icon\" [size]=\"1.5\"></inu-icon>\n }\n </div>\n\n @if (childLink.path) {\n @if (childLink.external) {\n @if (childLink.target) {\n <a [target]=\"childLink.target\" [href]=\"childLink.path\">{{ childLink.title! }}</a>\n } @else {\n <a [href]=\"childLink.path\">{{ childLink.title! }}</a>\n }\n }\n @else {\n @if(childLink.fragment){\n <a [routerLink]=\"childLink.path\"\n routerLinkActive\n #rla=\"routerLinkActive\"\n [class.active]=\"rla.isActive && activeFragment() === childLink.fragment\"\n [fragment]=\"childLink.fragment!\"\n [routerLinkActiveOptions]=\"{ exact: false }\">{{ childLink.title! }}</a>\n }\n @else{\n <a [routerLink]=\"childLink.path\"
|
|
32
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: InuAsideMenuChildren, isStandalone: true, selector: "inu-aside-menu-children", inputs: { children: { classPropertyName: "children", publicName: "children", isSignal: true, isRequired: false, transformFunction: null }, level: { classPropertyName: "level", publicName: "level", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (children()) {\n <div [class]=\"currentStyleClass()\">\n <ul class=\"inu-aside-menu-children-grp\">\n @for (child of children(); track child) {\n <li class=\"inu-aside-menu-children-item\">\n @if (child.title) {\n <div class=\"inu-aside-menu-children-title\">{{ child.title! }}</div>\n }\n @if (child.links) {\n <ul class=\"inu-aside-menu-children-links\">\n @for (childLink of child.links; track childLink) {\n <li class=\"inu-aside-menu-children-link\">\n <div class=\"inu-aside-menu-link-current-link\">\n <div class=\"inu-aside-menu-link-icon\">\n @if (childLink.icon) {\n <inu-icon [icon]=\"childLink.icon\" [size]=\"1.5\"></inu-icon>\n }\n </div>\n\n @if (childLink.path) {\n @if (childLink.external) {\n @if (childLink.target) {\n <a [target]=\"childLink.target\" [href]=\"childLink.path\" [class]=\"childLink.styleClass!\">{{ childLink.title! }}</a>\n } @else {\n <a [href]=\"childLink.path\" [class]=\"childLink.styleClass!\">{{ childLink.title! }}</a>\n }\n }\n @else {\n @if(childLink.fragment){\n <a [routerLink]=\"childLink.path\"\n routerLinkActive\n #rla=\"routerLinkActive\"\n [class]=\"childLink.styleClass!\"\n [class.active]=\"rla.isActive && activeFragment() === childLink.fragment\"\n [fragment]=\"childLink.fragment!\"\n [routerLinkActiveOptions]=\"{ exact: false }\">{{ childLink.title! }}</a>\n }\n @else{\n <a [routerLink]=\"childLink.path\"\n routerLinkActive=\"active\"\n [class]=\"childLink.styleClass!\"\n [routerLinkActiveOptions]=\"{ exact: false }\">{{ childLink.title! }}</a>\n }\n }\n }\n @else {\n <span [class]=\"childLink.styleClass!\">{{childLink.title!}}</span>\n }\n </div>\n\n <div class=\"inu-aside-menu-link-children\">\n @if (childLink.children && showChildren(childLink)) {\n <inu-aside-menu-children [children]=\"childLink.children\" [level]=\"level()+1\"></inu-aside-menu-children>\n }\n </div>\n </li>\n }\n </ul>\n }\n </li>\n\n }\n </ul>\n </div>\n}\n", styles: [".inu-aside-menu-children-grp{margin:0;padding:0;padding-left:2rem}.inu-aside-menu-children-grp>li{list-style:none}\n"], dependencies: [{ kind: "component", type: InuAsideMenuChildren, selector: "inu-aside-menu-children", inputs: ["children", "level"] }, { kind: "component", type: InuIcon, selector: "inu-icon", inputs: ["icon", "defaultIcon", "styleclass", "size"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
|
|
19
33
|
}
|
|
20
34
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuAsideMenuChildren, decorators: [{
|
|
21
35
|
type: Component,
|
|
22
|
-
args: [{ selector: 'inu-aside-menu-children', standalone: true, imports: [InuIcon, RouterLinkActive, RouterLink], template: "@if (children()) {\n <div [class]=\"currentStyleClass()\">\n <ul class=\"inu-aside-menu-children-grp\">\n @for (child of children(); track child) {\n <li class=\"inu-aside-menu-children-item\">\n @if (child.title) {\n <div class=\"inu-aside-menu-children-title\">{{ child.title! }}</div>\n }\n @if (child.links) {\n <ul class=\"inu-aside-menu-children-links\">\n @for (childLink of child.links; track childLink) {\n <li class=\"inu-aside-menu-children-link\">\n <div class=\"inu-aside-menu-link-current-link\">\n <div class=\"inu-aside-menu-link-icon\">\n @if (childLink.icon) {\n <inu-icon [icon]=\"childLink.icon\" [size]=\"1.5\"></inu-icon>\n }\n </div>\n\n @if (childLink.path) {\n @if (childLink.external) {\n @if (childLink.target) {\n <a [target]=\"childLink.target\" [href]=\"childLink.path\">{{ childLink.title! }}</a>\n } @else {\n <a [href]=\"childLink.path\">{{ childLink.title! }}</a>\n }\n }\n @else {\n @if(childLink.fragment){\n <a [routerLink]=\"childLink.path\"\n routerLinkActive\n #rla=\"routerLinkActive\"\n [class.active]=\"rla.isActive && activeFragment() === childLink.fragment\"\n [fragment]=\"childLink.fragment!\"\n [routerLinkActiveOptions]=\"{ exact: false }\">{{ childLink.title! }}</a>\n }\n @else{\n <a [routerLink]=\"childLink.path\"
|
|
36
|
+
args: [{ selector: 'inu-aside-menu-children', standalone: true, imports: [InuIcon, RouterLinkActive, RouterLink], template: "@if (children()) {\n <div [class]=\"currentStyleClass()\">\n <ul class=\"inu-aside-menu-children-grp\">\n @for (child of children(); track child) {\n <li class=\"inu-aside-menu-children-item\">\n @if (child.title) {\n <div class=\"inu-aside-menu-children-title\">{{ child.title! }}</div>\n }\n @if (child.links) {\n <ul class=\"inu-aside-menu-children-links\">\n @for (childLink of child.links; track childLink) {\n <li class=\"inu-aside-menu-children-link\">\n <div class=\"inu-aside-menu-link-current-link\">\n <div class=\"inu-aside-menu-link-icon\">\n @if (childLink.icon) {\n <inu-icon [icon]=\"childLink.icon\" [size]=\"1.5\"></inu-icon>\n }\n </div>\n\n @if (childLink.path) {\n @if (childLink.external) {\n @if (childLink.target) {\n <a [target]=\"childLink.target\" [href]=\"childLink.path\" [class]=\"childLink.styleClass!\">{{ childLink.title! }}</a>\n } @else {\n <a [href]=\"childLink.path\" [class]=\"childLink.styleClass!\">{{ childLink.title! }}</a>\n }\n }\n @else {\n @if(childLink.fragment){\n <a [routerLink]=\"childLink.path\"\n routerLinkActive\n #rla=\"routerLinkActive\"\n [class]=\"childLink.styleClass!\"\n [class.active]=\"rla.isActive && activeFragment() === childLink.fragment\"\n [fragment]=\"childLink.fragment!\"\n [routerLinkActiveOptions]=\"{ exact: false }\">{{ childLink.title! }}</a>\n }\n @else{\n <a [routerLink]=\"childLink.path\"\n routerLinkActive=\"active\"\n [class]=\"childLink.styleClass!\"\n [routerLinkActiveOptions]=\"{ exact: false }\">{{ childLink.title! }}</a>\n }\n }\n }\n @else {\n <span [class]=\"childLink.styleClass!\">{{childLink.title!}}</span>\n }\n </div>\n\n <div class=\"inu-aside-menu-link-children\">\n @if (childLink.children && showChildren(childLink)) {\n <inu-aside-menu-children [children]=\"childLink.children\" [level]=\"level()+1\"></inu-aside-menu-children>\n }\n </div>\n </li>\n }\n </ul>\n }\n </li>\n\n }\n </ul>\n </div>\n}\n", styles: [".inu-aside-menu-children-grp{margin:0;padding:0;padding-left:2rem}.inu-aside-menu-children-grp>li{list-style:none}\n"] }]
|
|
23
37
|
}], propDecorators: { children: [{ type: i0.Input, args: [{ isSignal: true, alias: "children", required: false }] }], level: [{ type: i0.Input, args: [{ isSignal: true, alias: "level", required: false }] }] } });
|
|
24
38
|
|
|
25
39
|
class InuAsideMenu {
|
|
@@ -29,7 +43,7 @@ class InuAsideMenu {
|
|
|
29
43
|
links = input([], ...(ngDevMode ? [{ debugName: "links" }] : []));
|
|
30
44
|
activeFragment = toSignal(inject(ActivatedRoute).fragment);
|
|
31
45
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuAsideMenu, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
32
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: InuAsideMenu, isStandalone: true, selector: "inu-aside-menu", inputs: { links: { classPropertyName: "links", publicName: "links", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<aside class=\"inu-aside-menu\">\n @if (links()) {\n <menu>\n\n <ul class=\"inu-aside-menu-links\">\n @for (link of links(); track link) {\n <li class=\"inu-aside-menu-links-item\"\n [ngClass]=\"{'with-children': link.children!=undefined && link.children.length>0}\">\n <div class=\"inu-aside-menu-links-item-current-link\">\n <div class=\"inu-aside-menu-link-icon\">\n @if (link.icon) {\n <inu-icon [icon]=\"link.icon\" [size]=\"1.3\"></inu-icon>\n }\n </div>\n @if (link.path) {\n @if (link.external) {\n @if (link.target) {\n <a [target]=\"link.target\" [href]=\"link.path\">{{ link.title! }}</a>\n } @else {\n <a [href]=\"link.path\">{{ link.title }}</a>\n }\n } @else {\n @if(link.fragment){\n <a [routerLink]=\"link.path\"\n routerLinkActive\n #rla=\"routerLinkActive\"\n [class.active]=\"rla.isActive && activeFragment() === link.fragment\"\n [fragment]=\"link.fragment!\"\n [routerLinkActiveOptions]=\"{ exact: false }\">{{ link.title! }}</a>\n }\n @else{\n <a [routerLink]=\"link.path\"
|
|
46
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: InuAsideMenu, isStandalone: true, selector: "inu-aside-menu", inputs: { links: { classPropertyName: "links", publicName: "links", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<aside class=\"inu-aside-menu\">\n @if (links()) {\n <menu>\n\n <ul class=\"inu-aside-menu-links\">\n @for (link of links(); track link) {\n <li class=\"inu-aside-menu-links-item\"\n [ngClass]=\"{'with-children': link.children!=undefined && link.children.length>0}\">\n <div class=\"inu-aside-menu-links-item-current-link\">\n <div class=\"inu-aside-menu-link-icon\">\n @if (link.icon) {\n <inu-icon [icon]=\"link.icon\" [size]=\"1.3\"></inu-icon>\n }\n </div>\n @if (link.path) {\n @if (link.external) {\n @if (link.target) {\n <a [target]=\"link.target\" [href]=\"link.path\" [class]=\"link.styleClass!\">{{ link.title! }}</a>\n } @else {\n <a [href]=\"link.path\" [class]=\"link.styleClass!\">{{ link.title }}</a>\n }\n } @else {\n @if(link.fragment){\n <a [routerLink]=\"link.path\"\n routerLinkActive\n #rla=\"routerLinkActive\"\n [class]=\"link.styleClass!\"\n [class.active]=\"rla.isActive && activeFragment() === link.fragment\"\n [fragment]=\"link.fragment!\"\n [routerLinkActiveOptions]=\"{ exact: false }\">{{ link.title! }}</a>\n }\n @else{\n <a [routerLink]=\"link.path\"\n routerLinkActive=\"active\"\n [class]=\"link.styleClass!\"\n [routerLinkActiveOptions]=\"{ exact: false }\">{{ link.title! }}</a>\n }\n\n }\n } @else {\n <span [class]=\"link.styleClass!\">{{ link.title! }}</span>\n }\n </div>\n\n\n <div class=\"inu-aside-menu-link-children\">\n @if (link.children) {\n <inu-aside-menu-children [children]=\"link.children\"></inu-aside-menu-children>\n }\n </div>\n </li>\n }\n </ul>\n\n </menu>\n }\n</aside>\n", styles: [".inu-aside-menu-links{margin:0;padding:0;display:flex;flex-direction:column;gap:.25rem}.inu-aside-menu-links .inu-aside-menu-links-item{display:flex;flex-direction:column;list-style:none}.inu-aside-menu-links .inu-aside-menu-links-item.with-children{margin-top:1rem}.inu-aside-menu-links .inu-aside-menu-links-item.with-children>.inu-aside-menu-links-item-current-link{background-color:var(--neutral-light);border-bottom:1px solid transparent}.inu-aside-menu-links .inu-aside-menu-links-item.with-children>.inu-aside-menu-links-item-current-link:hover{border-bottom:1px solid var(--neutral)}.inu-aside-menu-links .inu-aside-menu-links-item .inu-aside-menu-links-item-current-link{padding:.25rem;display:flex;align-items:center;flex-direction:row}.inu-aside-menu-links .inu-aside-menu-links-item .inu-aside-menu-links-item-current-link .inu-aside-menu-link-icon{width:2rem;height:1.5rem;margin-left:.5rem}\n"], dependencies: [{ kind: "component", type: InuIcon, selector: "inu-icon", inputs: ["icon", "defaultIcon", "styleclass", "size"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: InuAsideMenuChildren, selector: "inu-aside-menu-children", inputs: ["children", "level"] }] });
|
|
33
47
|
}
|
|
34
48
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuAsideMenu, decorators: [{
|
|
35
49
|
type: Component,
|
|
@@ -37,7 +51,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImpor
|
|
|
37
51
|
NgClass,
|
|
38
52
|
RouterLinkActive,
|
|
39
53
|
RouterLink,
|
|
40
|
-
InuAsideMenuChildren], template: "<aside class=\"inu-aside-menu\">\n @if (links()) {\n <menu>\n\n <ul class=\"inu-aside-menu-links\">\n @for (link of links(); track link) {\n <li class=\"inu-aside-menu-links-item\"\n [ngClass]=\"{'with-children': link.children!=undefined && link.children.length>0}\">\n <div class=\"inu-aside-menu-links-item-current-link\">\n <div class=\"inu-aside-menu-link-icon\">\n @if (link.icon) {\n <inu-icon [icon]=\"link.icon\" [size]=\"1.3\"></inu-icon>\n }\n </div>\n @if (link.path) {\n @if (link.external) {\n @if (link.target) {\n <a [target]=\"link.target\" [href]=\"link.path\">{{ link.title! }}</a>\n } @else {\n <a [href]=\"link.path\">{{ link.title }}</a>\n }\n } @else {\n @if(link.fragment){\n <a [routerLink]=\"link.path\"\n routerLinkActive\n #rla=\"routerLinkActive\"\n [class.active]=\"rla.isActive && activeFragment() === link.fragment\"\n [fragment]=\"link.fragment!\"\n [routerLinkActiveOptions]=\"{ exact: false }\">{{ link.title! }}</a>\n }\n @else{\n <a [routerLink]=\"link.path\"
|
|
54
|
+
InuAsideMenuChildren], template: "<aside class=\"inu-aside-menu\">\n @if (links()) {\n <menu>\n\n <ul class=\"inu-aside-menu-links\">\n @for (link of links(); track link) {\n <li class=\"inu-aside-menu-links-item\"\n [ngClass]=\"{'with-children': link.children!=undefined && link.children.length>0}\">\n <div class=\"inu-aside-menu-links-item-current-link\">\n <div class=\"inu-aside-menu-link-icon\">\n @if (link.icon) {\n <inu-icon [icon]=\"link.icon\" [size]=\"1.3\"></inu-icon>\n }\n </div>\n @if (link.path) {\n @if (link.external) {\n @if (link.target) {\n <a [target]=\"link.target\" [href]=\"link.path\" [class]=\"link.styleClass!\">{{ link.title! }}</a>\n } @else {\n <a [href]=\"link.path\" [class]=\"link.styleClass!\">{{ link.title }}</a>\n }\n } @else {\n @if(link.fragment){\n <a [routerLink]=\"link.path\"\n routerLinkActive\n #rla=\"routerLinkActive\"\n [class]=\"link.styleClass!\"\n [class.active]=\"rla.isActive && activeFragment() === link.fragment\"\n [fragment]=\"link.fragment!\"\n [routerLinkActiveOptions]=\"{ exact: false }\">{{ link.title! }}</a>\n }\n @else{\n <a [routerLink]=\"link.path\"\n routerLinkActive=\"active\"\n [class]=\"link.styleClass!\"\n [routerLinkActiveOptions]=\"{ exact: false }\">{{ link.title! }}</a>\n }\n\n }\n } @else {\n <span [class]=\"link.styleClass!\">{{ link.title! }}</span>\n }\n </div>\n\n\n <div class=\"inu-aside-menu-link-children\">\n @if (link.children) {\n <inu-aside-menu-children [children]=\"link.children\"></inu-aside-menu-children>\n }\n </div>\n </li>\n }\n </ul>\n\n </menu>\n }\n</aside>\n", styles: [".inu-aside-menu-links{margin:0;padding:0;display:flex;flex-direction:column;gap:.25rem}.inu-aside-menu-links .inu-aside-menu-links-item{display:flex;flex-direction:column;list-style:none}.inu-aside-menu-links .inu-aside-menu-links-item.with-children{margin-top:1rem}.inu-aside-menu-links .inu-aside-menu-links-item.with-children>.inu-aside-menu-links-item-current-link{background-color:var(--neutral-light);border-bottom:1px solid transparent}.inu-aside-menu-links .inu-aside-menu-links-item.with-children>.inu-aside-menu-links-item-current-link:hover{border-bottom:1px solid var(--neutral)}.inu-aside-menu-links .inu-aside-menu-links-item .inu-aside-menu-links-item-current-link{padding:.25rem;display:flex;align-items:center;flex-direction:row}.inu-aside-menu-links .inu-aside-menu-links-item .inu-aside-menu-links-item-current-link .inu-aside-menu-link-icon{width:2rem;height:1.5rem;margin-left:.5rem}\n"] }]
|
|
41
55
|
}], propDecorators: { links: [{ type: i0.Input, args: [{ isSignal: true, alias: "links", required: false }] }] } });
|
|
42
56
|
|
|
43
57
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inugami-ng-components-inu-aside-menu.mjs","sources":["../../../projects/inugami-ng/components/inu-aside-menu/children/inu-aside-menu-children.component.ts","../../../projects/inugami-ng/components/inu-aside-menu/children/inu-aside-menu-children.component.html","../../../projects/inugami-ng/components/inu-aside-menu/inu-aside-menu.component.ts","../../../projects/inugami-ng/components/inu-aside-menu/inu-aside-menu.component.html","../../../projects/inugami-ng/components/inu-aside-menu/inugami-ng-components-inu-aside-menu.ts"],"sourcesContent":["import {Component, computed, inject, input} from '@angular/core';\nimport {InuIcon} from 'inugami-icons';\nimport {InuSiteLinkChildren} from 'inugami-ng/models'\nimport {ActivatedRoute, RouterLink, RouterLinkActive} from '@angular/router'\nimport {toSignal} from '@angular/core/rxjs-interop'\n\n@Component({\n selector : 'inu-aside-menu-children',\n standalone : true,\n imports : [InuIcon, RouterLinkActive, RouterLink],\n templateUrl: './inu-aside-menu-children.component.html',\n styleUrl : './inu-aside-menu-children.component.scss',\n })\nexport class InuAsideMenuChildren {\n //==================================================================================================================\n // ATTRIBUTES\n //==================================================================================================================\n activeFragment = toSignal(inject(ActivatedRoute).fragment);\n children = input<InuSiteLinkChildren[]>([]);\n level = input<number>(0);\n currentStyleClass = computed(() => ['inu-aside-menu-children', `level level-${this.level()}`]\n .join(' '));\n}\n","@if (children()) {\n <div [class]=\"currentStyleClass()\">\n <ul class=\"inu-aside-menu-children-grp\">\n @for (child of children(); track child) {\n <li class=\"inu-aside-menu-children-item\">\n @if (child.title) {\n <div class=\"inu-aside-menu-children-title\">{{ child.title! }}</div>\n }\n @if (child.links) {\n <ul class=\"inu-aside-menu-children-links\">\n @for (childLink of child.links; track childLink) {\n <li class=\"inu-aside-menu-children-link\">\n <div class=\"inu-aside-menu-link-current-link\">\n <div class=\"inu-aside-menu-link-icon\">\n @if (childLink.icon) {\n <inu-icon [icon]=\"childLink.icon\" [size]=\"1.5\"></inu-icon>\n }\n </div>\n\n @if (childLink.path) {\n @if (childLink.external) {\n @if (childLink.target) {\n <a [target]=\"childLink.target\" [href]=\"childLink.path\">{{ childLink.title! }}</a>\n } @else {\n <a [href]=\"childLink.path\">{{ childLink.title! }}</a>\n }\n }\n @else {\n @if(childLink.fragment){\n <a [routerLink]=\"childLink.path\"\n routerLinkActive\n #rla=\"routerLinkActive\"\n [class.active]=\"rla.isActive && activeFragment() === childLink.fragment\"\n [fragment]=\"childLink.fragment!\"\n [routerLinkActiveOptions]=\"{ exact: false }\">{{ childLink.title! }}</a>\n }\n @else{\n <a [routerLink]=\"childLink.path\" routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{ exact: false }\">{{ childLink.title! }}</a>\n }\n }\n }\n @else {\n <span>{{childLink.title!}}</span>\n }\n </div>\n\n <div class=\"inu-aside-menu-link-children\">\n @if (childLink.children) {\n <inu-aside-menu-children [children]=\"childLink.children\" [level]=\"level()+1\"></inu-aside-menu-children>\n }\n </div>\n </li>\n }\n </ul>\n }\n </li>\n\n }\n </ul>\n </div>\n}\n","import {AfterViewInit, Component, computed, effect, inject, input, signal} from '@angular/core';\nimport {InuIcon} from 'inugami-icons';\nimport {NgClass} from '@angular/common';\nimport {InuSiteLink} from 'inugami-ng/models'\nimport {ActivatedRoute, RouterLink, RouterLinkActive} from '@angular/router'\nimport {InuAsideMenuChildren} from './children/inu-aside-menu-children.component'\nimport {toSignal} from '@angular/core/rxjs-interop'\n\n@Component({\n selector: 'inu-aside-menu',\n standalone: true,\n imports: [InuIcon,\n NgClass,\n RouterLinkActive,\n RouterLink,\n InuAsideMenuChildren],\n templateUrl: './inu-aside-menu.component.html',\n styleUrl: './inu-aside-menu.component.scss',\n})\nexport class InuAsideMenu{\n //==================================================================================================================\n // ATTRIBUTES\n //==================================================================================================================\n links = input<InuSiteLink[]>([]);\n activeFragment = toSignal(inject(ActivatedRoute).fragment);\n}\n","<aside class=\"inu-aside-menu\">\n @if (links()) {\n <menu>\n\n <ul class=\"inu-aside-menu-links\">\n @for (link of links(); track link) {\n <li class=\"inu-aside-menu-links-item\"\n [ngClass]=\"{'with-children': link.children!=undefined && link.children.length>0}\">\n <div class=\"inu-aside-menu-links-item-current-link\">\n <div class=\"inu-aside-menu-link-icon\">\n @if (link.icon) {\n <inu-icon [icon]=\"link.icon\" [size]=\"1.3\"></inu-icon>\n }\n </div>\n @if (link.path) {\n @if (link.external) {\n @if (link.target) {\n <a [target]=\"link.target\" [href]=\"link.path\">{{ link.title! }}</a>\n } @else {\n <a [href]=\"link.path\">{{ link.title }}</a>\n }\n } @else {\n @if(link.fragment){\n <a [routerLink]=\"link.path\"\n routerLinkActive\n #rla=\"routerLinkActive\"\n [class.active]=\"rla.isActive && activeFragment() === link.fragment\"\n [fragment]=\"link.fragment!\"\n [routerLinkActiveOptions]=\"{ exact: false }\">{{ link.title! }}</a>\n }\n @else{\n <a [routerLink]=\"link.path\" routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{ exact: false }\">{{ link.title! }}</a>\n }\n\n }\n } @else {\n <span>{{ link.title! }}</span>\n }\n </div>\n\n\n <div class=\"inu-aside-menu-link-children\">\n @if (link.children) {\n <inu-aside-menu-children [children]=\"link.children\"></inu-aside-menu-children>\n }\n </div>\n </li>\n }\n </ul>\n\n </menu>\n }\n</aside>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"inugami-ng-components-inu-aside-menu.mjs","sources":["../../../projects/inugami-ng/components/inu-aside-menu/children/inu-aside-menu-children.component.ts","../../../projects/inugami-ng/components/inu-aside-menu/children/inu-aside-menu-children.component.html","../../../projects/inugami-ng/components/inu-aside-menu/inu-aside-menu.component.ts","../../../projects/inugami-ng/components/inu-aside-menu/inu-aside-menu.component.html","../../../projects/inugami-ng/components/inu-aside-menu/inugami-ng-components-inu-aside-menu.ts"],"sourcesContent":["import {Component, computed, inject, input} from '@angular/core';\nimport {InuIcon} from 'inugami-icons';\nimport {InuSiteLink, InuSiteLinkChildren} from 'inugami-ng/models'\nimport {ActivatedRoute, NavigationEnd, Router, RouterLink, RouterLinkActive} from '@angular/router'\nimport {toSignal} from '@angular/core/rxjs-interop'\nimport {filter, map} from 'rxjs'\n\n@Component({\n selector : 'inu-aside-menu-children',\n standalone : true,\n imports : [InuIcon, RouterLinkActive, RouterLink],\n templateUrl: './inu-aside-menu-children.component.html',\n styleUrl : './inu-aside-menu-children.component.scss',\n })\nexport class InuAsideMenuChildren {\n //==================================================================================================================\n // ATTRIBUTES\n //==================================================================================================================\n private activatedRoute = inject(ActivatedRoute);\n private router = inject(Router);\n activeFragment = toSignal(this.activatedRoute.fragment);\n currentUrlString = toSignal(\n this.router.events.pipe(\n filter(event => event instanceof NavigationEnd),\n map(() => this.router.url.split('?')[0])\n ),\n { initialValue: this.router.url.split('?')[0] }\n );\n children = input<InuSiteLinkChildren[]>([]);\n level = input<number>(0);\n currentStyleClass = computed(() => ['inu-aside-menu-children', `level level-${this.level()}`]\n .join(' '));\n\n\n showChildren(childLink: InuSiteLink): boolean {\n if (!childLink.children || childLink.children.length == 0) {\n return false;\n }\n if (childLink.forceShowChildren != undefined && childLink.forceShowChildren) {\n return true;\n }\n const url = this.currentUrlString();\n return url === childLink.path;\n }\n}\n","@if (children()) {\n <div [class]=\"currentStyleClass()\">\n <ul class=\"inu-aside-menu-children-grp\">\n @for (child of children(); track child) {\n <li class=\"inu-aside-menu-children-item\">\n @if (child.title) {\n <div class=\"inu-aside-menu-children-title\">{{ child.title! }}</div>\n }\n @if (child.links) {\n <ul class=\"inu-aside-menu-children-links\">\n @for (childLink of child.links; track childLink) {\n <li class=\"inu-aside-menu-children-link\">\n <div class=\"inu-aside-menu-link-current-link\">\n <div class=\"inu-aside-menu-link-icon\">\n @if (childLink.icon) {\n <inu-icon [icon]=\"childLink.icon\" [size]=\"1.5\"></inu-icon>\n }\n </div>\n\n @if (childLink.path) {\n @if (childLink.external) {\n @if (childLink.target) {\n <a [target]=\"childLink.target\" [href]=\"childLink.path\" [class]=\"childLink.styleClass!\">{{ childLink.title! }}</a>\n } @else {\n <a [href]=\"childLink.path\" [class]=\"childLink.styleClass!\">{{ childLink.title! }}</a>\n }\n }\n @else {\n @if(childLink.fragment){\n <a [routerLink]=\"childLink.path\"\n routerLinkActive\n #rla=\"routerLinkActive\"\n [class]=\"childLink.styleClass!\"\n [class.active]=\"rla.isActive && activeFragment() === childLink.fragment\"\n [fragment]=\"childLink.fragment!\"\n [routerLinkActiveOptions]=\"{ exact: false }\">{{ childLink.title! }}</a>\n }\n @else{\n <a [routerLink]=\"childLink.path\"\n routerLinkActive=\"active\"\n [class]=\"childLink.styleClass!\"\n [routerLinkActiveOptions]=\"{ exact: false }\">{{ childLink.title! }}</a>\n }\n }\n }\n @else {\n <span [class]=\"childLink.styleClass!\">{{childLink.title!}}</span>\n }\n </div>\n\n <div class=\"inu-aside-menu-link-children\">\n @if (childLink.children && showChildren(childLink)) {\n <inu-aside-menu-children [children]=\"childLink.children\" [level]=\"level()+1\"></inu-aside-menu-children>\n }\n </div>\n </li>\n }\n </ul>\n }\n </li>\n\n }\n </ul>\n </div>\n}\n","import {AfterViewInit, Component, computed, effect, inject, input, signal} from '@angular/core';\nimport {InuIcon} from 'inugami-icons';\nimport {NgClass} from '@angular/common';\nimport {InuSiteLink} from 'inugami-ng/models'\nimport {ActivatedRoute, RouterLink, RouterLinkActive} from '@angular/router'\nimport {InuAsideMenuChildren} from './children/inu-aside-menu-children.component'\nimport {toSignal} from '@angular/core/rxjs-interop'\n\n@Component({\n selector: 'inu-aside-menu',\n standalone: true,\n imports: [InuIcon,\n NgClass,\n RouterLinkActive,\n RouterLink,\n InuAsideMenuChildren],\n templateUrl: './inu-aside-menu.component.html',\n styleUrl: './inu-aside-menu.component.scss',\n})\nexport class InuAsideMenu{\n //==================================================================================================================\n // ATTRIBUTES\n //==================================================================================================================\n links = input<InuSiteLink[]>([]);\n activeFragment = toSignal(inject(ActivatedRoute).fragment);\n}\n","<aside class=\"inu-aside-menu\">\n @if (links()) {\n <menu>\n\n <ul class=\"inu-aside-menu-links\">\n @for (link of links(); track link) {\n <li class=\"inu-aside-menu-links-item\"\n [ngClass]=\"{'with-children': link.children!=undefined && link.children.length>0}\">\n <div class=\"inu-aside-menu-links-item-current-link\">\n <div class=\"inu-aside-menu-link-icon\">\n @if (link.icon) {\n <inu-icon [icon]=\"link.icon\" [size]=\"1.3\"></inu-icon>\n }\n </div>\n @if (link.path) {\n @if (link.external) {\n @if (link.target) {\n <a [target]=\"link.target\" [href]=\"link.path\" [class]=\"link.styleClass!\">{{ link.title! }}</a>\n } @else {\n <a [href]=\"link.path\" [class]=\"link.styleClass!\">{{ link.title }}</a>\n }\n } @else {\n @if(link.fragment){\n <a [routerLink]=\"link.path\"\n routerLinkActive\n #rla=\"routerLinkActive\"\n [class]=\"link.styleClass!\"\n [class.active]=\"rla.isActive && activeFragment() === link.fragment\"\n [fragment]=\"link.fragment!\"\n [routerLinkActiveOptions]=\"{ exact: false }\">{{ link.title! }}</a>\n }\n @else{\n <a [routerLink]=\"link.path\"\n routerLinkActive=\"active\"\n [class]=\"link.styleClass!\"\n [routerLinkActiveOptions]=\"{ exact: false }\">{{ link.title! }}</a>\n }\n\n }\n } @else {\n <span [class]=\"link.styleClass!\">{{ link.title! }}</span>\n }\n </div>\n\n\n <div class=\"inu-aside-menu-link-children\">\n @if (link.children) {\n <inu-aside-menu-children [children]=\"link.children\"></inu-aside-menu-children>\n }\n </div>\n </li>\n }\n </ul>\n\n </menu>\n }\n</aside>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1008,18 +1008,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImpor
|
|
|
1008
1008
|
|
|
1009
1009
|
const CACHE_PREFIX = 'inu-open-api_';
|
|
1010
1010
|
class InuOpenApi {
|
|
1011
|
-
|
|
1011
|
+
//====================================================================================================================
|
|
1012
1012
|
// ATTRIBUTES
|
|
1013
|
-
|
|
1013
|
+
//====================================================================================================================
|
|
1014
1014
|
url = input(undefined, ...(ngDevMode ? [{ debugName: "url" }] : []));
|
|
1015
1015
|
data = input(undefined, ...(ngDevMode ? [{ debugName: "data" }] : []));
|
|
1016
1016
|
http = inject(HttpClient);
|
|
1017
1017
|
cache = inject(InuCacheServices);
|
|
1018
1018
|
inuOpenApiService = inject(InuOpenApiServices);
|
|
1019
1019
|
_value = signal(null, ...(ngDevMode ? [{ debugName: "_value" }] : []));
|
|
1020
|
-
|
|
1020
|
+
//====================================================================================================================
|
|
1021
1021
|
// INITIALIZE
|
|
1022
|
-
|
|
1022
|
+
//====================================================================================================================
|
|
1023
1023
|
constructor() {
|
|
1024
1024
|
effect(() => this.init());
|
|
1025
1025
|
}
|
|
@@ -1036,6 +1036,7 @@ class InuOpenApi {
|
|
|
1036
1036
|
loadFormUrl(url) {
|
|
1037
1037
|
const data = this.loadFormCache(url);
|
|
1038
1038
|
if (data) {
|
|
1039
|
+
this.initOpenApi(this.inuOpenApiService.convertToOpenApi(data));
|
|
1039
1040
|
return;
|
|
1040
1041
|
}
|
|
1041
1042
|
const cacheKey = CACHE_PREFIX + url;
|
|
@@ -1053,9 +1054,9 @@ class InuOpenApi {
|
|
|
1053
1054
|
next: value => this.initOpenApi(this.inuOpenApiService.convertToOpenApi(value))
|
|
1054
1055
|
});
|
|
1055
1056
|
}
|
|
1056
|
-
|
|
1057
|
+
//====================================================================================================================
|
|
1057
1058
|
// PARSE
|
|
1058
|
-
|
|
1059
|
+
//====================================================================================================================
|
|
1059
1060
|
initOpenApi(openApi) {
|
|
1060
1061
|
openApi.paths?.sort((value, ref) => {
|
|
1061
1062
|
if (value.url === ref.url) {
|
|
@@ -1065,9 +1066,36 @@ class InuOpenApi {
|
|
|
1065
1066
|
});
|
|
1066
1067
|
this._value.set(openApi);
|
|
1067
1068
|
}
|
|
1068
|
-
|
|
1069
|
+
//====================================================================================================================
|
|
1070
|
+
// ACTIONS
|
|
1071
|
+
//====================================================================================================================
|
|
1072
|
+
download() {
|
|
1073
|
+
const urlOpenApi = this.url();
|
|
1074
|
+
if (!urlOpenApi) {
|
|
1075
|
+
return;
|
|
1076
|
+
}
|
|
1077
|
+
this.http.get(urlOpenApi, { responseType: 'json' })
|
|
1078
|
+
.subscribe({
|
|
1079
|
+
next: data => this.saveFile(data)
|
|
1080
|
+
});
|
|
1081
|
+
}
|
|
1082
|
+
saveFile(data) {
|
|
1083
|
+
const jsonString = JSON.stringify(data, null, 2);
|
|
1084
|
+
const blob = new Blob([jsonString], { type: 'application/json' });
|
|
1085
|
+
const url = window.URL.createObjectURL(blob);
|
|
1086
|
+
const link = document.createElement('a');
|
|
1087
|
+
link.href = url;
|
|
1088
|
+
const fileName = data?.info?.title
|
|
1089
|
+
? `${data.info.title.replace(/\s+/g, '_')}_openapi.json`
|
|
1090
|
+
: 'openapi_definition.json';
|
|
1091
|
+
link.download = fileName;
|
|
1092
|
+
link.click();
|
|
1093
|
+
window.URL.revokeObjectURL(url);
|
|
1094
|
+
link.remove();
|
|
1095
|
+
}
|
|
1096
|
+
//====================================================================================================================
|
|
1069
1097
|
// TOOLS
|
|
1070
|
-
|
|
1098
|
+
//====================================================================================================================
|
|
1071
1099
|
loadFormCache(url) {
|
|
1072
1100
|
const cacheKey = CACHE_PREFIX + url;
|
|
1073
1101
|
const result = this.cache.get(cacheKey);
|
|
@@ -1080,13 +1108,14 @@ class InuOpenApi {
|
|
|
1080
1108
|
}
|
|
1081
1109
|
}
|
|
1082
1110
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuOpenApi, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1083
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: InuOpenApi, isStandalone: true, selector: "inu-open-api", inputs: { url: { classPropertyName: "url", publicName: "url", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"inu-open-api\">\n @if(_value()){\n\n <section>\n @if(_value()?.info){\n <header>\n <h2>{{_value()?.info?.title!}}</h2>\n
|
|
1111
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: InuOpenApi, isStandalone: true, selector: "inu-open-api", inputs: { url: { classPropertyName: "url", publicName: "url", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"inu-open-api\">\n @if(_value()){\n\n <section>\n @if(_value()?.info){\n <header class=\"inu-open-api-main-header\">\n <div class=\"inu-open-api-main-header-detail\">\n <h2>{{_value()?.info?.title!}}</h2>\n <h3>{{_value()?.info?.version!}}</h3>\n <p>\n {{_value()?.info?.description!}}\n </p>\n </div>\n\n <ul class=\"inu-open-api-main-actions\">\n @if(url()){\n <li>\n <inu-icon [size]=\"1.5\" icon=\"download\" (click)=\"download()\"></inu-icon>\n </li>\n }\n </ul>\n </header>\n }\n\n <!--<inu-open-api-filter></inu-open-api-filter>-->\n <div class=\"endpoints\">\n @if(_value()?.paths){\n @for (endpoint of _value()?.paths;track endpoint.uri;) {\n <inu-open-api-endpoint [data]=\"endpoint\" [schemas]=\"_value()?.components?.schemas\"></inu-open-api-endpoint>\n }\n }\n </div>\n </section>\n }\n</div>\n", styles: [".inu-open-api .inu-open-api-main-header{display:flex}.inu-open-api .inu-open-api-main-header .inu-open-api-main-header-detail{flex:1}.inu-open-api .inu-open-api-main-header .inu-open-api-main-actions{margin:0;padding:0}.inu-open-api .inu-open-api-main-header .inu-open-api-main-actions li{list-style:none;display:flex}.inu-open-api .inu-open-api-main-header .inu-open-api-main-actions li ::ng-deep svg{cursor:pointer}.inu-open-api .inu-open-api-main-header .inu-open-api-main-actions li ::ng-deep svg:hover{fill:var(--secondary)}.inu-open-api .endpoints{display:flex;flex-direction:column;gap:1rem}\n"], dependencies: [{ kind: "component", type: InuOpenApiEndpoint, selector: "inu-open-api-endpoint", inputs: ["data", "schemas"] }, { kind: "component", type: InuIcon, selector: "inu-icon", inputs: ["icon", "defaultIcon", "styleclass", "size"] }] });
|
|
1084
1112
|
}
|
|
1085
1113
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuOpenApi, decorators: [{
|
|
1086
1114
|
type: Component,
|
|
1087
1115
|
args: [{ selector: 'inu-open-api', standalone: true, imports: [
|
|
1088
|
-
InuOpenApiEndpoint
|
|
1089
|
-
|
|
1116
|
+
InuOpenApiEndpoint,
|
|
1117
|
+
InuIcon
|
|
1118
|
+
], template: "<div class=\"inu-open-api\">\n @if(_value()){\n\n <section>\n @if(_value()?.info){\n <header class=\"inu-open-api-main-header\">\n <div class=\"inu-open-api-main-header-detail\">\n <h2>{{_value()?.info?.title!}}</h2>\n <h3>{{_value()?.info?.version!}}</h3>\n <p>\n {{_value()?.info?.description!}}\n </p>\n </div>\n\n <ul class=\"inu-open-api-main-actions\">\n @if(url()){\n <li>\n <inu-icon [size]=\"1.5\" icon=\"download\" (click)=\"download()\"></inu-icon>\n </li>\n }\n </ul>\n </header>\n }\n\n <!--<inu-open-api-filter></inu-open-api-filter>-->\n <div class=\"endpoints\">\n @if(_value()?.paths){\n @for (endpoint of _value()?.paths;track endpoint.uri;) {\n <inu-open-api-endpoint [data]=\"endpoint\" [schemas]=\"_value()?.components?.schemas\"></inu-open-api-endpoint>\n }\n }\n </div>\n </section>\n }\n</div>\n", styles: [".inu-open-api .inu-open-api-main-header{display:flex}.inu-open-api .inu-open-api-main-header .inu-open-api-main-header-detail{flex:1}.inu-open-api .inu-open-api-main-header .inu-open-api-main-actions{margin:0;padding:0}.inu-open-api .inu-open-api-main-header .inu-open-api-main-actions li{list-style:none;display:flex}.inu-open-api .inu-open-api-main-header .inu-open-api-main-actions li ::ng-deep svg{cursor:pointer}.inu-open-api .inu-open-api-main-header .inu-open-api-main-actions li ::ng-deep svg:hover{fill:var(--secondary)}.inu-open-api .endpoints{display:flex;flex-direction:column;gap:1rem}\n"] }]
|
|
1090
1119
|
}], ctorParameters: () => [], propDecorators: { url: [{ type: i0.Input, args: [{ isSignal: true, alias: "url", required: false }] }], data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }] } });
|
|
1091
1120
|
|
|
1092
1121
|
class InuOpenApiRequest {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inugami-ng-components-inu-open-api.mjs","sources":["../../../projects/inugami-ng/components/inu-open-api/inu-open-api.service.ts","../../../projects/inugami-ng/components/inu-open-api/components/inu-open-api-parameters/inu-open-api-parameters.ts","../../../projects/inugami-ng/components/inu-open-api/components/inu-open-api-parameters/inu-open-api-parameters.html","../../../projects/inugami-ng/components/inu-open-api/components/inu-open-api-extension/inu-open-api-extension.ts","../../../projects/inugami-ng/components/inu-open-api/components/inu-open-api-extension/inu-open-api-extension.html","../../../projects/inugami-ng/components/inu-open-api/components/inu-open-api-response/inu-open-api-response.ts","../../../projects/inugami-ng/components/inu-open-api/components/inu-open-api-response/inu-open-api-response.html","../../../projects/inugami-ng/components/inu-open-api/components/inu-open-api-endpoint/inu-open-api-endpoint.ts","../../../projects/inugami-ng/components/inu-open-api/components/inu-open-api-endpoint/inu-open-api-endpoint.html","../../../projects/inugami-ng/components/inu-open-api/inu-open-api.ts","../../../projects/inugami-ng/components/inu-open-api/inu-open-api.html","../../../projects/inugami-ng/components/inu-open-api/components/inu-open-api-request/inu-open-api-request.ts","../../../projects/inugami-ng/components/inu-open-api/components/inu-open-api-request/inu-open-api-request.html","../../../projects/inugami-ng/components/inu-open-api/inugami-ng-components-inu-open-api.ts"],"sourcesContent":["import {Injectable} from '@angular/core';\nimport {\n Example,\n Extension,\n ExternalDocs,\n Header,\n ObjectType,\n OpenApi,\n OpenApiComponent,\n OpenApiComponentSchema,\n OpenApiComponentSecurityScheme,\n OpenApiInfo,\n OpenApiPathEndpoint,\n OpenApiPathEndpointParameter,\n OpenApiPathEndpointRequestBody,\n OpenApiPathEndpointResponse,\n OpenApiProperty,\n OpenApiSchema,\n OpenApiServer,\n Tags\n} from \"./open-api.model\";\n\nconst VERBS: string[] = ['get', 'put', 'post', 'delete', 'options', 'patch', 'trace'];\n\ninterface ObjectTypeCache {\n name: string;\n value: ObjectType | OpenApiSchema;\n}\n\n@Injectable({providedIn: 'root'})\nexport class InuOpenApiServices {\n\n\n // =================================================================================================================\n // API\n // =================================================================================================================\n public convertToOpenApi(response: any): OpenApi {\n const schemaTypes: OpenApiComponent | undefined = this.unmarshallComponents(response.components);\n const objectTypeCache: ObjectTypeCache[] = [];\n const result = {\n openapi : response.openapi,\n components : this.unmarshallComponents(response.components),\n externalDocs: this.unmarshallExternalDocs(response.externalDocs),\n info : this.unmarshallInfo(response.info),\n paths : this.unmarshallPaths(response.paths, schemaTypes, objectTypeCache),\n servers : this.unmarshallServers(response.servers),\n tags : this.unmarshallTags(response.tags)\n };\n\n return result;\n }\n\n\n // =================================================================================================================\n // PRIVATE\n // =================================================================================================================\n private unmarshallComponents(components: any): OpenApiComponent | undefined {\n if (!components) {\n return undefined;\n }\n return {\n schemas : this.unmarshallComponentsSchemas(components.schemas),\n securitySchemes: this.unmarshallComponentsSecuritySchemes(components.securitySchemes)\n };\n }\n\n private unmarshallComponentsSchemas(schemas: any): OpenApiComponentSchema[] | undefined {\n const result: OpenApiComponentSchema[] = [];\n if (!schemas) {\n return result;\n }\n\n const keys = Object.keys(schemas);\n keys.sort();\n for (let key of keys) {\n\n const properties: OpenApiProperty[] = [];\n const rawProperties = schemas[key].properties;\n if (rawProperties) {\n const propertyKeys = Object.keys(rawProperties);\n for (let propertyKey of propertyKeys) {\n const property = rawProperties[propertyKey];\n\n let additionalProperties: OpenApiProperty | undefined;\n if (property.additionalProperties) {\n additionalProperties = {\n type: property.additionalProperties.type\n }\n }\n\n let items: OpenApiSchema | undefined;\n if (property.items) {\n items = {\n type : property.items.type,\n format: property.items.format,\n ref : property.items['$ref'] ? property.items['$ref'] : undefined\n };\n }\n const propertyItem: OpenApiProperty = {\n type: property.type,\n ref : property['$ref'],\n name: propertyKey\n };\n\n if (additionalProperties) {\n propertyItem.additionalProperties = additionalProperties;\n }\n if (items) {\n propertyItem.items = items;\n }\n\n properties.push(propertyItem);\n }\n }\n\n result.push({\n id : `#/components/schemas/${key}`,\n name : key,\n type : schemas[key].type,\n properties: properties\n });\n }\n\n return result;\n }\n\n private unmarshallComponentsSecuritySchemes(schemas: any): OpenApiComponentSecurityScheme[] | undefined {\n const result: OpenApiComponentSecurityScheme[] = [];\n if (!schemas) {\n return result;\n }\n\n const keys = Object.keys(schemas);\n keys.sort();\n for (let key of keys) {\n const value = schemas[key];\n result.push({\n name : key,\n type : value.type,\n scheme: value.scheme\n });\n }\n\n return result;\n }\n\n private unmarshallExternalDocs(externalDocs: any): ExternalDocs | undefined {\n return !externalDocs ? undefined : {\n url : externalDocs.url,\n description: externalDocs.description,\n extension : this.unmarshallExtension(externalDocs)\n };\n }\n\n private unmarshallInfo(info: any): OpenApiInfo | undefined {\n return {\n title : info.title,\n description: info.description,\n version : info.version\n }\n }\n\n private unmarshallServers(servers: any): OpenApiServer[] | undefined {\n const result: OpenApiServer[] = [];\n if (!servers) {\n return result;\n }\n for (let server of servers) {\n result.push({\n url : server.url,\n description: server.description\n });\n }\n return result;\n }\n\n\n private unmarshallPaths(paths: any,\n schemaTypes: OpenApiComponent | undefined,\n objectTypeCache: ObjectTypeCache[]): OpenApiPathEndpoint[] {\n const result: OpenApiPathEndpoint[] = [];\n if (!paths) {\n return result;\n }\n\n const keys = Object.keys(paths);\n keys.sort();\n for (let key of keys) {\n const path = paths[key];\n const verbKeys = Object.keys(path);\n verbKeys.sort();\n\n for (let verbKey of verbKeys) {\n if (this.isVerb(verbKey)) {\n const openApiEndpoint = path[verbKey];\n const endpoint: OpenApiPathEndpoint = {\n uri : `${verbKey}_${key}`,\n url : key,\n verb : verbKey,\n tags : openApiEndpoint.tags,\n operationId: openApiEndpoint.operationId,\n summary : openApiEndpoint.summary,\n description: openApiEndpoint.description,\n parameters : this.unmarshallEndpointParameters(openApiEndpoint.parameters),\n requestBody: this.unmarshallEndpointRequestBody(openApiEndpoint.requestBody, schemaTypes, objectTypeCache),\n responses : this.unmarshallEndpointResponse(openApiEndpoint.responses, schemaTypes, objectTypeCache),\n };\n result.push(endpoint);\n }\n }\n }\n\n return result;\n }\n\n private isVerb(verb: string): boolean {\n return verb == undefined || verb == null ? false : VERBS.indexOf(verb) != -1\n }\n\n\n private unmarshallEndpointParameters(value: any): OpenApiPathEndpointParameter[] | undefined {\n if (!value) {\n return undefined;\n }\n\n const result: OpenApiPathEndpointParameter[] = [];\n for (let param of value) {\n let schema: OpenApiSchema | undefined = undefined;\n if (param.schema) {\n schema = {\n type: param.schema?.type,\n ref : param.schema['$ref']\n }\n }\n result.push({\n name : param.name,\n in : param.in,\n required : param.required,\n description : param.description,\n deprecated : param.deprecated,\n allowEmptyValue: param.allowEmptyValue,\n style : param.style,\n explode : param.explode,\n allowReserved : param.allowReserved,\n example : param.example,\n examples : this.unmarshallExamples(param.examples),\n schema : schema\n });\n }\n\n return result;\n }\n\n private unmarshallExamples(value: any): Example[] {\n const result: Example[] = [];\n if (!value) {\n return result;\n }\n\n const keys: string[] = Object.keys(value);\n keys.sort();\n for (let key of keys) {\n result.push(this.unmarshallExample(key, value[key]));\n }\n return result;\n }\n\n private unmarshallExample(name: string, value: any): Example {\n const result: Example = {\n name : name,\n summary : value.summary,\n description : value.description,\n value : value.value,\n externalValue: value.externalValue\n };\n\n let extension: any = {};\n\n const keys = Object.keys(value);\n keys.sort();\n for (let key of keys) {\n if (key.startsWith('x-')) {\n const field = key.substring(2);\n if (field) {\n extension[field] = value[key];\n }\n }\n }\n\n\n return result;\n }\n\n private unmarshallEndpointRequestBody(value: any,\n schemaTypes: OpenApiComponent | undefined,\n objectTypeCache: ObjectTypeCache[]): OpenApiPathEndpointRequestBody | undefined {\n if (!value) {\n return undefined;\n }\n\n let contentType: string | undefined;\n let schema: OpenApiSchema | undefined;\n\n if (value.content) {\n contentType = Object.keys(value.content)[0]\n\n let schemaData: any | undefined = this.extractSchema(value, contentType);\n\n const objectType = this.renderType(schemaData, schemaTypes, objectTypeCache);\n schema = {\n type : schemaData?.type,\n ref : objectType?.value,\n array: objectType?.array,\n name : objectType?.name\n }\n }\n\n return {\n contentType: contentType,\n schema : schema,\n required : value.required\n };\n }\n\n private extractSchema(value: any, contentType: string) {\n\n let content = value.content;\n if (!content) {\n const fields = Object.keys(value).sort();\n for (let field of fields) {\n const subContent = value[field].content;\n if (subContent) {\n content = subContent;\n break;\n }\n }\n }\n\n if (!content || !content[contentType]) {\n return undefined;\n }\n\n return content[contentType].schema;\n }\n\n private unmarshallEndpointResponse(value: any,\n schemaTypes: OpenApiComponent | undefined,\n objectTypeCache: ObjectTypeCache[]): OpenApiPathEndpointResponse[] | undefined {\n if (!value) {\n return undefined;\n }\n const result: OpenApiPathEndpointResponse[] = [];\n const keys = Object.keys(value);\n\n keys.sort();\n for (let key of keys) {\n const response = value[key];\n let contentType: string | undefined;\n let schema: OpenApiSchema | undefined;\n\n let examples: Example[] = [];\n if (response.content) {\n contentType = Object.keys(response.content)[0];\n const responseContent = response.content[contentType];\n const rawSchema: any = responseContent.schema;\n\n if (responseContent.examples) {\n examples = this.unmarshallEndpointResponseExample(responseContent.examples);\n }\n\n\n if (rawSchema) {\n let type: string | undefined = rawSchema.type;\n\n let ref: string | undefined = rawSchema['$ref']\n if (rawSchema['items']) {\n let items: any = rawSchema['items']\n ref = items ? items['$ref'] : undefined;\n }\n\n schema = objectTypeCache.find(v => v.name === ref);\n\n\n if (!schema) {\n let schemaData: any | undefined = this.extractSchema(value, contentType);\n\n const objectType = this.renderType(schemaData, schemaTypes, objectTypeCache);\n\n schema = {\n type : type,\n ref : this.extractObjectTypeValue(objectType?.value),\n array: objectType?.array,\n name : objectType?.name\n };\n if (ref) {\n objectTypeCache.push({\n name : ref,\n value: schema\n });\n }\n\n }\n\n\n if (examples.length == 0) {\n let renderedType = JSON.stringify(schema.array ? [schema.ref] : schema.ref, null, 2);\n if('{}'==renderedType){\n if(type=='string'){\n renderedType = '\"\"';\n }\n }\n\n examples.push({\n name : 'nominal',\n value: renderedType\n });\n }\n }\n }\n\n\n result.push({\n status : key,\n description: response.description,\n contentType: contentType,\n headers : this.unmarshallEndpointResponseHeader(response.headers),\n schema : schema,\n examples : examples.length > 0 ? examples : undefined\n });\n }\n\n return result;\n }\n\n private unmarshallEndpointResponseExample(value: any): Example[] {\n const result: Example[] = [];\n\n const keys: string[] = Object.keys(value);\n keys.sort();\n for (let key of keys) {\n const item = value[key];\n\n let valueContent = undefined;\n if (item.value) {\n if (typeof item.value == 'string') {\n valueContent = item.value;\n } else {\n valueContent = JSON.stringify(item.value, null, 2);\n }\n }\n\n result.push({\n name : key,\n summary : item.summary,\n description : item.externalDocs,\n value : valueContent,\n externalValue: item.externalValue,\n extensions : this.extractExtension(item)\n });\n }\n\n return result;\n }\n\n private extractObjectTypeValue(value: any) {\n if (Array.isArray(value) && value.length > 0) {\n return value[0];\n }\n return value;\n }\n\n private unmarshallEndpointResponseHeader(value: any): undefined | Header[] {\n if (!value) {\n return undefined;\n }\n const result: Header[] = [];\n\n const keys: string[] = Object.keys(value);\n keys.sort();\n\n for (let key of keys) {\n const item = value[key];\n result.push({\n name : key,\n description : item.description,\n externalDocs: item.externalDocs,\n style : item.style\n });\n }\n\n return result;\n }\n\n\n private extractExtension(value: any): Extension[] | undefined {\n if (!value) {\n return undefined;\n }\n const result: Extension[] = [];\n\n const keys: string[] = Object.keys(value);\n keys.sort();\n for (let key of keys) {\n if (key.startsWith('x-')) {\n result.push({\n name : key.substring(2),\n value: value[key]\n });\n }\n }\n\n return result.length == 0 ? undefined : result;\n }\n\n\n private unmarshallTags(value: any): Tags[] {\n const result: Tags[] = [];\n if (value == undefined || !Array.isArray(value)) {\n return result;\n }\n\n for (let tag of value) {\n if (tag.name) {\n const currentTag: Tags = {name: tag.name}\n if (tag.description) {\n currentTag.description = tag.description;\n }\n const externalDoc = this.unmarshallExternalDocs(tag.externalDocs);\n if (externalDoc) {\n currentTag.externalDocs = externalDoc;\n }\n\n result.push(currentTag);\n }\n\n }\n\n return result;\n }\n\n private unmarshallExtension(value: any): any | undefined {\n if (!value) {\n return undefined;\n }\n\n const result: any = {};\n const keys = Object.keys(value);\n keys.sort();\n\n for (let key of keys) {\n if (key.startsWith(\"x-\")) {\n result[key.substring(2)] = value[key];\n }\n }\n\n return result;\n }\n\n\n private renderType(schema: any,\n schemaTypes: OpenApiComponent | undefined,\n objectTypeCache: ObjectTypeCache[],\n level?: number): ObjectType | undefined {\n if (!schema || (level! > 5)) {\n return undefined;\n }\n\n const array = schema.type == 'array';\n let type: string = '';\n if (array) {\n if (schema.items) {\n type = schema.items['$ref'];\n if (!type && schema.items.type) {\n type = schema.items.type;\n }\n }\n } else {\n type = schema.ref;\n }\n\n let currentType: any = undefined;\n let object: any = {};\n\n if (type) {\n if (schemaTypes?.schemas) {\n for (let item of schemaTypes?.schemas) {\n if (type == item.id) {\n currentType = item;\n break;\n }\n }\n }\n\n if (currentType?.name) {\n const cachedValue = objectTypeCache.find(v => v.name === currentType.name);\n if (cachedValue) {\n return cachedValue;\n }\n }\n if (currentType && currentType.properties) {\n object = this.convertObjectPropertiesToObject(currentType.properties,\n currentType.example ? currentType.example : {},\n schemaTypes,\n objectTypeCache,\n level ? level + 1 : 0);\n }\n }\n else if (schema.properties) {\n object = this.convertObjectPropertiesToObject(Object\n .entries(schema.properties)\n .map(e => {\n const value = e[1] as any;\n return {\n name:e[0],\n format:value?.format,\n type:value?.type\n }\n }),\n {},\n schemaTypes,\n objectTypeCache,\n level ? level + 1 : 0);\n }\n\n\n const result: ObjectType = {\n array: array,\n name : currentType?.name,\n value: array ? [object] : object\n }\n if (currentType?.name) {\n objectTypeCache.push({\n name : currentType.name,\n value: result\n });\n }\n\n return result;\n }\n\n private convertObjectPropertiesToObject(properties: any,\n example: any,\n schemaTypes: OpenApiComponent | undefined,\n objectTypeCache: ObjectTypeCache[],\n level: number): any {\n if (!properties) {\n return undefined;\n }\n if (level > 20) {\n return {};\n }\n const object: any = {};\n for (let property of properties) {\n if (!property.name) {\n continue;\n }\n const type = property.type ? property.type : 'object';\n const sample = example[property.name];\n\n switch (type) {\n case 'string':\n if ('date' == property.format) {\n object[property.name] = sample ? sample : 'yyyyMMdd';\n } else if ('date-time' == property.format) {\n object[property.name] = sample ? sample : 'yyyyMMddTHH:mm:ss';\n } else {\n object[property.name] = sample ? sample : 'string';\n }\n\n break\n case 'number':\n if ('float' == property.format || 'double' == property.format) {\n object[property.name] = sample ? sample : 0.0;\n } else {\n object[property.name] = sample ? sample : 0;\n }\n break\n case 'integer':\n object[property.name] = sample ? sample : 0;\n break\n case 'boolean':\n object[property.name] = false;\n break;\n case 'array':\n object[property.name] = this.convertArray(property,\n property.example ? property.example : {}, schemaTypes,\n objectTypeCache,\n level + 1);\n break;\n default:\n const subType = this.renderType({ref: property.ref}, schemaTypes, objectTypeCache, level + 1);\n object[property.name] = subType?.value;\n break;\n }\n\n }\n return object;\n }\n\n private convertArray(property: any,\n example: any,\n schemaTypes: OpenApiComponent | undefined,\n objectTypeCache: ObjectTypeCache[],\n level: number): any[] {\n const result: any = [];\n const type = property.type ? property.type : 'object';\n const sample = example[property.name];\n switch (type) {\n case 'string':\n if ('date' == property.format) {\n result.push(sample ? sample : 'yyyyMMdd');\n } else if ('date-time' == property.format) {\n result.push(sample ? sample : 'yyyyMMddTHH:mm:ss');\n } else {\n result.push(sample ? sample : 'string');\n }\n break\n case 'number':\n if ('float' == property.format || 'double' == property.format) {\n result.push(sample ? sample : 0.0);\n } else {\n result.push(sample ? sample : 0);\n }\n break\n case 'integer':\n result.push(sample ? sample : 0);\n break\n case 'boolean':\n result.push(false);\n break;\n default:\n const subType = this.renderType({ref: property.ref}, schemaTypes, objectTypeCache, level + 1);\n result.push(subType ? subType.value : {});\n break;\n }\n return result;\n }\n\n\n}\n","import {Component, input} from '@angular/core';\nimport {OpenApiPathEndpointParameter} from '../../open-api.model';\nimport {InuCode} from 'inugami-ng/components/inu-code';\n\nconst SPACE : string = ' ';\n\n@Component({\n selector: 'inu-open-api-parameters',\n standalone: true,\n providers: [],\n imports: [InuCode],\n templateUrl: './inu-open-api-parameters.html',\n styleUrl: './inu-open-api-parameters.scss',\n})\nexport class InuOpenApiParameters{\n\n //==================================================================================================================\n // ATTRIBUTES\n //==================================================================================================================\n data = input<OpenApiPathEndpointParameter[] | undefined | null>(undefined);\n parameterExamples :any = {}\n\n //==================================================================================================================\n // ACTION\n //==================================================================================================================\n toggleExample(index:number){\n const value = this.parameterExamples[index];\n if(value == undefined){\n this.parameterExamples[index] = true;\n }else{\n this.parameterExamples[index] = !value;\n }\n }\n\n\n //==================================================================================================================\n // GETTERS\n //==================================================================================================================\n getRowClass(index:number, first:boolean, odd:boolean, styleclass?:string):string{\n const result :string[]= [`flex-table-body-row index-${index}`];\n if(first){\n result.push('first');\n }\n if(odd){\n result.push('odd');\n }\n\n if(styleclass){\n result.push(styleclass);\n }\n return result.join(SPACE);\n }\n getParameterClass(index:number, styleclass:string):string{\n const result: string[]= [styleclass];\n const toggle = this.parameterExamples[index];\n if(toggle){\n result.push('display')\n }\n\n return result.join(' ');\n\n }\n}\n","<div class=\"inu-open-api-parameters\">\n @if (data()) {\n <div class=\"inu-flex-table\">\n <div class=\"flex-table-header\">\n <div class=\"flex-table-header-th name\">Name</div>\n <div class=\"flex-table-header-th type\">Type</div>\n <div class=\"flex-table-header-th desc\">Description</div>\n <div class=\"flex-table-header-th examples\">Examples</div>\n </div>\n\n\n <div class=\"flex-table-body\">\n\n @for (parameter of data(); track parameter.name; let index = $index; let isFirst = $first; let isOdd = $odd) {\n <div [class]=\"getRowClass(index,isFirst, isOdd , (parameter.deprecated?'deprecated': ''))\">\n <div class=\"flex-table-body-cell\">\n <span>{{parameter.name}}</span>\n @if (parameter.required) {\n <span class=\"required\"><span class=\"label\"></span></span>\n } @else {\n <span></span>\n }\n </div>\n <div class=\"flex-table-body-cell\">{{parameter.schema?.type}}</div>\n <div class=\"flex-table-body-cell\">{{parameter.description}}</div>\n <div class=\"flex-table-body-cell\">\n @if(parameter.example){\n <div class=\"parameters-main-example\">\n <inu-code [source]=\"parameter.example\"></inu-code>\n </div>\n }\n\n @if(parameter.examples && parameter.examples.length>0){\n <div class=\"parameters-examples\">\n @for (example of parameter.examples; track example.name; let paramIndex = $index; let firstExample = $first; let oddExample = $odd) {\n <div [class]=\"getRowClass(paramIndex,firstExample, oddExample ,'parameter-example')\">\n <div [class]=\"getParameterClass(paramIndex,'parameter-example-header')\" (click)=\"toggleExample(paramIndex)\">\n {{example.name}}\n </div>\n <dl [class]=\"getParameterClass(paramIndex,'example-content')\">\n <dt>Summary</dt>\n <dd>{{example.summary}}</dd>\n\n <dt>External value</dt>\n <dd>{{example.externalValue}}</dd>\n\n <dt>Description</dt>\n <dd>{{example.description}}</dd>\n\n <dt>Value</dt>\n <dd><inu-code [source]=\"example.value\"></inu-code></dd>\n\n </dl>\n </div>\n }\n </div>\n }\n\n </div>\n </div>\n }\n\n </div>\n </div>\n }\n</div>\n","import {Component, effect, input, signal, WritableSignal} from '@angular/core';\nimport {Extension} from '../../open-api.model';\n\n@Component({\n selector: 'inu-open-api-extension',\n standalone: true,\n providers: [],\n imports: [],\n templateUrl: './inu-open-api-extension.html',\n styleUrl: './inu-open-api-extension.scss',\n})\nexport class InuOpenApiExtension {\n\n //==================================================================================================================\n // ATTRIBUTES\n //==================================================================================================================\n data = input<any | undefined | null>(undefined);\n\n keys: WritableSignal<string[]> = signal([]);\n _type: WritableSignal<string|null> = signal(null);\n\n //==================================================================================================================\n // INIT\n //==================================================================================================================\n constructor() {\n effect(() => {\n this.init()\n });\n }\n\n private init() {\n if (!this.data()) {\n return;\n }\n if(Array.isArray(this.data)){\n this._type.set('array');\n const keys = [];\n for(let i=0; i<this.data.length; i++){\n keys.push(`${i}`);\n }\n this.keys.set(keys);\n }\n else if(typeof this.data == 'object'){\n this._type.set('object');\n const keys = Object.keys(this.data);\n keys.sort();\n this.keys.set(keys);\n }else{\n this._type.set('primitive');\n }\n }\n //==================================================================================================================\n // GETTERS\n //==================================================================================================================\n getChild(key:string):Extension|undefined{\n const data = this.data();\n if(this._type()=='array'){\n const index:number= Number(key);\n if(Array.isArray(data) && data.length> index){\n return data[index];\n }else{\n return undefined;\n }\n\n }else{\n return data[key];\n }\n }\n}\n","<div class=\"inu-open-api-extension\">\n @if(data()){\n <div class=\"inu-extension\">\n @if(keys()){\n <dl class=\"inu-extension-content\">\n @for (key of keys(); track key; let index = $index; let isFirst = $first; let isOdd = $odd) {\n <dt [class.first]=\"isFirst\" [class.odd]=\"isOdd\">{{key}}</dt>\n <dd [class.first]=\"isFirst\" [class.odd]=\"isOdd\">\n <inu-open-api-extension [data]=\"getChild(key)\"></inu-open-api-extension>\n </dd>\n }\n </dl>\n }\n\n @if(_type()== 'primitive'){\n {{data()}}\n }\n </div>\n }\n</div>\n","import {Component, effect, input, signal, WritableSignal} from '@angular/core';\nimport {Example, OpenApiComponentSchema, OpenApiPathEndpointResponse} from '../../open-api.model';\nimport {InuIcon} from 'inugami-icons';\nimport {InuCode,InternalSourceCode} from 'inugami-ng/components/inu-code';\nimport {InuOpenApiExtension} from '../inu-open-api-extension/inu-open-api-extension';\n\n@Component({\n selector: 'inu-open-api-response',\n standalone: true,\n providers: [],\n imports: [\n InuIcon,\n InuCode,\n InuOpenApiExtension\n ],\n templateUrl: './inu-open-api-response.html',\n styleUrl: './inu-open-api-response.scss',\n})\nexport class InuOpenApiResponse {\n\n //==================================================================================================================\n // ATTRIBUTES\n //==================================================================================================================\n data = input<OpenApiPathEndpointResponse | undefined | null>(undefined);\n schemas = input<OpenApiComponentSchema[] | undefined | null>(null);\n\n status: WritableSignal<number | null> = signal(null);\n examplesSources: WritableSignal<InternalSourceCode[]> = signal([]);\n //==================================================================================================================\n // INIT\n //==================================================================================================================\n constructor() {\n effect(() => {\n this.init()\n });\n }\n\n private init() {\n if (!this.data()) {\n return;\n }\n const httpStatus = this.data()?.status!;\n try {\n this.status.set(Number(httpStatus));\n } catch (e){}\n\n this.initExampleSources();\n }\n private initExampleSources() {\n const result : InternalSourceCode[] = [];\n const examples =this.data()?.examples;\n if (examples) {\n for(let example of examples){\n result.push({\n content: example.value!,\n type: 'json',\n title : example.name\n })\n }\n }\n\n this.examplesSources.set(result);\n }\n //==================================================================================================================\n // ACTION\n //==================================================================================================================\n toggleExample(index:number){\n const examples = this.data()?.examples;\n if(!examples || examples.length<=index){\n return ;\n }\n const example =examples[index];\n const display = example.display==undefined ? false :example.display;\n example.display = !display;\n }\n //==================================================================================================================\n // GETTERS\n //==================================================================================================================\n computeExampleClass(example: Example, isFirst: boolean, isOdd: boolean): string {\n const result = ['response-example'];\n\n if (isFirst) {\n result.push('first');\n }\n if (isOdd) {\n result.push('odd');\n }\n const status = this.status();\n if (status) {\n if (status < 400) {\n result.push('status-success');\n }\n if (status < 500) {\n result.push('status-warning');\n }\n else{\n result.push('status-error');\n }\n }\n\n return result.join(' ');\n }\n getExampleDisplayStatus(index:number){\n const examples = this.data()?.examples;\n if(!examples || examples.length<=index){\n return false;\n }\n const example =examples[index];\n return example.display==undefined ? false :example.display;\n }\n\n getExamplesSource(index:number):InternalSourceCode|undefined{\n if(!this.examplesSources() || this.examplesSources().length<=index){\n return undefined;\n }\n return this.examplesSources()[index];\n }\n\n\n}\n","@if(data()){\n <div class=\"inu-open-api-response\">\n <div class=\"description\">{{data()?.description}}</div>\n <div class=\"content-type\">{{data()?.contentType}}</div>\n\n <div class=\"response-examples\">\n @if(data()?.examples){\n @for (example of data()?.examples; track example.name; let index = $index; let isFirst = $first; let isOdd = $odd) {\n <div class=\"response-example\" [class]=\"computeExampleClass(example, isFirst, isOdd)\">\n <div class=\"response-example-header\" (click)=\"toggleExample(index)\">\n <div class=\"response-example-header-labels\" >\n <span class=\"response-example-header-name\" >{{example.name}}</span>\n <span class=\"response-example-header-summary\">{{example.summary}}</span>\n </div>\n\n <span class=\"button open\" [class.displayStatus]=\"getExampleDisplayStatus(index)\">\n @if(example.description || example.externalValue || example.extensions || getExamplesSource(index)?.content){\n <inu-icon [icon]=\"getExampleDisplayStatus(index)?'chevron_up':'chevron_down'\" [size]=\"1\"></inu-icon>\n }\n </span>\n </div>\n @if(example.description || example.externalValue || example.extensions || getExamplesSource(index)?.content){\n <div class=\"response-example-content\" [class.display]=\"getExampleDisplayStatus(index)\">\n\n @if(example.description || example.externalValue || example.extensions){\n <dl class=\"example-content\">\n @if(example.description){\n <dt>Description</dt>\n <dd>{{example.description}}</dd>\n }\n @if(example.externalValue){\n <dt>External value</dt>\n <dd>{{example.externalValue}}</dd>\n }\n\n @if(example.extensions){\n @for (extension of example.extensions; track extension.name) {\n <dt>{{extension.name}}</dt>\n <dd><inu-open-api-extension [data]=\"extension\"></inu-open-api-extension></dd>\n }\n }\n </dl>\n }\n\n @if(getExamplesSource(index)?.content){\n @if(getExamplesSource(index)?.content && getExamplesSource(index)?.content !=''){\n <inu-code [source]=\"getExamplesSource(index)?.content\"\n [type]=\"getExamplesSource(index)?.type\"\n [title]=\"getExamplesSource(index)?.title\"></inu-code>\n }\n }\n\n </div>\n }\n\n\n </div>\n }\n }\n\n\n\n </div>\n </div>\n}\n","import {Component, effect, input, signal, WritableSignal} from '@angular/core';\nimport {\n OpenApiComponentSchema,\n OpenApiPathEndpoint,\n OpenApiPathEndpointParameter,\n OpenApiPathEndpointResponse\n} from '../../open-api.model';\nimport {InuOpenApiParameters} from '../inu-open-api-parameters/inu-open-api-parameters';\nimport {InuCode, InternalSourceCode} from 'inugami-ng/components/inu-code';\nimport {InuOpenApiResponse} from '../inu-open-api-response/inu-open-api-response';\nimport {InuIcon} from 'inugami-icons';\n\nconst SPACE = ' ';\n\n@Component({\n selector: 'inu-open-api-endpoint',\n standalone: true,\n providers: [],\n imports: [InuOpenApiParameters, InuOpenApiResponse, InuCode, InuIcon],\n templateUrl: './inu-open-api-endpoint.html',\n styleUrl: './inu-open-api-endpoint.scss',\n})\nexport class InuOpenApiEndpoint {\n\n //==================================================================================================================\n // ATTRIBUTES\n //==================================================================================================================\n data = input<OpenApiPathEndpoint | undefined | null>(undefined);\n schemas = input<OpenApiComponentSchema[] | undefined | null>(null);\n styleClass: WritableSignal<string> = signal('');\n display: WritableSignal<string> = signal('inu-open-api-endpoint-content-display hidden');\n\n parameters: WritableSignal<OpenApiPathEndpointParameter[] | null> = signal(null);\n headers: WritableSignal<OpenApiPathEndpointParameter[] | null> = signal(null);\n options: WritableSignal<OpenApiPathEndpointParameter[] | null> = signal(null);\n\n\n request: WritableSignal<InternalSourceCode | null> = signal(null);\n responseMain: WritableSignal<OpenApiPathEndpointResponse | null> = signal(null);\n response: WritableSignal<InternalSourceCode | null> = signal(null);\n\n //==================================================================================================================\n // INIT\n //==================================================================================================================\n constructor() {\n effect(() => {\n this.init()\n });\n }\n\n private init() {\n this.initStyle();\n this.initParameters();\n this.initRequest();\n this.initResponse();\n }\n\n private initStyle() {\n const styles = ['inu-open-api-endpoint'];\n if (this.data()) {\n styles.push(this.data()?.verb!);\n }\n\n this.styleClass.set(styles.join(SPACE));\n }\n\n private initParameters() {\n const dataParameters = this.data()?.parameters;\n if (!dataParameters) {\n return\n }\n const parameters: OpenApiPathEndpointParameter[] = [];\n const options: OpenApiPathEndpointParameter[] = [];\n const headers: OpenApiPathEndpointParameter[] = [];\n\n\n for (let param of dataParameters) {\n if ('path' == param.in) {\n parameters.push(param);\n } else if ('header' == param.in) {\n headers.push(param);\n } else {\n options.push(param);\n }\n }\n if (parameters.length > 0) {\n this.parameters.set(parameters);\n }\n if (headers.length > 0) {\n this.headers.set(headers);\n }\n if (options.length > 0) {\n this.options.set(options);\n }\n }\n\n initRequest() {\n const data = this.data();\n if (!data) {\n return;\n }\n const contentType = data.requestBody?.contentType ? data.requestBody.contentType : 'text'\n let content: string | undefined = undefined;\n let type: string = this.resolveType(contentType);\n let name: string | undefined = undefined;\n if (data.requestBody?.schema) {\n const schema = data.requestBody.schema;\n if (schema?.ref) {\n content = JSON.stringify(data.requestBody.schema?.ref, null, 4);\n }\n\n if (schema.name) {\n name = schema.array ? `${schema.name}[]` : schema.name;\n }\n\n }\n\n if (content) {\n this.request.set({\n content: content,\n title: name,\n type: type\n })\n }\n }\n\n initResponse() {\n const data = this.data();\n if (!data) {\n return;\n }\n const responses = data.responses ? data.responses : [];\n if (responses.length == 0) {\n return;\n }\n const successResponse = responses.filter((r) => this.convertToNumber(r.status) < 300);\n\n if (successResponse && successResponse.length > 0) {\n const mainResponse = successResponse[0];\n\n this.responseMain.set(mainResponse);\n const contentType = mainResponse.contentType ? mainResponse.contentType : 'text'\n let content: string | undefined = undefined;\n let type: string = this.resolveType(contentType);\n let name: string | undefined = undefined;\n if (mainResponse.schema) {\n const schema = mainResponse.schema;\n if (schema?.ref) {\n content = JSON.stringify(mainResponse.schema?.ref, null, 4);\n }\n\n if (schema.name) {\n name = schema.array ? `${schema.name}[]` : schema.name;\n }\n\n }\n\n if (content) {\n this.response.set({\n content: content,\n title: name,\n type: type\n })\n }\n }\n\n }\n\n //==================================================================================================================\n // INIT\n //==================================================================================================================\n toggleDisplay() {\n if ('inu-open-api-endpoint-content-display hidden' == this.display()) {\n this.display.set('inu-open-api-endpoint-content-display show');\n } else {\n this.display.set('inu-open-api-endpoint-content-display hidden');\n }\n }\n\n private resolveType(contentType: string): string {\n if (contentType == 'text' || contentType == 'text/plain') {\n return 'text';\n }\n const parts = contentType.split('application/');\n return parts.length == 2 ? parts[1].toLowerCase() : 'text';\n\n }\n\n private convertToNumber(value?: string): number {\n if (!value) {\n return 0;\n }\n try {\n return Number(value);\n } catch (e) {\n return 0;\n }\n }\n\n getRowClass(index: number, first: boolean, odd: boolean, styleclass?: string): string {\n const result: string[] = [`flex-table-body-row index-${index}`];\n if (first) {\n result.push('first');\n }\n if (odd) {\n result.push('odd');\n }\n\n if (styleclass) {\n result.push(styleclass);\n }\n return result.join(SPACE);\n }\n\n computeStatusStyleClass(status?:string): string {\n const result = ['inu-endpoint-response-status'];\n\n const httpStatus = this.convertToNumber(status);\n if(httpStatus<400){\n result.push('success');\n }\n else if(httpStatus<500){\n result.push('warning');\n }\n else{\n result.push('error');\n }\n\n return result.join(SPACE)\n }\n}\n","@if (data()) {\n <article [class]=\"styleClass()\">\n <header>\n <h2 (click)=\"toggleDisplay()\">\n <span class=\"inu-endpoint-verb\">{{ data()?.verb }}</span>\n <span class=\"inu-endpoint-url\">{{ data()?.url }}</span>\n </h2>\n <span class=\"button open\" (click)=\"toggleDisplay()\">\n <inu-icon [icon]=\"display() == 'inu-open-api-endpoint-content-display show'?'chevron_up':'chevron_down'\" [size]=\"1\"></inu-icon>\n </span>\n </header>\n\n <div class=\"inu-open-api-endpoint-content\">\n <div [class]=\"display()\">\n <!--==============================================================================================================\n = INFORMATION\n ===============================================================================================================-->\n @if (parameters()) {\n <fieldset class=\"information\">\n <label>Information</label>\n <div class=\"content\">\n <inu-open-api-parameters [data]=\"parameters()\"></inu-open-api-parameters>\n </div>\n </fieldset>\n }\n\n <!--==============================================================================================================\n = HEADERS\n ===============================================================================================================-->\n @if (headers()) {\n <fieldset class=\"headers\">\n <label>Headers</label>\n <div class=\"content\">\n <inu-open-api-parameters [data]=\"headers()\"></inu-open-api-parameters>\n </div>\n </fieldset>\n }\n\n <!--==============================================================================================================\n = OPTION\n ===============================================================================================================-->\n @if (options()) {\n <fieldset class=\"options\">\n <label>Options</label>\n <div class=\"content\">\n <inu-open-api-parameters [data]=\"options()\"></inu-open-api-parameters>\n </div>\n </fieldset>\n }\n\n <!--==============================================================================================================\n = REQUEST\n ===============================================================================================================-->\n @if (data()?.requestBody) {\n <fieldset class=\"request\">\n <label>Request</label>\n <div class=\"content\">\n <div class=\"description\">{{ data()?.requestBody?.description! }}</div>\n <div class=\"content-type\">{{ data()?.requestBody?.contentType! }}</div>\n\n @if (request()) {\n <div class=\"schema\">\n <inu-code [source]=\"request()?.content\" [type]=\"request()?.type\"\n [title]=\"request()?.title\"></inu-code>\n </div>\n }\n </div>\n </fieldset>\n }\n <!--==============================================================================================================\n = RESPONSE\n ===============================================================================================================-->\n\n @if (data()?.responses) {\n <fieldset class=\"response\">\n <label>Response</label>\n\n <div class=\"content\">\n\n <div class=\"response-table\">\n <div class=\"response-table-body\">\n @for (response of data()?.responses; track response.status; let index = $index; let isFirst = $first; let isOdd = $odd) {\n <div [class]=\"getRowClass(index,isFirst, isOdd)\">\n <div [class]=\"computeStatusStyleClass(response.status)\">\n {{ response.status }}\n </div>\n <div class=\"description-content\">\n <inu-open-api-response [data]=\"response\" [schemas]=\"schemas()\"></inu-open-api-response>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </fieldset>\n }\n </div>\n </div>\n </article>\n}\n\n","import {Component, effect, inject, input, signal, WritableSignal} from '@angular/core';\nimport {InuCacheServices} from \"inugami-ng/services\";\nimport {map, Observable, shareReplay, tap} from \"rxjs\";\nimport {HttpClient} from \"@angular/common/http\";\nimport {OpenApi} from './open-api.model';\nimport {InuOpenApiServices} from './inu-open-api.service';\nimport {InuOpenApiEndpoint} from './components/inu-open-api-endpoint/inu-open-api-endpoint';\n\n\nconst CACHE_PREFIX = 'inu-open-api_';\n\n@Component({\n selector: 'inu-open-api',\n standalone: true,\n imports: [\n InuOpenApiEndpoint\n ],\n templateUrl: './inu-open-api.html',\n styleUrl: './inu-open-api.scss',\n})\nexport class InuOpenApi {\n\n //==================================================================================================================\n // ATTRIBUTES\n //==================================================================================================================\n url = input<string | undefined | null>(undefined);\n data = input<OpenApi | undefined | null>(undefined);\n private readonly http = inject(HttpClient);\n private readonly cache = inject(InuCacheServices);\n private readonly inuOpenApiService = inject(InuOpenApiServices);\n\n _value: WritableSignal<OpenApi | null> = signal<OpenApi | null>(null);\n\n //==================================================================================================================\n // INITIALIZE\n //==================================================================================================================\n constructor() {\n effect(() => this.init());\n }\n\n init(): void {\n const data = this.data();\n const url = this.url();\n if (data) {\n this.initOpenApi(data)\n } else if (url) {\n this.loadFormUrl(url);\n }\n }\n\n loadFormUrl(url: string) {\n const data: OpenApi | undefined = this.loadFormCache(url);\n if (data) {\n\n return;\n }\n const cacheKey = CACHE_PREFIX + url;\n const pending: Observable<OpenApi> | undefined = this.cache.getPending(cacheKey);\n if (pending) {\n pending.subscribe(res => this.initOpenApi(this.inuOpenApiService.convertToOpenApi(res)));\n return;\n }\n\n const request = this.http.get<any>(url)\n .pipe(tap(data => {\n this.cache.set(cacheKey, data);\n }),\n shareReplay(1)\n );\n this.cache.setPending(cacheKey, request);\n request.subscribe({\n next: value => this.initOpenApi(this.inuOpenApiService.convertToOpenApi(value))\n });\n\n }\n\n\n //==================================================================================================================\n // PARSE\n //==================================================================================================================\n initOpenApi(openApi: OpenApi) {\n openApi.paths?.sort((value, ref)=> {\n if(value.url=== ref.url){\n return `${value.verb}`.toLowerCase().localeCompare(`${ref.verb}`.toUpperCase());\n }\n return `${value.url}`.toLowerCase().localeCompare(`${ref.url}`.toUpperCase());\n });\n this._value.set(openApi);\n }\n\n //==================================================================================================================\n // TOOLS\n //==================================================================================================================\n loadFormCache(url: string): OpenApi | undefined {\n const cacheKey = CACHE_PREFIX + url;\n const result: OpenApi | undefined = this.cache.get(cacheKey);\n return result;\n }\n\n setToCache(url: string, value: any): void {\n const cacheKey = CACHE_PREFIX + url;\n if (value) {\n this.cache.set(cacheKey, value);\n }\n }\n\n}\n","<div class=\"inu-open-api\">\n @if(_value()){\n\n <section>\n @if(_value()?.info){\n <header>\n <h2>{{_value()?.info?.title!}}</h2>\n <h3>{{_value()?.info?.version!}}</h3>\n <p>\n {{_value()?.info?.description!}}\n </p>\n </header>\n }\n\n <!--<inu-open-api-filter></inu-open-api-filter>-->\n <div class=\"endpoints\">\n @if(_value()?.paths){\n @for (endpoint of _value()?.paths;track endpoint.uri;) {\n <inu-open-api-endpoint [data]=\"endpoint\" [schemas]=\"_value()?.components?.schemas\"></inu-open-api-endpoint>\n }\n }\n </div>\n </section>\n }\n</div>\n","import {Component} from '@angular/core';\n\n@Component({\n selector: 'inu-open-api-request',\n standalone: true,\n providers: [],\n imports: [],\n templateUrl: './inu-open-api-request.html',\n styleUrl: './inu-open-api-request.scss',\n})\nexport class InuOpenApiRequest {\n\n //==================================================================================================================\n // ATTRIBUTES\n //==================================================================================================================\n\n}\n","","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["SPACE"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"inugami-ng-components-inu-open-api.mjs","sources":["../../../projects/inugami-ng/components/inu-open-api/inu-open-api.service.ts","../../../projects/inugami-ng/components/inu-open-api/components/inu-open-api-parameters/inu-open-api-parameters.ts","../../../projects/inugami-ng/components/inu-open-api/components/inu-open-api-parameters/inu-open-api-parameters.html","../../../projects/inugami-ng/components/inu-open-api/components/inu-open-api-extension/inu-open-api-extension.ts","../../../projects/inugami-ng/components/inu-open-api/components/inu-open-api-extension/inu-open-api-extension.html","../../../projects/inugami-ng/components/inu-open-api/components/inu-open-api-response/inu-open-api-response.ts","../../../projects/inugami-ng/components/inu-open-api/components/inu-open-api-response/inu-open-api-response.html","../../../projects/inugami-ng/components/inu-open-api/components/inu-open-api-endpoint/inu-open-api-endpoint.ts","../../../projects/inugami-ng/components/inu-open-api/components/inu-open-api-endpoint/inu-open-api-endpoint.html","../../../projects/inugami-ng/components/inu-open-api/inu-open-api.ts","../../../projects/inugami-ng/components/inu-open-api/inu-open-api.html","../../../projects/inugami-ng/components/inu-open-api/components/inu-open-api-request/inu-open-api-request.ts","../../../projects/inugami-ng/components/inu-open-api/components/inu-open-api-request/inu-open-api-request.html","../../../projects/inugami-ng/components/inu-open-api/inugami-ng-components-inu-open-api.ts"],"sourcesContent":["import {Injectable} from '@angular/core';\nimport {\n Example,\n Extension,\n ExternalDocs,\n Header,\n ObjectType,\n OpenApi,\n OpenApiComponent,\n OpenApiComponentSchema,\n OpenApiComponentSecurityScheme,\n OpenApiInfo,\n OpenApiPathEndpoint,\n OpenApiPathEndpointParameter,\n OpenApiPathEndpointRequestBody,\n OpenApiPathEndpointResponse,\n OpenApiProperty,\n OpenApiSchema,\n OpenApiServer,\n Tags\n} from \"./open-api.model\";\n\nconst VERBS: string[] = ['get', 'put', 'post', 'delete', 'options', 'patch', 'trace'];\n\ninterface ObjectTypeCache {\n name: string;\n value: ObjectType | OpenApiSchema;\n}\n\n@Injectable({providedIn: 'root'})\nexport class InuOpenApiServices {\n\n\n // =================================================================================================================\n // API\n // =================================================================================================================\n public convertToOpenApi(response: any): OpenApi {\n const schemaTypes: OpenApiComponent | undefined = this.unmarshallComponents(response.components);\n const objectTypeCache: ObjectTypeCache[] = [];\n const result = {\n openapi : response.openapi,\n components : this.unmarshallComponents(response.components),\n externalDocs: this.unmarshallExternalDocs(response.externalDocs),\n info : this.unmarshallInfo(response.info),\n paths : this.unmarshallPaths(response.paths, schemaTypes, objectTypeCache),\n servers : this.unmarshallServers(response.servers),\n tags : this.unmarshallTags(response.tags)\n };\n\n return result;\n }\n\n\n // =================================================================================================================\n // PRIVATE\n // =================================================================================================================\n private unmarshallComponents(components: any): OpenApiComponent | undefined {\n if (!components) {\n return undefined;\n }\n return {\n schemas : this.unmarshallComponentsSchemas(components.schemas),\n securitySchemes: this.unmarshallComponentsSecuritySchemes(components.securitySchemes)\n };\n }\n\n private unmarshallComponentsSchemas(schemas: any): OpenApiComponentSchema[] | undefined {\n const result: OpenApiComponentSchema[] = [];\n if (!schemas) {\n return result;\n }\n\n const keys = Object.keys(schemas);\n keys.sort();\n for (let key of keys) {\n\n const properties: OpenApiProperty[] = [];\n const rawProperties = schemas[key].properties;\n if (rawProperties) {\n const propertyKeys = Object.keys(rawProperties);\n for (let propertyKey of propertyKeys) {\n const property = rawProperties[propertyKey];\n\n let additionalProperties: OpenApiProperty | undefined;\n if (property.additionalProperties) {\n additionalProperties = {\n type: property.additionalProperties.type\n }\n }\n\n let items: OpenApiSchema | undefined;\n if (property.items) {\n items = {\n type : property.items.type,\n format: property.items.format,\n ref : property.items['$ref'] ? property.items['$ref'] : undefined\n };\n }\n const propertyItem: OpenApiProperty = {\n type: property.type,\n ref : property['$ref'],\n name: propertyKey\n };\n\n if (additionalProperties) {\n propertyItem.additionalProperties = additionalProperties;\n }\n if (items) {\n propertyItem.items = items;\n }\n\n properties.push(propertyItem);\n }\n }\n\n result.push({\n id : `#/components/schemas/${key}`,\n name : key,\n type : schemas[key].type,\n properties: properties\n });\n }\n\n return result;\n }\n\n private unmarshallComponentsSecuritySchemes(schemas: any): OpenApiComponentSecurityScheme[] | undefined {\n const result: OpenApiComponentSecurityScheme[] = [];\n if (!schemas) {\n return result;\n }\n\n const keys = Object.keys(schemas);\n keys.sort();\n for (let key of keys) {\n const value = schemas[key];\n result.push({\n name : key,\n type : value.type,\n scheme: value.scheme\n });\n }\n\n return result;\n }\n\n private unmarshallExternalDocs(externalDocs: any): ExternalDocs | undefined {\n return !externalDocs ? undefined : {\n url : externalDocs.url,\n description: externalDocs.description,\n extension : this.unmarshallExtension(externalDocs)\n };\n }\n\n private unmarshallInfo(info: any): OpenApiInfo | undefined {\n return {\n title : info.title,\n description: info.description,\n version : info.version\n }\n }\n\n private unmarshallServers(servers: any): OpenApiServer[] | undefined {\n const result: OpenApiServer[] = [];\n if (!servers) {\n return result;\n }\n for (let server of servers) {\n result.push({\n url : server.url,\n description: server.description\n });\n }\n return result;\n }\n\n\n private unmarshallPaths(paths: any,\n schemaTypes: OpenApiComponent | undefined,\n objectTypeCache: ObjectTypeCache[]): OpenApiPathEndpoint[] {\n const result: OpenApiPathEndpoint[] = [];\n if (!paths) {\n return result;\n }\n\n const keys = Object.keys(paths);\n keys.sort();\n for (let key of keys) {\n const path = paths[key];\n const verbKeys = Object.keys(path);\n verbKeys.sort();\n\n for (let verbKey of verbKeys) {\n if (this.isVerb(verbKey)) {\n const openApiEndpoint = path[verbKey];\n const endpoint: OpenApiPathEndpoint = {\n uri : `${verbKey}_${key}`,\n url : key,\n verb : verbKey,\n tags : openApiEndpoint.tags,\n operationId: openApiEndpoint.operationId,\n summary : openApiEndpoint.summary,\n description: openApiEndpoint.description,\n parameters : this.unmarshallEndpointParameters(openApiEndpoint.parameters),\n requestBody: this.unmarshallEndpointRequestBody(openApiEndpoint.requestBody, schemaTypes, objectTypeCache),\n responses : this.unmarshallEndpointResponse(openApiEndpoint.responses, schemaTypes, objectTypeCache),\n };\n result.push(endpoint);\n }\n }\n }\n\n return result;\n }\n\n private isVerb(verb: string): boolean {\n return verb == undefined || verb == null ? false : VERBS.indexOf(verb) != -1\n }\n\n\n private unmarshallEndpointParameters(value: any): OpenApiPathEndpointParameter[] | undefined {\n if (!value) {\n return undefined;\n }\n\n const result: OpenApiPathEndpointParameter[] = [];\n for (let param of value) {\n let schema: OpenApiSchema | undefined = undefined;\n if (param.schema) {\n schema = {\n type: param.schema?.type,\n ref : param.schema['$ref']\n }\n }\n result.push({\n name : param.name,\n in : param.in,\n required : param.required,\n description : param.description,\n deprecated : param.deprecated,\n allowEmptyValue: param.allowEmptyValue,\n style : param.style,\n explode : param.explode,\n allowReserved : param.allowReserved,\n example : param.example,\n examples : this.unmarshallExamples(param.examples),\n schema : schema\n });\n }\n\n return result;\n }\n\n private unmarshallExamples(value: any): Example[] {\n const result: Example[] = [];\n if (!value) {\n return result;\n }\n\n const keys: string[] = Object.keys(value);\n keys.sort();\n for (let key of keys) {\n result.push(this.unmarshallExample(key, value[key]));\n }\n return result;\n }\n\n private unmarshallExample(name: string, value: any): Example {\n const result: Example = {\n name : name,\n summary : value.summary,\n description : value.description,\n value : value.value,\n externalValue: value.externalValue\n };\n\n let extension: any = {};\n\n const keys = Object.keys(value);\n keys.sort();\n for (let key of keys) {\n if (key.startsWith('x-')) {\n const field = key.substring(2);\n if (field) {\n extension[field] = value[key];\n }\n }\n }\n\n\n return result;\n }\n\n private unmarshallEndpointRequestBody(value: any,\n schemaTypes: OpenApiComponent | undefined,\n objectTypeCache: ObjectTypeCache[]): OpenApiPathEndpointRequestBody | undefined {\n if (!value) {\n return undefined;\n }\n\n let contentType: string | undefined;\n let schema: OpenApiSchema | undefined;\n\n if (value.content) {\n contentType = Object.keys(value.content)[0]\n\n let schemaData: any | undefined = this.extractSchema(value, contentType);\n\n const objectType = this.renderType(schemaData, schemaTypes, objectTypeCache);\n schema = {\n type : schemaData?.type,\n ref : objectType?.value,\n array: objectType?.array,\n name : objectType?.name\n }\n }\n\n return {\n contentType: contentType,\n schema : schema,\n required : value.required\n };\n }\n\n private extractSchema(value: any, contentType: string) {\n\n let content = value.content;\n if (!content) {\n const fields = Object.keys(value).sort();\n for (let field of fields) {\n const subContent = value[field].content;\n if (subContent) {\n content = subContent;\n break;\n }\n }\n }\n\n if (!content || !content[contentType]) {\n return undefined;\n }\n\n return content[contentType].schema;\n }\n\n private unmarshallEndpointResponse(value: any,\n schemaTypes: OpenApiComponent | undefined,\n objectTypeCache: ObjectTypeCache[]): OpenApiPathEndpointResponse[] | undefined {\n if (!value) {\n return undefined;\n }\n const result: OpenApiPathEndpointResponse[] = [];\n const keys = Object.keys(value);\n\n keys.sort();\n for (let key of keys) {\n const response = value[key];\n let contentType: string | undefined;\n let schema: OpenApiSchema | undefined;\n\n let examples: Example[] = [];\n if (response.content) {\n contentType = Object.keys(response.content)[0];\n const responseContent = response.content[contentType];\n const rawSchema: any = responseContent.schema;\n\n if (responseContent.examples) {\n examples = this.unmarshallEndpointResponseExample(responseContent.examples);\n }\n\n\n if (rawSchema) {\n let type: string | undefined = rawSchema.type;\n\n let ref: string | undefined = rawSchema['$ref']\n if (rawSchema['items']) {\n let items: any = rawSchema['items']\n ref = items ? items['$ref'] : undefined;\n }\n\n schema = objectTypeCache.find(v => v.name === ref);\n\n\n if (!schema) {\n let schemaData: any | undefined = this.extractSchema(value, contentType);\n\n const objectType = this.renderType(schemaData, schemaTypes, objectTypeCache);\n\n schema = {\n type : type,\n ref : this.extractObjectTypeValue(objectType?.value),\n array: objectType?.array,\n name : objectType?.name\n };\n if (ref) {\n objectTypeCache.push({\n name : ref,\n value: schema\n });\n }\n\n }\n\n\n if (examples.length == 0) {\n let renderedType = JSON.stringify(schema.array ? [schema.ref] : schema.ref, null, 2);\n if('{}'==renderedType){\n if(type=='string'){\n renderedType = '\"\"';\n }\n }\n\n examples.push({\n name : 'nominal',\n value: renderedType\n });\n }\n }\n }\n\n\n result.push({\n status : key,\n description: response.description,\n contentType: contentType,\n headers : this.unmarshallEndpointResponseHeader(response.headers),\n schema : schema,\n examples : examples.length > 0 ? examples : undefined\n });\n }\n\n return result;\n }\n\n private unmarshallEndpointResponseExample(value: any): Example[] {\n const result: Example[] = [];\n\n const keys: string[] = Object.keys(value);\n keys.sort();\n for (let key of keys) {\n const item = value[key];\n\n let valueContent = undefined;\n if (item.value) {\n if (typeof item.value == 'string') {\n valueContent = item.value;\n } else {\n valueContent = JSON.stringify(item.value, null, 2);\n }\n }\n\n result.push({\n name : key,\n summary : item.summary,\n description : item.externalDocs,\n value : valueContent,\n externalValue: item.externalValue,\n extensions : this.extractExtension(item)\n });\n }\n\n return result;\n }\n\n private extractObjectTypeValue(value: any) {\n if (Array.isArray(value) && value.length > 0) {\n return value[0];\n }\n return value;\n }\n\n private unmarshallEndpointResponseHeader(value: any): undefined | Header[] {\n if (!value) {\n return undefined;\n }\n const result: Header[] = [];\n\n const keys: string[] = Object.keys(value);\n keys.sort();\n\n for (let key of keys) {\n const item = value[key];\n result.push({\n name : key,\n description : item.description,\n externalDocs: item.externalDocs,\n style : item.style\n });\n }\n\n return result;\n }\n\n\n private extractExtension(value: any): Extension[] | undefined {\n if (!value) {\n return undefined;\n }\n const result: Extension[] = [];\n\n const keys: string[] = Object.keys(value);\n keys.sort();\n for (let key of keys) {\n if (key.startsWith('x-')) {\n result.push({\n name : key.substring(2),\n value: value[key]\n });\n }\n }\n\n return result.length == 0 ? undefined : result;\n }\n\n\n private unmarshallTags(value: any): Tags[] {\n const result: Tags[] = [];\n if (value == undefined || !Array.isArray(value)) {\n return result;\n }\n\n for (let tag of value) {\n if (tag.name) {\n const currentTag: Tags = {name: tag.name}\n if (tag.description) {\n currentTag.description = tag.description;\n }\n const externalDoc = this.unmarshallExternalDocs(tag.externalDocs);\n if (externalDoc) {\n currentTag.externalDocs = externalDoc;\n }\n\n result.push(currentTag);\n }\n\n }\n\n return result;\n }\n\n private unmarshallExtension(value: any): any | undefined {\n if (!value) {\n return undefined;\n }\n\n const result: any = {};\n const keys = Object.keys(value);\n keys.sort();\n\n for (let key of keys) {\n if (key.startsWith(\"x-\")) {\n result[key.substring(2)] = value[key];\n }\n }\n\n return result;\n }\n\n\n private renderType(schema: any,\n schemaTypes: OpenApiComponent | undefined,\n objectTypeCache: ObjectTypeCache[],\n level?: number): ObjectType | undefined {\n if (!schema || (level! > 5)) {\n return undefined;\n }\n\n const array = schema.type == 'array';\n let type: string = '';\n if (array) {\n if (schema.items) {\n type = schema.items['$ref'];\n if (!type && schema.items.type) {\n type = schema.items.type;\n }\n }\n } else {\n type = schema.ref;\n }\n\n let currentType: any = undefined;\n let object: any = {};\n\n if (type) {\n if (schemaTypes?.schemas) {\n for (let item of schemaTypes?.schemas) {\n if (type == item.id) {\n currentType = item;\n break;\n }\n }\n }\n\n if (currentType?.name) {\n const cachedValue = objectTypeCache.find(v => v.name === currentType.name);\n if (cachedValue) {\n return cachedValue;\n }\n }\n if (currentType && currentType.properties) {\n object = this.convertObjectPropertiesToObject(currentType.properties,\n currentType.example ? currentType.example : {},\n schemaTypes,\n objectTypeCache,\n level ? level + 1 : 0);\n }\n }\n else if (schema.properties) {\n object = this.convertObjectPropertiesToObject(Object\n .entries(schema.properties)\n .map(e => {\n const value = e[1] as any;\n return {\n name:e[0],\n format:value?.format,\n type:value?.type\n }\n }),\n {},\n schemaTypes,\n objectTypeCache,\n level ? level + 1 : 0);\n }\n\n\n const result: ObjectType = {\n array: array,\n name : currentType?.name,\n value: array ? [object] : object\n }\n if (currentType?.name) {\n objectTypeCache.push({\n name : currentType.name,\n value: result\n });\n }\n\n return result;\n }\n\n private convertObjectPropertiesToObject(properties: any,\n example: any,\n schemaTypes: OpenApiComponent | undefined,\n objectTypeCache: ObjectTypeCache[],\n level: number): any {\n if (!properties) {\n return undefined;\n }\n if (level > 20) {\n return {};\n }\n const object: any = {};\n for (let property of properties) {\n if (!property.name) {\n continue;\n }\n const type = property.type ? property.type : 'object';\n const sample = example[property.name];\n\n switch (type) {\n case 'string':\n if ('date' == property.format) {\n object[property.name] = sample ? sample : 'yyyyMMdd';\n } else if ('date-time' == property.format) {\n object[property.name] = sample ? sample : 'yyyyMMddTHH:mm:ss';\n } else {\n object[property.name] = sample ? sample : 'string';\n }\n\n break\n case 'number':\n if ('float' == property.format || 'double' == property.format) {\n object[property.name] = sample ? sample : 0.0;\n } else {\n object[property.name] = sample ? sample : 0;\n }\n break\n case 'integer':\n object[property.name] = sample ? sample : 0;\n break\n case 'boolean':\n object[property.name] = false;\n break;\n case 'array':\n object[property.name] = this.convertArray(property,\n property.example ? property.example : {}, schemaTypes,\n objectTypeCache,\n level + 1);\n break;\n default:\n const subType = this.renderType({ref: property.ref}, schemaTypes, objectTypeCache, level + 1);\n object[property.name] = subType?.value;\n break;\n }\n\n }\n return object;\n }\n\n private convertArray(property: any,\n example: any,\n schemaTypes: OpenApiComponent | undefined,\n objectTypeCache: ObjectTypeCache[],\n level: number): any[] {\n const result: any = [];\n const type = property.type ? property.type : 'object';\n const sample = example[property.name];\n switch (type) {\n case 'string':\n if ('date' == property.format) {\n result.push(sample ? sample : 'yyyyMMdd');\n } else if ('date-time' == property.format) {\n result.push(sample ? sample : 'yyyyMMddTHH:mm:ss');\n } else {\n result.push(sample ? sample : 'string');\n }\n break\n case 'number':\n if ('float' == property.format || 'double' == property.format) {\n result.push(sample ? sample : 0.0);\n } else {\n result.push(sample ? sample : 0);\n }\n break\n case 'integer':\n result.push(sample ? sample : 0);\n break\n case 'boolean':\n result.push(false);\n break;\n default:\n const subType = this.renderType({ref: property.ref}, schemaTypes, objectTypeCache, level + 1);\n result.push(subType ? subType.value : {});\n break;\n }\n return result;\n }\n\n\n}\n","import {Component, input} from '@angular/core';\nimport {OpenApiPathEndpointParameter} from '../../open-api.model';\nimport {InuCode} from 'inugami-ng/components/inu-code';\n\nconst SPACE : string = ' ';\n\n@Component({\n selector: 'inu-open-api-parameters',\n standalone: true,\n providers: [],\n imports: [InuCode],\n templateUrl: './inu-open-api-parameters.html',\n styleUrl: './inu-open-api-parameters.scss',\n})\nexport class InuOpenApiParameters{\n\n //==================================================================================================================\n // ATTRIBUTES\n //==================================================================================================================\n data = input<OpenApiPathEndpointParameter[] | undefined | null>(undefined);\n parameterExamples :any = {}\n\n //==================================================================================================================\n // ACTION\n //==================================================================================================================\n toggleExample(index:number){\n const value = this.parameterExamples[index];\n if(value == undefined){\n this.parameterExamples[index] = true;\n }else{\n this.parameterExamples[index] = !value;\n }\n }\n\n\n //==================================================================================================================\n // GETTERS\n //==================================================================================================================\n getRowClass(index:number, first:boolean, odd:boolean, styleclass?:string):string{\n const result :string[]= [`flex-table-body-row index-${index}`];\n if(first){\n result.push('first');\n }\n if(odd){\n result.push('odd');\n }\n\n if(styleclass){\n result.push(styleclass);\n }\n return result.join(SPACE);\n }\n getParameterClass(index:number, styleclass:string):string{\n const result: string[]= [styleclass];\n const toggle = this.parameterExamples[index];\n if(toggle){\n result.push('display')\n }\n\n return result.join(' ');\n\n }\n}\n","<div class=\"inu-open-api-parameters\">\n @if (data()) {\n <div class=\"inu-flex-table\">\n <div class=\"flex-table-header\">\n <div class=\"flex-table-header-th name\">Name</div>\n <div class=\"flex-table-header-th type\">Type</div>\n <div class=\"flex-table-header-th desc\">Description</div>\n <div class=\"flex-table-header-th examples\">Examples</div>\n </div>\n\n\n <div class=\"flex-table-body\">\n\n @for (parameter of data(); track parameter.name; let index = $index; let isFirst = $first; let isOdd = $odd) {\n <div [class]=\"getRowClass(index,isFirst, isOdd , (parameter.deprecated?'deprecated': ''))\">\n <div class=\"flex-table-body-cell\">\n <span>{{parameter.name}}</span>\n @if (parameter.required) {\n <span class=\"required\"><span class=\"label\"></span></span>\n } @else {\n <span></span>\n }\n </div>\n <div class=\"flex-table-body-cell\">{{parameter.schema?.type}}</div>\n <div class=\"flex-table-body-cell\">{{parameter.description}}</div>\n <div class=\"flex-table-body-cell\">\n @if(parameter.example){\n <div class=\"parameters-main-example\">\n <inu-code [source]=\"parameter.example\"></inu-code>\n </div>\n }\n\n @if(parameter.examples && parameter.examples.length>0){\n <div class=\"parameters-examples\">\n @for (example of parameter.examples; track example.name; let paramIndex = $index; let firstExample = $first; let oddExample = $odd) {\n <div [class]=\"getRowClass(paramIndex,firstExample, oddExample ,'parameter-example')\">\n <div [class]=\"getParameterClass(paramIndex,'parameter-example-header')\" (click)=\"toggleExample(paramIndex)\">\n {{example.name}}\n </div>\n <dl [class]=\"getParameterClass(paramIndex,'example-content')\">\n <dt>Summary</dt>\n <dd>{{example.summary}}</dd>\n\n <dt>External value</dt>\n <dd>{{example.externalValue}}</dd>\n\n <dt>Description</dt>\n <dd>{{example.description}}</dd>\n\n <dt>Value</dt>\n <dd><inu-code [source]=\"example.value\"></inu-code></dd>\n\n </dl>\n </div>\n }\n </div>\n }\n\n </div>\n </div>\n }\n\n </div>\n </div>\n }\n</div>\n","import {Component, effect, input, signal, WritableSignal} from '@angular/core';\nimport {Extension} from '../../open-api.model';\n\n@Component({\n selector: 'inu-open-api-extension',\n standalone: true,\n providers: [],\n imports: [],\n templateUrl: './inu-open-api-extension.html',\n styleUrl: './inu-open-api-extension.scss',\n})\nexport class InuOpenApiExtension {\n\n //==================================================================================================================\n // ATTRIBUTES\n //==================================================================================================================\n data = input<any | undefined | null>(undefined);\n\n keys: WritableSignal<string[]> = signal([]);\n _type: WritableSignal<string|null> = signal(null);\n\n //==================================================================================================================\n // INIT\n //==================================================================================================================\n constructor() {\n effect(() => {\n this.init()\n });\n }\n\n private init() {\n if (!this.data()) {\n return;\n }\n if(Array.isArray(this.data)){\n this._type.set('array');\n const keys = [];\n for(let i=0; i<this.data.length; i++){\n keys.push(`${i}`);\n }\n this.keys.set(keys);\n }\n else if(typeof this.data == 'object'){\n this._type.set('object');\n const keys = Object.keys(this.data);\n keys.sort();\n this.keys.set(keys);\n }else{\n this._type.set('primitive');\n }\n }\n //==================================================================================================================\n // GETTERS\n //==================================================================================================================\n getChild(key:string):Extension|undefined{\n const data = this.data();\n if(this._type()=='array'){\n const index:number= Number(key);\n if(Array.isArray(data) && data.length> index){\n return data[index];\n }else{\n return undefined;\n }\n\n }else{\n return data[key];\n }\n }\n}\n","<div class=\"inu-open-api-extension\">\n @if(data()){\n <div class=\"inu-extension\">\n @if(keys()){\n <dl class=\"inu-extension-content\">\n @for (key of keys(); track key; let index = $index; let isFirst = $first; let isOdd = $odd) {\n <dt [class.first]=\"isFirst\" [class.odd]=\"isOdd\">{{key}}</dt>\n <dd [class.first]=\"isFirst\" [class.odd]=\"isOdd\">\n <inu-open-api-extension [data]=\"getChild(key)\"></inu-open-api-extension>\n </dd>\n }\n </dl>\n }\n\n @if(_type()== 'primitive'){\n {{data()}}\n }\n </div>\n }\n</div>\n","import {Component, effect, input, signal, WritableSignal} from '@angular/core';\nimport {Example, OpenApiComponentSchema, OpenApiPathEndpointResponse} from '../../open-api.model';\nimport {InuIcon} from 'inugami-icons';\nimport {InuCode,InternalSourceCode} from 'inugami-ng/components/inu-code';\nimport {InuOpenApiExtension} from '../inu-open-api-extension/inu-open-api-extension';\n\n@Component({\n selector: 'inu-open-api-response',\n standalone: true,\n providers: [],\n imports: [\n InuIcon,\n InuCode,\n InuOpenApiExtension\n ],\n templateUrl: './inu-open-api-response.html',\n styleUrl: './inu-open-api-response.scss',\n})\nexport class InuOpenApiResponse {\n\n //==================================================================================================================\n // ATTRIBUTES\n //==================================================================================================================\n data = input<OpenApiPathEndpointResponse | undefined | null>(undefined);\n schemas = input<OpenApiComponentSchema[] | undefined | null>(null);\n\n status: WritableSignal<number | null> = signal(null);\n examplesSources: WritableSignal<InternalSourceCode[]> = signal([]);\n //==================================================================================================================\n // INIT\n //==================================================================================================================\n constructor() {\n effect(() => {\n this.init()\n });\n }\n\n private init() {\n if (!this.data()) {\n return;\n }\n const httpStatus = this.data()?.status!;\n try {\n this.status.set(Number(httpStatus));\n } catch (e){}\n\n this.initExampleSources();\n }\n private initExampleSources() {\n const result : InternalSourceCode[] = [];\n const examples =this.data()?.examples;\n if (examples) {\n for(let example of examples){\n result.push({\n content: example.value!,\n type: 'json',\n title : example.name\n })\n }\n }\n\n this.examplesSources.set(result);\n }\n //==================================================================================================================\n // ACTION\n //==================================================================================================================\n toggleExample(index:number){\n const examples = this.data()?.examples;\n if(!examples || examples.length<=index){\n return ;\n }\n const example =examples[index];\n const display = example.display==undefined ? false :example.display;\n example.display = !display;\n }\n //==================================================================================================================\n // GETTERS\n //==================================================================================================================\n computeExampleClass(example: Example, isFirst: boolean, isOdd: boolean): string {\n const result = ['response-example'];\n\n if (isFirst) {\n result.push('first');\n }\n if (isOdd) {\n result.push('odd');\n }\n const status = this.status();\n if (status) {\n if (status < 400) {\n result.push('status-success');\n }\n if (status < 500) {\n result.push('status-warning');\n }\n else{\n result.push('status-error');\n }\n }\n\n return result.join(' ');\n }\n getExampleDisplayStatus(index:number){\n const examples = this.data()?.examples;\n if(!examples || examples.length<=index){\n return false;\n }\n const example =examples[index];\n return example.display==undefined ? false :example.display;\n }\n\n getExamplesSource(index:number):InternalSourceCode|undefined{\n if(!this.examplesSources() || this.examplesSources().length<=index){\n return undefined;\n }\n return this.examplesSources()[index];\n }\n\n\n}\n","@if(data()){\n <div class=\"inu-open-api-response\">\n <div class=\"description\">{{data()?.description}}</div>\n <div class=\"content-type\">{{data()?.contentType}}</div>\n\n <div class=\"response-examples\">\n @if(data()?.examples){\n @for (example of data()?.examples; track example.name; let index = $index; let isFirst = $first; let isOdd = $odd) {\n <div class=\"response-example\" [class]=\"computeExampleClass(example, isFirst, isOdd)\">\n <div class=\"response-example-header\" (click)=\"toggleExample(index)\">\n <div class=\"response-example-header-labels\" >\n <span class=\"response-example-header-name\" >{{example.name}}</span>\n <span class=\"response-example-header-summary\">{{example.summary}}</span>\n </div>\n\n <span class=\"button open\" [class.displayStatus]=\"getExampleDisplayStatus(index)\">\n @if(example.description || example.externalValue || example.extensions || getExamplesSource(index)?.content){\n <inu-icon [icon]=\"getExampleDisplayStatus(index)?'chevron_up':'chevron_down'\" [size]=\"1\"></inu-icon>\n }\n </span>\n </div>\n @if(example.description || example.externalValue || example.extensions || getExamplesSource(index)?.content){\n <div class=\"response-example-content\" [class.display]=\"getExampleDisplayStatus(index)\">\n\n @if(example.description || example.externalValue || example.extensions){\n <dl class=\"example-content\">\n @if(example.description){\n <dt>Description</dt>\n <dd>{{example.description}}</dd>\n }\n @if(example.externalValue){\n <dt>External value</dt>\n <dd>{{example.externalValue}}</dd>\n }\n\n @if(example.extensions){\n @for (extension of example.extensions; track extension.name) {\n <dt>{{extension.name}}</dt>\n <dd><inu-open-api-extension [data]=\"extension\"></inu-open-api-extension></dd>\n }\n }\n </dl>\n }\n\n @if(getExamplesSource(index)?.content){\n @if(getExamplesSource(index)?.content && getExamplesSource(index)?.content !=''){\n <inu-code [source]=\"getExamplesSource(index)?.content\"\n [type]=\"getExamplesSource(index)?.type\"\n [title]=\"getExamplesSource(index)?.title\"></inu-code>\n }\n }\n\n </div>\n }\n\n\n </div>\n }\n }\n\n\n\n </div>\n </div>\n}\n","import {Component, effect, input, signal, WritableSignal} from '@angular/core';\nimport {\n OpenApiComponentSchema,\n OpenApiPathEndpoint,\n OpenApiPathEndpointParameter,\n OpenApiPathEndpointResponse\n} from '../../open-api.model';\nimport {InuOpenApiParameters} from '../inu-open-api-parameters/inu-open-api-parameters';\nimport {InuCode, InternalSourceCode} from 'inugami-ng/components/inu-code';\nimport {InuOpenApiResponse} from '../inu-open-api-response/inu-open-api-response';\nimport {InuIcon} from 'inugami-icons';\n\nconst SPACE = ' ';\n\n@Component({\n selector: 'inu-open-api-endpoint',\n standalone: true,\n providers: [],\n imports: [InuOpenApiParameters, InuOpenApiResponse, InuCode, InuIcon],\n templateUrl: './inu-open-api-endpoint.html',\n styleUrl: './inu-open-api-endpoint.scss',\n})\nexport class InuOpenApiEndpoint {\n\n //==================================================================================================================\n // ATTRIBUTES\n //==================================================================================================================\n data = input<OpenApiPathEndpoint | undefined | null>(undefined);\n schemas = input<OpenApiComponentSchema[] | undefined | null>(null);\n styleClass: WritableSignal<string> = signal('');\n display: WritableSignal<string> = signal('inu-open-api-endpoint-content-display hidden');\n\n parameters: WritableSignal<OpenApiPathEndpointParameter[] | null> = signal(null);\n headers: WritableSignal<OpenApiPathEndpointParameter[] | null> = signal(null);\n options: WritableSignal<OpenApiPathEndpointParameter[] | null> = signal(null);\n\n\n request: WritableSignal<InternalSourceCode | null> = signal(null);\n responseMain: WritableSignal<OpenApiPathEndpointResponse | null> = signal(null);\n response: WritableSignal<InternalSourceCode | null> = signal(null);\n\n //==================================================================================================================\n // INIT\n //==================================================================================================================\n constructor() {\n effect(() => {\n this.init()\n });\n }\n\n private init() {\n this.initStyle();\n this.initParameters();\n this.initRequest();\n this.initResponse();\n }\n\n private initStyle() {\n const styles = ['inu-open-api-endpoint'];\n if (this.data()) {\n styles.push(this.data()?.verb!);\n }\n\n this.styleClass.set(styles.join(SPACE));\n }\n\n private initParameters() {\n const dataParameters = this.data()?.parameters;\n if (!dataParameters) {\n return\n }\n const parameters: OpenApiPathEndpointParameter[] = [];\n const options: OpenApiPathEndpointParameter[] = [];\n const headers: OpenApiPathEndpointParameter[] = [];\n\n\n for (let param of dataParameters) {\n if ('path' == param.in) {\n parameters.push(param);\n } else if ('header' == param.in) {\n headers.push(param);\n } else {\n options.push(param);\n }\n }\n if (parameters.length > 0) {\n this.parameters.set(parameters);\n }\n if (headers.length > 0) {\n this.headers.set(headers);\n }\n if (options.length > 0) {\n this.options.set(options);\n }\n }\n\n initRequest() {\n const data = this.data();\n if (!data) {\n return;\n }\n const contentType = data.requestBody?.contentType ? data.requestBody.contentType : 'text'\n let content: string | undefined = undefined;\n let type: string = this.resolveType(contentType);\n let name: string | undefined = undefined;\n if (data.requestBody?.schema) {\n const schema = data.requestBody.schema;\n if (schema?.ref) {\n content = JSON.stringify(data.requestBody.schema?.ref, null, 4);\n }\n\n if (schema.name) {\n name = schema.array ? `${schema.name}[]` : schema.name;\n }\n\n }\n\n if (content) {\n this.request.set({\n content: content,\n title: name,\n type: type\n })\n }\n }\n\n initResponse() {\n const data = this.data();\n if (!data) {\n return;\n }\n const responses = data.responses ? data.responses : [];\n if (responses.length == 0) {\n return;\n }\n const successResponse = responses.filter((r) => this.convertToNumber(r.status) < 300);\n\n if (successResponse && successResponse.length > 0) {\n const mainResponse = successResponse[0];\n\n this.responseMain.set(mainResponse);\n const contentType = mainResponse.contentType ? mainResponse.contentType : 'text'\n let content: string | undefined = undefined;\n let type: string = this.resolveType(contentType);\n let name: string | undefined = undefined;\n if (mainResponse.schema) {\n const schema = mainResponse.schema;\n if (schema?.ref) {\n content = JSON.stringify(mainResponse.schema?.ref, null, 4);\n }\n\n if (schema.name) {\n name = schema.array ? `${schema.name}[]` : schema.name;\n }\n\n }\n\n if (content) {\n this.response.set({\n content: content,\n title: name,\n type: type\n })\n }\n }\n\n }\n\n //==================================================================================================================\n // INIT\n //==================================================================================================================\n toggleDisplay() {\n if ('inu-open-api-endpoint-content-display hidden' == this.display()) {\n this.display.set('inu-open-api-endpoint-content-display show');\n } else {\n this.display.set('inu-open-api-endpoint-content-display hidden');\n }\n }\n\n private resolveType(contentType: string): string {\n if (contentType == 'text' || contentType == 'text/plain') {\n return 'text';\n }\n const parts = contentType.split('application/');\n return parts.length == 2 ? parts[1].toLowerCase() : 'text';\n\n }\n\n private convertToNumber(value?: string): number {\n if (!value) {\n return 0;\n }\n try {\n return Number(value);\n } catch (e) {\n return 0;\n }\n }\n\n getRowClass(index: number, first: boolean, odd: boolean, styleclass?: string): string {\n const result: string[] = [`flex-table-body-row index-${index}`];\n if (first) {\n result.push('first');\n }\n if (odd) {\n result.push('odd');\n }\n\n if (styleclass) {\n result.push(styleclass);\n }\n return result.join(SPACE);\n }\n\n computeStatusStyleClass(status?:string): string {\n const result = ['inu-endpoint-response-status'];\n\n const httpStatus = this.convertToNumber(status);\n if(httpStatus<400){\n result.push('success');\n }\n else if(httpStatus<500){\n result.push('warning');\n }\n else{\n result.push('error');\n }\n\n return result.join(SPACE)\n }\n}\n","@if (data()) {\n <article [class]=\"styleClass()\">\n <header>\n <h2 (click)=\"toggleDisplay()\">\n <span class=\"inu-endpoint-verb\">{{ data()?.verb }}</span>\n <span class=\"inu-endpoint-url\">{{ data()?.url }}</span>\n </h2>\n <span class=\"button open\" (click)=\"toggleDisplay()\">\n <inu-icon [icon]=\"display() == 'inu-open-api-endpoint-content-display show'?'chevron_up':'chevron_down'\" [size]=\"1\"></inu-icon>\n </span>\n </header>\n\n <div class=\"inu-open-api-endpoint-content\">\n <div [class]=\"display()\">\n <!--==============================================================================================================\n = INFORMATION\n ===============================================================================================================-->\n @if (parameters()) {\n <fieldset class=\"information\">\n <label>Information</label>\n <div class=\"content\">\n <inu-open-api-parameters [data]=\"parameters()\"></inu-open-api-parameters>\n </div>\n </fieldset>\n }\n\n <!--==============================================================================================================\n = HEADERS\n ===============================================================================================================-->\n @if (headers()) {\n <fieldset class=\"headers\">\n <label>Headers</label>\n <div class=\"content\">\n <inu-open-api-parameters [data]=\"headers()\"></inu-open-api-parameters>\n </div>\n </fieldset>\n }\n\n <!--==============================================================================================================\n = OPTION\n ===============================================================================================================-->\n @if (options()) {\n <fieldset class=\"options\">\n <label>Options</label>\n <div class=\"content\">\n <inu-open-api-parameters [data]=\"options()\"></inu-open-api-parameters>\n </div>\n </fieldset>\n }\n\n <!--==============================================================================================================\n = REQUEST\n ===============================================================================================================-->\n @if (data()?.requestBody) {\n <fieldset class=\"request\">\n <label>Request</label>\n <div class=\"content\">\n <div class=\"description\">{{ data()?.requestBody?.description! }}</div>\n <div class=\"content-type\">{{ data()?.requestBody?.contentType! }}</div>\n\n @if (request()) {\n <div class=\"schema\">\n <inu-code [source]=\"request()?.content\" [type]=\"request()?.type\"\n [title]=\"request()?.title\"></inu-code>\n </div>\n }\n </div>\n </fieldset>\n }\n <!--==============================================================================================================\n = RESPONSE\n ===============================================================================================================-->\n\n @if (data()?.responses) {\n <fieldset class=\"response\">\n <label>Response</label>\n\n <div class=\"content\">\n\n <div class=\"response-table\">\n <div class=\"response-table-body\">\n @for (response of data()?.responses; track response.status; let index = $index; let isFirst = $first; let isOdd = $odd) {\n <div [class]=\"getRowClass(index,isFirst, isOdd)\">\n <div [class]=\"computeStatusStyleClass(response.status)\">\n {{ response.status }}\n </div>\n <div class=\"description-content\">\n <inu-open-api-response [data]=\"response\" [schemas]=\"schemas()\"></inu-open-api-response>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </fieldset>\n }\n </div>\n </div>\n </article>\n}\n\n","import {Component, effect, inject, input, signal, WritableSignal} from '@angular/core';\nimport {InuCacheServices} from \"inugami-ng/services\";\nimport {map, Observable, shareReplay, tap} from \"rxjs\";\nimport {HttpClient} from \"@angular/common/http\";\nimport {OpenApi} from './open-api.model';\nimport {InuOpenApiServices} from './inu-open-api.service';\nimport {InuOpenApiEndpoint} from './components/inu-open-api-endpoint/inu-open-api-endpoint';\nimport {InuIcon} from 'inugami-icons'\n\n\nconst CACHE_PREFIX = 'inu-open-api_';\n\n@Component({\n selector : 'inu-open-api',\n standalone : true,\n imports : [\n InuOpenApiEndpoint,\n InuIcon\n ],\n templateUrl: './inu-open-api.html',\n styleUrl : './inu-open-api.scss',\n })\nexport class InuOpenApi {\n\n //====================================================================================================================\n // ATTRIBUTES\n //====================================================================================================================\n url = input<string | undefined | null>(undefined);\n data = input<OpenApi | undefined | null>(undefined);\n private readonly http = inject(HttpClient);\n private readonly cache = inject(InuCacheServices);\n private readonly inuOpenApiService = inject(InuOpenApiServices);\n\n _value: WritableSignal<OpenApi | null> = signal<OpenApi | null>(null);\n\n //====================================================================================================================\n // INITIALIZE\n //====================================================================================================================\n constructor() {\n effect(() => this.init());\n }\n\n init(): void {\n const data = this.data();\n const url = this.url();\n if (data) {\n this.initOpenApi(data)\n } else if (url) {\n this.loadFormUrl(url);\n }\n }\n\n loadFormUrl(url: string) {\n const data: OpenApi | undefined = this.loadFormCache(url);\n if (data) {\n this.initOpenApi(this.inuOpenApiService.convertToOpenApi(data));\n return;\n }\n const cacheKey = CACHE_PREFIX + url;\n const pending: Observable<OpenApi> | undefined = this.cache.getPending(cacheKey);\n if (pending) {\n pending.subscribe(res => this.initOpenApi(this.inuOpenApiService.convertToOpenApi(res)));\n return;\n }\n\n const request = this.http.get<any>(url)\n .pipe(tap(data => {\n this.cache.set(cacheKey, data);\n }),\n shareReplay(1)\n );\n this.cache.setPending(cacheKey, request);\n request.subscribe({\n next: value => this.initOpenApi(this.inuOpenApiService.convertToOpenApi(value))\n });\n\n }\n\n\n //====================================================================================================================\n // PARSE\n //====================================================================================================================\n initOpenApi(openApi: OpenApi) {\n openApi.paths?.sort((value, ref) => {\n if (value.url === ref.url) {\n return `${value.verb}`.toLowerCase().localeCompare(`${ref.verb}`.toUpperCase());\n }\n return `${value.url}`.toLowerCase().localeCompare(`${ref.url}`.toUpperCase());\n });\n this._value.set(openApi);\n }\n\n\n //====================================================================================================================\n // ACTIONS\n //====================================================================================================================\n protected download() {\n const urlOpenApi = this.url();\n if (!urlOpenApi) {\n return;\n }\n\n this.http.get<any>(urlOpenApi,{ responseType: 'json' })\n .subscribe({\n next: data => this.saveFile(data)\n });\n }\n\n private saveFile(data: any) {\n const jsonString = JSON.stringify(data, null, 2);\n const blob = new Blob([jsonString], { type: 'application/json' });\n const url = window.URL.createObjectURL(blob);\n\n const link = document.createElement('a');\n link.href = url;\n\n const fileName = data?.info?.title\n ? `${data.info.title.replace(/\\s+/g, '_')}_openapi.json`\n : 'openapi_definition.json';\n\n link.download = fileName;\n link.click();\n\n window.URL.revokeObjectURL(url);\n link.remove();\n }\n //====================================================================================================================\n // TOOLS\n //====================================================================================================================\n loadFormCache(url: string): OpenApi | undefined {\n const cacheKey = CACHE_PREFIX + url;\n const result: OpenApi | undefined = this.cache.get(cacheKey);\n return result;\n }\n\n setToCache(url: string, value: any): void {\n const cacheKey = CACHE_PREFIX + url;\n if (value) {\n this.cache.set(cacheKey, value);\n }\n }\n\n\n}\n","<div class=\"inu-open-api\">\n @if(_value()){\n\n <section>\n @if(_value()?.info){\n <header class=\"inu-open-api-main-header\">\n <div class=\"inu-open-api-main-header-detail\">\n <h2>{{_value()?.info?.title!}}</h2>\n <h3>{{_value()?.info?.version!}}</h3>\n <p>\n {{_value()?.info?.description!}}\n </p>\n </div>\n\n <ul class=\"inu-open-api-main-actions\">\n @if(url()){\n <li>\n <inu-icon [size]=\"1.5\" icon=\"download\" (click)=\"download()\"></inu-icon>\n </li>\n }\n </ul>\n </header>\n }\n\n <!--<inu-open-api-filter></inu-open-api-filter>-->\n <div class=\"endpoints\">\n @if(_value()?.paths){\n @for (endpoint of _value()?.paths;track endpoint.uri;) {\n <inu-open-api-endpoint [data]=\"endpoint\" [schemas]=\"_value()?.components?.schemas\"></inu-open-api-endpoint>\n }\n }\n </div>\n </section>\n }\n</div>\n","import {Component} from '@angular/core';\n\n@Component({\n selector: 'inu-open-api-request',\n standalone: true,\n providers: [],\n imports: [],\n templateUrl: './inu-open-api-request.html',\n styleUrl: './inu-open-api-request.scss',\n})\nexport class InuOpenApiRequest {\n\n //==================================================================================================================\n // ATTRIBUTES\n //==================================================================================================================\n\n}\n","","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["SPACE"],"mappings":"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"}
|
|
@@ -481,7 +481,6 @@ class InuSvgIsometric {
|
|
|
481
481
|
// DOWNALOD
|
|
482
482
|
//--------------------------------------------------------------------------------------------------------------------
|
|
483
483
|
download() {
|
|
484
|
-
console.log('download');
|
|
485
484
|
const container = this.container()?.nativeElement;
|
|
486
485
|
if (!container) {
|
|
487
486
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inugami-ng-components-inu-svg-isometric.mjs","sources":["../../../projects/inugami-ng/components/inu-svg-isometric/inu-svg-isometric-hud.ts","../../../projects/inugami-ng/components/inu-svg-isometric/inu-svg-isometric.ts","../../../projects/inugami-ng/components/inu-svg-isometric/inugami-ng-components-inu-svg-isometric.ts"],"sourcesContent":["import {SVG_ASSETS, SVG_BUILDER, SvgAssetUtils} from 'inugami-ng/services';\nimport {SvgAssetDTO, SvgAssetDTOOptions, SvgAssetElement, SvgButton} from 'inugami-ng/models';\n\nexport interface InuSvgIsometricHudOption {\n parent: HTMLElement;\n height: number;\n width: number;\n onZoomIn: (event: MouseEvent) => void;\n onZoomOut: (event: MouseEvent) => void;\n onDownload: () => void;\n}\n\nconst POINTER = 'cursor-pointer';\nconst ASSETS_TOOLS = 'tools';\n\nexport class InuSvgIsometricHud {\n\n //====================================================================================================================\n // ATTRIBUTES\n //====================================================================================================================\n parent!: HTMLElement;\n height!: number;\n width!: number;\n scale: number = 0.7;\n toolbarMargin = 1.25;\n option!: InuSvgIsometricHudOption;\n //\n hud: SVGElement | null = null;\n hudToolbar: SVGElement | null = null;\n hudToolbarAssets: SvgAssetElement[] = [];\n hudInspector: SVGElement | null = null;\n hudSettings: SVGElement | null = null;\n hudNavigation: SVGElement | null = null;\n\n\n //====================================================================================================================\n // INIT\n //====================================================================================================================\n constructor(option: InuSvgIsometricHudOption) {\n this.parent = option.parent;\n this.height = option.height;\n this.width = option.width;\n this.option = option;\n this.render();\n }\n\n //====================================================================================================================\n // RENDERING\n //====================================================================================================================\n private render() {\n this.hud = SVG_BUILDER.createGroup(this.parent, {styleClass: `hud`});\n this.hudToolbar = this.renderHudToolbar(this.hud);\n this.hudInspector = this.renderHudInspector(this.hud);\n this.hudSettings = this.renderHudSettings(this.hud);\n this.hudNavigation = this.renderHudNavigation(this.hud);\n }\n\n private renderHudToolbar(parent: SVGElement | null) {\n const result = SVG_BUILDER.createGroup(this.hud, {styleClass: `toolbar`});\n\n const buttons: SvgButton[] = [\n {\n name: 'add-asset',\n icon: 'category',\n onover: (event, node) => this.onOverAsset(node),\n onmouseleave: (event, node) => this.onLeaveAsset(node)\n },\n {\n name: 'download',\n icon: 'download',\n onover: (event, node) => this.onOverAsset(node),\n onmouseleave: (event, node) => this.onLeaveAsset(node),\n onclick: (event) => this.option.onDownload()\n },\n {\n name: 'zoom-div',\n icon: 'div'\n },\n {\n name: 'zoom-plus',\n icon: 'zoom',\n onover: (event, node) => this.onOverAsset(node),\n onmouseleave: (event, node) => this.onLeaveAsset(node),\n onclick: (event) => this.option.onZoomIn(event)\n },\n {\n name: 'zoom-min',\n icon: 'zoom',\n type: 'min',\n onover: (event, node) => this.onOverAsset(node),\n onmouseleave: (event, node) => this.onLeaveAsset(node),\n onclick: (event) => this.option.onZoomOut(event)\n },\n ];\n\n for (let button of buttons) {\n const buttonAsset = this.createAsset(<SvgAssetDTOOptions>{\n parent: result,\n name: button.name,\n asset: {\n assetSet: ASSETS_TOOLS,\n assetName: button.icon,\n type: button.type ? button.type : 'default',\n state: button.state ? button.state : 'default'\n },\n styleClass: POINTER\n });\n if (!buttonAsset) {\n continue;\n }\n\n if (button.onover) buttonAsset.onover = button.onover;\n if (button.onclick) buttonAsset.onclick = button.onclick;\n if (button.onmousedown) buttonAsset.onmousedown = button.onmousedown;\n if (button.onmousemove) buttonAsset.onmousemove = button.onmousemove;\n if (button.onmouseleave) buttonAsset.onmouseleave = button.onmouseleave;\n if (button.ondblclick) buttonAsset.ondblclick = button.ondblclick;\n if (button.ondrag) buttonAsset.ondrag = button.ondrag;\n if (button.ondrop) buttonAsset.ondrop = button.ondrop;\n if (button.ondragend) buttonAsset.ondragend = button.ondragend;\n if (button.ondragstart) buttonAsset.ondragstart = button.ondragstart;\n if (button.ondragleave) buttonAsset.ondragleave = button.ondragleave;\n if (button.ondragover) buttonAsset.ondragover = button.ondragover;\n if (button.ondragenter) buttonAsset.ondragenter = button.ondragenter;\n this.hudToolbarAssets.push(buttonAsset);\n }\n\n\n return result;\n }\n\n private renderHudInspector(parent: SVGElement | null) {\n const result = SVG_BUILDER.createGroup(this.hud, {styleClass: `layers-inspector`});\n\n return result;\n }\n\n private renderHudSettings(parent: SVGElement | null) {\n const result = SVG_BUILDER.createGroup(this.hud, {styleClass: `settings`});\n\n return result;\n }\n\n private renderHudNavigation(parent: SVGElement | null) {\n const result = SVG_BUILDER.createGroup(this.hud, {styleClass: `navigation`});\n\n return result;\n }\n\n //====================================================================================================================\n // ACTIONS\n //====================================================================================================================\n updatePosition(height: number, width: number) {\n this.updatePositionHudToolbar(height, width);\n }\n\n private updatePositionHudToolbar(height: number, width: number) {\n if (this.hudToolbarAssets.length == 0) {\n return;\n }\n\n const size = this.hudToolbarAssets[0].getComponentSize();\n for (let i = 1; i < this.hudToolbarAssets.length; i++) {\n this.hudToolbarAssets[i].move({x: (i * size.width) * this.toolbarMargin, y: 0});\n }\n }\n\n //====================================================================================================================\n // EVENTS\n //====================================================================================================================\n private onOverAsset(node: SvgAssetElement) {\n node.addStyleClass('over');\n }\n\n private onLeaveAsset(node: SvgAssetElement) {\n node.removeStyleClass('over');\n }\n\n //====================================================================================================================\n // TOOLS\n //====================================================================================================================\n private createAsset(option: SvgAssetDTOOptions): SvgAssetElement | undefined {\n const assetIcon = SVG_ASSETS.getAsset(option.asset.assetSet!, option.asset.assetName!);\n if (!assetIcon || !parent) {\n return undefined;\n }\n\n const asset = option.asset;\n asset.x = 0;\n asset.y = 0;\n asset.size = this.scale;\n asset.name = option.name!;\n\n return SvgAssetUtils.createAsset({\n parent: option.parent!,\n asset: asset,\n scale: this.scale,\n isometric: false,\n enableHitBox: true\n });\n }\n\n}\n","import {\n AfterViewInit,\n Component,\n computed,\n effect,\n ElementRef,\n HostListener,\n input,\n model,\n ModelSignal,\n signal,\n viewChild\n} from '@angular/core';\nimport {InuTemplateRegistryService} from 'inugami-ng/directives';\nimport {SVG, SVG_BUILDER, SVG_MATH, SVG_TRANSFORM, SvgAssetUtils} from 'inugami-ng/services';\nimport {Point, SvgAssetDTO, SvgAssetElement, SvgLayerDTO, SvgLayerElement} from 'inugami-ng/models';\nimport {FormValueControl} from '@angular/forms/signals';\nimport {InuSvgIsometricHud} from './inu-svg-isometric-hud';\nimport {InuPointPipe} from 'inugami-ng/pipes';\n\n\n@Component({\n selector: 'inu-svg-isometric',\n standalone: true,\n providers: [InuTemplateRegistryService],\n imports: [\n InuPointPipe\n ],\n template: `\n <div class=\"inu-svg-isometric-debug\">\n <div class=\"inu-svg-isometric-debug-content\">\n <dl>\n <dt>viewport size</dt>\n <dd>{{ viewportSize()| inuPipePoint }}</dd>\n <dt>center</dt>\n <dd>{{ center()| inuPipePoint }}</dd>\n\n </dl>\n <dl>\n <dt>zoom</dt>\n <dd>{{ zoom() }}</dd>\n <dt>trackMouseMove</dt>\n <dd>{{ trackMouseMove() }}</dd>\n <dt>mousePosition</dt>\n <dd>{{ mousePosition()| inuPipePoint }}</dd>\n <dt>previousMouseMove</dt>\n <dd>{{ previousMouseMove()| inuPipePoint }}</dd>\n </dl>\n </div>\n\n </div>\n\n <div [class]=\"_styleClass()\" #component>\n <svg #container xmlns=\"http://www.w3.org/2000/svg\"></svg>\n </div>\n `,\n styleUrl: './inu-svg-isometric.scss',\n})\nexport class InuSvgIsometric implements FormValueControl<SvgLayerDTO[]>, AfterViewInit {\n\n //====================================================================================================================\n // ATTRIBUTES\n //====================================================================================================================\n isometric = input<boolean>(true);\n disabled = input<boolean>(false);\n styleclass = input<string>('');\n styleclassheight = input<string>('');\n //\n private component = viewChild<ElementRef<HTMLElement>>('component');\n private container = viewChild<ElementRef<HTMLElement>>('container');\n _styleClass = computed<string>(() => {\n return [\n 'inu-svg',\n 'inu-svg-isometric',\n this.disabled() ? 'disabled' : '',\n this.styleclass() ? this.styleclass() : ''\n ].join(' ');\n });\n //---\n height = signal<number>(400);\n width = signal<number>(600);\n viewportSize = computed<Point>(() => <Point>{x: this.height(), y: this.width()});\n center = signal<Point>({x: 0, y: 0});\n zoom = signal<number>(50);\n assetSelected = signal<SvgAssetElement | undefined>(undefined);\n trackMouseMove = signal<boolean>(false);\n mousePosition = signal<Point>({x: 0, y: 0});\n previousMouseMove = signal<Point>({x: 0, y: 0});\n value: ModelSignal<SvgLayerDTO[]> = model(<SvgLayerDTO[]>[]);\n //---\n defaultSize: number = 50;\n position: Point = {x: 0, y: 0};\n\n //--- SVG components\n scale: number = 1;\n ratio: number = 1;\n\n parent: HTMLElement | null = null;\n hiddenAssetLayer: SVGElement | null = null;\n locator: SVGElement | null = null;\n defs: SVGElement | null = null;\n canvas: SVGElement | null = null;\n graph: SVGElement | null = null;\n gridPattern: SVGElement | null = null;\n patternGroup: SVGElement | null = null;\n gridPatternRect: SVGElement | null = null;\n layers: SVGElement | null = null;\n layersComponents: SvgLayerElement[] = [];\n hud: InuSvgIsometricHud | undefined = undefined;\n\n\n //====================================================================================================================\n // INIT\n //====================================================================================================================\n constructor() {\n effect(() => {\n this.updateValues();\n });\n }\n\n ngAfterViewInit(): void {\n const component = this.component();\n const container = this.container();\n if (component && container) {\n this.resolveParentSize(component, container);\n this.initializeLayout(container);\n this.updateAfterZoom();\n this.resize();\n }\n }\n\n\n //====================================================================================================================\n // RENDERING\n //====================================================================================================================\n private resolveParentSize(component: ElementRef<HTMLElement>, container: ElementRef<HTMLElement>) {\n if (component?.nativeElement && component?.nativeElement.parentNode && component?.nativeElement.parentNode.parentNode) {\n this.parent = component?.nativeElement.parentNode.parentNode as HTMLElement;\n }\n\n if (this.parent) {\n let parentSize = SVG_MATH.size(this.parent);\n this.height.set(parentSize.height);\n this.width.set(parentSize.width);\n }\n\n this.center.set(<Point>{y: this.width() / 2, x: this.height() / 2});\n container?.nativeElement\n .setAttribute('style', `display: block; height:${this.height()}px;width:${this.width()}px`);\n\n }\n\n private initializeLayout(container: ElementRef<HTMLElement>) {\n\n this.defs = SVG_BUILDER.createDefs(container?.nativeElement);\n const gridGrp = SVG_BUILDER.createGroup(container?.nativeElement);\n this.hiddenAssetLayer = SVG_BUILDER.createGroup(container?.nativeElement, {styleClass: 'hidden-layer'});\n this.locator = SVG_BUILDER.createGroup(container?.nativeElement, {styleClass: 'locator'});\n this.canvas = SVG_BUILDER.createGroup(this.locator, {styleClass: 'canvas'});\n container.nativeElement.onmousedown = (event: MouseEvent) => this.trackMouse(true, event);\n container.nativeElement.onmouseup = (event: MouseEvent) => this.trackMouse(false, event);\n container.nativeElement.onmousemove = (event: MouseEvent) => this.moveViewport(event);\n\n if(this.hiddenAssetLayer){\n this.hiddenAssetLayer.setAttribute('inkscape:label', 'hidden');\n this.hiddenAssetLayer.setAttribute('inkscape:groupmode', 'layer');\n this.hiddenAssetLayer.setAttribute('style', 'display: hidden;');\n }\n\n if (this.defs) {\n this.createGridDefs(this.defs);\n }\n const filter = SVG_BUILDER.createFilter(this.defs, 'shadow', {style: 'color-interpolation-filters: sRGB;'});\n const gaussian = SVG_BUILDER.createNode('feGaussianBlur', filter);\n if (gaussian) {\n gaussian.setAttribute('stdDeviation', '1');\n }\n\n if (gridGrp) {\n this.renderGrid(gridGrp);\n }\n if (this.canvas) {\n this.graph = SVG_BUILDER.createGroup(this.canvas, {styleClass: 'graph'});\n }\n if (this.graph) {\n this.renderLayers(this.graph);\n }\n if (container?.nativeElement) {\n\n this.hud = new InuSvgIsometricHud({\n parent: container?.nativeElement,\n height: this.height(),\n width: this.width(),\n //\n onZoomIn: (e) => this.onZoomIn(e),\n onZoomOut: (e) => this.onZoomOut(e),\n onDownload: () => this.download()\n });\n }\n\n this.updateValues();\n }\n\n private renderLayers(graph: SVGElement) {\n this.layers = SVG_BUILDER.createGroup(this.graph, {styleClass: 'layers'});\n }\n\n private createLayer(name: string): SvgLayerElement | undefined {\n if (this.layers) {\n const layer = SVG_BUILDER.createGroup(this.layers, {styleClass: `layer ${name}`});\n if (layer) {\n const result = <SvgLayerElement>{\n name: name,\n node: layer,\n assets: []\n };\n this.layersComponents.push(result);\n return result;\n }\n }\n return undefined;\n }\n\n //--------------------------------------------------------------------------------------------------------------------\n // GRID\n //--------------------------------------------------------------------------------------------------------------------\n private createGridDefs(defs: SVGElement) {\n this.gridPattern = SVG_BUILDER.createDefsPattern(defs,\n 'gridBackground',\n {\n x: 0,\n y: 0,\n height: SVG_MATH.zoom(1, this.zoom()),\n width: SVG_MATH.zoom(1, this.zoom()),\n patternUnits: \"userSpaceOnUse\"\n });\n\n this.patternGroup = SVG_BUILDER.createGroup(this.gridPattern, {styleClass: 'inu-svg-isometric-grid-background'});\n if (this.patternGroup) {\n const isometric = this.isometric();\n if (isometric) {\n\n SVG_BUILDER.createCurve(this.patternGroup, 'M 0,14.4337 L 25,0 L 50,14.4337 L 25,28.8675 Z');\n } else {\n this.gridPatternRect = SVG_BUILDER.createRect(this.patternGroup, {\n height: SVG_MATH.zoom(1, this.zoom()),\n width: SVG_MATH.zoom(1, this.zoom())\n });\n }\n\n }\n\n }\n\n private renderGrid(graph: SVGElement) {\n const gridGroup = SVG_BUILDER.createGroup(graph, {styleClass: 'inu-svg-isometric-grid'});\n if (gridGroup) {\n this.renderBackground(gridGroup);\n }\n }\n\n private renderBackground(graph: SVGElement): SVGElement | null {\n const result = SVG_BUILDER.createRect(graph, {\n height: this.height(),\n width: this.width(),\n styleClass: 'inu-svg-isometric-border'\n });\n if (result) {\n result.setAttribute('fill', 'url(#gridBackground)');\n }\n return result;\n }\n\n\n //====================================================================================================================\n // EVENTS\n //====================================================================================================================\n //--------------------------------------------------------------------------------------------------------------------\n // ZOOM\n //--------------------------------------------------------------------------------------------------------------------\n @HostListener('window:resize')\n onResize() {\n const component = this.component();\n const container = this.container();\n if (component && container) {\n this.resolveParentSize(component, container);\n this.resize();\n }\n }\n\n @HostListener('wheel', ['$event'])\n onMouseWheel(event: WheelEvent) {\n event.preventDefault();\n let step = 1;\n if (event.ctrlKey) {\n step = 10;\n }\n if (event.shiftKey) {\n step = 0.1;\n }\n if (event.deltaY > 0) {\n this.zoom.set(this.zoom() - step);\n } else {\n this.zoom.set(this.zoom() - step);\n }\n if (this.zoom() <= 0) {\n this.zoom.set(0.001);\n }\n\n this.updateAfterZoom();\n }\n\n @HostListener('mousedown', ['$event'])\n onMouseDown(event: MouseEvent) {\n\n if (event.button === 1) {\n event.preventDefault();\n let startZoom = this.zoom();\n let endZoom = this.defaultSize;\n let delta = endZoom - startZoom;\n let currentX = 0;\n let currentY = 0;\n let x = 0;\n let y = 0;\n\n if (this.parent && this.locator) {\n const currentTransfoAttr = this.locator.getAttribute('transform');\n const currentTransfo = SVG_TRANSFORM.extractTransformInformation(this.locator);\n SVG_TRANSFORM.center(this.locator, this.parent, true, true);\n const centerTransfo = SVG_TRANSFORM.extractTransformInformation(this.locator);\n this.locator.setAttribute('transform', currentTransfoAttr!);\n currentX = currentTransfo.x!;\n currentY = currentTransfo.y!;\n x = centerTransfo.x! - currentX;\n y = centerTransfo.y! - currentY;\n\n startZoom = currentTransfo.scaleX!;\n endZoom = centerTransfo.scaleX!;\n delta = endZoom - startZoom;\n }\n SVG.ANIMATION.animate((progress: number) => {\n const newZoom = startZoom + (delta * progress);\n const newX = currentX + (x * progress);\n const newY = currentY + (y * progress);\n if (this.locator) {\n SVG_TRANSFORM.translateY(this.locator, newY);\n SVG_TRANSFORM.translateX(this.locator, newX);\n SVG_TRANSFORM.scale(this.locator, newZoom, newZoom);\n }\n this.updateGridSize(this.defaultSize * (newZoom));\n }, {\n duration: 2000,\n timer: SVG.ANIMATION.TYPES.easeOutCubic,\n onDone: () => {\n this.zoom.set(this.defaultSize);\n if (this.locator) {\n if (this.parent) {\n SVG_TRANSFORM.center(this.locator, this.parent, true, true);\n const doneTransfo = SVG_TRANSFORM.extractTransformInformation(this.locator);\n this.position.x = doneTransfo.x!;\n this.position.y = doneTransfo.y!;\n }\n this.updateGridSize(this.zoom());\n }\n }\n });\n }\n }\n\n\n private updateGridSize(zoom: number) {\n const width = SVG_MATH.zoom(1, zoom);\n const height = this.isometric() ? width / Math.sqrt(3) : width;\n\n if (this.patternGroup) {\n const currentZoom = width / this.defaultSize;\n SVG_TRANSFORM.scale(this.patternGroup, currentZoom, currentZoom);\n\n if (this.gridPattern) {\n this.gridPattern.setAttribute('height', `${height}`);\n this.gridPattern.setAttribute('width', `${width}`);\n }\n }\n }\n\n private onZoomIn(event: MouseEvent) {\n const zoom = this.zoom();\n this.zoom.set(zoom + 1);\n this.updateAfterZoom();\n }\n\n private onZoomOut(event: MouseEvent) {\n const zoom = this.zoom() - 1;\n this.zoom.set(zoom <= 0 ? 0.001 : zoom);\n this.updateAfterZoom();\n }\n\n //--------------------------------------------------------------------------------------------------------------------\n // DOWNALOD\n //--------------------------------------------------------------------------------------------------------------------\n private download() {\n console.log('download')\n const container = this.container()?.nativeElement;\n if (!container) {\n return;\n }\n\n const clone = container.cloneNode(true) as Element;\n\n const copyStyles = (source: any, target: any) => {\n const computed = window.getComputedStyle(source);\n const svgProps = [\n \"fill\", \"stroke\", \"stroke-width\", \"opacity\", \"display\",\n \"font-family\", \"font-size\", \"font-weight\", \"text-anchor\",\n \"transform\", \"filter\", \"stop-color\", \"stop-opacity\"\n ];\n\n svgProps.forEach(prop => {\n target.style[prop] = computed.getPropertyValue(prop);\n });\n\n for (let i = 0; i < source.children.length; i++) {\n const currentStyleClass = source.children[i].getAttribute('class');\n if (currentStyleClass == 'inu-svg-isometric-grid' || currentStyleClass == 'hud') {\n target.children[i].replaceChildren();\n continue;\n }\n copyStyles(source.children[i], target.children[i]);\n }\n };\n\n copyStyles(container, clone);\n\n\n const realLocator: SVGElement | null = container.querySelector('.locator') as SVGElement;\n const locator = clone.querySelector('.locator');\n let positionGrp: SVGElement | null | undefined = undefined;\n\n if (locator && clone) {\n const svgLocator = locator as SVGElement;\n clone.replaceChildren();\n positionGrp = SVG_BUILDER.createGroup(clone as HTMLElement, {styleClass: 'position'});\n if (positionGrp) {\n positionGrp.appendChild(svgLocator);\n }\n }\n\n const padding = 20;\n const size = SVG_MATH.size(container);\n const viewBoxValue = `${size.x - padding} ${size.y - padding} ${size.width + padding * 2} ${size.height + padding * 2}`;\n const htmlCloneNode = clone as HTMLElement;\n htmlCloneNode.setAttribute('viewBox', viewBoxValue);\n htmlCloneNode.setAttribute('xmlns:inkscape', 'http://www.inkscape.org/namespaces/inkscape');\n htmlCloneNode.setAttribute('xmlns:sodipodi', 'http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd');\n\n htmlCloneNode.style.width = `${size.width}px`;\n htmlCloneNode.style.height = `${size.height}px`;\n\n if (positionGrp && clone && realLocator) {\n const locatorSize = SVG.MATH.size(realLocator);\n const posGrp = SVG.MATH.size(positionGrp);\n const diffSizeX = size.width - locatorSize.width;\n const newPosX = (-posGrp.x) + (diffSizeX / 2);\n const diffSizeY = size.height - locatorSize.height;\n const newPosY = (-posGrp.y) + (diffSizeY / 2);\n\n SVG.TRANSFORM.translateX(positionGrp, newPosX)\n SVG.TRANSFORM.translateY(positionGrp, newPosY);\n }\n\n const svgData = new XMLSerializer().serializeToString(clone);\n const svgBlob = new Blob([svgData], {type: \"image/svg+xml;charset=utf-8\"});\n const svgUrl = URL.createObjectURL(svgBlob);\n\n const downloadLink = document.createElement(\"a\");\n downloadLink.href = svgUrl;\n downloadLink.download = 'graph.svg';\n document.body.appendChild(downloadLink);\n downloadLink.click();\n document.body.removeChild(downloadLink);\n URL.revokeObjectURL(svgUrl);\n }\n\n //====================================================================================================================\n // UPDATE VALUES\n //====================================================================================================================\n public updateValues() {\n const value = this.value();\n if (value.length == 0) {\n this.clearAllLayers();\n } else {\n for (let layer of value) {\n this.updateLayer(layer);\n }\n }\n }\n\n private clearAllLayers() {\n for (let layer of this.layersComponents) {\n for (let asset of layer.assets) {\n asset.remove();\n }\n layer.assets.splice(0, layer.assets.length - 1);\n }\n }\n\n\n private updateLayer(layer: SvgLayerDTO) {\n let currentLayer: SvgLayerElement | undefined | null = this.layersComponents.find(l => layer.name);\n if (!currentLayer) {\n currentLayer = this.createLayer(layer.name);\n }\n\n if (!currentLayer) {\n return;\n }\n\n const removedAssets = this.searchAssetsRemoved(layer.asserts, currentLayer.assets);\n removedAssets.forEach(a => a.remove());\n\n for (let asset of layer.asserts) {\n this.updateOrCreateAsset(asset, currentLayer);\n }\n }\n\n private searchAssetsRemoved(asserts: SvgAssetDTO[], existingAssets: SvgAssetElement[]): SvgAssetElement[] {\n const result: SvgAssetElement[] = [];\n for (let existingAsset of existingAssets) {\n const foundAsset = asserts.find(a => a.name == existingAsset.name);\n if (!foundAsset) {\n result.push(existingAsset);\n }\n }\n return result;\n }\n\n private updateOrCreateAsset(asset: SvgAssetDTO, layer: SvgLayerElement) {\n const existingAsset = layer.assets.find(a => a.name == asset.name);\n if (existingAsset) {\n existingAsset.update(asset, this.center(), this.scale, this.isometric());\n } else {\n const newAsset = SvgAssetUtils.createAsset({\n parent: layer.node,\n asset: asset,\n scale: this.scale,\n center: this.center(),\n isometric: this.isometric(),\n enableHitBox: false\n });\n\n if (newAsset) {\n layer.assets.push(newAsset);\n }\n }\n }\n\n updateAfterZoom() {\n const width = SVG_MATH.zoom(1, this.zoom());\n const height = this.isometric() ? width / Math.sqrt(3) : width;\n\n if (this.patternGroup) {\n const zoom = width / this.defaultSize;\n SVG_TRANSFORM.scale(this.patternGroup, zoom, zoom);\n if (this.layers) {\n SVG_TRANSFORM.scale(this.layers, zoom, zoom);\n }\n\n if (this.gridPattern) {\n this.gridPattern.setAttribute('height', `${height}`);\n this.gridPattern.setAttribute('width', `${width}`);\n }\n }\n this.computeRatio();\n }\n\n\n //====================================================================================================================\n // TOOLS\n //====================================================================================================================\n public resize(): void {\n if (this.locator && this.parent) {\n this.computeRatio();\n SVG_TRANSFORM.center(this.locator, this.parent, true, true);\n const doneTransfo = SVG_TRANSFORM.extractTransformInformation(this.locator);\n this.position.x = doneTransfo.x!;\n this.position.y = doneTransfo.y!;\n }\n this.hud?.updatePosition(this.height(), this.width());\n }\n\n private computeRatio() {\n if (!this.parent || !this.locator) {\n return;\n }\n const parentSize = SVG_MATH.size(this.parent);\n const locatorSize = SVG_MATH.size(this.locator);\n this.ratio = parentSize.width / locatorSize.width;\n }\n\n private trackMouse(track: boolean, event: MouseEvent) {\n event.preventDefault();\n this.trackMouseMove.set(track);\n if (track) {\n this.previousMouseMove.set({x: event.x, y: event.y});\n } else {\n this.previousMouseMove.set({x: 0, y: 0});\n }\n }\n\n private moveViewport(event: MouseEvent) {\n const container = this.container()?.nativeElement;\n if (!container) {\n return;\n }\n this.mousePosition.set(<Point>{\n x: event.x,\n y: event.y\n });\n const trackMouse = this.trackMouseMove();\n if (!trackMouse) {\n return;\n }\n const currentMove: Point = {\n x: event.x,\n y: event.y\n };\n\n const previousMouseMove = this.previousMouseMove();\n const delta: Point = {\n x: previousMouseMove.x - currentMove.x,\n y: previousMouseMove.y - currentMove.y\n }\n\n\n const asset = this.searchDragComponent();\n\n if (!asset) {\n event.preventDefault();\n this.position.x = this.position.x - delta.x;\n this.position.y = this.position.y - delta.y;\n if (this.locator) {\n SVG.TRANSFORM.translateY(this.locator, this.position.y);\n SVG.TRANSFORM.translateX(this.locator, this.position.x);\n }\n } else {\n asset.moveDrag({\n x: delta.x,\n y: delta.y\n }, this.ratio);\n }\n\n this.previousMouseMove.set(currentMove);\n }\n\n private searchDragComponent(): SvgAssetElement | undefined {\n for (let layer of this.layersComponents) {\n const assert = layer.assets.find(a => a.isDrag());\n if (assert) {\n return assert;\n }\n }\n return undefined;\n }\n\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"inugami-ng-components-inu-svg-isometric.mjs","sources":["../../../projects/inugami-ng/components/inu-svg-isometric/inu-svg-isometric-hud.ts","../../../projects/inugami-ng/components/inu-svg-isometric/inu-svg-isometric.ts","../../../projects/inugami-ng/components/inu-svg-isometric/inugami-ng-components-inu-svg-isometric.ts"],"sourcesContent":["import {SVG_ASSETS, SVG_BUILDER, SvgAssetUtils} from 'inugami-ng/services';\nimport {SvgAssetDTO, SvgAssetDTOOptions, SvgAssetElement, SvgButton} from 'inugami-ng/models';\n\nexport interface InuSvgIsometricHudOption {\n parent: HTMLElement;\n height: number;\n width: number;\n onZoomIn: (event: MouseEvent) => void;\n onZoomOut: (event: MouseEvent) => void;\n onDownload: () => void;\n}\n\nconst POINTER = 'cursor-pointer';\nconst ASSETS_TOOLS = 'tools';\n\nexport class InuSvgIsometricHud {\n\n //====================================================================================================================\n // ATTRIBUTES\n //====================================================================================================================\n parent!: HTMLElement;\n height!: number;\n width!: number;\n scale: number = 0.7;\n toolbarMargin = 1.25;\n option!: InuSvgIsometricHudOption;\n //\n hud: SVGElement | null = null;\n hudToolbar: SVGElement | null = null;\n hudToolbarAssets: SvgAssetElement[] = [];\n hudInspector: SVGElement | null = null;\n hudSettings: SVGElement | null = null;\n hudNavigation: SVGElement | null = null;\n\n\n //====================================================================================================================\n // INIT\n //====================================================================================================================\n constructor(option: InuSvgIsometricHudOption) {\n this.parent = option.parent;\n this.height = option.height;\n this.width = option.width;\n this.option = option;\n this.render();\n }\n\n //====================================================================================================================\n // RENDERING\n //====================================================================================================================\n private render() {\n this.hud = SVG_BUILDER.createGroup(this.parent, {styleClass: `hud`});\n this.hudToolbar = this.renderHudToolbar(this.hud);\n this.hudInspector = this.renderHudInspector(this.hud);\n this.hudSettings = this.renderHudSettings(this.hud);\n this.hudNavigation = this.renderHudNavigation(this.hud);\n }\n\n private renderHudToolbar(parent: SVGElement | null) {\n const result = SVG_BUILDER.createGroup(this.hud, {styleClass: `toolbar`});\n\n const buttons: SvgButton[] = [\n {\n name: 'add-asset',\n icon: 'category',\n onover: (event, node) => this.onOverAsset(node),\n onmouseleave: (event, node) => this.onLeaveAsset(node)\n },\n {\n name: 'download',\n icon: 'download',\n onover: (event, node) => this.onOverAsset(node),\n onmouseleave: (event, node) => this.onLeaveAsset(node),\n onclick: (event) => this.option.onDownload()\n },\n {\n name: 'zoom-div',\n icon: 'div'\n },\n {\n name: 'zoom-plus',\n icon: 'zoom',\n onover: (event, node) => this.onOverAsset(node),\n onmouseleave: (event, node) => this.onLeaveAsset(node),\n onclick: (event) => this.option.onZoomIn(event)\n },\n {\n name: 'zoom-min',\n icon: 'zoom',\n type: 'min',\n onover: (event, node) => this.onOverAsset(node),\n onmouseleave: (event, node) => this.onLeaveAsset(node),\n onclick: (event) => this.option.onZoomOut(event)\n },\n ];\n\n for (let button of buttons) {\n const buttonAsset = this.createAsset(<SvgAssetDTOOptions>{\n parent: result,\n name: button.name,\n asset: {\n assetSet: ASSETS_TOOLS,\n assetName: button.icon,\n type: button.type ? button.type : 'default',\n state: button.state ? button.state : 'default'\n },\n styleClass: POINTER\n });\n if (!buttonAsset) {\n continue;\n }\n\n if (button.onover) buttonAsset.onover = button.onover;\n if (button.onclick) buttonAsset.onclick = button.onclick;\n if (button.onmousedown) buttonAsset.onmousedown = button.onmousedown;\n if (button.onmousemove) buttonAsset.onmousemove = button.onmousemove;\n if (button.onmouseleave) buttonAsset.onmouseleave = button.onmouseleave;\n if (button.ondblclick) buttonAsset.ondblclick = button.ondblclick;\n if (button.ondrag) buttonAsset.ondrag = button.ondrag;\n if (button.ondrop) buttonAsset.ondrop = button.ondrop;\n if (button.ondragend) buttonAsset.ondragend = button.ondragend;\n if (button.ondragstart) buttonAsset.ondragstart = button.ondragstart;\n if (button.ondragleave) buttonAsset.ondragleave = button.ondragleave;\n if (button.ondragover) buttonAsset.ondragover = button.ondragover;\n if (button.ondragenter) buttonAsset.ondragenter = button.ondragenter;\n this.hudToolbarAssets.push(buttonAsset);\n }\n\n\n return result;\n }\n\n private renderHudInspector(parent: SVGElement | null) {\n const result = SVG_BUILDER.createGroup(this.hud, {styleClass: `layers-inspector`});\n\n return result;\n }\n\n private renderHudSettings(parent: SVGElement | null) {\n const result = SVG_BUILDER.createGroup(this.hud, {styleClass: `settings`});\n\n return result;\n }\n\n private renderHudNavigation(parent: SVGElement | null) {\n const result = SVG_BUILDER.createGroup(this.hud, {styleClass: `navigation`});\n\n return result;\n }\n\n //====================================================================================================================\n // ACTIONS\n //====================================================================================================================\n updatePosition(height: number, width: number) {\n this.updatePositionHudToolbar(height, width);\n }\n\n private updatePositionHudToolbar(height: number, width: number) {\n if (this.hudToolbarAssets.length == 0) {\n return;\n }\n\n const size = this.hudToolbarAssets[0].getComponentSize();\n for (let i = 1; i < this.hudToolbarAssets.length; i++) {\n this.hudToolbarAssets[i].move({x: (i * size.width) * this.toolbarMargin, y: 0});\n }\n }\n\n //====================================================================================================================\n // EVENTS\n //====================================================================================================================\n private onOverAsset(node: SvgAssetElement) {\n node.addStyleClass('over');\n }\n\n private onLeaveAsset(node: SvgAssetElement) {\n node.removeStyleClass('over');\n }\n\n //====================================================================================================================\n // TOOLS\n //====================================================================================================================\n private createAsset(option: SvgAssetDTOOptions): SvgAssetElement | undefined {\n const assetIcon = SVG_ASSETS.getAsset(option.asset.assetSet!, option.asset.assetName!);\n if (!assetIcon || !parent) {\n return undefined;\n }\n\n const asset = option.asset;\n asset.x = 0;\n asset.y = 0;\n asset.size = this.scale;\n asset.name = option.name!;\n\n return SvgAssetUtils.createAsset({\n parent: option.parent!,\n asset: asset,\n scale: this.scale,\n isometric: false,\n enableHitBox: true\n });\n }\n\n}\n","import {\n AfterViewInit,\n Component,\n computed,\n effect,\n ElementRef,\n HostListener,\n input,\n model,\n ModelSignal,\n signal,\n viewChild\n} from '@angular/core';\nimport {InuTemplateRegistryService} from 'inugami-ng/directives';\nimport {SVG, SVG_BUILDER, SVG_MATH, SVG_TRANSFORM, SvgAssetUtils} from 'inugami-ng/services';\nimport {Point, SvgAssetDTO, SvgAssetElement, SvgLayerDTO, SvgLayerElement} from 'inugami-ng/models';\nimport {FormValueControl} from '@angular/forms/signals';\nimport {InuSvgIsometricHud} from './inu-svg-isometric-hud';\nimport {InuPointPipe} from 'inugami-ng/pipes';\n\n\n@Component({\n selector: 'inu-svg-isometric',\n standalone: true,\n providers: [InuTemplateRegistryService],\n imports: [\n InuPointPipe\n ],\n template: `\n <div class=\"inu-svg-isometric-debug\">\n <div class=\"inu-svg-isometric-debug-content\">\n <dl>\n <dt>viewport size</dt>\n <dd>{{ viewportSize()| inuPipePoint }}</dd>\n <dt>center</dt>\n <dd>{{ center()| inuPipePoint }}</dd>\n\n </dl>\n <dl>\n <dt>zoom</dt>\n <dd>{{ zoom() }}</dd>\n <dt>trackMouseMove</dt>\n <dd>{{ trackMouseMove() }}</dd>\n <dt>mousePosition</dt>\n <dd>{{ mousePosition()| inuPipePoint }}</dd>\n <dt>previousMouseMove</dt>\n <dd>{{ previousMouseMove()| inuPipePoint }}</dd>\n </dl>\n </div>\n\n </div>\n\n <div [class]=\"_styleClass()\" #component>\n <svg #container xmlns=\"http://www.w3.org/2000/svg\"></svg>\n </div>\n `,\n styleUrl: './inu-svg-isometric.scss',\n})\nexport class InuSvgIsometric implements FormValueControl<SvgLayerDTO[]>, AfterViewInit {\n\n //====================================================================================================================\n // ATTRIBUTES\n //====================================================================================================================\n isometric = input<boolean>(true);\n disabled = input<boolean>(false);\n styleclass = input<string>('');\n styleclassheight = input<string>('');\n //\n private component = viewChild<ElementRef<HTMLElement>>('component');\n private container = viewChild<ElementRef<HTMLElement>>('container');\n _styleClass = computed<string>(() => {\n return [\n 'inu-svg',\n 'inu-svg-isometric',\n this.disabled() ? 'disabled' : '',\n this.styleclass() ? this.styleclass() : ''\n ].join(' ');\n });\n //---\n height = signal<number>(400);\n width = signal<number>(600);\n viewportSize = computed<Point>(() => <Point>{x: this.height(), y: this.width()});\n center = signal<Point>({x: 0, y: 0});\n zoom = signal<number>(50);\n assetSelected = signal<SvgAssetElement | undefined>(undefined);\n trackMouseMove = signal<boolean>(false);\n mousePosition = signal<Point>({x: 0, y: 0});\n previousMouseMove = signal<Point>({x: 0, y: 0});\n value: ModelSignal<SvgLayerDTO[]> = model(<SvgLayerDTO[]>[]);\n //---\n defaultSize: number = 50;\n position: Point = {x: 0, y: 0};\n\n //--- SVG components\n scale: number = 1;\n ratio: number = 1;\n\n parent: HTMLElement | null = null;\n hiddenAssetLayer: SVGElement | null = null;\n locator: SVGElement | null = null;\n defs: SVGElement | null = null;\n canvas: SVGElement | null = null;\n graph: SVGElement | null = null;\n gridPattern: SVGElement | null = null;\n patternGroup: SVGElement | null = null;\n gridPatternRect: SVGElement | null = null;\n layers: SVGElement | null = null;\n layersComponents: SvgLayerElement[] = [];\n hud: InuSvgIsometricHud | undefined = undefined;\n\n\n //====================================================================================================================\n // INIT\n //====================================================================================================================\n constructor() {\n effect(() => {\n this.updateValues();\n });\n }\n\n ngAfterViewInit(): void {\n const component = this.component();\n const container = this.container();\n if (component && container) {\n this.resolveParentSize(component, container);\n this.initializeLayout(container);\n this.updateAfterZoom();\n this.resize();\n }\n }\n\n\n //====================================================================================================================\n // RENDERING\n //====================================================================================================================\n private resolveParentSize(component: ElementRef<HTMLElement>, container: ElementRef<HTMLElement>) {\n if (component?.nativeElement && component?.nativeElement.parentNode && component?.nativeElement.parentNode.parentNode) {\n this.parent = component?.nativeElement.parentNode.parentNode as HTMLElement;\n }\n\n if (this.parent) {\n let parentSize = SVG_MATH.size(this.parent);\n this.height.set(parentSize.height);\n this.width.set(parentSize.width);\n }\n\n this.center.set(<Point>{y: this.width() / 2, x: this.height() / 2});\n container?.nativeElement\n .setAttribute('style', `display: block; height:${this.height()}px;width:${this.width()}px`);\n\n }\n\n private initializeLayout(container: ElementRef<HTMLElement>) {\n\n this.defs = SVG_BUILDER.createDefs(container?.nativeElement);\n const gridGrp = SVG_BUILDER.createGroup(container?.nativeElement);\n this.hiddenAssetLayer = SVG_BUILDER.createGroup(container?.nativeElement, {styleClass: 'hidden-layer'});\n this.locator = SVG_BUILDER.createGroup(container?.nativeElement, {styleClass: 'locator'});\n this.canvas = SVG_BUILDER.createGroup(this.locator, {styleClass: 'canvas'});\n container.nativeElement.onmousedown = (event: MouseEvent) => this.trackMouse(true, event);\n container.nativeElement.onmouseup = (event: MouseEvent) => this.trackMouse(false, event);\n container.nativeElement.onmousemove = (event: MouseEvent) => this.moveViewport(event);\n\n if(this.hiddenAssetLayer){\n this.hiddenAssetLayer.setAttribute('inkscape:label', 'hidden');\n this.hiddenAssetLayer.setAttribute('inkscape:groupmode', 'layer');\n this.hiddenAssetLayer.setAttribute('style', 'display: hidden;');\n }\n\n if (this.defs) {\n this.createGridDefs(this.defs);\n }\n const filter = SVG_BUILDER.createFilter(this.defs, 'shadow', {style: 'color-interpolation-filters: sRGB;'});\n const gaussian = SVG_BUILDER.createNode('feGaussianBlur', filter);\n if (gaussian) {\n gaussian.setAttribute('stdDeviation', '1');\n }\n\n if (gridGrp) {\n this.renderGrid(gridGrp);\n }\n if (this.canvas) {\n this.graph = SVG_BUILDER.createGroup(this.canvas, {styleClass: 'graph'});\n }\n if (this.graph) {\n this.renderLayers(this.graph);\n }\n if (container?.nativeElement) {\n\n this.hud = new InuSvgIsometricHud({\n parent: container?.nativeElement,\n height: this.height(),\n width: this.width(),\n //\n onZoomIn: (e) => this.onZoomIn(e),\n onZoomOut: (e) => this.onZoomOut(e),\n onDownload: () => this.download()\n });\n }\n\n this.updateValues();\n }\n\n private renderLayers(graph: SVGElement) {\n this.layers = SVG_BUILDER.createGroup(this.graph, {styleClass: 'layers'});\n }\n\n private createLayer(name: string): SvgLayerElement | undefined {\n if (this.layers) {\n const layer = SVG_BUILDER.createGroup(this.layers, {styleClass: `layer ${name}`});\n if (layer) {\n const result = <SvgLayerElement>{\n name: name,\n node: layer,\n assets: []\n };\n this.layersComponents.push(result);\n return result;\n }\n }\n return undefined;\n }\n\n //--------------------------------------------------------------------------------------------------------------------\n // GRID\n //--------------------------------------------------------------------------------------------------------------------\n private createGridDefs(defs: SVGElement) {\n this.gridPattern = SVG_BUILDER.createDefsPattern(defs,\n 'gridBackground',\n {\n x: 0,\n y: 0,\n height: SVG_MATH.zoom(1, this.zoom()),\n width: SVG_MATH.zoom(1, this.zoom()),\n patternUnits: \"userSpaceOnUse\"\n });\n\n this.patternGroup = SVG_BUILDER.createGroup(this.gridPattern, {styleClass: 'inu-svg-isometric-grid-background'});\n if (this.patternGroup) {\n const isometric = this.isometric();\n if (isometric) {\n\n SVG_BUILDER.createCurve(this.patternGroup, 'M 0,14.4337 L 25,0 L 50,14.4337 L 25,28.8675 Z');\n } else {\n this.gridPatternRect = SVG_BUILDER.createRect(this.patternGroup, {\n height: SVG_MATH.zoom(1, this.zoom()),\n width: SVG_MATH.zoom(1, this.zoom())\n });\n }\n\n }\n\n }\n\n private renderGrid(graph: SVGElement) {\n const gridGroup = SVG_BUILDER.createGroup(graph, {styleClass: 'inu-svg-isometric-grid'});\n if (gridGroup) {\n this.renderBackground(gridGroup);\n }\n }\n\n private renderBackground(graph: SVGElement): SVGElement | null {\n const result = SVG_BUILDER.createRect(graph, {\n height: this.height(),\n width: this.width(),\n styleClass: 'inu-svg-isometric-border'\n });\n if (result) {\n result.setAttribute('fill', 'url(#gridBackground)');\n }\n return result;\n }\n\n\n //====================================================================================================================\n // EVENTS\n //====================================================================================================================\n //--------------------------------------------------------------------------------------------------------------------\n // ZOOM\n //--------------------------------------------------------------------------------------------------------------------\n @HostListener('window:resize')\n onResize() {\n const component = this.component();\n const container = this.container();\n if (component && container) {\n this.resolveParentSize(component, container);\n this.resize();\n }\n }\n\n @HostListener('wheel', ['$event'])\n onMouseWheel(event: WheelEvent) {\n event.preventDefault();\n let step = 1;\n if (event.ctrlKey) {\n step = 10;\n }\n if (event.shiftKey) {\n step = 0.1;\n }\n if (event.deltaY > 0) {\n this.zoom.set(this.zoom() - step);\n } else {\n this.zoom.set(this.zoom() - step);\n }\n if (this.zoom() <= 0) {\n this.zoom.set(0.001);\n }\n\n this.updateAfterZoom();\n }\n\n @HostListener('mousedown', ['$event'])\n onMouseDown(event: MouseEvent) {\n\n if (event.button === 1) {\n event.preventDefault();\n let startZoom = this.zoom();\n let endZoom = this.defaultSize;\n let delta = endZoom - startZoom;\n let currentX = 0;\n let currentY = 0;\n let x = 0;\n let y = 0;\n\n if (this.parent && this.locator) {\n const currentTransfoAttr = this.locator.getAttribute('transform');\n const currentTransfo = SVG_TRANSFORM.extractTransformInformation(this.locator);\n SVG_TRANSFORM.center(this.locator, this.parent, true, true);\n const centerTransfo = SVG_TRANSFORM.extractTransformInformation(this.locator);\n this.locator.setAttribute('transform', currentTransfoAttr!);\n currentX = currentTransfo.x!;\n currentY = currentTransfo.y!;\n x = centerTransfo.x! - currentX;\n y = centerTransfo.y! - currentY;\n\n startZoom = currentTransfo.scaleX!;\n endZoom = centerTransfo.scaleX!;\n delta = endZoom - startZoom;\n }\n SVG.ANIMATION.animate((progress: number) => {\n const newZoom = startZoom + (delta * progress);\n const newX = currentX + (x * progress);\n const newY = currentY + (y * progress);\n if (this.locator) {\n SVG_TRANSFORM.translateY(this.locator, newY);\n SVG_TRANSFORM.translateX(this.locator, newX);\n SVG_TRANSFORM.scale(this.locator, newZoom, newZoom);\n }\n this.updateGridSize(this.defaultSize * (newZoom));\n }, {\n duration: 2000,\n timer: SVG.ANIMATION.TYPES.easeOutCubic,\n onDone: () => {\n this.zoom.set(this.defaultSize);\n if (this.locator) {\n if (this.parent) {\n SVG_TRANSFORM.center(this.locator, this.parent, true, true);\n const doneTransfo = SVG_TRANSFORM.extractTransformInformation(this.locator);\n this.position.x = doneTransfo.x!;\n this.position.y = doneTransfo.y!;\n }\n this.updateGridSize(this.zoom());\n }\n }\n });\n }\n }\n\n\n private updateGridSize(zoom: number) {\n const width = SVG_MATH.zoom(1, zoom);\n const height = this.isometric() ? width / Math.sqrt(3) : width;\n\n if (this.patternGroup) {\n const currentZoom = width / this.defaultSize;\n SVG_TRANSFORM.scale(this.patternGroup, currentZoom, currentZoom);\n\n if (this.gridPattern) {\n this.gridPattern.setAttribute('height', `${height}`);\n this.gridPattern.setAttribute('width', `${width}`);\n }\n }\n }\n\n private onZoomIn(event: MouseEvent) {\n const zoom = this.zoom();\n this.zoom.set(zoom + 1);\n this.updateAfterZoom();\n }\n\n private onZoomOut(event: MouseEvent) {\n const zoom = this.zoom() - 1;\n this.zoom.set(zoom <= 0 ? 0.001 : zoom);\n this.updateAfterZoom();\n }\n\n //--------------------------------------------------------------------------------------------------------------------\n // DOWNALOD\n //--------------------------------------------------------------------------------------------------------------------\n private download() {\n const container = this.container()?.nativeElement;\n if (!container) {\n return;\n }\n\n const clone = container.cloneNode(true) as Element;\n\n const copyStyles = (source: any, target: any) => {\n const computed = window.getComputedStyle(source);\n const svgProps = [\n \"fill\", \"stroke\", \"stroke-width\", \"opacity\", \"display\",\n \"font-family\", \"font-size\", \"font-weight\", \"text-anchor\",\n \"transform\", \"filter\", \"stop-color\", \"stop-opacity\"\n ];\n\n svgProps.forEach(prop => {\n target.style[prop] = computed.getPropertyValue(prop);\n });\n\n for (let i = 0; i < source.children.length; i++) {\n const currentStyleClass = source.children[i].getAttribute('class');\n if (currentStyleClass == 'inu-svg-isometric-grid' || currentStyleClass == 'hud') {\n target.children[i].replaceChildren();\n continue;\n }\n copyStyles(source.children[i], target.children[i]);\n }\n };\n\n copyStyles(container, clone);\n\n\n const realLocator: SVGElement | null = container.querySelector('.locator') as SVGElement;\n const locator = clone.querySelector('.locator');\n let positionGrp: SVGElement | null | undefined = undefined;\n\n if (locator && clone) {\n const svgLocator = locator as SVGElement;\n clone.replaceChildren();\n positionGrp = SVG_BUILDER.createGroup(clone as HTMLElement, {styleClass: 'position'});\n if (positionGrp) {\n positionGrp.appendChild(svgLocator);\n }\n }\n\n const padding = 20;\n const size = SVG_MATH.size(container);\n const viewBoxValue = `${size.x - padding} ${size.y - padding} ${size.width + padding * 2} ${size.height + padding * 2}`;\n const htmlCloneNode = clone as HTMLElement;\n htmlCloneNode.setAttribute('viewBox', viewBoxValue);\n htmlCloneNode.setAttribute('xmlns:inkscape', 'http://www.inkscape.org/namespaces/inkscape');\n htmlCloneNode.setAttribute('xmlns:sodipodi', 'http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd');\n\n htmlCloneNode.style.width = `${size.width}px`;\n htmlCloneNode.style.height = `${size.height}px`;\n\n if (positionGrp && clone && realLocator) {\n const locatorSize = SVG.MATH.size(realLocator);\n const posGrp = SVG.MATH.size(positionGrp);\n const diffSizeX = size.width - locatorSize.width;\n const newPosX = (-posGrp.x) + (diffSizeX / 2);\n const diffSizeY = size.height - locatorSize.height;\n const newPosY = (-posGrp.y) + (diffSizeY / 2);\n\n SVG.TRANSFORM.translateX(positionGrp, newPosX)\n SVG.TRANSFORM.translateY(positionGrp, newPosY);\n }\n\n const svgData = new XMLSerializer().serializeToString(clone);\n const svgBlob = new Blob([svgData], {type: \"image/svg+xml;charset=utf-8\"});\n const svgUrl = URL.createObjectURL(svgBlob);\n\n const downloadLink = document.createElement(\"a\");\n downloadLink.href = svgUrl;\n downloadLink.download = 'graph.svg';\n document.body.appendChild(downloadLink);\n downloadLink.click();\n document.body.removeChild(downloadLink);\n URL.revokeObjectURL(svgUrl);\n }\n\n //====================================================================================================================\n // UPDATE VALUES\n //====================================================================================================================\n public updateValues() {\n const value = this.value();\n if (value.length == 0) {\n this.clearAllLayers();\n } else {\n for (let layer of value) {\n this.updateLayer(layer);\n }\n }\n }\n\n private clearAllLayers() {\n for (let layer of this.layersComponents) {\n for (let asset of layer.assets) {\n asset.remove();\n }\n layer.assets.splice(0, layer.assets.length - 1);\n }\n }\n\n\n private updateLayer(layer: SvgLayerDTO) {\n let currentLayer: SvgLayerElement | undefined | null = this.layersComponents.find(l => layer.name);\n if (!currentLayer) {\n currentLayer = this.createLayer(layer.name);\n }\n\n if (!currentLayer) {\n return;\n }\n\n const removedAssets = this.searchAssetsRemoved(layer.asserts, currentLayer.assets);\n removedAssets.forEach(a => a.remove());\n\n for (let asset of layer.asserts) {\n this.updateOrCreateAsset(asset, currentLayer);\n }\n }\n\n private searchAssetsRemoved(asserts: SvgAssetDTO[], existingAssets: SvgAssetElement[]): SvgAssetElement[] {\n const result: SvgAssetElement[] = [];\n for (let existingAsset of existingAssets) {\n const foundAsset = asserts.find(a => a.name == existingAsset.name);\n if (!foundAsset) {\n result.push(existingAsset);\n }\n }\n return result;\n }\n\n private updateOrCreateAsset(asset: SvgAssetDTO, layer: SvgLayerElement) {\n const existingAsset = layer.assets.find(a => a.name == asset.name);\n if (existingAsset) {\n existingAsset.update(asset, this.center(), this.scale, this.isometric());\n } else {\n const newAsset = SvgAssetUtils.createAsset({\n parent: layer.node,\n asset: asset,\n scale: this.scale,\n center: this.center(),\n isometric: this.isometric(),\n enableHitBox: false\n });\n\n if (newAsset) {\n layer.assets.push(newAsset);\n }\n }\n }\n\n updateAfterZoom() {\n const width = SVG_MATH.zoom(1, this.zoom());\n const height = this.isometric() ? width / Math.sqrt(3) : width;\n\n if (this.patternGroup) {\n const zoom = width / this.defaultSize;\n SVG_TRANSFORM.scale(this.patternGroup, zoom, zoom);\n if (this.layers) {\n SVG_TRANSFORM.scale(this.layers, zoom, zoom);\n }\n\n if (this.gridPattern) {\n this.gridPattern.setAttribute('height', `${height}`);\n this.gridPattern.setAttribute('width', `${width}`);\n }\n }\n this.computeRatio();\n }\n\n\n //====================================================================================================================\n // TOOLS\n //====================================================================================================================\n public resize(): void {\n if (this.locator && this.parent) {\n this.computeRatio();\n SVG_TRANSFORM.center(this.locator, this.parent, true, true);\n const doneTransfo = SVG_TRANSFORM.extractTransformInformation(this.locator);\n this.position.x = doneTransfo.x!;\n this.position.y = doneTransfo.y!;\n }\n this.hud?.updatePosition(this.height(), this.width());\n }\n\n private computeRatio() {\n if (!this.parent || !this.locator) {\n return;\n }\n const parentSize = SVG_MATH.size(this.parent);\n const locatorSize = SVG_MATH.size(this.locator);\n this.ratio = parentSize.width / locatorSize.width;\n }\n\n private trackMouse(track: boolean, event: MouseEvent) {\n event.preventDefault();\n this.trackMouseMove.set(track);\n if (track) {\n this.previousMouseMove.set({x: event.x, y: event.y});\n } else {\n this.previousMouseMove.set({x: 0, y: 0});\n }\n }\n\n private moveViewport(event: MouseEvent) {\n const container = this.container()?.nativeElement;\n if (!container) {\n return;\n }\n this.mousePosition.set(<Point>{\n x: event.x,\n y: event.y\n });\n const trackMouse = this.trackMouseMove();\n if (!trackMouse) {\n return;\n }\n const currentMove: Point = {\n x: event.x,\n y: event.y\n };\n\n const previousMouseMove = this.previousMouseMove();\n const delta: Point = {\n x: previousMouseMove.x - currentMove.x,\n y: previousMouseMove.y - currentMove.y\n }\n\n\n const asset = this.searchDragComponent();\n\n if (!asset) {\n event.preventDefault();\n this.position.x = this.position.x - delta.x;\n this.position.y = this.position.y - delta.y;\n if (this.locator) {\n SVG.TRANSFORM.translateY(this.locator, this.position.y);\n SVG.TRANSFORM.translateX(this.locator, this.position.x);\n }\n } else {\n asset.moveDrag({\n x: delta.x,\n y: delta.y\n }, this.ratio);\n }\n\n this.previousMouseMove.set(currentMove);\n }\n\n private searchDragComponent(): SvgAssetElement | undefined {\n for (let layer of this.layersComponents) {\n const assert = layer.assets.find(a => a.isDrag());\n if (assert) {\n return assert;\n }\n }\n return undefined;\n }\n\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inugami-ng-models.mjs","sources":["../../../projects/inugami-ng/models/site-link.model.ts","../../../projects/inugami-ng/models/inugami-ng-models.ts"],"sourcesContent":["export const TARGET_BLANK = '_blank';\nexport const TARGET_SELF = '_self';\nexport const TARGET_PARENT = '_parent';\nexport interface InuSiteLink{\n title:string;\n path?:string;\n fragment?:string;\n icon?:string;\n styleClass?:string;\n external?:boolean;\n target?:'_blank'|'_self'|'_parent',\n children?: InuSiteLinkChildren[];\n gaEvent?:string;\n gaCategory?:string;\n}\n\nexport interface InuSiteLinkChildren{\n links?: InuSiteLink[];\n title?:string;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"AAAO,MAAM,YAAY,GAAG;AACrB,MAAM,WAAW,GAAG;AACpB,MAAM,aAAa,GAAG;;ACF7B;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"inugami-ng-models.mjs","sources":["../../../projects/inugami-ng/models/site-link.model.ts","../../../projects/inugami-ng/models/inugami-ng-models.ts"],"sourcesContent":["export const TARGET_BLANK = '_blank';\nexport const TARGET_SELF = '_self';\nexport const TARGET_PARENT = '_parent';\nexport interface InuSiteLink{\n title:string;\n path?:string;\n fragment?:string;\n icon?:string;\n styleClass?:string;\n external?:boolean;\n target?:'_blank'|'_self'|'_parent',\n children?: InuSiteLinkChildren[];\n forceShowChildren?:boolean;\n gaEvent?:string;\n gaCategory?:string;\n}\n\nexport interface InuSiteLinkChildren{\n links?: InuSiteLink[];\n title?:string;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"AAAO,MAAM,YAAY,GAAG;AACrB,MAAM,WAAW,GAAG;AACpB,MAAM,aAAa,GAAG;;ACF7B;;AAEG;;;;"}
|
package/package.json
CHANGED
|
@@ -142,6 +142,8 @@ declare class InuOpenApi {
|
|
|
142
142
|
init(): void;
|
|
143
143
|
loadFormUrl(url: string): void;
|
|
144
144
|
initOpenApi(openApi: OpenApi): void;
|
|
145
|
+
protected download(): void;
|
|
146
|
+
private saveFile;
|
|
145
147
|
loadFormCache(url: string): OpenApi | undefined;
|
|
146
148
|
setToCache(url: string, value: any): void;
|
|
147
149
|
static ɵfac: i0.ɵɵFactoryDeclaration<InuOpenApi, never>;
|