@ng-vagabond-lab/ng-dsv 0.2.41 → 0.2.42

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.
Files changed (43) hide show
  1. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-file.mjs +34 -2
  2. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-file.mjs.map +1 -1
  3. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-theme.mjs +2 -2
  4. package/fesm2022/ng-vagabond-lab-ng-dsv-ds-theme.mjs.map +1 -1
  5. package/fesm2022/{ng-vagabond-lab-ng-dsv-module-news-news-form.container-D6wXpIFA.mjs → ng-vagabond-lab-ng-dsv-module-news-news-form.container-B89sqBxq.mjs} +6 -23
  6. package/fesm2022/ng-vagabond-lab-ng-dsv-module-news-news-form.container-B89sqBxq.mjs.map +1 -0
  7. package/fesm2022/ng-vagabond-lab-ng-dsv-module-news-news-form.container-DYj7fb2V.mjs +105 -0
  8. package/fesm2022/ng-vagabond-lab-ng-dsv-module-news-news-form.container-DYj7fb2V.mjs.map +1 -0
  9. package/fesm2022/ng-vagabond-lab-ng-dsv-module-news-news-list.container-BOocOeoi.mjs +176 -0
  10. package/fesm2022/ng-vagabond-lab-ng-dsv-module-news-news-list.container-BOocOeoi.mjs.map +1 -0
  11. package/fesm2022/{ng-vagabond-lab-ng-dsv-module-news-news-list.container-PtCVILsF.mjs → ng-vagabond-lab-ng-dsv-module-news-news-list.container-dRUMZot2.mjs} +3 -3
  12. package/fesm2022/{ng-vagabond-lab-ng-dsv-module-news-news-list.container-PtCVILsF.mjs.map → ng-vagabond-lab-ng-dsv-module-news-news-list.container-dRUMZot2.mjs.map} +1 -1
  13. package/fesm2022/ng-vagabond-lab-ng-dsv-module-news-news-list.service-C4rdx_5c.mjs +38 -0
  14. package/fesm2022/ng-vagabond-lab-ng-dsv-module-news-news-list.service-C4rdx_5c.mjs.map +1 -0
  15. package/fesm2022/ng-vagabond-lab-ng-dsv-module-news-news.container-BBDrX_yB.mjs +182 -0
  16. package/fesm2022/ng-vagabond-lab-ng-dsv-module-news-news.container-BBDrX_yB.mjs.map +1 -0
  17. package/fesm2022/{ng-vagabond-lab-ng-dsv-module-news-news.container-D6fR0O72.mjs → ng-vagabond-lab-ng-dsv-module-news-news.container-Dv48TkBy.mjs} +3 -3
  18. package/fesm2022/{ng-vagabond-lab-ng-dsv-module-news-news.container-D6fR0O72.mjs.map → ng-vagabond-lab-ng-dsv-module-news-news.container-Dv48TkBy.mjs.map} +1 -1
  19. package/fesm2022/ng-vagabond-lab-ng-dsv-module-news.mjs +4 -4
  20. package/package.json +1 -1
  21. package/types/ng-vagabond-lab-ng-dsv-date.d.ts.map +1 -0
  22. package/types/ng-vagabond-lab-ng-dsv-ds-accordion.d.ts.map +1 -0
  23. package/types/ng-vagabond-lab-ng-dsv-ds-avatar.d.ts.map +1 -0
  24. package/types/ng-vagabond-lab-ng-dsv-ds-file.d.ts +12 -1
  25. package/types/ng-vagabond-lab-ng-dsv-ds-file.d.ts.map +1 -0
  26. package/types/ng-vagabond-lab-ng-dsv-ds-form-reactive.d.ts.map +1 -0
  27. package/types/ng-vagabond-lab-ng-dsv-ds-header.d.ts.map +1 -0
  28. package/types/ng-vagabond-lab-ng-dsv-ds-img.d.ts.map +1 -0
  29. package/types/ng-vagabond-lab-ng-dsv-ds-linear-progress.d.ts.map +1 -0
  30. package/types/ng-vagabond-lab-ng-dsv-ds-link-pipe.d.ts.map +1 -0
  31. package/types/ng-vagabond-lab-ng-dsv-ds-list.d.ts.map +1 -0
  32. package/types/ng-vagabond-lab-ng-dsv-ds-markdown.d.ts.map +1 -0
  33. package/types/ng-vagabond-lab-ng-dsv-ds-paginate.d.ts.map +1 -0
  34. package/types/ng-vagabond-lab-ng-dsv-ds-skeleton.d.ts.map +1 -0
  35. package/types/ng-vagabond-lab-ng-dsv-ds-tab.d.ts.map +1 -0
  36. package/types/ng-vagabond-lab-ng-dsv-ds-table.d.ts.map +1 -0
  37. package/types/ng-vagabond-lab-ng-dsv-ds-tooltip.d.ts.map +1 -0
  38. package/types/ng-vagabond-lab-ng-dsv-module-admin.d.ts.map +1 -0
  39. package/types/ng-vagabond-lab-ng-dsv-module-contact.d.ts.map +1 -0
  40. package/types/ng-vagabond-lab-ng-dsv-module-news.d.ts.map +1 -0
  41. package/types/ng-vagabond-lab-ng-dsv-module-notification.d.ts.map +1 -0
  42. package/types/ng-vagabond-lab-ng-dsv-template.d.ts.map +1 -0
  43. package/fesm2022/ng-vagabond-lab-ng-dsv-module-news-news-form.container-D6wXpIFA.mjs.map +0 -1
@@ -1,5 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
- import { input, computed, Component, output, signal, Directive, viewChild } from '@angular/core';
2
+ import { input, computed, Component, output, signal, Directive, viewChild, inject } from '@angular/core';
3
+ import { ApiService } from '@ng-vagabond-lab/ng-dsv/api';
3
4
 
4
5
  class DsvFileShowComponent {
5
6
  url = input('', /* @ts-ignore */
@@ -108,9 +109,40 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
108
109
  args: [{ selector: 'dsv-file-upload', imports: [FileUploadDirective], template: "<label class=\"drag-zone\" [appDragDrop]=\"dragDropEnabled()\" (dropped)=\"handleFileDrop($event)\">\n <input\n type=\"file\"\n [accept]=\"fileType()\"\n [multiple]=\"multiple()\"\n (change)=\"addFiles(fileInput.files!)\"\n #fileInput\n class=\"visually-hidden\"\n />\n @if (!file()) {\n <ng-content></ng-content>\n } @else {\n <img [src]=\"file()\" [alt]=\"imgAlt()\" width=\"100%\" />\n }\n</label>\n", styles: [":host{width:100%;height:100%;display:flex;align-items:center;justify-content:center;background:var(--background)}:host label{padding:5px}:host .drag-zone{width:80%;min-height:200px;border:1px solid var(--border);display:flex;flex-direction:column;align-items:center;justify-content:space-around;cursor:pointer}:host .drag-zone.dragging{background-color:#cdcdff;border:3px dashed #999999}:host .drag-zone:focus-within{border:1px solid #999999}:host .visually-hidden{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}\n"] }]
109
110
  }], propDecorators: { multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], fileType: [{ type: i0.Input, args: [{ isSignal: true, alias: "fileType", required: false }] }], imgAlt: [{ type: i0.Input, args: [{ isSignal: true, alias: "imgAlt", required: false }] }], dragDropEnabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "dragDropEnabled", required: false }] }], filesChanged: [{ type: i0.Output, args: ["filesChanged"] }], inputRef: [{ type: i0.ViewChild, args: ['fileInput', { isSignal: true }] }] } });
110
111
 
112
+ class FileUploadContainer {
113
+ apiService = inject(ApiService);
114
+ directory = input('', /* @ts-ignore */
115
+ ...(ngDevMode ? [{ debugName: "directory" }] : /* istanbul ignore next */ []));
116
+ image = input('', /* @ts-ignore */
117
+ ...(ngDevMode ? [{ debugName: "image" }] : /* istanbul ignore next */ []));
118
+ callback = output();
119
+ file = signal(null, /* @ts-ignore */
120
+ ...(ngDevMode ? [{ debugName: "file" }] : /* istanbul ignore next */ []));
121
+ addFiles(files) {
122
+ Array.from(files ?? []).forEach((file) => {
123
+ const reader = new FileReader();
124
+ reader.onload = () => {
125
+ this.file.set(file);
126
+ const formData = new FormData();
127
+ formData.append('fileForm', this.file());
128
+ return this.apiService.post(`/file/upload?directory=${this.directory()}`, formData, (res) => {
129
+ this.callback.emit(res['path']);
130
+ });
131
+ };
132
+ reader.readAsDataURL(file);
133
+ });
134
+ }
135
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: FileUploadContainer, deps: [], target: i0.ɵɵFactoryTarget.Component });
136
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: FileUploadContainer, isStandalone: true, selector: "dsv-file-upload-container", inputs: { directory: { classPropertyName: "directory", publicName: "directory", isSignal: true, isRequired: false, transformFunction: null }, image: { classPropertyName: "image", publicName: "image", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { callback: "callback" }, ngImport: i0, template: "<dsv-file-show url=\"/api/\" [src]=\"image()\" />\n<input type=\"file\" (change)=\"addFiles($event.target.files)\" #fileInput />\n", styles: [":host{width:100%;display:flex;align-items:center}:host dsv-file-show{width:90px}:host input[type=file]{width:100%;background-color:transparent;color:var(--text);border:1px solid var(--border);border-radius:5px;padding:4px 10px;cursor:pointer;box-sizing:border-box}:host input[type=file]::file-selector-button{background-color:var(--secondary);color:var(--button-text);border:1px solid var(--border);border-radius:5px;padding:4px 10px;margin-left:-5px;margin-right:10px;cursor:pointer;transition:background-color .2s ease}:host input[type=file]::file-selector-button:hover{background-color:var(--secondary-light)}\n"], dependencies: [{ kind: "component", type: DsvFileShowComponent, selector: "dsv-file-show", inputs: ["url", "src", "alt"] }] });
137
+ }
138
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: FileUploadContainer, decorators: [{
139
+ type: Component,
140
+ args: [{ selector: 'dsv-file-upload-container', imports: [DsvFileShowComponent], template: "<dsv-file-show url=\"/api/\" [src]=\"image()\" />\n<input type=\"file\" (change)=\"addFiles($event.target.files)\" #fileInput />\n", styles: [":host{width:100%;display:flex;align-items:center}:host dsv-file-show{width:90px}:host input[type=file]{width:100%;background-color:transparent;color:var(--text);border:1px solid var(--border);border-radius:5px;padding:4px 10px;cursor:pointer;box-sizing:border-box}:host input[type=file]::file-selector-button{background-color:var(--secondary);color:var(--button-text);border:1px solid var(--border);border-radius:5px;padding:4px 10px;margin-left:-5px;margin-right:10px;cursor:pointer;transition:background-color .2s ease}:host input[type=file]::file-selector-button:hover{background-color:var(--secondary-light)}\n"] }]
141
+ }], propDecorators: { directory: [{ type: i0.Input, args: [{ isSignal: true, alias: "directory", required: false }] }], image: [{ type: i0.Input, args: [{ isSignal: true, alias: "image", required: false }] }], callback: [{ type: i0.Output, args: ["callback"] }] } });
142
+
111
143
  /**
112
144
  * Generated bundle index. Do not edit.
113
145
  */
