inugami-ng 0.0.27 → 0.0.29

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.
@@ -25,8 +25,15 @@ class InuAsideMenuChildren {
25
25
  if (childLink.forceShowChildren != undefined && childLink.forceShowChildren) {
26
26
  return true;
27
27
  }
28
- const url = this.currentUrlString();
29
- return url === childLink.path;
28
+ const targetPath = childLink.path;
29
+ if (!targetPath)
30
+ return false;
31
+ return this.router.isActive(targetPath, {
32
+ paths: 'exact',
33
+ queryParams: 'ignored',
34
+ fragment: 'ignored',
35
+ matrixParams: 'ignored'
36
+ });
30
37
  }
31
38
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuAsideMenuChildren, deps: [], target: i0.ɵɵFactoryTarget.Component });
32
39
  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"] }] });
@@ -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 {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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"}
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\n const targetPath = childLink.path;\n\n if (!targetPath) return false;\n\n return this.router.isActive(targetPath, {\n paths: 'exact',\n queryParams: 'ignored',\n fragment: 'ignored',\n matrixParams: 'ignored'\n });\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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"}
@@ -4,6 +4,9 @@ import { InuCacheServices } from 'inugami-ng/services';
4
4
  import { map, tap, shareReplay } from 'rxjs';
5
5
  import { HttpClient } from '@angular/common/http';
6
6
  import hljs from 'highlight.js';
7
+ import { InuButton } from 'inugami-ng/components/inu-button';
8
+ import { InuCopyServices } from 'inugami-ng/components/inu-copy';
9
+ import { InuToastServices } from 'inugami-ng/components/inu-toast';
7
10
 
8
11
  class InuHighlightDirective {
9
12
  el = inject(ElementRef);
@@ -43,11 +46,16 @@ class InuCode {
43
46
  tag = input(undefined, ...(ngDevMode ? [{ debugName: "tag" }] : []));
44
47
  type = input(undefined, ...(ngDevMode ? [{ debugName: "type" }] : []));
45
48
  title = input(undefined, ...(ngDevMode ? [{ debugName: "title" }] : []));
49
+ notificationLabel = input('Value copied to clipboard', ...(ngDevMode ? [{ debugName: "notificationLabel" }] : []));
50
+ notificationMessage = input('', ...(ngDevMode ? [{ debugName: "notificationMessage" }] : []));
51
+ iconNotification = input('approval', ...(ngDevMode ? [{ debugName: "iconNotification" }] : []));
46
52
  http = inject(HttpClient);
47
53
  cache = inject(InuCacheServices);
48
54
  sourceCode = signal('', ...(ngDevMode ? [{ debugName: "sourceCode" }] : []));
49
55
  _title = signal('', ...(ngDevMode ? [{ debugName: "_title" }] : []));
50
56
  _type = signal('', ...(ngDevMode ? [{ debugName: "_type" }] : []));
57
+ copyService = inject(InuCopyServices);
58
+ toastServices = inject(InuToastServices);
51
59
  //==================================================================================================================
52
60
  // INITIALIZE
53
61
  //==================================================================================================================
@@ -131,6 +139,24 @@ class InuCode {
131
139
  return result;
132
140
  }
133
141
  //==================================================================================================================
142
+ // ACTION
143
+ //==================================================================================================================
144
+ copyContent() {
145
+ const content = this.sourceCode();
146
+ if (!content) {
147
+ return;
148
+ }
149
+ this.copyService.copy(content)
150
+ .subscribe({
151
+ next: () => this.toastServices.addMessage({
152
+ title: this.notificationLabel(),
153
+ message: this.notificationMessage(),
154
+ icon: this.iconNotification(),
155
+ level: "success"
156
+ })
157
+ });
158
+ }
159
+ //==================================================================================================================
134
160
  // TOOLS
135
161
  //==================================================================================================================
136
162
  loadFormCache(url) {
@@ -166,12 +192,12 @@ class InuCode {
166
192
  return result.join('\n');
167
193
  }
168
194
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuCode, deps: [], target: i0.ɵɵFactoryTarget.Component });
169
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: InuCode, isStandalone: true, selector: "inu-code", inputs: { source: { classPropertyName: "source", publicName: "source", isSignal: true, isRequired: false, transformFunction: null }, url: { classPropertyName: "url", publicName: "url", isSignal: true, isRequired: false, transformFunction: null }, tag: { classPropertyName: "tag", publicName: "tag", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"inu-code\">\n <fieldset>\n @if(_title()){\n <legend>{{_title()}}</legend>\n }\n\n @if(sourceCode()){\n <div class=\"source-code\">\n<pre [inuHighlight]=\"sourceCode()\" lang=\"java\" >\n</pre>\n </div>\n }\n\n </fieldset>\n\n\n</div>\n", styles: [".inu-code fieldset{margin:.5rem 1rem;border:.1rem solid #dddddd;border-left:.2rem solid #dddddd;padding:0}.inu-code fieldset:hover{border-left:.2rem solid var(--neutral)}.inu-code fieldset legend{font-size:120%;background-color:#f1f3f5;padding-left:1rem}.inu-code fieldset .source-code{margin-left:1rem}\n"], dependencies: [{ kind: "directive", type: InuHighlightDirective, selector: "code[inuHighlight], pre[inuHighlight]", inputs: ["inuHighlight", "lang"] }] });
195
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: InuCode, isStandalone: true, selector: "inu-code", inputs: { source: { classPropertyName: "source", publicName: "source", isSignal: true, isRequired: false, transformFunction: null }, url: { classPropertyName: "url", publicName: "url", isSignal: true, isRequired: false, transformFunction: null }, tag: { classPropertyName: "tag", publicName: "tag", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, notificationLabel: { classPropertyName: "notificationLabel", publicName: "notificationLabel", isSignal: true, isRequired: false, transformFunction: null }, notificationMessage: { classPropertyName: "notificationMessage", publicName: "notificationMessage", isSignal: true, isRequired: false, transformFunction: null }, iconNotification: { classPropertyName: "iconNotification", publicName: "iconNotification", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"inu-code\">\n <fieldset>\n <legend>\n <div class=\"inu-code-title\">\n {{_title()!}}\n </div>\n <div class=\"inu-code-copy\">\n <inu-button icon=\"copy\" (click)=\"copyContent()\"></inu-button>\n </div>\n </legend>\n\n @if(sourceCode()){\n <div class=\"source-code\">\n<pre [inuHighlight]=\"sourceCode()\" lang=\"java\" >\n</pre>\n </div>\n }\n\n </fieldset>\n\n\n</div>\n", styles: [".inu-code fieldset{margin:.5rem 1rem;border:.1rem solid #dddddd;border-left:.2rem solid #dddddd;padding:0}.inu-code fieldset legend{display:flex;padding:.25rem}.inu-code fieldset legend .inu-code-title{flex:1}.inu-code fieldset:hover{border-left:.2rem solid var(--neutral)}.inu-code fieldset legend{font-size:120%;background-color:#f1f3f5;padding-left:1rem}.inu-code fieldset .source-code{margin-left:1rem}\n"], dependencies: [{ kind: "directive", type: InuHighlightDirective, selector: "code[inuHighlight], pre[inuHighlight]", inputs: ["inuHighlight", "lang"] }, { kind: "component", type: InuButton, selector: "inu-button", inputs: ["label", "icon", "iconSize", "type", "link", "disabled", "processing", "processingIcon"] }] });
170
196
  }
171
197
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuCode, decorators: [{
172
198
  type: Component,
173
- args: [{ selector: 'inu-code', standalone: true, imports: [InuHighlightDirective], template: "<div class=\"inu-code\">\n <fieldset>\n @if(_title()){\n <legend>{{_title()}}</legend>\n }\n\n @if(sourceCode()){\n <div class=\"source-code\">\n<pre [inuHighlight]=\"sourceCode()\" lang=\"java\" >\n</pre>\n </div>\n }\n\n </fieldset>\n\n\n</div>\n", styles: [".inu-code fieldset{margin:.5rem 1rem;border:.1rem solid #dddddd;border-left:.2rem solid #dddddd;padding:0}.inu-code fieldset:hover{border-left:.2rem solid var(--neutral)}.inu-code fieldset legend{font-size:120%;background-color:#f1f3f5;padding-left:1rem}.inu-code fieldset .source-code{margin-left:1rem}\n"] }]
174
- }], ctorParameters: () => [], propDecorators: { source: [{ type: i0.Input, args: [{ isSignal: true, alias: "source", required: false }] }], url: [{ type: i0.Input, args: [{ isSignal: true, alias: "url", required: false }] }], tag: [{ type: i0.Input, args: [{ isSignal: true, alias: "tag", required: false }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }] } });
199
+ args: [{ selector: 'inu-code', standalone: true, imports: [InuHighlightDirective, InuButton], template: "<div class=\"inu-code\">\n <fieldset>\n <legend>\n <div class=\"inu-code-title\">\n {{_title()!}}\n </div>\n <div class=\"inu-code-copy\">\n <inu-button icon=\"copy\" (click)=\"copyContent()\"></inu-button>\n </div>\n </legend>\n\n @if(sourceCode()){\n <div class=\"source-code\">\n<pre [inuHighlight]=\"sourceCode()\" lang=\"java\" >\n</pre>\n </div>\n }\n\n </fieldset>\n\n\n</div>\n", styles: [".inu-code fieldset{margin:.5rem 1rem;border:.1rem solid #dddddd;border-left:.2rem solid #dddddd;padding:0}.inu-code fieldset legend{display:flex;padding:.25rem}.inu-code fieldset legend .inu-code-title{flex:1}.inu-code fieldset:hover{border-left:.2rem solid var(--neutral)}.inu-code fieldset legend{font-size:120%;background-color:#f1f3f5;padding-left:1rem}.inu-code fieldset .source-code{margin-left:1rem}\n"] }]
200
+ }], ctorParameters: () => [], propDecorators: { source: [{ type: i0.Input, args: [{ isSignal: true, alias: "source", required: false }] }], url: [{ type: i0.Input, args: [{ isSignal: true, alias: "url", required: false }] }], tag: [{ type: i0.Input, args: [{ isSignal: true, alias: "tag", required: false }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], notificationLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "notificationLabel", required: false }] }], notificationMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "notificationMessage", required: false }] }], iconNotification: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconNotification", required: false }] }] } });
175
201
 
