inugami-ng 0.0.8 → 0.0.9

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.
@@ -166,11 +166,11 @@ class InuCode {
166
166
  return result.join('\n');
167
167
  }
168
168
  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}.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"] }] });
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"] }] });
170
170
  }
171
171
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuCode, decorators: [{
172
172
  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}.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"] }]
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
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 }] }] } });
175
175
 
176
176
  /**
@@ -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 {CacheServices} 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(CacheServices);\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 const cacheKey = `inu-code_${url}`;\n const pending = this.cache.getPending(cacheKey);\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 {CacheServices} 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(CacheServices);\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 const cacheKey = `inu-code_${url}`;\n const pending = this.cache.getPending(cacheKey);\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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"}
@@ -0,0 +1,215 @@
1
+ import * as i0 from '@angular/core';
2
+ import { input, contentChildren, signal, effect, Component } from '@angular/core';
3
+ import { InuIcon } from 'inugami-icons';
4
+ import { UuidUtils } from 'inugami-ng/services';
5
+ import { JsonPipe } from '@angular/common';
6
+
7
+ class InuDocItem {
8
+ //==================================================================================================================
9
+ // ATTRIBUTES
10
+ //==================================================================================================================
11
+ styleClass = input('', ...(ngDevMode ? [{ debugName: "styleClass" }] : []));
12
+ icon = input('', ...(ngDevMode ? [{ debugName: "icon" }] : []));
13
+ title = input('', ...(ngDevMode ? [{ debugName: "title" }] : []));
14
+ href = input('', ...(ngDevMode ? [{ debugName: "href" }] : []));
15
+ id = input('', ...(ngDevMode ? [{ debugName: "id" }] : []));
16
+ level = input(2, ...(ngDevMode ? [{ debugName: "level" }] : []));
17
+ children = contentChildren(InuDocItem, ...(ngDevMode ? [{ debugName: "children" }] : []));
18
+ //
19
+ _styleClass = signal('', ...(ngDevMode ? [{ debugName: "_styleClass" }] : []));
20
+ iconSize = signal(1, ...(ngDevMode ? [{ debugName: "iconSize" }] : []));
21
+ data = signal(undefined, ...(ngDevMode ? [{ debugName: "data" }] : []));
22
+ _data = undefined;
23
+ uid = UuidUtils.buildUid();
24
+ //==================================================================================================================
25
+ // INIT
26
+ //==================================================================================================================
27
+ constructor() {
28
+ effect(() => {
29
+ this.initStyleClass();
30
+ this.init();
31
+ });
32
+ }
33
+ init() {
34
+ const title = this.title() ? this.title() : '';
35
+ const href = this.href() ? this.href() : '';
36
+ const id = this.id() ? this.id() : '';
37
+ const level = this.level() ? this.level() : 2;
38
+ const fullHref = [];
39
+ if (href) {
40
+ fullHref.push(href);
41
+ if (id) {
42
+ fullHref.push(id);
43
+ }
44
+ }
45
+ const value = {
46
+ title: title,
47
+ href: fullHref.join('#'),
48
+ id: id,
49
+ level: level
50
+ };
51
+ this._data = value;
52
+ this.data.set(value);
53
+ switch (level) {
54
+ case 1:
55
+ this.iconSize.set(3);
56
+ break;
57
+ case 2:
58
+ this.iconSize.set(2);
59
+ break;
60
+ default:
61
+ this.iconSize.set(1);
62
+ break;
63
+ }
64
+ }
65
+ //==================================================================================================================
66
+ // TOOLS
67
+ //==================================================================================================================
68
+ initStyleClass() {
69
+ const styles = ['inu-doc-item'];
70
+ const style = this.styleClass();
71
+ if (style) {
72
+ styles.push(style);
73
+ }
74
+ const level = this.level();
75
+ if (level) {
76
+ styles.push(`level-${level}`);
77
+ }
78
+ this._styleClass.set(styles.join(" "));
79
+ }
80
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuDocItem, deps: [], target: i0.ɵɵFactoryTarget.Component });
81
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: InuDocItem, isStandalone: true, selector: "inu-doc-item", inputs: { styleClass: { classPropertyName: "styleClass", publicName: "styleClass", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, href: { classPropertyName: "href", publicName: "href", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, level: { classPropertyName: "level", publicName: "level", isSignal: true, isRequired: false, transformFunction: null } }, providers: [], queries: [{ propertyName: "children", predicate: InuDocItem, isSignal: true }], ngImport: i0, template: "<section [class]=\"_styleClass()\" >\n <header [id]=\"data()?.id\">\n @if(data()?.href) {\n <a [href]=\"data()?.href\" class=\"anchor-link\">\n <div class=\"anchor\">\n @if(icon()){\n <div class=\"inug-doc-item-icon\">\n <inu-icon [icon]=\"icon()\" [size]=\"iconSize()\"></inu-icon>\n </div>\n }\n @if(data()?.level==1){\n <h1 class=\"title\">{{data()?.title}}</h1>\n }\n @if(data()?.level==2){\n <h2 class=\"title\">{{data()?.title}}</h2>\n }\n @else if (data()?.level==3) {\n <h3 class=\"title\">{{data()?.title}}</h3>\n }\n @else if (data()?.level==4) {\n <h4 class=\"title\">{{data()?.title}}</h4>\n }\n @else if (data()?.level==5) {\n <h5 class=\"title\">{{data()?.title}}</h5>\n }\n @else {\n <h6 class=\"title\">{{data()?.title}}</h6>\n }\n <div class=\"anchor-icon\">\n <inu-icon icon=\"link\" [size]=\"1\"></inu-icon>\n </div>\n </div>\n </a>\n }\n @else{\n <div class=\"anchor\">\n @if(icon()){\n <div class=\"inug-doc-item-icon\">\n <inu-icon [icon]=\"icon()\" [size]=\"iconSize()\"></inu-icon>\n </div>\n }\n @if(data()?.level==1){\n <h1 class=\"title\">{{data()?.title}}</h1>\n }\n @if(data()?.level==2){\n <h2 class=\"title\">{{data()?.title}}</h2>\n }\n @else if (data()?.level==3) {\n <h3 class=\"title\">{{data()?.title}}</h3>\n }\n @else if (data()?.level==4) {\n <h4 class=\"title\">{{data()?.title}}</h4>\n }\n @else if (data()?.level==5) {\n <h5 class=\"title\">{{data()?.title}}</h5>\n }\n @else {\n <h6 class=\"title\">{{data()?.title}}</h6>\n }\n <div class=\"anchor-icon\">\n <inu-icon icon=\"link\" [size]=\"1\"></inu-icon>\n </div>\n </div>\n }\n\n </header>\n <div class=\"content\">\n <ng-content></ng-content>\n </div>\n</section>\n", styles: [".inu-doc-item{display:flex;flex-direction:column}.inu-doc-item header{display:flex;width:100%}.inu-doc-item header .title{flex:1}.inu-doc-item header a:hover{text-decoration:none}.inu-doc-item header{border-bottom:.125rem solid transparent}.inu-doc-item header .anchor-icon{transition:fill .5s}.inu-doc-item header:hover{border-bottom:.125rem solid var(--neutral)}.inu-doc-item header:hover .anchor-icon{fill:var(--neutral)}.inu-doc-item header .anchor{display:flex;flex-direction:row;width:100%;align-content:baseline;gap:2rem}.inu-doc-item header .anchor-icon{fill:transparent}.inu-doc-item header h1{padding:0;margin:0}.inu-doc-item header h2{padding:0;margin:0}.inu-doc-item header h3{padding:0;margin:0}.inu-doc-item header h4{padding:0;margin:0}.inu-doc-item header h5{padding:0;margin:0}.inu-doc-item header h6{padding:0;margin:0}.inu-doc-item.level-1>header:hover{border-bottom:.125rem solid var(--primary-dark)}.inu-doc-item.level-2>header:hover{border-bottom:.125rem solid var(--primary-dark)}.inu-doc-item .content{width:100%;display:flex;flex-direction:column}\n"], dependencies: [{ kind: "component", type: InuIcon, selector: "inu-icon", inputs: ["icon", "defaultIcon", "styleclass", "size"] }] });
82
+ }
83
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuDocItem, decorators: [{
84
+ type: Component,
85
+ args: [{ selector: 'inu-doc-item', standalone: true, providers: [], imports: [
86
+ InuIcon
87
+ ], template: "<section [class]=\"_styleClass()\" >\n <header [id]=\"data()?.id\">\n @if(data()?.href) {\n <a [href]=\"data()?.href\" class=\"anchor-link\">\n <div class=\"anchor\">\n @if(icon()){\n <div class=\"inug-doc-item-icon\">\n <inu-icon [icon]=\"icon()\" [size]=\"iconSize()\"></inu-icon>\n </div>\n }\n @if(data()?.level==1){\n <h1 class=\"title\">{{data()?.title}}</h1>\n }\n @if(data()?.level==2){\n <h2 class=\"title\">{{data()?.title}}</h2>\n }\n @else if (data()?.level==3) {\n <h3 class=\"title\">{{data()?.title}}</h3>\n }\n @else if (data()?.level==4) {\n <h4 class=\"title\">{{data()?.title}}</h4>\n }\n @else if (data()?.level==5) {\n <h5 class=\"title\">{{data()?.title}}</h5>\n }\n @else {\n <h6 class=\"title\">{{data()?.title}}</h6>\n }\n <div class=\"anchor-icon\">\n <inu-icon icon=\"link\" [size]=\"1\"></inu-icon>\n </div>\n </div>\n </a>\n }\n @else{\n <div class=\"anchor\">\n @if(icon()){\n <div class=\"inug-doc-item-icon\">\n <inu-icon [icon]=\"icon()\" [size]=\"iconSize()\"></inu-icon>\n </div>\n }\n @if(data()?.level==1){\n <h1 class=\"title\">{{data()?.title}}</h1>\n }\n @if(data()?.level==2){\n <h2 class=\"title\">{{data()?.title}}</h2>\n }\n @else if (data()?.level==3) {\n <h3 class=\"title\">{{data()?.title}}</h3>\n }\n @else if (data()?.level==4) {\n <h4 class=\"title\">{{data()?.title}}</h4>\n }\n @else if (data()?.level==5) {\n <h5 class=\"title\">{{data()?.title}}</h5>\n }\n @else {\n <h6 class=\"title\">{{data()?.title}}</h6>\n }\n <div class=\"anchor-icon\">\n <inu-icon icon=\"link\" [size]=\"1\"></inu-icon>\n </div>\n </div>\n }\n\n </header>\n <div class=\"content\">\n <ng-content></ng-content>\n </div>\n</section>\n", styles: [".inu-doc-item{display:flex;flex-direction:column}.inu-doc-item header{display:flex;width:100%}.inu-doc-item header .title{flex:1}.inu-doc-item header a:hover{text-decoration:none}.inu-doc-item header{border-bottom:.125rem solid transparent}.inu-doc-item header .anchor-icon{transition:fill .5s}.inu-doc-item header:hover{border-bottom:.125rem solid var(--neutral)}.inu-doc-item header:hover .anchor-icon{fill:var(--neutral)}.inu-doc-item header .anchor{display:flex;flex-direction:row;width:100%;align-content:baseline;gap:2rem}.inu-doc-item header .anchor-icon{fill:transparent}.inu-doc-item header h1{padding:0;margin:0}.inu-doc-item header h2{padding:0;margin:0}.inu-doc-item header h3{padding:0;margin:0}.inu-doc-item header h4{padding:0;margin:0}.inu-doc-item header h5{padding:0;margin:0}.inu-doc-item header h6{padding:0;margin:0}.inu-doc-item.level-1>header:hover{border-bottom:.125rem solid var(--primary-dark)}.inu-doc-item.level-2>header:hover{border-bottom:.125rem solid var(--primary-dark)}.inu-doc-item .content{width:100%;display:flex;flex-direction:column}\n"] }]
88
+ }], ctorParameters: () => [], propDecorators: { styleClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "styleClass", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], href: [{ type: i0.Input, args: [{ isSignal: true, alias: "href", required: false }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], level: [{ type: i0.Input, args: [{ isSignal: true, alias: "level", required: false }] }], children: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => InuDocItem), { isSignal: true }] }] } });
89
+
90
+ class InuDocSummaryNode {
91
+ //==================================================================================================================
92
+ // ATTRIBUTES
93
+ //==================================================================================================================
94
+ nodes = input(undefined, ...(ngDevMode ? [{ debugName: "nodes" }] : []));
95
+ maxLevel = input(3, ...(ngDevMode ? [{ debugName: "maxLevel" }] : []));
96
+ //==================================================================================================================
97
+ // BUILDER
98
+ //==================================================================================================================
99
+ buildHref(nodeValue) {
100
+ const result = [];
101
+ const href = nodeValue.href();
102
+ if (href) {
103
+ result.push(href);
104
+ const id = nodeValue.id();
105
+ if (id) {
106
+ result.push(id);
107
+ }
108
+ }
109
+ return result.join('#');
110
+ }
111
+ getTitle(value) {
112
+ return value && value.title ? value.title : '';
113
+ }
114
+ computeClass(node) {
115
+ const result = [];
116
+ result.push('level');
117
+ result.push('level-' + node.level);
118
+ return result.join(' ');
119
+ }
120
+ acceptedLevels() {
121
+ const nodes = this.nodes();
122
+ if (!nodes || nodes.length == 0) {
123
+ return false;
124
+ }
125
+ const level = nodes[0].level + 1;
126
+ const maxLevel = this.maxLevel();
127
+ return level <= maxLevel;
128
+ }
129
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuDocSummaryNode, deps: [], target: i0.ɵɵFactoryTarget.Component });
130
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: InuDocSummaryNode, isStandalone: true, selector: "inu-doc-summary-node", inputs: { nodes: { classPropertyName: "nodes", publicName: "nodes", isSignal: true, isRequired: false, transformFunction: null }, maxLevel: { classPropertyName: "maxLevel", publicName: "maxLevel", isSignal: true, isRequired: false, transformFunction: null } }, providers: [], ngImport: i0, template: "@if (nodes() && acceptedLevels()) {\n <ul class=\"inu-doc-summary-node\">\n @for (node of nodes(); track node; ) {\n <li [class]=\"computeClass(node)\">\n <div class=\"inu-doc-summary-node-title\">\n @if (node.value?.href){\n <a [href]=\"node.value?.href\">\n <div class=\"inu-doc-summary-title\">{{node.value?.title!}}</div>\n </a>\n } @else {\n <div class=\"inu-doc-summary-title\">{{node.value?.title!}}</div>\n }\n </div>\n @if (node.children){\n <inu-doc-summary-node [nodes]=\"node.children\" [maxLevel]=\"maxLevel()\"> </inu-doc-summary-node>\n }\n </li>\n }\n </ul>\n}\n", styles: [".inu-doc-summary-node{list-style:square;margin:0;padding-left:1rem}.inu-doc-summary-node a{color:var(--text-color);text-decoration:none}.inu-doc-summary-node a:hover{text-decoration:underline}.inu-doc-summary-node .level{font-size:1rem}.inu-doc-summary-node .level-0 .inu-doc-summary-node-title{font-size:140%;color:var(--primary-dark)}.inu-doc-summary-node .level-1 .inu-doc-summary-node-title{font-size:120%;color:var(--neutral-dark)}.inu-doc-summary-node .level-2 .inu-doc-summary-node-title{font-size:100%;color:var(--neutral-dark)}\n"], dependencies: [{ kind: "component", type: InuDocSummaryNode, selector: "inu-doc-summary-node", inputs: ["nodes", "maxLevel"] }] });
131
+ }
132
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuDocSummaryNode, decorators: [{
133
+ type: Component,
134
+ args: [{ selector: 'inu-doc-summary-node', standalone: true, providers: [], imports: [
135
+ JsonPipe
136
+ ], template: "@if (nodes() && acceptedLevels()) {\n <ul class=\"inu-doc-summary-node\">\n @for (node of nodes(); track node; ) {\n <li [class]=\"computeClass(node)\">\n <div class=\"inu-doc-summary-node-title\">\n @if (node.value?.href){\n <a [href]=\"node.value?.href\">\n <div class=\"inu-doc-summary-title\">{{node.value?.title!}}</div>\n </a>\n } @else {\n <div class=\"inu-doc-summary-title\">{{node.value?.title!}}</div>\n }\n </div>\n @if (node.children){\n <inu-doc-summary-node [nodes]=\"node.children\" [maxLevel]=\"maxLevel()\"> </inu-doc-summary-node>\n }\n </li>\n }\n </ul>\n}\n", styles: [".inu-doc-summary-node{list-style:square;margin:0;padding-left:1rem}.inu-doc-summary-node a{color:var(--text-color);text-decoration:none}.inu-doc-summary-node a:hover{text-decoration:underline}.inu-doc-summary-node .level{font-size:1rem}.inu-doc-summary-node .level-0 .inu-doc-summary-node-title{font-size:140%;color:var(--primary-dark)}.inu-doc-summary-node .level-1 .inu-doc-summary-node-title{font-size:120%;color:var(--neutral-dark)}.inu-doc-summary-node .level-2 .inu-doc-summary-node-title{font-size:100%;color:var(--neutral-dark)}\n"] }]
137
+ }], propDecorators: { nodes: [{ type: i0.Input, args: [{ isSignal: true, alias: "nodes", required: false }] }], maxLevel: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxLevel", required: false }] }] } });
138
+
139
+ class InuDocSummary {
140
+ //==================================================================================================================
141
+ // ATTRIBUTES
142
+ //==================================================================================================================
143
+ styleClass = input('', ...(ngDevMode ? [{ debugName: "styleClass" }] : []));
144
+ children = input(undefined, ...(ngDevMode ? [{ debugName: "children" }] : []));
145
+ maxLevel = input(3, ...(ngDevMode ? [{ debugName: "maxLevel" }] : []));
146
+ //
147
+ _styleClass = signal('', ...(ngDevMode ? [{ debugName: "_styleClass" }] : []));
148
+ nodes = signal([], ...(ngDevMode ? [{ debugName: "nodes" }] : []));
149
+ //==================================================================================================================
150
+ // INIT
151
+ //==================================================================================================================
152
+ constructor() {
153
+ effect(() => {
154
+ this.initStyleClass();
155
+ this.init();
156
+ });
157
+ }
158
+ ngAfterViewInit() {
159
+ this.init();
160
+ }
161
+ init() {
162
+ const children = this.children();
163
+ if (!children) {
164
+ return;
165
+ }
166
+ const compMap = new Map();
167
+ children.forEach(c => compMap.set(c.uid, c));
168
+ const parentMap = new Map(); // childUid -> parentUid
169
+ children.forEach(parent => {
170
+ const childrenOfThisParent = parent.children() || [];
171
+ childrenOfThisParent.forEach((child) => {
172
+ parentMap.set(child.uid, parent.uid);
173
+ });
174
+ });
175
+ const roots = children.filter(c => !parentMap.has(c.uid));
176
+ const result = roots.map(root => this.mapComponentToNode(root, 0));
177
+ this.nodes.set(result);
178
+ }
179
+ mapComponentToNode(comp, level) {
180
+ return {
181
+ uid: comp.uid,
182
+ level: level,
183
+ value: comp.data ? comp.data() : comp, // On récupère la valeur ou le composant
184
+ children: comp.children()
185
+ ? comp.children().map((child) => this.mapComponentToNode(child, level + 1))
186
+ : []
187
+ };
188
+ }
189
+ //==================================================================================================================
190
+ // TOOLS
191
+ //==================================================================================================================
192
+ initStyleClass() {
193
+ const styles = ['inu-doc-summary'];
194
+ const style = this.styleClass();
195
+ if (style) {
196
+ styles.push(style);
197
+ }
198
+ this._styleClass.set(styles.join(" "));
199
+ }
200
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuDocSummary, deps: [], target: i0.ɵɵFactoryTarget.Component });
201
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: InuDocSummary, isStandalone: true, selector: "inu-doc-summary", inputs: { styleClass: { classPropertyName: "styleClass", publicName: "styleClass", isSignal: true, isRequired: false, transformFunction: null }, children: { classPropertyName: "children", publicName: "children", isSignal: true, isRequired: false, transformFunction: null }, maxLevel: { classPropertyName: "maxLevel", publicName: "maxLevel", isSignal: true, isRequired: false, transformFunction: null } }, providers: [], ngImport: i0, template: "<div [class]=\"_styleClass()\" >\n @if (nodes()){\n <inu-doc-summary-node [nodes]=\"nodes()\" [maxLevel]=\"maxLevel()\"> </inu-doc-summary-node>\n }\n</div>\n", styles: [".inu-doc-item{display:flex;flex-direction:column}.inu-doc-item header{display:flex;width:100%}.inu-doc-item header .title{flex:1}.inu-doc-item header a:hover{text-decoration:none}.inu-doc-item header{border-bottom:.125rem solid transparent}.inu-doc-item header .anchor-icon{transition:fill .5s}.inu-doc-item header:hover{border-bottom:.125rem solid var(--neutral)}.inu-doc-item header:hover .anchor-icon{fill:var(--neutral)}.inu-doc-item header .anchor{display:flex;flex-direction:row;width:100%;align-content:baseline;gap:2rem}.inu-doc-item header .anchor-icon{fill:transparent}.inu-doc-item header h1{padding:0;margin:0}.inu-doc-item header h2{padding:0;margin:0}.inu-doc-item header h3{padding:0;margin:0}.inu-doc-item header h4{padding:0;margin:0}.inu-doc-item header h5{padding:0;margin:0}.inu-doc-item header h6{padding:0;margin:0}.inu-doc-item.level-1>header:hover{border-bottom:.125rem solid var(--primary-dark)}.inu-doc-item.level-2>header:hover{border-bottom:.125rem solid var(--primary-dark)}.inu-doc-item .content{width:100%;display:flex;flex-direction:column}\n"], dependencies: [{ kind: "component", type: InuDocSummaryNode, selector: "inu-doc-summary-node", inputs: ["nodes", "maxLevel"] }] });
202
+ }
203
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuDocSummary, decorators: [{
204
+ type: Component,
205
+ args: [{ selector: 'inu-doc-summary', standalone: true, providers: [], imports: [
206
+ InuDocSummaryNode
207
+ ], template: "<div [class]=\"_styleClass()\" >\n @if (nodes()){\n <inu-doc-summary-node [nodes]=\"nodes()\" [maxLevel]=\"maxLevel()\"> </inu-doc-summary-node>\n }\n</div>\n", styles: [".inu-doc-item{display:flex;flex-direction:column}.inu-doc-item header{display:flex;width:100%}.inu-doc-item header .title{flex:1}.inu-doc-item header a:hover{text-decoration:none}.inu-doc-item header{border-bottom:.125rem solid transparent}.inu-doc-item header .anchor-icon{transition:fill .5s}.inu-doc-item header:hover{border-bottom:.125rem solid var(--neutral)}.inu-doc-item header:hover .anchor-icon{fill:var(--neutral)}.inu-doc-item header .anchor{display:flex;flex-direction:row;width:100%;align-content:baseline;gap:2rem}.inu-doc-item header .anchor-icon{fill:transparent}.inu-doc-item header h1{padding:0;margin:0}.inu-doc-item header h2{padding:0;margin:0}.inu-doc-item header h3{padding:0;margin:0}.inu-doc-item header h4{padding:0;margin:0}.inu-doc-item header h5{padding:0;margin:0}.inu-doc-item header h6{padding:0;margin:0}.inu-doc-item.level-1>header:hover{border-bottom:.125rem solid var(--primary-dark)}.inu-doc-item.level-2>header:hover{border-bottom:.125rem solid var(--primary-dark)}.inu-doc-item .content{width:100%;display:flex;flex-direction:column}\n"] }]
208
+ }], ctorParameters: () => [], propDecorators: { styleClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "styleClass", required: false }] }], children: [{ type: i0.Input, args: [{ isSignal: true, alias: "children", required: false }] }], maxLevel: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxLevel", required: false }] }] } });
209
+
210
+ /**
211
+ * Generated bundle index. Do not edit.
212
+ */
213
+
214
+ export { InuDocItem, InuDocSummary };
215
+ //# sourceMappingURL=inugami-ng-components-inu-doc-item.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inugami-ng-components-inu-doc-item.mjs","sources":["../../../projects/inugami-ng/components/inu-doc-item/inu-doc-item.ts","../../../projects/inugami-ng/components/inu-doc-item/inu-doc-item.html","../../../projects/inugami-ng/components/inu-doc-item/inu-doc-summary/node/inu-doc-summary-node.ts","../../../projects/inugami-ng/components/inu-doc-item/inu-doc-summary/node/inu-doc-summary-node.html","../../../projects/inugami-ng/components/inu-doc-item/inu-doc-summary/inu-doc-summary.ts","../../../projects/inugami-ng/components/inu-doc-item/inu-doc-summary/inu-doc-summary.html","../../../projects/inugami-ng/components/inu-doc-item/inugami-ng-components-inu-doc-item.ts"],"sourcesContent":["import {Component, contentChildren, effect, input, signal, viewChildren} from '@angular/core';\nimport {InuDocItemComponentData} from './inu-doc-item.model';\nimport {InuIcon} from 'inugami-icons';\nimport {UuidUtils} from 'inugami-ng/services';\n\n@Component({\n selector: 'inu-doc-item',\n standalone: true,\n providers: [],\n imports: [\n InuIcon\n ],\n templateUrl: './inu-doc-item.html',\n styleUrl: './inu-doc-item.scss',\n})\nexport class InuDocItem {\n\n\n //==================================================================================================================\n // ATTRIBUTES\n //==================================================================================================================\n readonly styleClass = input<string | undefined | null>('');\n readonly icon = input<string | null>('');\n readonly title = input<string | undefined | null>('');\n readonly href = input<string | undefined | null>('');\n readonly id = input<string | undefined | null>('');\n readonly level = input<number | undefined | null>(2);\n readonly children = contentChildren(InuDocItem);\n //\n _styleClass = signal<string>('');\n iconSize = signal<number>(1);\n data = signal<InuDocItemComponentData | undefined>(undefined);\n _data: InuDocItemComponentData | undefined = undefined;\n uid: string = UuidUtils.buildUid();\n\n //==================================================================================================================\n // INIT\n //==================================================================================================================\n constructor() {\n effect(() => {\n this.initStyleClass();\n this.init();\n });\n }\n\n init() {\n const title = this.title() ? this.title() : '';\n const href = this.href() ? this.href() : '';\n const id = this.id() ? this.id() : '';\n const level = this.level() ? this.level() : 2;\n\n const fullHref: string[] = [];\n if (href) {\n fullHref.push(href);\n if (id) {\n fullHref.push(id);\n }\n }\n const value: InuDocItemComponentData = {\n title: title!,\n href: fullHref.join('#'),\n id: id!,\n level: level!\n }\n this._data = value;\n this.data.set(value);\n\n\n switch (level) {\n case 1:\n this.iconSize.set(3);\n break;\n case 2:\n this.iconSize.set(2);\n break;\n default :\n this.iconSize.set(1);\n break;\n }\n }\n\n //==================================================================================================================\n // TOOLS\n //==================================================================================================================\n private initStyleClass() {\n const styles: string[] = ['inu-doc-item'];\n const style = this.styleClass();\n if (style) {\n styles.push(style);\n }\n\n const level = this.level();\n if (level) {\n styles.push(`level-${level}`);\n }\n this._styleClass.set(styles.join(\" \"));\n }\n}\n","<section [class]=\"_styleClass()\" >\n <header [id]=\"data()?.id\">\n @if(data()?.href) {\n <a [href]=\"data()?.href\" class=\"anchor-link\">\n <div class=\"anchor\">\n @if(icon()){\n <div class=\"inug-doc-item-icon\">\n <inu-icon [icon]=\"icon()\" [size]=\"iconSize()\"></inu-icon>\n </div>\n }\n @if(data()?.level==1){\n <h1 class=\"title\">{{data()?.title}}</h1>\n }\n @if(data()?.level==2){\n <h2 class=\"title\">{{data()?.title}}</h2>\n }\n @else if (data()?.level==3) {\n <h3 class=\"title\">{{data()?.title}}</h3>\n }\n @else if (data()?.level==4) {\n <h4 class=\"title\">{{data()?.title}}</h4>\n }\n @else if (data()?.level==5) {\n <h5 class=\"title\">{{data()?.title}}</h5>\n }\n @else {\n <h6 class=\"title\">{{data()?.title}}</h6>\n }\n <div class=\"anchor-icon\">\n <inu-icon icon=\"link\" [size]=\"1\"></inu-icon>\n </div>\n </div>\n </a>\n }\n @else{\n <div class=\"anchor\">\n @if(icon()){\n <div class=\"inug-doc-item-icon\">\n <inu-icon [icon]=\"icon()\" [size]=\"iconSize()\"></inu-icon>\n </div>\n }\n @if(data()?.level==1){\n <h1 class=\"title\">{{data()?.title}}</h1>\n }\n @if(data()?.level==2){\n <h2 class=\"title\">{{data()?.title}}</h2>\n }\n @else if (data()?.level==3) {\n <h3 class=\"title\">{{data()?.title}}</h3>\n }\n @else if (data()?.level==4) {\n <h4 class=\"title\">{{data()?.title}}</h4>\n }\n @else if (data()?.level==5) {\n <h5 class=\"title\">{{data()?.title}}</h5>\n }\n @else {\n <h6 class=\"title\">{{data()?.title}}</h6>\n }\n <div class=\"anchor-icon\">\n <inu-icon icon=\"link\" [size]=\"1\"></inu-icon>\n </div>\n </div>\n }\n\n </header>\n <div class=\"content\">\n <ng-content></ng-content>\n </div>\n</section>\n","import {Component, effect, input, signal} from '@angular/core';\nimport {InuDocItem} from '../../inu-doc-item';\nimport {TreeNode} from 'inugami-ng/models';\nimport {JsonPipe} from '@angular/common';\n\n@Component({\n selector: 'inu-doc-summary-node',\n standalone: true,\n providers: [],\n imports: [\n JsonPipe\n ],\n templateUrl: './inu-doc-summary-node.html',\n styleUrl: './inu-doc-summary-node.scss',\n})\nexport class InuDocSummaryNode {\n\n\n //==================================================================================================================\n // ATTRIBUTES\n //==================================================================================================================\n nodes = input<TreeNode<InuDocItem>[] | undefined>(undefined);\n maxLevel = input<number>(3);\n //==================================================================================================================\n // BUILDER\n //==================================================================================================================\n buildHref(nodeValue: any): string {\n const result: string[] = [];\n const href = nodeValue.href();\n if (href) {\n result.push(href);\n const id = nodeValue.id();\n if (id) {\n result.push(id)\n }\n }\n\n\n return result.join('#');\n }\n\n\n protected getTitle(value: any): string {\n return value && value.title ? value.title : '';\n }\n\n protected computeClass(node: TreeNode<InuDocItem>): string {\n const result: string[] = [];\n result.push('level');\n result.push('level-' + node.level);\n return result.join(' ');\n }\n\n protected acceptedLevels():boolean {\n const nodes = this.nodes();\n if(!nodes || nodes.length==0){\n return false;\n }\n\n const level = nodes[0].level+1;\n const maxLevel = this.maxLevel();\n return level<=maxLevel;\n }\n}\n","@if (nodes() && acceptedLevels()) {\n <ul class=\"inu-doc-summary-node\">\n @for (node of nodes(); track node; ) {\n <li [class]=\"computeClass(node)\">\n <div class=\"inu-doc-summary-node-title\">\n @if (node.value?.href){\n <a [href]=\"node.value?.href\">\n <div class=\"inu-doc-summary-title\">{{node.value?.title!}}</div>\n </a>\n } @else {\n <div class=\"inu-doc-summary-title\">{{node.value?.title!}}</div>\n }\n </div>\n @if (node.children){\n <inu-doc-summary-node [nodes]=\"node.children\" [maxLevel]=\"maxLevel()\"> </inu-doc-summary-node>\n }\n </li>\n }\n </ul>\n}\n","import {AfterViewInit, Component, effect, input, signal} from '@angular/core';\nimport {InuDocItem} from '../inu-doc-item';\nimport {TreeNode} from 'inugami-ng/models';\nimport {InuDocSummaryNode} from './node/inu-doc-summary-node';\n\n@Component({\n selector: 'inu-doc-summary',\n standalone: true,\n providers: [],\n imports: [\n InuDocSummaryNode\n ],\n templateUrl: './inu-doc-summary.html',\n styleUrl: './inu-doc-summary.scss',\n})\nexport class InuDocSummary implements AfterViewInit{\n\n\n //==================================================================================================================\n // ATTRIBUTES\n //==================================================================================================================\n styleClass = input<string | undefined | null>('');\n children = input<readonly InuDocItem[] | undefined>(undefined);\n maxLevel = input<number>(3);\n //\n _styleClass = signal<string>('');\n nodes = signal<TreeNode<InuDocItem>[]>([]);\n\n //==================================================================================================================\n // INIT\n //==================================================================================================================\n constructor() {\n effect(() => {\n this.initStyleClass();\n this.init();\n });\n }\n\n ngAfterViewInit(): void {\n this.init();\n }\n\n init() {\n const children = this.children();\n if (!children) {\n return;\n }\n\n const compMap = new Map<string, any>();\n children.forEach(c => compMap.set(c.uid, c));\n\n const parentMap = new Map<string, string>(); // childUid -> parentUid\n children.forEach(parent => {\n const childrenOfThisParent = parent.children() || [];\n childrenOfThisParent.forEach((child: any) => {\n parentMap.set(child.uid, parent.uid);\n });\n });\n\n const roots = children.filter(c => !parentMap.has(c.uid));\n\n const result = roots.map(root => this.mapComponentToNode(root, 0));\n this.nodes.set(result);\n }\n\n private mapComponentToNode(comp: any, level: number): TreeNode<any> {\n return {\n uid: comp.uid,\n level: level,\n value: comp.data ? comp.data() : comp, // On récupère la valeur ou le composant\n children: comp.children()\n ? comp.children().map((child: any) => this.mapComponentToNode(child, level + 1))\n : []\n };\n }\n\n //==================================================================================================================\n // TOOLS\n //==================================================================================================================\n private initStyleClass() {\n const styles: string[] = ['inu-doc-summary'];\n const style = this.styleClass();\n if (style) {\n styles.push(style);\n }\n\n\n this._styleClass.set(styles.join(\" \"));\n }\n}\n","<div [class]=\"_styleClass()\" >\n @if (nodes()){\n <inu-doc-summary-node [nodes]=\"nodes()\" [maxLevel]=\"maxLevel()\"> </inu-doc-summary-node>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -32,7 +32,6 @@ class InugamiTemplateDirective {
32
32
  templateRef = inject(TemplateRef);