114
146
 
115
- export { DsvFileShowComponent, DsvFileUploadComponent, FileUploadDirective };
147
+ export { DsvFileShowComponent, DsvFileUploadComponent, FileUploadContainer, FileUploadDirective };
116
148
  //# sourceMappingURL=ng-vagabond-lab-ng-dsv-ds-file.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ng-vagabond-lab-ng-dsv-ds-file.mjs","sources":["../../../projects/ng-dsv/ds/file/show/component/file-show.component.ts","../../../projects/ng-dsv/ds/file/show/component/file-show.component.html","../../../projects/ng-dsv/ds/file/upload/directive/file-upload-directives.ts","../../../projects/ng-dsv/ds/file/upload/component/file-upload.component.ts","../../../projects/ng-dsv/ds/file/upload/component/file-upload.component.html","../../../projects/ng-dsv/ds/file/ng-vagabond-lab-ng-dsv-ds-file.ts"],"sourcesContent":["import { Component, computed, input } from '@angular/core';\n\n@Component({\n selector: 'dsv-file-show',\n templateUrl: './file-show.component.html',\n})\nexport class DsvFileShowComponent {\n readonly url = input<string>('');\n readonly src = input.required<string>();\n readonly alt = input<string>('Exemple du dsv file show');\n\n readonly fileUrl = computed<string>(() => this.url() + '/file/download?fileName=' + this.src());\n}\n","<img\n [src]=\"fileUrl()\"\n [alt]=\"alt()\"\n width=\"100%\"\n/>\n","import { computed, Directive, input, output, signal } from '@angular/core';\n\n@Directive({\n selector: '[appDragDrop]',\n host: {\n '[class.dragging]': 'dragInProgress()',\n '(dragenter)': 'onDragOver($event)',\n '(dragover)': 'onDragOver($event)',\n '(dragleave)': 'onDragEnd($event)',\n '(dragend)': 'onDragEnd($event)',\n '(drop)': 'onDrop($event)',\n },\n})\nexport class FileUploadDirective {\n readonly appDragDrop = input<any>();\n\n readonly dropped = output<DragEvent>();\n\n readonly dragInProgress = signal(false);\n\n private readonly enabled = computed<boolean>(() => {\n const value = this.appDragDrop();\n return value === '' ? true : !!value;\n });\n\n onDragOver(event: DragEvent): void {\n if (!this.enabled()) return;\n this.stopAndPreventDefault(event);\n this.dragInProgress.set(true);\n }\n\n onDragEnd(event: DragEvent): void {\n if (!this.enabled()) return;\n this.stopAndPreventDefault(event);\n this.dragInProgress.set(false);\n }\n\n onDrop(event: DragEvent): void {\n this.stopAndPreventDefault(event);\n this.dragInProgress.set(false);\n this.dropped.emit(event);\n }\n\n private stopAndPreventDefault(e: UIEvent): void {\n e.stopPropagation();\n e.preventDefault();\n }\n}\n","import { Component, ElementRef, input, output, signal, viewChild } from '@angular/core';\nimport { FileUploadDirective } from '../directive/file-upload-directives';\n\n@Component({\n selector: 'dsv-file-upload',\n imports: [FileUploadDirective],\n templateUrl: './file-upload.component.html',\n styleUrls: ['./file-upload.component.scss'],\n})\nexport class DsvFileUploadComponent {\n readonly multiple = input<boolean>(false);\n readonly fileType = input<string>('image/*');\n readonly imgAlt = input<string>(\"Apperçu de l'image\");\n readonly dragDropEnabled = input<boolean>(true);\n\n readonly filesChanged = output<FileList>();\n\n readonly inputRef = viewChild<ElementRef>('fileInput');\n\n readonly file = signal<string | undefined>(undefined);\n\n addFiles(files: FileList): void {\n const reader = new FileReader();\n reader.onload = () => {\n this.file.set(reader.result as string);\n };\n reader.readAsDataURL(files.item(0) as Blob);\n this.filesChanged.emit(files);\n }\n\n handleFileDrop(event: DragEvent): void {\n if (event?.dataTransfer?.files?.length) {\n const files = event.dataTransfer.files;\n const input = this.inputRef()?.nativeElement;\n if (input) {\n input.files = files;\n }\n this.addFiles(files);\n }\n }\n}\n","<label class=\"drag-zone\" [appDragDrop]=\"dragDropEnabled()\" (dropped)=\"handleFileDrop($event)\">\n <input\n type=\"file\"\n [accept]=\"fileType()\"\n [multiple]=\"multiple()\"\n (change)=\"addFiles(fileInput.files!)\"\n #fileInput\n class=\"visually-hidden\"\n />\n @if (!file()) {\n <ng-content></ng-content>\n } @else {\n <img [src]=\"file()\" [alt]=\"imgAlt()\" width=\"100%\" />\n }\n</label>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ng-vagabond-lab-ng-dsv-ds-file.mjs","sources":["../../../projects/ng-dsv/ds/file/show/component/file-show.component.ts","../../../projects/ng-dsv/ds/file/show/component/file-show.component.html","../../../projects/ng-dsv/ds/file/upload/directive/file-upload-directives.ts","../../../projects/ng-dsv/ds/file/upload/component/file-upload.component.ts","../../../projects/ng-dsv/ds/file/upload/component/file-upload.component.html","../../../projects/ng-dsv/ds/file/upload/container/file-upload.container.ts","../../../projects/ng-dsv/ds/file/upload/container/file-upload.container.html","../../../projects/ng-dsv/ds/file/ng-vagabond-lab-ng-dsv-ds-file.ts"],"sourcesContent":["import { Component, computed, input } from '@angular/core';\n\n@Component({\n selector: 'dsv-file-show',\n templateUrl: './file-show.component.html',\n})\nexport class DsvFileShowComponent {\n readonly url = input<string>('');\n readonly src = input.required<string>();\n readonly alt = input<string>('Exemple du dsv file show');\n\n readonly fileUrl = computed<string>(() => this.url() + '/file/download?fileName=' + this.src());\n}\n","<img\n [src]=\"fileUrl()\"\n [alt]=\"alt()\"\n width=\"100%\"\n/>\n","import { computed, Directive, input, output, signal } from '@angular/core';\n\n@Directive({\n selector: '[appDragDrop]',\n host: {\n '[class.dragging]': 'dragInProgress()',\n '(dragenter)': 'onDragOver($event)',\n '(dragover)': 'onDragOver($event)',\n '(dragleave)': 'onDragEnd($event)',\n '(dragend)': 'onDragEnd($event)',\n '(drop)': 'onDrop($event)',\n },\n})\nexport class FileUploadDirective {\n readonly appDragDrop = input<any>();\n\n readonly dropped = output<DragEvent>();\n\n readonly dragInProgress = signal(false);\n\n private readonly enabled = computed<boolean>(() => {\n const value = this.appDragDrop();\n return value === '' ? true : !!value;\n });\n\n onDragOver(event: DragEvent): void {\n if (!this.enabled()) return;\n this.stopAndPreventDefault(event);\n this.dragInProgress.set(true);\n }\n\n onDragEnd(event: DragEvent): void {\n if (!this.enabled()) return;\n this.stopAndPreventDefault(event);\n this.dragInProgress.set(false);\n }\n\n onDrop(event: DragEvent): void {\n this.stopAndPreventDefault(event);\n this.dragInProgress.set(false);\n this.dropped.emit(event);\n }\n\n private stopAndPreventDefault(e: UIEvent): void {\n e.stopPropagation();\n e.preventDefault();\n }\n}\n","import { Component, ElementRef, input, output, signal, viewChild } from '@angular/core';\nimport { FileUploadDirective } from '../directive/file-upload-directives';\n\n@Component({\n selector: 'dsv-file-upload',\n imports: [FileUploadDirective],\n templateUrl: './file-upload.component.html',\n styleUrls: ['./file-upload.component.scss'],\n})\nexport class DsvFileUploadComponent {\n readonly multiple = input<boolean>(false);\n readonly fileType = input<string>('image/*');\n readonly imgAlt = input<string>(\"Apperçu de l'image\");\n readonly dragDropEnabled = input<boolean>(true);\n\n readonly filesChanged = output<FileList>();\n\n readonly inputRef = viewChild<ElementRef>('fileInput');\n\n readonly file = signal<string | undefined>(undefined);\n\n addFiles(files: FileList): void {\n const reader = new FileReader();\n reader.onload = () => {\n this.file.set(reader.result as string);\n };\n reader.readAsDataURL(files.item(0) as Blob);\n this.filesChanged.emit(files);\n }\n\n handleFileDrop(event: DragEvent): void {\n if (event?.dataTransfer?.files?.length) {\n const files = event.dataTransfer.files;\n const input = this.inputRef()?.nativeElement;\n if (input) {\n input.files = files;\n }\n this.addFiles(files);\n }\n }\n}\n","<label class=\"drag-zone\" [appDragDrop]=\"dragDropEnabled()\" (dropped)=\"handleFileDrop($event)\">\n <input\n type=\"file\"\n [accept]=\"fileType()\"\n [multiple]=\"multiple()\"\n (change)=\"addFiles(fileInput.files!)\"\n #fileInput\n class=\"visually-hidden\"\n />\n @if (!file()) {\n <ng-content></ng-content>\n } @else {\n <img [src]=\"file()\" [alt]=\"imgAlt()\" width=\"100%\" />\n }\n</label>\n","import { Component, inject, input, output, signal } from '@angular/core';\nimport { ApiService, JSONObject } from '@ng-vagabond-lab/ng-dsv/api';\nimport { DsvFileShowComponent } from '../../public-api';\n\n@Component({\n selector: 'dsv-file-upload-container',\n imports: [DsvFileShowComponent],\n templateUrl: './file-upload.container.html',\n styleUrl: './file-upload.container.scss',\n})\nexport class FileUploadContainer {\n private readonly apiService = inject(ApiService);\n\n public readonly directory = input<string>('');\n public readonly image = input<string>('');\n\n protected readonly callback = output<string>();\n\n private readonly file = signal<File | null>(null);\n\n addFiles(files: FileList | null) {\n Array.from(files ?? []).forEach((file) => {\n const reader = new FileReader();\n reader.onload = () => {\n this.file.set(file);\n\n const formData = new FormData();\n formData.append('fileForm', this.file()!);\n\n return this.apiService.post(`/file/upload?directory=${this.directory()}`, formData, (res) => {\n this.callback.emit(res['path' as keyof JSONObject]);\n });\n };\n reader.readAsDataURL(file);\n });\n }\n}\n","<dsv-file-show url=\"/api/\" [src]=\"image()\" />\n<input type=\"file\" (change)=\"addFiles($event.target.files)\" #fileInput />\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -23,11 +23,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