176
202
  /**
177
203
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"inugami-ng-components-inu-code.mjs","sources":["../../../projects/inugami-ng/components/inu-code/inu-code.directive.ts","../../../projects/inugami-ng/components/inu-code/inu-code.ts","../../../projects/inugami-ng/components/inu-code/inu-code.html","../../../projects/inugami-ng/components/inu-code/inugami-ng-components-inu-code.ts"],"sourcesContent":["import { Directive, ElementRef, inject, input, effect } from '@angular/core';\nimport hljs from 'highlight.js';\n\n@Directive({\n selector: 'code[inuHighlight], pre[inuHighlight]',\n standalone: true\n})\nexport class InuHighlightDirective {\n private el = inject(ElementRef);\n\n // On utilise des signaux pour la réactivité\n code = input<string>('', { alias: 'inuHighlight' });\n lang = input<string | undefined | null>(undefined);\n\n constructor() {\n effect(() => {\n const codeValue = this.code() || '';\n const language = this.lang() || '';\n const nativeElement = this.el.nativeElement;\n\n // Reset du contenu et application de la coloration\n nativeElement.textContent = codeValue;\n if (language) {\n nativeElement.className = `language-${language}`;\n }\n\n hljs.highlightElement(nativeElement);\n });\n }\n}\n","import {\n Component,\n effect,\n inject,\n input,\n signal\n} from '@angular/core';\nimport {InuCacheServices} from \"inugami-ng/services\";\nimport {map, shareReplay, tap} from \"rxjs\";\nimport {HttpClient} from \"@angular/common/http\";\nimport {SourceCode} from './code.model';\nimport {InuHighlightDirective} from './inu-code.directive';\n\n\n@Component({\n selector: 'inu-code',\n standalone: true,\n imports: [InuHighlightDirective],\n templateUrl: './inu-code.html',\n styleUrl: './inu-code.scss',\n})\nexport class InuCode {\n\n //==================================================================================================================\n // ATTRIBUTES\n //==================================================================================================================\n source = input<string | undefined | null>(undefined);\n url = input<string | undefined | null>(undefined);\n tag = input<string | undefined | null>(undefined);\n type = input<string | undefined | null>(undefined);\n title = input<string | undefined | null>(undefined);\n\n\n private readonly http = inject(HttpClient);\n private readonly cache = inject(InuCacheServices);\n\n sourceCode = signal<string>('');\n _title = signal<string>('');\n _type = signal<string>('');\n\n //==================================================================================================================\n // INITIALIZE\n //==================================================================================================================\n constructor() {\n effect(() => this.init());\n }\n\n init(): void {\n const url = this.url();\n if(this.title()){\n this._title.set(this.title()!);\n }\n\n if (url) {\n this.loadFormUrl(url);\n } else {\n const source = this.source();\n if (source) {\n this.sourceCode.set(source);\n }\n }\n }\n\n loadFormUrl(url: string) {\n\n const data = this.loadFormCache(url);\n if (data) {\n this.initSourceCode(data);\n return;\n }\n\n const cacheKey = `inu-code_${url}`;\n const pending = this.cache.getPending(cacheKey);\n\n if (pending) {\n pending.subscribe(res =>this.initSourceCode(res));\n return;\n }\n\n const request = this.http.get(url, {responseType: 'text'})\n .pipe(map(res => this.parseData(res, url)),\n tap(data => this.cache.set(cacheKey, data)),\n shareReplay(1)\n );\n this.cache.setPending(cacheKey, request);\n request.subscribe();\n\n }\n\n\n initSourceCode(data: SourceCode[]) {\n\n const values = data.filter(i => this.tag() === i.name);\n if (values.length > 0) {\n const sourceCodeValue = values[0];\n this.sourceCode.set(sourceCodeValue.content!);\n\n const currentTitle = this.title();\n\n if(this.title()){\n this._title.set(this.title()!);\n }else if (sourceCodeValue.title) {\n this._title.set(sourceCodeValue.title);\n }\n\n if(this.type()){\n this._type.set(this.type()!);\n }else if (sourceCodeValue.type) {\n this._type.set(sourceCodeValue.type);\n }\n }\n }\n\n\n //==================================================================================================================\n // PARSE\n //==================================================================================================================\n parseData(response: string, url: string): SourceCode[] {\n const parser = new DOMParser();\n const node = parser.parseFromString(response, \"text/xml\");\n const sources = node.getElementsByTagName(\"src\");\n\n const result: SourceCode[] = [];\n for (let i = 0; i < sources.length; i++) {\n let sourceNode = sources[i];\n let sourceName: string = sourceNode.getAttribute('name') ?? '';\n let sourceContent: string = this.cleanContent(sourceNode.textContent ?? '');\n let type: string | undefined = sourceNode.getAttribute('type') ?? undefined;\n let title: string | undefined = sourceNode.getAttribute('title') ?? undefined;\n\n result.push({\n name: sourceName,\n content: sourceContent,\n type: type,\n title: title\n })\n }\n\n this.initSourceCode(result);\n return result;\n }\n\n\n //==================================================================================================================\n // TOOLS\n //==================================================================================================================\n loadFormCache(url: string): SourceCode[] | undefined {\n const cacheKey = `inu-code_${url}`;\n const result: SourceCode[] | undefined = this.cache.get(cacheKey);\n return result;\n }\n\n setToCache(url: string, value: any): void {\n const cacheKey = `inu-code_${url}`;\n if (value) {\n this.cache.set(cacheKey, value);\n }\n }\n\n\n private cleanContent(value: string): string {\n let result: string[] = [];\n let buffer: string[] = [];\n\n let line = value.split(\"\\n\");\n\n let enableClean = false;\n for (let i = 0; i < line.length; i++) {\n if (enableClean || line[i].trim() != '') {\n buffer.push(line[i]);\n enableClean = true;\n }\n }\n enableClean = false;\n for (let i = buffer.length - 1; i >= 0; i--) {\n if (enableClean || buffer[i].trim() != '') {\n result.push(buffer[i]);\n enableClean = true;\n }\n }\n\n result.reverse();\n\n return result.join('\\n');\n }\n}\n","<div class=\"inu-code\">\n <fieldset>\n @if(_title()){\n <legend>{{_title()}}</legend>\n }\n\n @if(sourceCode()){\n <div class=\"source-code\">\n<pre [inuHighlight]=\"sourceCode()\" lang=\"java\" >\n</pre>\n </div>\n }\n\n </fieldset>\n\n\n</div>\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-code.mjs","sources":["../../../projects/inugami-ng/components/inu-code/inu-code.directive.ts","../../../projects/inugami-ng/components/inu-code/inu-code.ts","../../../projects/inugami-ng/components/inu-code/inu-code.html","../../../projects/inugami-ng/components/inu-code/inugami-ng-components-inu-code.ts"],"sourcesContent":["import { Directive, ElementRef, inject, input, effect } from '@angular/core';\nimport hljs from 'highlight.js';\n\n@Directive({\n selector: 'code[inuHighlight], pre[inuHighlight]',\n standalone: true\n})\nexport class InuHighlightDirective {\n private el = inject(ElementRef);\n\n // On utilise des signaux pour la réactivité\n code = input<string>('', { alias: 'inuHighlight' });\n lang = input<string | undefined | null>(undefined);\n\n constructor() {\n effect(() => {\n const codeValue = this.code() || '';\n const language = this.lang() || '';\n const nativeElement = this.el.nativeElement;\n\n // Reset du contenu et application de la coloration\n nativeElement.textContent = codeValue;\n if (language) {\n nativeElement.className = `language-${language}`;\n }\n\n hljs.highlightElement(nativeElement);\n });\n }\n}\n","import {\n Component,\n effect,\n inject,\n input,\n signal\n} from '@angular/core';\nimport {InuCacheServices} from \"inugami-ng/services\";\nimport {map, shareReplay, tap} from \"rxjs\";\nimport {HttpClient} from \"@angular/common/http\";\nimport {SourceCode} from './code.model';\nimport {InuHighlightDirective} from './inu-code.directive';\nimport {InuButton} from 'inugami-ng/components/inu-button';\nimport {InuCopyServices} from 'inugami-ng/components/inu-copy';\nimport {InuToastServices} from 'inugami-ng/components/inu-toast';\n\n\n@Component({\n selector : 'inu-code',\n standalone : true,\n imports : [InuHighlightDirective, InuButton],\n templateUrl: './inu-code.html',\n styleUrl : './inu-code.scss',\n })\nexport class InuCode {\n\n //==================================================================================================================\n // ATTRIBUTES\n //==================================================================================================================\n source = input<string | undefined | null>(undefined);\n url = input<string | undefined | null>(undefined);\n tag = input<string | undefined | null>(undefined);\n type = input<string | undefined | null>(undefined);\n title = input<string | undefined | null>(undefined);\n notificationLabel = input<string>('Value copied to clipboard');\n notificationMessage = input<string>('');\n iconNotification = input<string>('approval');\n\n private readonly http = inject(HttpClient);\n private readonly cache = inject(InuCacheServices);\n\n sourceCode = signal<string>('');\n _title = signal<string>('');\n _type = signal<string>('');\n\n copyService = inject(InuCopyServices);\n toastServices = inject(InuToastServices);\n\n //==================================================================================================================\n // INITIALIZE\n //==================================================================================================================\n constructor() {\n effect(() => this.init());\n }\n\n init(): void {\n const url = this.url();\n if (this.title()) {\n this._title.set(this.title()!);\n }\n\n if (url) {\n this.loadFormUrl(url);\n } else {\n const source = this.source();\n if (source) {\n this.sourceCode.set(source);\n }\n }\n }\n\n loadFormUrl(url: string) {\n\n const data = this.loadFormCache(url);\n if (data) {\n this.initSourceCode(data);\n return;\n }\n\n const cacheKey = `inu-code_${url}`;\n const pending = this.cache.getPending(cacheKey);\n\n if (pending) {\n pending.subscribe(res => this.initSourceCode(res));\n return;\n }\n\n const request = this.http.get(url, {responseType: 'text'})\n .pipe(map(res => this.parseData(res, url)),\n tap(data => this.cache.set(cacheKey, data)),\n shareReplay(1)\n );\n this.cache.setPending(cacheKey, request);\n request.subscribe();\n\n }\n\n\n initSourceCode(data: SourceCode[]) {\n\n const values = data.filter(i => this.tag() === i.name);\n if (values.length > 0) {\n const sourceCodeValue = values[0];\n this.sourceCode.set(sourceCodeValue.content!);\n\n const currentTitle = this.title();\n\n if (this.title()) {\n this._title.set(this.title()!);\n } else if (sourceCodeValue.title) {\n this._title.set(sourceCodeValue.title);\n }\n\n if (this.type()) {\n this._type.set(this.type()!);\n } else if (sourceCodeValue.type) {\n this._type.set(sourceCodeValue.type);\n }\n }\n }\n\n\n //==================================================================================================================\n // PARSE\n //==================================================================================================================\n parseData(response: string, url: string): SourceCode[] {\n const parser = new DOMParser();\n const node = parser.parseFromString(response, \"text/xml\");\n const sources = node.getElementsByTagName(\"src\");\n\n const result: SourceCode[] = [];\n for (let i = 0; i < sources.length; i++) {\n let sourceNode = sources[i];\n let sourceName: string = sourceNode.getAttribute('name') ?? '';\n let sourceContent: string = this.cleanContent(sourceNode.textContent ?? '');\n let type: string | undefined = sourceNode.getAttribute('type') ?? undefined;\n let title: string | undefined = sourceNode.getAttribute('title') ?? undefined;\n\n result.push({\n name : sourceName,\n content: sourceContent,\n type : type,\n title : title\n })\n }\n\n this.initSourceCode(result);\n return result;\n }\n\n //==================================================================================================================\n // ACTION\n //==================================================================================================================\n protected copyContent() {\n const content = this.sourceCode();\n if (!content) {\n return;\n }\n this.copyService.copy(content)\n .subscribe({\n next: () => this.toastServices.addMessage({\n title : this.notificationLabel(),\n message: this.notificationMessage(),\n icon : this.iconNotification(),\n level : \"success\"\n })\n });\n }\n\n //==================================================================================================================\n // TOOLS\n //==================================================================================================================\n loadFormCache(url: string): SourceCode[] | undefined {\n const cacheKey = `inu-code_${url}`;\n const result: SourceCode[] | undefined = this.cache.get(cacheKey);\n return result;\n }\n\n setToCache(url: string, value: any): void {\n const cacheKey = `inu-code_${url}`;\n if (value) {\n this.cache.set(cacheKey, value);\n }\n }\n\n\n private cleanContent(value: string): string {\n let result: string[] = [];\n let buffer: string[] = [];\n\n let line = value.split(\"\\n\");\n\n let enableClean = false;\n for (let i = 0; i < line.length; i++) {\n if (enableClean || line[i].trim() != '') {\n buffer.push(line[i]);\n enableClean = true;\n }\n }\n enableClean = false;\n for (let i = buffer.length - 1; i >= 0; i--) {\n if (enableClean || buffer[i].trim() != '') {\n result.push(buffer[i]);\n enableClean = true;\n }\n }\n\n result.reverse();\n\n return result.join('\\n');\n }\n\n\n}\n","<div class=\"inu-code\">\n <fieldset>\n <legend>\n <div class=\"inu-code-title\">\n {{_title()!}}\n </div>\n <div class=\"inu-code-copy\">\n <inu-button icon=\"copy\" (click)=\"copyContent()\"></inu-button>\n </div>\n </legend>\n\n @if(sourceCode()){\n <div class=\"source-code\">\n<pre [inuHighlight]=\"sourceCode()\" lang=\"java\" >\n</pre>\n </div>\n }\n\n </fieldset>\n\n\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -642,7 +642,7 @@ class InuOpenApiParameters {
642
642
  return result.join(' ');
643
643
  }
644
644
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuOpenApiParameters, deps: [], target: i0.ɵɵFactoryTarget.Component });
645
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: InuOpenApiParameters, isStandalone: true, selector: "inu-open-api-parameters", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null } }, providers: [], ngImport: i0, template: "<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", styles: [".inu-open-api-parameters table{width:100%}.inu-open-api-parameters table thead{border-color:inherit;border-style:solid;border-width:0}.inu-open-api-parameters table thead th{border-bottom:.15rem solid var(--neutral-dark)}\n"], dependencies: [{ kind: "component", type: InuCode, selector: "inu-code", inputs: ["source", "url", "tag", "type", "title"] }] });
645
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: InuOpenApiParameters, isStandalone: true, selector: "inu-open-api-parameters", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null } }, providers: [], ngImport: i0, template: "<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", styles: [".inu-open-api-parameters table{width:100%}.inu-open-api-parameters table thead{border-color:inherit;border-style:solid;border-width:0}.inu-open-api-parameters table thead th{border-bottom:.15rem solid var(--neutral-dark)}\n"], dependencies: [{ kind: "component", type: InuCode, selector: "inu-code", inputs: ["source", "url", "tag", "type", "title", "notificationLabel", "notificationMessage", "iconNotification"] }] });
646
646
  }
647
647
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuOpenApiParameters, decorators: [{
648
648
  type: Component,
@@ -805,7 +805,7 @@ class InuOpenApiResponse {
805
805
  return this.examplesSources()[index];
806
806
  }
807
807
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuOpenApiResponse, deps: [], target: i0.ɵɵFactoryTarget.Component });
808
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: InuOpenApiResponse, isStandalone: true, selector: "inu-open-api-response", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, schemas: { classPropertyName: "schemas", publicName: "schemas", isSignal: true, isRequired: false, transformFunction: null } }, providers: [], ngImport: i0, template: "@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", styles: [".inu-open-api-response{display:flex;flex-direction:column}.inu-open-api-response .response-examples{display:flex;flex-direction:column;gap:2rem}.inu-open-api-response .response-examples .response-example{width:100%;padding:1rem;border-top:.05rem solid var(--neutral)}.inu-open-api-response .response-examples .response-example.first{border-top:none}.inu-open-api-response .response-examples .response-example .response-example-header{display:flex;flex-direction:row}.inu-open-api-response .response-examples .response-example .response-example-header .response-example-header-labels{flex:1}.inu-open-api-response .response-examples .response-example inu-code{width:100%}.inu-open-api-response .response-example-content{display:none}.inu-open-api-response .response-example-content.display{display:flex}\n"], dependencies: [{ kind: "component", type: InuIcon, selector: "inu-icon", inputs: ["icon", "defaultIcon", "styleclass", "size"] }, { kind: "component", type: InuCode, selector: "inu-code", inputs: ["source", "url", "tag", "type", "title"] }, { kind: "component", type: InuOpenApiExtension, selector: "inu-open-api-extension", inputs: ["data"] }] });
808
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: InuOpenApiResponse, isStandalone: true, selector: "inu-open-api-response", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, schemas: { classPropertyName: "schemas", publicName: "schemas", isSignal: true, isRequired: false, transformFunction: null } }, providers: [], ngImport: i0, template: "@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", styles: [".inu-open-api-response{display:flex;flex-direction:column}.inu-open-api-response .response-examples{display:flex;flex-direction:column;gap:2rem}.inu-open-api-response .response-examples .response-example{width:100%;padding:1rem;border-top:.05rem solid var(--neutral)}.inu-open-api-response .response-examples .response-example.first{border-top:none}.inu-open-api-response .response-examples .response-example .response-example-header{display:flex;flex-direction:row}.inu-open-api-response .response-examples .response-example .response-example-header .response-example-header-labels{flex:1}.inu-open-api-response .response-examples .response-example inu-code{width:100%}.inu-open-api-response .response-example-content{display:none}.inu-open-api-response .response-example-content.display{display:flex}\n"], dependencies: [{ kind: "component", type: InuIcon, selector: "inu-icon", inputs: ["icon", "defaultIcon", "styleclass", "size"] }, { kind: "component", type: InuCode, selector: "inu-code", inputs: ["source", "url", "tag", "type", "title", "notificationLabel", "notificationMessage", "iconNotification"] }, { kind: "component", type: InuOpenApiExtension, selector: "inu-open-api-extension", inputs: ["data"] }] });
809
809
  }
810
810
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuOpenApiResponse, decorators: [{
811
811
  type: Component,
@@ -999,7 +999,7 @@ class InuOpenApiEndpoint {
999
999
  return result.join(SPACE);
1000
1000
  }
1001
1001
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuOpenApiEndpoint, deps: [], target: i0.ɵɵFactoryTarget.Component });
1002
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: InuOpenApiEndpoint, isStandalone: true, selector: "inu-open-api-endpoint", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, schemas: { classPropertyName: "schemas", publicName: "schemas", isSignal: true, isRequired: false, transformFunction: null } }, providers: [], ngImport: i0, template: "@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", styles: [".inu-open-api-endpoint{border:1px solid var(--neutral-light);margin-bottom:0rem}.inu-open-api-endpoint header{display:flex;padding:.25rem 2rem .25rem .25rem;align-items:center}.inu-open-api-endpoint header h2{flex:1;display:flex;gap:2rem;color:var(--text-color);font-weight:400;font-size:160%}.inu-open-api-endpoint header h2 .inu-endpoint-verb{width:5rem;font-weight:700;text-transform:uppercase}.inu-open-api-endpoint header span{display:flex;height:2rem}.inu-open-api-endpoint .inu-open-api-endpoint-content .inu-open-api-endpoint-content-display{display:none}.inu-open-api-endpoint .inu-open-api-endpoint-content .inu-open-api-endpoint-content-display.show{padding:1rem;display:flex;gap:2rem;flex-direction:column;background-color:var(--background)}.inu-open-api-endpoint .inu-open-api-endpoint-content .inu-open-api-endpoint-content-display.show fieldset{padding:1rem;border-left:.15rem solid transparent;transition:border-left-color .15s}.inu-open-api-endpoint .inu-open-api-endpoint-content .inu-open-api-endpoint-content-display.show fieldset:hover{border-left:.15rem solid var(--neutral)}.inu-open-api-endpoint .inu-open-api-endpoint-content .inu-open-api-endpoint-content-display.show fieldset label{font-weight:bolder;font-size:120%;border-bottom:1px solid var(--neutral);width:100%;margin-bottom:2rem}.inu-open-api-endpoint .response .response-table tr{border-bottom:.2rem solid var(--neutral)}.inu-open-api-endpoint .description-content{padding-top:1rem}.inu-open-api-endpoint.get{background:var(--endpoint-get-detail-background);border-color:var(--endpoint-get-background)}.inu-open-api-endpoint.get header h2{color:var(--endpoint-get-background-darker)}.inu-open-api-endpoint.head{background:var(--endpoint-head-detail-background);border-color:var(--endpoint-head-background)}.inu-open-api-endpoint.head header h2{color:var(--endpoint-head-background-darker)}.inu-open-api-endpoint.post{background:var(--endpoint-post-detail-background);border-color:var(--endpoint-post-background)}.inu-open-api-endpoint.post header h2{color:var(--endpoint-post-background-darker)}.inu-open-api-endpoint.put{background:var(--endpoint-put-detail-background);border-color:var(--endpoint-put-background)}.inu-open-api-endpoint.put header h2{color:var(--endpoint-put-background-darker)}.inu-open-api-endpoint.patch{background:var(--endpoint-patch-detail-background);border-color:var(--endpoint-patch-background)}.inu-open-api-endpoint.patch header h2{color:var(--endpoint-patch-background-darker)}.inu-open-api-endpoint.delete{background:var(--endpoint-delete-detail-background);border-color:var(--endpoint-delete-background)}.inu-open-api-endpoint.delete header h2{color:var(--endpoint-delete-background-darker)}.inu-open-api-endpoint.option{background:var(--endpoint-option-detail-background);border-color:var(--endpoint-option-background)}.inu-open-api-endpoint.option{background:var(--endpoint-trace-detail-background);border-color:var(--endpoint-trace-background)}.inu-open-api-endpoint .inu-endpoint-response-status{width:10%;max-width:5rem;min-width:3rem}@media(max-width:768px){.inu-open-api-endpoint .inu-endpoint-response-status{width:100%;max-width:100%;min-width:100%}}.inu-open-api-endpoint .response-table-body .flex-table-body-row{display:flex;flex-direction:row;justify-content:space-between}@media(max-width:768px){.inu-open-api-endpoint .response-table-body .flex-table-body-row{flex-direction:column}}.inu-open-api-endpoint .response-table-body .flex-table-body-row .description-content{flex:1}.inu-open-api-endpoint .inu-endpoint-response-status{margin-right:.5rem;font-weight:700;display:inline-flex;align-items:center}.inu-open-api-endpoint .inu-endpoint-response-status.success{border-right:.25rem solid var(--success);color:var(--success-dark)}@media(max-width:768px){.inu-open-api-endpoint .inu-endpoint-response-status.success{width:100%;border-right:none;border-bottom:.25rem solid var(--success)}}.inu-open-api-endpoint .inu-endpoint-response-status.warning{border-right:.25rem solid var(--warning);color:var(--warning-dark)}@media(max-width:768px){.inu-open-api-endpoint .inu-endpoint-response-status.warning{width:100%;border-right:none;border-bottom:.25rem solid var(--warning)}}.inu-open-api-endpoint .inu-endpoint-response-status.error{border-right:.25rem solid var(--danger);color:var(--danger)}@media(max-width:768px){.inu-open-api-endpoint .inu-endpoint-response-status.error{width:100%;border-right:none;border-bottom:.25rem solid var(--danger)}}\n"], dependencies: [{ kind: "component", type: InuOpenApiParameters, selector: "inu-open-api-parameters", inputs: ["data"] }, { kind: "component", type: InuOpenApiResponse, selector: "inu-open-api-response", inputs: ["data", "schemas"] }, { kind: "component", type: InuCode, selector: "inu-code", inputs: ["source", "url", "tag", "type", "title"] }, { kind: "component", type: InuIcon, selector: "inu-icon", inputs: ["icon", "defaultIcon", "styleclass", "size"] }] });
1002
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: InuOpenApiEndpoint, isStandalone: true, selector: "inu-open-api-endpoint", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, schemas: { classPropertyName: "schemas", publicName: "schemas", isSignal: true, isRequired: false, transformFunction: null } }, providers: [], ngImport: i0, template: "@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", styles: [".inu-open-api-endpoint{border:1px solid var(--neutral-light);margin-bottom:0rem}.inu-open-api-endpoint header{display:flex;padding:.25rem 2rem .25rem .25rem;align-items:center}.inu-open-api-endpoint header h2{flex:1;display:flex;gap:2rem;color:var(--text-color);font-weight:400;font-size:160%}.inu-open-api-endpoint header h2 .inu-endpoint-verb{width:5rem;font-weight:700;text-transform:uppercase}.inu-open-api-endpoint header span{display:flex;height:2rem}.inu-open-api-endpoint .inu-open-api-endpoint-content .inu-open-api-endpoint-content-display{display:none}.inu-open-api-endpoint .inu-open-api-endpoint-content .inu-open-api-endpoint-content-display.show{padding:1rem;display:flex;gap:2rem;flex-direction:column;background-color:var(--background)}.inu-open-api-endpoint .inu-open-api-endpoint-content .inu-open-api-endpoint-content-display.show fieldset{padding:1rem;border-left:.15rem solid transparent;transition:border-left-color .15s}.inu-open-api-endpoint .inu-open-api-endpoint-content .inu-open-api-endpoint-content-display.show fieldset:hover{border-left:.15rem solid var(--neutral)}.inu-open-api-endpoint .inu-open-api-endpoint-content .inu-open-api-endpoint-content-display.show fieldset label{font-weight:bolder;font-size:120%;border-bottom:1px solid var(--neutral);width:100%;margin-bottom:2rem}.inu-open-api-endpoint .response .response-table tr{border-bottom:.2rem solid var(--neutral)}.inu-open-api-endpoint .description-content{padding-top:1rem}.inu-open-api-endpoint.get{background:var(--endpoint-get-detail-background);border-color:var(--endpoint-get-background)}.inu-open-api-endpoint.get header h2{color:var(--endpoint-get-background-darker)}.inu-open-api-endpoint.head{background:var(--endpoint-head-detail-background);border-color:var(--endpoint-head-background)}.inu-open-api-endpoint.head header h2{color:var(--endpoint-head-background-darker)}.inu-open-api-endpoint.post{background:var(--endpoint-post-detail-background);border-color:var(--endpoint-post-background)}.inu-open-api-endpoint.post header h2{color:var(--endpoint-post-background-darker)}.inu-open-api-endpoint.put{background:var(--endpoint-put-detail-background);border-color:var(--endpoint-put-background)}.inu-open-api-endpoint.put header h2{color:var(--endpoint-put-background-darker)}.inu-open-api-endpoint.patch{background:var(--endpoint-patch-detail-background);border-color:var(--endpoint-patch-background)}.inu-open-api-endpoint.patch header h2{color:var(--endpoint-patch-background-darker)}.inu-open-api-endpoint.delete{background:var(--endpoint-delete-detail-background);border-color:var(--endpoint-delete-background)}.inu-open-api-endpoint.delete header h2{color:var(--endpoint-delete-background-darker)}.inu-open-api-endpoint.option{background:var(--endpoint-option-detail-background);border-color:var(--endpoint-option-background)}.inu-open-api-endpoint.option{background:var(--endpoint-trace-detail-background);border-color:var(--endpoint-trace-background)}.inu-open-api-endpoint .inu-endpoint-response-status{width:10%;max-width:5rem;min-width:3rem}@media(max-width:768px){.inu-open-api-endpoint .inu-endpoint-response-status{width:100%;max-width:100%;min-width:100%}}.inu-open-api-endpoint .response-table-body .flex-table-body-row{display:flex;flex-direction:row;justify-content:space-between}@media(max-width:768px){.inu-open-api-endpoint .response-table-body .flex-table-body-row{flex-direction:column}}.inu-open-api-endpoint .response-table-body .flex-table-body-row .description-content{flex:1}.inu-open-api-endpoint .inu-endpoint-response-status{margin-right:.5rem;font-weight:700;display:inline-flex;align-items:center}.inu-open-api-endpoint .inu-endpoint-response-status.success{border-right:.25rem solid var(--success);color:var(--success-dark)}@media(max-width:768px){.inu-open-api-endpoint .inu-endpoint-response-status.success{width:100%;border-right:none;border-bottom:.25rem solid var(--success)}}.inu-open-api-endpoint .inu-endpoint-response-status.warning{border-right:.25rem solid var(--warning);color:var(--warning-dark)}@media(max-width:768px){.inu-open-api-endpoint .inu-endpoint-response-status.warning{width:100%;border-right:none;border-bottom:.25rem solid var(--warning)}}.inu-open-api-endpoint .inu-endpoint-response-status.error{border-right:.25rem solid var(--danger);color:var(--danger)}@media(max-width:768px){.inu-open-api-endpoint .inu-endpoint-response-status.error{width:100%;border-right:none;border-bottom:.25rem solid var(--danger)}}\n"], dependencies: [{ kind: "component", type: InuOpenApiParameters, selector: "inu-open-api-parameters", inputs: ["data"] }, { kind: "component", type: InuOpenApiResponse, selector: "inu-open-api-response", inputs: ["data", "schemas"] }, { kind: "component", type: InuCode, selector: "inu-code", inputs: ["source", "url", "tag", "type", "title", "notificationLabel", "notificationMessage", "iconNotification"] }, { kind: "component", type: InuIcon, selector: "inu-icon", inputs: ["icon", "defaultIcon", "styleclass", "size"] }] });
1003
1003
  }
1004
1004
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuOpenApiEndpoint, decorators: [{
1005
1005
  type: Component,
@@ -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';\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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"}
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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"}
@@ -12,11 +12,11 @@ class InuPageLayout {
12
12
  menuTemplate = computed(() => this.registry.getTemplate('menu'), ...(ngDevMode ? [{ debugName: "menuTemplate" }] : []));
13
13
  registry = inject(InuTemplateRegistryService);
14
14
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuPageLayout, deps: [], target: i0.ɵɵFactoryTarget.Component });
15
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: InuPageLayout, isStandalone: true, selector: "inu-page-layout", inputs: { links: { classPropertyName: "links", publicName: "links", isSignal: true, isRequired: false, transformFunction: null } }, providers: [InuTemplateRegistryService], ngImport: i0, template: "<div class=\"inu-page-layout\">\n <section class=\"inu-page-layout-section\">\n <div class=\"inu-page-layout-sidebar\">\n @if(menuTemplate()){\n <ng-container *ngTemplateOutlet=\"menuTemplate()\"></ng-container>\n }\n @else {\n <inu-aside-menu [links]=\"links()\"></inu-aside-menu>\n }\n </div>\n <div class=\"inu-page-layout-content\">\n <ng-content/>\n </div>\n </section>\n <div class=\"inu-page-layout-bottom-margin\"></div>\n</div>\n\n", styles: [".inu-page-layout{margin-top:3.1rem}.inu-page-layout .inu-page-layout-section{display:flex;flex-direction:row;gap:2rem}.inu-page-layout .inu-page-layout-section .inu-page-layout-sidebar{min-width:18rem;min-height:100vh;background-color:#fffefe;border-bottom:.15rem solid transparent;border-right:.15rem solid #9e9e9e}.inu-page-layout .inu-page-layout-section .inu-page-layout-content{flex:1;padding-top:1rem;padding-right:1rem;width:calc(100vw - 21rem)}.inu-page-layout .inu-page-layout-section .inu-page-layout-content main{margin-top:2rem}.inu-page-layout .inu-page-layout-section .inu-page-layout-content article{margin-bottom:4rem}.inu-page-layout .inu-page-layout-section .inu-page-layout-content article .inu-code{margin-bottom:2rem}@media(max-width:920px){.inu-page-layout .inu-page-layout-section{flex-direction:column}.inu-page-layout .inu-page-layout-section .inu-page-layout-sidebar{min-height:auto;border-bottom:.15rem solid #9e9e9e}}@media print{aside{display:none}.inu-page-layout-section .inu-page-layout-sidebar{display:none}.inu-page-layout-section .inu-page-layout-content{width:100%}}.inu-page-layout-bottom-margin{height:5rem}\n"], dependencies: [{ kind: "component", type: InuAsideMenu, selector: "inu-aside-menu", inputs: ["links"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
15
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: InuPageLayout, isStandalone: true, selector: "inu-page-layout", inputs: { links: { classPropertyName: "links", publicName: "links", isSignal: true, isRequired: false, transformFunction: null } }, providers: [InuTemplateRegistryService], ngImport: i0, template: "<div class=\"inu-page-layout\">\n <section class=\"inu-page-layout-section\">\n <div class=\"inu-page-layout-sidebar\">\n @if(menuTemplate()){\n <ng-container *ngTemplateOutlet=\"menuTemplate()\"></ng-container>\n }\n @else {\n <inu-aside-menu [links]=\"links()\"></inu-aside-menu>\n }\n </div>\n <div class=\"inu-page-layout-content\">\n <ng-content/>\n </div>\n </section>\n <div class=\"inu-page-layout-bottom-margin\"></div>\n</div>\n\n", styles: [".inu-page-layout{margin-top:3.1rem}.inu-page-layout .inu-page-layout-section{display:flex;flex-direction:row;gap:2rem}.inu-page-layout .inu-page-layout-section .inu-page-layout-sidebar{min-width:18rem;min-height:100vh;background-color:#fffefe;border-bottom:.15rem solid transparent;border-right:.15rem solid #9e9e9e}.inu-page-layout .inu-page-layout-section .inu-page-layout-content{flex:1;padding-top:1rem;padding-right:1rem;width:calc(100vw - 21rem)}.inu-page-layout .inu-page-layout-section .inu-page-layout-content main{margin-top:2rem}.inu-page-layout .inu-page-layout-section .inu-page-layout-content article{margin-bottom:4rem}.inu-page-layout .inu-page-layout-section .inu-page-layout-content article .inu-code{margin-bottom:2rem}@media(max-width:920px){.inu-page-layout .inu-page-layout-section{flex-direction:column}.inu-page-layout .inu-page-layout-section .inu-page-layout-sidebar{min-height:auto;border-bottom:.15rem solid #9e9e9e}.inu-page-layout .inu-page-layout-section .inu-page-layout-content{width:100%}}@media print{aside{display:none}.inu-page-layout-section .inu-page-layout-sidebar{display:none}.inu-page-layout-section .inu-page-layout-content{width:100%}}.inu-page-layout-bottom-margin{height:5rem}\n"], dependencies: [{ kind: "component", type: InuAsideMenu, selector: "inu-aside-menu", inputs: ["links"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
16
16
  }
17
17
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuPageLayout, decorators: [{
18
18
  type: Component,
19
- args: [{ selector: 'inu-page-layout', standalone: true, providers: [InuTemplateRegistryService], imports: [InuAsideMenu, NgTemplateOutlet], template: "<div class=\"inu-page-layout\">\n <section class=\"inu-page-layout-section\">\n <div class=\"inu-page-layout-sidebar\">\n @if(menuTemplate()){\n <ng-container *ngTemplateOutlet=\"menuTemplate()\"></ng-container>\n }\n @else {\n <inu-aside-menu [links]=\"links()\"></inu-aside-menu>\n }\n </div>\n <div class=\"inu-page-layout-content\">\n <ng-content/>\n </div>\n </section>\n <div class=\"inu-page-layout-bottom-margin\"></div>\n</div>\n\n", styles: [".inu-page-layout{margin-top:3.1rem}.inu-page-layout .inu-page-layout-section{display:flex;flex-direction:row;gap:2rem}.inu-page-layout .inu-page-layout-section .inu-page-layout-sidebar{min-width:18rem;min-height:100vh;background-color:#fffefe;border-bottom:.15rem solid transparent;border-right:.15rem solid #9e9e9e}.inu-page-layout .inu-page-layout-section .inu-page-layout-content{flex:1;padding-top:1rem;padding-right:1rem;width:calc(100vw - 21rem)}.inu-page-layout .inu-page-layout-section .inu-page-layout-content main{margin-top:2rem}.inu-page-layout .inu-page-layout-section .inu-page-layout-content article{margin-bottom:4rem}.inu-page-layout .inu-page-layout-section .inu-page-layout-content article .inu-code{margin-bottom:2rem}@media(max-width:920px){.inu-page-layout .inu-page-layout-section{flex-direction:column}.inu-page-layout .inu-page-layout-section .inu-page-layout-sidebar{min-height:auto;border-bottom:.15rem solid #9e9e9e}}@media print{aside{display:none}.inu-page-layout-section .inu-page-layout-sidebar{display:none}.inu-page-layout-section .inu-page-layout-content{width:100%}}.inu-page-layout-bottom-margin{height:5rem}\n"] }]
19
+ args: [{ selector: 'inu-page-layout', standalone: true, providers: [InuTemplateRegistryService], imports: [InuAsideMenu, NgTemplateOutlet], template: "<div class=\"inu-page-layout\">\n <section class=\"inu-page-layout-section\">\n <div class=\"inu-page-layout-sidebar\">\n @if(menuTemplate()){\n <ng-container *ngTemplateOutlet=\"menuTemplate()\"></ng-container>\n }\n @else {\n <inu-aside-menu [links]=\"links()\"></inu-aside-menu>\n }\n </div>\n <div class=\"inu-page-layout-content\">\n <ng-content/>\n </div>\n </section>\n <div class=\"inu-page-layout-bottom-margin\"></div>\n</div>\n\n", styles: [".inu-page-layout{margin-top:3.1rem}.inu-page-layout .inu-page-layout-section{display:flex;flex-direction:row;gap:2rem}.inu-page-layout .inu-page-layout-section .inu-page-layout-sidebar{min-width:18rem;min-height:100vh;background-color:#fffefe;border-bottom:.15rem solid transparent;border-right:.15rem solid #9e9e9e}.inu-page-layout .inu-page-layout-section .inu-page-layout-content{flex:1;padding-top:1rem;padding-right:1rem;width:calc(100vw - 21rem)}.inu-page-layout .inu-page-layout-section .inu-page-layout-content main{margin-top:2rem}.inu-page-layout .inu-page-layout-section .inu-page-layout-content article{margin-bottom:4rem}.inu-page-layout .inu-page-layout-section .inu-page-layout-content article .inu-code{margin-bottom:2rem}@media(max-width:920px){.inu-page-layout .inu-page-layout-section{flex-direction:column}.inu-page-layout .inu-page-layout-section .inu-page-layout-sidebar{min-height:auto;border-bottom:.15rem solid #9e9e9e}.inu-page-layout .inu-page-layout-section .inu-page-layout-content{width:100%}}@media print{aside{display:none}.inu-page-layout-section .inu-page-layout-sidebar{display:none}.inu-page-layout-section .inu-page-layout-content{width:100%}}.inu-page-layout-bottom-margin{height:5rem}\n"] }]
20
20
  }], propDecorators: { links: [{ type: i0.Input, args: [{ isSignal: true, alias: "links", required: false }] }] } });
21
21
 
22
22
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"inugami-ng-components-inu-page-layout.mjs","sources":["../../../projects/inugami-ng/components/inu-page-layout/inu-page-layout.ts","../../../projects/inugami-ng/components/inu-page-layout/inu-page-layout.html","../../../projects/inugami-ng/components/inu-page-layout/inugami-ng-components-inu-page-layout.ts"],"sourcesContent":["import {Component, computed, inject, input} from '@angular/core';\nimport {InuTemplateRegistryService} from 'inugami-ng/directives';\nimport {InuAsideMenu} from 'inugami-ng/components/inu-aside-menu'\nimport {InuSiteLink} from 'inugami-ng/models'\nimport {NgTemplateOutlet} from '@angular/common'\n\n@Component({\n selector : 'inu-page-layout',\n standalone : true,\n providers : [InuTemplateRegistryService],\n imports: [InuAsideMenu, NgTemplateOutlet],\n templateUrl: './inu-page-layout.html',\n styleUrl : './inu-page-layout.scss',\n })\nexport class InuPageLayout {\n\n //==================================================================================================================\n // ATTRIBUTES\n //==================================================================================================================\n links = input<InuSiteLink[]>([]);\n menuTemplate = computed(() => this.registry.getTemplate('menu'));\n registry: InuTemplateRegistryService = inject(InuTemplateRegistryService);\n}\n","<div class=\"inu-page-layout\">\n <section class=\"inu-page-layout-section\">\n <div class=\"inu-page-layout-sidebar\">\n @if(menuTemplate()){\n <ng-container *ngTemplateOutlet=\"menuTemplate()\"></ng-container>\n }\n @else {\n <inu-aside-menu [links]=\"links()\"></inu-aside-menu>\n }\n </div>\n <div class=\"inu-page-layout-content\">\n <ng-content/>\n </div>\n </section>\n <div class=\"inu-page-layout-bottom-margin\"></div>\n</div>\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;MAca,aAAa,CAAA;;;;AAKxB,IAAA,KAAK,GAAG,KAAK,CAAgB,EAAE,iDAAC;AAChC,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,wDAAC;AAChE,IAAA,QAAQ,GAA+B,MAAM,CAAC,0BAA0B,CAAC;uGAP9D,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EALA,CAAC,0BAA0B,CAAC,0BCTtD,gfAiBA,EAAA,MAAA,EAAA,CAAA,6nCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDPuB,YAAY,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAIxC,aAAa,EAAA,UAAA,EAAA,CAAA;kBARzB,SAAS;+BACgB,iBAAiB,EAAA,UAAA,EACjB,IAAI,EAAA,SAAA,EACJ,CAAC,0BAA0B,CAAC,EAAA,OAAA,EAChC,CAAC,YAAY,EAAE,gBAAgB,CAAC,EAAA,QAAA,EAAA,gfAAA,EAAA,MAAA,EAAA,CAAA,6nCAAA,CAAA,EAAA;;;AEVtD;;AAEG;;;;"}
1
+ {"version":3,"file":"inugami-ng-components-inu-page-layout.mjs","sources":["../../../projects/inugami-ng/components/inu-page-layout/inu-page-layout.ts","../../../projects/inugami-ng/components/inu-page-layout/inu-page-layout.html","../../../projects/inugami-ng/components/inu-page-layout/inugami-ng-components-inu-page-layout.ts"],"sourcesContent":["import {Component, computed, inject, input} from '@angular/core';\nimport {InuTemplateRegistryService} from 'inugami-ng/directives';\nimport {InuAsideMenu} from 'inugami-ng/components/inu-aside-menu'\nimport {InuSiteLink} from 'inugami-ng/models'\nimport {NgTemplateOutlet} from '@angular/common'\n\n@Component({\n selector : 'inu-page-layout',\n standalone : true,\n providers : [InuTemplateRegistryService],\n imports: [InuAsideMenu, NgTemplateOutlet],\n templateUrl: './inu-page-layout.html',\n styleUrl : './inu-page-layout.scss',\n })\nexport class InuPageLayout {\n\n //==================================================================================================================\n // ATTRIBUTES\n //==================================================================================================================\n links = input<InuSiteLink[]>([]);\n menuTemplate = computed(() => this.registry.getTemplate('menu'));\n registry: InuTemplateRegistryService = inject(InuTemplateRegistryService);\n}\n","<div class=\"inu-page-layout\">\n <section class=\"inu-page-layout-section\">\n <div class=\"inu-page-layout-sidebar\">\n @if(menuTemplate()){\n <ng-container *ngTemplateOutlet=\"menuTemplate()\"></ng-container>\n }\n @else {\n <inu-aside-menu [links]=\"links()\"></inu-aside-menu>\n }\n </div>\n <div class=\"inu-page-layout-content\">\n <ng-content/>\n </div>\n </section>\n <div class=\"inu-page-layout-bottom-margin\"></div>\n</div>\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;MAca,aAAa,CAAA;;;;AAKxB,IAAA,KAAK,GAAG,KAAK,CAAgB,EAAE,iDAAC;AAChC,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,wDAAC;AAChE,IAAA,QAAQ,GAA+B,MAAM,CAAC,0BAA0B,CAAC;uGAP9D,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EALA,CAAC,0BAA0B,CAAC,0BCTtD,gfAiBA,EAAA,MAAA,EAAA,CAAA,2sCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDPuB,YAAY,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAIxC,aAAa,EAAA,UAAA,EAAA,CAAA;kBARzB,SAAS;+BACgB,iBAAiB,EAAA,UAAA,EACjB,IAAI,EAAA,SAAA,EACJ,CAAC,0BAA0B,CAAC,EAAA,OAAA,EAChC,CAAC,YAAY,EAAE,gBAAgB,CAAC,EAAA,QAAA,EAAA,gfAAA,EAAA,MAAA,EAAA,CAAA,2sCAAA,CAAA,EAAA;;;AEVtD;;AAEG;;;;"}
@@ -0,0 +1,136 @@
1
+ import * as i0 from '@angular/core';
2
+ import { input, viewChild, signal, computed, inject, ElementRef, HostListener, Component } from '@angular/core';
3
+ import { InuIcon } from 'inugami-icons';
4
+ import { InuTemplateRegistryService } from 'inugami-ng/directives';
5
+ import { NgTemplateOutlet, NgClass } from '@angular/common';
6
+
7
+ class InuToolTips {
8
+ //====================================================================================================================
9
+ // ATTRIBUTES
10
+ //====================================================================================================================
11
+ icon = input('info', ...(ngDevMode ? [{ debugName: "icon" }] : []));
12
+ message = input(...(ngDevMode ? [undefined, { debugName: "message" }] : []));
13
+ timeout = input(1000, ...(ngDevMode ? [{ debugName: "timeout" }] : []));
14
+ marginY = input(-70, ...(ngDevMode ? [{ debugName: "marginY" }] : []));
15
+ marginX = input(15, ...(ngDevMode ? [{ debugName: "marginX" }] : []));
16
+ autoClosable = input(true, ...(ngDevMode ? [{ debugName: "autoClosable" }] : []));
17
+ closeDuration = input(3000, ...(ngDevMode ? [{ debugName: "closeDuration" }] : []));
18
+ messageNode = viewChild('messageNode', ...(ngDevMode ? [{ debugName: "messageNode" }] : []));
19
+ contentNode = viewChild('contentNode', ...(ngDevMode ? [{ debugName: "contentNode" }] : []));
20
+ display = signal(false, ...(ngDevMode ? [{ debugName: "display" }] : []));
21
+ position = signal('', ...(ngDevMode ? [{ debugName: "position" }] : []));
22
+ messageTemplate = computed(() => this.registry.getTemplate('message'), ...(ngDevMode ? [{ debugName: "messageTemplate" }] : []));
23
+ ctrlPressed = signal(false, ...(ngDevMode ? [{ debugName: "ctrlPressed" }] : []));
24
+ mouseOver = signal(false, ...(ngDevMode ? [{ debugName: "mouseOver" }] : []));
25
+ registry = inject(InuTemplateRegistryService);
26
+ el = inject(ElementRef);
27
+ closeTimer;
28
+ //====================================================================================================================
29
+ // ACTIONS
30
+ //====================================================================================================================
31
+ toggleMessage(state) {
32
+ if (state === this.display())
33
+ return;
34
+ const value = this.display();
35
+ this.display.set(!value);
36
+ this.position.set(`top:${-500}px; left:${-500}px`);
37
+ setTimeout(() => this.refreshPosition(), 0);
38
+ }
39
+ //====================================================================================================================
40
+ // EVENT
41
+ //====================================================================================================================
42
+ onScroll() {
43
+ if (this.display()) {
44
+ this.refreshPosition();
45
+ }
46
+ }
47
+ onResize() {
48
+ if (this.display()) {
49
+ this.refreshPosition();
50
+ }
51
+ }
52
+ onKeyDown(event) {
53
+ if (event.ctrlKey)
54
+ this.ctrlPressed.set(true);
55
+ if (this.mouseOver()) {
56
+ this.openMessageIfRequired(true);
57
+ }
58
+ }
59
+ onKeyUp(event) {
60
+ if (!event.ctrlKey)
61
+ this.ctrlPressed.set(false);
62
+ }
63
+ onMouseEnter() {
64
+ this.mouseOver.set(true);
65
+ this.openMessageIfRequired(true);
66
+ }
67
+ onMouseLeave() {
68
+ this.mouseOver.set(false);
69
+ }
70
+ openMessageIfRequired(state) {
71
+ if (this.ctrlPressed() && this.mouseOver()) {
72
+ this.toggleMessage(state);
73
+ if (this.display()) {
74
+ if (this.autoClosable()) {
75
+ if (this.autoClosable()) {
76
+ this.clearAutoClose();
77
+ this.closeTimer = setTimeout(() => {
78
+ this.toggleMessage(false);
79
+ }, this.closeDuration());
80
+ }
81
+ }
82
+ }
83
+ }
84
+ }
85
+ refreshPosition() {
86
+ const display = this.display();
87
+ const compoPosition = this.contentNode()?.nativeElement?.getBoundingClientRect();
88
+ const msgPosition = this.messageNode()?.nativeElement?.getBoundingClientRect();
89
+ if (!display || !compoPosition || !msgPosition) {
90
+ return;
91
+ }
92
+ console.log('scroo', window.scrollY, window.scrollX);
93
+ const scrollTop = window.scrollY || document.documentElement.scrollTop;
94
+ const scrollLeft = window.scrollX || document.documentElement.scrollLeft;
95
+ let y = compoPosition.top + scrollTop + (this.marginY() + msgPosition.height);
96
+ let x = compoPosition.left + scrollLeft + (this.marginX() + compoPosition.width);
97
+ this.position.set(`top:${y}px; left:${x}px`);
98
+ }
99
+ clearAutoClose() {
100
+ if (this.closeTimer) {
101
+ clearTimeout(this.closeTimer);
102
+ this.closeTimer = undefined;
103
+ }
104
+ }
105
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuToolTips, deps: [], target: i0.ɵɵFactoryTarget.Component });
106
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: InuToolTips, isStandalone: true, selector: "inu-tool-tips", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: false, transformFunction: null }, timeout: { classPropertyName: "timeout", publicName: "timeout", isSignal: true, isRequired: false, transformFunction: null }, marginY: { classPropertyName: "marginY", publicName: "marginY", isSignal: true, isRequired: false, transformFunction: null }, marginX: { classPropertyName: "marginX", publicName: "marginX", isSignal: true, isRequired: false, transformFunction: null }, autoClosable: { classPropertyName: "autoClosable", publicName: "autoClosable", isSignal: true, isRequired: false, transformFunction: null }, closeDuration: { classPropertyName: "closeDuration", publicName: "closeDuration", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "window:scroll": "onScroll()", "window:resize": "onResize()", "window:keydown": "onKeyDown($event)", "window:keyup": "onKeyUp($event)", "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()" } }, providers: [InuTemplateRegistryService], viewQueries: [{ propertyName: "messageNode", first: true, predicate: ["messageNode"], descendants: true, isSignal: true }, { propertyName: "contentNode", first: true, predicate: ["contentNode"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"inu-tool-tips-message\" [ngClass]=\"{'display':display()}\" [style]=\"position()\" #messageNode>\n @if(messageTemplate()){\n <ng-container *ngTemplateOutlet=\"messageTemplate()\"></ng-container>\n } @else if (message()){\n {{message()}}\n }\n</div>\n\n<span class=\"inu-tool-tips\">\n <span class=\"inu-tool-tips-content\" #contentNode>\n <ng-content />\n </span>\n <span class=\"inu-tool-tips-button\" (click)=\"toggleMessage()\">\n <inu-icon [icon]=\"icon()\" [size]=\"0.5\"></inu-icon>\n </span>\n</span>\n\n", styles: [".inu-tool-tips{display:flex}.inu-tool-tips .inu-tool-tips-button{border-radius:1rem;width:.7rem;height:.7rem;border:1px solid var(--secondary-dark);fill:var(--secondary-dark);display:flex;justify-content:center;align-items:center}.inu-tool-tips-message{position:absolute;z-index:1000;background-color:var(--neutral-dark-extra);color:var(--secondary-light-extra);padding:.5rem;opacity:0;visibility:hidden;border-radius:4px;box-shadow:0 4px 6px #0000004d;pointer-events:none}.inu-tool-tips-message.display{opacity:1;visibility:visible;max-width:20rem;white-space:normal;overflow-wrap:anywhere}\n"], dependencies: [{ kind: "component", type: InuIcon, selector: "inu-icon", inputs: ["icon", "defaultIcon", "styleclass", "size"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
107
+ }
108
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuToolTips, decorators: [{
109
+ type: Component,
110
+ args: [{ selector: 'inu-tool-tips', standalone: true, providers: [InuTemplateRegistryService], imports: [InuIcon, NgTemplateOutlet, NgClass], template: "<div class=\"inu-tool-tips-message\" [ngClass]=\"{'display':display()}\" [style]=\"position()\" #messageNode>\n @if(messageTemplate()){\n <ng-container *ngTemplateOutlet=\"messageTemplate()\"></ng-container>\n } @else if (message()){\n {{message()}}\n }\n</div>\n\n<span class=\"inu-tool-tips\">\n <span class=\"inu-tool-tips-content\" #contentNode>\n <ng-content />\n </span>\n <span class=\"inu-tool-tips-button\" (click)=\"toggleMessage()\">\n <inu-icon [icon]=\"icon()\" [size]=\"0.5\"></inu-icon>\n </span>\n</span>\n\n", styles: [".inu-tool-tips{display:flex}.inu-tool-tips .inu-tool-tips-button{border-radius:1rem;width:.7rem;height:.7rem;border:1px solid var(--secondary-dark);fill:var(--secondary-dark);display:flex;justify-content:center;align-items:center}.inu-tool-tips-message{position:absolute;z-index:1000;background-color:var(--neutral-dark-extra);color:var(--secondary-light-extra);padding:.5rem;opacity:0;visibility:hidden;border-radius:4px;box-shadow:0 4px 6px #0000004d;pointer-events:none}.inu-tool-tips-message.display{opacity:1;visibility:visible;max-width:20rem;white-space:normal;overflow-wrap:anywhere}\n"] }]
111
+ }], propDecorators: { icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: false }] }], timeout: [{ type: i0.Input, args: [{ isSignal: true, alias: "timeout", required: false }] }], marginY: [{ type: i0.Input, args: [{ isSignal: true, alias: "marginY", required: false }] }], marginX: [{ type: i0.Input, args: [{ isSignal: true, alias: "marginX", required: false }] }], autoClosable: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoClosable", required: false }] }], closeDuration: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeDuration", required: false }] }], messageNode: [{ type: i0.ViewChild, args: ['messageNode', { isSignal: true }] }], contentNode: [{ type: i0.ViewChild, args: ['contentNode', { isSignal: true }] }], onScroll: [{
112
+ type: HostListener,
113
+ args: ['window:scroll']
114
+ }], onResize: [{
115
+ type: HostListener,
116
+ args: ['window:resize']
117
+ }], onKeyDown: [{
118
+ type: HostListener,
119
+ args: ['window:keydown', ['$event']]
120
+ }], onKeyUp: [{
121
+ type: HostListener,
122
+ args: ['window:keyup', ['$event']]
123
+ }], onMouseEnter: [{
124
+ type: HostListener,
125
+ args: ['mouseenter']
126
+ }], onMouseLeave: [{
127
+ type: HostListener,
128
+ args: ['mouseleave']
129
+ }] } });
130
+
131
+ /**
132
+ * Generated bundle index. Do not edit.
133
+ */
134
+
135
+ export { InuToolTips };
136
+ //# sourceMappingURL=inugami-ng-components-inu-tool-tips.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inugami-ng-components-inu-tool-tips.mjs","sources":["../../../projects/inugami-ng/components/inu-tool-tips/inu-tool-tips.ts","../../../projects/inugami-ng/components/inu-tool-tips/inu-tool-tips.html","../../../projects/inugami-ng/components/inu-tool-tips/inugami-ng-components-inu-tool-tips.ts"],"sourcesContent":["import {\n Component,\n computed,\n ElementRef,\n HostListener,\n inject,\n input,\n signal,\n viewChild\n} from '@angular/core';\nimport {InuIcon} from 'inugami-icons';\nimport {InuTemplateRegistryService} from 'inugami-ng/directives';\nimport {NgClass, NgTemplateOutlet} from '@angular/common';\n\n@Component({\n selector : 'inu-tool-tips',\n standalone : true,\n providers : [InuTemplateRegistryService],\n imports : [InuIcon, NgTemplateOutlet, NgClass],\n templateUrl: './inu-tool-tips.html',\n styleUrl : './inu-tool-tips.scss',\n })\nexport class InuToolTips {\n\n //====================================================================================================================\n // ATTRIBUTES\n //====================================================================================================================\n icon = input<string>('info');\n message = input<string>();\n timeout = input<number>(1000);\n marginY = input<number>(-70);\n marginX = input<number>(15);\n autoClosable = input<boolean>(true);\n closeDuration = input<number>(3000);\n\n messageNode = viewChild<ElementRef<HTMLElement>>('messageNode');\n contentNode = viewChild<ElementRef<HTMLElement>>('contentNode');\n\n display = signal<boolean>(false);\n position = signal<string>('');\n messageTemplate = computed(() => this.registry.getTemplate('message'));\n ctrlPressed = signal<boolean>(false);\n mouseOver = signal<boolean>(false);\n registry: InuTemplateRegistryService = inject(InuTemplateRegistryService);\n el = inject(ElementRef);\n\n private closeTimer?: any;\n //====================================================================================================================\n // ACTIONS\n //====================================================================================================================\n protected toggleMessage(state?: boolean) {\n if (state === this.display()) return;\n\n const value = this.display();\n this.display.set(!value);\n this.position.set(`top:${-500}px; left:${-500}px`);\n setTimeout(() => this.refreshPosition(), 0);\n }\n\n\n //====================================================================================================================\n // EVENT\n //====================================================================================================================\n @HostListener('window:scroll')\n onScroll() {\n if (this.display()) {\n this.refreshPosition();\n }\n }\n @HostListener('window:resize')\n onResize() {\n if (this.display()) {\n this.refreshPosition();\n }\n }\n\n @HostListener('window:keydown', ['$event'])\n onKeyDown(event: KeyboardEvent) {\n if (event.ctrlKey) this.ctrlPressed.set(true);\n if (this.mouseOver()) {\n this.openMessageIfRequired(true);\n }\n }\n\n @HostListener('window:keyup', ['$event'])\n onKeyUp(event: KeyboardEvent) {\n if (!event.ctrlKey) this.ctrlPressed.set(false);\n }\n\n @HostListener('mouseenter')\n onMouseEnter() {\n this.mouseOver.set(true);\n this.openMessageIfRequired(true);\n }\n\n @HostListener('mouseleave')\n onMouseLeave() {\n this.mouseOver.set(false);\n }\n\n openMessageIfRequired(state: boolean) {\n if (this.ctrlPressed() && this.mouseOver()) {\n this.toggleMessage(state);\n\n if (this.display()) {\n if (this.autoClosable()) {\n if (this.autoClosable()) {\n this.clearAutoClose();\n this.closeTimer = setTimeout(() => {\n this.toggleMessage(false);\n }, this.closeDuration());\n }\n }\n }\n }\n }\n\n refreshPosition() {\n const display = this.display();\n\n const compoPosition = this.contentNode()?.nativeElement?.getBoundingClientRect();\n const msgPosition = this.messageNode()?.nativeElement?.getBoundingClientRect();\n if (!display || !compoPosition || !msgPosition) {\n return;\n }\n\n\n console.log('scroo', window.scrollY,window.scrollX)\n const scrollTop = window.scrollY || document.documentElement.scrollTop;\n const scrollLeft = window.scrollX || document.documentElement.scrollLeft;\n\n let y = compoPosition.top + scrollTop + (this.marginY() + msgPosition.height);\n let x = compoPosition.left + scrollLeft + (this.marginX() + compoPosition.width);\n\n this.position.set(`top:${y}px; left:${x}px`);\n }\n\n private clearAutoClose() {\n if (this.closeTimer) {\n clearTimeout(this.closeTimer);\n this.closeTimer = undefined;\n }\n }\n}\n","<div class=\"inu-tool-tips-message\" [ngClass]=\"{'display':display()}\" [style]=\"position()\" #messageNode>\n @if(messageTemplate()){\n <ng-container *ngTemplateOutlet=\"messageTemplate()\"></ng-container>\n } @else if (message()){\n {{message()}}\n }\n</div>\n\n<span class=\"inu-tool-tips\">\n <span class=\"inu-tool-tips-content\" #contentNode>\n <ng-content />\n </span>\n <span class=\"inu-tool-tips-button\" (click)=\"toggleMessage()\">\n <inu-icon [icon]=\"icon()\" [size]=\"0.5\"></inu-icon>\n </span>\n</span>\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "inugami-ng",
3
- "version": "0.0.27",
3
+ "version": "0.0.29",
4
4
  "license": "GPL-3.0-only",
