inugami-ng 0.0.1 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -52
- package/fesm2022/inugami-ng-components-inu-cite.mjs +16 -15
- package/fesm2022/inugami-ng-components-inu-cite.mjs.map +1 -1
- package/fesm2022/inugami-ng-components-inu-code.mjs +181 -0
- package/fesm2022/inugami-ng-components-inu-code.mjs.map +1 -0
- package/fesm2022/inugami-ng-components-inu-open-api.mjs +1008 -0
- package/fesm2022/inugami-ng-components-inu-open-api.mjs.map +1 -0
- package/fesm2022/inugami-ng-directives.mjs +64 -0
- package/fesm2022/inugami-ng-directives.mjs.map +1 -0
- package/fesm2022/inugami-ng-models.mjs +4 -0
- package/fesm2022/inugami-ng-models.mjs.map +1 -0
- package/fesm2022/inugami-ng-services.mjs +36 -0
- package/fesm2022/inugami-ng-services.mjs.map +1 -0
- package/package.json +39 -2
- package/types/inugami-ng-components-inu-cite.d.ts +5 -1
- package/types/inugami-ng-components-inu-code.d.ts +39 -0
- package/types/inugami-ng-components-inu-open-api.d.ts +245 -0
- package/types/inugami-ng-directives.d.ts +23 -0
- package/types/inugami-ng-models.d.ts +90 -0
- package/types/inugami-ng-services.d.ts +13 -0
package/README.md
CHANGED
|
@@ -1,63 +1,27 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Inugami-NG
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://www.npmjs.com/package/inugami-ng)
|
|
4
|
+
[](https://www.gnu.org/licenses/gpl-3.0)
|
|
4
5
|
|
|
5
|
-
|
|
6
|
+
**Inugami-NG** is a modern Angular component library designed for the Inugami project ecosystem.
|
|
7
|
+
It provides high-performance, reusable, and modular UI components.
|
|
6
8
|
|
|
7
|
-
|
|
9
|
+
---
|
|
8
10
|
|
|
9
|
-
|
|
10
|
-
ng generate component component-name
|
|
11
|
-
```
|
|
11
|
+
## 🚀 Features
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
* **Angular Ready**: Built with the latest Angular standards.
|
|
14
|
+
* **Lightweight**: Minimal footprint and dependencies.
|
|
14
15
|
|
|
15
|
-
|
|
16
|
-
ng generate --help
|
|
17
|
-
```
|
|
16
|
+
---
|
|
18
17
|
|
|
19
|
-
##
|
|
18
|
+
## 📦 Installation
|
|
20
19
|
|
|
21
|
-
|
|
20
|
+
Install the package using your favorite package manager:
|
|
22
21
|
|
|
23
22
|
```bash
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
This command will compile your project, and the build artifacts will be placed in the `dist/` directory.
|
|
28
|
-
|
|
29
|
-
### Publishing the Library
|
|
30
|
-
|
|
31
|
-
Once the project is built, you can publish your library by following these steps:
|
|
32
|
-
|
|
33
|
-
1. Navigate to the `dist` directory:
|
|
34
|
-
```bash
|
|
35
|
-
cd dist/inugami-ng
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
2. Run the `npm publish` command to publish your library to the npm registry:
|
|
39
|
-
```bash
|
|
40
|
-
npm publish
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
## Running unit tests
|
|
44
|
-
|
|
45
|
-
To execute unit tests with the [Karma](https://karma-runner.github.io) test runner, use the following command:
|
|
46
|
-
|
|
47
|
-
```bash
|
|
48
|
-
ng test
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
## Running end-to-end tests
|
|
52
|
-
|
|
53
|
-
For end-to-end (e2e) testing, run:
|
|
54
|
-
|
|
55
|
-
```bash
|
|
56
|
-
ng e2e
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
Angular CLI does not come with an end-to-end testing framework by default. You can choose one that suits your needs.
|
|
60
|
-
|
|
61
|
-
## Additional Resources
|
|
23
|
+
# Using npm
|
|
24
|
+
npm install inugami-ng
|
|
62
25
|
|
|
63
|
-
|
|
26
|
+
# Using yarn
|
|
27
|
+
yarn add inugami-ng
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { input, signal, Component } from '@angular/core';
|
|
2
|
+
import { input, signal, computed, inject, Component } from '@angular/core';
|
|
3
3
|
import { InuIcon } from 'inugami-icons';
|
|
4
|
+
import { InuTemplateRegistryService } from 'inugami-ng/directives';
|
|
5
|
+
import { NgTemplateOutlet } from '@angular/common';
|
|
4
6
|
|
|
5
7
|
class InuCite {
|
|
6
8
|
//==================================================================================================================
|
|
@@ -9,27 +11,26 @@ class InuCite {
|
|
|
9
11
|
title = input('', ...(ngDevMode ? [{ debugName: "title" }] : []));
|
|
10
12
|
level = input('', ...(ngDevMode ? [{ debugName: "level" }] : []));
|
|
11
13
|
icon = signal(null, ...(ngDevMode ? [{ debugName: "icon" }] : []));
|
|
14
|
+
styleClass = signal(null, ...(ngDevMode ? [{ debugName: "styleClass" }] : []));
|
|
15
|
+
titleTemplate = computed(() => this.registry.getTemplate('title'), ...(ngDevMode ? [{ debugName: "titleTemplate" }] : []));
|
|
16
|
+
registry = inject(InuTemplateRegistryService);
|
|
12
17
|
ngOnInit() {
|
|
13
18
|
this.level();
|
|
14
|
-
const level = this.level();
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
default:
|
|
23
|
-
this.icon.set('idea');
|
|
24
|
-
break;
|
|
25
|
-
}
|
|
19
|
+
const level = this.level()?.toLowerCase() || '';
|
|
20
|
+
const icons = {
|
|
21
|
+
success: 'approval',
|
|
22
|
+
warning: 'warning',
|
|
23
|
+
danger: 'danger',
|
|
24
|
+
};
|
|
25
|
+
this.icon.set(icons[level] || 'idea');
|
|
26
|
+
this.styleClass.set(['inu-cite', level].join(' '));
|
|
26
27
|
}
|
|
27
28
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuCite, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
28
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: InuCite, isStandalone: true, selector: "inu-cite", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, level: { classPropertyName: "level", publicName: "level", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "\n<cite class=\"
|
|
29
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: InuCite, isStandalone: true, selector: "inu-cite", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, level: { classPropertyName: "level", publicName: "level", isSignal: true, isRequired: false, transformFunction: null } }, providers: [InuTemplateRegistryService], ngImport: i0, template: "\n<cite [class]=\"styleClass()\">\n <header>\n <span>\n @if(icon()){\n <inu-icon [icon]=\"icon()\" [size]=\"2.5\"></inu-icon>\n }\n </span>\n <div class=\"title\">\n @if(titleTemplate()){\n <ng-container *ngTemplateOutlet=\"titleTemplate()\"></ng-container>\n } @else if (title()){\n {{title()}}\n }\n </div>\n </header>\n <div class=\"content\">\n <ng-content />\n </div>\n\n</cite>\n", styles: [".inu-cite{border-left:.25rem solid var(--neutral);padding:1rem;margin:1rem;display:block;transition:border-left-color .15s}.inu-cite header{display:flex;margin-bottom:1rem;align-items:center;gap:.5rem}.inu-cite header div{flex:1}.inu-cite header i{width:32px;height:32px}.inu-cite.info{border-left:.25rem solid var(--info)}.inu-cite.info:hover{border-left:.25rem solid var(--info-light)}.inu-cite.info header i{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAACXAAAAlwHUBiyCAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAABJVJREFUWIXFl1tsVFUUhr+197QzZ6Y3Li1QW1pqI8QGjT4YEwxYgxgJRKOC1oDYBJqg8sILxAeIMVFD4oPBqEFsMRhiYqJBeFAxKg+YmqBgCE0EwVLkEilQoDNnbudsH4ZezqVOpzy4nmav9e///886e+/ZR4wx/J8RKXlG5pNWHFkKcheYhkJS/gZzAa0PEV13phQ6mVwHdkaxExsxbADuLQLuQ8wurNRHsClz5wbsnucwvAtm7iScjo9ziLsZa/2XUzUgpLq3A9sAKVF8JAwiO7AGXoftbhhg4jWQ6t4DvDRF4ZEQjNlCqnEOcdaFAkI7kOzeivB22AQzfBEz2Ie5dQmTGy6QlCeQRD1S24ZUzAm3YmQLic4dxQ3Yux/GqCOA8uRzSZz+7zFDf4ULjBBWN6HnLYOyhL/kILIIq/OX8UnlR4F6y5836evk+z4vKg5gbpwjf3IfJj3kL2lcE+iA10CyZymGdq/vDO7p/ZC9VVR8NHJJ3FNfgZP15oXFDPc8NrEBcZ/3c7kXesOepmiYzA3ci73BgjIejXEG3lAgKzxgJ4N75UTJ4iPh/vM7OIGzaCXjtvWYgXRDIzB7PNIMnQU375kt0Wr0/GfQC1YjsRlIrAa94NnRsdeBU+DwxhzsnoaRwdg5YKTejzTJQa94zTx0y3JMPgVOFt3WUcBlbwIG3daB038Ic/WPMY7UIOLzBdQD530GqA3ATM5rIGKBLsPt/xlz/TRq1oOgIriXjyKVDeh7nkbKKjEeilSAFuPWBTvgujdRvl0p3rE72AeV9ejmpTj2IO7lo4VCtArd8gTm+hncy7/6TMeCBhQ3xn6OulKXAsDY9EDKPfcTJn0V1boSdBRUBN26ApNP4Zz9DvAdbNHqoAHRo1pjBiorBwDbg6tuDk528zh/HkTKK1HTWpHqJiReh3v6ALj+FS9IzTw/g0208P69BlhlAz94pkerwgggOwwmX3hFt19T2FkhVY1IsAOH4OV0iAEA9vvRqnExqNIvTiiNamoPKcgBD8xTi6u9MNYeAIlNQ9+9HERPXlwE3bwMiU3zVy4Qz+2b2EChNW8G+Gpa0C1PgkzmXiKo5seRGfNDamYbdHn2ZfDfMF7ZDXwboJ3eipr1QFF5VbcQNTP02vgN8apPA/ggbpVDOroa6AuYqF1Y1IDU3R9MGk6RVR2wygngJ7wTpnfNxY18DYwxGsOeg4vD4Zk8Kdth85pe3wFmjqOcp4h1DYTNm3h5x7oGYO8ikrndCC8U7ArXhjLYdp6Unce2HVLpPKm0g3FvP8h4cZF9WGVdsDY5kUyR/bU2SYIO7N3v4ap3EJYcO3GVsojCsiLEopqZ02NYVoR4TBOPlwFnAOlFsZVY5+H/5p/sl5G1vhd4lOGP29ofmf2bElUO4DgGO13oxM3hHFeu2Q6u3EdFZ2D93JmBkajYcPL8xWPHrwymH7Jth2yusKZEIFquqaiI9JciXroBIO+4L1qxyMHamdb8REyLZUWIlmujNV/kDK+WyjfJb8NgrH3t8AfAxtvDD/e+v+SVqfBM2QDAmk0/LgL4bGf7kaly/AsYfKH6uyVp8AAAAABJRU5ErkJggg==)}.inu-cite.success{border-left:.25rem solid var(--success)}.inu-cite.success:hover{border-left:.25rem solid var(--success-light)}.inu-cite.success header i{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAACXAAAAlwHUBiyCAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAA3ZJREFUWIXNl89vVFUUxz/nvVfoTC3TOIWVG6QoIAUr0qRJNe3CpDF2Yk3UFdtKQmIgYAJxYZr4Y4GT1oUmzn9AiaJFSDfGF0KsqVVC0YQEK27ciKM02s7P946LN868znsz0xnG1LObe885n+89786594qqspVmbCkdsFoNnLJHO6NW5ANBImsR8/hbR+bWW8mziQqIzNgTPf6R89fG93ZZ0W8EmQSOdWWcr89fG9/r9/FiRBpmb7QH3r8+PgLuV6imRWQF5a4ajKHENmZiVVzmEXar6h5E4mCMnhm+bNfLv4lP4LwGAiJxhTjCIGGalZgKr3pipDTkTgJ1BdStwHuLL8U78rlfge2NhYZavqD6yLlnrt6r5VBzDyTtRK+Vz777AHCAbZbwdtJO9NZyCFQgef2FIy7upCDHgMgDwP2WF/hckdSZ4StfQgW6QcCMPdFTtPJ/toMoYmAYguM4G8aLyMNnh78oMzZ8gpMjl+4Df7QD/sS+Qwz0H6XD6qhMqKb98IAAz4mVdsB3xnfR/dAOHu874JuTQO6AAIGf2wEHyOWyrPxyp+Kg3K0rYHphrE8NxtoFv3FriUy20qFVeD65kNgXKmDKHu10XHM20OHaBC9Zt+s6s1PfJaIBAV1W9COUgTBArDvG/scOIhLcMgF4PlcL7vkr/dF1N/Xv73IrFkQ1pMfu6O7h8MGnME0L07T48fYyqm5t+PK3NeEV0ZoNVODv4toJ0O+rnQuFHPlCAYCd8V30738SwzDCy74JuAq31iLm65WK+BrR9MJYn+OaS9X7INIZZeDQUbZv87ryvfRvZUHNrBz4S0xz8PTQ3O1ABQBODc3/JC7z1VGZ7Do3lhfJZDNlcLMr91bLVT88IABA4dGw4Ew2w80flsoiyvA6Gy6ogN3VQyHbmj214v0imoYDqhrI3dJhFOmMlgQ1fw1seBgJ8rSiKSATiC5ZJrveLDwvcBHkubPDV+77J2reiJJ2ote1iu+ULp4tm6Ipo2i9eXpk7vew+f/vlQzg3OCnadBLLcJR+KQevKEAz8yPvWyaFlgU5QLCasBNWBXlgsAiqmlvyEgF/KrDGr8NRWbsF2Ol2xLgPUzEcC8Ch0tDN9U1Xn7j2cvlw3/Gnug5OfLZqv/+16KAcJteeCXiOGsfAphm14lTQ7M1/zX/iYB22Za/jv8Bs9OlfzR+46cAAAAASUVORK5CYII=)}.inu-cite.danger{border-left:.25rem solid var(--danger)}.inu-cite.danger:hover{border-left:.25rem solid var(--danger-light)}.inu-cite.danger header i{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAACXAAAAlwHUBiyCAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAitJREFUWIXFl89rE1EQgL95SUrbmH9BlIJ486C0PYhCaxALHvwBinjSQC2Cf41YC/4CD/XmzYuNB0ElEQIiXgStehIvLbQNJHF3PGjCxu5m3zwqzumxZOf7dmb2vY2oKv8ziqE3tudmj6rTWyAujqO7lRdvX4XkkZAKbFenz4vKE6D051KEaq1cbz6y5nJ7AAcoIPKgfWpm8Z8KZMD7IQrLVglvgRx4sISXgCc8SCJXwAg3S4x8C0bB3cEp3P4DAMTfvhCvf0pLoQJLk2uNlSxG5j6Q9+TFk/OUrl4HoPf4Pt10gX4lyJJIbYFP2bXbTaw7WT9LSqS2Y5eAd887CehogZESQwKWgUs+tXZyBTIlBgLmaU+0YGhtlHAAO3MzR0Rl1RsOwy3wq0BS4s5Wdfb4QEAK1IAxS5ahFvRMAgDOKYsDAUV/WjMMDZ6tAr9D4t5AIFZZBto2gaAZ6EdP4sLtgUBlrfFRVc8AO74ZdGODqNUkajXRzU0T3CmXJutvWvDXVrw9P31CRJ4BZUtGK3yi3njav7DrLPCVkEqF0rUlZHyC7sMV9Md3MxxSdsJ99eZLVV0gpx2li1conb1AsbrAWO1mEDxVwFci/rqeWH8OgkPecZzTDjd1CBmfIPrwLgieK+AjMSJy4eDxReQ7EyFwL4EACW+4t4BBwgQ3CXhImOFmgb4EyDmGz46uil62wiHwvyHA1uljh13kboATxN0rP3/9PiRPsMBexS+pJFTyCd7ipAAAAABJRU5ErkJggg==)}.inu-cite.warning{border-left:.25rem solid var(--warning)}.inu-cite.warning:hover{border-left:.25rem solid var(--warning-light)}.inu-cite.warning header i{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAdhAAAHYQGVw7i2AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAuxJREFUWIXFl81LVFEYxn/n3PlIG/rARY2SjKJlX+odp0UhFJVQEFFEEREF9Q/UQkvUTK12rqJVixbVH9DGItoUBCHNOCNRlFGbPghqUfg1jnNPC8eZOzkznnsVe3fnvOd9nuc+59z33CuUUvzP8LiufLsjwIz3MQC+1GG2vRl3AyNdC0j6+lCiFSVaSfr63MIIV1sQjQSR1kegPDMzjbTqaIp/dQrlzgFpddrIAVZhyQ43UM4dGAlXAh+Bsn8ySYx0HY2JL07g3DjQXYAcwM+sp9MpmDMHopFqpPUB8BdZkcJIb6Ex8VkX0pkDQnWXIAfwYsmrziB1HYibIZR4D/gAXr+b5da9SQTQdaGccEO2paRIexqIDH/SgdV3wJK98+RKweXBCUbH0iTG0lwanLCv9OJJdevC6gmItdQh1Nn54Z8JxfdfVjb97afF73Gbk0qcY7Rpy/IJkFYvtrYdKAOPkUsbBqwuE/YKg7TRtTwCEs2bUeJ0HrohqN6YK63eIPMEZeIMsZatSxdgyX4KXFo1VTnGUOVCdsBAqGtLE5Bo3g6cLJSqrcqVhoIFBQCcItbS6F6AJfuKrakJ5kwJVRaFkQjV405ANLITOF4sXaPnAMAJ4mazcwHSGiiVr807AyWNFJke4kBANBIGjpZCrVgrWBsQ+LwQrFjkLAt1jLi5S1/A3NOLgjlbhIIGoUqJ1OkmRVxYeBeMhCPAsI6AR89nmEkpTh4sdT/ZQondhKOv7FMLP0qVuIlQi5ID1G8yEForMyHUdeBQ/pTdgbi5ByVe6mD13Z3k/lASgPNH/PRcLF+kIht7MWMv5gf5u6fEgA7C1LTi4ZNkdvxgaIappPaHTV53zAmIRlqB/ToIfp9gXSDn/fo14Pdq78UB4ua+hQKkdUMXQUq4cyVAU71BU72H2+0BvTdhPpTIcs2dgbjZhhJPHUAsR7Rhxp7JjKL2FSYH6IDcFpj/QUCzXUA/8GMFyX+gRD+4/TdcxvgL80fLBXEqmb0AAAAASUVORK5CYII=)}.inu-cite .content{font-style:normal}\n"], dependencies: [{ kind: "component", type: InuIcon, selector: "inu-icon", inputs: ["icon", "styleclass", "size"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
|
|
29
30
|
}
|
|
30
31
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuCite, decorators: [{
|
|
31
32
|
type: Component,
|
|
32
|
-
args: [{ selector: 'inu-cite', imports: [InuIcon], template: "\n<cite class=\"
|
|
33
|
+
args: [{ selector: 'inu-cite', standalone: true, providers: [InuTemplateRegistryService], imports: [InuIcon, NgTemplateOutlet], template: "\n<cite [class]=\"styleClass()\">\n <header>\n <span>\n @if(icon()){\n <inu-icon [icon]=\"icon()\" [size]=\"2.5\"></inu-icon>\n }\n </span>\n <div class=\"title\">\n @if(titleTemplate()){\n <ng-container *ngTemplateOutlet=\"titleTemplate()\"></ng-container>\n } @else if (title()){\n {{title()}}\n }\n </div>\n </header>\n <div class=\"content\">\n <ng-content />\n </div>\n\n</cite>\n", styles: [".inu-cite{border-left:.25rem solid var(--neutral);padding:1rem;margin:1rem;display:block;transition:border-left-color .15s}.inu-cite header{display:flex;margin-bottom:1rem;align-items:center;gap:.5rem}.inu-cite header div{flex:1}.inu-cite header i{width:32px;height:32px}.inu-cite.info{border-left:.25rem solid var(--info)}.inu-cite.info:hover{border-left:.25rem solid var(--info-light)}.inu-cite.info header i{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAACXAAAAlwHUBiyCAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAABJVJREFUWIXFl1tsVFUUhr+197QzZ6Y3Li1QW1pqI8QGjT4YEwxYgxgJRKOC1oDYBJqg8sILxAeIMVFD4oPBqEFsMRhiYqJBeFAxKg+YmqBgCE0EwVLkEilQoDNnbudsH4ZezqVOpzy4nmav9e///886e+/ZR4wx/J8RKXlG5pNWHFkKcheYhkJS/gZzAa0PEV13phQ6mVwHdkaxExsxbADuLQLuQ8wurNRHsClz5wbsnucwvAtm7iScjo9ziLsZa/2XUzUgpLq3A9sAKVF8JAwiO7AGXoftbhhg4jWQ6t4DvDRF4ZEQjNlCqnEOcdaFAkI7kOzeivB22AQzfBEz2Ie5dQmTGy6QlCeQRD1S24ZUzAm3YmQLic4dxQ3Yux/GqCOA8uRzSZz+7zFDf4ULjBBWN6HnLYOyhL/kILIIq/OX8UnlR4F6y5836evk+z4vKg5gbpwjf3IfJj3kL2lcE+iA10CyZymGdq/vDO7p/ZC9VVR8NHJJ3FNfgZP15oXFDPc8NrEBcZ/3c7kXesOepmiYzA3ci73BgjIejXEG3lAgKzxgJ4N75UTJ4iPh/vM7OIGzaCXjtvWYgXRDIzB7PNIMnQU375kt0Wr0/GfQC1YjsRlIrAa94NnRsdeBU+DwxhzsnoaRwdg5YKTejzTJQa94zTx0y3JMPgVOFt3WUcBlbwIG3daB038Ic/WPMY7UIOLzBdQD530GqA3ATM5rIGKBLsPt/xlz/TRq1oOgIriXjyKVDeh7nkbKKjEeilSAFuPWBTvgujdRvl0p3rE72AeV9ejmpTj2IO7lo4VCtArd8gTm+hncy7/6TMeCBhQ3xn6OulKXAsDY9EDKPfcTJn0V1boSdBRUBN26ApNP4Zz9DvAdbNHqoAHRo1pjBiorBwDbg6tuDk528zh/HkTKK1HTWpHqJiReh3v6ALj+FS9IzTw/g0208P69BlhlAz94pkerwgggOwwmX3hFt19T2FkhVY1IsAOH4OV0iAEA9vvRqnExqNIvTiiNamoPKcgBD8xTi6u9MNYeAIlNQ9+9HERPXlwE3bwMiU3zVy4Qz+2b2EChNW8G+Gpa0C1PgkzmXiKo5seRGfNDamYbdHn2ZfDfMF7ZDXwboJ3eipr1QFF5VbcQNTP02vgN8apPA/ggbpVDOroa6AuYqF1Y1IDU3R9MGk6RVR2wygngJ7wTpnfNxY18DYwxGsOeg4vD4Zk8Kdth85pe3wFmjqOcp4h1DYTNm3h5x7oGYO8ikrndCC8U7ArXhjLYdp6Unce2HVLpPKm0g3FvP8h4cZF9WGVdsDY5kUyR/bU2SYIO7N3v4ap3EJYcO3GVsojCsiLEopqZ02NYVoR4TBOPlwFnAOlFsZVY5+H/5p/sl5G1vhd4lOGP29ofmf2bElUO4DgGO13oxM3hHFeu2Q6u3EdFZ2D93JmBkajYcPL8xWPHrwymH7Jth2yusKZEIFquqaiI9JciXroBIO+4L1qxyMHamdb8REyLZUWIlmujNV/kDK+WyjfJb8NgrH3t8AfAxtvDD/e+v+SVqfBM2QDAmk0/LgL4bGf7kaly/AsYfKH6uyVp8AAAAABJRU5ErkJggg==)}.inu-cite.success{border-left:.25rem solid var(--success)}.inu-cite.success:hover{border-left:.25rem solid var(--success-light)}.inu-cite.success header i{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAACXAAAAlwHUBiyCAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAA3ZJREFUWIXNl89vVFUUxz/nvVfoTC3TOIWVG6QoIAUr0qRJNe3CpDF2Yk3UFdtKQmIgYAJxYZr4Y4GT1oUmzn9AiaJFSDfGF0KsqVVC0YQEK27ciKM02s7P946LN868znsz0xnG1LObe885n+89786594qqspVmbCkdsFoNnLJHO6NW5ANBImsR8/hbR+bWW8mziQqIzNgTPf6R89fG93ZZ0W8EmQSOdWWcr89fG9/r9/FiRBpmb7QH3r8+PgLuV6imRWQF5a4ajKHENmZiVVzmEXar6h5E4mCMnhm+bNfLv4lP4LwGAiJxhTjCIGGalZgKr3pipDTkTgJ1BdStwHuLL8U78rlfge2NhYZavqD6yLlnrt6r5VBzDyTtRK+Vz777AHCAbZbwdtJO9NZyCFQgef2FIy7upCDHgMgDwP2WF/hckdSZ4StfQgW6QcCMPdFTtPJ/toMoYmAYguM4G8aLyMNnh78oMzZ8gpMjl+4Df7QD/sS+Qwz0H6XD6qhMqKb98IAAz4mVdsB3xnfR/dAOHu874JuTQO6AAIGf2wEHyOWyrPxyp+Kg3K0rYHphrE8NxtoFv3FriUy20qFVeD65kNgXKmDKHu10XHM20OHaBC9Zt+s6s1PfJaIBAV1W9COUgTBArDvG/scOIhLcMgF4PlcL7vkr/dF1N/Xv73IrFkQ1pMfu6O7h8MGnME0L07T48fYyqm5t+PK3NeEV0ZoNVODv4toJ0O+rnQuFHPlCAYCd8V30738SwzDCy74JuAq31iLm65WK+BrR9MJYn+OaS9X7INIZZeDQUbZv87ryvfRvZUHNrBz4S0xz8PTQ3O1ABQBODc3/JC7z1VGZ7Do3lhfJZDNlcLMr91bLVT88IABA4dGw4Ew2w80flsoiyvA6Gy6ogN3VQyHbmj214v0imoYDqhrI3dJhFOmMlgQ1fw1seBgJ8rSiKSATiC5ZJrveLDwvcBHkubPDV+77J2reiJJ2ote1iu+ULp4tm6Ipo2i9eXpk7vew+f/vlQzg3OCnadBLLcJR+KQevKEAz8yPvWyaFlgU5QLCasBNWBXlgsAiqmlvyEgF/KrDGr8NRWbsF2Ol2xLgPUzEcC8Ch0tDN9U1Xn7j2cvlw3/Gnug5OfLZqv/+16KAcJteeCXiOGsfAphm14lTQ7M1/zX/iYB22Za/jv8Bs9OlfzR+46cAAAAASUVORK5CYII=)}.inu-cite.danger{border-left:.25rem solid var(--danger)}.inu-cite.danger:hover{border-left:.25rem solid var(--danger-light)}.inu-cite.danger header i{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAACXAAAAlwHUBiyCAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAitJREFUWIXFl89rE1EQgL95SUrbmH9BlIJ486C0PYhCaxALHvwBinjSQC2Cf41YC/4CD/XmzYuNB0ElEQIiXgStehIvLbQNJHF3PGjCxu5m3zwqzumxZOf7dmb2vY2oKv8ziqE3tudmj6rTWyAujqO7lRdvX4XkkZAKbFenz4vKE6D051KEaq1cbz6y5nJ7AAcoIPKgfWpm8Z8KZMD7IQrLVglvgRx4sISXgCc8SCJXwAg3S4x8C0bB3cEp3P4DAMTfvhCvf0pLoQJLk2uNlSxG5j6Q9+TFk/OUrl4HoPf4Pt10gX4lyJJIbYFP2bXbTaw7WT9LSqS2Y5eAd887CehogZESQwKWgUs+tXZyBTIlBgLmaU+0YGhtlHAAO3MzR0Rl1RsOwy3wq0BS4s5Wdfb4QEAK1IAxS5ahFvRMAgDOKYsDAUV/WjMMDZ6tAr9D4t5AIFZZBto2gaAZ6EdP4sLtgUBlrfFRVc8AO74ZdGODqNUkajXRzU0T3CmXJutvWvDXVrw9P31CRJ4BZUtGK3yi3njav7DrLPCVkEqF0rUlZHyC7sMV9Md3MxxSdsJ99eZLVV0gpx2li1conb1AsbrAWO1mEDxVwFci/rqeWH8OgkPecZzTDjd1CBmfIPrwLgieK+AjMSJy4eDxReQ7EyFwL4EACW+4t4BBwgQ3CXhImOFmgb4EyDmGz46uil62wiHwvyHA1uljh13kboATxN0rP3/9PiRPsMBexS+pJFTyCd7ipAAAAABJRU5ErkJggg==)}.inu-cite.warning{border-left:.25rem solid var(--warning)}.inu-cite.warning:hover{border-left:.25rem solid var(--warning-light)}.inu-cite.warning header i{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAdhAAAHYQGVw7i2AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAuxJREFUWIXFl81LVFEYxn/n3PlIG/rARY2SjKJlX+odp0UhFJVQEFFEEREF9Q/UQkvUTK12rqJVixbVH9DGItoUBCHNOCNRlFGbPghqUfg1jnNPC8eZOzkznnsVe3fnvOd9nuc+59z33CuUUvzP8LiufLsjwIz3MQC+1GG2vRl3AyNdC0j6+lCiFSVaSfr63MIIV1sQjQSR1kegPDMzjbTqaIp/dQrlzgFpddrIAVZhyQ43UM4dGAlXAh+Bsn8ySYx0HY2JL07g3DjQXYAcwM+sp9MpmDMHopFqpPUB8BdZkcJIb6Ex8VkX0pkDQnWXIAfwYsmrziB1HYibIZR4D/gAXr+b5da9SQTQdaGccEO2paRIexqIDH/SgdV3wJK98+RKweXBCUbH0iTG0lwanLCv9OJJdevC6gmItdQh1Nn54Z8JxfdfVjb97afF73Gbk0qcY7Rpy/IJkFYvtrYdKAOPkUsbBqwuE/YKg7TRtTwCEs2bUeJ0HrohqN6YK63eIPMEZeIMsZatSxdgyX4KXFo1VTnGUOVCdsBAqGtLE5Bo3g6cLJSqrcqVhoIFBQCcItbS6F6AJfuKrakJ5kwJVRaFkQjV405ANLITOF4sXaPnAMAJ4mazcwHSGiiVr807AyWNFJke4kBANBIGjpZCrVgrWBsQ+LwQrFjkLAt1jLi5S1/A3NOLgjlbhIIGoUqJ1OkmRVxYeBeMhCPAsI6AR89nmEkpTh4sdT/ZQondhKOv7FMLP0qVuIlQi5ID1G8yEForMyHUdeBQ/pTdgbi5ByVe6mD13Z3k/lASgPNH/PRcLF+kIht7MWMv5gf5u6fEgA7C1LTi4ZNkdvxgaIappPaHTV53zAmIRlqB/ToIfp9gXSDn/fo14Pdq78UB4ua+hQKkdUMXQUq4cyVAU71BU72H2+0BvTdhPpTIcs2dgbjZhhJPHUAsR7Rhxp7JjKL2FSYH6IDcFpj/QUCzXUA/8GMFyX+gRD+4/TdcxvgL80fLBXEqmb0AAAAASUVORK5CYII=)}.inu-cite .content{font-style:normal}\n"] }]
|
|
33
34
|
}], propDecorators: { title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], level: [{ type: i0.Input, args: [{ isSignal: true, alias: "level", required: false }] }] } });
|
|
34
35
|
|
|
35
36
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inugami-ng-components-inu-cite.mjs","sources":["../../../projects/inugami-ng/components/inu-cite/inu-cite.ts","../../../projects/inugami-ng/components/inu-cite/inu-cite.html","../../../projects/inugami-ng/components/inu-cite/inugami-ng-components-inu-cite.ts"],"sourcesContent":["import {Component
|
|
1
|
+
{"version":3,"file":"inugami-ng-components-inu-cite.mjs","sources":["../../../projects/inugami-ng/components/inu-cite/inu-cite.ts","../../../projects/inugami-ng/components/inu-cite/inu-cite.html","../../../projects/inugami-ng/components/inu-cite/inugami-ng-components-inu-cite.ts"],"sourcesContent":["import {\n Component,\n computed,\n inject,\n input,\n OnInit,\n signal,\n TemplateRef,\n viewChildren,\n WritableSignal\n} from '@angular/core';\nimport {InuIcon} from 'inugami-icons';\nimport {InugamiTemplateDirective, InuTemplateRegistryService} from 'inugami-ng/directives';\nimport {NgTemplateOutlet} from '@angular/common';\n\n@Component({\n selector: 'inu-cite',\n standalone: true,\n providers: [InuTemplateRegistryService],\n imports: [InuIcon,NgTemplateOutlet],\n templateUrl: './inu-cite.html',\n styleUrl: './inu-cite.scss',\n})\nexport class InuCite implements OnInit {\n\n //==================================================================================================================\n // ATTRIBUTES\n //==================================================================================================================\n title = input<string | undefined | null>('');\n level = input<string | undefined | null>('');\n\n icon: WritableSignal<string | null> = signal<string | null>(null);\n styleClass: WritableSignal<string | null> = signal<string | null>(null);\n titleTemplate = computed(() => this.registry.getTemplate('title'));\n registry: InuTemplateRegistryService = inject(InuTemplateRegistryService);\n\n ngOnInit(): void {\n this.level();\n const level = this.level()?.toLowerCase() || '';\n const icons: Record<string, string> = {\n success: 'approval',\n warning: 'warning',\n danger: 'danger',\n };\n\n this.icon.set(icons[level] || 'idea');\n\n this.styleClass.set(['inu-cite', level].join(' '));\n\n }\n}\n","\n<cite [class]=\"styleClass()\">\n <header>\n <span>\n @if(icon()){\n <inu-icon [icon]=\"icon()\" [size]=\"2.5\"></inu-icon>\n }\n </span>\n <div class=\"title\">\n @if(titleTemplate()){\n <ng-container *ngTemplateOutlet=\"titleTemplate()\"></ng-container>\n } @else if (title()){\n {{title()}}\n }\n </div>\n </header>\n <div class=\"content\">\n <ng-content />\n </div>\n\n</cite>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;MAuBa,OAAO,CAAA;;;;AAKlB,IAAA,KAAK,GAAG,KAAK,CAA4B,EAAE,iDAAC;AAC5C,IAAA,KAAK,GAAG,KAAK,CAA4B,EAAE,iDAAC;AAE5C,IAAA,IAAI,GAAkC,MAAM,CAAgB,IAAI,gDAAC;AACjE,IAAA,UAAU,GAAkC,MAAM,CAAgB,IAAI,sDAAC;AACvE,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,yDAAC;AAClE,IAAA,QAAQ,GAA+B,MAAM,CAAC,0BAA0B,CAAC;IAEzE,QAAQ,GAAA;QACN,IAAI,CAAC,KAAK,EAAE;QACZ,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;AAC/C,QAAA,MAAM,KAAK,GAA2B;AACpC,YAAA,OAAO,EAAE,UAAU;AACnB,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,MAAM,EAAE,QAAQ;SACjB;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC;AAErC,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEpD;uGA1BW,OAAO,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAP,OAAO,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,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,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,EALP,CAAC,0BAA0B,CAAC,0BClBzC,ocAqBA,EAAA,MAAA,EAAA,CAAA,ojMAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDFY,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,YAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAC,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAIvB,OAAO,EAAA,UAAA,EAAA,CAAA;kBARnB,SAAS;+BACE,UAAU,EAAA,UAAA,EACR,IAAI,EAAA,SAAA,EACL,CAAC,0BAA0B,CAAC,EAAA,OAAA,EAC9B,CAAC,OAAO,EAAC,gBAAgB,CAAC,EAAA,QAAA,EAAA,ocAAA,EAAA,MAAA,EAAA,CAAA,ojMAAA,CAAA,EAAA;;;AEnBrC;;AAEG;;;;"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { inject, ElementRef, input, effect, Directive, signal, Component } from '@angular/core';
|
|
3
|
+
import { CacheServices } from 'inugami-ng/services';
|
|
4
|
+
import { map, tap, shareReplay } from 'rxjs';
|
|
5
|
+
import { HttpClient } from '@angular/common/http';
|
|
6
|
+
import hljs from 'highlight.js';
|
|
7
|
+
|
|
8
|
+
class InuHighlightDirective {
|
|
9
|
+
el = inject(ElementRef);
|
|
10
|
+
// On utilise des signaux pour la réactivité
|
|
11
|
+
code = input('', { ...(ngDevMode ? { debugName: "code" } : {}), alias: 'inuHighlight' });
|
|
12
|
+
lang = input(undefined, ...(ngDevMode ? [{ debugName: "lang" }] : []));
|
|
13
|
+
constructor() {
|
|
14
|
+
effect(() => {
|
|
15
|
+
const codeValue = this.code() || '';
|
|
16
|
+
const language = this.lang() || '';
|
|
17
|
+
const nativeElement = this.el.nativeElement;
|
|
18
|
+
// Reset du contenu et application de la coloration
|
|
19
|
+
nativeElement.textContent = codeValue;
|
|
20
|
+
if (language) {
|
|
21
|
+
nativeElement.className = `language-${language}`;
|
|
22
|
+
}
|
|
23
|
+
hljs.highlightElement(nativeElement);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuHighlightDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
27
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.0.8", type: InuHighlightDirective, isStandalone: true, selector: "code[inuHighlight], pre[inuHighlight]", inputs: { code: { classPropertyName: "code", publicName: "inuHighlight", isSignal: true, isRequired: false, transformFunction: null }, lang: { classPropertyName: "lang", publicName: "lang", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
|
|
28
|
+
}
|
|
29
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuHighlightDirective, decorators: [{
|
|
30
|
+
type: Directive,
|
|
31
|
+
args: [{
|
|
32
|
+
selector: 'code[inuHighlight], pre[inuHighlight]',
|
|
33
|
+
standalone: true
|
|
34
|
+
}]
|
|
35
|
+
}], ctorParameters: () => [], propDecorators: { code: [{ type: i0.Input, args: [{ isSignal: true, alias: "inuHighlight", required: false }] }], lang: [{ type: i0.Input, args: [{ isSignal: true, alias: "lang", required: false }] }] } });
|
|
36
|
+
|
|
37
|
+
class InuCode {
|
|
38
|
+
//==================================================================================================================
|
|
39
|
+
// ATTRIBUTES
|
|
40
|
+
//==================================================================================================================
|
|
41
|
+
source = input(undefined, ...(ngDevMode ? [{ debugName: "source" }] : []));
|
|
42
|
+
url = input(undefined, ...(ngDevMode ? [{ debugName: "url" }] : []));
|
|
43
|
+
tag = input(undefined, ...(ngDevMode ? [{ debugName: "tag" }] : []));
|
|
44
|
+
type = input(undefined, ...(ngDevMode ? [{ debugName: "type" }] : []));
|
|
45
|
+
title = input(undefined, ...(ngDevMode ? [{ debugName: "title" }] : []));
|
|
46
|
+
http = inject(HttpClient);
|
|
47
|
+
cache = inject(CacheServices);
|
|
48
|
+
sourceCode = signal('', ...(ngDevMode ? [{ debugName: "sourceCode" }] : []));
|
|
49
|
+
_title = signal('', ...(ngDevMode ? [{ debugName: "_title" }] : []));
|
|
50
|
+
_type = signal('', ...(ngDevMode ? [{ debugName: "_type" }] : []));
|
|
51
|
+
//==================================================================================================================
|
|
52
|
+
// INITIALIZE
|
|
53
|
+
//==================================================================================================================
|
|
54
|
+
constructor() {
|
|
55
|
+
effect(() => this.init());
|
|
56
|
+
}
|
|
57
|
+
init() {
|
|
58
|
+
const url = this.url();
|
|
59
|
+
if (this.title()) {
|
|
60
|
+
this._title.set(this.title());
|
|
61
|
+
}
|
|
62
|
+
if (url) {
|
|
63
|
+
this.loadFormUrl(url);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
const source = this.source();
|
|
67
|
+
if (source) {
|
|
68
|
+
this.sourceCode.set(source);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
loadFormUrl(url) {
|
|
73
|
+
const data = this.loadFormCache(url);
|
|
74
|
+
if (data) {
|
|
75
|
+
this.initSourceCode(data);
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
const cacheKey = `inu-code_${url}`;
|
|
79
|
+
const pending = this.cache.getPending(cacheKey);
|
|
80
|
+
if (pending) {
|
|
81
|
+
pending.subscribe(res => this.initSourceCode(res));
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
const request = this.http.get(url, { responseType: 'text' })
|
|
85
|
+
.pipe(map(res => this.parseData(res, url)), tap(data => this.cache.set(cacheKey, data)), shareReplay(1));
|
|
86
|
+
this.cache.setPending(cacheKey, request);
|
|
87
|
+
request.subscribe();
|
|
88
|
+
}
|
|
89
|
+
initSourceCode(data) {
|
|
90
|
+
const values = data.filter(i => this.tag() === i.name);
|
|
91
|
+
if (values.length > 0) {
|
|
92
|
+
const sourceCodeValue = values[0];
|
|
93
|
+
this.sourceCode.set(sourceCodeValue.content);
|
|
94
|
+
const currentTitle = this.title();
|
|
95
|
+
if (this.title()) {
|
|
96
|
+
this._title.set(this.title());
|
|
97
|
+
}
|
|
98
|
+
else if (sourceCodeValue.title) {
|
|
99
|
+
this._title.set(sourceCodeValue.title);
|
|
100
|
+
}
|
|
101
|
+
if (this.type()) {
|
|
102
|
+
this._type.set(this.type());
|
|
103
|
+
}
|
|
104
|
+
else if (sourceCodeValue.type) {
|
|
105
|
+
this._type.set(sourceCodeValue.type);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
//==================================================================================================================
|
|
110
|
+
// PARSE
|
|
111
|
+
//==================================================================================================================
|
|
112
|
+
parseData(response, url) {
|
|
113
|
+
const parser = new DOMParser();
|
|
114
|
+
const node = parser.parseFromString(response, "text/xml");
|
|
115
|
+
const sources = node.getElementsByTagName("src");
|
|
116
|
+
const result = [];
|
|
117
|
+
for (let i = 0; i < sources.length; i++) {
|
|
118
|
+
let sourceNode = sources[i];
|
|
119
|
+
let sourceName = sourceNode.getAttribute('name') ?? '';
|
|
120
|
+
let sourceContent = this.cleanContent(sourceNode.textContent ?? '');
|
|
121
|
+
let type = sourceNode.getAttribute('type') ?? undefined;
|
|
122
|
+
let title = sourceNode.getAttribute('title') ?? undefined;
|
|
123
|
+
result.push({
|
|
124
|
+
name: sourceName,
|
|
125
|
+
content: sourceContent,
|
|
126
|
+
type: type,
|
|
127
|
+
title: title
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
this.initSourceCode(result);
|
|
131
|
+
return result;
|
|
132
|
+
}
|
|
133
|
+
//==================================================================================================================
|
|
134
|
+
// TOOLS
|
|
135
|
+
//==================================================================================================================
|
|
136
|
+
loadFormCache(url) {
|
|
137
|
+
const cacheKey = `inu-code_${url}`;
|
|
138
|
+
const result = this.cache.get(cacheKey);
|
|
139
|
+
return result;
|
|
140
|
+
}
|
|
141
|
+
setToCache(url, value) {
|
|
142
|
+
const cacheKey = `inu-code_${url}`;
|
|
143
|
+
if (value) {
|
|
144
|
+
this.cache.set(cacheKey, value);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
cleanContent(value) {
|
|
148
|
+
let result = [];
|
|
149
|
+
let buffer = [];
|
|
150
|
+
let line = value.split("\n");
|
|
151
|
+
let enableClean = false;
|
|
152
|
+
for (let i = 0; i < line.length; i++) {
|
|
153
|
+
if (enableClean || line[i].trim() != '') {
|
|
154
|
+
buffer.push(line[i]);
|
|
155
|
+
enableClean = true;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
enableClean = false;
|
|
159
|
+
for (let i = buffer.length - 1; i >= 0; i--) {
|
|
160
|
+
if (enableClean || buffer[i].trim() != '') {
|
|
161
|
+
result.push(buffer[i]);
|
|
162
|
+
enableClean = true;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
result.reverse();
|
|
166
|
+
return result.join('\n');
|
|
167
|
+
}
|
|
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"] }] });
|
|
170
|
+
}
|
|
171
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuCode, decorators: [{
|
|
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"] }]
|
|
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
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Generated bundle index. Do not edit.
|
|
178
|
+
*/
|
|
179
|
+
|
|
180
|
+
export { InuCode };
|
|
181
|
+
//# sourceMappingURL=inugami-ng-components-inu-code.mjs.map
|
|
@@ -0,0 +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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"}
|