23
23
 
24
24
  class DsvThemeComponent {
25
25
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: DsvThemeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
26
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.4", type: DsvThemeComponent, isStandalone: true, selector: "dsv-theme", ngImport: i0, template: "<ng-content></ng-content>\n<div id=\"collapse\"></div>\n", styles: [":host{display:flex;flex:1;flex-direction:column;overflow:hidden;--scroll-gap: 15px;background-color:var(--background);color:var(--text)}:host #collapse{display:none;position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:#0009}:host #collapse.show{display:inline}:host-context(body.light){--button-text: #fcfbfb;--background: #ffffff;--background-card: #ffffff;--background-card-light: #e9e9e9;--background-card-transparent: #ffffffbc;--background-header: #dcdcdc;--background-table-tr: #000000;--background-table-tr-text: var(--background-card);--scrollbar: #757575 #f5f5f5;--subtitle: #5a5959;--border: #cbcbcb;--text: #000000;--primary: #007bff;--secondary: #504f4f;--success: #0da12f;--info: #1c7fc1;--warning: #a2821f;--error: #ca2535}:host-context(body.dark){--button-text: #000000;--background: #151515;--background-card: #151515;--background-card-light: #2e2e2e;--background-card-transparent: #090909bc;--background-header: #1f1f1f;--background-table-tr: #DCDCDC;--background-table-tr-text: var(--background-card);--scrollbar: #a9a9a9 #383838;--subtitle: #ffffffb3;--border: #606060;--text: #ffffff;--primary: #007bff;--secondary: #a9a9a9;--success: #48de6b;--info: #106694;--warning: #ac8a24;--error: #f45766}\n"] });
26
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.4", type: DsvThemeComponent, isStandalone: true, selector: "dsv-theme", ngImport: i0, template: "<ng-content></ng-content>\n<div id=\"collapse\"></div>\n", styles: [":host{display:flex;flex:1;flex-direction:column;overflow:hidden;--scroll-gap: 15px;background-color:var(--background);color:var(--text)}:host #collapse{display:none;position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:#0009}:host #collapse.show{display:inline}:host-context(body.light){--button-text: #fcfbfb;--background: #ffffff;--background-card: #ffffff;--background-card-light: #e9e9e9;--background-card-transparent: #ffffffbc;--background-header: #dcdcdc;--background-table-tr: #000000;--background-table-tr-text: var(--background-card);--scrollbar: #757575 #f5f5f5;--subtitle: #5a5959;--border: #cbcbcb;--text: #000000;--primary: #007bff;--secondary: #504f4f;--secondary-light: #6c6a6a;--success: #0da12f;--info: #1c7fc1;--warning: #a2821f;--error: #ca2535}:host-context(body.dark){--button-text: #000000;--background: #151515;--background-card: #151515;--background-card-light: #2e2e2e;--background-card-transparent: #090909bc;--background-header: #1f1f1f;--background-table-tr: #DCDCDC;--background-table-tr-text: var(--background-card);--scrollbar: #a9a9a9 #383838;--subtitle: #ffffffb3;--border: #606060;--text: #ffffff;--primary: #007bff;--secondary: #a9a9a9;--secondary-light: #7a7777;--success: #48de6b;--info: #106694;--warning: #ac8a24;--error: #f45766}\n"] });
27
27
  }
28
28
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: DsvThemeComponent, decorators: [{
29
29
  type: Component,
30
- args: [{ selector: 'dsv-theme', template: "<ng-content></ng-content>\n<div id=\"collapse\"></div>\n", styles: [":host{display:flex;flex:1;flex-direction:column;overflow:hidden;--scroll-gap: 15px;background-color:var(--background);color:var(--text)}:host #collapse{display:none;position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:#0009}:host #collapse.show{display:inline}:host-context(body.light){--button-text: #fcfbfb;--background: #ffffff;--background-card: #ffffff;--background-card-light: #e9e9e9;--background-card-transparent: #ffffffbc;--background-header: #dcdcdc;--background-table-tr: #000000;--background-table-tr-text: var(--background-card);--scrollbar: #757575 #f5f5f5;--subtitle: #5a5959;--border: #cbcbcb;--text: #000000;--primary: #007bff;--secondary: #504f4f;--success: #0da12f;--info: #1c7fc1;--warning: #a2821f;--error: #ca2535}:host-context(body.dark){--button-text: #000000;--background: #151515;--background-card: #151515;--background-card-light: #2e2e2e;--background-card-transparent: #090909bc;--background-header: #1f1f1f;--background-table-tr: #DCDCDC;--background-table-tr-text: var(--background-card);--scrollbar: #a9a9a9 #383838;--subtitle: #ffffffb3;--border: #606060;--text: #ffffff;--primary: #007bff;--secondary: #a9a9a9;--success: #48de6b;--info: #106694;--warning: #ac8a24;--error: #f45766}\n"] }]
30
+ args: [{ selector: 'dsv-theme', template: "<ng-content></ng-content>\n<div id=\"collapse\"></div>\n", styles: [":host{display:flex;flex:1;flex-direction:column;overflow:hidden;--scroll-gap: 15px;background-color:var(--background);color:var(--text)}:host #collapse{display:none;position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:#0009}:host #collapse.show{display:inline}:host-context(body.light){--button-text: #fcfbfb;--background: #ffffff;--background-card: #ffffff;--background-card-light: #e9e9e9;--background-card-transparent: #ffffffbc;--background-header: #dcdcdc;--background-table-tr: #000000;--background-table-tr-text: var(--background-card);--scrollbar: #757575 #f5f5f5;--subtitle: #5a5959;--border: #cbcbcb;--text: #000000;--primary: #007bff;--secondary: #504f4f;--secondary-light: #6c6a6a;--success: #0da12f;--info: #1c7fc1;--warning: #a2821f;--error: #ca2535}:host-context(body.dark){--button-text: #000000;--background: #151515;--background-card: #151515;--background-card-light: #2e2e2e;--background-card-transparent: #090909bc;--background-header: #1f1f1f;--background-table-tr: #DCDCDC;--background-table-tr-text: var(--background-card);--scrollbar: #a9a9a9 #383838;--subtitle: #ffffffb3;--border: #606060;--text: #ffffff;--primary: #007bff;--secondary: #a9a9a9;--secondary-light: #7a7777;--success: #48de6b;--info: #106694;--warning: #ac8a24;--error: #f45766}\n"] }]
31
31
  }] });
32
32
 
