cilog-lib 1.11.11 → 1.11.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/cilog-lib.mjs +33 -24
- package/fesm2022/cilog-lib.mjs.map +1 -1
- package/package.json +1 -1
- package/types/cilog-lib.d.ts +3 -2
package/fesm2022/cilog-lib.mjs
CHANGED
|
@@ -42,7 +42,7 @@ import * as i5$1 from 'primeng/progressspinner';
|
|
|
42
42
|
import { ProgressSpinnerModule } from 'primeng/progressspinner';
|
|
43
43
|
import * as i6$1 from 'primeng/tabs';
|
|
44
44
|
import { TabsModule } from 'primeng/tabs';
|
|
45
|
-
import { MarkdownComponent } from 'ngx-markdown';
|
|
45
|
+
import { MarkdownComponent, provideMarkdown } from 'ngx-markdown';
|
|
46
46
|
import * as i1$1 from '@angular/common/http';
|
|
47
47
|
|
|
48
48
|
class CilogLibComponent {
|
|
@@ -1400,17 +1400,19 @@ class DocumentationContextuelleComponent {
|
|
|
1400
1400
|
http;
|
|
1401
1401
|
router;
|
|
1402
1402
|
zone;
|
|
1403
|
+
cdr;
|
|
1403
1404
|
config;
|
|
1404
1405
|
categories = [];
|
|
1405
1406
|
filteredCategories = [];
|
|
1406
1407
|
tabs = [];
|
|
1407
1408
|
searchQuery = '';
|
|
1408
|
-
|
|
1409
|
+
activeTabValue = '';
|
|
1409
1410
|
urlSub;
|
|
1410
|
-
constructor(http, router, zone) {
|
|
1411
|
+
constructor(http, router, zone, cdr) {
|
|
1411
1412
|
this.http = http;
|
|
1412
1413
|
this.router = router;
|
|
1413
1414
|
this.zone = zone;
|
|
1415
|
+
this.cdr = cdr;
|
|
1414
1416
|
}
|
|
1415
1417
|
ngOnInit() {
|
|
1416
1418
|
this.http.get('assets/docs/doc-config/config.json').subscribe((config) => {
|
|
@@ -1488,14 +1490,14 @@ class DocumentationContextuelleComponent {
|
|
|
1488
1490
|
}
|
|
1489
1491
|
openTabAndActivate(tab) {
|
|
1490
1492
|
this.tabs.push(tab);
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
});
|
|
1493
|
+
this.activeTabValue = tab.value;
|
|
1494
|
+
this.cdr.detectChanges();
|
|
1494
1495
|
}
|
|
1495
1496
|
openDocumentationAndSwitch(doc) {
|
|
1496
1497
|
const existingTab = this.tabs.find(tab => tab.fileName === doc.fileName);
|
|
1497
1498
|
if (existingTab) {
|
|
1498
|
-
this.
|
|
1499
|
+
this.activeTabValue = existingTab.value;
|
|
1500
|
+
this.cdr.detectChanges();
|
|
1499
1501
|
return;
|
|
1500
1502
|
}
|
|
1501
1503
|
const newTab = {
|
|
@@ -1508,21 +1510,24 @@ class DocumentationContextuelleComponent {
|
|
|
1508
1510
|
value: doc.fileName
|
|
1509
1511
|
};
|
|
1510
1512
|
this.openTabAndActivate(newTab);
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1513
|
+
this.http.get(`assets/docs/${doc.fileName}`, { responseType: 'text' }).subscribe({
|
|
1514
|
+
next: (content) => {
|
|
1515
|
+
newTab.content = content;
|
|
1516
|
+
newTab.loading = false;
|
|
1517
|
+
this.cdr.detectChanges();
|
|
1518
|
+
},
|
|
1519
|
+
error: () => {
|
|
1520
|
+
newTab.content = '❌ Erreur lors du chargement du fichier markdown.';
|
|
1521
|
+
newTab.loading = false;
|
|
1522
|
+
this.cdr.detectChanges();
|
|
1523
|
+
}
|
|
1520
1524
|
});
|
|
1521
1525
|
}
|
|
1522
1526
|
openDocumentationList() {
|
|
1523
1527
|
const existing = this.tabs.find(t => t.type === 'list');
|
|
1524
1528
|
if (existing) {
|
|
1525
|
-
this.
|
|
1529
|
+
this.activeTabValue = existing.value;
|
|
1530
|
+
this.cdr.detectChanges();
|
|
1526
1531
|
return;
|
|
1527
1532
|
}
|
|
1528
1533
|
this.openTabAndActivate({ type: 'list', title: '📚 Sommaire des Docs', value: 'list' });
|
|
@@ -1535,9 +1540,13 @@ class DocumentationContextuelleComponent {
|
|
|
1535
1540
|
}
|
|
1536
1541
|
closeTab(event) {
|
|
1537
1542
|
this.tabs.splice(event.index, 1);
|
|
1538
|
-
if (this.
|
|
1539
|
-
this.
|
|
1543
|
+
if (this.tabs.length > 0) {
|
|
1544
|
+
this.activeTabValue = this.tabs[this.tabs.length - 1].value;
|
|
1545
|
+
}
|
|
1546
|
+
else {
|
|
1547
|
+
this.activeTabValue = '';
|
|
1540
1548
|
}
|
|
1549
|
+
this.cdr.detectChanges();
|
|
1541
1550
|
}
|
|
1542
1551
|
ngOnDestroy() {
|
|
1543
1552
|
this.urlSub?.unsubscribe();
|
|
@@ -1569,20 +1578,20 @@ class DocumentationContextuelleComponent {
|
|
|
1569
1578
|
.reduce((acc, cat) => acc.concat(cat.docs), [])
|
|
1570
1579
|
.find(doc => normalizedUrl.toLowerCase().includes(doc.fileName.toLowerCase().replace('.md', '')));
|
|
1571
1580
|
}
|
|
1572
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DocumentationContextuelleComponent, deps: [{ token: i1$1.HttpClient }, { token: i2$3.Router }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
|
|
1573
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: DocumentationContextuelleComponent, isStandalone: true, selector: "cilog-documentation-contextuelle", ngImport: i0, template: "<div class=\"documentation-container\">\r\n <!-- Menu sup\u00E9rieur -->\r\n <div class=\"documentation-menu\">\r\n <button pButton\r\n type=\"button\"\r\n icon=\"pi pi-list\"\r\n label=\"Sommaire des documentations\"\r\n class=\"p-button-sm p-button-outlined\"\r\n (click)=\"openDocumentationList()\"\r\n title=\"Voir toutes les documentations disponibles\">\r\n </button>\r\n <button pButton\r\n type=\"button\"\r\n icon=\"pi pi-home\"\r\n label=\"Documentation courante\"\r\n class=\"p-button-sm p-button-outlined\"\r\n (click)=\"openCurrentPageDoc()\"\r\n title=\"Documentation de la page actuelle\">\r\n </button>\r\n </div>\r\n\r\n <!-- Syst\u00E8me d'onglets -->\r\n <p-tabs (onClose)=\"closeTab($event)\"\r\n styleClass=\"documentation-tabs\">\r\n <p-tablist>\r\n @for (tab of tabs; track tab.value) {\r\n <p-tab [value]=\"tab.value\">{{ tab.title }}</p-tab>\r\n }\r\n </p-tablist>\r\n <p-tabpanels>\r\n @for (tab of tabs; track tab.value; let i = $index) {\r\n <p-tabpanel [value]=\"tab.value\">\r\n <!-- Contenu pour onglet de liste - Version am\u00E9lior\u00E9e -->\r\n @if (tab.type === 'list') {\r\n <div class=\"docs-list-container\">\r\n <div class=\"docs-header\">\r\n <h2>\uD83D\uDCDA Sommaire de la Documentation</h2>\r\n <p class=\"docs-subtitle\">Explorez toutes les fonctionnalit\u00E9s disponibles dans LogeProj</p>\r\n </div>\r\n <!-- Barre de recherche -->\r\n <div class=\"search-bar\">\r\n <span class=\"p-input-icon-left\" style=\"width: 100%; max-width: 800px;\">\r\n <i class=\"pi pi-search\"></i>\r\n <input type=\"text\"\r\n pInputText\r\n placeholder=\"Rechercher dans les documentations...\"\r\n name=\"recherche\"\r\n [(ngModel)]=\"searchQuery\"\r\n ngDefaultControl\r\n (input)=\"filterDocumentation()\"\r\n style=\"width: 100% !important; padding: 12px 20px 12px 40px !important; border-radius: 25px !important;\">\r\n </span>\r\n </div>\r\n <!-- Liste des cat\u00E9gories -->\r\n <div class=\"categories-container\">\r\n @for (category of filteredCategories; track category.key) {\r\n <div class=\"category-section\">\r\n <div class=\"category-header\" (click)=\"toggleCategory(category.key)\">\r\n <i class=\"pi\" [ngClass]=\"category.expanded ? 'pi-chevron-down' : 'pi-chevron-right'\"></i>\r\n <span class=\"category-icon\">{{ category.icon }}</span>\r\n <h3 class=\"category-title\">{{ category.name }}</h3>\r\n <span class=\"category-count\">({{ category.docs.length }})</span>\r\n </div>\r\n <div class=\"category-content\" [ngClass]=\"{ 'expanded': category.expanded }\">\r\n <div class=\"docs-grid\">\r\n @for (doc of category.docs; track doc.fileName) {\r\n <div class=\"doc-card\"\r\n (click)=\"openDocumentationAndSwitch(doc)\"\r\n [title]=\"doc.description\">\r\n <div class=\"doc-card-content\">\r\n <h4 class=\"doc-name\">{{ doc.displayName }}</h4>\r\n <markdown class=\"doc-description\" [data]=\"doc.description\"\r\n (click)=\"onMarkdownClick($event)\"></markdown>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n <!-- Stats en bas -->\r\n <div class=\"docs-stats\">\r\n <div class=\"stat-item\">\r\n <strong>{{ getTotalDocsCount() }}</strong> documentations disponibles\r\n </div>\r\n <div class=\"stat-item\">\r\n <strong>{{ getOpenTabsCount() }}</strong> onglets ouverts\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n <!-- Contenu pour onglet de documentation -->\r\n @if (tab.type === 'doc') {\r\n <div class=\"markdown-container\">\r\n <!-- Breadcrumb pour navigation -->\r\n @if (tab.category) {\r\n <div class=\"doc-breadcrumb\">\r\n <span class=\"breadcrumb-item\">{{ tab.category }}</span>\r\n <i class=\"pi pi-angle-right\"></i>\r\n <span class=\"breadcrumb-current\">{{ tab.title }}</span>\r\n </div>\r\n }\r\n @if (tab.loading) {\r\n <div class=\"loading-container\">\r\n <p-progressSpinner strokeWidth=\"4\"></p-progressSpinner>\r\n <span>Chargement de la documentation...</span>\r\n </div>\r\n }\r\n @if (!tab.loading) {\r\n <markdown [data]=\"tab.content || 'Aucun contenu disponible'\"\r\n (click)=\"onMarkdownClick($event)\">\r\n </markdown>\r\n }\r\n </div>\r\n }\r\n </p-tabpanel>\r\n }\r\n </p-tabpanels>\r\n </p-tabs>\r\n</div>\r\n", styles: [".documentation-container{display:flex;flex-direction:column;height:100%;width:100%}.documentation-menu{padding:15px;background:linear-gradient(135deg,#667eea,#764ba2);border-bottom:1px solid #e9ecef;display:flex;gap:10px;flex-shrink:0}.documentation-menu .p-button{background:#fff3;border:1px solid rgba(255,255,255,.3);color:#fff}.documentation-menu .p-button:hover{background:#ffffff4d}.docs-list-container{padding:20px;flex:1;overflow-y:auto;background:#f8f9fa}.docs-header{text-align:center;margin-bottom:30px}.docs-header h2{margin:0 0 10px;color:#2c3e50;font-size:2rem}.docs-header .docs-subtitle{color:#7f8c8d;font-size:1.1rem;margin:0}.search-bar{margin-bottom:30px;display:flex;justify-content:center}.search-bar .search-input{width:100%;padding:12px 20px 12px 40px;border-radius:25px;border:2px solid #e9ecef;font-size:1rem}.search-bar .search-input:focus{border-color:#667eea;box-shadow:0 0 0 3px #667eea1a}.categories-container{max-width:1200px;margin:0 auto}.category-section{margin-bottom:25px;background:#fff;border-radius:12px;box-shadow:0 2px 8px #0000001a;overflow:hidden}.category-section .category-header{padding:20px;background:linear-gradient(135deg,#f5f7fa,#c3cfe2);cursor:pointer;display:flex;align-items:center;gap:15px;transition:all .3s ease}.category-section .category-header:hover{background:linear-gradient(135deg,#e8eaf6,#b39ddb)}.category-section .category-header .pi{color:#667eea;font-size:1rem;transition:transform .3s ease}.category-section .category-header .category-icon{font-size:1.5rem}.category-section .category-header .category-title{margin:0;color:#2c3e50;font-size:1.3rem;flex:1}.category-section .category-header .category-count{color:#7f8c8d;font-size:.9rem;background:#677eea1a;padding:4px 12px;border-radius:15px}.category-section .category-content{max-height:0;overflow:hidden;transition:max-height .4s ease-out}.category-section .category-content.expanded{max-height:2000px;transition:max-height .6s ease-in}.docs-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:20px;padding:25px}.doc-card{border:1px solid #e9ecef;border-radius:12px;padding:20px;cursor:pointer;transition:all .3s ease;background:#fff;position:relative;overflow:hidden}.doc-card:before{content:\"\";position:absolute;top:0;left:0;width:100%;height:4px;background:linear-gradient(90deg,#667eea,#764ba2);transform:scaleX(0);transition:transform .3s ease}.doc-card:hover{border-color:#667eea;box-shadow:0 8px 25px #667eea26;transform:translateY(-4px)}.doc-card:hover:before{transform:scaleX(1)}.doc-card .doc-card-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:15px}.doc-card .doc-card-header .doc-icon{font-size:2rem}.doc-card .doc-card-header .doc-badge{padding:4px 8px;border-radius:12px;font-size:.75rem;font-weight:600;text-transform:uppercase}.doc-card .doc-card-header .doc-badge.doc-badge-high{background:#e8f5e8;color:#2e7d2e}.doc-card .doc-card-header .doc-badge.doc-badge-medium{background:#fff3cd;color:#856404}.doc-card .doc-card-header .doc-badge.doc-badge-low{background:#f8f9fa;color:#6c757d}.doc-card .doc-card-content .doc-name{margin:0 0 10px;color:#2c3e50;font-size:1.1rem;font-weight:600;line-height:1.3}.doc-card .doc-card-content .doc-description{color:#6c757d;font-size:.9rem;line-height:1.4;margin:0 0 10px}.doc-card .doc-card-content .doc-description ::ng-deep p{margin:0;display:inline}.doc-card .doc-card-content .doc-description ::ng-deep a{color:#667eea;text-decoration:none;pointer-events:auto}.doc-card .doc-card-content .doc-description ::ng-deep a:hover{text-decoration:underline}.doc-card .doc-card-content .doc-filename{color:#adb5bd;font-size:.8rem;font-family:Courier New,monospace}.docs-stats{display:flex;justify-content:center;gap:40px;margin-top:40px;padding:20px;background:#fff;border-radius:12px;box-shadow:0 2px 8px #0000001a}.docs-stats .stat-item{text-align:center;color:#6c757d}.docs-stats .stat-item strong{color:#667eea;font-size:1.2rem}.markdown-container{flex:1;overflow-y:auto;padding:20px;background:#fff}.markdown-container .doc-breadcrumb{display:flex;align-items:center;gap:8px;margin-bottom:20px;padding:10px 0;border-bottom:1px solid #e9ecef;color:#6c757d;font-size:.9rem}.markdown-container .doc-breadcrumb .breadcrumb-current{color:#2c3e50;font-weight:600}.markdown-container markdown{display:block;line-height:1.6}.markdown-container markdown ::ng-deep a[href$=\".md\"]{color:#667eea;text-decoration:none;cursor:pointer;border-bottom:1px dashed #667eea}.markdown-container markdown ::ng-deep a[href$=\".md\"]:hover{text-decoration:none;border-bottom-style:solid}.loading-container{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px;color:#6c757d;gap:20px}.loading-container span{font-size:1.1rem}.documentation-tabs{flex:1;display:flex;flex-direction:column}.documentation-tabs ::ng-deep .p-tabview-panels{flex:1;display:flex}.documentation-tabs ::ng-deep .p-tabview-panels .p-tabview-panel{flex:1;display:flex;flex-direction:column}.documentation-tabs ::ng-deep .p-tabview-nav{background:#f8f9fa;border-bottom:2px solid #e9ecef}.documentation-tabs ::ng-deep .p-tabview-nav .p-tabview-nav-link{background:transparent;border:none;color:#6c757d;font-weight:500}.documentation-tabs ::ng-deep .p-tabview-nav .p-tabview-nav-link:not(.p-disabled):focus{box-shadow:0 0 0 2px #667eea33}.documentation-tabs ::ng-deep .p-tabview-nav .p-highlight .p-tabview-nav-link{background:#fff;color:#667eea;border-bottom:2px solid #667eea}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ProgressSpinnerModule }, { kind: "component", type: i5$1.ProgressSpinner, selector: "p-progressSpinner, p-progress-spinner, p-progressspinner", inputs: ["styleClass", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "ngmodule", type: TabsModule }, { kind: "component", type: i6$1.Tabs, selector: "p-tabs", inputs: ["value", "scrollable", "lazy", "selectOnFocus", "showNavigators", "tabindex"], outputs: ["valueChange"] }, { kind: "component", type: i6$1.TabPanels, selector: "p-tabpanels" }, { kind: "component", type: i6$1.TabPanel, selector: "p-tabpanel", inputs: ["lazy", "value"], outputs: ["valueChange"] }, { kind: "component", type: i6$1.TabList, selector: "p-tablist" }, { kind: "component", type: i6$1.Tab, selector: "p-tab", inputs: ["value", "disabled"], outputs: ["valueChange"] }, { kind: "ngmodule", type: EditorModule }, { kind: "component", type: MarkdownComponent, selector: "markdown, [markdown]", inputs: ["data", "src", "disableSanitizer", "inline", "clipboard", "clipboardButtonComponent", "clipboardButtonTemplate", "emoji", "katex", "katexOptions", "mermaid", "mermaidOptions", "lineHighlight", "line", "lineOffset", "lineNumbers", "start", "commandLine", "filterOutput", "host", "prompt", "output", "user"], outputs: ["error", "load", "ready"] }] });
|
|
1581
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DocumentationContextuelleComponent, deps: [{ token: i1$1.HttpClient }, { token: i2$3.Router }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
1582
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: DocumentationContextuelleComponent, isStandalone: true, selector: "cilog-documentation-contextuelle", providers: [provideMarkdown()], ngImport: i0, template: "<div class=\"documentation-container\">\r\n <!-- Menu sup\u00E9rieur -->\r\n <div class=\"documentation-menu\">\r\n <button pButton\r\n type=\"button\"\r\n icon=\"pi pi-list\"\r\n label=\"Sommaire des documentations\"\r\n class=\"p-button-sm p-button-outlined\"\r\n (click)=\"openDocumentationList()\"\r\n title=\"Voir toutes les documentations disponibles\">\r\n </button>\r\n <button pButton\r\n type=\"button\"\r\n icon=\"pi pi-home\"\r\n label=\"Documentation courante\"\r\n class=\"p-button-sm p-button-outlined\"\r\n (click)=\"openCurrentPageDoc()\"\r\n title=\"Documentation de la page actuelle\">\r\n </button>\r\n </div>\r\n\r\n <!-- Syst\u00E8me d'onglets -->\r\n <p-tabs [(value)]=\"activeTabValue\"\r\n (onClose)=\"closeTab($event)\"\r\n styleClass=\"documentation-tabs\">\r\n <p-tablist>\r\n @for (tab of tabs; track tab.value) {\r\n <p-tab [value]=\"tab.value\">{{ tab.title }}</p-tab>\r\n }\r\n </p-tablist>\r\n <p-tabpanels>\r\n @for (tab of tabs; track tab.value; let i = $index) {\r\n <p-tabpanel [value]=\"tab.value\">\r\n <!-- Contenu pour onglet de liste - Version am\u00E9lior\u00E9e -->\r\n @if (tab.type === 'list') {\r\n <div class=\"docs-list-container\">\r\n <div class=\"docs-header\">\r\n <h2>\uD83D\uDCDA Sommaire de la Documentation</h2>\r\n <p class=\"docs-subtitle\">Explorez toutes les fonctionnalit\u00E9s disponibles dans LogeProj</p>\r\n </div>\r\n <!-- Barre de recherche -->\r\n <div class=\"search-bar\">\r\n <span class=\"p-input-icon-left\" style=\"width: 100%; max-width: 800px;\">\r\n <i class=\"pi pi-search\"></i>\r\n <input type=\"text\"\r\n pInputText\r\n placeholder=\"Rechercher dans les documentations...\"\r\n name=\"recherche\"\r\n [(ngModel)]=\"searchQuery\"\r\n ngDefaultControl\r\n (input)=\"filterDocumentation()\"\r\n style=\"width: 100% !important; padding: 12px 20px 12px 40px !important; border-radius: 25px !important;\">\r\n </span>\r\n </div>\r\n <!-- Liste des cat\u00E9gories -->\r\n <div class=\"categories-container\">\r\n @for (category of filteredCategories; track category.key) {\r\n <div class=\"category-section\">\r\n <div class=\"category-header\" (click)=\"toggleCategory(category.key)\">\r\n <i class=\"pi\" [ngClass]=\"category.expanded ? 'pi-chevron-down' : 'pi-chevron-right'\"></i>\r\n <span class=\"category-icon\">{{ category.icon }}</span>\r\n <h3 class=\"category-title\">{{ category.name }}</h3>\r\n <span class=\"category-count\">({{ category.docs.length }})</span>\r\n </div>\r\n <div class=\"category-content\" [ngClass]=\"{ 'expanded': category.expanded }\">\r\n <div class=\"docs-grid\">\r\n @for (doc of category.docs; track doc.fileName) {\r\n <div class=\"doc-card\"\r\n (click)=\"openDocumentationAndSwitch(doc)\"\r\n [title]=\"doc.description\">\r\n <div class=\"doc-card-content\">\r\n <h4 class=\"doc-name\">{{ doc.displayName }}</h4>\r\n <markdown class=\"doc-description\" [data]=\"doc.description\"\r\n (click)=\"onMarkdownClick($event)\"></markdown>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n <!-- Stats en bas -->\r\n <div class=\"docs-stats\">\r\n <div class=\"stat-item\">\r\n <strong>{{ getTotalDocsCount() }}</strong> documentations disponibles\r\n </div>\r\n <div class=\"stat-item\">\r\n <strong>{{ getOpenTabsCount() }}</strong> onglets ouverts\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n <!-- Contenu pour onglet de documentation -->\r\n @if (tab.type === 'doc') {\r\n <div class=\"markdown-container\">\r\n <!-- Breadcrumb pour navigation -->\r\n @if (tab.category) {\r\n <div class=\"doc-breadcrumb\">\r\n <span class=\"breadcrumb-item\">{{ tab.category }}</span>\r\n <i class=\"pi pi-angle-right\"></i>\r\n <span class=\"breadcrumb-current\">{{ tab.title }}</span>\r\n </div>\r\n }\r\n @if (tab.loading) {\r\n <div class=\"loading-container\">\r\n <p-progressSpinner strokeWidth=\"4\"></p-progressSpinner>\r\n <span>Chargement de la documentation...</span>\r\n </div>\r\n }\r\n @if (!tab.loading) {\r\n <markdown [data]=\"tab.content || 'Aucun contenu disponible'\"\r\n (click)=\"onMarkdownClick($event)\">\r\n </markdown>\r\n }\r\n </div>\r\n }\r\n </p-tabpanel>\r\n }\r\n </p-tabpanels>\r\n </p-tabs>\r\n</div>\r\n", styles: [".documentation-container{display:flex;flex-direction:column;height:100%;width:100%}.documentation-menu{padding:15px;background:linear-gradient(135deg,#667eea,#764ba2);border-bottom:1px solid #e9ecef;display:flex;gap:10px;flex-shrink:0}.documentation-menu .p-button{background:#fff3;border:1px solid rgba(255,255,255,.3);color:#fff}.documentation-menu .p-button:hover{background:#ffffff4d}.docs-list-container{padding:20px;flex:1;overflow-y:auto;background:#f8f9fa}.docs-header{text-align:center;margin-bottom:30px}.docs-header h2{margin:0 0 10px;color:#2c3e50;font-size:2rem}.docs-header .docs-subtitle{color:#7f8c8d;font-size:1.1rem;margin:0}.search-bar{margin-bottom:30px;display:flex;justify-content:center}.search-bar .search-input{width:100%;padding:12px 20px 12px 40px;border-radius:25px;border:2px solid #e9ecef;font-size:1rem}.search-bar .search-input:focus{border-color:#667eea;box-shadow:0 0 0 3px #667eea1a}.categories-container{max-width:1200px;margin:0 auto}.category-section{margin-bottom:25px;background:#fff;border-radius:12px;box-shadow:0 2px 8px #0000001a;overflow:hidden}.category-section .category-header{padding:20px;background:linear-gradient(135deg,#f5f7fa,#c3cfe2);cursor:pointer;display:flex;align-items:center;gap:15px;transition:all .3s ease}.category-section .category-header:hover{background:linear-gradient(135deg,#e8eaf6,#b39ddb)}.category-section .category-header .pi{color:#667eea;font-size:1rem;transition:transform .3s ease}.category-section .category-header .category-icon{font-size:1.5rem}.category-section .category-header .category-title{margin:0;color:#2c3e50;font-size:1.3rem;flex:1}.category-section .category-header .category-count{color:#7f8c8d;font-size:.9rem;background:#677eea1a;padding:4px 12px;border-radius:15px}.category-section .category-content{max-height:0;overflow:hidden;transition:max-height .4s ease-out}.category-section .category-content.expanded{max-height:2000px;transition:max-height .6s ease-in}.docs-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:20px;padding:25px}.doc-card{border:1px solid #e9ecef;border-radius:12px;padding:20px;cursor:pointer;transition:all .3s ease;background:#fff;position:relative;overflow:hidden}.doc-card:before{content:\"\";position:absolute;top:0;left:0;width:100%;height:4px;background:linear-gradient(90deg,#667eea,#764ba2);transform:scaleX(0);transition:transform .3s ease}.doc-card:hover{border-color:#667eea;box-shadow:0 8px 25px #667eea26;transform:translateY(-4px)}.doc-card:hover:before{transform:scaleX(1)}.doc-card .doc-card-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:15px}.doc-card .doc-card-header .doc-icon{font-size:2rem}.doc-card .doc-card-header .doc-badge{padding:4px 8px;border-radius:12px;font-size:.75rem;font-weight:600;text-transform:uppercase}.doc-card .doc-card-header .doc-badge.doc-badge-high{background:#e8f5e8;color:#2e7d2e}.doc-card .doc-card-header .doc-badge.doc-badge-medium{background:#fff3cd;color:#856404}.doc-card .doc-card-header .doc-badge.doc-badge-low{background:#f8f9fa;color:#6c757d}.doc-card .doc-card-content .doc-name{margin:0 0 10px;color:#2c3e50;font-size:1.1rem;font-weight:600;line-height:1.3}.doc-card .doc-card-content .doc-description{color:#6c757d;font-size:.9rem;line-height:1.4;margin:0 0 10px}.doc-card .doc-card-content .doc-description ::ng-deep p{margin:0;display:inline}.doc-card .doc-card-content .doc-description ::ng-deep a{color:#667eea;text-decoration:none;pointer-events:auto}.doc-card .doc-card-content .doc-description ::ng-deep a:hover{text-decoration:underline}.doc-card .doc-card-content .doc-filename{color:#adb5bd;font-size:.8rem;font-family:Courier New,monospace}.docs-stats{display:flex;justify-content:center;gap:40px;margin-top:40px;padding:20px;background:#fff;border-radius:12px;box-shadow:0 2px 8px #0000001a}.docs-stats .stat-item{text-align:center;color:#6c757d}.docs-stats .stat-item strong{color:#667eea;font-size:1.2rem}.markdown-container{flex:1;overflow-y:auto;padding:20px;background:#fff}.markdown-container .doc-breadcrumb{display:flex;align-items:center;gap:8px;margin-bottom:20px;padding:10px 0;border-bottom:1px solid #e9ecef;color:#6c757d;font-size:.9rem}.markdown-container .doc-breadcrumb .breadcrumb-current{color:#2c3e50;font-weight:600}.markdown-container markdown{display:block;line-height:1.6}.markdown-container markdown ::ng-deep a[href$=\".md\"]{color:#667eea;text-decoration:none;cursor:pointer;border-bottom:1px dashed #667eea}.markdown-container markdown ::ng-deep a[href$=\".md\"]:hover{text-decoration:none;border-bottom-style:solid}.loading-container{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px;color:#6c757d;gap:20px}.loading-container span{font-size:1.1rem}.documentation-tabs{flex:1;display:flex;flex-direction:column}.documentation-tabs ::ng-deep .p-tabview-panels{flex:1;display:flex}.documentation-tabs ::ng-deep .p-tabview-panels .p-tabview-panel{flex:1;display:flex;flex-direction:column}.documentation-tabs ::ng-deep .p-tabview-nav{background:#f8f9fa;border-bottom:2px solid #e9ecef}.documentation-tabs ::ng-deep .p-tabview-nav .p-tabview-nav-link{background:transparent;border:none;color:#6c757d;font-weight:500}.documentation-tabs ::ng-deep .p-tabview-nav .p-tabview-nav-link:not(.p-disabled):focus{box-shadow:0 0 0 2px #667eea33}.documentation-tabs ::ng-deep .p-tabview-nav .p-highlight .p-tabview-nav-link{background:#fff;color:#667eea;border-bottom:2px solid #667eea}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ProgressSpinnerModule }, { kind: "component", type: i5$1.ProgressSpinner, selector: "p-progressSpinner, p-progress-spinner, p-progressspinner", inputs: ["styleClass", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "ngmodule", type: TabsModule }, { kind: "component", type: i6$1.Tabs, selector: "p-tabs", inputs: ["value", "scrollable", "lazy", "selectOnFocus", "showNavigators", "tabindex"], outputs: ["valueChange"] }, { kind: "component", type: i6$1.TabPanels, selector: "p-tabpanels" }, { kind: "component", type: i6$1.TabPanel, selector: "p-tabpanel", inputs: ["lazy", "value"], outputs: ["valueChange"] }, { kind: "component", type: i6$1.TabList, selector: "p-tablist" }, { kind: "component", type: i6$1.Tab, selector: "p-tab", inputs: ["value", "disabled"], outputs: ["valueChange"] }, { kind: "ngmodule", type: EditorModule }, { kind: "component", type: MarkdownComponent, selector: "markdown, [markdown]", inputs: ["data", "src", "disableSanitizer", "inline", "clipboard", "clipboardButtonComponent", "clipboardButtonTemplate", "emoji", "katex", "katexOptions", "mermaid", "mermaidOptions", "lineHighlight", "line", "lineOffset", "lineNumbers", "start", "commandLine", "filterOutput", "host", "prompt", "output", "user"], outputs: ["error", "load", "ready"] }] });
|
|
1574
1583
|
}
|
|
1575
1584
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DocumentationContextuelleComponent, decorators: [{
|
|
1576
1585
|
type: Component,
|
|
1577
|
-
args: [{ selector: 'cilog-documentation-contextuelle', imports: [
|
|
1586
|
+
args: [{ selector: 'cilog-documentation-contextuelle', providers: [provideMarkdown()], imports: [
|
|
1578
1587
|
CommonModule,
|
|
1579
1588
|
FormsModule,
|
|
1580
1589
|
ProgressSpinnerModule,
|
|
1581
1590
|
TabsModule,
|
|
1582
1591
|
EditorModule,
|
|
1583
1592
|
MarkdownComponent
|
|
1584
|
-
], template: "<div class=\"documentation-container\">\r\n <!-- Menu sup\u00E9rieur -->\r\n <div class=\"documentation-menu\">\r\n <button pButton\r\n type=\"button\"\r\n icon=\"pi pi-list\"\r\n label=\"Sommaire des documentations\"\r\n class=\"p-button-sm p-button-outlined\"\r\n (click)=\"openDocumentationList()\"\r\n title=\"Voir toutes les documentations disponibles\">\r\n </button>\r\n <button pButton\r\n type=\"button\"\r\n icon=\"pi pi-home\"\r\n label=\"Documentation courante\"\r\n class=\"p-button-sm p-button-outlined\"\r\n (click)=\"openCurrentPageDoc()\"\r\n title=\"Documentation de la page actuelle\">\r\n </button>\r\n </div>\r\n\r\n <!-- Syst\u00E8me d'onglets -->\r\n <p-tabs (onClose)=\"closeTab($event)\"\r\n styleClass=\"documentation-tabs\">\r\n <p-tablist>\r\n @for (tab of tabs; track tab.value) {\r\n <p-tab [value]=\"tab.value\">{{ tab.title }}</p-tab>\r\n }\r\n </p-tablist>\r\n <p-tabpanels>\r\n @for (tab of tabs; track tab.value; let i = $index) {\r\n <p-tabpanel [value]=\"tab.value\">\r\n <!-- Contenu pour onglet de liste - Version am\u00E9lior\u00E9e -->\r\n @if (tab.type === 'list') {\r\n <div class=\"docs-list-container\">\r\n <div class=\"docs-header\">\r\n <h2>\uD83D\uDCDA Sommaire de la Documentation</h2>\r\n <p class=\"docs-subtitle\">Explorez toutes les fonctionnalit\u00E9s disponibles dans LogeProj</p>\r\n </div>\r\n <!-- Barre de recherche -->\r\n <div class=\"search-bar\">\r\n <span class=\"p-input-icon-left\" style=\"width: 100%; max-width: 800px;\">\r\n <i class=\"pi pi-search\"></i>\r\n <input type=\"text\"\r\n pInputText\r\n placeholder=\"Rechercher dans les documentations...\"\r\n name=\"recherche\"\r\n [(ngModel)]=\"searchQuery\"\r\n ngDefaultControl\r\n (input)=\"filterDocumentation()\"\r\n style=\"width: 100% !important; padding: 12px 20px 12px 40px !important; border-radius: 25px !important;\">\r\n </span>\r\n </div>\r\n <!-- Liste des cat\u00E9gories -->\r\n <div class=\"categories-container\">\r\n @for (category of filteredCategories; track category.key) {\r\n <div class=\"category-section\">\r\n <div class=\"category-header\" (click)=\"toggleCategory(category.key)\">\r\n <i class=\"pi\" [ngClass]=\"category.expanded ? 'pi-chevron-down' : 'pi-chevron-right'\"></i>\r\n <span class=\"category-icon\">{{ category.icon }}</span>\r\n <h3 class=\"category-title\">{{ category.name }}</h3>\r\n <span class=\"category-count\">({{ category.docs.length }})</span>\r\n </div>\r\n <div class=\"category-content\" [ngClass]=\"{ 'expanded': category.expanded }\">\r\n <div class=\"docs-grid\">\r\n @for (doc of category.docs; track doc.fileName) {\r\n <div class=\"doc-card\"\r\n (click)=\"openDocumentationAndSwitch(doc)\"\r\n [title]=\"doc.description\">\r\n <div class=\"doc-card-content\">\r\n <h4 class=\"doc-name\">{{ doc.displayName }}</h4>\r\n <markdown class=\"doc-description\" [data]=\"doc.description\"\r\n (click)=\"onMarkdownClick($event)\"></markdown>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n <!-- Stats en bas -->\r\n <div class=\"docs-stats\">\r\n <div class=\"stat-item\">\r\n <strong>{{ getTotalDocsCount() }}</strong> documentations disponibles\r\n </div>\r\n <div class=\"stat-item\">\r\n <strong>{{ getOpenTabsCount() }}</strong> onglets ouverts\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n <!-- Contenu pour onglet de documentation -->\r\n @if (tab.type === 'doc') {\r\n <div class=\"markdown-container\">\r\n <!-- Breadcrumb pour navigation -->\r\n @if (tab.category) {\r\n <div class=\"doc-breadcrumb\">\r\n <span class=\"breadcrumb-item\">{{ tab.category }}</span>\r\n <i class=\"pi pi-angle-right\"></i>\r\n <span class=\"breadcrumb-current\">{{ tab.title }}</span>\r\n </div>\r\n }\r\n @if (tab.loading) {\r\n <div class=\"loading-container\">\r\n <p-progressSpinner strokeWidth=\"4\"></p-progressSpinner>\r\n <span>Chargement de la documentation...</span>\r\n </div>\r\n }\r\n @if (!tab.loading) {\r\n <markdown [data]=\"tab.content || 'Aucun contenu disponible'\"\r\n (click)=\"onMarkdownClick($event)\">\r\n </markdown>\r\n }\r\n </div>\r\n }\r\n </p-tabpanel>\r\n }\r\n </p-tabpanels>\r\n </p-tabs>\r\n</div>\r\n", styles: [".documentation-container{display:flex;flex-direction:column;height:100%;width:100%}.documentation-menu{padding:15px;background:linear-gradient(135deg,#667eea,#764ba2);border-bottom:1px solid #e9ecef;display:flex;gap:10px;flex-shrink:0}.documentation-menu .p-button{background:#fff3;border:1px solid rgba(255,255,255,.3);color:#fff}.documentation-menu .p-button:hover{background:#ffffff4d}.docs-list-container{padding:20px;flex:1;overflow-y:auto;background:#f8f9fa}.docs-header{text-align:center;margin-bottom:30px}.docs-header h2{margin:0 0 10px;color:#2c3e50;font-size:2rem}.docs-header .docs-subtitle{color:#7f8c8d;font-size:1.1rem;margin:0}.search-bar{margin-bottom:30px;display:flex;justify-content:center}.search-bar .search-input{width:100%;padding:12px 20px 12px 40px;border-radius:25px;border:2px solid #e9ecef;font-size:1rem}.search-bar .search-input:focus{border-color:#667eea;box-shadow:0 0 0 3px #667eea1a}.categories-container{max-width:1200px;margin:0 auto}.category-section{margin-bottom:25px;background:#fff;border-radius:12px;box-shadow:0 2px 8px #0000001a;overflow:hidden}.category-section .category-header{padding:20px;background:linear-gradient(135deg,#f5f7fa,#c3cfe2);cursor:pointer;display:flex;align-items:center;gap:15px;transition:all .3s ease}.category-section .category-header:hover{background:linear-gradient(135deg,#e8eaf6,#b39ddb)}.category-section .category-header .pi{color:#667eea;font-size:1rem;transition:transform .3s ease}.category-section .category-header .category-icon{font-size:1.5rem}.category-section .category-header .category-title{margin:0;color:#2c3e50;font-size:1.3rem;flex:1}.category-section .category-header .category-count{color:#7f8c8d;font-size:.9rem;background:#677eea1a;padding:4px 12px;border-radius:15px}.category-section .category-content{max-height:0;overflow:hidden;transition:max-height .4s ease-out}.category-section .category-content.expanded{max-height:2000px;transition:max-height .6s ease-in}.docs-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:20px;padding:25px}.doc-card{border:1px solid #e9ecef;border-radius:12px;padding:20px;cursor:pointer;transition:all .3s ease;background:#fff;position:relative;overflow:hidden}.doc-card:before{content:\"\";position:absolute;top:0;left:0;width:100%;height:4px;background:linear-gradient(90deg,#667eea,#764ba2);transform:scaleX(0);transition:transform .3s ease}.doc-card:hover{border-color:#667eea;box-shadow:0 8px 25px #667eea26;transform:translateY(-4px)}.doc-card:hover:before{transform:scaleX(1)}.doc-card .doc-card-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:15px}.doc-card .doc-card-header .doc-icon{font-size:2rem}.doc-card .doc-card-header .doc-badge{padding:4px 8px;border-radius:12px;font-size:.75rem;font-weight:600;text-transform:uppercase}.doc-card .doc-card-header .doc-badge.doc-badge-high{background:#e8f5e8;color:#2e7d2e}.doc-card .doc-card-header .doc-badge.doc-badge-medium{background:#fff3cd;color:#856404}.doc-card .doc-card-header .doc-badge.doc-badge-low{background:#f8f9fa;color:#6c757d}.doc-card .doc-card-content .doc-name{margin:0 0 10px;color:#2c3e50;font-size:1.1rem;font-weight:600;line-height:1.3}.doc-card .doc-card-content .doc-description{color:#6c757d;font-size:.9rem;line-height:1.4;margin:0 0 10px}.doc-card .doc-card-content .doc-description ::ng-deep p{margin:0;display:inline}.doc-card .doc-card-content .doc-description ::ng-deep a{color:#667eea;text-decoration:none;pointer-events:auto}.doc-card .doc-card-content .doc-description ::ng-deep a:hover{text-decoration:underline}.doc-card .doc-card-content .doc-filename{color:#adb5bd;font-size:.8rem;font-family:Courier New,monospace}.docs-stats{display:flex;justify-content:center;gap:40px;margin-top:40px;padding:20px;background:#fff;border-radius:12px;box-shadow:0 2px 8px #0000001a}.docs-stats .stat-item{text-align:center;color:#6c757d}.docs-stats .stat-item strong{color:#667eea;font-size:1.2rem}.markdown-container{flex:1;overflow-y:auto;padding:20px;background:#fff}.markdown-container .doc-breadcrumb{display:flex;align-items:center;gap:8px;margin-bottom:20px;padding:10px 0;border-bottom:1px solid #e9ecef;color:#6c757d;font-size:.9rem}.markdown-container .doc-breadcrumb .breadcrumb-current{color:#2c3e50;font-weight:600}.markdown-container markdown{display:block;line-height:1.6}.markdown-container markdown ::ng-deep a[href$=\".md\"]{color:#667eea;text-decoration:none;cursor:pointer;border-bottom:1px dashed #667eea}.markdown-container markdown ::ng-deep a[href$=\".md\"]:hover{text-decoration:none;border-bottom-style:solid}.loading-container{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px;color:#6c757d;gap:20px}.loading-container span{font-size:1.1rem}.documentation-tabs{flex:1;display:flex;flex-direction:column}.documentation-tabs ::ng-deep .p-tabview-panels{flex:1;display:flex}.documentation-tabs ::ng-deep .p-tabview-panels .p-tabview-panel{flex:1;display:flex;flex-direction:column}.documentation-tabs ::ng-deep .p-tabview-nav{background:#f8f9fa;border-bottom:2px solid #e9ecef}.documentation-tabs ::ng-deep .p-tabview-nav .p-tabview-nav-link{background:transparent;border:none;color:#6c757d;font-weight:500}.documentation-tabs ::ng-deep .p-tabview-nav .p-tabview-nav-link:not(.p-disabled):focus{box-shadow:0 0 0 2px #667eea33}.documentation-tabs ::ng-deep .p-tabview-nav .p-highlight .p-tabview-nav-link{background:#fff;color:#667eea;border-bottom:2px solid #667eea}\n"] }]
|
|
1585
|
-
}], ctorParameters: () => [{ type: i1$1.HttpClient }, { type: i2$3.Router }, { type: i0.NgZone }] });
|
|
1593
|
+
], template: "<div class=\"documentation-container\">\r\n <!-- Menu sup\u00E9rieur -->\r\n <div class=\"documentation-menu\">\r\n <button pButton\r\n type=\"button\"\r\n icon=\"pi pi-list\"\r\n label=\"Sommaire des documentations\"\r\n class=\"p-button-sm p-button-outlined\"\r\n (click)=\"openDocumentationList()\"\r\n title=\"Voir toutes les documentations disponibles\">\r\n </button>\r\n <button pButton\r\n type=\"button\"\r\n icon=\"pi pi-home\"\r\n label=\"Documentation courante\"\r\n class=\"p-button-sm p-button-outlined\"\r\n (click)=\"openCurrentPageDoc()\"\r\n title=\"Documentation de la page actuelle\">\r\n </button>\r\n </div>\r\n\r\n <!-- Syst\u00E8me d'onglets -->\r\n <p-tabs [(value)]=\"activeTabValue\"\r\n (onClose)=\"closeTab($event)\"\r\n styleClass=\"documentation-tabs\">\r\n <p-tablist>\r\n @for (tab of tabs; track tab.value) {\r\n <p-tab [value]=\"tab.value\">{{ tab.title }}</p-tab>\r\n }\r\n </p-tablist>\r\n <p-tabpanels>\r\n @for (tab of tabs; track tab.value; let i = $index) {\r\n <p-tabpanel [value]=\"tab.value\">\r\n <!-- Contenu pour onglet de liste - Version am\u00E9lior\u00E9e -->\r\n @if (tab.type === 'list') {\r\n <div class=\"docs-list-container\">\r\n <div class=\"docs-header\">\r\n <h2>\uD83D\uDCDA Sommaire de la Documentation</h2>\r\n <p class=\"docs-subtitle\">Explorez toutes les fonctionnalit\u00E9s disponibles dans LogeProj</p>\r\n </div>\r\n <!-- Barre de recherche -->\r\n <div class=\"search-bar\">\r\n <span class=\"p-input-icon-left\" style=\"width: 100%; max-width: 800px;\">\r\n <i class=\"pi pi-search\"></i>\r\n <input type=\"text\"\r\n pInputText\r\n placeholder=\"Rechercher dans les documentations...\"\r\n name=\"recherche\"\r\n [(ngModel)]=\"searchQuery\"\r\n ngDefaultControl\r\n (input)=\"filterDocumentation()\"\r\n style=\"width: 100% !important; padding: 12px 20px 12px 40px !important; border-radius: 25px !important;\">\r\n </span>\r\n </div>\r\n <!-- Liste des cat\u00E9gories -->\r\n <div class=\"categories-container\">\r\n @for (category of filteredCategories; track category.key) {\r\n <div class=\"category-section\">\r\n <div class=\"category-header\" (click)=\"toggleCategory(category.key)\">\r\n <i class=\"pi\" [ngClass]=\"category.expanded ? 'pi-chevron-down' : 'pi-chevron-right'\"></i>\r\n <span class=\"category-icon\">{{ category.icon }}</span>\r\n <h3 class=\"category-title\">{{ category.name }}</h3>\r\n <span class=\"category-count\">({{ category.docs.length }})</span>\r\n </div>\r\n <div class=\"category-content\" [ngClass]=\"{ 'expanded': category.expanded }\">\r\n <div class=\"docs-grid\">\r\n @for (doc of category.docs; track doc.fileName) {\r\n <div class=\"doc-card\"\r\n (click)=\"openDocumentationAndSwitch(doc)\"\r\n [title]=\"doc.description\">\r\n <div class=\"doc-card-content\">\r\n <h4 class=\"doc-name\">{{ doc.displayName }}</h4>\r\n <markdown class=\"doc-description\" [data]=\"doc.description\"\r\n (click)=\"onMarkdownClick($event)\"></markdown>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n <!-- Stats en bas -->\r\n <div class=\"docs-stats\">\r\n <div class=\"stat-item\">\r\n <strong>{{ getTotalDocsCount() }}</strong> documentations disponibles\r\n </div>\r\n <div class=\"stat-item\">\r\n <strong>{{ getOpenTabsCount() }}</strong> onglets ouverts\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n <!-- Contenu pour onglet de documentation -->\r\n @if (tab.type === 'doc') {\r\n <div class=\"markdown-container\">\r\n <!-- Breadcrumb pour navigation -->\r\n @if (tab.category) {\r\n <div class=\"doc-breadcrumb\">\r\n <span class=\"breadcrumb-item\">{{ tab.category }}</span>\r\n <i class=\"pi pi-angle-right\"></i>\r\n <span class=\"breadcrumb-current\">{{ tab.title }}</span>\r\n </div>\r\n }\r\n @if (tab.loading) {\r\n <div class=\"loading-container\">\r\n <p-progressSpinner strokeWidth=\"4\"></p-progressSpinner>\r\n <span>Chargement de la documentation...</span>\r\n </div>\r\n }\r\n @if (!tab.loading) {\r\n <markdown [data]=\"tab.content || 'Aucun contenu disponible'\"\r\n (click)=\"onMarkdownClick($event)\">\r\n </markdown>\r\n }\r\n </div>\r\n }\r\n </p-tabpanel>\r\n }\r\n </p-tabpanels>\r\n </p-tabs>\r\n</div>\r\n", styles: [".documentation-container{display:flex;flex-direction:column;height:100%;width:100%}.documentation-menu{padding:15px;background:linear-gradient(135deg,#667eea,#764ba2);border-bottom:1px solid #e9ecef;display:flex;gap:10px;flex-shrink:0}.documentation-menu .p-button{background:#fff3;border:1px solid rgba(255,255,255,.3);color:#fff}.documentation-menu .p-button:hover{background:#ffffff4d}.docs-list-container{padding:20px;flex:1;overflow-y:auto;background:#f8f9fa}.docs-header{text-align:center;margin-bottom:30px}.docs-header h2{margin:0 0 10px;color:#2c3e50;font-size:2rem}.docs-header .docs-subtitle{color:#7f8c8d;font-size:1.1rem;margin:0}.search-bar{margin-bottom:30px;display:flex;justify-content:center}.search-bar .search-input{width:100%;padding:12px 20px 12px 40px;border-radius:25px;border:2px solid #e9ecef;font-size:1rem}.search-bar .search-input:focus{border-color:#667eea;box-shadow:0 0 0 3px #667eea1a}.categories-container{max-width:1200px;margin:0 auto}.category-section{margin-bottom:25px;background:#fff;border-radius:12px;box-shadow:0 2px 8px #0000001a;overflow:hidden}.category-section .category-header{padding:20px;background:linear-gradient(135deg,#f5f7fa,#c3cfe2);cursor:pointer;display:flex;align-items:center;gap:15px;transition:all .3s ease}.category-section .category-header:hover{background:linear-gradient(135deg,#e8eaf6,#b39ddb)}.category-section .category-header .pi{color:#667eea;font-size:1rem;transition:transform .3s ease}.category-section .category-header .category-icon{font-size:1.5rem}.category-section .category-header .category-title{margin:0;color:#2c3e50;font-size:1.3rem;flex:1}.category-section .category-header .category-count{color:#7f8c8d;font-size:.9rem;background:#677eea1a;padding:4px 12px;border-radius:15px}.category-section .category-content{max-height:0;overflow:hidden;transition:max-height .4s ease-out}.category-section .category-content.expanded{max-height:2000px;transition:max-height .6s ease-in}.docs-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:20px;padding:25px}.doc-card{border:1px solid #e9ecef;border-radius:12px;padding:20px;cursor:pointer;transition:all .3s ease;background:#fff;position:relative;overflow:hidden}.doc-card:before{content:\"\";position:absolute;top:0;left:0;width:100%;height:4px;background:linear-gradient(90deg,#667eea,#764ba2);transform:scaleX(0);transition:transform .3s ease}.doc-card:hover{border-color:#667eea;box-shadow:0 8px 25px #667eea26;transform:translateY(-4px)}.doc-card:hover:before{transform:scaleX(1)}.doc-card .doc-card-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:15px}.doc-card .doc-card-header .doc-icon{font-size:2rem}.doc-card .doc-card-header .doc-badge{padding:4px 8px;border-radius:12px;font-size:.75rem;font-weight:600;text-transform:uppercase}.doc-card .doc-card-header .doc-badge.doc-badge-high{background:#e8f5e8;color:#2e7d2e}.doc-card .doc-card-header .doc-badge.doc-badge-medium{background:#fff3cd;color:#856404}.doc-card .doc-card-header .doc-badge.doc-badge-low{background:#f8f9fa;color:#6c757d}.doc-card .doc-card-content .doc-name{margin:0 0 10px;color:#2c3e50;font-size:1.1rem;font-weight:600;line-height:1.3}.doc-card .doc-card-content .doc-description{color:#6c757d;font-size:.9rem;line-height:1.4;margin:0 0 10px}.doc-card .doc-card-content .doc-description ::ng-deep p{margin:0;display:inline}.doc-card .doc-card-content .doc-description ::ng-deep a{color:#667eea;text-decoration:none;pointer-events:auto}.doc-card .doc-card-content .doc-description ::ng-deep a:hover{text-decoration:underline}.doc-card .doc-card-content .doc-filename{color:#adb5bd;font-size:.8rem;font-family:Courier New,monospace}.docs-stats{display:flex;justify-content:center;gap:40px;margin-top:40px;padding:20px;background:#fff;border-radius:12px;box-shadow:0 2px 8px #0000001a}.docs-stats .stat-item{text-align:center;color:#6c757d}.docs-stats .stat-item strong{color:#667eea;font-size:1.2rem}.markdown-container{flex:1;overflow-y:auto;padding:20px;background:#fff}.markdown-container .doc-breadcrumb{display:flex;align-items:center;gap:8px;margin-bottom:20px;padding:10px 0;border-bottom:1px solid #e9ecef;color:#6c757d;font-size:.9rem}.markdown-container .doc-breadcrumb .breadcrumb-current{color:#2c3e50;font-weight:600}.markdown-container markdown{display:block;line-height:1.6}.markdown-container markdown ::ng-deep a[href$=\".md\"]{color:#667eea;text-decoration:none;cursor:pointer;border-bottom:1px dashed #667eea}.markdown-container markdown ::ng-deep a[href$=\".md\"]:hover{text-decoration:none;border-bottom-style:solid}.loading-container{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px;color:#6c757d;gap:20px}.loading-container span{font-size:1.1rem}.documentation-tabs{flex:1;display:flex;flex-direction:column}.documentation-tabs ::ng-deep .p-tabview-panels{flex:1;display:flex}.documentation-tabs ::ng-deep .p-tabview-panels .p-tabview-panel{flex:1;display:flex;flex-direction:column}.documentation-tabs ::ng-deep .p-tabview-nav{background:#f8f9fa;border-bottom:2px solid #e9ecef}.documentation-tabs ::ng-deep .p-tabview-nav .p-tabview-nav-link{background:transparent;border:none;color:#6c757d;font-weight:500}.documentation-tabs ::ng-deep .p-tabview-nav .p-tabview-nav-link:not(.p-disabled):focus{box-shadow:0 0 0 2px #667eea33}.documentation-tabs ::ng-deep .p-tabview-nav .p-highlight .p-tabview-nav-link{background:#fff;color:#667eea;border-bottom:2px solid #667eea}\n"] }]
|
|
1594
|
+
}], ctorParameters: () => [{ type: i1$1.HttpClient }, { type: i2$3.Router }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }] });
|
|
1586
1595
|
|
|
1587
1596
|
class CilogLibService {
|
|
1588
1597
|
constructor() { }
|