5
5
  "description": "Inugami project angular library",
6
6
  "keywords": [
@@ -108,6 +108,10 @@
108
108
  "types": "./types/inugami-ng-components-inu-toast.d.ts",
109
109
  "default": "./fesm2022/inugami-ng-components-inu-toast.mjs"
110
110
  },
111
+ "./components/inu-tool-tips": {
112
+ "types": "./types/inugami-ng-components-inu-tool-tips.d.ts",
113
+ "default": "./fesm2022/inugami-ng-components-inu-tool-tips.mjs"
114
+ },
111
115
  "./directives": {
112
116
  "types": "./types/inugami-ng-directives.d.ts",
113
117
  "default": "./fesm2022/inugami-ng-directives.mjs"
@@ -1,4 +1,6 @@
1
1
  import * as _angular_core from '@angular/core';
2
+ import { InuCopyServices } from 'inugami-ng/components/inu-copy';
3
+ import { InuToastServices } from 'inugami-ng/components/inu-toast';
2
4
 
3
5
  interface SourceCode {
4
6
  name: string;
@@ -18,21 +20,27 @@ declare class InuCode {
18
20
  tag: _angular_core.InputSignal<string | null | undefined>;
19
21
  type: _angular_core.InputSignal<string | null | undefined>;
20
22
  title: _angular_core.InputSignal<string | null | undefined>;
23
+ notificationLabel: _angular_core.InputSignal<string>;
24
+ notificationMessage: _angular_core.InputSignal<string>;
25
+ iconNotification: _angular_core.InputSignal<string>;
21
26
  private readonly http;
22
27
  private readonly cache;
23
28
  sourceCode: _angular_core.WritableSignal<string>;
24
29
  _title: _angular_core.WritableSignal<string>;
25
30
  _type: _angular_core.WritableSignal<string>;
31
+ copyService: InuCopyServices;
32
+ toastServices: InuToastServices;
26
33
  constructor();
27
34
  init(): void;
28
35
  loadFormUrl(url: string): void;
29
36
  initSourceCode(data: SourceCode[]): void;
30
37
  parseData(response: string, url: string): SourceCode[];
38
+ protected copyContent(): void;
31
39
  loadFormCache(url: string): SourceCode[] | undefined;
32
40
  setToCache(url: string, value: any): void;
33
41
  private cleanContent;
34
42
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<InuCode, never>;
35
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<InuCode, "inu-code", never, { "source": { "alias": "source"; "required": false; "isSignal": true; }; "url": { "alias": "url"; "required": false; "isSignal": true; }; "tag": { "alias": "tag"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
43
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<InuCode, "inu-code", never, { "source": { "alias": "source"; "required": false; "isSignal": true; }; "url": { "alias": "url"; "required": false; "isSignal": true; }; "tag": { "alias": "tag"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "notificationLabel": { "alias": "notificationLabel"; "required": false; "isSignal": true; }; "notificationMessage": { "alias": "notificationMessage"; "required": false; "isSignal": true; }; "iconNotification": { "alias": "iconNotification"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
36
44
  }
37
45
 
38
46
  export { InuCode };
@@ -0,0 +1,37 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { ElementRef } from '@angular/core';
3
+ import { InuTemplateRegistryService } from 'inugami-ng/directives';
4
+
5
+ declare class InuToolTips {
6
+ icon: _angular_core.InputSignal<string>;
7
+ message: _angular_core.InputSignal<string | undefined>;
8
+ timeout: _angular_core.InputSignal<number>;
9
+ marginY: _angular_core.InputSignal<number>;
10
+ marginX: _angular_core.InputSignal<number>;
11
+ autoClosable: _angular_core.InputSignal<boolean>;
12
+ closeDuration: _angular_core.InputSignal<number>;
13
+ messageNode: _angular_core.Signal<ElementRef<HTMLElement> | undefined>;
14
+ contentNode: _angular_core.Signal<ElementRef<HTMLElement> | undefined>;
15
+ display: _angular_core.WritableSignal<boolean>;
16
+ position: _angular_core.WritableSignal<string>;
17
+ messageTemplate: _angular_core.Signal<_angular_core.TemplateRef<any> | undefined>;
18
+ ctrlPressed: _angular_core.WritableSignal<boolean>;
19
+ mouseOver: _angular_core.WritableSignal<boolean>;
20
+ registry: InuTemplateRegistryService;
21
+ el: ElementRef<any>;
22
+ private closeTimer?;
23
+ protected toggleMessage(state?: boolean): void;
24
+ onScroll(): void;
25
+ onResize(): void;
26
+ onKeyDown(event: KeyboardEvent): void;
27
+ onKeyUp(event: KeyboardEvent): void;
28
+ onMouseEnter(): void;
29
+ onMouseLeave(): void;
30
+ openMessageIfRequired(state: boolean): void;
31
+ refreshPosition(): void;
32
+ private clearAutoClose;
33
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<InuToolTips, never>;
34
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<InuToolTips, "inu-tool-tips", never, { "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "message": { "alias": "message"; "required": false; "isSignal": true; }; "timeout": { "alias": "timeout"; "required": false; "isSignal": true; }; "marginY": { "alias": "marginY"; "required": false; "isSignal": true; }; "marginX": { "alias": "marginX"; "required": false; "isSignal": true; }; "autoClosable": { "alias": "autoClosable"; "required": false; "isSignal": true; }; "closeDuration": { "alias": "closeDuration"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
35
+ }
36
+
37
+ export { InuToolTips };