@ng-vagabond-lab/ng-dsv 0.2.2 → 0.2.4
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/assets/global.scss +1 -2
- package/fesm2022/ng-vagabond-lab-ng-dsv-api.mjs +6 -6
- package/fesm2022/ng-vagabond-lab-ng-dsv-base-service.mjs +12 -12
- package/fesm2022/ng-vagabond-lab-ng-dsv-base.mjs +21 -21
- package/fesm2022/ng-vagabond-lab-ng-dsv-date.mjs +3 -3
- package/fesm2022/ng-vagabond-lab-ng-dsv-ds-accordion.mjs +3 -3
- package/fesm2022/ng-vagabond-lab-ng-dsv-ds-avatar.mjs +3 -3
- package/fesm2022/ng-vagabond-lab-ng-dsv-ds-button.mjs +6 -6
- package/fesm2022/ng-vagabond-lab-ng-dsv-ds-card.mjs +12 -12
- package/fesm2022/ng-vagabond-lab-ng-dsv-ds-chip.mjs +3 -3
- package/fesm2022/ng-vagabond-lab-ng-dsv-ds-color.mjs +6 -6
- package/fesm2022/ng-vagabond-lab-ng-dsv-ds-container.mjs +3 -3
- package/fesm2022/ng-vagabond-lab-ng-dsv-ds-file.mjs +9 -9
- package/fesm2022/ng-vagabond-lab-ng-dsv-ds-form-reactive.mjs +24 -24
- package/fesm2022/ng-vagabond-lab-ng-dsv-ds-form-signal.mjs +27 -27
- package/fesm2022/ng-vagabond-lab-ng-dsv-ds-header.mjs +3 -3
- package/fesm2022/ng-vagabond-lab-ng-dsv-ds-img.mjs +3 -3
- package/fesm2022/ng-vagabond-lab-ng-dsv-ds-item.mjs +3 -3
- package/fesm2022/ng-vagabond-lab-ng-dsv-ds-linear-progress.mjs +3 -3
- package/fesm2022/ng-vagabond-lab-ng-dsv-ds-list.mjs +12 -12
- package/fesm2022/ng-vagabond-lab-ng-dsv-ds-menu.mjs +12 -12
- package/fesm2022/ng-vagabond-lab-ng-dsv-ds-modal.mjs +12 -12
- package/fesm2022/ng-vagabond-lab-ng-dsv-ds-paginate.mjs +3 -3
- package/fesm2022/ng-vagabond-lab-ng-dsv-ds-scroll.mjs +49 -58
- package/fesm2022/ng-vagabond-lab-ng-dsv-ds-scroll.mjs.map +1 -1
- package/fesm2022/ng-vagabond-lab-ng-dsv-ds-skeleton.mjs +3 -3
- package/fesm2022/ng-vagabond-lab-ng-dsv-ds-tab.mjs +6 -6
- package/fesm2022/ng-vagabond-lab-ng-dsv-ds-table.mjs +3 -3
- package/fesm2022/ng-vagabond-lab-ng-dsv-ds-theme.mjs +9 -9
- package/fesm2022/ng-vagabond-lab-ng-dsv-ds-toast.mjs +6 -6
- package/fesm2022/ng-vagabond-lab-ng-dsv-ds-tooltip.mjs +3 -3
- package/fesm2022/ng-vagabond-lab-ng-dsv-environment.mjs +3 -3
- package/fesm2022/ng-vagabond-lab-ng-dsv-module-admin.mjs +15 -15
- package/fesm2022/ng-vagabond-lab-ng-dsv-module-auth.mjs +9 -9
- package/fesm2022/ng-vagabond-lab-ng-dsv-module-contact.mjs +8 -7
- package/fesm2022/ng-vagabond-lab-ng-dsv-module-contact.mjs.map +1 -1
- package/fesm2022/ng-vagabond-lab-ng-dsv-pipe.mjs +6 -6
- package/fesm2022/ng-vagabond-lab-ng-dsv-platform.mjs +4 -4
- package/fesm2022/ng-vagabond-lab-ng-dsv-platform.mjs.map +1 -1
- package/fesm2022/ng-vagabond-lab-ng-dsv-router.mjs +9 -10
- package/fesm2022/ng-vagabond-lab-ng-dsv-router.mjs.map +1 -1
- package/fesm2022/ng-vagabond-lab-ng-dsv-storage.mjs +3 -3
- package/fesm2022/ng-vagabond-lab-ng-dsv-template.mjs +29 -17
- package/fesm2022/ng-vagabond-lab-ng-dsv-template.mjs.map +1 -1
- package/fesm2022/ng-vagabond-lab-ng-dsv.mjs +6 -6
- package/package.json +1 -1
- package/types/ng-vagabond-lab-ng-dsv-ds-scroll.d.ts +2 -1
- package/types/ng-vagabond-lab-ng-dsv-module-contact.d.ts +2 -1
- package/types/ng-vagabond-lab-ng-dsv-template.d.ts +11 -3
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Component } from '@angular/core';
|
|
2
|
+
import { input, Component } from '@angular/core';
|
|
3
|
+
import { DsvButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/button';
|
|
3
4
|
import { DsvCardComponent } from '@ng-vagabond-lab/ng-dsv/ds/card';
|
|
4
5
|
import { DsvChipComponent } from '@ng-vagabond-lab/ng-dsv/ds/chip';
|
|
5
6
|
import { RouterExternalPipe } from '@ng-vagabond-lab/ng-dsv/router';
|
|
6
|
-
import { DsvButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/button';
|
|
7
7
|
|
|
8
8
|
class ContactComponent {
|
|
9
|
-
|
|
10
|
-
static
|
|
9
|
+
contactEmail = input('vagabond.git@gmail.com', ...(ngDevMode ? [{ debugName: "contactEmail" }] : /* istanbul ignore next */ []));
|
|
10
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ContactComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
11
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: ContactComponent, isStandalone: true, selector: "dsv-auth", inputs: { contactEmail: { classPropertyName: "contactEmail", publicName: "contactEmail", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<section class=\"contact-page\">\n <dsv-card>\n <div class=\"content\">\n <div class=\"left-side\">\n <img title=\"vagabond\" alt=\"vagabond\" src=\"/images/vagabond.png\" />\n <h2>vagabond</h2>\n <p>passionn\u00E9 par les technologies du Web<br />20 ans d'exp\u00E9rience</p>\n <div class=\"chips\">\n <dsv-chip text=\"ANGULAR\" color=\"default\" />\n <dsv-chip text=\"QUARKUS\" color=\"default\" />\n <dsv-chip text=\"DOCKER\" color=\"default\" />\n <dsv-chip text=\"GIT\" color=\"default\" />\n </div>\n </div>\n <div class=\"right-side\">\n <div>\n <h2>Me contacter</h2>\n <p>\n Pour me contacter, veuillez \u00E9crire \u00E0 l'adresse mail suivante :\n <a href=\"mailto:{{ contactEmail() }}\" dsvLinkExternal>{{ contactEmail() }}</a>\n </p>\n </div>\n <div>\n <h2>Me suivre</h2>\n <div class=\"follow-buttons\">\n <dsv-button variant=\"outlined\" color=\"default\">\n <a href=\"https://discord.com/invite/TUy5MtVRt7\" dsvLinkExternal>\n <img\n class=\"button-contact\"\n title=\"logo discord\"\n alt=\"logo discord\"\n width=\"20px\"\n src=\"/images/icons/discord.png\"\n />\n Rejoindre mon serveur Discord\n </a>\n </dsv-button>\n <dsv-button variant=\"outlined\" color=\"default\">\n <a href=\"https://github.com/vagabon\" dsvLinkExternal>\n <img\n class=\"button-contact\"\n title=\"logo discord\"\n alt=\"logo discord\"\n width=\"20px\"\n src=\"/images/icons/github.png\"\n />\n Me suivre sur GitHub\n </a>\n </dsv-button>\n <dsv-button>\n <a href=\"https://blog.vagabond.synology.me/\" dsvLinkExternal>\n <img\n class=\"button-contact\"\n title=\"logo discord\"\n alt=\"logo discord\"\n width=\"20px\"\n src=\"/images/icons/blog.png\"\n />\n Suivre mon blog\n </a>\n </dsv-button>\n </div>\n </div>\n </div>\n </div>\n </dsv-card>\n</section>\n\n<section class=\"contact-projects\">\n <dsv-card>\n <h2>\n <i class=\"ri-file-video-line\"></i>\n Movie Keeper\n </h2>\n <div class=\"project-content\">\n <img title=\"logo Movie Keeper\" alt=\"logo Movie Keeper\" width=\"40px\" src=\"/images/icons/mk.png\" />\n <p>\n Movie Keeper est votre espace personnel pour organiser ce que vous regardez. Cr\u00E9ez des listes\n personnalis\u00E9es - films \u00E0 voir, coups de c\u0153ur, top 10, favoris.\n </p>\n </div>\n <a href=\"https://movie-keeper.fr\" title=\"https://movie-keeper.fr\" dsvLinkExternal>\n https://movie-keeper.fr\n </a>\n </dsv-card>\n <dsv-card>\n <h2>\n <i class=\"ri-news-line\"></i>\n Blog & Tools\n </h2>\n <div class=\"project-content\">\n <img\n title=\"logo blog vagabond\"\n alt=\"logo blog vagabond\"\n width=\"40px\"\n src=\"/images/icons/blog.png\"\n />\n <p>\n Mon blog avec la liste des outils que j'utilise pour cr\u00E9\u00E9 mes SaaS.<br />\n Contient \u00E9galement une gestion des todo list \u00E0 partager avec d'autre membre.\n </p>\n </div>\n <a href=\"https://blog.vagabond.synology.me\" title=\"//blog.vagabond.synology.me\" dsvLinkExternal>\n https://blog.vagabond.synology.me\n </a>\n </dsv-card>\n <dsv-card>\n <h2>\n <i class=\"ri-chat-1-line\"></i>\n OwnYourChatbots\n </h2>\n <div class=\"project-content\">\n <img\n title=\"logo blog vagabond\"\n alt=\"logo blog vagabond\"\n width=\"40px\"\n src=\"/images/icons/oyc.png\"\n />\n <p>\n Cr\u00E9ation et entrainement de Chatbot avec une int\u00E9gration par iFrame ou bot Discord.<br />\n Plusieurs mod\u00E8les disponibles: ChatGpt, Mistral et Llama.\n </p>\n </div>\n <a href=\"https://www.ownyourchatbots.com\" title=\"OwnYourChatbots\" dsvLinkExternal>\n https://www.ownyourchatbots.com\n </a>\n </dsv-card>\n</section>\n", styles: [":host p{text-align:justify}:host .content{display:flex}:host .content h2{font-size:1.5rem;font-weight:700!important;margin:10px 0!important}:host .content p{font-size:1.1rem}:host .content .left-side{width:50%;display:flex;flex-direction:column;align-items:center}:host .content .left-side img{width:200px;border-radius:50%;border:3px solid var(--primary);padding:5px}:host .content .left-side p{text-align:center}:host .content .left-side .chips{margin:15px 0;display:flex;flex-wrap:wrap;gap:10px}:host .content .left-side .chips dsv-chip{--chip-padding: 10px;--chip-font-size: .9rem;--chip-font-weight: 550}:host .content .right-side{width:50%;display:flex;flex-direction:column;gap:20px}:host .content .right-side h2{margin-bottom:20px!important}:host .content .right-side .follow-buttons{display:flex;flex-direction:column;gap:10px;margin-top:30px}:host .content .right-side .follow-buttons dsv-button{--button-width: 100%;--button-font-size: .8rem;--button-font-weight: 400;--button-padding: 4px}:host .content .right-side .follow-buttons dsv-button a{display:flex;gap:5px;width:100%!important;color:var(--text)!important;border:0px!important;align-items:center;justify-content:center}@media screen and (max-width:800px){:host .content{flex-direction:column}:host .content .left-side{width:100%!important}:host .content .right-side{text-align:center;align-items:center;width:100%!important}:host .content .right-side>div{width:100%!important}:host .content .right-side p{text-align:center}:host .content .follow-buttons{width:100%}}:host .contact-projects{display:flex;flex-direction:row}:host .contact-projects dsv-card{width:33%}:host .contact-projects h2{display:flex;gap:10px}:host .contact-projects .project-content{display:flex;gap:20px;align-items:center;margin-bottom:10px;flex:1}@media screen and (max-width:800px){:host .contact-projects{flex-direction:column}:host .contact-projects dsv-card{width:calc(100% - 10px)!important}}\n"], dependencies: [{ kind: "component", type: DsvCardComponent, selector: "dsv-card" }, { kind: "component", type: DsvChipComponent, selector: "dsv-chip", inputs: ["text"], outputs: ["delete"] }, { kind: "directive", type: RouterExternalPipe, selector: "a[dsvLinkExternal]", outputs: ["dsvLinkExternal"] }, { kind: "component", type: DsvButtonComponent, selector: "dsv-button", inputs: ["libelle", "routerLink", "icon", "iconEnd", "disabled", "noHover", "type", "prevent"], outputs: ["callback"] }] });
|
|
11
12
|
}
|
|
12
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
13
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ContactComponent, decorators: [{
|
|
13
14
|
type: Component,
|
|
14
|
-
args: [{ selector: 'dsv-auth', imports: [DsvCardComponent, DsvChipComponent, RouterExternalPipe, DsvButtonComponent], template: "<section class=\"contact-page\">\n <dsv-card>\n <div class=\"content\">\n <div class=\"left-side\">\n <img title=\"vagabond\" alt=\"vagabond\" src=\"/images/vagabond.png\" />\n <h2>vagabond</h2>\n <p>passionn\u00E9 par les technologies du Web<br />20 ans d'exp\u00E9rience</p>\n <div class=\"chips\">\n <dsv-chip text=\"ANGULAR\" color=\"default\" />\n <dsv-chip text=\"QUARKUS\" color=\"default\" />\n <dsv-chip text=\"DOCKER\" color=\"default\" />\n <dsv-chip text=\"GIT\" color=\"default\" />\n </div>\n </div>\n <div class=\"right-side\">\n <div>\n <h2>Me contacter</h2>\n <p>\n Pour me contacter, veuillez \u00E9crire \u00E0 l'adresse mail suivante :\n <a href=\"mailto:
|
|
15
|
-
}] });
|
|
15
|
+
args: [{ selector: 'dsv-auth', imports: [DsvCardComponent, DsvChipComponent, RouterExternalPipe, DsvButtonComponent], template: "<section class=\"contact-page\">\n <dsv-card>\n <div class=\"content\">\n <div class=\"left-side\">\n <img title=\"vagabond\" alt=\"vagabond\" src=\"/images/vagabond.png\" />\n <h2>vagabond</h2>\n <p>passionn\u00E9 par les technologies du Web<br />20 ans d'exp\u00E9rience</p>\n <div class=\"chips\">\n <dsv-chip text=\"ANGULAR\" color=\"default\" />\n <dsv-chip text=\"QUARKUS\" color=\"default\" />\n <dsv-chip text=\"DOCKER\" color=\"default\" />\n <dsv-chip text=\"GIT\" color=\"default\" />\n </div>\n </div>\n <div class=\"right-side\">\n <div>\n <h2>Me contacter</h2>\n <p>\n Pour me contacter, veuillez \u00E9crire \u00E0 l'adresse mail suivante :\n <a href=\"mailto:{{ contactEmail() }}\" dsvLinkExternal>{{ contactEmail() }}</a>\n </p>\n </div>\n <div>\n <h2>Me suivre</h2>\n <div class=\"follow-buttons\">\n <dsv-button variant=\"outlined\" color=\"default\">\n <a href=\"https://discord.com/invite/TUy5MtVRt7\" dsvLinkExternal>\n <img\n class=\"button-contact\"\n title=\"logo discord\"\n alt=\"logo discord\"\n width=\"20px\"\n src=\"/images/icons/discord.png\"\n />\n Rejoindre mon serveur Discord\n </a>\n </dsv-button>\n <dsv-button variant=\"outlined\" color=\"default\">\n <a href=\"https://github.com/vagabon\" dsvLinkExternal>\n <img\n class=\"button-contact\"\n title=\"logo discord\"\n alt=\"logo discord\"\n width=\"20px\"\n src=\"/images/icons/github.png\"\n />\n Me suivre sur GitHub\n </a>\n </dsv-button>\n <dsv-button>\n <a href=\"https://blog.vagabond.synology.me/\" dsvLinkExternal>\n <img\n class=\"button-contact\"\n title=\"logo discord\"\n alt=\"logo discord\"\n width=\"20px\"\n src=\"/images/icons/blog.png\"\n />\n Suivre mon blog\n </a>\n </dsv-button>\n </div>\n </div>\n </div>\n </div>\n </dsv-card>\n</section>\n\n<section class=\"contact-projects\">\n <dsv-card>\n <h2>\n <i class=\"ri-file-video-line\"></i>\n Movie Keeper\n </h2>\n <div class=\"project-content\">\n <img title=\"logo Movie Keeper\" alt=\"logo Movie Keeper\" width=\"40px\" src=\"/images/icons/mk.png\" />\n <p>\n Movie Keeper est votre espace personnel pour organiser ce que vous regardez. Cr\u00E9ez des listes\n personnalis\u00E9es - films \u00E0 voir, coups de c\u0153ur, top 10, favoris.\n </p>\n </div>\n <a href=\"https://movie-keeper.fr\" title=\"https://movie-keeper.fr\" dsvLinkExternal>\n https://movie-keeper.fr\n </a>\n </dsv-card>\n <dsv-card>\n <h2>\n <i class=\"ri-news-line\"></i>\n Blog & Tools\n </h2>\n <div class=\"project-content\">\n <img\n title=\"logo blog vagabond\"\n alt=\"logo blog vagabond\"\n width=\"40px\"\n src=\"/images/icons/blog.png\"\n />\n <p>\n Mon blog avec la liste des outils que j'utilise pour cr\u00E9\u00E9 mes SaaS.<br />\n Contient \u00E9galement une gestion des todo list \u00E0 partager avec d'autre membre.\n </p>\n </div>\n <a href=\"https://blog.vagabond.synology.me\" title=\"//blog.vagabond.synology.me\" dsvLinkExternal>\n https://blog.vagabond.synology.me\n </a>\n </dsv-card>\n <dsv-card>\n <h2>\n <i class=\"ri-chat-1-line\"></i>\n OwnYourChatbots\n </h2>\n <div class=\"project-content\">\n <img\n title=\"logo blog vagabond\"\n alt=\"logo blog vagabond\"\n width=\"40px\"\n src=\"/images/icons/oyc.png\"\n />\n <p>\n Cr\u00E9ation et entrainement de Chatbot avec une int\u00E9gration par iFrame ou bot Discord.<br />\n Plusieurs mod\u00E8les disponibles: ChatGpt, Mistral et Llama.\n </p>\n </div>\n <a href=\"https://www.ownyourchatbots.com\" title=\"OwnYourChatbots\" dsvLinkExternal>\n https://www.ownyourchatbots.com\n </a>\n </dsv-card>\n</section>\n", styles: [":host p{text-align:justify}:host .content{display:flex}:host .content h2{font-size:1.5rem;font-weight:700!important;margin:10px 0!important}:host .content p{font-size:1.1rem}:host .content .left-side{width:50%;display:flex;flex-direction:column;align-items:center}:host .content .left-side img{width:200px;border-radius:50%;border:3px solid var(--primary);padding:5px}:host .content .left-side p{text-align:center}:host .content .left-side .chips{margin:15px 0;display:flex;flex-wrap:wrap;gap:10px}:host .content .left-side .chips dsv-chip{--chip-padding: 10px;--chip-font-size: .9rem;--chip-font-weight: 550}:host .content .right-side{width:50%;display:flex;flex-direction:column;gap:20px}:host .content .right-side h2{margin-bottom:20px!important}:host .content .right-side .follow-buttons{display:flex;flex-direction:column;gap:10px;margin-top:30px}:host .content .right-side .follow-buttons dsv-button{--button-width: 100%;--button-font-size: .8rem;--button-font-weight: 400;--button-padding: 4px}:host .content .right-side .follow-buttons dsv-button a{display:flex;gap:5px;width:100%!important;color:var(--text)!important;border:0px!important;align-items:center;justify-content:center}@media screen and (max-width:800px){:host .content{flex-direction:column}:host .content .left-side{width:100%!important}:host .content .right-side{text-align:center;align-items:center;width:100%!important}:host .content .right-side>div{width:100%!important}:host .content .right-side p{text-align:center}:host .content .follow-buttons{width:100%}}:host .contact-projects{display:flex;flex-direction:row}:host .contact-projects dsv-card{width:33%}:host .contact-projects h2{display:flex;gap:10px}:host .contact-projects .project-content{display:flex;gap:20px;align-items:center;margin-bottom:10px;flex:1}@media screen and (max-width:800px){:host .contact-projects{flex-direction:column}:host .contact-projects dsv-card{width:calc(100% - 10px)!important}}\n"] }]
|
|
16
|
+
}], propDecorators: { contactEmail: [{ type: i0.Input, args: [{ isSignal: true, alias: "contactEmail", required: false }] }] } });
|
|
16
17
|
|
|
17
18
|
/**
|
|
18
19
|
* Generated bundle index. Do not edit.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-vagabond-lab-ng-dsv-module-contact.mjs","sources":["../../../projects/ng-dsv/module/contact/component/contact.component.ts","../../../projects/ng-dsv/module/contact/component/contact.component.html","../../../projects/ng-dsv/module/contact/ng-vagabond-lab-ng-dsv-module-contact.ts"],"sourcesContent":["import { Component } from '@angular/core';\nimport {
|
|
1
|
+
{"version":3,"file":"ng-vagabond-lab-ng-dsv-module-contact.mjs","sources":["../../../projects/ng-dsv/module/contact/component/contact.component.ts","../../../projects/ng-dsv/module/contact/component/contact.component.html","../../../projects/ng-dsv/module/contact/ng-vagabond-lab-ng-dsv-module-contact.ts"],"sourcesContent":["import { Component, input } from '@angular/core';\nimport { DsvButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/button';\nimport { DsvCardComponent } from '@ng-vagabond-lab/ng-dsv/ds/card';\nimport { DsvChipComponent } from '@ng-vagabond-lab/ng-dsv/ds/chip';\nimport { RouterExternalPipe } from '@ng-vagabond-lab/ng-dsv/router';\n\n@Component({\n selector: 'dsv-auth',\n imports: [DsvCardComponent, DsvChipComponent, RouterExternalPipe, DsvButtonComponent],\n templateUrl: './contact.component.html',\n styleUrls: ['./contact.component.scss'],\n})\nexport class ContactComponent {\n readonly contactEmail = input<string>('vagabond.git@gmail.com');\n}\n","<section class=\"contact-page\">\n <dsv-card>\n <div class=\"content\">\n <div class=\"left-side\">\n <img title=\"vagabond\" alt=\"vagabond\" src=\"/images/vagabond.png\" />\n <h2>vagabond</h2>\n <p>passionné par les technologies du Web<br />20 ans d'expérience</p>\n <div class=\"chips\">\n <dsv-chip text=\"ANGULAR\" color=\"default\" />\n <dsv-chip text=\"QUARKUS\" color=\"default\" />\n <dsv-chip text=\"DOCKER\" color=\"default\" />\n <dsv-chip text=\"GIT\" color=\"default\" />\n </div>\n </div>\n <div class=\"right-side\">\n <div>\n <h2>Me contacter</h2>\n <p>\n Pour me contacter, veuillez écrire à l'adresse mail suivante :\n <a href=\"mailto:{{ contactEmail() }}\" dsvLinkExternal>{{ contactEmail() }}</a>\n </p>\n </div>\n <div>\n <h2>Me suivre</h2>\n <div class=\"follow-buttons\">\n <dsv-button variant=\"outlined\" color=\"default\">\n <a href=\"https://discord.com/invite/TUy5MtVRt7\" dsvLinkExternal>\n <img\n class=\"button-contact\"\n title=\"logo discord\"\n alt=\"logo discord\"\n width=\"20px\"\n src=\"/images/icons/discord.png\"\n />\n Rejoindre mon serveur Discord\n </a>\n </dsv-button>\n <dsv-button variant=\"outlined\" color=\"default\">\n <a href=\"https://github.com/vagabon\" dsvLinkExternal>\n <img\n class=\"button-contact\"\n title=\"logo discord\"\n alt=\"logo discord\"\n width=\"20px\"\n src=\"/images/icons/github.png\"\n />\n Me suivre sur GitHub\n </a>\n </dsv-button>\n <dsv-button>\n <a href=\"https://blog.vagabond.synology.me/\" dsvLinkExternal>\n <img\n class=\"button-contact\"\n title=\"logo discord\"\n alt=\"logo discord\"\n width=\"20px\"\n src=\"/images/icons/blog.png\"\n />\n Suivre mon blog\n </a>\n </dsv-button>\n </div>\n </div>\n </div>\n </div>\n </dsv-card>\n</section>\n\n<section class=\"contact-projects\">\n <dsv-card>\n <h2>\n <i class=\"ri-file-video-line\"></i>\n Movie Keeper\n </h2>\n <div class=\"project-content\">\n <img title=\"logo Movie Keeper\" alt=\"logo Movie Keeper\" width=\"40px\" src=\"/images/icons/mk.png\" />\n <p>\n Movie Keeper est votre espace personnel pour organiser ce que vous regardez. Créez des listes\n personnalisées - films à voir, coups de cœur, top 10, favoris.\n </p>\n </div>\n <a href=\"https://movie-keeper.fr\" title=\"https://movie-keeper.fr\" dsvLinkExternal>\n https://movie-keeper.fr\n </a>\n </dsv-card>\n <dsv-card>\n <h2>\n <i class=\"ri-news-line\"></i>\n Blog & Tools\n </h2>\n <div class=\"project-content\">\n <img\n title=\"logo blog vagabond\"\n alt=\"logo blog vagabond\"\n width=\"40px\"\n src=\"/images/icons/blog.png\"\n />\n <p>\n Mon blog avec la liste des outils que j'utilise pour créé mes SaaS.<br />\n Contient également une gestion des todo list à partager avec d'autre membre.\n </p>\n </div>\n <a href=\"https://blog.vagabond.synology.me\" title=\"//blog.vagabond.synology.me\" dsvLinkExternal>\n https://blog.vagabond.synology.me\n </a>\n </dsv-card>\n <dsv-card>\n <h2>\n <i class=\"ri-chat-1-line\"></i>\n OwnYourChatbots\n </h2>\n <div class=\"project-content\">\n <img\n title=\"logo blog vagabond\"\n alt=\"logo blog vagabond\"\n width=\"40px\"\n src=\"/images/icons/oyc.png\"\n />\n <p>\n Création et entrainement de Chatbot avec une intégration par iFrame ou bot Discord.<br />\n Plusieurs modèles disponibles: ChatGpt, Mistral et Llama.\n </p>\n </div>\n <a href=\"https://www.ownyourchatbots.com\" title=\"OwnYourChatbots\" dsvLinkExternal>\n https://www.ownyourchatbots.com\n </a>\n </dsv-card>\n</section>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;MAYa,gBAAgB,CAAA;AAChB,IAAA,YAAY,GAAG,KAAK,CAAS,wBAAwB,mFAAC;wGADtD,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECZ7B,0gLAgIA,EAAA,MAAA,EAAA,CAAA,25DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDxHc,gBAAgB,qDAAE,gBAAgB,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,QAAA,EAAA,oBAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,YAAA,EAAA,MAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAI3E,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAN5B,SAAS;+BACI,UAAU,EAAA,OAAA,EACX,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,kBAAkB,CAAC,EAAA,QAAA,EAAA,0gLAAA,EAAA,MAAA,EAAA,CAAA,25DAAA,CAAA,EAAA;;;AERzF;;AAEG;;;;"}
|
|
@@ -12,10 +12,10 @@ class ClickableUrlPipe {
|
|
|
12
12
|
const html = value.replaceAll(URL_PATTERN, (url) => `<a class="text warning" href="${url}" target="_blank" rel="noopener noreferrer">${url}</a>`);
|
|
13
13
|
return this.sanitizer.bypassSecurityTrustHtml(html); // NOSONAR: URLs extracted by URL_PATTERN
|
|
14
14
|
}
|
|
15
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
16
|
-
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.
|
|
15
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ClickableUrlPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
16
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.13", ngImport: i0, type: ClickableUrlPipe, isStandalone: true, name: "clickableUrl" });
|
|
17
17
|
}
|
|
18
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
18
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ClickableUrlPipe, decorators: [{
|
|
19
19
|
type: Pipe,
|
|
20
20
|
args: [{
|
|
21
21
|
name: 'clickableUrl',
|
|
@@ -34,10 +34,10 @@ class YoutubeUrlPipe {
|
|
|
34
34
|
const url = `${YOUTUBE_EMBED_BASE}${key}`;
|
|
35
35
|
return this.sanitizer.bypassSecurityTrustResourceUrl(url); // NOSONAR: URL validated by YOUTUBE_KEY_PATTERN
|
|
36
36
|
}
|
|
37
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
38
|
-
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.
|
|
37
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: YoutubeUrlPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
38
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.13", ngImport: i0, type: YoutubeUrlPipe, isStandalone: true, name: "youtubeUrl" });
|
|
39
39
|
}
|
|
40
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
40
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: YoutubeUrlPipe, decorators: [{
|
|
41
41
|
type: Pipe,
|
|
42
42
|
args: [{
|
|
43
43
|
name: 'youtubeUrl',
|
|
@@ -7,7 +7,7 @@ import { fromEvent, startWith, map } from 'rxjs';
|
|
|
7
7
|
class PlatformService {
|
|
8
8
|
platformId = inject(PLATFORM_ID);
|
|
9
9
|
width = this.isPlatformBrowser()
|
|
10
|
-
? toSignal(fromEvent(
|
|
10
|
+
? toSignal(fromEvent(globalThis, 'resize').pipe(startWith(null), map(() => globalThis.innerWidth)), { initialValue: globalThis.innerWidth })
|
|
11
11
|
: signal(1024);
|
|
12
12
|
isMobile = computed(() => this.width() < 768, ...(ngDevMode ? [{ debugName: "isMobile" }] : /* istanbul ignore next */ []));
|
|
13
13
|
isTablet = computed(() => this.width() >= 768 && this.width() < 1024, ...(ngDevMode ? [{ debugName: "isTablet" }] : /* istanbul ignore next */ []));
|
|
@@ -15,10 +15,10 @@ class PlatformService {
|
|
|
15
15
|
isPlatformBrowser() {
|
|
16
16
|
return isPlatformBrowser(this.platformId);
|
|
17
17
|
}
|
|
18
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
19
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
18
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: PlatformService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
19
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: PlatformService, providedIn: 'root' });
|
|
20
20
|
}
|
|
21
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
21
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: PlatformService, decorators: [{
|
|
22
22
|
type: Injectable,
|
|
23
23
|
args: [{
|
|
24
24
|
providedIn: 'root',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-vagabond-lab-ng-dsv-platform.mjs","sources":["../../../projects/ng-dsv/platform/service/platform.service.ts","../../../projects/ng-dsv/platform/ng-vagabond-lab-ng-dsv-platform.ts"],"sourcesContent":["import { isPlatformBrowser } from '@angular/common';\nimport { computed, inject, Injectable, PLATFORM_ID, signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { fromEvent, map, startWith } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PlatformService {\n readonly platformId = inject(PLATFORM_ID);\n\n width = this.isPlatformBrowser()\n ? toSignal(\n fromEvent(
|
|
1
|
+
{"version":3,"file":"ng-vagabond-lab-ng-dsv-platform.mjs","sources":["../../../projects/ng-dsv/platform/service/platform.service.ts","../../../projects/ng-dsv/platform/ng-vagabond-lab-ng-dsv-platform.ts"],"sourcesContent":["import { isPlatformBrowser } from '@angular/common';\nimport { computed, inject, Injectable, PLATFORM_ID, signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { fromEvent, map, startWith } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PlatformService {\n readonly platformId = inject(PLATFORM_ID);\n\n width = this.isPlatformBrowser()\n ? toSignal(\n fromEvent(globalThis, 'resize').pipe(\n startWith(null),\n map(() => globalThis.innerWidth),\n ),\n { initialValue: globalThis.innerWidth },\n )\n : signal(1024);\n\n isMobile = computed(() => this.width() < 768);\n isTablet = computed(() => this.width() >= 768 && this.width() < 1024);\n isDesktop = computed(() => this.width() >= 1024);\n\n isPlatformBrowser(): boolean {\n return isPlatformBrowser(this.platformId);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;MAQa,eAAe,CAAA;AACf,IAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AAEzC,IAAA,KAAK,GAAG,IAAI,CAAC,iBAAiB;AAC1B,UAAE,QAAQ,CACJ,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,IAAI,CAChC,SAAS,CAAC,IAAI,CAAC,EACf,GAAG,CAAC,MAAM,UAAU,CAAC,UAAU,CAAC,CACnC,EACD,EAAE,YAAY,EAAE,UAAU,CAAC,UAAU,EAAE;AAE7C,UAAE,MAAM,CAAC,IAAI,CAAC;AAElB,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,GAAG,GAAG,+EAAC;IAC7C,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,+EAAC;AACrE,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,gFAAC;IAEhD,iBAAiB,GAAA;AACb,QAAA,OAAO,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;IAC7C;wGAnBS,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAf,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cAFZ,MAAM,EAAA,CAAA;;4FAET,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA;;;ACPD;;AAEG;;;;"}
|
|
@@ -12,10 +12,10 @@ class RouterExternalPipe {
|
|
|
12
12
|
event.stopPropagation();
|
|
13
13
|
this.dsvLinkExternal.emit();
|
|
14
14
|
}
|
|
15
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
16
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.
|
|
15
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: RouterExternalPipe, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
16
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.13", type: RouterExternalPipe, isStandalone: true, selector: "a[dsvLinkExternal]", outputs: { dsvLinkExternal: "dsvLinkExternal" }, host: { attributes: { "target": "_blank", "rel": "noopener noreferrer" }, listeners: { "click": "onClick($event)" }, classAttribute: "primary text bold" }, ngImport: i0 });
|
|
17
17
|
}
|
|
18
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
18
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: RouterExternalPipe, decorators: [{
|
|
19
19
|
type: Directive,
|
|
20
20
|
args: [{
|
|
21
21
|
selector: 'a[dsvLinkExternal]',
|
|
@@ -37,17 +37,16 @@ class RouterInternalPipe {
|
|
|
37
37
|
event.preventDefault();
|
|
38
38
|
const url = this.element.nativeElement.getAttribute('href');
|
|
39
39
|
if (url && url !== '#') {
|
|
40
|
-
this.element.nativeElement.closest('.scroll')?.scrollTo(0, 0);
|
|
41
40
|
this.router.navigate([url]);
|
|
42
41
|
}
|
|
43
42
|
else {
|
|
44
43
|
this.dsvLink.emit();
|
|
45
44
|
}
|
|
46
45
|
}
|
|
47
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
48
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.
|
|
46
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: RouterInternalPipe, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
47
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.13", type: RouterInternalPipe, isStandalone: true, selector: "a[dsvLink]", outputs: { dsvLink: "dsvLink" }, host: { listeners: { "click": "onClick($event)" }, classAttribute: "text" }, ngImport: i0 });
|
|
49
48
|
}
|
|
50
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
49
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: RouterInternalPipe, decorators: [{
|
|
51
50
|
type: Directive,
|
|
52
51
|
args: [{
|
|
53
52
|
selector: 'a[dsvLink]',
|
|
@@ -95,10 +94,10 @@ class RouterService {
|
|
|
95
94
|
goBack() {
|
|
96
95
|
this.location.back();
|
|
97
96
|
}
|
|
98
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
99
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
97
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: RouterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
98
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: RouterService, providedIn: 'root' });
|
|
100
99
|
}
|
|
101
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
100
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: RouterService, decorators: [{
|
|
102
101
|
type: Injectable,
|
|
103
102
|
args: [{
|
|
104
103
|
providedIn: 'root',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-vagabond-lab-ng-dsv-router.mjs","sources":["../../../projects/ng-dsv/router/pipe/router-external.pipe.ts","../../../projects/ng-dsv/router/pipe/router-internal.pipe.ts","../../../projects/ng-dsv/router/service/router.service.ts","../../../projects/ng-dsv/router/ng-vagabond-lab-ng-dsv-router.ts"],"sourcesContent":["import { Directive, output } from '@angular/core';\n\n@Directive({\n selector: 'a[dsvLinkExternal]',\n host: {\n class: 'primary text bold',\n target: '_blank',\n rel: 'noopener noreferrer',\n '(click)': 'onClick($event)',\n },\n})\nexport class RouterExternalPipe {\n readonly dsvLinkExternal = output<void>();\n\n onClick(event: Event): void {\n event.stopPropagation();\n this.dsvLinkExternal.emit();\n }\n}\n","import { Directive, ElementRef, inject, output } from '@angular/core';\nimport { Router } from '@angular/router';\n\n@Directive({\n selector: 'a[dsvLink]',\n host: {\n class: 'text',\n '(click)': 'onClick($event)',\n },\n})\nexport class RouterInternalPipe {\n readonly router = inject(Router);\n readonly element = inject(ElementRef);\n\n readonly dsvLink = output<void>();\n\n onClick(event: Event): void {\n event.stopPropagation();\n event.preventDefault();\n const url = this.element.nativeElement.getAttribute('href');\n if (url && url !== '#') {\n this.
|
|
1
|
+
{"version":3,"file":"ng-vagabond-lab-ng-dsv-router.mjs","sources":["../../../projects/ng-dsv/router/pipe/router-external.pipe.ts","../../../projects/ng-dsv/router/pipe/router-internal.pipe.ts","../../../projects/ng-dsv/router/service/router.service.ts","../../../projects/ng-dsv/router/ng-vagabond-lab-ng-dsv-router.ts"],"sourcesContent":["import { Directive, output } from '@angular/core';\n\n@Directive({\n selector: 'a[dsvLinkExternal]',\n host: {\n class: 'primary text bold',\n target: '_blank',\n rel: 'noopener noreferrer',\n '(click)': 'onClick($event)',\n },\n})\nexport class RouterExternalPipe {\n readonly dsvLinkExternal = output<void>();\n\n onClick(event: Event): void {\n event.stopPropagation();\n this.dsvLinkExternal.emit();\n }\n}\n","import { Directive, ElementRef, inject, output } from '@angular/core';\nimport { Router } from '@angular/router';\n\n@Directive({\n selector: 'a[dsvLink]',\n host: {\n class: 'text',\n '(click)': 'onClick($event)',\n },\n})\nexport class RouterInternalPipe {\n readonly router = inject(Router);\n readonly element = inject(ElementRef);\n\n readonly dsvLink = output<void>();\n\n onClick(event: Event): void {\n event.stopPropagation();\n event.preventDefault();\n const url = this.element.nativeElement.getAttribute('href');\n if (url && url !== '#') {\n this.router.navigate([url]);\n } else {\n this.dsvLink.emit();\n }\n }\n}\n","import { Location } from '@angular/common';\nimport { inject, Injectable, signal } from '@angular/core';\nimport { NavigationCancel, NavigationEnd, NavigationError, NavigationStart, Router } from '@angular/router';\nimport { ModalService } from '@ng-vagabond-lab/ng-dsv/ds/modal';\nimport { PlatformService } from '@ng-vagabond-lab/ng-dsv/platform';\nimport { filter } from 'rxjs';\n\ndeclare const gtag: Function;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class RouterService {\n readonly router = inject(Router);\n readonly modalService = inject(ModalService);\n readonly plateformService = inject(PlatformService);\n readonly location = inject(Location);\n\n readonly isLoading = signal<boolean>(true);\n\n readonly currentUrl = signal<string>('');\n\n interval: ReturnType<typeof setTimeout> | undefined = undefined;\n\n constructor() {\n this.router.events.subscribe((event) => {\n if (event instanceof NavigationStart) {\n this.isLoading.set(true);\n } else if (\n event instanceof NavigationEnd ||\n event instanceof NavigationCancel ||\n event instanceof NavigationError\n ) {\n this.currentUrl.set(event.url);\n this.isLoading.set(false);\n this.modalService.closeAll();\n clearInterval(this.interval);\n }\n });\n }\n\n initAnalytics(key: string): void {\n if (this.plateformService.isPlatformBrowser()) {\n this.router.events\n .pipe(filter((event) => event instanceof NavigationEnd))\n .subscribe((event: NavigationEnd) => {\n gtag('config', key, {\n page_path: event.urlAfterRedirects,\n });\n });\n }\n }\n\n goBack() {\n this.location.back();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -36,10 +36,10 @@ class StorageService {
|
|
|
36
36
|
localStorage.clear();
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
40
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
39
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: StorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
40
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: StorageService, providedIn: 'root' });
|
|
41
41
|
}
|
|
42
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
42
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: StorageService, decorators: [{
|
|
43
43
|
type: Injectable,
|
|
44
44
|
args: [{
|
|
45
45
|
providedIn: 'root',
|
|
@@ -12,10 +12,10 @@ import { DsvCardComponent } from '@ng-vagabond-lab/ng-dsv/ds/card';
|
|
|
12
12
|
class MenuSlotDirective {
|
|
13
13
|
template = inject(TemplateRef);
|
|
14
14
|
menuSlot = input.required(...(ngDevMode ? [{ debugName: "menuSlot" }] : /* istanbul ignore next */ []));
|
|
15
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
16
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.
|
|
15
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: MenuSlotDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
16
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.13", type: MenuSlotDirective, isStandalone: true, selector: "[menuSlot]", inputs: { menuSlot: { classPropertyName: "menuSlot", publicName: "menuSlot", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 });
|
|
17
17
|
}
|
|
18
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
18
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: MenuSlotDirective, decorators: [{
|
|
19
19
|
type: Directive,
|
|
20
20
|
args: [{ selector: '[menuSlot]', standalone: true }]
|
|
21
21
|
}], propDecorators: { menuSlot: [{ type: i0.Input, args: [{ isSignal: true, alias: "menuSlot", required: true }] }] } });
|
|
@@ -32,38 +32,50 @@ class MenuContainer {
|
|
|
32
32
|
isActive(url) {
|
|
33
33
|
return this.routerService.currentUrl().includes(url);
|
|
34
34
|
}
|
|
35
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
36
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
35
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: MenuContainer, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
36
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.13", type: MenuContainer, isStandalone: true, selector: "app-menu-container", inputs: { menu: { classPropertyName: "menu", publicName: "menu", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "slots", predicate: MenuSlotDirective, isSignal: true }], ngImport: i0, template: "<dsv-menu>\n @for (item of menu()?.content; track item.url) {\n @if (!item.role || authService.hasRole(item.role)) {\n <dsv-item\n [icon]=\"item.icon\"\n [text]=\"item.text\"\n [url]=\"item.url\"\n [class.active]=\"isActive(item.url)\"\n (callback)=\"menuService.closeMenu()\"\n />\n <ng-container *ngTemplateOutlet=\"getSlot(item.id)\"></ng-container>\n }\n }\n</dsv-menu>\n", styles: [":host{display:flex;width:100%;height:100%}:host dsv-menu{padding-top:10px}:host dsv-item.active{text-decoration:underline}\n"], dependencies: [{ kind: "component", type: DsvMenuComponent, selector: "dsv-menu", inputs: ["showFooter"] }, { kind: "component", type: DsvItemComponent, selector: "dsv-item", inputs: ["icon", "text", "nb", "url", "small"], outputs: ["callback"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
|
|
37
37
|
}
|
|
38
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
38
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: MenuContainer, decorators: [{
|
|
39
39
|
type: Component,
|
|
40
40
|
args: [{ selector: 'app-menu-container', imports: [DsvMenuComponent, DsvItemComponent, NgTemplateOutlet], template: "<dsv-menu>\n @for (item of menu()?.content; track item.url) {\n @if (!item.role || authService.hasRole(item.role)) {\n <dsv-item\n [icon]=\"item.icon\"\n [text]=\"item.text\"\n [url]=\"item.url\"\n [class.active]=\"isActive(item.url)\"\n (callback)=\"menuService.closeMenu()\"\n />\n <ng-container *ngTemplateOutlet=\"getSlot(item.id)\"></ng-container>\n }\n }\n</dsv-menu>\n", styles: [":host{display:flex;width:100%;height:100%}:host dsv-menu{padding-top:10px}:host dsv-item.active{text-decoration:underline}\n"] }]
|
|
41
41
|
}], propDecorators: { slots: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => MenuSlotDirective), { isSignal: true }] }], menu: [{ type: i0.Input, args: [{ isSignal: true, alias: "menu", required: false }] }] } });
|
|
42
42
|
|
|
43
|
+
class AccessDeniedComponent {
|
|
44
|
+
contactEmail = input('vagabond.git@gmail.com', ...(ngDevMode ? [{ debugName: "contactEmail" }] : /* istanbul ignore next */ []));
|
|
45
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: AccessDeniedComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
46
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: AccessDeniedComponent, isStandalone: true, selector: "lib-access-denied", inputs: { contactEmail: { classPropertyName: "contactEmail", publicName: "contactEmail", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<dsv-card>\n <div class=\"dsv-card-header\">\n <h2>Access Denied</h2>\n </div>\n <div class=\"dsv-card-content\">\n <div class=\"flex error text gap10\">\n <i class=\"ri-information-line\"></i>\n Vous n'avez pas les droits pour acceder \u00E0 cette page.\n </div>\n <div class=\"contact\">\n Pour me contacter, veuillez \u00E9crire \u00E0 l'adresse mail suivante :\n <a href=\"mailto:{{ contactEmail() }}\" dsvLinkExternal>{{ contactEmail() }}</a>\n </div>\n <dsv-button routerLink=\"/\" color=\"primary\" [prevent]=\"false\">page d'accueil</dsv-button>\n </div>\n</dsv-card>\n", styles: [":host{width:100%}:host .dsv-card-content>div{margin:40px 0}:host .dsv-card-content .contact{margin:60px 0}:host .dsv-card-content dsv-button{display:flex;justify-content:center}\n"], dependencies: [{ kind: "component", type: DsvCardComponent, selector: "dsv-card" }, { kind: "component", type: DsvButtonComponent, selector: "dsv-button", inputs: ["libelle", "routerLink", "icon", "iconEnd", "disabled", "noHover", "type", "prevent"], outputs: ["callback"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
|
|
47
|
+
}
|
|
48
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: AccessDeniedComponent, decorators: [{
|
|
49
|
+
type: Component,
|
|
50
|
+
args: [{ selector: 'lib-access-denied', imports: [DsvCardComponent, DsvButtonComponent, RouterLink], template: "<dsv-card>\n <div class=\"dsv-card-header\">\n <h2>Access Denied</h2>\n </div>\n <div class=\"dsv-card-content\">\n <div class=\"flex error text gap10\">\n <i class=\"ri-information-line\"></i>\n Vous n'avez pas les droits pour acceder \u00E0 cette page.\n </div>\n <div class=\"contact\">\n Pour me contacter, veuillez \u00E9crire \u00E0 l'adresse mail suivante :\n <a href=\"mailto:{{ contactEmail() }}\" dsvLinkExternal>{{ contactEmail() }}</a>\n </div>\n <dsv-button routerLink=\"/\" color=\"primary\" [prevent]=\"false\">page d'accueil</dsv-button>\n </div>\n</dsv-card>\n", styles: [":host{width:100%}:host .dsv-card-content>div{margin:40px 0}:host .dsv-card-content .contact{margin:60px 0}:host .dsv-card-content dsv-button{display:flex;justify-content:center}\n"] }]
|
|
51
|
+
}], propDecorators: { contactEmail: [{ type: i0.Input, args: [{ isSignal: true, alias: "contactEmail", required: false }] }] } });
|
|
52
|
+
|
|
43
53
|
class FooterComponent {
|
|
54
|
+
contactEmail = input('vagabond.git@gmail.com', ...(ngDevMode ? [{ debugName: "contactEmail" }] : /* istanbul ignore next */ []));
|
|
44
55
|
copyright = input(...(ngDevMode ? [undefined, { debugName: "copyright" }] : /* istanbul ignore next */ []));
|
|
45
56
|
withMentions = input(true, ...(ngDevMode ? [{ debugName: "withMentions" }] : /* istanbul ignore next */ []));
|
|
46
57
|
withX = input(true, ...(ngDevMode ? [{ debugName: "withX" }] : /* istanbul ignore next */ []));
|
|
47
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
48
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
58
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: FooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
59
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.13", type: FooterComponent, isStandalone: true, selector: "app-footer", inputs: { contactEmail: { classPropertyName: "contactEmail", publicName: "contactEmail", isSignal: true, isRequired: false, transformFunction: null }, copyright: { classPropertyName: "copyright", publicName: "copyright", isSignal: true, isRequired: false, transformFunction: null }, withMentions: { classPropertyName: "withMentions", publicName: "withMentions", isSignal: true, isRequired: false, transformFunction: null }, withX: { classPropertyName: "withX", publicName: "withX", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<footer>\n <hr />\n <ng-content />\n <div class=\"footer-content\">\n <div>\n <div>\n <a href=\"/contact\" dsvLink>Contact</a>\n </div>\n <div>\n <strong>Mail : </strong>\n <a href=\"mailto:{{ contactEmail() }}\" dsvLinkExternal>{{ contactEmail() }}</a>\n </div>\n @if (withMentions()) {\n <div>\n <a href=\"/mentions-legales\" dsvLink>Mentions-legales</a>\n </div>\n }\n </div>\n <div>\n <div class=\"created-by\">\n <a href=\"/contact\" dsvLink\n ><img class=\"vagabond\" title=\"vagabond\" alt=\"vagabond\" src=\"images/vagabond.png\"\n /></a>\n <div>\n <a href=\"/contact\" dsvLink>Cr\u00E9\u00E9 par Vagabond</a>\n <div class=\"flex-row gap5\">\n <a href=\"https://github.com/vagabon\" title=\"Github de Vagabond\" dsvLinkExternal>\n <img title=\"logo Github\" alt=\"logo Github\" src=\"/images/icons/github.png\" />\n </a>\n @if (withX()) {\n <a href=\"https://twitter.com/VagabondDev\" title=\"X de Vagabond\" dsvLinkExternal>\n <img title=\"logo X\" alt=\"logo X\" src=\"/images/icons/x.png\" />\n </a>\n }\n <a href=\"https://discord.gg/TUy5MtVRt7\" title=\"Discord de Vagabond\" dsvLinkExternal>\n <img title=\"logo discord\" alt=\"logo discord\" src=\"/images/icons/discord.png\"\n /></a>\n <a href=\"https://blog.vagabond.synology.me\" title=\"Blog de Vagabond\" dsvLinkExternal>\n <img\n title=\"logo blog vagabond\"\n alt=\"Me suivre sur mon blog\"\n src=\"/images/icons/blog.png\"\n /></a>\n </div>\n </div>\n </div>\n </div>\n </div>\n <p class=\"copyright\">Copyright © 2026 {{ copyright() }}</p>\n</footer>\n", styles: ["footer{padding:15px}footer hr{border:none;height:1px;background:linear-gradient(to right,transparent 0%,var(--border) 10%,var(--border) 90%,transparent 100%)}footer a{font-weight:700}footer>p{font-size:1rem;margin-top:10px;text-align:justify}footer .footer-content{margin-top:20px;align-items:flex-start;display:flex}footer .footer-content>div{width:50%;align-items:flex-start;display:flex;flex-direction:column;gap:20px}footer .footer-content>div:nth-child(2){align-items:end}footer .footer-content .created-by{display:flex;align-items:center;background:#c4c4c4;color:var(--text);border-radius:30px;padding:5px 10px}footer .footer-content .created-by img.vagabond{width:60px;height:60px;border-radius:50%}footer .footer-content .created-by>div{display:flex;flex-direction:column;gap:5px;margin:0 10px}footer .footer-content .created-by>div>span{font-weight:700}footer .footer-content .created-by>div>div{display:flex;gap:5px;align-items:center;justify-content:center}footer .footer-content .created-by>div>div a{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:50%}footer .footer-content .created-by>div>div a img{border-radius:10px;width:25px;height:25px}@media screen and (max-width:510px){footer .footer-content{flex-direction:column}footer .footer-content>div{width:100%}footer .footer-content>div:nth-child(2){align-items:flex-end;margin:10px 10px 0}}footer .copyright{margin-top:20px}:host-context(body.dark) .created-by{background-color:#404040!important}\n"], dependencies: [{ kind: "directive", type: RouterInternalPipe, selector: "a[dsvLink]", outputs: ["dsvLink"] }, { kind: "directive", type: RouterExternalPipe, selector: "a[dsvLinkExternal]", outputs: ["dsvLinkExternal"] }] });
|
|
49
60
|
}
|
|
50
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
61
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: FooterComponent, decorators: [{
|
|
51
62
|
type: Component,
|
|
52
|
-
args: [{ selector: 'app-footer', imports: [RouterInternalPipe, RouterExternalPipe], template: "<footer>\n <hr />\n <ng-content />\n <div class=\"footer-content\">\n <div>\n <div>\n <a href=\"/contact\" dsvLink>Contact</a>\n </div>\n <div>\n <strong>Mail
|
|
53
|
-
}], propDecorators: { copyright: [{ type: i0.Input, args: [{ isSignal: true, alias: "copyright", required: false }] }], withMentions: [{ type: i0.Input, args: [{ isSignal: true, alias: "withMentions", required: false }] }], withX: [{ type: i0.Input, args: [{ isSignal: true, alias: "withX", required: false }] }] } });
|
|
63
|
+
args: [{ selector: 'app-footer', imports: [RouterInternalPipe, RouterExternalPipe], template: "<footer>\n <hr />\n <ng-content />\n <div class=\"footer-content\">\n <div>\n <div>\n <a href=\"/contact\" dsvLink>Contact</a>\n </div>\n <div>\n <strong>Mail : </strong>\n <a href=\"mailto:{{ contactEmail() }}\" dsvLinkExternal>{{ contactEmail() }}</a>\n </div>\n @if (withMentions()) {\n <div>\n <a href=\"/mentions-legales\" dsvLink>Mentions-legales</a>\n </div>\n }\n </div>\n <div>\n <div class=\"created-by\">\n <a href=\"/contact\" dsvLink\n ><img class=\"vagabond\" title=\"vagabond\" alt=\"vagabond\" src=\"images/vagabond.png\"\n /></a>\n <div>\n <a href=\"/contact\" dsvLink>Cr\u00E9\u00E9 par Vagabond</a>\n <div class=\"flex-row gap5\">\n <a href=\"https://github.com/vagabon\" title=\"Github de Vagabond\" dsvLinkExternal>\n <img title=\"logo Github\" alt=\"logo Github\" src=\"/images/icons/github.png\" />\n </a>\n @if (withX()) {\n <a href=\"https://twitter.com/VagabondDev\" title=\"X de Vagabond\" dsvLinkExternal>\n <img title=\"logo X\" alt=\"logo X\" src=\"/images/icons/x.png\" />\n </a>\n }\n <a href=\"https://discord.gg/TUy5MtVRt7\" title=\"Discord de Vagabond\" dsvLinkExternal>\n <img title=\"logo discord\" alt=\"logo discord\" src=\"/images/icons/discord.png\"\n /></a>\n <a href=\"https://blog.vagabond.synology.me\" title=\"Blog de Vagabond\" dsvLinkExternal>\n <img\n title=\"logo blog vagabond\"\n alt=\"Me suivre sur mon blog\"\n src=\"/images/icons/blog.png\"\n /></a>\n </div>\n </div>\n </div>\n </div>\n </div>\n <p class=\"copyright\">Copyright © 2026 {{ copyright() }}</p>\n</footer>\n", styles: ["footer{padding:15px}footer hr{border:none;height:1px;background:linear-gradient(to right,transparent 0%,var(--border) 10%,var(--border) 90%,transparent 100%)}footer a{font-weight:700}footer>p{font-size:1rem;margin-top:10px;text-align:justify}footer .footer-content{margin-top:20px;align-items:flex-start;display:flex}footer .footer-content>div{width:50%;align-items:flex-start;display:flex;flex-direction:column;gap:20px}footer .footer-content>div:nth-child(2){align-items:end}footer .footer-content .created-by{display:flex;align-items:center;background:#c4c4c4;color:var(--text);border-radius:30px;padding:5px 10px}footer .footer-content .created-by img.vagabond{width:60px;height:60px;border-radius:50%}footer .footer-content .created-by>div{display:flex;flex-direction:column;gap:5px;margin:0 10px}footer .footer-content .created-by>div>span{font-weight:700}footer .footer-content .created-by>div>div{display:flex;gap:5px;align-items:center;justify-content:center}footer .footer-content .created-by>div>div a{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:50%}footer .footer-content .created-by>div>div a img{border-radius:10px;width:25px;height:25px}@media screen and (max-width:510px){footer .footer-content{flex-direction:column}footer .footer-content>div{width:100%}footer .footer-content>div:nth-child(2){align-items:flex-end;margin:10px 10px 0}}footer .copyright{margin-top:20px}:host-context(body.dark) .created-by{background-color:#404040!important}\n"] }]
|
|
64
|
+
}], propDecorators: { contactEmail: [{ type: i0.Input, args: [{ isSignal: true, alias: "contactEmail", required: false }] }], copyright: [{ type: i0.Input, args: [{ isSignal: true, alias: "copyright", required: false }] }], withMentions: [{ type: i0.Input, args: [{ isSignal: true, alias: "withMentions", required: false }] }], withX: [{ type: i0.Input, args: [{ isSignal: true, alias: "withX", required: false }] }] } });
|
|
54
65
|
|
|
55
66
|
class NotFoundComponent {
|
|
56
|
-
|
|
57
|
-
static
|
|
67
|
+
contactEmail = input('vagabond.git@gmail.com', ...(ngDevMode ? [{ debugName: "contactEmail" }] : /* istanbul ignore next */ []));
|
|
68
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: NotFoundComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
69
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: NotFoundComponent, isStandalone: true, selector: "app-not-found", inputs: { contactEmail: { classPropertyName: "contactEmail", publicName: "contactEmail", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<dsv-card>\n <div class=\"dsv-card-header\">\n <h2>Page 404</h2>\n </div>\n <div class=\"dsv-card-content\">\n <div class=\"flex error text gap10\">\n <i class=\"ri-information-line\"></i>\n La page n'a pas \u00E9t\u00E9 trouv\u00E9e, elle est en construction ou absente du site.\n </div>\n <div class=\"contact\">\n Pour me contacter, veuillez \u00E9crire \u00E0 l'adresse mail suivante :\n <a href=\"mailto:{{ contactEmail() }}\" dsvLinkExternal>{{ contactEmail() }}</a>\n </div>\n <dsv-button routerLink=\"/\" color=\"primary\" [prevent]=\"false\">page d'accueil</dsv-button>\n </div>\n</dsv-card>\n", styles: [":host{width:100%}:host .dsv-card-content>div{margin:40px 0}:host .dsv-card-content .contact{margin:60px 0}:host .dsv-card-content dsv-button{display:flex;justify-content:center}\n"], dependencies: [{ kind: "component", type: DsvCardComponent, selector: "dsv-card" }, { kind: "directive", type: RouterExternalPipe, selector: "a[dsvLinkExternal]", outputs: ["dsvLinkExternal"] }, { kind: "component", type: DsvButtonComponent, selector: "dsv-button", inputs: ["libelle", "routerLink", "icon", "iconEnd", "disabled", "noHover", "type", "prevent"], outputs: ["callback"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
|
|
58
70
|
}
|
|
59
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
71
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: NotFoundComponent, decorators: [{
|
|
60
72
|
type: Component,
|
|
61
|
-
args: [{ selector: 'app-not-found', imports: [DsvCardComponent, RouterExternalPipe, DsvButtonComponent, RouterLink], template: "<dsv-card>\n <div class=\"dsv-card-header\">\n <h2>Page 404</h2>\n </div>\n <div class=\"dsv-card-content\">\n <div class=\"flex error text gap10\">\n <i class=\"ri-information-line\"></i>\n La page n'a pas \u00E9t\u00E9 trouv\u00E9e, elle est en construction ou absente du site.\n </div>\n <div class=\"contact\">\n Pour me contacter, veuillez \u00E9crire \u00E0 l'adresse mail suivante :\n <a href=\"mailto:
|
|
62
|
-
}] });
|
|
73
|
+
args: [{ selector: 'app-not-found', imports: [DsvCardComponent, RouterExternalPipe, DsvButtonComponent, RouterLink], template: "<dsv-card>\n <div class=\"dsv-card-header\">\n <h2>Page 404</h2>\n </div>\n <div class=\"dsv-card-content\">\n <div class=\"flex error text gap10\">\n <i class=\"ri-information-line\"></i>\n La page n'a pas \u00E9t\u00E9 trouv\u00E9e, elle est en construction ou absente du site.\n </div>\n <div class=\"contact\">\n Pour me contacter, veuillez \u00E9crire \u00E0 l'adresse mail suivante :\n <a href=\"mailto:{{ contactEmail() }}\" dsvLinkExternal>{{ contactEmail() }}</a>\n </div>\n <dsv-button routerLink=\"/\" color=\"primary\" [prevent]=\"false\">page d'accueil</dsv-button>\n </div>\n</dsv-card>\n", styles: [":host{width:100%}:host .dsv-card-content>div{margin:40px 0}:host .dsv-card-content .contact{margin:60px 0}:host .dsv-card-content dsv-button{display:flex;justify-content:center}\n"] }]
|
|
74
|
+
}], propDecorators: { contactEmail: [{ type: i0.Input, args: [{ isSignal: true, alias: "contactEmail", required: false }] }] } });
|
|
63
75
|
|
|
64
76
|
/**
|
|
65
77
|
* Generated bundle index. Do not edit.
|
|
66
78
|
*/
|
|
67
79
|
|
|
68
|
-
export { FooterComponent, MenuContainer, MenuSlotDirective, NotFoundComponent };
|
|
80
|
+
export { AccessDeniedComponent, FooterComponent, MenuContainer, MenuSlotDirective, NotFoundComponent };
|
|
69
81
|
//# sourceMappingURL=ng-vagabond-lab-ng-dsv-template.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-vagabond-lab-ng-dsv-template.mjs","sources":["../../../projects/ng-dsv/template/menu/slot/menu.slot.ts","../../../projects/ng-dsv/template/menu/container/menu.container.ts","../../../projects/ng-dsv/template/menu/container/menu.container.html","../../../projects/ng-dsv/template/footer/component/footer.component.ts","../../../projects/ng-dsv/template/footer/component/footer.component.html","../../../projects/ng-dsv/template/not-found/component/not-found.component.ts","../../../projects/ng-dsv/template/not-found/component/not-found.component.html","../../../projects/ng-dsv/template/ng-vagabond-lab-ng-dsv-template.ts"],"sourcesContent":["import { Directive, inject, input, TemplateRef } from '@angular/core';\n\n@Directive({ selector: '[menuSlot]', standalone: true })\nexport class MenuSlotDirective {\n readonly template = inject(TemplateRef);\n\n readonly menuSlot = input.required<string>();\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, contentChildren, inject, input, TemplateRef } from '@angular/core';\nimport { DsvItemComponent } from '@ng-vagabond-lab/ng-dsv/ds/item';\nimport { DsvMenuComponent, MenuService } from '@ng-vagabond-lab/ng-dsv/ds/menu';\nimport { AuthService } from '@ng-vagabond-lab/ng-dsv/module/auth';\nimport { RouterService } from '@ng-vagabond-lab/ng-dsv/router';\nimport { MenuDto } from '../dto/menu.dto';\nimport { MenuSlotDirective } from '../slot/menu.slot';\n\n@Component({\n selector: 'app-menu-container',\n imports: [DsvMenuComponent, DsvItemComponent, NgTemplateOutlet],\n templateUrl: './menu.container.html',\n styleUrls: ['./menu.container.scss'],\n})\nexport class MenuContainer {\n readonly authService = inject(AuthService);\n readonly routerService = inject(RouterService);\n readonly menuService = inject(MenuService);\n\n readonly slots = contentChildren(MenuSlotDirective);\n\n readonly menu = input<MenuDto>();\n\n getSlot(id: string): TemplateRef<any> | null {\n return this.slots()?.find((s) => s.menuSlot() === id)?.template ?? null;\n }\n\n isActive(url: string): boolean {\n return this.routerService.currentUrl().includes(url);\n }\n}\n","<dsv-menu>\n @for (item of menu()?.content; track item.url) {\n @if (!item.role || authService.hasRole(item.role)) {\n <dsv-item\n [icon]=\"item.icon\"\n [text]=\"item.text\"\n [url]=\"item.url\"\n [class.active]=\"isActive(item.url)\"\n (callback)=\"menuService.closeMenu()\"\n />\n <ng-container *ngTemplateOutlet=\"getSlot(item.id)\"></ng-container>\n }\n }\n</dsv-menu>\n","import { Component, input } from '@angular/core';\nimport { RouterExternalPipe, RouterInternalPipe } from '@ng-vagabond-lab/ng-dsv/router';\n\n@Component({\n selector: 'app-footer',\n imports: [RouterInternalPipe, RouterExternalPipe],\n templateUrl: './footer.component.html',\n styleUrls: ['./footer.component.scss'],\n})\nexport class FooterComponent {\n readonly copyright = input<string>();\n readonly withMentions = input<boolean>(true);\n readonly withX = input<boolean>(true);\n}\n","<footer>\n <hr />\n <ng-content />\n <div class=\"footer-content\">\n <div>\n <div>\n <a href=\"/contact\" dsvLink>Contact</a>\n </div>\n <div>\n <strong>Mail :</strong>\n <a href=\"mailto:vagabond.git@gmail.com\" dsvLinkExternal>vagabond.git@gmail.com</a>\n </div>\n @if (withMentions()) {\n <div>\n <a href=\"/mentions-legales\" dsvLink>Mentions-legales</a>\n </div>\n }\n </div>\n <div>\n <div class=\"created-by\">\n <a href=\"/contact\" dsvLink\n ><img class=\"vagabond\" title=\"vagabond\" alt=\"vagabond\" src=\"images/vagabond.png\"\n /></a>\n <div>\n <a href=\"/contact\" dsvLink>Créé par Vagabond</a>\n <div class=\"flex-row gap5\">\n <a href=\"https://github.com/vagabon\" title=\"Github de Vagabond\" dsvLinkExternal>\n <img title=\"logo Github\" alt=\"logo Github\" src=\"/images/icons/github.png\" />\n </a>\n @if (withX()) {\n <a href=\"https://twitter.com/VagabondDev\" title=\"X de Vagabond\" dsvLinkExternal>\n <img title=\"logo X\" alt=\"logo X\" src=\"/images/icons/x.png\" />\n </a>\n }\n <a href=\"https://discord.gg/TUy5MtVRt7\" title=\"Discord de Vagabond\" dsvLinkExternal>\n <img title=\"logo discord\" alt=\"logo discord\" src=\"/images/icons/discord.png\"\n /></a>\n <a href=\"https://blog.vagabond.synology.me\" title=\"Blog de Vagabond\" dsvLinkExternal>\n <img\n title=\"logo blog vagabond\"\n alt=\"Me suivre sur mon blog\"\n src=\"/images/icons/blog.png\"\n /></a>\n </div>\n </div>\n </div>\n </div>\n </div>\n <p class=\"copyright\">Copyright © 2026 {{ copyright() }}</p>\n</footer>\n","import { Component } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { DsvButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/button';\nimport { DsvCardComponent } from '@ng-vagabond-lab/ng-dsv/ds/card';\nimport { RouterExternalPipe } from '@ng-vagabond-lab/ng-dsv/router';\n\n@Component({\n selector: 'app-not-found',\n imports: [DsvCardComponent, RouterExternalPipe, DsvButtonComponent, RouterLink],\n templateUrl: './not-found.component.html',\n styleUrls: ['./not-found.component.scss'],\n})\nexport class NotFoundComponent {}\n","<dsv-card>\n <div class=\"dsv-card-header\">\n <h2>Page 404</h2>\n </div>\n <div class=\"dsv-card-content\">\n <div class=\"flex error text gap10\">\n <i class=\"ri-information-line\"></i>\n La page n'a pas été trouvée, elle est en construction ou absente du site.\n </div>\n <div class=\"contact\">\n Pour me contacter, veuillez écrire à l'adresse mail suivante :\n <a href=\"mailto:vagabond.git@gmail.com\" dsvLinkExternal>vagabond.git@gmail.com</a>\n </div>\n <dsv-button routerLink=\"/\" color=\"primary\" [prevent]=\"false\">page d'accueil</dsv-button>\n </div>\n</dsv-card>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ng-vagabond-lab-ng-dsv-template.mjs","sources":["../../../projects/ng-dsv/template/menu/slot/menu.slot.ts","../../../projects/ng-dsv/template/menu/container/menu.container.ts","../../../projects/ng-dsv/template/menu/container/menu.container.html","../../../projects/ng-dsv/template/access-denied/component/access-denied.component.ts","../../../projects/ng-dsv/template/access-denied/component/access-denied.component.html","../../../projects/ng-dsv/template/footer/component/footer.component.ts","../../../projects/ng-dsv/template/footer/component/footer.component.html","../../../projects/ng-dsv/template/not-found/component/not-found.component.ts","../../../projects/ng-dsv/template/not-found/component/not-found.component.html","../../../projects/ng-dsv/template/ng-vagabond-lab-ng-dsv-template.ts"],"sourcesContent":["import { Directive, inject, input, TemplateRef } from '@angular/core';\n\n@Directive({ selector: '[menuSlot]', standalone: true })\nexport class MenuSlotDirective {\n readonly template = inject(TemplateRef);\n\n readonly menuSlot = input.required<string>();\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, contentChildren, inject, input, TemplateRef } from '@angular/core';\nimport { DsvItemComponent } from '@ng-vagabond-lab/ng-dsv/ds/item';\nimport { DsvMenuComponent, MenuService } from '@ng-vagabond-lab/ng-dsv/ds/menu';\nimport { AuthService } from '@ng-vagabond-lab/ng-dsv/module/auth';\nimport { RouterService } from '@ng-vagabond-lab/ng-dsv/router';\nimport { MenuDto } from '../dto/menu.dto';\nimport { MenuSlotDirective } from '../slot/menu.slot';\n\n@Component({\n selector: 'app-menu-container',\n imports: [DsvMenuComponent, DsvItemComponent, NgTemplateOutlet],\n templateUrl: './menu.container.html',\n styleUrls: ['./menu.container.scss'],\n})\nexport class MenuContainer {\n readonly authService = inject(AuthService);\n readonly routerService = inject(RouterService);\n readonly menuService = inject(MenuService);\n\n readonly slots = contentChildren(MenuSlotDirective);\n\n readonly menu = input<MenuDto>();\n\n getSlot(id: string): TemplateRef<any> | null {\n return this.slots()?.find((s) => s.menuSlot() === id)?.template ?? null;\n }\n\n isActive(url: string): boolean {\n return this.routerService.currentUrl().includes(url);\n }\n}\n","<dsv-menu>\n @for (item of menu()?.content; track item.url) {\n @if (!item.role || authService.hasRole(item.role)) {\n <dsv-item\n [icon]=\"item.icon\"\n [text]=\"item.text\"\n [url]=\"item.url\"\n [class.active]=\"isActive(item.url)\"\n (callback)=\"menuService.closeMenu()\"\n />\n <ng-container *ngTemplateOutlet=\"getSlot(item.id)\"></ng-container>\n }\n }\n</dsv-menu>\n","import { Component, input } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { DsvButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/button';\nimport { DsvCardComponent } from '@ng-vagabond-lab/ng-dsv/ds/card';\n\n@Component({\n selector: 'lib-access-denied',\n imports: [DsvCardComponent, DsvButtonComponent, RouterLink],\n templateUrl: './access-denied.component.html',\n styleUrl: './access-denied.component.scss',\n})\nexport class AccessDeniedComponent {\n readonly contactEmail = input<string>('vagabond.git@gmail.com');\n}\n","<dsv-card>\n <div class=\"dsv-card-header\">\n <h2>Access Denied</h2>\n </div>\n <div class=\"dsv-card-content\">\n <div class=\"flex error text gap10\">\n <i class=\"ri-information-line\"></i>\n Vous n'avez pas les droits pour acceder à cette page.\n </div>\n <div class=\"contact\">\n Pour me contacter, veuillez écrire à l'adresse mail suivante :\n <a href=\"mailto:{{ contactEmail() }}\" dsvLinkExternal>{{ contactEmail() }}</a>\n </div>\n <dsv-button routerLink=\"/\" color=\"primary\" [prevent]=\"false\">page d'accueil</dsv-button>\n </div>\n</dsv-card>\n","import { Component, input } from '@angular/core';\nimport { RouterExternalPipe, RouterInternalPipe } from '@ng-vagabond-lab/ng-dsv/router';\n\n@Component({\n selector: 'app-footer',\n imports: [RouterInternalPipe, RouterExternalPipe],\n templateUrl: './footer.component.html',\n styleUrls: ['./footer.component.scss'],\n})\nexport class FooterComponent {\n readonly contactEmail = input<string>('vagabond.git@gmail.com');\n\n readonly copyright = input<string>();\n readonly withMentions = input<boolean>(true);\n readonly withX = input<boolean>(true);\n}\n","<footer>\n <hr />\n <ng-content />\n <div class=\"footer-content\">\n <div>\n <div>\n <a href=\"/contact\" dsvLink>Contact</a>\n </div>\n <div>\n <strong>Mail : </strong>\n <a href=\"mailto:{{ contactEmail() }}\" dsvLinkExternal>{{ contactEmail() }}</a>\n </div>\n @if (withMentions()) {\n <div>\n <a href=\"/mentions-legales\" dsvLink>Mentions-legales</a>\n </div>\n }\n </div>\n <div>\n <div class=\"created-by\">\n <a href=\"/contact\" dsvLink\n ><img class=\"vagabond\" title=\"vagabond\" alt=\"vagabond\" src=\"images/vagabond.png\"\n /></a>\n <div>\n <a href=\"/contact\" dsvLink>Créé par Vagabond</a>\n <div class=\"flex-row gap5\">\n <a href=\"https://github.com/vagabon\" title=\"Github de Vagabond\" dsvLinkExternal>\n <img title=\"logo Github\" alt=\"logo Github\" src=\"/images/icons/github.png\" />\n </a>\n @if (withX()) {\n <a href=\"https://twitter.com/VagabondDev\" title=\"X de Vagabond\" dsvLinkExternal>\n <img title=\"logo X\" alt=\"logo X\" src=\"/images/icons/x.png\" />\n </a>\n }\n <a href=\"https://discord.gg/TUy5MtVRt7\" title=\"Discord de Vagabond\" dsvLinkExternal>\n <img title=\"logo discord\" alt=\"logo discord\" src=\"/images/icons/discord.png\"\n /></a>\n <a href=\"https://blog.vagabond.synology.me\" title=\"Blog de Vagabond\" dsvLinkExternal>\n <img\n title=\"logo blog vagabond\"\n alt=\"Me suivre sur mon blog\"\n src=\"/images/icons/blog.png\"\n /></a>\n </div>\n </div>\n </div>\n </div>\n </div>\n <p class=\"copyright\">Copyright © 2026 {{ copyright() }}</p>\n</footer>\n","import { Component, input } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { DsvButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/button';\nimport { DsvCardComponent } from '@ng-vagabond-lab/ng-dsv/ds/card';\nimport { RouterExternalPipe } from '@ng-vagabond-lab/ng-dsv/router';\n\n@Component({\n selector: 'app-not-found',\n imports: [DsvCardComponent, RouterExternalPipe, DsvButtonComponent, RouterLink],\n templateUrl: './not-found.component.html',\n styleUrls: ['./not-found.component.scss'],\n})\nexport class NotFoundComponent {\n readonly contactEmail = input<string>('vagabond.git@gmail.com');\n}\n","<dsv-card>\n <div class=\"dsv-card-header\">\n <h2>Page 404</h2>\n </div>\n <div class=\"dsv-card-content\">\n <div class=\"flex error text gap10\">\n <i class=\"ri-information-line\"></i>\n La page n'a pas été trouvée, elle est en construction ou absente du site.\n </div>\n <div class=\"contact\">\n Pour me contacter, veuillez écrire à l'adresse mail suivante :\n <a href=\"mailto:{{ contactEmail() }}\" dsvLinkExternal>{{ contactEmail() }}</a>\n </div>\n <dsv-button routerLink=\"/\" color=\"primary\" [prevent]=\"false\">page d'accueil</dsv-button>\n </div>\n</dsv-card>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|