33
33
  registry = inject(InuTemplateRegistryService);
34
34
  ngOnInit() {
35
- console.log('InugamiTemplateDirective');
36
35
  if (this.name) {
37
36
  this.registry.register(this.name, this.templateRef);
38
37
  }
@@ -1 +1 @@
1
- {"version":3,"file":"inugami-ng-directives.mjs","sources":["../../../projects/inugami-ng/directives/templates/inu-template-name.service.ts","../../../projects/inugami-ng/directives/templates/inu-template-name.directive.ts","../../../projects/inugami-ng/directives/inugami-ng-directives.ts"],"sourcesContent":["import { Injectable, TemplateRef, signal } from '@angular/core';\n\n@Injectable()\nexport class InuTemplateRegistryService {\n\n private templatesSig = signal<Map<string, TemplateRef<any>>>(new Map());\n\n register(name: string, ref: TemplateRef<any>): void {\n this.templatesSig.update(map => {\n const newMap = new Map(map);\n newMap.set(name, ref);\n return newMap;\n });\n }\n\n unregister(name: string): void {\n this.templatesSig.update(map => {\n const newMap = new Map(map);\n newMap.delete(name);\n return newMap;\n });\n }\n\n\n getTemplate(name: string) {\n return this.templatesSig().get(name);\n }\n}\n","import { Directive, Input, TemplateRef, inject, OnInit, OnDestroy } from '@angular/core';\nimport {InuTemplateRegistryService} from './inu-template-name.service';\n\n\n@Directive({\n selector: 'ng-template[name]',\n standalone: true\n})\nexport class InugamiTemplateDirective implements OnInit, OnDestroy {\n @Input('name') name!: string;\n\n private templateRef:TemplateRef<any> = inject(TemplateRef);\n private registry:InuTemplateRegistryService = inject(InuTemplateRegistryService);\n\n ngOnInit(): void {\n console.log('InugamiTemplateDirective')\n if (this.name) {\n this.registry.register(this.name, this.templateRef);\n }\n }\n\n ngOnDestroy(): void {\n if (this.name) {\n this.registry.unregister(this.name);\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;MAGa,0BAA0B,CAAA;AAE7B,IAAA,YAAY,GAAG,MAAM,CAAgC,IAAI,GAAG,EAAE,wDAAC;IAEvE,QAAQ,CAAC,IAAY,EAAE,GAAqB,EAAA;AAC1C,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,IAAG;AAC7B,YAAA,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC;AAC3B,YAAA,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC;AACrB,YAAA,OAAO,MAAM;AACf,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,UAAU,CAAC,IAAY,EAAA;AACrB,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,IAAG;AAC7B,YAAA,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC;AAC3B,YAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;AACnB,YAAA,OAAO,MAAM;AACf,QAAA,CAAC,CAAC;IACJ;AAGA,IAAA,WAAW,CAAC,IAAY,EAAA;QACtB,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;IACtC;uGAvBW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAA1B,0BAA0B,EAAA,CAAA;;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBADtC;;;MCMY,wBAAwB,CAAA;AACpB,IAAA,IAAI;AAEX,IAAA,WAAW,GAAoB,MAAM,CAAC,WAAW,CAAC;AAClD,IAAA,QAAQ,GAA8B,MAAM,CAAC,0BAA0B,CAAC;IAEhF,QAAQ,GAAA;AACN,QAAA,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC;AACvC,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC;QACrD;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QACrC;IACF;uGAjBW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAJpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,UAAU,EAAE;AACb,iBAAA;;sBAEE,KAAK;uBAAC,MAAM;;;ACTf;;AAEG;;;;"}
1
+ {"version":3,"file":"inugami-ng-directives.mjs","sources":["../../../projects/inugami-ng/directives/templates/inu-template-name.service.ts","../../../projects/inugami-ng/directives/templates/inu-template-name.directive.ts","../../../projects/inugami-ng/directives/inugami-ng-directives.ts"],"sourcesContent":["import { Injectable, TemplateRef, signal } from '@angular/core';\n\n@Injectable()\nexport class InuTemplateRegistryService {\n\n private templatesSig = signal<Map<string, TemplateRef<any>>>(new Map());\n\n register(name: string, ref: TemplateRef<any>): void {\n this.templatesSig.update(map => {\n const newMap = new Map(map);\n newMap.set(name, ref);\n return newMap;\n });\n }\n\n unregister(name: string): void {\n this.templatesSig.update(map => {\n const newMap = new Map(map);\n newMap.delete(name);\n return newMap;\n });\n }\n\n\n getTemplate(name: string) {\n return this.templatesSig().get(name);\n }\n}\n","import { Directive, Input, TemplateRef, inject, OnInit, OnDestroy } from '@angular/core';\nimport {InuTemplateRegistryService} from './inu-template-name.service';\n\n\n@Directive({\n selector: 'ng-template[name]',\n standalone: true\n})\nexport class InugamiTemplateDirective implements OnInit, OnDestroy {\n @Input('name') name!: string;\n\n private templateRef:TemplateRef<any> = inject(TemplateRef);\n private registry:InuTemplateRegistryService = inject(InuTemplateRegistryService);\n\n ngOnInit(): void {\n if (this.name) {\n this.registry.register(this.name, this.templateRef);\n }\n }\n\n ngOnDestroy(): void {\n if (this.name) {\n this.registry.unregister(this.name);\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;MAGa,0BAA0B,CAAA;AAE7B,IAAA,YAAY,GAAG,MAAM,CAAgC,IAAI,GAAG,EAAE,wDAAC;IAEvE,QAAQ,CAAC,IAAY,EAAE,GAAqB,EAAA;AAC1C,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,IAAG;AAC7B,YAAA,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC;AAC3B,YAAA,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC;AACrB,YAAA,OAAO,MAAM;AACf,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,UAAU,CAAC,IAAY,EAAA;AACrB,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,IAAG;AAC7B,YAAA,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC;AAC3B,YAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;AACnB,YAAA,OAAO,MAAM;AACf,QAAA,CAAC,CAAC;IACJ;AAGA,IAAA,WAAW,CAAC,IAAY,EAAA;QACtB,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;IACtC;uGAvBW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAA1B,0BAA0B,EAAA,CAAA;;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBADtC;;;MCMY,wBAAwB,CAAA;AACpB,IAAA,IAAI;AAEX,IAAA,WAAW,GAAoB,MAAM,CAAC,WAAW,CAAC;AAClD,IAAA,QAAQ,GAA8B,MAAM,CAAC,0BAA0B,CAAC;IAEhF,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC;QACrD;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QACrC;IACF;uGAhBW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAJpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,UAAU,EAAE;AACb,iBAAA;;sBAEE,KAAK;uBAAC,MAAM;;;ACTf;;AAEG;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "inugami-ng",
3
- "version": "0.0.8",
3
+ "version": "0.0.9",
4
4
  "license": "GPL-3.0-only",
5
5
  "description": "Inugami project angular library",
6
6
  "keywords": [
@@ -52,6 +52,10 @@
52
52
  "types": "./types/inugami-ng-components-inu-code.d.ts",
53
53
  "default": "./fesm2022/inugami-ng-components-inu-code.mjs"
54
54
  },
55
+ "./components/inu-doc-item": {
56
+ "types": "./types/inugami-ng-components-inu-doc-item.d.ts",
57
+ "default": "./fesm2022/inugami-ng-components-inu-doc-item.mjs"
58
+ },
55
59
  "./components/inu-open-api": {
56
60
  "types": "./types/inugami-ng-components-inu-open-api.d.ts",
57
61
  "default": "./fesm2022/inugami-ng-components-inu-open-api.mjs"
@@ -0,0 +1,48 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { AfterViewInit } from '@angular/core';
3
+ import { TreeNode } from 'inugami-ng/models';
4
+
5
+ interface InuDocItemComponentData {
6
+ title: string;
7
+ href: string;
8
+ id: string;
9
+ level: number;
10
+ }
11
+
12
+ declare class InuDocItem {
13
+ readonly styleClass: _angular_core.InputSignal<string | null | undefined>;
14
+ readonly icon: _angular_core.InputSignal<string | null>;
15
+ readonly title: _angular_core.InputSignal<string | null | undefined>;
16
+ readonly href: _angular_core.InputSignal<string | null | undefined>;
17
+ readonly id: _angular_core.InputSignal<string | null | undefined>;
18
+ readonly level: _angular_core.InputSignal<number | null | undefined>;
19
+ readonly children: _angular_core.Signal<readonly InuDocItem[]>;
20
+ _styleClass: _angular_core.WritableSignal<string>;
21
+ iconSize: _angular_core.WritableSignal<number>;
22
+ data: _angular_core.WritableSignal<InuDocItemComponentData | undefined>;
23
+ _data: InuDocItemComponentData | undefined;
24
+ uid: string;
25
+ constructor();
26
+ init(): void;
27
+ private initStyleClass;
28
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<InuDocItem, never>;
29
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<InuDocItem, "inu-doc-item", never, { "styleClass": { "alias": "styleClass"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "href": { "alias": "href"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "level": { "alias": "level"; "required": false; "isSignal": true; }; }, {}, ["children"], ["*"], true, never>;
30
+ }
31
+
32
+ declare class InuDocSummary implements AfterViewInit {
33
+ styleClass: _angular_core.InputSignal<string | null | undefined>;
34
+ children: _angular_core.InputSignal<readonly InuDocItem[] | undefined>;
35
+ maxLevel: _angular_core.InputSignal<number>;
36
+ _styleClass: _angular_core.WritableSignal<string>;
37
+ nodes: _angular_core.WritableSignal<TreeNode<InuDocItem>[]>;
38
+ constructor();
39
+ ngAfterViewInit(): void;
40
+ init(): void;
41
+ private mapComponentToNode;
42
+ private initStyleClass;
43
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<InuDocSummary, never>;
44
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<InuDocSummary, "inu-doc-summary", never, { "styleClass": { "alias": "styleClass"; "required": false; "isSignal": true; }; "children": { "alias": "children"; "required": false; "isSignal": true; }; "maxLevel": { "alias": "maxLevel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
45
+ }
46
+
47
+ export { InuDocItem, InuDocSummary };
48
+ export type { InuDocItemComponentData };
@@ -91,6 +91,13 @@ interface InuSiteLinkChildren {
91
91
  title?: string;
92
92
  }
93
93
 
94
+ interface TreeNode<T> {
95
+ uid: string;
96
+ children: TreeNode<T>[];
97
+ level: number;
98
+ value?: T;
99
+ }
100
+
94
101
  interface TTLWrapper<T> {
95
102
  id: string;
96
103
  ttl: number;
@@ -98,4 +105,4 @@ interface TTLWrapper<T> {
98
105
  }
99
106
 
100
107
  export { TARGET_BLANK, TARGET_PARENT, TARGET_SELF };
101
- export type { AuditDTO, Auditable, InuSelectItem, InuSiteLink, InuSiteLinkChildren, ProblemDTO, ProblemErrorDTO, ProblemParameterDTO, ProblemParameterFieldsDTO, SearchRequest, SearchResponse, TTLWrapper };
108
+ export type { AuditDTO, Auditable, InuSelectItem, InuSiteLink, InuSiteLinkChildren, ProblemDTO, ProblemErrorDTO, ProblemParameterDTO, ProblemParameterFieldsDTO, SearchRequest, SearchResponse, TTLWrapper, TreeNode };