33
33
  class ThemeService {
@@ -1 +1 @@
1
- {"version":3,"file":"ng-vagabond-lab-ng-dsv-ds-theme.mjs","sources":["../../../projects/ng-dsv/ds/theme/component/switch/theme-switch.component.ts","../../../projects/ng-dsv/ds/theme/component/switch/theme-switch.component.html","../../../projects/ng-dsv/ds/theme/component/theme.component.ts","../../../projects/ng-dsv/ds/theme/component/theme.component.html","../../../projects/ng-dsv/ds/theme/service/theme.service.ts","../../../projects/ng-dsv/ds/theme/ng-vagabond-lab-ng-dsv-ds-theme.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { Component, inject } from '@angular/core';\nimport { DsvButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/button';\nimport { ThemeService } from '../../public-api';\n\nexport type Theme = {\n primary: string;\n text: string;\n};\n\n@Component({\n selector: 'dsv-theme-switch',\n imports: [CommonModule, DsvButtonComponent],\n templateUrl: `./theme-switch.component.html`,\n})\nexport class DsvThemeSwitchComponent {\n readonly themeService = inject(ThemeService);\n\n switchTheme(): void {\n this.themeService.switchTheme();\n }\n\n isLightMode(): boolean {\n return this.themeService.themeMode() === 'light';\n }\n}\n","<dsv-button\n width=\"large\"\n color=\"inherit\"\n size=\"small\"\n [noHover]=\"true\"\n (callback)=\"switchTheme()\"\n [icon]=\"isLightMode() ? 'ri-contrast-2-line' : 'ri-contrast-2-fill'\"\n>\n</dsv-button>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'dsv-theme',\n templateUrl: './theme.component.html',\n styleUrls: ['./theme.component.scss'],\n})\nexport class DsvThemeComponent {}\n","<ng-content></ng-content>\n<div id=\"collapse\"></div>\n","import { inject, Injectable, signal } from '@angular/core';\nimport { PlatformService } from '@ng-vagabond-lab/ng-dsv/platform';\nimport { StorageService } from '@ng-vagabond-lab/ng-dsv/storage';\n\nexport type ThemeMode = 'dark' | 'light';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ThemeService {\n readonly platformService = inject(PlatformService);\n readonly storageService = inject(StorageService);\n\n readonly themeMode = signal<ThemeMode>((this.storageService.getItem('theme') as ThemeMode) ?? 'light');\n\n constructor() {\n if (this.platformService.isPlatformBrowser()) {\n let html = document.getElementsByTagName('body')[0];\n html.classList.add(this.themeMode());\n }\n }\n\n switchTheme(): void {\n if (this.platformService.isPlatformBrowser()) {\n let html = document.getElementsByTagName('body')[0];\n html.classList.remove(this.themeMode());\n\n let newMode: ThemeMode = this.themeMode() === 'dark' ? 'light' : 'dark';\n this.themeMode.set(newMode);\n this.storageService.setItem('theme', newMode);\n html.classList.add(newMode);\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ng-vagabond-lab-ng-dsv-ds-theme.mjs","sources":["../../../projects/ng-dsv/ds/theme/component/switch/theme-switch.component.ts","../../../projects/ng-dsv/ds/theme/component/switch/theme-switch.component.html","../../../projects/ng-dsv/ds/theme/component/theme.component.ts","../../../projects/ng-dsv/ds/theme/component/theme.component.html","../../../projects/ng-dsv/ds/theme/service/theme.service.ts","../../../projects/ng-dsv/ds/theme/ng-vagabond-lab-ng-dsv-ds-theme.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { Component, inject } from '@angular/core';\nimport { DsvButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/button';\nimport { ThemeService } from '../../public-api';\n\nexport type Theme = {\n primary: string;\n text: string;\n};\n\n@Component({\n selector: 'dsv-theme-switch',\n imports: [CommonModule, DsvButtonComponent],\n templateUrl: `./theme-switch.component.html`,\n})\nexport class DsvThemeSwitchComponent {\n readonly themeService = inject(ThemeService);\n\n switchTheme(): void {\n this.themeService.switchTheme();\n }\n\n isLightMode(): boolean {\n return this.themeService.themeMode() === 'light';\n }\n}\n","<dsv-button\n width=\"large\"\n color=\"inherit\"\n size=\"small\"\n [noHover]=\"true\"\n (callback)=\"switchTheme()\"\n [icon]=\"isLightMode() ? 'ri-contrast-2-line' : 'ri-contrast-2-fill'\"\n>\n</dsv-button>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'dsv-theme',\n templateUrl: './theme.component.html',\n styleUrls: ['./theme.component.scss'],\n})\nexport class DsvThemeComponent {}\n","<ng-content></ng-content>\n<div id=\"collapse\"></div>\n","import { inject, Injectable, signal } from '@angular/core';\nimport { PlatformService } from '@ng-vagabond-lab/ng-dsv/platform';\nimport { StorageService } from '@ng-vagabond-lab/ng-dsv/storage';\n\nexport type ThemeMode = 'dark' | 'light';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ThemeService {\n readonly platformService = inject(PlatformService);\n readonly storageService = inject(StorageService);\n\n readonly themeMode = signal<ThemeMode>((this.storageService.getItem('theme') as ThemeMode) ?? 'light');\n\n constructor() {\n if (this.platformService.isPlatformBrowser()) {\n let html = document.getElementsByTagName('body')[0];\n html.classList.add(this.themeMode());\n }\n }\n\n switchTheme(): void {\n if (this.platformService.isPlatformBrowser()) {\n let html = document.getElementsByTagName('body')[0];\n html.classList.remove(this.themeMode());\n\n let newMode: ThemeMode = this.themeMode() === 'dark' ? 'light' : 'dark';\n this.themeMode.set(newMode);\n this.storageService.setItem('theme', newMode);\n html.classList.add(newMode);\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -4,8 +4,9 @@ import { form, required, validate } from '@angular/forms/signals';
4
4
  import { RouterLink } from '@angular/router';
5
5
  import { DsvButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/button';
6
6
  import { DsvCardComponent, DsvCardHeaderComponent } from '@ng-vagabond-lab/ng-dsv/ds/card';
7
+ import { FileUploadContainer } from '@ng-vagabond-lab/ng-dsv/ds/file';
7
8
  import { requiredTrim, DsvFormSignalComponent, DsvFormSignalInputComponent, DsvFormSignalCheckboxComponent } from '@ng-vagabond-lab/ng-dsv/ds/form/signal';
8
- import { NewsContainer } from './ng-vagabond-lab-ng-dsv-module-news-news.container-D6fR0O72.mjs';
9
+ import { NewsContainer } from './ng-vagabond-lab-ng-dsv-module-news-news.container-Dv48TkBy.mjs';
9
10
 
10
11
  class NewsFormContainer extends NewsContainer {
11
12
  newsForm = form(signal(this.news()), (path) => {
@@ -16,25 +17,6 @@ class NewsFormContainer extends NewsContainer {
16
17
  validate(path.resume, requiredTrim);
17
18
  validate(path.description, requiredTrim);
18
19
  });
19
- file = signal(null, /* @ts-ignore */
20
- ...(ngDevMode ? [{ debugName: "file" }] : /* istanbul ignore next */ []));
21
- addFiles(files) {
22
- Array.from(files ?? []).forEach((file) => {
23
- const reader = new FileReader();
24
- reader.onload = () => {
25
- this.file.set(file);
26
- const formData = new FormData();
27
- formData.append('fileForm', this.file());
28
- return this.authService.apiService.post(`/file/upload?directory=news`, formData, (res) => {
29
- this.newsForm().value.update((news) => ({
30
- ...news,
31
- image: res['path'],
32
- }));
33
- });
34
- };
35
- reader.readAsDataURL(file);
36
- });
37
- }
38
20
  constructor() {
39
21
  super();
40
22
  effect(() => {
@@ -62,7 +44,7 @@ class NewsFormContainer extends NewsContainer {
62
44
  }
63
45
  }
64
46
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: NewsFormContainer, deps: [], target: i0.ɵɵFactoryTarget.Component });
65
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.4", type: NewsFormContainer, isStandalone: true, selector: "app-news-form", usesInheritance: true, ngImport: i0, template: "<dsv-card>\n <dsv-card-header>\n <dsv-button\n class=\"round\"\n icon=\"ri-arrow-left-s-line\"\n color=\"inherit\"\n [routerLink]=\"news()?.id ? '/news/' + news()?.id : '/news'\"\n />\n <h1>{{ news()?.id ? 'Modifier' : 'Cr\u00E9er' }} une news</h1>\n </dsv-card-header>\n <dsv-form-signal [form]=\"newsForm\" (callback)=\"doSubmit()\" (callbackBack)=\"routerService.goBack()\">\n <dsv-form-signal-input [form]=\"newsForm\" fieldName=\"title\" />\n <input type=\"file\" (change)=\"addFiles($event.target.files)\" #fileInput />\n <dsv-form-signal-input [form]=\"newsForm\" fieldName=\"image\" />\n <dsv-form-signal-input [form]=\"newsForm\" fieldName=\"tags\" />\n <dsv-form-signal-input [form]=\"newsForm\" fieldName=\"resume\" type=\"textarea\" class=\"resume\" />\n <dsv-form-signal-input [form]=\"newsForm\" fieldName=\"description\" type=\"textarea\" />\n <dsv-form-signal-checkbox [form]=\"newsForm\" fieldName=\"active\" />\n </dsv-form-signal>\n</dsv-card>\n", styles: [":host dsv-card-header{display:flex;flex-direction:row;align-items:center;gap:5px}:host dsv-card-header dsv-button.round{--button-border-radius: 50%}:host dsv-form-signal-input{--input-height: 300px;--input-max-height: 300px}:host dsv-form-signal-input.resume{--input-height: 160px}\n"], dependencies: [{ kind: "component", type: DsvCardComponent, selector: "dsv-card", inputs: ["border"] }, { kind: "component", type: DsvFormSignalComponent, selector: "dsv-form-signal", inputs: ["form", "urlBack", "textValid", "formValid"], outputs: ["callbackBack", "callback"] }, { kind: "component", type: DsvFormSignalInputComponent, selector: "dsv-form-signal-input", inputs: ["type", "icon", "withError"] }, { kind: "component", type: DsvCardHeaderComponent, selector: "dsv-card-header" }, { 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", "browserUrl", "routerLink"] }, { kind: "component", type: DsvFormSignalCheckboxComponent, selector: "dsv-form-signal-checkbox" }] });
47
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.4", type: NewsFormContainer, isStandalone: true, selector: "app-news-form", usesInheritance: true, ngImport: i0, template: "<dsv-card>\n <dsv-card-header>\n <dsv-button\n class=\"round\"\n icon=\"ri-arrow-left-s-line\"\n color=\"inherit\"\n [routerLink]=\"news()?.id ? '/news/' + news()?.id : '/news'\"\n />\n <h1>{{ news()?.id ? 'Modifier' : 'Cr\u00E9er' }} une news</h1>\n </dsv-card-header>\n <dsv-form-signal [form]=\"newsForm\" (callback)=\"doSubmit()\" (callbackBack)=\"routerService.goBack()\">\n <dsv-form-signal-input [form]=\"newsForm\" fieldName=\"title\" />\n <dsv-file-upload-container\n [image]=\"newsForm().value().image\"\n directory=\"news\"\n (callback)=\"newsForm().value.update((news) => ({ ...news, image: $event }))\"\n />\n <dsv-form-signal-input [form]=\"newsForm\" fieldName=\"tags\" />\n <dsv-form-signal-input [form]=\"newsForm\" fieldName=\"resume\" type=\"textarea\" class=\"resume\" />\n <dsv-form-signal-input [form]=\"newsForm\" fieldName=\"description\" type=\"textarea\" />\n <dsv-form-signal-checkbox [form]=\"newsForm\" fieldName=\"active\" />\n </dsv-form-signal>\n</dsv-card>\n", styles: [":host dsv-card-header{display:flex;flex-direction:row;align-items:center;gap:5px}:host dsv-card-header dsv-button.round{--button-border-radius: 50%}:host dsv-form-signal-input{--input-height: 300px;--input-max-height: 300px}:host dsv-form-signal-input.resume{--input-height: 160px}\n"], dependencies: [{ kind: "component", type: DsvCardComponent, selector: "dsv-card", inputs: ["border"] }, { kind: "component", type: DsvFormSignalComponent, selector: "dsv-form-signal", inputs: ["form", "urlBack", "textValid", "formValid"], outputs: ["callbackBack", "callback"] }, { kind: "component", type: DsvFormSignalInputComponent, selector: "dsv-form-signal-input", inputs: ["type", "icon", "withError"] }, { kind: "component", type: DsvCardHeaderComponent, selector: "dsv-card-header" }, { 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", "browserUrl", "routerLink"] }, { kind: "component", type: DsvFormSignalCheckboxComponent, selector: "dsv-form-signal-checkbox" }, { kind: "component", type: FileUploadContainer, selector: "dsv-file-upload-container", inputs: ["directory", "image"], outputs: ["callback"] }] });
66
48
  }
67
49
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: NewsFormContainer, decorators: [{
68
50
  type: Component,
@@ -74,8 +56,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
74
56
  DsvButtonComponent,
75
57
  RouterLink,
76
58
  DsvFormSignalCheckboxComponent,
77
- ], template: "<dsv-card>\n <dsv-card-header>\n <dsv-button\n class=\"round\"\n icon=\"ri-arrow-left-s-line\"\n color=\"inherit\"\n [routerLink]=\"news()?.id ? '/news/' + news()?.id : '/news'\"\n />\n <h1>{{ news()?.id ? 'Modifier' : 'Cr\u00E9er' }} une news</h1>\n </dsv-card-header>\n <dsv-form-signal [form]=\"newsForm\" (callback)=\"doSubmit()\" (callbackBack)=\"routerService.goBack()\">\n <dsv-form-signal-input [form]=\"newsForm\" fieldName=\"title\" />\n <input type=\"file\" (change)=\"addFiles($event.target.files)\" #fileInput />\n <dsv-form-signal-input [form]=\"newsForm\" fieldName=\"image\" />\n <dsv-form-signal-input [form]=\"newsForm\" fieldName=\"tags\" />\n <dsv-form-signal-input [form]=\"newsForm\" fieldName=\"resume\" type=\"textarea\" class=\"resume\" />\n <dsv-form-signal-input [form]=\"newsForm\" fieldName=\"description\" type=\"textarea\" />\n <dsv-form-signal-checkbox [form]=\"newsForm\" fieldName=\"active\" />\n </dsv-form-signal>\n</dsv-card>\n", styles: [":host dsv-card-header{display:flex;flex-direction:row;align-items:center;gap:5px}:host dsv-card-header dsv-button.round{--button-border-radius: 50%}:host dsv-form-signal-input{--input-height: 300px;--input-max-height: 300px}:host dsv-form-signal-input.resume{--input-height: 160px}\n"] }]
59
+ FileUploadContainer,
60
+ ], template: "<dsv-card>\n <dsv-card-header>\n <dsv-button\n class=\"round\"\n icon=\"ri-arrow-left-s-line\"\n color=\"inherit\"\n [routerLink]=\"news()?.id ? '/news/' + news()?.id : '/news'\"\n />\n <h1>{{ news()?.id ? 'Modifier' : 'Cr\u00E9er' }} une news</h1>\n </dsv-card-header>\n <dsv-form-signal [form]=\"newsForm\" (callback)=\"doSubmit()\" (callbackBack)=\"routerService.goBack()\">\n <dsv-form-signal-input [form]=\"newsForm\" fieldName=\"title\" />\n <dsv-file-upload-container\n [image]=\"newsForm().value().image\"\n directory=\"news\"\n (callback)=\"newsForm().value.update((news) => ({ ...news, image: $event }))\"\n />\n <dsv-form-signal-input [form]=\"newsForm\" fieldName=\"tags\" />\n <dsv-form-signal-input [form]=\"newsForm\" fieldName=\"resume\" type=\"textarea\" class=\"resume\" />\n <dsv-form-signal-input [form]=\"newsForm\" fieldName=\"description\" type=\"textarea\" />\n <dsv-form-signal-checkbox [form]=\"newsForm\" fieldName=\"active\" />\n </dsv-form-signal>\n</dsv-card>\n", styles: [":host dsv-card-header{display:flex;flex-direction:row;align-items:center;gap:5px}:host dsv-card-header dsv-button.round{--button-border-radius: 50%}:host dsv-form-signal-input{--input-height: 300px;--input-max-height: 300px}:host dsv-form-signal-input.resume{--input-height: 160px}\n"] }]
78
61
  }], ctorParameters: () => [] });
79
62
 
80
63
  export { NewsFormContainer };
81
- //# sourceMappingURL=ng-vagabond-lab-ng-dsv-module-news-news-form.container-D6wXpIFA.mjs.map
64
+ //# sourceMappingURL=ng-vagabond-lab-ng-dsv-module-news-news-form.container-B89sqBxq.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ng-vagabond-lab-ng-dsv-module-news-news-form.container-B89sqBxq.mjs","sources":["../../../projects/ng-dsv/module/news/container/form/news-form.container.ts","../../../projects/ng-dsv/module/news/container/form/news-form.container.html"],"sourcesContent":["import { Component, effect, signal } from '@angular/core';\nimport { form, required, validate } from '@angular/forms/signals';\nimport { RouterLink } from '@angular/router';\nimport { DsvButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/button';\nimport { DsvCardComponent, DsvCardHeaderComponent } from '@ng-vagabond-lab/ng-dsv/ds/card';\nimport { FileUploadContainer } from '@ng-vagabond-lab/ng-dsv/ds/file';\nimport {\n DsvFormSignalCheckboxComponent,\n DsvFormSignalComponent,\n DsvFormSignalInputComponent,\n requiredTrim,\n} from '@ng-vagabond-lab/ng-dsv/ds/form/signal';\nimport { NewsDto } from '../../dto/news.dto';\nimport { NewsContainer } from '../news.container';\n\n@Component({\n selector: 'app-news-form',\n imports: [\n DsvCardComponent,\n DsvFormSignalComponent,\n DsvFormSignalInputComponent,\n DsvCardHeaderComponent,\n DsvButtonComponent,\n RouterLink,\n DsvFormSignalCheckboxComponent,\n FileUploadContainer,\n ],\n templateUrl: './news-form.container.html',\n styleUrl: './news-form.container.scss',\n})\nexport class NewsFormContainer extends NewsContainer {\n readonly newsForm = form(signal<NewsDto>(this.news()!), (path) => {\n required(path.title);\n required(path.resume);\n required(path.description);\n validate(path.title, requiredTrim);\n validate(path.resume, requiredTrim);\n validate(path.description, requiredTrim);\n });\n\n constructor() {\n super();\n effect(() => {\n if (this.news()) {\n this.newsForm().reset(this.news());\n } else {\n this.newsForm().reset({\n title: '',\n image: '',\n tags: '',\n resume: '',\n description: '',\n user: this.authService.userConnected()!,\n } as NewsDto);\n }\n });\n }\n\n doSubmit() {\n if (this.newsForm().valid()) {\n this.newsService.createOrUpdate(this.newsForm().value(), (data: NewsDto) => {\n this.routerService.router.navigate(['news', data.id]);\n document.getElementById('main-scroll')?.scrollTo(0, 0);\n });\n }\n }\n}\n","<dsv-card>\n <dsv-card-header>\n <dsv-button\n class=\"round\"\n icon=\"ri-arrow-left-s-line\"\n color=\"inherit\"\n [routerLink]=\"news()?.id ? '/news/' + news()?.id : '/news'\"\n />\n <h1>{{ news()?.id ? 'Modifier' : 'Créer' }} une news</h1>\n </dsv-card-header>\n <dsv-form-signal [form]=\"newsForm\" (callback)=\"doSubmit()\" (callbackBack)=\"routerService.goBack()\">\n <dsv-form-signal-input [form]=\"newsForm\" fieldName=\"title\" />\n <dsv-file-upload-container\n [image]=\"newsForm().value().image\"\n directory=\"news\"\n (callback)=\"newsForm().value.update((news) => ({ ...news, image: $event }))\"\n />\n <dsv-form-signal-input [form]=\"newsForm\" fieldName=\"tags\" />\n <dsv-form-signal-input [form]=\"newsForm\" fieldName=\"resume\" type=\"textarea\" class=\"resume\" />\n <dsv-form-signal-input [form]=\"newsForm\" fieldName=\"description\" type=\"textarea\" />\n <dsv-form-signal-checkbox [form]=\"newsForm\" fieldName=\"active\" />\n </dsv-form-signal>\n</dsv-card>\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,105 @@
1
+ import * as i0 from '@angular/core';
2
+ import { signal, effect, Component } from '@angular/core';
3
+ import { form, required, validate } from '@angular/forms/signals';
4
+ import { RouterLink } from '@angular/router';
5
+ import { DsvButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/button';
6
+ import { DsvCardComponent, DsvCardHeaderComponent } from '@ng-vagabond-lab/ng-dsv/ds/card';
7
+ import { FileUploadContainer } from '@ng-vagabond-lab/ng-dsv/ds/file';
8
+ import { requiredTrim, DsvFormSignalComponent, DsvFormSignalInputComponent, DsvFormSignalCheckboxComponent } from '@ng-vagabond-lab/ng-dsv/ds/form/signal';
9
+ import { NewsContainer } from './ng-vagabond-lab-ng-dsv-module-news-news.container-BBDrX_yB.mjs';
10
+
11
+ class NewsFormContainer extends NewsContainer {
12
+ newsForm = form(signal(this.news()), (path) => {
13
+ required(path.title);
14
+ required(path.resume);
15
+ required(path.description);
16
+ validate(path.title, requiredTrim);
17
+ validate(path.resume, requiredTrim);
18
+ validate(path.description, requiredTrim);
19
+ });
20
+ constructor() {
21
+ super();
22
+ effect(() => {
23
+ if (this.news()) {
24
+ this.newsForm().reset(this.news());
25
+ }
26
+ else {
27
+ this.newsForm().reset({
28
+ title: '',
29
+ image: '',
30
+ tags: '',
31
+ resume: '',
32
+ description: '',
33
+ user: this.authService.userConnected(),
34
+ });
35
+ }
36
+ });
37
+ }
38
+ doSubmit() {
39
+ if (this.newsForm().valid()) {
40
+ this.newsService.createOrUpdate(this.newsForm().value(), (data) => {
41
+ this.routerService.router.navigate(['news', data.id]);
42
+ document.getElementById('main-scroll')?.scrollTo(0, 0);
43
+ });
44
+ }
45
+ }
46
+ static ɵfac = function NewsFormContainer_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || NewsFormContainer)(); };
47
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: NewsFormContainer, selectors: [["app-news-form"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 12, vars: 9, consts: [["icon", "ri-arrow-left-s-line", "color", "inherit", 1, "round", 3, "routerLink"], [3, "callback", "callbackBack", "form"], ["fieldName", "title", 3, "form"], ["directory", "news", 3, "callback", "image"], ["fieldName", "tags", 3, "form"], ["fieldName", "resume", "type", "textarea", 1, "resume", 3, "form"], ["fieldName", "description", "type", "textarea", 3, "form"], ["fieldName", "active", 3, "form"]], template: function NewsFormContainer_Template(rf, ctx) { if (rf & 1) {
48
+ i0.ɵɵelementStart(0, "dsv-card")(1, "dsv-card-header");
49
+ i0.ɵɵelement(2, "dsv-button", 0);
50
+ i0.ɵɵelementStart(3, "h1");
51
+ i0.ɵɵtext(4);
52
+ i0.ɵɵelementEnd()();
53
+ i0.ɵɵelementStart(5, "dsv-form-signal", 1);
54
+ i0.ɵɵlistener("callback", function NewsFormContainer_Template_dsv_form_signal_callback_5_listener() { return ctx.doSubmit(); })("callbackBack", function NewsFormContainer_Template_dsv_form_signal_callbackBack_5_listener() { return ctx.routerService.goBack(); });
55
+ i0.ɵɵelement(6, "dsv-form-signal-input", 2);
56
+ i0.ɵɵelementStart(7, "dsv-file-upload-container", 3);
57
+ i0.ɵɵlistener("callback", function NewsFormContainer_Template_dsv_file_upload_container_callback_7_listener($event) { return ctx.newsForm().value.update(news => ({ ...news, image: $event })); });
58
+ i0.ɵɵelementEnd();
59
+ i0.ɵɵelement(8, "dsv-form-signal-input", 4)(9, "dsv-form-signal-input", 5)(10, "dsv-form-signal-input", 6)(11, "dsv-form-signal-checkbox", 7);
60
+ i0.ɵɵelementEnd()();
61
+ } if (rf & 2) {
62
+ i0.ɵɵadvance(2);
63
+ i0.ɵɵproperty("routerLink", ctx.news()?.id ? "/news/" + ctx.news()?.id : "/news");
64
+ i0.ɵɵadvance(2);
65
+ i0.ɵɵtextInterpolate1("", ctx.news()?.id ? "Modifier" : "Cr\u00E9er", " une news");
66
+ i0.ɵɵadvance();
67
+ i0.ɵɵproperty("form", ctx.newsForm);
68
+ i0.ɵɵadvance();
69
+ i0.ɵɵproperty("form", ctx.newsForm);
70
+ i0.ɵɵadvance();
71
+ i0.ɵɵproperty("image", ctx.newsForm().value().image);
72
+ i0.ɵɵadvance();
73
+ i0.ɵɵproperty("form", ctx.newsForm);
74
+ i0.ɵɵadvance();
75
+ i0.ɵɵproperty("form", ctx.newsForm);
76
+ i0.ɵɵadvance();
77
+ i0.ɵɵproperty("form", ctx.newsForm);
78
+ i0.ɵɵadvance();
79
+ i0.ɵɵproperty("form", ctx.newsForm);
80
+ } }, dependencies: [DsvCardComponent,
81
+ DsvFormSignalComponent,
82
+ DsvFormSignalInputComponent,
83
+ DsvCardHeaderComponent,
84
+ DsvButtonComponent,
85
+ RouterLink,
86
+ DsvFormSignalCheckboxComponent,
87
+ FileUploadContainer], styles: ["[_nghost-%COMP%] dsv-card-header[_ngcontent-%COMP%]{display:flex;flex-direction:row;align-items:center;gap:5px}[_nghost-%COMP%] dsv-card-header[_ngcontent-%COMP%] dsv-button.round[_ngcontent-%COMP%]{--%NS%button-border-radius: 50%}[_nghost-%COMP%] dsv-form-signal-input[_ngcontent-%COMP%]{--%NS%input-height: 300px;--%NS%input-max-height: 300px}[_nghost-%COMP%] dsv-form-signal-input.resume[_ngcontent-%COMP%]{--%NS%input-height: 160px}"] });
88
+ }
89
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(NewsFormContainer, [{
90
+ type: Component,
91
+ args: [{ selector: 'app-news-form', imports: [
92
+ DsvCardComponent,
93
+ DsvFormSignalComponent,
94
+ DsvFormSignalInputComponent,
95
+ DsvCardHeaderComponent,
96
+ DsvButtonComponent,
97
+ RouterLink,
98
+ DsvFormSignalCheckboxComponent,
99
+ FileUploadContainer,
100
+ ], template: "<dsv-card>\n <dsv-card-header>\n <dsv-button\n class=\"round\"\n icon=\"ri-arrow-left-s-line\"\n color=\"inherit\"\n [routerLink]=\"news()?.id ? '/news/' + news()?.id : '/news'\"\n />\n <h1>{{ news()?.id ? 'Modifier' : 'Cr\u00E9er' }} une news</h1>\n </dsv-card-header>\n <dsv-form-signal [form]=\"newsForm\" (callback)=\"doSubmit()\" (callbackBack)=\"routerService.goBack()\">\n <dsv-form-signal-input [form]=\"newsForm\" fieldName=\"title\" />\n <dsv-file-upload-container\n [image]=\"newsForm().value().image\"\n directory=\"news\"\n (callback)=\"newsForm().value.update((news) => ({ ...news, image: $event }))\"\n />\n <dsv-form-signal-input [form]=\"newsForm\" fieldName=\"tags\" />\n <dsv-form-signal-input [form]=\"newsForm\" fieldName=\"resume\" type=\"textarea\" class=\"resume\" />\n <dsv-form-signal-input [form]=\"newsForm\" fieldName=\"description\" type=\"textarea\" />\n <dsv-form-signal-checkbox [form]=\"newsForm\" fieldName=\"active\" />\n </dsv-form-signal>\n</dsv-card>\n", styles: [":host dsv-card-header{display:flex;flex-direction:row;align-items:center;gap:5px}:host dsv-card-header dsv-button.round{--button-border-radius: 50%}:host dsv-form-signal-input{--input-height: 300px;--input-max-height: 300px}:host dsv-form-signal-input.resume{--input-height: 160px}\n"] }]
101
+ }], () => [], null); })();
102
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(NewsFormContainer, { className: "NewsFormContainer", filePath: "container/form/news-form.container.ts", lineNumber: 31 }); })();
103
+
104
+ export { NewsFormContainer };
105
+ //# sourceMappingURL=ng-vagabond-lab-ng-dsv-module-news-news-form.container-DYj7fb2V.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ng-vagabond-lab-ng-dsv-module-news-news-form.container-DYj7fb2V.mjs","sources":["../../../projects/ng-dsv/module/news/container/form/news-form.container.ts","../../../projects/ng-dsv/module/news/container/form/news-form.container.html"],"sourcesContent":["import { Component, effect, signal } from '@angular/core';\nimport { form, required, validate } from '@angular/forms/signals';\nimport { RouterLink } from '@angular/router';\nimport { DsvButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/button';\nimport { DsvCardComponent, DsvCardHeaderComponent } from '@ng-vagabond-lab/ng-dsv/ds/card';\nimport { FileUploadContainer } from '@ng-vagabond-lab/ng-dsv/ds/file';\nimport {\n DsvFormSignalCheckboxComponent,\n DsvFormSignalComponent,\n DsvFormSignalInputComponent,\n requiredTrim,\n} from '@ng-vagabond-lab/ng-dsv/ds/form/signal';\nimport { NewsDto } from '../../dto/news.dto';\nimport { NewsContainer } from '../news.container';\n\n@Component({\n selector: 'app-news-form',\n imports: [\n DsvCardComponent,\n DsvFormSignalComponent,\n DsvFormSignalInputComponent,\n DsvCardHeaderComponent,\n DsvButtonComponent,\n RouterLink,\n DsvFormSignalCheckboxComponent,\n FileUploadContainer,\n ],\n templateUrl: './news-form.container.html',\n styleUrl: './news-form.container.scss',\n})\nexport class NewsFormContainer extends NewsContainer {\n readonly newsForm = form(signal<NewsDto>(this.news()!), (path) => {\n required(path.title);\n required(path.resume);\n required(path.description);\n validate(path.title, requiredTrim);\n validate(path.resume, requiredTrim);\n validate(path.description, requiredTrim);\n });\n\n constructor() {\n super();\n effect(() => {\n if (this.news()) {\n this.newsForm().reset(this.news());\n } else {\n this.newsForm().reset({\n title: '',\n image: '',\n tags: '',\n resume: '',\n description: '',\n user: this.authService.userConnected()!,\n } as NewsDto);\n }\n });\n }\n\n doSubmit() {\n if (this.newsForm().valid()) {\n this.newsService.createOrUpdate(this.newsForm().value(), (data: NewsDto) => {\n this.routerService.router.navigate(['news', data.id]);\n document.getElementById('main-scroll')?.scrollTo(0, 0);\n });\n }\n }\n}\n","<dsv-card>\n <dsv-card-header>\n <dsv-button\n class=\"round\"\n icon=\"ri-arrow-left-s-line\"\n color=\"inherit\"\n [routerLink]=\"news()?.id ? '/news/' + news()?.id : '/news'\"\n />\n <h1>{{ news()?.id ? 'Modifier' : 'Créer' }} une news</h1>\n </dsv-card-header>\n <dsv-form-signal [form]=\"newsForm\" (callback)=\"doSubmit()\" (callbackBack)=\"routerService.goBack()\">\n <dsv-form-signal-input [form]=\"newsForm\" fieldName=\"title\" />\n <dsv-file-upload-container\n [image]=\"newsForm().value().image\"\n directory=\"news\"\n (callback)=\"newsForm().value.update((news) => ({ ...news, image: $event }))\"\n />\n <dsv-form-signal-input [form]=\"newsForm\" fieldName=\"tags\" />\n <dsv-form-signal-input [form]=\"newsForm\" fieldName=\"resume\" type=\"textarea\" class=\"resume\" />\n <dsv-form-signal-input [form]=\"newsForm\" fieldName=\"description\" type=\"textarea\" />\n <dsv-form-signal-checkbox [form]=\"newsForm\" fieldName=\"active\" />\n </dsv-form-signal>\n</dsv-card>\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,176 @@
1
+ import * as i0 from '@angular/core';
2
+ import { input, Component, inject, computed } from '@angular/core';
3
+ import { RouterLink } from '@angular/router';
4
+ import { BaseSearchContainer } from '@ng-vagabond-lab/ng-dsv/base';
5
+ import { DsvButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/button';
6
+ import { DsvCardComponent, DsvCardHeaderComponent } from '@ng-vagabond-lab/ng-dsv/ds/card';
7
+ import { DsvFormReactiveSearchbarComponent } from '@ng-vagabond-lab/ng-dsv/ds/form/reactive';
8
+ import { DsvScrollInfiniteContainer } from '@ng-vagabond-lab/ng-dsv/ds/scroll';
9
+ import { AuthService } from '@ng-vagabond-lab/ng-dsv/module/auth';
10
+ import { DateFormatPipe } from '@ng-vagabond-lab/ng-dsv/date';
11
+ import { DsvFileShowComponent } from '@ng-vagabond-lab/ng-dsv/ds/file';
12
+ import { DsvMarkdownContainer } from '@ng-vagabond-lab/ng-dsv/ds/markdown';
13
+ import { RouterInternalPipe } from '@ng-vagabond-lab/ng-dsv/router';
14
+ import { N as NewsListService } from './ng-vagabond-lab-ng-dsv-module-news-news-list.service-C4rdx_5c.mjs';
15
+
16
+ function NewsCardResumeComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
17
+ i0.ɵɵelement(0, "dsv-file-show", 1);
18
+ } if (rf & 2) {
19
+ const ctx_r0 = i0.ɵɵnextContext();
20
+ i0.ɵɵproperty("src", ctx_r0.news()?.image ?? "");
21
+ } }
22
+ class NewsCardResumeComponent {
23
+ news = input(/* @ts-ignore */
24
+ ...(ngDevMode ? [undefined, { debugName: "news" }] : /* istanbul ignore next */ []));
25
+ static ɵfac = function NewsCardResumeComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || NewsCardResumeComponent)(); };
26
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: NewsCardResumeComponent, selectors: [["app-news-card-resume"]], inputs: { news: [1, "news"] }, decls: 10, vars: 11, consts: [[3, "routerLink"], ["url", "/api/", 3, "src"], [1, "subtitle"], [3, "data"], ["dsvLink", "", 3, "href"]], template: function NewsCardResumeComponent_Template(rf, ctx) { if (rf & 1) {
27
+ i0.ɵɵelementStart(0, "dsv-card", 0);
28
+ i0.ɵɵconditionalCreate(1, NewsCardResumeComponent_Conditional_1_Template, 1, 1, "dsv-file-show", 1);
29
+ i0.ɵɵelementStart(2, "h2");
30
+ i0.ɵɵtext(3);
31
+ i0.ɵɵelementEnd();
32
+ i0.ɵɵelementStart(4, "span", 2);
33
+ i0.ɵɵtext(5);
34
+ i0.ɵɵpipe(6, "formatDate");
35
+ i0.ɵɵelementEnd();
36
+ i0.ɵɵelement(7, "dsv-markdown-container", 3);
37
+ i0.ɵɵelementStart(8, "a", 4);
38
+ i0.ɵɵtext(9, "Lire la suite...");
39
+ i0.ɵɵelementEnd()();
40
+ } if (rf & 2) {
41
+ i0.ɵɵproperty("routerLink", "/news/" + ctx.news()?.id);
42
+ i0.ɵɵadvance();
43
+ i0.ɵɵconditional(ctx.news()?.image ? 1 : -1);
44
+ i0.ɵɵadvance();
45
+ i0.ɵɵclassProp("error", !ctx.news()?.active);
46
+ i0.ɵɵadvance();
47
+ i0.ɵɵtextInterpolate(ctx.news()?.title);
48
+ i0.ɵɵadvance(2);
49
+ i0.ɵɵtextInterpolate1("Le ", i0.ɵɵpipeBind2(6, 8, ctx.news()?.creationDate, true));
50
+ i0.ɵɵadvance(2);
51
+ i0.ɵɵproperty("data", ctx.news()?.resume);
52
+ i0.ɵɵadvance();
53
+ i0.ɵɵproperty("href", "/news/" + ctx.news()?.id, i0.ɵɵsanitizeUrl);
54
+ } }, dependencies: [DsvCardComponent,
55
+ RouterInternalPipe,
56
+ RouterLink,
57
+ DsvFileShowComponent,
58
+ DsvMarkdownContainer,
59
+ DateFormatPipe], styles: ["[_nghost-%COMP%]{display:flex;width:100%;min-height:300px;margin-right:5px;overflow:hidden}[_nghost-%COMP%] dsv-card[_ngcontent-%COMP%]{position:relative}[_nghost-%COMP%] dsv-card[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]{margin:0}[_nghost-%COMP%] dsv-card[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0 0 5px}[_nghost-%COMP%] dsv-card[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{width:calc(100% + 20px)}[_nghost-%COMP%] dsv-card[_ngcontent-%COMP%] .news-image[_ngcontent-%COMP%]{margin:0 0 5px;width:100%}[_nghost-%COMP%] dsv-card[_ngcontent-%COMP%] dsv-card-header[_ngcontent-%COMP%]{display:flex;flex-direction:row;align-items:center;gap:5px;margin:0 0 10px}[_nghost-%COMP%] dsv-card[_ngcontent-%COMP%] dsv-card-header[_ngcontent-%COMP%] dsv-button.round[_ngcontent-%COMP%]{--%NS%button-border-radius: 50%}[_nghost-%COMP%] dsv-card[_ngcontent-%COMP%] dsv-card-header[_ngcontent-%COMP%] h1[_ngcontent-%COMP%], [_nghost-%COMP%] dsv-card[_ngcontent-%COMP%] dsv-card-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{flex:1}[_nghost-%COMP%] dsv-markdown-container[_ngcontent-%COMP%]{margin:20px 0}", "[_nghost-%COMP%]{margin:0;width:100%;min-height:200px!important}[_nghost-%COMP%], [_nghost-%COMP%] a[_ngcontent-%COMP%]{display:flex;width:100%}"] });
60
+ }
61
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(NewsCardResumeComponent, [{
62
+ type: Component,
63
+ args: [{ selector: 'app-news-card-resume', imports: [
64
+ DsvCardComponent,
65
+ DateFormatPipe,
66
+ RouterInternalPipe,
67
+ RouterLink,
68
+ DsvFileShowComponent,
69
+ DsvMarkdownContainer,
70
+ ], template: "<dsv-card [routerLink]=\"'/news/' + news()?.id\">\n @if (news()?.image) {\n <dsv-file-show url=\"/api/\" [src]=\"news()?.image ?? ''\" />\n }\n <h2 [class.error]=\"!news()?.active\">{{ news()?.title }}</h2>\n <span class=\"subtitle\">Le {{ news()?.creationDate! | formatDate: true }}</span>\n <dsv-markdown-container [data]=\"news()?.resume\" />\n <a [href]=\"'/news/' + news()?.id\" dsvLink>Lire la suite...</a>\n</dsv-card>\n", styles: [":host{display:flex;width:100%;min-height:300px;margin-right:5px;overflow:hidden}:host dsv-card{position:relative}:host dsv-card h1{margin:0}:host dsv-card h2{margin:0 0 5px}:host dsv-card img{width:calc(100% + 20px)}:host dsv-card .news-image{margin:0 0 5px;width:100%}:host dsv-card dsv-card-header{display:flex;flex-direction:row;align-items:center;gap:5px;margin:0 0 10px}:host dsv-card dsv-card-header dsv-button.round{--button-border-radius: 50%}:host dsv-card dsv-card-header h1,:host dsv-card dsv-card-header h2{flex:1}:host dsv-markdown-container{margin:20px 0}\n", ":host{margin:0;width:100%;min-height:200px!important}:host,:host a{display:flex;width:100%}\n"] }]
71
+ }], null, { news: [{ type: i0.Input, args: [{ isSignal: true, alias: "news", required: false }] }] }); })();
72
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(NewsCardResumeComponent, { className: "NewsCardResumeComponent", filePath: "component/card/resume/news-card-resume.component.ts", lineNumber: 23 }); })();
73
+
74
+ const _forTrack0 = ($index, $item) => $item.id;
75
+ function NewsListContainer_Conditional_5_Template(rf, ctx) { if (rf & 1) {
76
+ i0.ɵɵtext(0);
77
+ } if (rf & 2) {
78
+ const ctx_r0 = i0.ɵɵnextContext();
79
+ i0.ɵɵtextInterpolate1(" (", ctx_r0.newsListService.total(), ") ");
80
+ } }
81
+ function NewsListContainer_Conditional_6_Template(rf, ctx) { if (rf & 1) {
82
+ i0.ɵɵelement(0, "dsv-button", 3);
83
+ } }
84
+ function NewsListContainer_Conditional_8_Template(rf, ctx) { if (rf & 1) {
85
+ i0.ɵɵelementStart(0, "dsv-card")(1, "p");
86
+ i0.ɵɵtext(2, "Aucun r\u00E9sultat trouv\u00E9");
87
+ i0.ɵɵelementEnd()();
88
+ } }
89
+ function NewsListContainer_Conditional_9_For_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
90
+ i0.ɵɵelement(0, "dsv-button", 8);
91
+ } if (rf & 2) {
92
+ const news_r3 = i0.ɵɵnextContext().$implicit;
93
+ i0.ɵɵproperty("routerLink", "/news/update/" + news_r3?.id);
94
+ } }
95
+ function NewsListContainer_Conditional_9_For_3_Template(rf, ctx) { if (rf & 1) {
96
+ i0.ɵɵelementStart(0, "app-news-card-resume", 7);
97
+ i0.ɵɵconditionalCreate(1, NewsListContainer_Conditional_9_For_3_Conditional_1_Template, 1, 1, "dsv-button", 8);
98
+ i0.ɵɵelementEnd();
99
+ } if (rf & 2) {
100
+ const news_r3 = ctx.$implicit;
101
+ const ctx_r0 = i0.ɵɵnextContext(2);
102
+ i0.ɵɵproperty("news", news_r3);
103
+ i0.ɵɵadvance();
104
+ i0.ɵɵconditional(ctx_r0.isAdmin() ? 1 : -1);
105
+ } }
106
+ function NewsListContainer_Conditional_9_ng_template_4_Template(rf, ctx) { }
107
+ function NewsListContainer_Conditional_9_Template(rf, ctx) { if (rf & 1) {
108
+ const _r2 = i0.ɵɵgetCurrentView();
109
+ i0.ɵɵelementStart(0, "dsv-scroll-infinite", 6, 0);
110
+ i0.ɵɵlistener("callback", function NewsListContainer_Conditional_9_Template_dsv_scroll_infinite_callback_0_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.doFetch()); });
111
+ i0.ɵɵrepeaterCreate(2, NewsListContainer_Conditional_9_For_3_Template, 2, 2, "app-news-card-resume", 7, _forTrack0);
112
+ i0.ɵɵtemplate(4, NewsListContainer_Conditional_9_ng_template_4_Template, 0, 0, "ng-template", null, 1, i0.ɵɵtemplateRefExtractor);
113
+ i0.ɵɵelementEnd();
114
+ } if (rf & 2) {
115
+ const ctx_r0 = i0.ɵɵnextContext();
116
+ i0.ɵɵproperty("loading", ctx_r0.newsListService.isLoading());
117
+ i0.ɵɵadvance(2);
118
+ i0.ɵɵrepeater(ctx_r0.newsListService.news());
119
+ } }
120
+ class NewsListContainer extends BaseSearchContainer {
121
+ newsListService;
122
+ auhService = inject(AuthService);
123
+ isAdmin = computed(() => this.auhService.hasRole('ADMIN'), /* @ts-ignore */
124
+ ...(ngDevMode ? [{ debugName: "isAdmin" }] : /* istanbul ignore next */ []));
125
+ constructor(newsListService) {
126
+ super(newsListService);
127
+ this.newsListService = newsListService;
128
+ this.seoService.setMeta('Les dernières news', 'Retrouver les dernières news sur movie-keeper.fr', '/images/logo.png');
129
+ }
130
+ static ɵfac = function NewsListContainer_Factory(__ngFactoryType__) { /* @ts-ignore */
131
+ return new (__ngFactoryType__ || NewsListContainer)(i0.ɵɵdirectiveInject(NewsListService)); };
132
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: NewsListContainer, selectors: [["app-news-list"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 10, vars: 4, consts: [["scroll", ""], ["skeleton", ""], [1, "ri-file-list-3-line"], ["icon", "ri-add-line", "color", "secondary", "variant", "outlined", "routerLink", "/news/create"], [3, "callbackSearch", "search"], [1, "card-miniature", 3, "loading"], [1, "card-miniature", 3, "callback", "loading"], [3, "news"], ["icon", "ri-tools-line", 1, "update-button", 3, "routerLink"]], template: function NewsListContainer_Template(rf, ctx) { if (rf & 1) {
133
+ i0.ɵɵelementStart(0, "dsv-card")(1, "dsv-card-header")(2, "h2");
134
+ i0.ɵɵelement(3, "i", 2);
135
+ i0.ɵɵtext(4, "\u00A0\u00A0News ");
136
+ i0.ɵɵconditionalCreate(5, NewsListContainer_Conditional_5_Template, 1, 1);
137
+ i0.ɵɵelementEnd();
138
+ i0.ɵɵconditionalCreate(6, NewsListContainer_Conditional_6_Template, 1, 0, "dsv-button", 3);
139
+ i0.ɵɵelementEnd();
140
+ i0.ɵɵelementStart(7, "dsv-form-reactive-searchbar", 4);
141
+ i0.ɵɵlistener("callbackSearch", function NewsListContainer_Template_dsv_form_reactive_searchbar_callbackSearch_7_listener($event) { return ctx.doSearch($event); });
142
+ i0.ɵɵelementEnd()();
143
+ i0.ɵɵconditionalCreate(8, NewsListContainer_Conditional_8_Template, 3, 0, "dsv-card")(9, NewsListContainer_Conditional_9_Template, 6, 1, "dsv-scroll-infinite", 5);
144
+ } if (rf & 2) {
145
+ i0.ɵɵadvance(5);
146
+ i0.ɵɵconditional(ctx.newsListService.total() ? 5 : -1);
147
+ i0.ɵɵadvance();
148
+ i0.ɵɵconditional(ctx.isAdmin() ? 6 : -1);
149
+ i0.ɵɵadvance();
150
+ i0.ɵɵproperty("search", ctx.newsListService.search());
151
+ i0.ɵɵadvance();
152
+ i0.ɵɵconditional(ctx.newsListService.news().length === 0 && (!ctx.newsListService.isLoading() || ctx.newsListService.stopFetch()) ? 8 : 9);
153
+ } }, dependencies: [DsvCardComponent,
154
+ DsvFormReactiveSearchbarComponent,
155
+ DsvScrollInfiniteContainer,
156
+ NewsCardResumeComponent,
157
+ DsvButtonComponent,
158
+ DsvCardHeaderComponent,
159
+ RouterLink], styles: ["[_nghost-%COMP%]{display:flex;flex-direction:column;overflow:hidden}[_nghost-%COMP%] h2[_ngcontent-%COMP%]{text-transform:capitalize}[_nghost-%COMP%] dsv-card[_ngcontent-%COMP%]{margin:5px;width:calc(100% - 10px);gap:5px}[_nghost-%COMP%] dsv-card[_ngcontent-%COMP%] dsv-card-header[_ngcontent-%COMP%]{display:flex;flex-direction:row;align-items:center;margin:0 0 5px}[_nghost-%COMP%] dsv-card[_ngcontent-%COMP%] dsv-card-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;flex:1}[_nghost-%COMP%] dsv-card[_ngcontent-%COMP%] dsv-form-reactive-searchbar[_ngcontent-%COMP%]{margin:0}[_nghost-%COMP%] dsv-scroll-infinite[_ngcontent-%COMP%] app-news-card-resume[_ngcontent-%COMP%]{width:calc(50% - 10px)}@media screen and (max-width:600px){[_nghost-%COMP%] dsv-scroll-infinite[_ngcontent-%COMP%] app-news-card-resume[_ngcontent-%COMP%]{width:100%}}"] });
160
+ }
161
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(NewsListContainer, [{
162
+ type: Component,
163
+ args: [{ selector: 'app-news-list', imports: [
164
+ DsvCardComponent,
165
+ DsvFormReactiveSearchbarComponent,
166
+ DsvScrollInfiniteContainer,
167
+ NewsCardResumeComponent,
168
+ DsvButtonComponent,
169
+ DsvCardHeaderComponent,
170
+ RouterLink,
171
+ ], template: "<dsv-card>\n <dsv-card-header>\n <h2>\n <i class=\"ri-file-list-3-line\"></i>&nbsp;&nbsp;News\n @if (newsListService.total()) {\n ({{ newsListService.total() }})\n }\n </h2>\n @if (isAdmin()) {\n <dsv-button icon=\"ri-add-line\" color=\"secondary\" variant=\"outlined\" routerLink=\"/news/create\" />\n }\n </dsv-card-header>\n <dsv-form-reactive-searchbar [search]=\"newsListService.search()\" (callbackSearch)=\"doSearch($event)\" />\n</dsv-card>\n\n@if (newsListService.news().length === 0 && (!newsListService.isLoading() || newsListService.stopFetch())) {\n <dsv-card>\n <p>Aucun r\u00E9sultat trouv\u00E9</p>\n </dsv-card>\n} @else {\n <dsv-scroll-infinite\n #scroll\n class=\"card-miniature\"\n [loading]=\"newsListService.isLoading()\"\n (callback)=\"doFetch()\"\n >\n @for (news of newsListService.news(); track news.id) {\n <app-news-card-resume [news]=\"news\">\n @if (isAdmin()) {\n <dsv-button\n class=\"update-button\"\n icon=\"ri-tools-line\"\n [routerLink]=\"'/news/update/' + news?.id\"\n />\n }\n </app-news-card-resume>\n }\n <ng-template #skeleton> </ng-template>\n </dsv-scroll-infinite>\n}\n", styles: [":host{display:flex;flex-direction:column;overflow:hidden}:host h2{text-transform:capitalize}:host dsv-card{margin:5px;width:calc(100% - 10px);gap:5px}:host dsv-card dsv-card-header{display:flex;flex-direction:row;align-items:center;margin:0 0 5px}:host dsv-card dsv-card-header h2{margin:0;flex:1}:host dsv-card dsv-form-reactive-searchbar{margin:0}:host dsv-scroll-infinite app-news-card-resume{width:calc(50% - 10px)}@media screen and (max-width:600px){:host dsv-scroll-infinite app-news-card-resume{width:100%}}\n"] }]
172
+ }], () => [{ type: NewsListService }], null); })();
173
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(NewsListContainer, { className: "NewsListContainer", filePath: "container/list/news-list.container.ts", lineNumber: 27 }); })();
174
+
175
+ export { NewsListContainer };
176
+ //# sourceMappingURL=ng-vagabond-lab-ng-dsv-module-news-news-list.container-BOocOeoi.mjs.map