chrv-components 1.8.17 → 1.8.18

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.
Binary file
@@ -23,4 +23,4 @@ export const provideXsrfHttpClient = (params) => {
23
23
  export const XSRFHEADERNAME = new InjectionToken("xsrfHeader");
24
24
  export const XSRFCOOKIENAME = new InjectionToken("xsrfCookie");
25
25
  export const HUBURL = new InjectionToken("hubUrl");
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieHNyZi1wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NocnYtY29tcG9uZW50cy9zcmMvbGliL2NvbmZpZy9wcm92aWRlcnMveHNyZi1wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR04saUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixxQkFBcUIsR0FDckIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQVVsRSxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLE1BQTJCLEVBQVMsRUFBRTtJQUMzRSxPQUFPO1FBQ04sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFO1FBQ3hEO1lBQ0MsT0FBTyxFQUFFLGNBQWM7WUFDdkIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDLFVBQVU7U0FDaEQ7UUFDRCxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUU7UUFDNUMsaUJBQWlCLENBQ2hCLGdCQUFnQixDQUFDO1lBQ2hCLGtCQUFrQjtZQUNsQixlQUFlO1lBQ2YsR0FBRyxDQUFDLE1BQU0sRUFBRSxZQUFZLElBQUksRUFBRSxDQUFDO1NBQy9CLENBQUMsRUFDRixxQkFBcUIsQ0FBQztZQUNyQixVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVU7WUFDN0IsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO1NBQzdCLENBQUMsRUFDRixHQUFHLENBQUMsTUFBTSxFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FDM0I7S0FDRCxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLElBQUksY0FBYyxDQUFTLFlBQVksQ0FBQyxDQUFDO0FBQ3ZFLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBUyxZQUFZLENBQUMsQ0FBQztBQUN2RSxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxjQUFjLENBQVMsUUFBUSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG5cdEh0dHBGZWF0dXJlLFxyXG5cdEh0dHBJbnRlcmNlcHRvckZuLFxyXG5cdHByb3ZpZGVIdHRwQ2xpZW50LFxyXG5cdHdpdGhJbnRlcmNlcHRvcnMsXHJcblx0d2l0aFhzcmZDb25maWd1cmF0aW9uLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFNwaW5uZXJJbnRlcmNlcHRvciB9IGZyb20gXCIuLi9pbnRlcmNlcHRvcnMvU3Bpbm5lckludGVyY2VwdG9yXCI7XHJcbmltcG9ydCB7IFhzcmZJbnRlcmNlcHRvciB9IGZyb20gXCIuLi9pbnRlcmNlcHRvcnMvWHNyZkludGVyY2VwdG9yXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElYc3JmUHJvdmlkZXJQYXJhbXMge1xyXG5cdHhzcmZIZWFkZXI6IHN0cmluZztcclxuXHR4c3JmQ29va2llOiBzdHJpbmc7XHJcblx0aHViVXJsPzogc3RyaW5nO1xyXG5cdGludGVyY2VwdG9ycz86IEh0dHBJbnRlcmNlcHRvckZuW107XHJcblx0ZmVhdHVyZXM/OiBIdHRwRmVhdHVyZTxhbnk+W107XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBwcm92aWRlWHNyZkh0dHBDbGllbnQgPSAocGFyYW1zOiBJWHNyZlByb3ZpZGVyUGFyYW1zKTogYW55W10gPT4ge1xyXG5cdHJldHVybiBbXHJcblx0XHR7IHByb3ZpZGU6IFhTUkZIRUFERVJOQU1FLCB1c2VWYWx1ZTogcGFyYW1zLnhzcmZIZWFkZXIgfSxcclxuXHRcdHtcclxuXHRcdFx0cHJvdmlkZTogWFNSRkNPT0tJRU5BTUUsXHJcblx0XHRcdHVzZVZhbHVlOiBwYXJhbXMueHNyZkNvb2tpZSB8fCBwYXJhbXMueHNyZkhlYWRlcixcclxuXHRcdH0sXHJcblx0XHR7IHByb3ZpZGU6IEhVQlVSTCwgdXNlVmFsdWU6IHBhcmFtcy5odWJVcmwgfSxcclxuXHRcdHByb3ZpZGVIdHRwQ2xpZW50KFxyXG5cdFx0XHR3aXRoSW50ZXJjZXB0b3JzKFtcclxuXHRcdFx0XHRTcGlubmVySW50ZXJjZXB0b3IsXHJcblx0XHRcdFx0WHNyZkludGVyY2VwdG9yLFxyXG5cdFx0XHRcdC4uLihwYXJhbXM/LmludGVyY2VwdG9ycyB8fCBbXSksXHJcblx0XHRcdF0pLFxyXG5cdFx0XHR3aXRoWHNyZkNvbmZpZ3VyYXRpb24oe1xyXG5cdFx0XHRcdGhlYWRlck5hbWU6IHBhcmFtcy54c3JmSGVhZGVyLFxyXG5cdFx0XHRcdGNvb2tpZU5hbWU6IHBhcmFtcy54c3JmSGVhZGVyLFxyXG5cdFx0XHR9KSxcclxuXHRcdFx0Li4uKHBhcmFtcz8uZmVhdHVyZXMgfHwgW10pXHJcblx0XHQpLFxyXG5cdF07XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgWFNSRkhFQURFUk5BTUUgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPihcInhzcmZIZWFkZXJcIik7XHJcbmV4cG9ydCBjb25zdCBYU1JGQ09PS0lFTkFNRSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+KFwieHNyZkNvb2tpZVwiKTtcclxuZXhwb3J0IGNvbnN0IEhVQlVSTCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+KFwiaHViVXJsXCIpO1xyXG4iXX0=
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieHNyZi1wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NocnYtY29tcG9uZW50cy9zcmMvbGliL2NvbmZpZy9wcm92aWRlcnMveHNyZi1wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR04saUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixxQkFBcUIsR0FDckIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQVVsRSxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLE1BQTJCLEVBQVMsRUFBRTtJQUMzRSxPQUFPO1FBQ04sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFO1FBQ3hEO1lBQ0MsT0FBTyxFQUFFLGNBQWM7WUFDdkIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDLFVBQVU7U0FDaEQ7UUFDRCxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUU7UUFDNUMsaUJBQWlCLENBQ2hCLGdCQUFnQixDQUFDO1lBQ2hCLGtCQUFrQjtZQUNsQixlQUFlO1lBQ2YsR0FBRyxDQUFDLE1BQU0sRUFBRSxZQUFZLElBQUksRUFBRSxDQUFDO1NBQy9CLENBQUMsRUFDRixxQkFBcUIsQ0FBQztZQUNyQixVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVU7WUFDN0IsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO1NBQzdCLENBQUMsRUFDRixHQUFHLENBQUMsTUFBTSxFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FDM0I7S0FDRCxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLElBQUksY0FBYyxDQUFTLFlBQVksQ0FBQyxDQUFDO0FBQ3ZFLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBUyxZQUFZLENBQUMsQ0FBQztBQUN2RSxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxjQUFjLENBQVMsUUFBUSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG5cdEh0dHBGZWF0dXJlLFxyXG5cdEh0dHBJbnRlcmNlcHRvckZuLFxyXG5cdHByb3ZpZGVIdHRwQ2xpZW50LFxyXG5cdHdpdGhJbnRlcmNlcHRvcnMsXHJcblx0d2l0aFhzcmZDb25maWd1cmF0aW9uLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFNwaW5uZXJJbnRlcmNlcHRvciB9IGZyb20gXCIuLi9pbnRlcmNlcHRvcnMvU3Bpbm5lckludGVyY2VwdG9yXCI7XHJcbmltcG9ydCB7IFhzcmZJbnRlcmNlcHRvciB9IGZyb20gXCIuLi9pbnRlcmNlcHRvcnMvWHNyZkludGVyY2VwdG9yXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElYc3JmUHJvdmlkZXJQYXJhbXMge1xyXG5cdHhzcmZIZWFkZXI6IHN0cmluZztcclxuXHR4c3JmQ29va2llPzogc3RyaW5nO1xyXG5cdGh1YlVybD86IHN0cmluZztcclxuXHRpbnRlcmNlcHRvcnM/OiBIdHRwSW50ZXJjZXB0b3JGbltdO1xyXG5cdGZlYXR1cmVzPzogSHR0cEZlYXR1cmU8YW55PltdO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgcHJvdmlkZVhzcmZIdHRwQ2xpZW50ID0gKHBhcmFtczogSVhzcmZQcm92aWRlclBhcmFtcyk6IGFueVtdID0+IHtcclxuXHRyZXR1cm4gW1xyXG5cdFx0eyBwcm92aWRlOiBYU1JGSEVBREVSTkFNRSwgdXNlVmFsdWU6IHBhcmFtcy54c3JmSGVhZGVyIH0sXHJcblx0XHR7XHJcblx0XHRcdHByb3ZpZGU6IFhTUkZDT09LSUVOQU1FLFxyXG5cdFx0XHR1c2VWYWx1ZTogcGFyYW1zLnhzcmZDb29raWUgfHwgcGFyYW1zLnhzcmZIZWFkZXIsXHJcblx0XHR9LFxyXG5cdFx0eyBwcm92aWRlOiBIVUJVUkwsIHVzZVZhbHVlOiBwYXJhbXMuaHViVXJsIH0sXHJcblx0XHRwcm92aWRlSHR0cENsaWVudChcclxuXHRcdFx0d2l0aEludGVyY2VwdG9ycyhbXHJcblx0XHRcdFx0U3Bpbm5lckludGVyY2VwdG9yLFxyXG5cdFx0XHRcdFhzcmZJbnRlcmNlcHRvcixcclxuXHRcdFx0XHQuLi4ocGFyYW1zPy5pbnRlcmNlcHRvcnMgfHwgW10pLFxyXG5cdFx0XHRdKSxcclxuXHRcdFx0d2l0aFhzcmZDb25maWd1cmF0aW9uKHtcclxuXHRcdFx0XHRoZWFkZXJOYW1lOiBwYXJhbXMueHNyZkhlYWRlcixcclxuXHRcdFx0XHRjb29raWVOYW1lOiBwYXJhbXMueHNyZkhlYWRlcixcclxuXHRcdFx0fSksXHJcblx0XHRcdC4uLihwYXJhbXM/LmZlYXR1cmVzIHx8IFtdKVxyXG5cdFx0KSxcclxuXHRdO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IFhTUkZIRUFERVJOQU1FID0gbmV3IEluamVjdGlvblRva2VuPHN0cmluZz4oXCJ4c3JmSGVhZGVyXCIpO1xyXG5leHBvcnQgY29uc3QgWFNSRkNPT0tJRU5BTUUgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPihcInhzcmZDb29raWVcIik7XHJcbmV4cG9ydCBjb25zdCBIVUJVUkwgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPihcImh1YlVybFwiKTtcclxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"chrv-components.mjs","sources":["../../../projects/chrv-components/src/lib/chr-breadcrumb/chr-breadcrumb.component.ts","../../../projects/chrv-components/src/lib/chr-breadcrumb/chr-breadcrumb.component.html","../../../projects/chrv-components/src/lib/chr-button/chr-button.component.ts","../../../projects/chrv-components/src/lib/chr-button/chr-button.component.html","../../../projects/chrv-components/src/lib/chr-delete-modal/chr-delete-modal.component.ts","../../../projects/chrv-components/src/lib/chr-delete-modal/chr-delete-modal.component.html","../../../projects/chrv-components/src/lib/models/chr-validators/type-validator.ts","../../../projects/chrv-components/src/lib/models/chr-validators/decimal-validator.ts","../../../projects/chrv-components/src/lib/models/chr-validators/max-date-validator.ts","../../../projects/chrv-components/src/lib/chr-search-select/chr-search-select.component.ts","../../../projects/chrv-components/src/lib/chr-search-select/chr-search-select.component.html","../../../projects/chrv-components/src/lib/chr-form-legacy/chr-form-legacy.component.ts","../../../projects/chrv-components/src/lib/chr-form-legacy/chr-form-legacy.component.html","../../../projects/chrv-components/src/lib/chr-form/chr-form.component.ts","../../../projects/chrv-components/src/lib/chr-form/chr-form.component.html","../../../projects/chrv-components/src/lib/chr-searchbar/chr-searchbar.component.ts","../../../projects/chrv-components/src/lib/chr-searchbar/chr-searchbar.component.html","../../../projects/chrv-components/src/lib/chr-paginator/chr-paginator.component.ts","../../../projects/chrv-components/src/lib/chr-paginator/chr-paginator.component.html","../../../projects/chrv-components/src/lib/chr-table-header-cell/chr-table-header-cell.component.ts","../../../projects/chrv-components/src/lib/chr-table-header-cell/chr-table-header-cell.component.html","../../../projects/chrv-components/src/lib/chr-table/chr-table.component.ts","../../../projects/chrv-components/src/lib/chr-table/chr-table.component.html","../../../projects/chrv-components/src/lib/chr-checkbox/chr-checkbox.component.ts","../../../projects/chrv-components/src/lib/chr-checkbox/chr-checkbox.component.html","../../../projects/chrv-components/src/lib/chr-separator/chr-separator.component.ts","../../../projects/chrv-components/src/lib/chr-separator/chr-separator.component.html","../../../projects/chrv-components/src/lib/models/live-update-message.ts","../../../projects/chrv-components/src/lib/services/loader.service.ts","../../../projects/chrv-components/src/lib/config/interceptors/SpinnerInterceptor.ts","../../../projects/chrv-components/src/lib/services/data.service.ts","../../../projects/chrv-components/src/lib/config/interceptors/XsrfInterceptor.ts","../../../projects/chrv-components/src/lib/config/providers/xsrf-provider.ts","../../../projects/chrv-components/src/lib/services/live-update.service.ts","../../../projects/chrv-components/src/lib/chr-spinner/chr-spinner.component.ts","../../../projects/chrv-components/src/lib/chr-spinner/chr-spinner.component.html","../../../projects/chrv-components/src/lib/services/toast.service.ts","../../../projects/chrv-components/src/lib/chr-toast/chr-toast.component.ts","../../../projects/chrv-components/src/lib/chr-toast/chr-toast.component.html","../../../projects/chrv-components/src/lib/services/dialog.service.ts","../../../projects/chrv-components/src/public-api.ts","../../../projects/chrv-components/src/chrv-components.ts"],"sourcesContent":["import { Component, Input } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { MatButton } from \"@angular/material/button\";\n\nexport interface Breadcrumb {\n\tdisplay: string;\n\tlink?: string;\n\tcallback?: Function;\n}\n\n@Component({\n\tselector: \"app-chr-breadcrumb\",\n\ttemplateUrl: \"./chr-breadcrumb.component.html\",\n\tstyleUrls: [\n\t\t\"./chr-breadcrumb.component.scss\",\n\t\t\"../../../../../tailwindbuild.css\",\n\t],\n\tstandalone: true,\n\timports: [MatButton],\n})\nexport class BreadcrumbComponent {\n\t@Input() crumbs?: Breadcrumb[];\n\n\tconstructor(public router: Router) {}\n\n\tnavigateTo = (uri: string, data?: any) => {\n\t\tthis.router.navigate([uri], { state: data });\n\t};\n}\n","<div class=\"w-full flex flex-row flex-wrap dark:!text-gray-400\">\n @for (crumb of crumbs; track crumb) {\n <div class=\"w-fit min-w-fit\">\n <button class=\"dark:!text-gray-400\" [disabled]=\"!crumb.link && !crumb.callback\" mat-button\n (click)=\"crumb.callback?.() || crumb.link && navigateTo(crumb.link)\">\n {{ crumb.display }}\n </button>\n {{ (crumb.link || crumb.callback) && \">\" }}\n </div>\n }\n</div>","import { Component, Input } from \"@angular/core\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { MatTooltipModule } from \"@angular/material/tooltip\";\nimport { MatButtonModule, MatFabButton } from \"@angular/material/button\";\nimport { CommonModule } from \"@angular/common\";\n\n@Component({\n\tselector: \"app-chr-button\",\n\ttemplateUrl: \"./chr-button.component.html\",\n\tstyleUrls: [\n\t\t\"./chr-button.component.scss\",\n\t\t\"../../../../../tailwindbuild.css\",\n\t],\n\tstandalone: true,\n\timports: [\n\t\tMatTooltipModule,\n\t\tMatIconModule,\n\t\tMatButtonModule,\n\t\tCommonModule,\n\t\tMatFabButton,\n\t],\n})\nexport class ChrButtonComponent {\n\t@Input() display?: string = \"\";\n\t@Input() icon?: string = \"\";\n\t@Input() click?: Function;\n\t@Input() color:\n\t\t| \"primary\"\n\t\t| \"accent\"\n\t\t| \"warn\"\n\t\t| \"alert\"\n\t\t| \"darkeraccent\"\n\t\t| \"none\" = \"none\";\n\t@Input() textColor?: \"white\" | \"black\" | string = undefined;\n\t@Input() predicate?: boolean = true;\n\t@Input() type: \"responsive\" | \"table\" | \"full\" | \"fixed\" | \"small\" | \"none\" =\n\t\t\"none\";\n\t@Input() href?: string;\n\t@Input() target?: \"_blank\" | \"_parent\" | \"_self\" | \"_top\";\n\t@Input() disabled: boolean = false;\n\t@Input() tooltip?: string;\n\t@Input() tooltipPosition?:\n\t\t| \"above\"\n\t\t| \"below\"\n\t\t| \"left\"\n\t\t| \"right\"\n\t\t| \"before\"\n\t\t| \"after\";\n\n\tconstructor() {}\n\n\tsetDisabled = (is: boolean) => {\n\t\tthis.disabled = is;\n\t};\n\n\tdoClick = () => {\n\t\tthis.click?.();\n\t};\n}\n","@if (predicate) {\n@if(display){\n<a mat-button mat-flat-button [disabled]=\"disabled\" style=\"--textcolor: {{textColor}};\" class=\"flex h-9 m-0 p-0 sm:w-36\"\n [ngClass]=\"{\n 'pointer-events-none cursor-none' : disabled,\n 'w-36': type=='fixed',\n 'w-full': type=='full',\n 'w-min': type=='table',\n 'w-full sm:w-36' : type=='responsive',\n 'chr-button': textColor !== undefined\n }\" color=\"{{ color }}\" (click)=\"click?.()\" [attr.href]=\"href && href\" [attr.target]=\"target && target\"\n [matTooltip]=\"tooltip||''\" [matTooltipPosition]=\"tooltipPosition||'above'\">\n {{ display }}\n @if (icon) {\n <mat-icon class=\"!m-0\">{{ icon }}</mat-icon>\n }\n</a>\n}\n@if(!display && icon){\n<a mat-raised-button class=\"chr-button flex small-button\" style=\"--textcolor: {{textColor}};\" [ngClass]=\"{\n '!pointer-events-none !cursor-none' : disabled,\n 'chr-button': textColor !== undefined\n }\" [disabled]=\"disabled\" color=\"{{ color }}\" (click)=\"click?.()\" [attr.href]=\"href && href\"\n [attr.target]=\"target && target\" [matTooltip]=\"tooltip||''\" [matTooltipPosition]=\"tooltipPosition||'above'\">\n <i class=\"material-icons\">{{ icon }}</i>\n</a>\n}\n\n}\n\n<!--\n @if (predicate) {\n<a (click)=\"click?.()\" [attr.href]=\"href && href\"\n class=\"flex justify-center align-middle items-center py-2 px-2 text-pretty text-sm rounded-md cursor-pointer\"\n [ngClass]=\"{\n 'pointer-events-none cursor-none' : disabled,\n 'bg-chrdblue hover:bg-blue-700 !text-white opacity-100' : color=='primary',\n 'bg-chrlblue hover:bg-blue-300 !text-black' : color=='accent',\n 'bg-red-600 hover:bg-red-500 !text-white' : color=='warn',\n 'bg-slate-400 hover:bg-slate-600 !text-black' : color=='none',\n 'w-36': type=='fixed',\n 'w-full': type=='full',\n 'w-min': type=='table',\n 'w-full sm:w-36': type=='responsive',\n }\" [attr.target]=\"target && target\" [matTooltip]=\"tooltip||''\" [matTooltipPosition]=\"tooltipPosition||'above'\">\n {{ display }}\n @if (icon) {\n <mat-icon class=\"!m-0\">{{ icon }}</mat-icon>\n }\n</a>\n-->\n<!--\nIF\nClick\ncolor\ntype: table : full\nicon\n-->","import { Component } from \"@angular/core\";\nimport {\n\tMatDialogRef,\n\tMatDialogTitle,\n\tMatDialogContent,\n\tMatDialogActions,\n\tMatDialogClose,\n} from \"@angular/material/dialog\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { ChrButtonComponent } from \"../chr-button/chr-button.component\";\n\n@Component({\n\tselector: \"app-chr-delete-modal\",\n\ttemplateUrl: \"./chr-delete-modal.component.html\",\n\tstyleUrls: [\n\t\t\"./chr-delete-modal.component.scss\",\n\t\t\"../../../../../tailwindbuild.css\",\n\t],\n\tstandalone: true,\n\timports: [\n\t\tMatDialogTitle,\n\t\tMatDialogContent,\n\t\tMatDialogActions,\n\t\tChrButtonComponent,\n\t\tMatDialogClose,\n\t\tMatTooltip,\n\t],\n})\nexport class ChrDeleteModalComponent {\n\tpublic valid: boolean = false;\n\n\tconstructor(public dialogRef: MatDialogRef<ChrDeleteModalComponent>) {}\n\n\tngOnInit() {}\n\n\tpublic close = () => {\n\t\tthis.dialogRef.close(true);\n\t};\n}\n","<div class=\"dark:bg-slate-800 w-full overflow-auto overflow-x-hidden\">\n <h2 mat-dialog-title class=\"dark:!text-gray-400\">Supprimer un élément</h2>\n <mat-dialog-content class=\"mat-typography dark:!text-gray-400\">\n Attention:\n <br>\n <br>\n La suppression d'un élément est irréversible.\n <br>\n <br>\n Vous allez supprimer un élément et sa référence sera effacée dans toute l'application.\n <br>\n Si d'autres éléments y sont liés, il est possible qu'ils soient supprimés en même temps.\n <br>\n <br>\n En effectuant cette action et cliquant sur \"Confirmer\" vous certifiez que vous avez pris connaissance des\n conséquences possibles et souhaitez tout de même poursuivre.\n\n </mat-dialog-content>\n <mat-dialog-actions>\n <div class=\"w-full flex flex-row justify-between\">\n <app-chr-button class=\"w-36\" display=\"Annuler\" color=\"accent\" mat-dialog-close></app-chr-button>\n <app-chr-button class=\"w-36\" display=\"Confirmer\" color=\"warn\" [click]=\"close\"\n [matTooltip]=\"'Attention: cette action est irréversible !'\" matTooltipPosition=\"above\"></app-chr-button>\n </div>\n </mat-dialog-actions>\n</div>","import { Directive, forwardRef, Input, Injectable } from \"@angular/core\";\r\nimport {\r\n\tAbstractControl,\r\n\tNG_VALIDATORS,\r\n\tValidationErrors,\r\n\tValidator,\r\n\tValidatorFn,\r\n} from \"@angular/forms\";\r\n\r\n@Injectable({ providedIn: \"root\" })\r\n@Directive({\r\n\tselector: \"[app-type]\",\r\n\tproviders: [\r\n\t\t{\r\n\t\t\tprovide: NG_VALIDATORS,\r\n\t\t\tuseExisting: TypeValidatorDirective,\r\n\t\t\tmulti: true,\r\n\t\t},\r\n\t],\r\n\tstandalone: true,\r\n})\r\nexport class TypeValidatorDirective implements Validator {\r\n\t@Input() type?: string;\r\n\r\n\tvalidate(control: AbstractControl): ValidationErrors | null {\r\n\t\treturn this.type ? type(this.type)(control) : null;\r\n\t}\r\n}\r\n\r\nexport function type(type: string): ValidatorFn {\r\n\treturn (control: AbstractControl): ValidationErrors | null => {\r\n\t\tconst value = control.value;\r\n\r\n\t\tif (!value) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst isType = typeof value === type;\r\n\r\n\t\treturn !isType\r\n\t\t\t? ({\r\n\t\t\t\t\ttype: true,\r\n\t\t\t\t\trequiredType: type,\r\n\t\t\t\t\tactualType: typeof value,\r\n\t\t\t } as ValidationErrors)\r\n\t\t\t: null;\r\n\t};\r\n}\r\n","import { Directive, forwardRef, Input, Injectable } from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n NG_VALIDATORS,\r\n ValidationErrors,\r\n Validator,\r\n ValidatorFn,\r\n} from '@angular/forms';\r\n\r\n@Injectable({ providedIn: 'root' })\r\n@Directive({\r\n selector: '[app-decimal]',\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: DecimalValidatorDirective,\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class DecimalValidatorDirective implements Validator {\r\n @Input() amount?: number;\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n return this.amount ? decimal(this.amount)(control) : null;\r\n }\r\n}\r\n\r\nexport function decimal(amount: number): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value = control.value;\r\n\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n let isTooLong = false;\r\n\r\n const str = `${value}`;\r\n isTooLong =\r\n str.indexOf(',') != -1\r\n ? (str.split(',')[1] ? str.split(',')[1].length : 0) > amount\r\n : str.indexOf('.') != -1\r\n ? (str.split('.')[1] ? str.split('.')[1].length : 0) > amount\r\n : false;\r\n\r\n return isTooLong\r\n ? ({\r\n decimal: true,\r\n max: amount,\r\n } as ValidationErrors)\r\n : null;\r\n };\r\n}\r\n","import { Directive, forwardRef, Input, Injectable } from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n NG_VALIDATORS,\r\n ValidationErrors,\r\n Validator,\r\n ValidatorFn,\r\n} from '@angular/forms';\r\nimport moment from 'moment';\r\n\r\n@Injectable({ providedIn: 'root' })\r\n@Directive({\r\n selector: '[app-max-date]',\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: MaxDateValidatorDirective,\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class MaxDateValidatorDirective implements Validator {\r\n @Input() date?: Date;\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n return this.date ? maxDate(this.date)(control) : null;\r\n }\r\n}\r\n\r\nexport function maxDate(date: Date): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value = control.value;\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n const maxDate = moment(date);\r\n const inputDate = moment(value);\r\n\r\n return !(inputDate.isValid() && inputDate.isBefore(maxDate))\r\n ? ({\r\n maxdate: true,\r\n max: maxDate.toDate(),\r\n actual: value,\r\n } as ValidationErrors)\r\n : null;\r\n };\r\n}\r\n","import {\n\tComponent,\n\tInput,\n\tOutput,\n\tEventEmitter,\n\tforwardRef,\n\tViewChild,\n\tViewEncapsulation,\n\tAfterViewInit,\n} from \"@angular/core\";\nimport {\n\tControlValueAccessor,\n\tFormControl,\n\tNG_VALUE_ACCESSOR,\n\tReactiveFormsModule,\n} from \"@angular/forms\";\nimport {\n\tMatAutocomplete,\n\tMatAutocompleteTrigger,\n} from \"@angular/material/autocomplete\";\nimport {\n\tObservable,\n\tstartWith,\n\tmap,\n\tof,\n\tcombineLatest,\n\tcombineLatestAll,\n} from \"rxjs\";\nimport { MatOption } from \"@angular/material/core\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { AsyncPipe } from \"@angular/common\";\n\nexport interface IInputSearchFilter {\n\tdisplay: string;\n\tcallback?: Function;\n\ttooltip?: string;\n}\n\n@Component({\n\tselector: \"app-chr-search-select, [app-chr-search-select]\",\n\ttemplateUrl: \"./chr-search-select.component.html\",\n\tstyleUrls: [\n\t\t\"./chr-search-select.component.scss\",\n\t\t\"../../../../../tailwindbuild.css\",\n\t],\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tmulti: true,\n\t\t\tuseExisting: ChrSearchSelectComponent,\n\t\t},\n\t],\n\tstandalone: true,\n\timports: [\n\t\tReactiveFormsModule,\n\t\tMatAutocompleteTrigger,\n\t\tMatTooltip,\n\t\tMatAutocomplete,\n\t\tMatOption,\n\t\tAsyncPipe,\n\t],\n})\nexport class ChrSearchSelectComponent\n\timplements ControlValueAccessor, AfterViewInit\n{\n\tpublic predicate: boolean = true;\n\n\tpublic searchSelect: FormControl = new FormControl<string | null>(null);\n\tpublic filteredModelOptions?: Observable<any>;\n\n\t@ViewChild(\"auto\") autocomplete!: MatAutocomplete;\n\n\tpublic onTouched: any = () => {};\n\n\t@Input() name?: string;\n\t@Input() placeholder?: string;\n\t@Input() data: any[] | null = [];\n\t@Input() display?: Function;\n\t@Input() disabled: boolean = false;\n\t@Input() model: any | null = null;\n\t@Input() id: any;\n\t@Output() modelChange: EventEmitter<any> = new EventEmitter();\n\t@Output() keyup: EventEmitter<KeyboardEvent> =\n\t\tnew EventEmitter<KeyboardEvent>();\n\n\t@Input() filters?: IInputSearchFilter[];\n\tpublic filterIndex: number = 0;\n\n\t@Output() validity: EventEmitter<boolean> = new EventEmitter();\n\n\tngOnInit() {\n\t\tthis.registerFilters();\n\t}\n\n\tngAfterViewInit(): void {\n\t\tthis.registerAutoComplete();\n\t}\n\n\treset = () => {\n\t\tthis.searchSelect.reset();\n\t\tthis.modelChange.emit(null);\n\t};\n\n\tgetModelDisplay = (model: any) => {\n\t\treturn this.display?.(model) || \"\";\n\t};\n\n\temit = (event: any) => {\n\t\tthis.modelChange.emit(event);\n\t};\n\n\twriteValue = (obj: any): void => {\n\t\tthis.searchSelect.setValue(obj);\n\t};\n\n\tregisterOnChange = (fn: any): void => {\n\t\tthis.searchSelect.valueChanges.subscribe((value) => {\n\t\t\t//this.validity.emit(false);\n\t\t\tfn(value !== undefined ? value! : null);\n\t\t});\n\t};\n\n\tregisterOnTouched = (fn: any): void => {\n\t\tthis.searchSelect.markAsTouched = fn;\n\t};\n\n\tregisterFilters = () => {\n\t\tthis.filteredModelOptions = this.searchSelect.valueChanges.pipe(\n\t\t\tstartWith(\"\"),\n\t\t\tmap((value) => this._filterModel(value! || -1)),\n\t\t\tmap((values) => {\n\t\t\t\treturn this.filters && this.filters[this.filterIndex].callback\n\t\t\t\t\t? values.filter((r) => this.filters![this.filterIndex].callback!(r))\n\t\t\t\t\t: values;\n\t\t\t})\n\t\t);\n\t};\n\n\tregisterAutoComplete = () => {\n\t\t//If there is only one value left,\n\t\t// this.filteredModelOptions?.subscribe((values) => {\n\t\t// \tif (values.length == 1) {\n\t\t// \t\tthis.emit(values[0]);\n\t\t// \t}\n\t\t// });\n\t\tthis.autocomplete.optionSelected.subscribe((event: MatOption) => {\n\t\t\tthis.validity.emit(true);\n\t\t});\n\t};\n\n\tsetDisabledState? = (isDisabled: boolean): void => {\n\t\tthis.disabled = isDisabled;\n\t\tisDisabled ? this.searchSelect.disable() : this.searchSelect.enable();\n\t};\n\n\tincrement = () => {\n\t\tthis.writeValue(\"\");\n\t\tconst modulo = this.filters ? this.filters.length : 1;\n\t\tthis.filterIndex = (this.filterIndex + 1) % modulo;\n\t};\n\n\tgetValue = () => {\n\t\treturn this.searchSelect.value;\n\t};\n\n\tvoid = () => {};\n\n\tprivate _filterModel = (value: number | string): any[] => {\n\t\treturn typeof value == \"string\"\n\t\t\t? this._doFilterModelString(`${value}`)\n\t\t\t: this._doFilterModelInt(value);\n\t};\n\n\tprivate _doFilterModelInt = (id: number) => {\n\t\tconst tmp = this.data?.find((r) => r.id == id);\n\t\treturn tmp ? tmp : [];\n\t};\n\n\tprivate _doFilterModelString = (input: string) => {\n\t\treturn this.data?.filter((r) => this._filterValues(r, input));\n\t};\n\n\tprivate _filterValues = (value: any, input: string) => {\n\t\t//Si l'utilisateur entre un espace, on renvoie true, afin que tous les résultats s'affichent.\n\t\tif (input == \" \") return true;\n\t\t//Sinon, on ne renvoie true que pour les éléments qui matchent son input\n\t\treturn `${this.getModelDisplay(value)}`\n\t\t\t.trim()\n\t\t\t.toLowerCase()\n\t\t\t.includes(input.trim().toLowerCase());\n\t};\n}\n","@if (predicate) {\n<input [matTooltip]=\"searchSelect.disabled ? '': 'Entrez un espace pour voir les choix disponibles'\"\n matTooltipPosition=\"above\" #input type=\"text\" name=\"{{name}}\" matInput [formControl]=\"searchSelect\"\n [value]=\"getModelDisplay(model)\"\n class=\"block input py-2.5 px-0 w-full text-sm text-gray-900 dark:text-white bg-transparent border-0 border-b-2 border-gray-300 appearance-none dark:border-gray-600 dark:focus:border-chrlblue focus:outline-none focus:ring-0 focus:border-chrdblue peer/inputs\"\n placeholder=\"{{ placeholder || ' ' }}\" required (keyup)=\"keyup.emit($event)\" (keyup.backspace)=\"reset()\"\n [matAutocomplete]=\"auto\" />\n<ng-content></ng-content>\n@if (filters) {\n<span [matTooltip]=\"filters[filterIndex].tooltip || ''\" matTooltipPosition=\"above\" class=\"absolute inner-button cursor-pointer top-0 right-0 h-[calc(100%_-_2px)] border-gray-300 dark:border-gray-400 border-l-2 border-b-0 border-t-0 \n border-r-0 w-fit text-gray-900 dark:text-gray-400 px-1 text-center opacity-100 bg-slate-100 dark:bg-slate-700 bg-opacity-50 flex justify-center \n align-middle items-center\" (click)=\"filters ? increment() : void()\">\n <p class=\"inline-block w-fit h-min overflow-hidden text-nowrap text-ellipsis\">{{ filters[filterIndex].display }}\n </p>\n</span>\n}\n<mat-autocomplete #auto class=\"dark:!bg-slate-700 dark:!text-white rounded-lg no-scrollbar \" id=\"{{id}}-auto\"\n [displayWith]=\"getModelDisplay.bind(this)\" (optionSelected)=\"emit($event.option.value)\">\n @for (model of filteredModelOptions | async; track model) {\n <mat-option class=\"dark:!text-gray-400 rounded-lg focus:!bg-blue-500 focus-visible:!bg-red-500\" [value]=\"model\"\n selected>\n {{ getModelDisplay(model) || '' }}\n </mat-option>\n }\n</mat-autocomplete>\n}","import {\n\tComponent,\n\tInput,\n\tOutput,\n\tEventEmitter,\n\tAfterViewInit,\n\tChangeDetectionStrategy,\n\tViewEncapsulation,\n\tChangeDetectorRef,\n\tOnChanges,\n\tSimpleChanges,\n\tOnInit,\n} from \"@angular/core\";\nimport {\n\tTypeValidatorDirective,\n\ttype,\n} from \"../models/chr-validators/type-validator\";\nimport { ValidatorFn, ReactiveFormsModule, FormsModule } from \"@angular/forms\";\nimport {\n\tFormBuilder,\n\tFormGroup,\n\tValidators,\n\tFormControl,\n} from \"@angular/forms\";\nimport { decimal } from \"../models/chr-validators/decimal-validator\";\nimport { maxDate } from \"../models/chr-validators/max-date-validator\";\nimport { MatError } from \"@angular/material/form-field\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { MatTooltipModule } from \"@angular/material/tooltip\";\nimport { ChrSearchSelectComponent } from \"../chr-search-select/chr-search-select.component\";\nimport { MatSlideToggleModule } from \"@angular/material/slide-toggle\";\nimport {\n\tDatePipe,\n\tCommonModule,\n\tDATE_PIPE_DEFAULT_OPTIONS,\n} from \"@angular/common\";\nimport { MatAutocompleteModule } from \"@angular/material/autocomplete\";\nimport { debounce, debounceTime } from \"rxjs\";\nimport { MatTabsModule } from \"@angular/material/tabs\";\n\nexport interface ISearchFilter {\n\tdisplay: string;\n\tcallback?: Function;\n\ttooltip?: string;\n}\n\nexport interface IControlValidation {\n\trule: string;\n\tvalue?: any;\n\tdisplay?: string;\n}\n\nexport interface IControl {\n\tlabel?: string;\n\tname: string;\n\tspan?: string;\n\twidth?: \"col\" | \"row\";\n\tcol?: number;\n\trow?: number;\n\ttype:\n\t\t| \"text\"\n\t\t| \"password\"\n\t\t| \"textArea\"\n\t\t| \"number\"\n\t\t| \"date\"\n\t\t| \"datetime\"\n\t\t| \"searchSelect\"\n\t\t| \"color\"\n\t\t| \"toggle\";\n\tvalue?: any;\n\tdata?: any[] | null;\n\ticon?: string;\n\ticonCallback?: Function;\n\ticonCallbackDisabled?: boolean;\n\ticonTooltip?: string;\n\tfn?: (object: any) => string;\n\tfilters?: ISearchFilter[];\n\tvalidations?: IControlValidation[];\n}\n\nexport interface IFormSection {\n\ttitle?: string;\n\tcontrols: IControl[];\n}\n\nexport interface IFormControl {\n\t[key: string]: any;\n}\n@Component({\n\tselector: \"app-chr-form-legacy\",\n\ttemplateUrl: \"./chr-form-legacy.component.html\",\n\tstyleUrls: [\n\t\t\"./chr-form-legacy.component.scss\",\n\t\t\"../../../../../tailwindbuild.css\",\n\t\t\"./chr-form-legacy.component.scss\",\n\t],\n\tstandalone: true,\n\timports: [\n\t\tReactiveFormsModule,\n\t\tFormsModule,\n\t\tMatTooltipModule,\n\t\tMatIconModule,\n\t\tMatSlideToggleModule,\n\t\tMatError,\n\t\tChrSearchSelectComponent,\n\t\tMatAutocompleteModule,\n\t\tDatePipe,\n\t\tCommonModule,\n\t\tTypeValidatorDirective,\n\t\tMatTabsModule,\n\t],\n\tproviders: [\n\t\tDatePipe,\n\t\t{\n\t\t\tprovide: DATE_PIPE_DEFAULT_OPTIONS,\n\t\t\tuseValue: { dateFormat: \"shortDate\" },\n\t\t},\n\t],\n\tchangeDetection: ChangeDetectionStrategy.Default,\n})\nexport class ChrFormComponentLegacy implements OnInit, AfterViewInit {\n\t@Input() sections?: IFormSection[];\n\t@Input() valid?: boolean;\n\t@Output() validChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n\t@Input() model?: any;\n\t@Output() modelChange: EventEmitter<any> = new EventEmitter<any>();\n\n\t@Input() disabled?: boolean;\n\t@Output() valuesChange: EventEmitter<any> = new EventEmitter();\n\n\t@Input() submit?: Function;\n\n\t@Input() compact: boolean = false;\n\n\t@Input() debounce: number = 0;\n\n\t@Output() formChange: EventEmitter<IFormControl> =\n\t\tnew EventEmitter<IFormControl>();\n\n\t@Input() tabDisplay: boolean = false;\n\n\tform: FormGroup = this.builder.group({});\n\n\tupdateValueAndValidity = () => {\n\t\tthis.form.markAsDirty();\n\t\tthis.form.updateValueAndValidity({ emitEvent: true });\n\t};\n\n\tpublic initialized: boolean = false;\n\n\tconstructor(\n\t\tprivate builder: FormBuilder,\n\t\tprivate datePipe: DatePipe,\n\t\tprivate changeDetector: ChangeDetectorRef\n\t) {}\n\n\tngOnInit(): void {\n\t\tthis._initValidators();\n\t\tthis._registerInputEmitters();\n\t\tthis._registerInputUpdaters();\n\t\tthis.initialized = true;\n\t}\n\n\tngAfterViewInit(): void {\n\t\t//this._initValues();\n\t\tthis.changeDetector.detectChanges();\n\t\tthis.form.valueChanges.subscribe((res) => {\n\t\t\tthis.valid = this.form.valid;\n\t\t\tthis.validChange.emit(this.form.valid);\n\t\t\tthis.valuesChange.emit(res);\n\t\t\tthis.changeDetector.markForCheck();\n\t\t\tthis.changeDetector.detectChanges();\n\t\t});\n\t}\n\n\tvalue = (input?: string) => {\n\t\tif (input) return this.form.controls[input]?.value;\n\t\treturn this.form.value;\n\t};\n\n\tsetValue = (input: string, value: any) => {\n\t\tif (input) this.form.get(input)?.setValue(value);\n\t};\n\n\tisValid = (input?: string) => {\n\t\tif (input) return this.form.get(input)?.valid;\n\t\treturn this.valid;\n\t};\n\n\tisControlRequired = (control: IControl) => {\n\t\treturn control.validations?.find((v) => v.rule.toLowerCase() == \"required\");\n\t};\n\n\tpatchValue = (key: string, value: any) => {\n\t\tthis.form.patchValue({ [key]: value });\n\t};\n\n\tpatch = (model: any) => {\n\t\tfor (const key of Object.keys(model)) {\n\t\t\tthis.patchValue(key, model[key]);\n\t\t}\n\t\tthis.form.markAsDirty();\n\t\tthis.form.updateValueAndValidity();\n\t};\n\n\treset = () => {\n\t\tthis.form.reset();\n\t};\n\n\tsetControlValue = (\n\t\tmodel: any,\n\t\tcontrol: IControl,\n\t\tvalue: any,\n\t\tindex?: number\n\t) => {\n\t\tif (model?.[control.name]) {\n\t\t\tmodel[control.name] = this._convertValueToType(value, control.type);\n\t\t}\n\t\tif (control.value)\n\t\t\tcontrol.value = this._convertValueToType(value, control.type);\n\n\t\tthis.patchValue(\n\t\t\tcontrol.name,\n\t\t\tthis._convertValueToType(value, control.type)\n\t\t);\n\t};\n\n\tpublic resize = (textArea: HTMLTextAreaElement) => {\n\t\tconst initialHeight = textArea.style.height;\n\t\ttextArea.style.height = initialHeight;\n\t\ttextArea.style.height = \"\" + textArea.scrollHeight + \"px\";\n\t};\n\n\tpublic doSubmit = () => {\n\t\tthis.form.markAllAsTouched();\n\t\tif (this.valid && this.form.valid) this.submit?.(this.form.value);\n\t};\n\n\tpublic track = (control: string, index: number) => {\n\t\tthis.form.get(control)?.updateValueAndValidity();\n\t\treturn index;\n\t};\n\n\tpublic getControl = (control: IControl) => {\n\t\treturn this.model?.[control.name] || control.value;\n\t};\n\n\tpublic setControl = (control: IControl, value: any) => {\n\t\tthis.setControlValue(this.model, control, value);\n\t};\n\n\tprivate _registerInputEmitters = () => {\n\t\tfor (const section of this.sections!) {\n\t\t\tfor (const control of section.controls) {\n\t\t\t\tconst formControl = this.form.get(control.name);\n\t\t\t\tformControl!.valueChanges\n\t\t\t\t\t.pipe(debounceTime(this.debounce))\n\t\t\t\t\t.subscribe((e) => {\n\t\t\t\t\t\tthis.formChange.emit({ [control.name]: e });\n\t\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\n\tprivate _registerInputUpdaters = () => {\n\t\tfor (const section of this.sections!) {\n\t\t\tfor (const control of section.controls) {\n\t\t\t\tconst formControl = this.form.get(control.name)!;\n\t\t\t\tformControl.valueChanges.subscribe((value) => {\n\t\t\t\t\tif (this.model) {\n\t\t\t\t\t\tthis.model[control.name] = value;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontrol.value = value;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\n\tprivate _initValues = () => {\n\t\tfor (const section of this.sections || []) {\n\t\t\tfor (let control of section.controls) {\n\t\t\t\tconst value = this.model ? this.model[control.name] : null;\n\t\t\t\tif (!value && typeof value != \"number\") {\n\t\t\t\t\tif (control.value)\n\t\t\t\t\t\tthis.form\n\t\t\t\t\t\t\t.get(control.name)!\n\t\t\t\t\t\t\t.patchValue(\n\t\t\t\t\t\t\t\tthis._convertValueToType(control.value, control.type)\n\t\t\t\t\t\t\t);\n\t\t\t\t\telse this.form.get(control.name)!.patchValue(null);\n\t\t\t\t} else {\n\t\t\t\t\tthis.form\n\t\t\t\t\t\t.get(control.name)!\n\t\t\t\t\t\t.patchValue(this._convertValueToType(value, control.type));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tprivate _convertValueToType = (\n\t\tvalue: any,\n\t\ttype:\n\t\t\t| \"text\"\n\t\t\t| \"password\"\n\t\t\t| \"textArea\"\n\t\t\t| \"number\"\n\t\t\t| \"date\"\n\t\t\t| \"datetime\"\n\t\t\t| \"searchSelect\"\n\t\t\t| \"select\"\n\t\t\t| \"color\"\n\t\t\t| \"toggle\"\n\t) => {\n\t\tswitch (type) {\n\t\t\tcase \"text\":\n\t\t\t\treturn value || \"\";\n\t\t\tcase \"number\":\n\t\t\t\treturn value || 0;\n\t\t\tcase \"searchSelect\": {\n\t\t\t\tif (typeof value == \"string\" && value.trim() == \"\") value = null;\n\t\t\t\treturn value || null;\n\t\t\t}\n\t\t\tcase \"textArea\":\n\t\t\t\treturn value || \"\";\n\t\t\tcase \"password\":\n\t\t\t\treturn value || \"\";\n\t\t\tcase \"select\":\n\t\t\t\treturn value || null;\n\t\t\tcase \"date\":\n\t\t\t\treturn this.datePipe.transform(value, \"yyyy-MM-dd\");\n\t\t\tcase \"datetime\":\n\t\t\t\treturn this.datePipe.transform(value, \"yyyy-MM-ddTHH:mm\");\n\t\t\tcase \"color\":\n\t\t\t\treturn value || \"\";\n\t\t\tcase \"toggle\":\n\t\t\t\treturn value as boolean;\n\t\t\tdefault:\n\t\t\t\treturn value;\n\t\t}\n\t};\n\n\tformatDateForInput = (date: any) => {\n\t\tthis.datePipe.transform(date, \"yyyy-MM-dd\");\n\t};\n\n\tprivate _initValidators() {\n\t\tfor (const section of this.sections || []) {\n\t\t\tfor (const input of section.controls) {\n\t\t\t\tif (input.type == \"searchSelect\" && !input.fn)\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\"An input of type 'searchSelect' needs a display function !\"\n\t\t\t\t\t);\n\t\t\t\tconst control = new FormControl(\n\t\t\t\t\tthis._convertValueToType(this.model?.[input.name], input.type) ||\n\t\t\t\t\t\tinput.value,\n\t\t\t\t\tthis._getValidators(input.validations)\n\t\t\t\t);\n\t\t\t\tthis.form.addControl(input.name, control);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _getValidators = (validations?: IControlValidation[]) => {\n\t\tconst validators: ValidatorFn[] = [];\n\t\tif (!validations) return validators;\n\t\t//Switch case breaks the mobile app so we'll do if statements\n\t\tfor (const validation of validations) {\n\t\t\tconst rule = validation.rule.toLocaleLowerCase();\n\t\t\tif (rule == \"min\") {\n\t\t\t\tvalidation.display = \"Cette valeur est trop petite !\";\n\t\t\t\tvalidators.push(Validators.min(validation.value));\n\t\t\t}\n\t\t\tif (rule == \"max\") {\n\t\t\t\tvalidation.display = \"Cette valeur est trop grande !\";\n\t\t\t\tvalidators.push(Validators.max(validation.value));\n\t\t\t}\n\t\t\tif (rule == \"required\") {\n\t\t\t\tvalidation.display = \"Ce champs est requis !\";\n\t\t\t\tvalidators.push(Validators.required);\n\t\t\t}\n\t\t\tif (rule == \"email\") {\n\t\t\t\tvalidation.display = \"Cette adresse email n'est pas valide !\";\n\t\t\t\tvalidators.push(Validators.email);\n\t\t\t}\n\t\t\tif (rule == \"minlength\") {\n\t\t\t\tvalidation.display = \"Cette valeur est trop petite !\";\n\t\t\t\tvalidators.push(Validators.minLength(validation.value));\n\t\t\t}\n\t\t\tif (rule == \"maxlength\") {\n\t\t\t\tvalidation.display = \"Cette valeur est trop grande !\";\n\t\t\t\tvalidators.push(Validators.maxLength(validation.value));\n\t\t\t}\n\t\t\tif (rule == \"type\") {\n\t\t\t\tvalidation.display = \"Cette valeur n'est pas valide !\";\n\t\t\t\tvalidators.push(type(validation.value));\n\t\t\t}\n\t\t\tif (rule == \"decimal\") {\n\t\t\t\tvalidation.display = `Le nombre de décimal n'est pas valide (max: ${validation.value}) !`;\n\t\t\t\tvalidators.push(decimal(validation.value));\n\t\t\t}\n\t\t\tif (rule == \"maxdate\") {\n\t\t\t\tvalidation.display = `Cette date est trop grande ! (max: ${validation.value}) !`;\n\t\t\t\tvalidators.push(maxDate(validation.value));\n\t\t\t}\n\t\t}\n\t\treturn validators;\n\t};\n}\n","<div class=\"flex flex-col justify-center min-h-5/6 mt-2\">\n <form [formGroup]=\"form\">\n\n <ng-container *ngIf=\"!tabDisplay\" [ngTemplateOutlet]=\"sectionTemplate\"\n [ngTemplateOutletContext]=\"{sections: sections}\">\n </ng-container>\n <ng-container *ngIf=\"tabDisplay\" [ngTemplateOutlet]=\"tabsTemplate\" [ngTemplateOutletContext]=\"{sects: sections}\">\n </ng-container>\n </form>\n</div>\n<ng-template #tabsTemplate let-sections='sects'>\n <fieldset [disabled]=\"disabled\">\n <mat-tab-group>\n @for (section of sections; track section; let index = $index) {\n <mat-tab [label]=\"section.title || 'Étape ' + (index + 1)\">\n <div *ngIf=\"initialized\" class=\"mt-4\"\n [ngClass]=\"compact ? 'grid gap-y-2 gap-x-6 sm:grid-cols-4':'grid gap-y-2 gap-x-6 sm:grid-cols-2'\">\n @for (ctrl of section.controls; track index; let index = $index; let\n last =\n $last)\n {\n <ng-container [ngTemplateOutlet]=\"controlTemplate\"\n [ngTemplateOutletContext]=\"{control: ctrl, index: index, last: $last}\">\n </ng-container>\n }\n </div>\n </mat-tab>\n }\n </mat-tab-group>\n </fieldset>\n</ng-template>\n\n<ng-template #sectionTemplate let-sections='sections'>\n <fieldset [disabled]=\"disabled\">\n @for (section of sections; track section; let index = $index) {\n <div>\n @if (section.title) {\n <h2 class=\"mb-2 font-bold text-xl text-gray-900 dark:text-white\">\n {{ section.title }}\n </h2>\n }\n <div *ngIf=\"initialized\"\n [ngClass]=\"compact ? 'grid gap-y-2 gap-x-6 sm:grid-cols-4':'grid gap-y-2 gap-x-6 sm:grid-cols-2'\">\n @for (control of section.controls; track index; let index = $index; let\n last =\n $last)\n {\n <ng-container [ngTemplateOutlet]=\"controlTemplate\"\n [ngTemplateOutletContext]=\"{control: control, index: index, last: $last}\">\n </ng-container>\n }\n </div>\n @if (index != (sections||[]).length - 1 && !compact) {\n <div class=\"py-4\">\n <hr class=\"\" />\n </div>\n }\n </div>\n }\n </fieldset>\n</ng-template>\n\n<ng-template #controlTemplate let-control='control' let-last='last' let-index='index'>\n <div class=\"relative h-min mt-2\" [formGroup]=\"form\" [ngClass]=\"{\n 'sm:col-span-2': (control.width == 'row' && !compact) || control.type=='textArea' && compact && control.width != 'row',\n 'sm:col-span-4': control.width =='row' && compact,\n }\">\n @if (control.type=='searchSelect') {\n <div app-chr-search-select class=\"relative input z-0 w-full\" id=\"{{ control.name }}_{{ index }}\"\n [ngClass]=\"(form.get([control.name])?.touched && form.get([control.name])?.errors) ? 'error':'border-gray-300 dark:border-gray-600'\"\n [data]=\"control.data || []\" [display]=\"control.fn!\" [name]=\"control.name\" placeholder=\" \"\n [filters]=\"control.filters\" [formControlName]=\"control.name\" [model]=\"getControl(control)\"\n (modelChange)=\"setControl(control, $event)\" (keyup.enter)=\"last ? doSubmit() : ''\">\n <label class=\"label absolute text-sm text-gray-500 dark:text-gray-400\" [for]=\"control.name\">{{\n control.label\n }}\n @if (isControlRequired(control)) {\n <span class=\"text-red-500\">*</span>\n }\n :\n @for (validation of control.validations; track validation) {\n @if (\n form.get([control.name])?.touched &&\n form.hasError(validation.rule.toLowerCase(), control.name)\n ) {\n <mat-error class=\"text-red-500 dark:text-red-800\">{{ validation.display }}</mat-error>\n }\n }\n </label>\n </div>\n }\n <div class=\"relative z-0 w-full group/inputs content\">\n <!-- Here we will *ngIf each type of input cause it's the cleanest way I can imagine-->\n <!--TEXT-->\n @if (control.type == 'text') {\n <input class=\"relative\"\n [ngClass]=\"(form.get([control.name])?.touched && form.get([control.name])?.errors) ? 'error':'border-gray-300 dark:border-gray-600'\"\n type=\"text\" id=\"{{ control.name }}_{{ index }}\" name=\"{{ control.name }}\" [formControlName]=\"control.name\"\n placeholder=\" \" [value]=\"model?.[control.name] || control.value || ''\"\n (valueChange)=\"setControlValue(model, control, $event)\" (keyup.enter)=\"last ? doSubmit() : ''\"\n class=\"block input py-2.5 px-0 w-full text-sm text-gray-900 dark:text-white bg-transparent border-0 border-b-2 appearance-none dark:focus:border-chrlblue focus:outline-none focus:ring-0 focus:border-chrdblue peer/inputs\" />\n }\n <!--PASSWORD-->\n @if (control.type == 'password') {\n <input class=\"relative\"\n [ngClass]=\"(form.get([control.name])?.touched && form.get([control.name])?.errors) ? 'error':'border-gray-300 dark:border-gray-600'\"\n type=\"password\" id=\"{{ control.name }}_{{ index }}\" name=\"{{ control.name }}\" [formControlName]=\"control.name\"\n placeholder=\" \" [value]=\"model?.[control.name] || control.value || ''\"\n (valueChange)=\"setControlValue(model, control, $event)\" (keyup.enter)=\"last ? doSubmit() : ''\"\n class=\"block input py-2.5 px-0 w-full text-sm text-gray-900 dark:text-white bg-transparent border-0 border-b-2 appearance-none dark:border-gray-600 dark:focus:border-chrlblue focus:outline-none focus:ring-0 focus:border-chrdblue peer/inputs\" />\n }\n <!--TEXT AREA-->\n @if (control.type == 'textArea') {\n <textarea #textArea class=\"relative\"\n [ngClass]=\"(form.get([control.name])?.touched && form.get([control.name])?.errors) ? 'error':'border-gray-300 dark:border-gray-600'\"\n id=\"{{ control.name }}_{{ index }}\" name=\"{{ control.name }}\" [formControlName]=\"control.name\" placeholder=\" \"\n [value]=\"model?.[control.name] || control.value || ''\" (valueChange)=\"setControlValue(model, control, $event)\"\n (input)=\"resize(textArea)\" (keyup.enter)=\"last ? doSubmit() : ''\"\n class=\"no-scrollbar input !resize-none height-normalized block py-2 px-0 w-full text-sm text-gray-900 dark:text-white bg-transparent border-0 border-b-2 appearance-none dark:border-gray-600 dark:focus:border-chrlblue focus:outline-none focus:ring-0 focus:border-chrdblue peer/inputs\"></textarea>\n }\n <!--NUMBER-->\n @if (control.type == 'number') {\n <input class=\"relative\"\n [ngClass]=\"(form.get([control.name])?.touched && form.get([control.name])?.errors) ? 'error':'border-gray-300 dark:border-gray-600'\"\n type=\"number\" id=\"{{ control.name }}_{{ index }}\" name=\"{{ control.name }}\" placeholder=\" \"\n [formControlName]=\"control.name\" [value]=\"model?.[control.name] || control.value || 0\"\n (valueChange)=\"setControlValue(model, control, $event)\" (keyup.enter)=\"last ? doSubmit() : ''\"\n class=\"block input py-2.5 px-0 w-full text-sm text-gray-900 dark:text-white bg-transparent border-0 border-b-2 appearance-none dark:border-gray-600 dark:focus:border-chrlblue focus:outline-none focus:ring-0 focus:border-chrdblue peer/inputs\" />\n }\n <!--DATE-->\n @if (control.type == 'date') {\n <input class=\"relative\"\n [ngClass]=\"(form.get([control.name])?.touched && form.get([control.name])?.errors) ? 'error':'border-gray-300 dark:border-gray-600'\"\n type=\"date\" id=\"{{ control.name }}_{{ index }}\" name=\"{{ control.name }}\" [formControlName]=\"control.name\"\n placeholder=\" \" [value]=\"model?.[control.name] || control.value || ''\"\n (valueChange)=\"setControlValue(model, control, $event)\" (keyup.enter)=\"last ? doSubmit() : ''\"\n class=\"block input py-2 px-0 w-full height-normalized text-sm text-gray-900 dark:text-white bg-transparent border-0 border-b-2 appearance-none dark:border-gray-600 dark:focus:border-chrlblue focus:outline-none focus:ring-0 focus:border-chrdblue peer/inputs\" />\n }\n @if (control.type == 'datetime') {\n <input class=\"relative\"\n [ngClass]=\"(form.get([control.name])?.touched && form.get([control.name])?.errors) ? 'error':'border-gray-300 dark:border-gray-600'\"\n type=\"datetime-local\" id=\"{{ control.name }}_{{ index }}\" name=\"{{ control.name }}\"\n [formControlName]=\"control.name\" placeholder=\" \" [value]=\"model?.[control.name] || control.value || ''\"\n (valueChange)=\"setControlValue(model, control, $event)\" (keyup.enter)=\"last ? doSubmit() : ''\"\n class=\"block input py-2 px-0 w-full height-normalized text-sm text-gray-900 dark:text-white bg-transparent border-0 border-b-2 appearance-none dark:border-gray-600 dark:focus:border-chrlblue focus:outline-none focus:ring-0 focus:border-chrdblue peer/inputs\" />\n }\n <!--COLOR-->\n @if (control.type == 'color') {\n <input class=\"relative\"\n [ngClass]=\"(form.get([control.name])?.touched && form.get([control.name])?.errors) ? 'error':'border-gray-300 dark:border-gray-600'\"\n type=\"color\" id=\"{{ control.name }}_{{ index }}\" name=\"{{ control.name }}\" [formControlName]=\"control.name\"\n placeholder=\" \" [value]=\"model?.[control.name] || control.value || ''\"\n (valueChange)=\"setControlValue(model, control, $event)\" (keyup.enter)=\"last ? doSubmit() : ''\"\n style=\"height: 42px;\"\n class=\"block input py-1.5 m-0 px-0 w-full bg-transparent border-0 border-b-2 dark:focus:border-chrlblue focus:outline-none focus:ring-0 focus:border-chrdblue peer/inputs\" />\n }\n @if (control.type == 'toggle'){\n <input #toggle type=\"checkbox\" class=\"hidden checkbox\" [formControlName]=\"control.name\" placeholder=\" \"\n [value]=\"model?.[control.name] || control.value || ''\"\n (valueChange)=\"setControlValue(model, control, $event)\" />\n <div\n class=\"relative toggle-wrapper block input bg-transparent border-0 border-b-2 border-gray-300 dark:focus:border-chrlblue focus:outline-none focus:ring-0 focus:border-chrdblue peer/inputs\">\n <div (click)=\"toggle?.click()\" class=\"relative block input toggle\">\n </div>\n </div>\n }\n @if (control.type != 'searchSelect') {\n <label class=\"label absolute text-sm text-gray-500 dark:text-gray-400\" [for]=\"control.name\">{{\n control.label\n }}\n @if(control.label && control.label != '' && control.label != ' '){\n @if (isControlRequired(control)) {\n <span class=\"text-red-500\">*</span>\n }\n :\n }\n @for (validation of control.validations; track validation) {\n @if (\n form.get([control.name])?.touched &&\n form.hasError(validation.rule.toLowerCase(), control.name)\n ) {\n <mat-error class=\"text-red-500 dark:text-red-800\">{{ validation.display }}</mat-error>\n }\n }\n </label>\n }\n @if (control.icon && !disabled) {\n <span\n [ngClass]=\"control.iconCallbackDisabled ? 'text-gray-400 dark:text-gray-500':'text-gray-900 dark:text-white'\"\n class=\"absolute p-2.5 bottom-0 right-0\" [matTooltip]=\"control.iconTooltip || ''\" matTooltipPosition=\"above\"\n (click)=\"!control.iconCallbackDisabled && control.iconCallback?.(form.get([control.name])?.value)\"><mat-icon\n class=\"flex input justify-center align-middle items-center content-center text-lg\">{{control.icon}}</mat-icon></span>\n }\n </div>\n @if (control.span) {\n <span\n [ngClass]=\"!form.get([control.name])?.errors || !form.get([control.name])?.touched ? 'text-gray-600 dark:text-gray-300' : '!text-red-500 dark:!text-red-800'\"\n class=\"h-0 text-xs\">{{ control.span\n }}</span>\n }\n </div>\n</ng-template>","import {\n\tComponent,\n\tInput,\n\tOutput,\n\tEventEmitter,\n\tChangeDetectionStrategy,\n\tChangeDetectorRef,\n\tOnInit,\n} from \"@angular/core\";\nimport { ValidatorFn, ReactiveFormsModule, FormsModule } from \"@angular/forms\";\nimport {\n\tFormBuilder,\n\tFormGroup,\n\tValidators,\n\tFormControl,\n} from \"@angular/forms\";\nimport { MatError } from \"@angular/material/form-field\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { MatTooltipModule } from \"@angular/material/tooltip\";\nimport { ChrSearchSelectComponent } from \"../chr-search-select/chr-search-select.component\";\nimport { MatSlideToggleModule } from \"@angular/material/slide-toggle\";\nimport {\n\tDatePipe,\n\tCommonModule,\n\tDATE_PIPE_DEFAULT_OPTIONS,\n} from \"@angular/common\";\nimport { MatAutocompleteModule } from \"@angular/material/autocomplete\";\nimport { MatTabsModule } from \"@angular/material/tabs\";\nimport {\n\ttype,\n\tTypeValidatorDirective,\n} from \"../models/chr-validators/type-validator\";\nimport { decimal } from \"../models/chr-validators/decimal-validator\";\nimport { maxDate } from \"../models/chr-validators/max-date-validator\";\n\nexport interface IFormControlCollection {\n\t[key: string]: FormControl;\n}\n\nexport interface ISearchFilter {\n\tdisplay: string;\n\tcallback?: Function;\n\ttooltip?: string;\n}\n\nexport interface IControlValidation {\n\trule: string;\n\tvalue?: any;\n\tdisplay?: string;\n}\n\nexport interface IControl {\n\tlabel?: string;\n\tname: string;\n\tspan?: string;\n\twidth?: \"col\" | \"row\";\n\tcol?: number;\n\trow?: number;\n\ttype:\n\t\t| \"text\"\n\t\t| \"password\"\n\t\t| \"textArea\"\n\t\t| \"number\"\n\t\t| \"date\"\n\t\t| \"datetime\"\n\t\t| \"searchSelect\"\n\t\t| \"color\"\n\t\t| \"toggle\";\n\tvalue?: any;\n\tdata?: any[] | null;\n\ticon?: string;\n\ticonCallback?: Function;\n\ticonCallbackDisabled?: boolean;\n\ticonTooltip?: string;\n\tfn?: (object: any) => string;\n\tfilters?: ISearchFilter[];\n\tvalidations?: IControlValidation[];\n}\n\nexport interface IFormSection {\n\ttitle?: string;\n\tcontrols: IControl[];\n}\n\nexport interface IFormControl {\n\t[key: string]: any;\n}\n@Component({\n\tselector: \"app-chr-form\",\n\ttemplateUrl: \"./chr-form.component.html\",\n\tstyleUrls: [\n\t\t\"./chr-form.component.scss\",\n\t\t\"../../../../../tailwindbuild.css\",\n\t\t\"./chr-form.component.scss\",\n\t],\n\tstandalone: true,\n\timports: [\n\t\tReactiveFormsModule,\n\t\tFormsModule,\n\t\tMatTooltipModule,\n\t\tMatIconModule,\n\t\tMatSlideToggleModule,\n\t\tMatError,\n\t\tChrSearchSelectComponent,\n\t\tMatAutocompleteModule,\n\t\tDatePipe,\n\t\tCommonModule,\n\t\tTypeValidatorDirective,\n\t\tMatTabsModule,\n\t],\n\tproviders: [\n\t\tDatePipe,\n\t\t{\n\t\t\tprovide: DATE_PIPE_DEFAULT_OPTIONS,\n\t\t\tuseValue: { dateFormat: \"shortDate\" },\n\t\t},\n\t],\n\tchangeDetection: ChangeDetectionStrategy.Default,\n})\nexport class ChrFormComponent implements OnInit {\n\t@Input() sections?: IFormSection[];\n\t@Input() controls?: IControl[];\n\n\t@Input() valid?: boolean;\n\t@Output() validChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n\t@Input() model: any = null;\n\t@Output() modelChange: EventEmitter<any> = new EventEmitter<any>();\n\n\t@Input() disabled?: boolean;\n\t@Output() valuesChange: EventEmitter<any> = new EventEmitter();\n\n\t@Input() submit?: Function;\n\n\t@Input() compact: boolean = false;\n\n\t@Output() formChange: EventEmitter<IFormControl> =\n\t\tnew EventEmitter<IFormControl>();\n\n\t@Input() tabDisplay: boolean = false;\n\n\tform: FormGroup = this.builder.group({});\n\n\tprivate values: { [key: string]: any } = {};\n\tprivate controlTypes: { [key: string]: string } = {};\n\tprivate flattenedControls: IControl[] = [];\n\n\tpublic initialized: boolean = false;\n\n\tconstructor(\n\t\tprivate builder: FormBuilder,\n\t\tprivate datePipe: DatePipe,\n\t\tprivate changeDetector: ChangeDetectorRef\n\t) {\n\t\tif (this.controls != null && this.sections != null)\n\t\t\tthrow new Error(\n\t\t\t\t\"You can't use both controls and sections in the same form\"\n\t\t\t);\n\t}\n\n\tngOnInit(): void {\n\t\tthis.flattenedControls =\n\t\t\tthis.sections\n\t\t\t\t?.map((s) => s.controls)\n\t\t\t\t.flat()\n\t\t\t\t.concat(this.controls ?? []) || [];\n\t\tthis.initModel();\n\t\tthis.initValues();\n\t\tthis.initControls();\n\t\tthis.initListeners();\n\t\tthis.initialized = true;\n\t}\n\n\tvalidateSearchSelectValidty = (valid: boolean) => {\n\t\t//this.valid = valid && this.form.valid;\n\t\t//this.validChange.emit(this.valid);\n\t};\n\n\tprivate initModel = () => {\n\t\tif (this.model == null) this.model = {};\n\n\t\tfor (const control of this.flattenedControls) {\n\t\t\tif (!this.model[control.name]) this.model[control.name] = control.value;\n\t\t}\n\t};\n\n\tprivate initValues = () => {\n\t\tfor (const control of this.flattenedControls) {\n\t\t\tif (!this.values[control.name])\n\t\t\t\tthis.values[control.name] = this.toInputValue(\n\t\t\t\t\tcontrol,\n\t\t\t\t\tthis.model[control.name]\n\t\t\t\t);\n\t\t}\n\t};\n\n\tprivate initControls = () => {\n\t\tconst formControls = {} as IFormControlCollection;\n\t\tfor (const control of this.flattenedControls) {\n\t\t\tconst validators = this._getValidators(control.validations);\n\t\t\tformControls[control.name] = new FormControl(\n\t\t\t\tthis.values[control.name],\n\t\t\t\tvalidators\n\t\t\t);\n\t\t\tthis.controlTypes[control.name] = control.type;\n\t\t}\n\n\t\tthis.form = this.builder.group(formControls);\n\t\tthis.valid = this.form.valid;\n\t};\n\n\tprivate initListeners = () => {\n\t\tthis.form.valueChanges.subscribe((values) => {\n\t\t\tfor (const key in values) {\n\t\t\t\tif (values.hasOwnProperty(key)) {\n\t\t\t\t\tthis.model[key] = values[key];\n\t\t\t\t\tthis.values[key] = values[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.valid = this.form.valid;\n\t\t\tthis.validChange.emit(this.valid);\n\t\t\tthis.modelChange.emit(this.model);\n\t\t\tthis.changeDetector.detectChanges();\n\t\t});\n\t};\n\n\tvalue = (input?: string) => this.getValue(input);\n\n\tgetValue = (input?: string) => {\n\t\tif (input) return this.form.controls[input]?.value;\n\t\treturn this.form.value;\n\t};\n\n\tisValid = (input?: string) => {\n\t\tif (input) return this.form.get(input)?.valid;\n\t\treturn this.valid;\n\t};\n\n\tisControlRequired = (control: IControl) => {\n\t\treturn control.validations?.find((v) => v.rule.toLowerCase() == \"required\");\n\t};\n\n\t/**\n\t * Update the value of a control WITHOUT triggering the modelChange event\n\t * @param key input key (control name)\n\t * @param value value to set\n\t * @param dateFormat optional date format for date and datetime inputs\n\t */\n\tsetValue = (key: string, value: any, dateFormat: string | null = null) => {\n\t\tconst val = this.typeToInputValue(this.controlTypes[key], value);\n\t\tthis.form.get(key)?.setValue(val, {\n\t\t\temitEvent: false,\n\t\t\temitViewToModelChange: false,\n\t\t});\n\t\tthis.model[key] = val;\n\t\tthis.changeDetector.detectChanges();\n\t};\n\n\t/**\n\t * Update the value of the form's model WITHOUT triggering the modelChange event\n\t * @param model the model to set\n\t * @param dateFormat optional date format for date and datetime inputs\n\t */\n\tset = (model: any, dateFormat: string | null = null) => {\n\t\tfor (const key of Object.keys(model)) {\n\t\t\tthis.setValue(key, model[key], dateFormat);\n\t\t}\n\t};\n\n\t/**\n\t * Updates the value of a control. This WILL trigger the modelChange event\n\t * @param key input key (control name)\n\t * @param value value to set\n\t * @param dateFormat optional date format for date and datetime inputs\n\t */\n\tpatchValue = (key: string, value: any, dateFormat: string | null = null) => {\n\t\tconst val = this.typeToInputValue(this.controlTypes[key], value);\n\t\tthis.setValue$(key, val);\n\t\tthis.form.get(key)?.updateValueAndValidity();\n\t\tthis.modelChange.emit(this.model);\n\t\tthis.detectChanges();\n\t};\n\n\t/**\n\t * Updates the value of the form's model. This WILL trigger the modelChange event once for each input\n\t * @param model model to set\n\t * @param dateFormat optional date format for date and datetime inputs\n\t */\n\tpatch = (model: any, dateFormat: string | null = null) => {\n\t\tfor (const key of Object.keys(model)) {\n\t\t\tthis.patchValue(key, model[key], dateFormat);\n\t\t}\n\t};\n\n\tcheckValidity = () => {\n\t\tfor (const control of this.flattenedControls) {\n\t\t\tthis.form.get(control.name)?.updateValueAndValidity();\n\t\t}\n\t\tthis.valid = this.form.valid;\n\t\tthis.detectChanges();\n\t};\n\n\tupdateValueAndValidity = (touched: boolean = false) => {\n\t\tthis.form.markAsDirty();\n\t\tif (touched) this.form.markAllAsTouched();\n\t\tthis.form.updateValueAndValidity({ emitEvent: true });\n\t};\n\n\tprivate setValue$ = (key: string, value: any) => {\n\t\tconst val = this.typeToInputValue(this.controlTypes[key], value);\n\t\tthis.form.get(key)?.patchValue(val);\n\t\tthis.values[key] = val;\n\t};\n\n\tprivate toInputValue = (control: IControl, value: any | null = null) => {\n\t\treturn this.typeToInputValue(control.type, value, control.value);\n\t};\n\n\tprivate typeToInputValue = (\n\t\ttype: string,\n\t\tvalue: any | null = null,\n\t\tdefaultValue: any | null = null\n\t) => {\n\t\tswitch (type) {\n\t\t\tcase \"date\":\n\t\t\t\treturn value\n\t\t\t\t\t? this.transformDate(\n\t\t\t\t\t\t\ttypeof value == \"string\" ? new Date(value) : value,\n\t\t\t\t\t\t\t\"yyyy-MM-dd\"\n\t\t\t\t\t )\n\t\t\t\t\t: this.transformDate(defaultValue, \"yyyy-MM-dd\");\n\t\t\tcase \"datetime\":\n\t\t\t\treturn value\n\t\t\t\t\t? this.transformDate(\n\t\t\t\t\t\t\ttypeof value == \"string\" ? new Date(value) : value,\n\t\t\t\t\t\t\t\"yyyy-MM-ddTHH:mm\"\n\t\t\t\t\t )\n\t\t\t\t\t: this.transformDate(defaultValue, \"yyyy-MM-ddTHH:mm\");\n\t\t\tcase \"number\":\n\t\t\t\treturn Number(value);\n\t\t\tcase \"searchSelect\":\n\t\t\t\tif (value !== null && value !== undefined) {\n\t\t\t\t\treturn value!;\n\t\t\t\t} else return null;\n\t\t\tdefault:\n\t\t\t\treturn value || defaultValue;\n\t\t}\n\t};\n\n\tprivate transformDate = (value: any, format: string) => {\n\t\treturn this.datePipe.transform(value, format);\n\t};\n\n\tpublic resize = (textArea: HTMLTextAreaElement) => {\n\t\tconst initialHeight = textArea.style.height;\n\t\ttextArea.style.height = initialHeight;\n\t\ttextArea.style.height = \"\" + textArea.scrollHeight + \"px\";\n\t};\n\n\tpublic doSubmit = () => {\n\t\tthis.form.markAllAsTouched();\n\t\tif (this.valid && this.form.valid) this.submit?.(this.form.value);\n\t};\n\n\tprivate detectChanges = () => {\n\t\tthis.form.markAsDirty();\n\t\tthis.form.updateValueAndValidity({ emitEvent: true });\n\t\tthis.changeDetector.detectChanges();\n\t};\n\n\tprivate _getValidators = (validations?: IControlValidation[]) => {\n\t\tconst validators: ValidatorFn[] = [];\n\t\tif (!validations) return validators;\n\t\t//Switch case breaks the mobile app so we'll do if statements\n\t\tfor (const validation of validations) {\n\t\t\tconst rule = validation.rule.toLocaleLowerCase();\n\t\t\tif (rule == \"min\") {\n\t\t\t\tvalidation.display = \"Cette valeur est trop petite !\";\n\t\t\t\tvalidators.push(Validators.min(validation.value));\n\t\t\t}\n\t\t\tif (rule == \"max\") {\n\t\t\t\tvalidation.display = \"Cette valeur est trop grande !\";\n\t\t\t\tvalidators.push(Validators.max(validation.value));\n\t\t\t}\n\t\t\tif (rule == \"required\") {\n\t\t\t\tvalidation.display = \"Ce champs est requis !\";\n\t\t\t\tvalidators.push(Validators.required);\n\t\t\t}\n\t\t\tif (rule == \"email\") {\n\t\t\t\tvalidation.display = \"Cette adresse email n'est pas valide !\";\n\t\t\t\tvalidators.push(Validators.email);\n\t\t\t}\n\t\t\tif (rule == \"minlength\") {\n\t\t\t\tvalidation.display = \"Cette valeur est trop petite !\";\n\t\t\t\tvalidators.push(Validators.minLength(validation.value));\n\t\t\t}\n\t\t\tif (rule == \"maxlength\") {\n\t\t\t\tvalidation.display = \"Cette valeur est trop grande !\";\n\t\t\t\tvalidators.push(Validators.maxLength(validation.value));\n\t\t\t}\n\t\t\tif (rule == \"type\") {\n\t\t\t\tvalidation.display = \"Cette valeur n'est pas valide !\";\n\t\t\t\tvalidators.push(type(validation.value));\n\t\t\t}\n\t\t\tif (rule == \"decimal\") {\n\t\t\t\tvalidation.display = `Le nombre de décimal n'est pas valide (max: ${validation.value}) !`;\n\t\t\t\tvalidators.push(decimal(validation.value));\n\t\t\t}\n\t\t\tif (rule == \"maxdate\") {\n\t\t\t\tvalidation.display = `Cette date est trop grande ! (max: ${validation.value}) !`;\n\t\t\t\tvalidators.push(maxDate(validation.value));\n\t\t\t}\n\t\t}\n\t\treturn validators;\n\t};\n}\n","<div class=\"flex flex-col justify-center min-h-5/6 mt-2\">\n <form [formGroup]=\"form\" *ngIf=\"initialized\">\n <ng-container *ngIf=\"!tabDisplay || !sections\" [ngTemplateOutlet]=\"singleTemplate\"\n [ngTemplateOutletContext]=\"{controls: controls}\">\n </ng-container>\n <ng-container *ngIf=\"!tabDisplay && sections\" [ngTemplateOutlet]=\"sectionTemplate\"\n [ngTemplateOutletContext]=\"{sections: sections}\">\n </ng-container>\n <ng-container *ngIf=\"tabDisplay && sections\" [ngTemplateOutlet]=\"tabsTemplate\"\n [ngTemplateOutletContext]=\"{sects: sections}\">\n </ng-container>\n </form>\n</div>\n\n<ng-template #tabsTemplate let-sections='sects'>\n <fieldset [disabled]=\"disabled\">\n <mat-tab-group>\n @for (section of sections; track section; let index = $index) {\n <mat-tab [label]=\"section.title || 'Étape ' + (index + 1)\">\n <div *ngIf=\"initialized\" class=\"mt-4\"\n [ngClass]=\"compact ? 'grid gap-y-2 gap-x-6 sm:grid-cols-4':'grid gap-y-2 gap-x-6 sm:grid-cols-2'\">\n @for (ctrl of section.controls; track index; let index = $index; let\n last =\n $last)\n {\n <ng-container [ngTemplateOutlet]=\"controlTemplate\"\n [ngTemplateOutletContext]=\"{control: ctrl, index: index, last: $last}\">\n </ng-container>\n }\n </div>\n </mat-tab>\n }\n </mat-tab-group>\n </fieldset>\n</ng-template>\n\n<ng-template #singleTemplate let-controls=\"controls\">\n <fieldset [disabled]=\"disabled\">\n <div *ngIf=\"initialized\"\n [ngClass]=\"compact ? 'grid gap-y-2 gap-x-6 sm:grid-cols-4':'grid gap-y-2 gap-x-6 sm:grid-cols-2'\">\n @for (control of controls; track control; let index = $index; let last = $last) {\n <ng-container [ngTemplateOutlet]=\"controlTemplate\"\n [ngTemplateOutletContext]=\"{control: control, index: index, last: last}\">\n </ng-container>\n }\n </div>\n\n </fieldset>\n</ng-template>\n\n<ng-template #sectionTemplate let-sections='sections'>\n <fieldset [disabled]=\"disabled\">\n @for (section of sections; track section; let index = $index) {\n <div>\n @if (section.title) {\n <h2 class=\"mb-2 font-bold text-xl text-gray-900 dark:text-white\">\n {{ section.title }}\n </h2>\n }\n <div *ngIf=\"initialized\"\n [ngClass]=\"compact ? 'grid gap-y-2 gap-x-6 sm:grid-cols-4':'grid gap-y-2 gap-x-6 sm:grid-cols-2'\">\n @for (control of section.controls; track index; let index = $index; let\n last =\n $last)\n {\n <ng-container [ngTemplateOutlet]=\"controlTemplate\"\n [ngTemplateOutletContext]=\"{control: control, index: index, last: $last}\">\n </ng-container>\n }\n </div>\n @if (index != (sections||[]).length - 1 && !compact) {\n <div class=\"py-4\">\n <hr class=\"\" />\n </div>\n }\n </div>\n }\n </fieldset>\n</ng-template>\n\n<ng-template #controlTemplate let-control='control' let-last='last' let-index='index'>\n <div class=\"relative h-min mt-2\" [formGroup]=\"form\" [ngClass]=\"{\n 'sm:col-span-2': (control.width == 'row' && !compact) || control.type=='textArea' && compact && control.width != 'row',\n 'sm:col-span-4': control.width =='row' && compact,\n }\">\n @if (control.type=='searchSelect') {\n <div app-chr-search-select class=\"relative input z-0 w-full\" id=\"{{ control.name }}_{{ index }}\"\n [ngClass]=\"(form.get([control.name])?.touched && form.get([control.name])?.errors) ? 'error':'border-gray-300 dark:border-gray-600'\"\n [data]=\"control.data || []\" [display]=\"control.fn!\" [name]=\"control.name\" placeholder=\" \"\n [filters]=\"control.filters\" [formControlName]=\"control.name\" (keyup.enter)=\"last ? doSubmit() : ''\">\n <label class=\"label absolute text-sm text-gray-500 dark:text-gray-400\" [for]=\"control.name\">{{\n control.label\n }}\n @if (isControlRequired(control)) {\n <span class=\"text-red-500\">*</span>\n }\n :\n @for (validation of control.validations; track validation) {\n @if (\n form.get([control.name])?.touched &&\n form.hasError(validation.rule.toLowerCase(), control.name)\n ) {\n <mat-error class=\"text-red-500 dark:text-red-800\">{{ validation.display }}</mat-error>\n }\n }\n </label>\n </div>\n }\n <div class=\"relative z-0 w-full group/inputs content\">\n <!-- Here we will *ngIf each type of input cause it's the cleanest way I can imagine-->\n <!--TEXT-->\n @if (control.type == 'text') {\n <input class=\"relative\"\n [ngClass]=\"(form.get([control.name])?.touched && form.get([control.name])?.errors) ? 'error':'border-gray-300 dark:border-gray-600'\"\n type=\"text\" id=\"{{ control.name }}_{{ index }}\" name=\"{{ control.name }}\" [formControlName]=\"control.name\"\n placeholder=\" \" [value]=\"model?.[control.name] || control.value || ''\" (keyup.enter)=\"last ? doSubmit() : ''\"\n class=\"block input py-2.5 px-0 w-full text-sm text-gray-900 dark:text-white bg-transparent border-0 border-b-2 appearance-none dark:focus:border-chrlblue focus:outline-none focus:ring-0 focus:border-chrdblue peer/inputs\" />\n }\n <!--PASSWORD-->\n @if (control.type == 'password') {\n <input class=\"relative\"\n [ngClass]=\"(form.get([control.name])?.touched && form.get([control.name])?.errors) ? 'error':'border-gray-300 dark:border-gray-600'\"\n type=\"password\" id=\"{{ control.name }}_{{ index }}\" name=\"{{ control.name }}\" [formControlName]=\"control.name\"\n placeholder=\" \" (keyup.enter)=\"last ? doSubmit() : ''\"\n class=\"block input py-2.5 px-0 w-full text-sm text-gray-900 dark:text-white bg-transparent border-0 border-b-2 appearance-none dark:border-gray-600 dark:focus:border-chrlblue focus:outline-none focus:ring-0 focus:border-chrdblue peer/inputs\" />\n }\n <!--TEXT AREA-->\n @if (control.type == 'textArea') {\n <textarea #textArea class=\"relative\"\n [ngClass]=\"(form.get([control.name])?.touched && form.get([control.name])?.errors) ? 'error':'border-gray-300 dark:border-gray-600'\"\n id=\"{{ control.name }}_{{ index }}\" name=\"{{ control.name }}\" [formControlName]=\"control.name\" placeholder=\" \"\n (input)=\"resize(textArea)\" (keyup.enter)=\"last ? doSubmit() : ''\"\n class=\"no-scrollbar input !resize-none height-normalized block py-2 px-0 w-full text-sm text-gray-900 dark:text-white bg-transparent border-0 border-b-2 appearance-none dark:border-gray-600 dark:focus:border-chrlblue focus:outline-none focus:ring-0 focus:border-chrdblue peer/inputs\"></textarea>\n }\n <!--NUMBER-->\n @if (control.type == 'number') {\n <input class=\"relative\"\n [ngClass]=\"(form.get([control.name])?.touched && form.get([control.name])?.errors) ? 'error':'border-gray-300 dark:border-gray-600'\"\n type=\"number\" id=\"{{ control.name }}_{{ index }}\" name=\"{{ control.name }}\" placeholder=\" \"\n [formControlName]=\"control.name\" (keyup.enter)=\"last ? doSubmit() : ''\"\n class=\"block input py-2.5 px-0 w-full text-sm text-gray-900 dark:text-white bg-transparent border-0 border-b-2 appearance-none dark:border-gray-600 dark:focus:border-chrlblue focus:outline-none focus:ring-0 focus:border-chrdblue peer/inputs\" />\n }\n <!--DATE-->\n @if (control.type == 'date') {\n <input class=\"relative\"\n [ngClass]=\"(form.get([control.name])?.touched && form.get([control.name])?.errors) ? 'error':'border-gray-300 dark:border-gray-600'\"\n type=\"date\" id=\"{{ control.name }}_{{ index }}\" name=\"{{ control.name }}\" [formControlName]=\"control.name\"\n placeholder=\" \" (keyup.enter)=\"last ? doSubmit() : ''\"\n class=\"block input py-2 px-0 w-full height-normalized text-sm text-gray-900 dark:text-white bg-transparent border-0 border-b-2 appearance-none dark:border-gray-600 dark:focus:border-chrlblue focus:outline-none focus:ring-0 focus:border-chrdblue peer/inputs\" />\n }\n @if (control.type == 'datetime') {\n <input class=\"relative\"\n [ngClass]=\"(form.get([control.name])?.touched && form.get([control.name])?.errors) ? 'error':'border-gray-300 dark:border-gray-600'\"\n type=\"datetime-local\" id=\"{{ control.name }}_{{ index }}\" name=\"{{ control.name }}\"\n [formControlName]=\"control.name\" placeholder=\" \" (keyup.enter)=\"last ? doSubmit() : ''\"\n class=\"block input py-2 px-0 w-full height-normalized text-sm text-gray-900 dark:text-white bg-transparent border-0 border-b-2 appearance-none dark:border-gray-600 dark:focus:border-chrlblue focus:outline-none focus:ring-0 focus:border-chrdblue peer/inputs\" />\n }\n <!--COLOR-->\n @if (control.type == 'color') {\n <input class=\"relative\"\n [ngClass]=\"(form.get([control.name])?.touched && form.get([control.name])?.errors) ? 'error':'border-gray-300 dark:border-gray-600'\"\n type=\"color\" id=\"{{ control.name }}_{{ index }}\" name=\"{{ control.name }}\" [formControlName]=\"control.name\"\n placeholder=\" \" (keyup.enter)=\"last ? doSubmit() : ''\" style=\"height: 42px;\"\n class=\"block input py-1.5 m-0 px-0 w-full bg-transparent border-0 border-b-2 dark:focus:border-chrlblue focus:outline-none focus:ring-0 focus:border-chrdblue peer/inputs\" />\n }\n @if (control.type == 'toggle'){\n <input #toggle type=\"checkbox\" class=\"hidden checkbox\" [formControlName]=\"control.name\" placeholder=\" \" />\n <div\n class=\"relative toggle-wrapper block input bg-transparent border-0 border-b-2 border-gray-300 dark:focus:border-chrlblue focus:outline-none focus:ring-0 focus:border-chrdblue peer/inputs\">\n <div (click)=\"toggle?.click()\" class=\"relative block input toggle\">\n </div>\n </div>\n }\n @if (control.type != 'searchSelect') {\n <label class=\"label absolute text-sm text-gray-500 dark:text-gray-400\" [for]=\"control.name\">{{\n control.label\n }}\n @if(control.label && control.label != '' && control.label != ' '){\n @if (isControlRequired(control)) {\n <span class=\"text-red-500\">*</span>\n }\n :\n }\n @for (validation of control.validations; track validation) {\n @if (\n form.get([control.name])?.touched &&\n form.hasError(validation.rule.toLowerCase(), control.name)\n ) {\n <mat-error class=\"text-red-500 dark:text-red-800\">{{ validation.display }}</mat-error>\n }\n }\n </label>\n }\n @if (control.icon && !disabled) {\n <span\n [ngClass]=\"control.iconCallbackDisabled ? 'text-gray-400 dark:text-gray-500':'text-gray-900 dark:text-white'\"\n class=\"absolute p-2.5 bottom-0 right-0\" [matTooltip]=\"control.iconTooltip || ''\" matTooltipPosition=\"above\"\n (click)=\"!control.iconCallbackDisabled && control.iconCallback?.(form.get([control.name])?.value)\"><mat-icon\n class=\"flex input justify-center align-middle items-center content-center text-lg\">{{control.icon}}</mat-icon></span>\n }\n </div>\n @if (control.span) {\n <span\n [ngClass]=\"!form.get([control.name])?.errors || !form.get([control.name])?.touched ? 'text-gray-600 dark:text-gray-300' : '!text-red-500 dark:!text-red-800'\"\n class=\"h-0 text-xs\">{{ control.span\n }}</span>\n }\n </div>\n</ng-template>","import { Component, Input, Output, EventEmitter } from \"@angular/core\";\nimport { FormControl, ReactiveFormsModule } from \"@angular/forms\";\n\n@Component({\n\tselector: \"app-chr-searchbar\",\n\ttemplateUrl: \"./chr-searchbar.component.html\",\n\tstyleUrls: [\n\t\t\"./chr-searchbar.component.scss\",\n\t\t\"../../../../../tailwindbuild.css\",\n\t],\n\tstandalone: true,\n\timports: [ReactiveFormsModule],\n})\nexport class ChrSearchbarComponent {\n\t@Input() model?: string | null;\n\t@Output() modelChange: EventEmitter<string> = new EventEmitter();\n\t@Input() placeholder?: string | null;\n\t@Input() label?: string | null;\n\tpublic searchBy = new FormControl<string>(\"\");\n\n\tconstructor() {\n\t\tthis.searchBy.valueChanges.subscribe((value) => this.emit(value));\n\t}\n\n\temit(event: any) {\n\t\tthis.modelChange.emit(event);\n\t}\n}\n","<div class=\"w-full relative z-0 group/inputs\">\n <input matInput [formControl]=\"searchBy\" placeholder=\" \" type=\"text\"\n class=\"block py-2.5 px-0 w-full text-sm text-gray-900 dark:text-white bg-transparent border-0 border-b-2 border-gray-300 appearance-none dark:border-gray-600 dark:focus:border-chrlblue focus:outline-none focus:ring-0 focus:border-chrdblue peer/inputs\" />\n <label\n class=\"peer/inputs-focus:font-medium absolute text-sm text-gray-500 dark:text-gray-400 duration-300 transform -translate-y-6 scale-75 top-3 -z-10 origin-[0] peer-focus/inputs:start-0 rtl:peer-focus/inputs:translate-x-1/4 rtl:peer-focus/inputs:left-auto peer-focus/inputs:text-chrdblue peer-focus/inputs:dark:text-chrlblue 0 peer-placeholder-shown/inputs:scale-100 peer-placeholder-shown/inputs:translate-y-0 peer-focus/inputs:scale-75 peer-focus/inputs:-translate-y-6\">{{\n label\n }}\n <!--\n @for (validation of control.validations; track validation) {\n @if (\n control?.touched &&\n form.hasError(validation.rule.toLowerCase(), name)\n ) {\n <mat-error class=\"text-red-500 dark:text-red-800\">{{ validation.display }}</mat-error>\n }\n }\n -->\n </label>\n</div>","import {\n\tAfterContentChecked,\n\tChangeDetectorRef,\n\tComponent,\n\tEventEmitter,\n\tInput,\n\tOnChanges,\n\tOnInit,\n\tOutput,\n\tSimpleChanges,\n} from \"@angular/core\";\nimport { PaginationInstance, PaginationService } from \"ngx-pagination\";\nimport { NgClass, CommonModule } from \"@angular/common\";\nimport { ChrFormComponent } from \"../chr-form/chr-form.component\";\nimport { MatIconModule } from \"@angular/material/icon\";\n\n@Component({\n\tselector: \"app-chr-paginator\",\n\ttemplateUrl: \"./chr-paginator.component.html\",\n\tstyleUrls: [\n\t\t\"./chr-paginator.component.scss\",\n\t\t\"../../../../../tailwindbuild.css\",\n\t],\n\tstandalone: true,\n\timports: [ChrFormComponent, CommonModule, MatIconModule],\n})\nexport class ChrPaginatorComponent implements OnInit, AfterContentChecked {\n\tprivate _page: number | null = null;\n\tprivate _pageSize: number | null = null;\n\t@Input()\n\tget page() {\n\t\treturn this._page || 1;\n\t}\n\tset page(value: number) {\n\t\tthis._page = value;\n\t\tthis.pageChange.emit(value);\n\t\tthis.changeDetector.markForCheck();\n\t\tthis.changeDetector.detectChanges();\n\t}\n\n\t@Output() pageChange: EventEmitter<number> = new EventEmitter<number>();\n\n\t@Input()\n\tget pageSize() {\n\t\treturn this._pageSize || 20;\n\t}\n\tset pageSize(value: number) {\n\t\tthis._pageSize = value;\n\t\tthis.pageSizeChange.emit(value);\n\t\tthis.changeDetector.markForCheck();\n\t\tthis.changeDetector.detectChanges();\n\t}\n\n\t@Output() pageSizeChange: EventEmitter<number> = new EventEmitter<number>();\n\n\t@Input() id: string | undefined = \"chr_base-data-table\";\n\n\t@Input() allowSizeChange: boolean | string = \"true\";\n\n\tinstance?: PaginationInstance;\n\n\tconstructor(\n\t\tpublic service: PaginationService,\n\t\tprivate changeDetector: ChangeDetectorRef\n\t) {}\n\n\tngAfterContentChecked(): void {\n\t\tthis.instance = this.service.getInstance(\n\t\t\t`${this.id}`\n\t\t) as PaginationInstance;\n\t}\n\n\tngOnInit(): void {}\n\n\tpublic previous = () => {\n\t\tif (this.isFirstPage()) return;\n\t\tthis.page--;\n\t\tthis.pageChange.emit(this.page);\n\t\t//this.emit();\n\t};\n\n\tpublic next = () => {\n\t\tif (this.isLastPage()) return;\n\t\tthis.page += 1;\n\t\tthis.pageChange.emit(this.page);\n\t\t//this.emit();\n\t};\n\n\tpublic setPage = (page: number) => {\n\t\tif (page < 1 || page > this.lastPage()) return;\n\t\tthis.page = page;\n\t\tthis.emit();\n\t};\n\n\tpublic setPageEventHandler = (event: any) => {\n\t\treturn this.setPage(event.target.value);\n\t};\n\n\tpublic isFirstPage = () => {\n\t\treturn this.page == 1;\n\t};\n\n\tpublic setPageSize = (pageSize: number) => {\n\t\tthis.setPage(1);\n\t\tif (this.instance) this.instance.itemsPerPage = pageSize;\n\t\tthis.pageSizeChange.emit(pageSize);\n\t};\n\n\tpublic setPageSizeEventHandler = (event: any) => {\n\t\treturn this.setPageSize(event.target.value);\n\t};\n\n\tpublic isLastPage = () => {\n\t\tif (!this.instance?.totalItems) return false;\n\t\treturn (\n\t\t\tthis.page >=\n\t\t\tMath.ceil(this.instance.totalItems / this.instance.itemsPerPage)\n\t\t);\n\t};\n\n\t// public pageSize = () => this.instance.itemsPerPage;\n\n\tpublic lastPage = () =>\n\t\tthis.instance?.totalItems\n\t\t\t? Math.ceil(this.instance.totalItems / this.instance.itemsPerPage)\n\t\t\t: 1;\n\n\tprivate emit = (page: number | undefined = undefined) => {\n\t\tif (!page) this.pageChange.emit(this.page);\n\t\telse this.pageChange.emit(page);\n\t};\n}\n","<div class=\"flex flex-row justify-between dark:text-gray-400\">\n <div class=\"flex flex-row justify-start py-2 items-center content-center\">\n @if (allowSizeChange === true || allowSizeChange == 'true') {\n <div class=\"w-40\">\n <app-chr-form id=\"table-paginator-form\" (keyup.enter)=\"setPageSizeEventHandler($event)\" [sections]=\"[\n { \n controls: [\n {\n label:'Éléments par page',\n type: 'number',\n name: 'pageSize',\n value: pageSize,\n width: 'row',\n icon: 'check',\n iconCallback: setPageSize,\n iconTooltip: 'Cliquez ici pour mettre à jour la taille de la table'\n }]\n }]\">\n </app-chr-form>\n </div>\n }\n </div>\n <div class=\"flex flex-row justify-end py-2 items-center content-center \">\n <button type=\"button\" (click)=\"previous()\" [ngClass]=\"isFirstPage() ? 'cursor-not-allowed':'cursor-pointer'\"\n class=\"w-fit flex justify-center align-middle items-center\"><mat-icon>arrow_left</mat-icon></button>\n\n <div class=\"flex flex-row items-center content-center mx-2 w-fit\">\n {{page}} / {{lastPage()}}\n </div>\n <button type=\"button\" [ngClass]=\"!isLastPage() ? 'cursor-pointer' : 'cursor-not-allowed'\"\n (click)=\"!isLastPage() && next()\"\n class=\"w-fit flex justify-center align-middle items-center\"><mat-icon>arrow_right</mat-icon></button>\n </div>\n</div>","import {\n\tComponent,\n\tInput,\n\tOutput,\n\tEventEmitter,\n\tDirective,\n} from \"@angular/core\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { NgClass } from \"@angular/common\";\n/**\n * This should only be used as a directive\n */\n@Component({\n\tselector: \"app-chr-table-header-cell, [app-chr-table-header-cell]\",\n\ttemplateUrl: \"./chr-table-header-cell.component.html\",\n\tstyleUrls: [\n\t\t\"./chr-table-header-cell.component.scss\",\n\t\t\"../../../../../tailwindbuild.css\",\n\t],\n\tstandalone: true,\n\timports: [NgClass, MatIcon],\n})\nexport class ChrTableHeaderCellComponent {\n\t@Input() display?: string;\n\t@Input() column?: string;\n\t@Input() alignment?: string;\n\t@Input() isAsc: boolean = true;\n\t@Output() isAscChange: EventEmitter<boolean> = new EventEmitter();\n\t@Input() sortBy?: string;\n\t@Output() sortByChange: EventEmitter<string> = new EventEmitter();\n\n\torderBy = (column?: string) => {\n\t\tif (!this.sortBy) this.sortBy = column;\n\n\t\tif (this.sortBy == column) {\n\t\t\tthis.isAsc = !this.isAsc;\n\t\t\tthis.sortBy = column;\n\t\t\tthis.isAscChange.emit(this.isAsc);\n\t\t\tthis.sortByChange.emit(this.sortBy);\n\t\t} else {\n\t\t\tthis.isAsc = true;\n\t\t\tthis.sortBy = column;\n\t\t\tthis.isAscChange.emit(this.isAsc);\n\t\t\tthis.sortByChange.emit(this.sortBy);\n\t\t}\n\t};\n}\n","<div class=\"relative w-full cursor-pointer flex flex-row align-middle self-center\" [ngClass]=\"\n alignment == 'left' ? 'justify-start' : \n alignment == 'center' ? 'justify-center' : \n alignment == 'right' ? 'justify-end' : \n 'justify-left'\" (click)=\"orderBy(column)\">\n <p>{{ display }}</p>\n @if (sortBy) {\n <div class=\"absolute right-3 top-0 h-0 w-0\">\n @if (sortBy == column && isAsc) {\n <mat-icon>arrow_upward</mat-icon>\n }\n @if (sortBy == column && !isAsc) {\n <mat-icon>arrow_downward</mat-icon>\n }\n </div>\n }\n</div>\n<ng-content></ng-content>","import * as moment from \"moment\";\nimport {\n\tComponent,\n\tInput,\n\tAfterViewInit,\n\tEventEmitter,\n\tOutput,\n\tChangeDetectorRef,\n} from \"@angular/core\";\nimport { ChrPaginatorComponent } from \"../chr-paginator/chr-paginator.component\";\nimport { ChrButtonComponent } from \"../chr-button/chr-button.component\";\nimport { ChrTableHeaderCellComponent } from \"../chr-table-header-cell/chr-table-header-cell.component\";\nimport { SortPipe } from \"chrv-pipes\";\nimport { NgxPaginationModule } from \"ngx-pagination\";\nimport {\n\tCommonModule,\n\tDATE_PIPE_DEFAULT_OPTIONS,\n\tDatePipe,\n} from \"@angular/common\";\nimport { callback } from \"chart.js/dist/helpers/helpers.core\";\n\nexport interface IColumn {\n\tdisplay: string;\n\talignment?: \"left\" | \"center\" | \"right\";\n\tchipsTarget?: string[];\n\tchipsDisplay?: string[];\n\tchipsCallback?: Function;\n\tproperties?: string[];\n\tcallback?: Function;\n\tdate?: string;\n\tisLink?: boolean;\n\tlinkStaticUrl?: string;\n}\n\nexport interface IComputedRow {\n\tcolumns: IComputedColumn[];\n}\n\nexport interface IComputedColumn {\n\tlabel?: string;\n\tvalue?: any;\n\tcallback?: Function;\n\talignment?: \"left\" | \"center\" | \"right\";\n\tafter?: string;\n}\n\nexport interface IAction {\n\tdisplay?: string;\n\ticon?: string;\n\tcallback: Function;\n\tdisabled?: boolean;\n\tdisabledCallback?: Function;\n\tcolor: \"primary\" | \"accent\" | \"warn\" | \"alert\" | \"darkeraccent\" | \"none\";\n}\n\n@Component({\n\tselector: \"app-chr-table, [app-chr-table]\",\n\ttemplateUrl: \"./chr-table.component.html\",\n\tstyleUrls: [\"./chr-table.component.scss\", \"../../../../../tailwindbuild.css\"],\n\tstandalone: true,\n\timports: [\n\t\tChrTableHeaderCellComponent,\n\t\tChrButtonComponent,\n\t\tChrPaginatorComponent,\n\t\tSortPipe,\n\t\tNgxPaginationModule,\n\t\tCommonModule,\n\t\tDatePipe,\n\t],\n\tproviders: [\n\t\tDatePipe,\n\t\t{\n\t\t\tprovide: DATE_PIPE_DEFAULT_OPTIONS,\n\t\t\tuseValue: { dateFormat: \"shortDate\" },\n\t\t},\n\t],\n})\nexport class ChrTableComponent implements AfterViewInit {\n\t@Input() computedRows?: IComputedRow[];\n\t@Input() columns?: IColumn[];\n\t@Input() data: any[] | null = [];\n\t@Input() actions?: IAction[];\n\n\t@Input() isAsc: boolean = true;\n\t@Output() isAscChange: EventEmitter<boolean> = new EventEmitter();\n\t@Input() sortBy?: string;\n\t@Output() sortByChange: EventEmitter<string> = new EventEmitter();\n\n\t@Input() pageSize: number = 50;\n\t@Output() pageSizeChange: EventEmitter<number> = new EventEmitter();\n\n\t@Input() id?: string = \"chr_base-data-table\";\n\n\t@Input() color: \"primary\" | \"accent\" | \"warn\" | \"alert\" | \"darkeraccent\" =\n\t\t\"accent\";\n\n\t@Input() textColor:\n\t\t| \"primary\"\n\t\t| \"accent\"\n\t\t| \"warn\"\n\t\t| \"alert\"\n\t\t| \"darkeraccent\"\n\t\t| \"white\"\n\t\t| \"black\" = \"black\";\n\n\tprivate _page: number = 1;\n\t@Input()\n\tget currentPage() {\n\t\treturn this._page;\n\t}\n\tset currentPage(value: number) {\n\t\tthis._page = value;\n\t\tthis.currentPageChange.emit(value);\n\t\tthis.changeDetector.markForCheck();\n\t\tthis.changeDetector.detectChanges();\n\t}\n\t@Output() currentPageChange: EventEmitter<number> = new EventEmitter();\n\n\tcurrentProperty: any | null = null;\n\tcurrentText: string | null = null;\n\n\tconstructor(\n\t\tprivate _date: DatePipe,\n\t\tprivate changeDetector: ChangeDetectorRef\n\t) {}\n\n\tngAfterViewInit(): void {}\n\n\temitIsAsc(isAsc: any) {\n\t\tthis.isAscChange.emit(isAsc);\n\t}\n\n\temitSortBy(sortBy: any) {\n\t\tthis.sortByChange.emit(sortBy);\n\t}\n\n\temitPageSize(pageSize: any) {\n\t\tthis.pageSize = pageSize;\n\t\tthis.pageSizeChange.emit(pageSize);\n\t}\n\n\temitCurrentPage(currentPage: any) {\n\t\tthis.currentPage = currentPage;\n\t\tthis.currentPageChange.emit(currentPage);\n\t}\n\n\tgetProperty = (entry: any, properties?: any[]) => {\n\t\tthis.currentProperty = null;\n\t\tthis.currentText = null;\n\n\t\tif (!properties) {\n\t\t\tthis.currentProperty = entry;\n\t\t\treturn entry;\n\t\t}\n\t\tlet value = entry;\n\t\tfor (const i of properties) {\n\t\t\tvalue = (value as any)?.[i];\n\t\t}\n\t\tthis.currentProperty = value;\n\t\treturn value;\n\t};\n\n\tgetText = (property: any, column: IColumn) => {\n\t\tlet text = null;\n\n\t\tif (column.callback) text = column.callback(property);\n\n\t\tif (text == null && column.date)\n\t\t\ttext = this._date.transform(property, column.date);\n\n\t\tthis.currentText = text || property;\n\n\t\treturn text || property;\n\t\t// column.date\n\t\t// ? column.callback\n\t\t// \t? column.callback(property)\n\t\t// \t: (property | date : column.date)\n\t\t// : column.callback\n\t\t// \t? column.callback(property)\n\t\t// \t: property\n\t};\n\n\tgetIsAsc = () => {\n\t\treturn this.isAsc;\n\t};\n\n\tgetSortBy = () => {\n\t\treturn this.sortBy;\n\t};\n}\n","<div class=\"h-full no-scrollbar\">\n <ng-content class=\"mt-5\"></ng-content>\n <div class=\"flex flex-col flex-1 overflow-auto no-scrollbar\">\n @if (data) {\n <table\n class=\"table-auto border dark:border-none relative flex flex-row flex-no-wrap w-full rounded-lg sm:shadow-lg bg-transparent no-scrollbar\">\n <thead class=\"text-black\">\n @if (data.length <= 0) { <tr\n class=\"bg-chr-{{color}} chr-{{textColor}} flex flex-col flex-no wrap sm:table-row rounded-lg mb-2 sm:mb-0\">\n @for (column of columns; track column) {\n <th app-chr-table-header-cell class=\"p-3 h-14\" display=\"{{ column.display }}\" column=\"{{ column.properties }}\"\n [(isAsc)]=\"isAsc\" (isAscChange)=\"emitIsAsc($event)\" [(sortBy)]=\"sortBy\" (sortByChange)=\"emitSortBy($event)\">\n </th>\n }\n @if (actions) {\n <th\n class=\"h-14 p-3 text-left sm:text-center place-content-center place-items-center items-center align-middle sm:w-0\">\n Actions\n </th>\n }\n </tr>\n }\n @for (entry of data |\n sort:isAsc:sortBy | paginate: {itemsPerPage: pageSize, currentPage: currentPage, id: this.id}; track entry)\n {\n <tr\n class=\"bg-chr-{{color}} chr-{{textColor}} flex flex-col flex-no wrap sm:table-row rounded-lg mb-2 sm:mb-0 \">\n @for (column of columns; track column) {\n <th app-chr-table-header-cell class=\"p-3 h-14\" display=\"{{ column.display }}\"\n column=\"{{ column.properties }}\" [(isAsc)]=\"isAsc\" alignment=\"{{column.alignment}}\"\n (isAscChange)=\"emitIsAsc($event)\" [(sortBy)]=\"sortBy\" (sortByChange)=\"emitSortBy($event)\"></th>\n }\n @if (actions) {\n <th\n class=\"h-14 p-3 text-left sm:text-center place-content-center place-items-center items-center align-middle self-center sm:w-0\">\n Actions\n </th>\n }\n </tr>\n }\n </thead>\n <tbody class=\"w-full\">\n @if (data.length <= 0) { <tr\n class=\"flex flex-col flex-no-wrap sm:table-row rounded-lg mb-0 sm:mb-2 dark:bg-slate-600\">\n <td class=\"p-3 h-14\">Pas de donnée(s)</td>\n @for (column of columns | slice: 1; track column) {\n <td class=\"p-3 h-14\"></td>\n }\n @if (actions) {\n <td class=\"p-3 h-14 grid gap-3 justify-center align-middle items-center\"\n [ngClass]=\"actions.length > 1 ? 'grid-cols-2' : 'grid-cols-1'\"></td>\n }\n </tr>\n }\n @for (entry of data |\n sort:isAsc:sortBy | paginate: {itemsPerPage: pageSize, currentPage: currentPage, id: this.id}; track\n entry; let i = $index) {\n <tr [attr.data-index]=\"i\"\n class=\"flex flex-col flex-no-wrap sm:table-row mb-2 sm:mb-0 dark:text-gray-400 dark:bg-slate-600 sm:odd:bg-gray-200 sm:dark:odd:bg-slate-700 sm:border-t-2 border-chr-{{color}} sm:first:border-0\">\n @for (column of columns; track column;) {\n <td [ngClass]=\"\n column.chipsTarget || column.chipsDisplay\n ? ''\n : ''\n \" class=\"p-3 h-14 text-ellipsis border-t-2 first:border-0 sm:first:border-t-2 border-chr-{{color}}\">\n <ng-container [ngTemplateOutlet]=\"default\"\n [ngTemplateOutletContext]=\"{prop: getProperty(entry, column.properties), column: column}\">\n </ng-container>\n </td>\n }\n\n <ng-template #default let-column='column' let-property=\"prop\">\n @if (column.isLink) {\n <a target=\"_blank\" class=\"text-{{column.alignment}}\" href=\"{{column.linkStaticUrl}}{{\n getText(property, column)\n }}\">\n {{\n currentText\n }}\n </a>\n }\n @if (!column.isLink) {\n <div class=\"flex flex-row\" [ngClass]=\"{\n 'justify-start': column.alignment == 'left',\n 'justify-center': column.alignment == 'center',\n 'justify-end': column.alignment == 'right',\n 'gap-2': column.chipsDisplay && getText(property, column)\n }\">\n @if (column.chipsTarget || column.chipsDisplay) {\n <div>\n <ng-container\n [ngTemplateOutlet]=\"column.chipsCallback ? (column.chipsCallback(entry) ? OK : NOK) : (getProperty(entry, column.chipsTarget) ? OK : NOK)\">\n </ng-container>\n <ng-template #OK>\n <span\n class=\"w-24 flex text-center content-center align-middle items-center justify-center bg-green-100 text-green-800 text-xs font-medium py-0.5 rounded-full dark:bg-green-900 dark:text-green-300\">{{\n column.chipsDisplay && column.chipsDisplay[0] }}</span>\n </ng-template>\n <ng-template #NOK>\n <span\n class=\"w-24 flex text-center content-center align-middle items-center justify-center bg-red-100 text-red-800 text-xs font-medium py-0.5 rounded-full dark:bg-red-900 dark:text-red-300\">{{\n column.chipsDisplay && column.chipsDisplay[1] }}</span>\n </ng-template>\n </div>\n }@else {\n <p class=\"inline-block overflow-hidden text-nowrap text-ellipsis\">\n {{\n currentText || getText(property, column)\n }}\n </p>\n }\n </div>\n }\n </ng-template>\n\n @if (actions) {\n <td class=\"p-3 h-14 flex gap-2 w-full sm:w-min justify-center\">\n @for (action of actions; track action) {\n <app-chr-button class=\"w-full\" [disabled]=\"\n action.disabledCallback\n ? action.disabledCallback(entry)\n : action.disabled || false\n \" [display]=\"action.display\" [icon]=\"action.icon\" [click]=\"action.callback.bind(null, entry, i)\"\n [color]=\"action.color\" type=\"responsive\">\n </app-chr-button>\n }\n </td>\n }\n </tr>\n }\n @for (r of computedRows; track r) {\n <tr\n class=\"flex flex-col flex-no-wrap sm:table-row mb-2 sm:mb-0 dark:text-gray-400 dark:bg-slate-600 sm:odd:bg-gray-200 sm:dark:odd:bg-slate-700\">\n @for (c of r.columns; track c) {\n <td [ngClass]=\"c.alignment && 'text-'+(c.alignment||'left')\" class=\"p-3 h-14\">\n {{c.label && c.label + ':'}} {{c.value || (c.callback && c.callback(data))}} {{c.after}}\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n <app-chr-paginator [id]=\"this.id\" [(pageSize)]=\"pageSize\" [(page)]=\"currentPage\"\n (pageSizeChange)=\"emitPageSize($event)\" (pageChange)=\"emitCurrentPage($event)\"></app-chr-paginator>\n }\n </div>\n</div>","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\nimport { MatIcon } from \"@angular/material/icon\";\n\n@Component({\n\tselector: \"app-chr-checkbox\",\n\ttemplateUrl: \"./chr-checkbox.component.html\",\n\tstyleUrls: [\n\t\t\"./chr-checkbox.component.scss\",\n\t\t\"../../../../../tailwindbuild.css\",\n\t],\n\tstandalone: true,\n\timports: [MatIcon],\n})\nexport class ChrCheckboxComponent {\n\tpublic checked: boolean = false;\n\n\t@Input() type: \"info\" | \"success\" = \"info\";\n\n\t@Input() disabled: boolean = false;\n\n\t@Output() change: EventEmitter<{ checked: boolean }> = new EventEmitter<{\n\t\tchecked: boolean;\n\t}>();\n\n\tcheck(end: boolean) {\n\t\tif (this.disabled) return;\n\t\tif (end) {\n\t\t\tthis.checked = true;\n\t\t\tthis.change.emit({ checked: true });\n\t\t} else {\n\t\t\tthis.checked = false;\n\t\t\tthis.change.emit({ checked: false });\n\t\t}\n\t}\n}\n","<div>\n @if (checked) {\n <div (click)=\"check(false)\" [class.info]=\"type=='info'&&!disabled\"\n [class.bg-green-100]=\"type=='success'&&!disabled\" [class.cursor-pointer]=\"!disabled\"\n [class.bg-grey-400]=\"disabled\"\n class=\"box-border rounded-lg p-3 h-12 text-center border-bottom-accent sm:border-none\">\n <div class=\"flex justify-center items-center\"><mat-icon>check-circle</mat-icon></div>\n </div>\n }\n @if (!checked) {\n <div (click)=\"check(true)\" [class.cursor-pointer]=\"!disabled\" [class.disabled]=\"disabled\"\n [class.bg-gray-200]=\"disabled\" [class.bg-red-100]=\"!disabled\"\n class=\"box-border p-3 h-12 text-center rounded-lg border-bottom-accent sm:border-none\">\n <div class=\"flex justify-center items-center\"><mat-icon>close</mat-icon></div>\n </div>\n }\n</div>","import { Component } from \"@angular/core\";\n\n@Component({\n\tselector: \"app-chr-separator\",\n\ttemplateUrl: \"./chr-separator.component.html\",\n\tstyleUrls: [\n\t\t\"./chr-separator.component.scss\",\n\t\t\"../../../../../tailwindbuild.css\",\n\t],\n\tstandalone: true,\n})\nexport class ChrSeparatorComponent {}\n","<div class=\"py-4\">\n <hr class=\"\" />\n</div>","export interface ILiveUpdateMessage {\r\n\tstatus: LiveUpdateStatus;\r\n\tmessage?: string | null;\r\n}\r\n\r\nexport enum LiveUpdateStatus {\r\n\tInfo,\r\n\tWarning,\r\n\tError,\r\n\tEnd,\r\n}\r\n\r\nexport const DEFAULTLIVEUPDATEMESSAGE: ILiveUpdateMessage = {\r\n\tstatus: LiveUpdateStatus.Info,\r\n\tmessage: \"Chargement...\",\r\n};\r\n\r\nexport const DefaultLiveUpdateMessage = DEFAULTLIVEUPDATEMESSAGE;\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class LoaderService {\r\n private is_loading: boolean = false;\r\n private is_loading$ = new BehaviorSubject<boolean>(this.is_loading);\r\n\r\n constructor() {}\r\n\r\n setLoading = (is: boolean) => {\r\n this.is_loading = is;\r\n this.is_loading$.next(this.is_loading);\r\n };\r\n\r\n isLoading = () => {\r\n return this.is_loading;\r\n };\r\n\r\n isLoadingAsync = () => {\r\n return this.is_loading$.asObservable();\r\n };\r\n}\r\n","import { Injectable, inject } from \"@angular/core\";\r\nimport {\r\n\tHttpErrorResponse,\r\n\tHttpEvent,\r\n\tHttpHandler,\r\n\tHttpInterceptor,\r\n\tHttpInterceptorFn,\r\n\tHttpRequest,\r\n\tHttpResponse,\r\n} from \"@angular/common/http\";\r\nimport { catchError, Observable, throwError, tap } from \"rxjs\";\r\nimport { finalize } from \"rxjs/operators\";\r\nimport { LoaderService } from \"../../services/loader.service\";\r\n\r\nexport const SpinnerInterceptor: HttpInterceptorFn = (req, next) => {\r\n\tconst loader: LoaderService = inject(LoaderService);\r\n\tlet requestStackSize = 0;\r\n\r\n\tif (req.headers.get(\"skip\") == \"true\") {\r\n\t\treq = req.clone({ headers: req.headers.delete(\"skip\") });\r\n\t\treturn next(req);\r\n\t}\r\n\treq = req.clone({ headers: req.headers.delete(\"skip\") });\r\n\trequestStackSize++;\r\n\tloader.setLoading(true);\r\n\treturn next(req).pipe(\r\n\t\ttap((data) => {\r\n\t\t\tif (data instanceof HttpResponse) {\r\n\t\t\t\t//Do something\r\n\t\t\t}\r\n\t\t}),\r\n\t\tfinalize(() => {\r\n\t\t\trequestStackSize--;\r\n\t\t\tif (requestStackSize == 0) {\r\n\t\t\t\tloader.setLoading(false);\r\n\t\t\t}\r\n\t\t})\r\n\t);\r\n};\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Observable, of, tap, Subject, BehaviorSubject } from \"rxjs\";\r\n\r\n@Injectable({\r\n\tprovidedIn: \"root\",\r\n})\r\nexport class DataService {\r\n\tprivate data = new Map<string, BehaviorSubject<any>>();\r\n\tprivate syncData: { [key: string]: any } = {};\r\n\tconstructor() {}\r\n\r\n\tset = (key: string, value: any): void => {\r\n\t\tconst data = this.data.get(key);\r\n\t\tif (!data) this.data.set(key, new BehaviorSubject(value));\r\n\t\telse data.next(value);\r\n\r\n\t\tthis.syncData[key] = value;\r\n\t};\r\n\r\n\tget = (key: string): Observable<any> => {\r\n\t\tconst data = this.data.get(key);\r\n\t\tif (!data) this.data.set(key, new BehaviorSubject(null));\r\n\t\treturn this.data.get(key)!;\r\n\t};\r\n\r\n\tgetSync = (key: string): any => {\r\n\t\treturn this.syncData[key];\r\n\t};\r\n\r\n\tclear = (key: string): void => {\r\n\t\treturn this.data.get(key)?.next(null);\r\n\t};\r\n\r\n\tremove = (key: string): boolean => {\r\n\t\treturn this.data.delete(key);\r\n\t};\r\n}\r\n","import { inject } from \"@angular/core\";\r\nimport {\r\n\tHttpContextToken,\r\n\tHttpEvent,\r\n\tHttpInterceptorFn,\r\n\tHttpResponse,\r\n} from \"@angular/common/http\";\r\nimport { finalize, Observable, tap } from \"rxjs\";\r\nimport { LiveUpdateService } from \"../../services/live-update.service\";\r\nimport { XSRFCOOKIENAME, XSRFHEADERNAME } from \"../providers/xsrf-provider\";\r\nimport { DataService } from \"../../services/data.service\";\r\n\r\nexport const XsrfInterceptor: HttpInterceptorFn = (req, next) => {\r\n\tconst headerName: string = inject(XSRFHEADERNAME);\r\n\r\n\tconst liveUpdateService: LiveUpdateService = inject(LiveUpdateService);\r\n\tconst dataService: DataService = inject(DataService);\r\n\r\n\tconst csrfToken = dataService.getSync(headerName);\r\n\r\n\tconst hasCsrfToken = csrfToken !== null && csrfToken !== undefined;\r\n\tconst shouldIntercept = [\"PUT\", \"POST\", \"DELETE\"].includes(req.method);\r\n\tconst isWebSocket = req.url.includes(liveUpdateService.getHubUrl());\r\n\r\n\tif (hasCsrfToken && shouldIntercept && !isWebSocket) {\r\n\t\tconst cloned = req.clone({\r\n\t\t\theaders: req.headers.set(headerName, csrfToken),\r\n\t\t});\r\n\r\n\t\tliveUpdateService.initConnection().subscribe();\r\n\t\treturn next(cloned).pipe(\r\n\t\t\tWaitAndStoreXsrfToken(headerName, dataService),\r\n\t\t\tfinalize(() => liveUpdateService.closeConnection().subscribe())\r\n\t\t);\r\n\t} else {\r\n\t\treturn next(req).pipe(WaitAndStoreXsrfToken(headerName, dataService));\r\n\t}\r\n};\r\n\r\nexport const WaitAndStoreXsrfToken = (\r\n\theadername: string,\r\n\tdataService: DataService\r\n) => {\r\n\treturn (source: Observable<HttpEvent<any>>) => {\r\n\t\treturn source.pipe(\r\n\t\t\ttap((event) => {\r\n\t\t\t\tif (event instanceof HttpResponse) {\r\n\t\t\t\t\tconst xsrfToken = event.headers.get(headername);\r\n\t\t\t\t\tif (xsrfToken) {\r\n\t\t\t\t\t\tdataService.set(headername, xsrfToken);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn event;\r\n\t\t\t})\r\n\t\t);\r\n\t};\r\n};\r\n","import {\r\n\tHttpFeature,\r\n\tHttpInterceptorFn,\r\n\tprovideHttpClient,\r\n\twithInterceptors,\r\n\twithXsrfConfiguration,\r\n} from \"@angular/common/http\";\r\nimport { InjectionToken } from \"@angular/core\";\r\nimport { SpinnerInterceptor } from \"../interceptors/SpinnerInterceptor\";\r\nimport { XsrfInterceptor } from \"../interceptors/XsrfInterceptor\";\r\n\r\nexport interface IXsrfProviderParams {\r\n\txsrfHeader: string;\r\n\txsrfCookie: string;\r\n\thubUrl?: string;\r\n\tinterceptors?: HttpInterceptorFn[];\r\n\tfeatures?: HttpFeature<any>[];\r\n}\r\n\r\nexport const provideXsrfHttpClient = (params: IXsrfProviderParams): any[] => {\r\n\treturn [\r\n\t\t{ provide: XSRFHEADERNAME, useValue: params.xsrfHeader },\r\n\t\t{\r\n\t\t\tprovide: XSRFCOOKIENAME,\r\n\t\t\tuseValue: params.xsrfCookie || params.xsrfHeader,\r\n\t\t},\r\n\t\t{ provide: HUBURL, useValue: params.hubUrl },\r\n\t\tprovideHttpClient(\r\n\t\t\twithInterceptors([\r\n\t\t\t\tSpinnerInterceptor,\r\n\t\t\t\tXsrfInterceptor,\r\n\t\t\t\t...(params?.interceptors || []),\r\n\t\t\t]),\r\n\t\t\twithXsrfConfiguration({\r\n\t\t\t\theaderName: params.xsrfHeader,\r\n\t\t\t\tcookieName: params.xsrfHeader,\r\n\t\t\t}),\r\n\t\t\t...(params?.features || [])\r\n\t\t),\r\n\t];\r\n};\r\n\r\nexport const XSRFHEADERNAME = new InjectionToken<string>(\"xsrfHeader\");\r\nexport const XSRFCOOKIENAME = new InjectionToken<string>(\"xsrfCookie\");\r\nexport const HUBURL = new InjectionToken<string>(\"hubUrl\");\r\n","import { Inject, Injectable, Optional } from \"@angular/core\";\r\nimport {\r\n\tBehaviorSubject,\r\n\tdelay,\r\n\tfilter,\r\n\tfrom,\r\n\tObservable,\r\n\tReplaySubject,\r\n\tskipWhile,\r\n\tswitchMap,\r\n\ttap,\r\n\ttimer,\r\n} from \"rxjs\";\r\nimport {\r\n\tHttpClient,\r\n\tHttpTransportType,\r\n\tHubConnection,\r\n\tHubConnectionBuilder,\r\n\tHubConnectionState,\r\n\tIHttpConnectionOptions,\r\n\tLogLevel,\r\n} from \"@microsoft/signalr\";\r\nimport {\r\n\tDEFAULTLIVEUPDATEMESSAGE,\r\n\tILiveUpdateMessage,\r\n\tLiveUpdateStatus,\r\n} from \"../models/live-update-message\";\r\nimport { XSRFHEADERNAME, HUBURL } from \"../config/providers/xsrf-provider\";\r\nimport { DataService } from \"./data.service\";\r\n\r\n@Injectable({\r\n\tprovidedIn: \"root\",\r\n})\r\nexport class LiveUpdateService {\r\n\tprivate _hubUrl: string;\r\n\tprivate _connection: HubConnection | null = null;\r\n\tprivate _xsrf: string | null;\r\n\tprivate _xsrfHeader: string | null;\r\n\t//private _client: HttpClient;\r\n\tprivate _message: BehaviorSubject<ILiveUpdateMessage> = new BehaviorSubject(\r\n\t\tDEFAULTLIVEUPDATEMESSAGE\r\n\t);\r\n\tprivate _update: BehaviorSubject<string> = new BehaviorSubject(\r\n\t\tDEFAULTLIVEUPDATEMESSAGE?.message || \"\"\r\n\t);\r\n\r\n\tconstructor(\r\n\t\t@Inject(HUBURL) @Optional() hubUrl: string,\r\n\t\t@Inject(XSRFHEADERNAME) @Optional() xsrfHeader: string,\r\n\t\t@Inject(DataService) private dataService: DataService\r\n\t) {\r\n\t\tthis._hubUrl = hubUrl;\r\n\t\tthis._xsrfHeader = xsrfHeader;\r\n\t\tthis._xsrf = dataService.getSync(this._xsrfHeader);\r\n\t}\r\n\r\n\tpublic initConnection = (): Observable<void> => {\r\n\t\tif (this._xsrfHeader == null) throw new Error(\"xsrfHeader is not set\");\r\n\t\tif (this._hubUrl == null) throw new Error(\"hubUrl is not set\");\r\n\r\n\t\tthis._xsrf = this.dataService.getSync(this._xsrfHeader);\r\n\t\tif (this._connection == null)\r\n\t\t\tthis._connection = new HubConnectionBuilder()\r\n\t\t\t\t.withUrl(this._hubUrl, {\r\n\t\t\t\t\ttransport: HttpTransportType.ServerSentEvents,\r\n\t\t\t\t\theaders: { [this._xsrfHeader]: this._xsrf },\r\n\t\t\t\t} as IHttpConnectionOptions)\r\n\t\t\t\t.configureLogging(LogLevel.None)\r\n\t\t\t\t.withAutomaticReconnect()\r\n\t\t\t\t.build();\r\n\r\n\t\treturn new Observable<void>((observer) => {\r\n\t\t\tif (this._connection?.state == HubConnectionState.Connected)\r\n\t\t\t\tthis._connection;\r\n\t\t\telse\r\n\t\t\t\tthis._connection\r\n\t\t\t\t\t?.start()\r\n\t\t\t\t\t.then(() => {\r\n\t\t\t\t\t\tobserver.next();\r\n\t\t\t\t\t\tobserver.complete();\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch((error: any) => {\r\n\t\t\t\t\t\tobserver.error(error);\r\n\t\t\t\t\t});\r\n\r\n\t\t\tthis._connection?.on(\"UPDATE\", (message: ILiveUpdateMessage) => {\r\n\t\t\t\tthis.pushMessage(message);\r\n\t\t\t});\r\n\t\t});\r\n\t};\r\n\r\n\tpublic onUpdate(): Observable<string> {\r\n\t\treturn this._update\r\n\t\t\t.asObservable()\r\n\t\t\t.pipe(skipWhile((message) => message == null));\r\n\t}\r\n\r\n\tpublic closeConnection(): Observable<void> {\r\n\t\treturn from(this._connection!.stop()).pipe(\r\n\t\t\ttap(() => {\r\n\t\t\t\tthis._connection = null;\r\n\r\n\t\t\t\t//We push a null to flush the observable\r\n\t\t\t\tthis._message.next(DEFAULTLIVEUPDATEMESSAGE);\r\n\t\t\t\tthis._update.next(DEFAULTLIVEUPDATEMESSAGE?.message || \"\");\r\n\t\t\t})\r\n\t\t);\r\n\t}\r\n\r\n\tpublic getMessage(): Observable<ILiveUpdateMessage> {\r\n\t\treturn this._message\r\n\t\t\t.asObservable()\r\n\t\t\t.pipe(skipWhile((message) => message == null));\r\n\t}\r\n\r\n\tpublic getHubUrl = (): string => this._hubUrl;\r\n\r\n\tprivate pushMessage(message: ILiveUpdateMessage) {\r\n\t\tthis._message.next(message);\r\n\t\tthis._update.next(\r\n\t\t\tmessage?.message || DEFAULTLIVEUPDATEMESSAGE?.message || \"\"\r\n\t\t);\r\n\t\tif (message.status === LiveUpdateStatus.End) {\r\n\t\t\tthis._connection?.stop();\r\n\t\t}\r\n\t}\r\n}\r\n","import {\r\n\tChangeDetectionStrategy,\r\n\tChangeDetectorRef,\r\n\tComponent,\r\n\tOnDestroy,\r\n\tOnInit,\r\n} from \"@angular/core\";\r\n\r\nimport { CommonModule } from \"@angular/common\";\r\nimport {\r\n\ttap,\r\n\tpipe,\r\n\tObservable,\r\n\ttakeUntil,\r\n\tBehaviorSubject,\r\n\tskipWhile,\r\n\ttakeWhile,\r\n\tfinalize,\r\n} from \"rxjs\";\r\nimport {\r\n\tDefaultLiveUpdateMessage,\r\n\tILiveUpdateMessage,\r\n\tLiveUpdateStatus,\r\n} from \"../models/live-update-message\";\r\nimport { LoaderService } from \"../services/loader.service\";\r\nimport { LiveUpdateService } from \"../services/live-update.service\";\r\n\r\n@Component({\r\n\tselector: \"app-chr-spinner\",\r\n\ttemplateUrl: \"./chr-spinner.component.html\",\r\n\tstyleUrls: [\"./chr-spinner.component.scss\"],\r\n\timports: [CommonModule],\r\n\tstandalone: true,\r\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ChrSpinnerComponent implements OnInit {\r\n\tpublic message: ILiveUpdateMessage = DefaultLiveUpdateMessage;\r\n\r\n\tconstructor(\r\n\t\tpublic loader: LoaderService,\r\n\t\tpublic liveUpdate: LiveUpdateService,\r\n\t\tprivate changeDetector: ChangeDetectorRef\r\n\t) {}\r\n\r\n\tngOnInit() {\r\n\t\tthis.liveUpdate\r\n\t\t\t.getMessage()\r\n\t\t\t.pipe(\r\n\t\t\t\tfinalize(() => {\r\n\t\t\t\t\tthis.message = DefaultLiveUpdateMessage;\r\n\t\t\t\t\tconsole.error(\r\n\t\t\t\t\t\t\"Observable closed. This should not happen as further live update messages won't be received.\"\r\n\t\t\t\t\t);\r\n\t\t\t\t})\r\n\t\t\t)\r\n\t\t\t.subscribe((res) => {\r\n\t\t\t\tthis.message = res;\r\n\t\t\t\tthis.changeDetector.detectChanges();\r\n\t\t\t});\r\n\t\tthis.loader.isLoadingAsync().subscribe((res) => {\r\n\t\t\tthis.changeDetector.detectChanges();\r\n\t\t});\r\n\t}\r\n\r\n\tdisplay = (message: ILiveUpdateMessage | null) => {\r\n\t\treturn message?.message;\r\n\t\t//return `${message?.status} \\n\\n ${message?.message}`;\r\n\t};\r\n}\r\n","@if (this.loader.isLoading()) {\r\n<div\r\n class=\"cssload-container flex flex-col justify-center content-center items-center bg-gray-200 dark:bg-slate-600 opacity-85\">\r\n <div class=\"wheel-wrapper\">\r\n <div class=\"cssload-speeding-wheel\">\r\n </div>\r\n </div>\r\n <div class=\"w-96 inset-full h-0 text-ellipsis text-wrap text-center\">\r\n {{display((message))}}\r\n </div>\r\n</div>\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { Observable, Subject, timer, BehaviorSubject } from \"rxjs\";\r\nimport { concatMap, finalize, switchMap, takeUntil } from \"rxjs/operators\";\r\n\r\nexport interface Toast {\r\n\ttype: \"error\" | \"success\" | \"warning\";\r\n\tmessage: string;\r\n\tduration?: number;\r\n}\r\n\r\n@Injectable({\r\n\tprovidedIn: \"root\",\r\n})\r\nexport class ToastService {\r\n\tprivate toastQueue = new Subject<Toast>();\r\n\tprivate currentToastSubject = new BehaviorSubject<Toast | null>(null);\r\n\tpublic currentToast$ = this.currentToastSubject.asObservable();\r\n\tprivate toastCloseSubject = new Subject<void>();\r\n\tprivate default_duration = 5000;\r\n\r\n\tconstructor() {\r\n\t\t//We are leveraging the power of RXJS to handle the delay between the\r\n\t\tthis.toastQueue\r\n\t\t\t.pipe(\r\n\t\t\t\tconcatMap((toast: Toast) => {\r\n\t\t\t\t\t//We reset the click subject to ensure rxjs doesn't beleive it's been clicked\r\n\t\t\t\t\tthis.toastCloseSubject = new Subject<void>();\r\n\t\t\t\t\t// We send the next toast\r\n\t\t\t\t\tthis.currentToastSubject.next(toast);\r\n\t\t\t\t\treturn timer(toast.duration || this.default_duration).pipe(\r\n\t\t\t\t\t\t//If the user click the next button, we stop the current emission and go to the next one\r\n\t\t\t\t\t\ttakeUntil(this.toastCloseSubject),\r\n\t\t\t\t\t\t//After the toast duration, we send a null value. If there is still a toast waiting, this null value will be overriden after the small delay.\r\n\t\t\t\t\t\t//Otherwise this null value allows us to notify the subscriber that there is no toast waiting.\r\n\t\t\t\t\t\tfinalize(() => {\r\n\t\t\t\t\t\t\tthis.currentToastSubject.next(null);\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t//Small delay between toasts\r\n\t\t\t\t\t\tswitchMap(() => timer(500))\r\n\t\t\t\t\t);\r\n\t\t\t\t})\r\n\t\t\t)\r\n\t\t\t.subscribe();\r\n\t}\r\n\r\n\tpublic current = (): Observable<Toast | null> => {\r\n\t\treturn this.currentToastSubject;\r\n\t};\r\n\r\n\tpublic next = () => {\r\n\t\tthis.toastCloseSubject.next();\r\n\t};\r\n\r\n\tpublic setSuccess(message?: string, time?: number) {\r\n\t\tthis.set(\"success\", message || \"\", time);\r\n\t}\r\n\r\n\tpublic setError(message: string, time?: number) {\r\n\t\tthis.set(\"error\", message, time);\r\n\t}\r\n\r\n\tpublic setWarning(message: string, time?: number) {\r\n\t\tthis.set(\"warning\", message, time);\r\n\t}\r\n\r\n\tprivate set = async (\r\n\t\ttype: \"warning\" | \"error\" | \"success\",\r\n\t\tmessage: string,\r\n\t\tduration?: number\r\n\t) => {\r\n\t\tthis.toastQueue.next({\r\n\t\t\ttype: type,\r\n\t\t\tmessage: message,\r\n\t\t\tduration: duration || this.default_duration,\r\n\t\t});\r\n\t};\r\n}\r\n","import { Component, Input } from \"@angular/core\";\r\nimport { MatIconModule } from \"@angular/material/icon\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { ToastService } from \"../services/toast.service\";\r\n\r\n@Component({\r\n\tselector: \"app-chr-toast\",\r\n\tstandalone: true,\r\n\timports: [CommonModule, MatIconModule],\r\n\ttemplateUrl: \"./chr-toast.component.html\",\r\n\tstyleUrl: \"./chr-toast.component.scss\",\r\n})\r\nexport class ChrToastComponent {\r\n\t@Input() topmargin = \"0px\";\r\n\tpublic constructor(public toastService: ToastService) {}\r\n}\r\n","<div *ngIf=\"(toastService.current() | async); let toast;\" class=\"toast flex h-0\" style=\"--margin-top: {{topmargin}};\">\r\n <div class=\"toast-sticky-wrapper\">\r\n <div class=\"toast-content p-2\" [ngClass]=\"{\r\n 'chr-medium-blue':toast?.type == 'success',\r\n 'chr-orange':toast?.type == 'warning',\r\n 'chr-warn':toast?.type == 'error'\r\n }\" style=\"cursor: default;\">\r\n <mat-icon class=\"toast-status-icon\">icon</mat-icon>\r\n <p class=\"toast-message\">{{toast?.message}}</p>\r\n <mat-icon class=\"toast-close-icon\" style=\"cursor: pointer;\" (click)=\"toastService.next()\">close</mat-icon>\r\n </div>\r\n </div>\r\n</div>","import { Injectable } from \"@angular/core\";\r\nimport { MatDialog, MatDialogConfig } from \"@angular/material/dialog\";\r\nimport { ChrDeleteModalComponent } from \"../chr-delete-modal/chr-delete-modal.component\";\r\n\r\n@Injectable({\r\n\tprovidedIn: \"root\",\r\n})\r\nexport class DialogService {\r\n\tconstructor(private dialog: MatDialog) {}\r\n\r\n\topenDelete = (callback?: Function, callbackElement?: any) => {\r\n\t\tconst dialogRef = this.open(ChrDeleteModalComponent);\r\n\r\n\t\tdialogRef.afterClosed().subscribe((result) => {\r\n\t\t\tif (result == true) callback?.(callbackElement);\r\n\t\t});\r\n\t};\r\n\r\n\topen = (component: any, options?: MatDialogConfig<any> | undefined) => {\r\n\t\treturn this.dialog.open(component, options);\r\n\t};\r\n}\r\n","/*\n * Public API Surface of chr-components\n */\n//COMPONENTS\nexport * from \"./lib/chr-breadcrumb/chr-breadcrumb.component\";\nexport * from \"./lib/chr-button/chr-button.component\";\nexport * from \"./lib/chr-delete-modal/chr-delete-modal.component\";\nexport { ChrFormComponentLegacy } from \"./lib/chr-form-legacy/chr-form-legacy.component\";\nexport * from \"./lib/chr-form/chr-form.component\";\nexport * from \"./lib/chr-search-select/chr-search-select.component\";\nexport * from \"./lib/chr-searchbar/chr-searchbar.component\";\nexport * from \"./lib/chr-paginator/chr-paginator.component\";\nexport * from \"./lib/chr-table/chr-table.component\";\nexport * from \"./lib/chr-table-header-cell/chr-table-header-cell.component\";\nexport * from \"./lib/chr-checkbox/chr-checkbox.component\";\nexport * from \"./lib/chr-separator/chr-separator.component\";\nexport * from \"./lib/models/chr-validators/decimal-validator\";\nexport * from \"./lib/models/chr-validators/max-date-validator\";\nexport * from \"./lib/models/chr-validators/type-validator\";\nexport * from \"./lib/chr-spinner/chr-spinner.component\";\nexport * from \"./lib/chr-toast/chr-toast.component\";\n//SERVICES\nexport * from \"./lib/services/dialog.service\";\nexport * from \"./lib/services/data.service\";\nexport * from \"./lib/services/live-update.service\";\nexport * from \"./lib/services/loader.service\";\nexport * from \"./lib/services/toast.service\";\n//MODELS\nexport * from \"./lib/models/live-update-message\";\n//INTERCEPTORS\nexport * from \"./lib/config/interceptors/SpinnerInterceptor\";\nexport * from \"./lib/config/interceptors/XsrfInterceptor\";\n//PROVIDERS\nexport * from \"./lib/config/providers/xsrf-provider\";\n//OTHERS\nexport * from \"ngx-pagination\";\nexport * from \"chrv-pipes\";\nexport * from \"@angular/material/dialog\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3","i4","finalize","i1.LoaderService","i2.LiveUpdateService","i1.ToastService"],"mappings":"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"}
1
+ {"version":3,"file":"chrv-components.mjs","sources":["../../../projects/chrv-components/src/lib/chr-breadcrumb/chr-breadcrumb.component.ts","../../../projects/chrv-components/src/lib/chr-breadcrumb/chr-breadcrumb.component.html","../../../projects/chrv-components/src/lib/chr-button/chr-button.component.ts","../../../projects/chrv-components/src/lib/chr-button/chr-button.component.html","../../../projects/chrv-components/src/lib/chr-delete-modal/chr-delete-modal.component.ts","../../../projects/chrv-components/src/lib/chr-delete-modal/chr-delete-modal.component.html","../../../projects/chrv-components/src/lib/models/chr-validators/type-validator.ts","../../../projects/chrv-components/src/lib/models/chr-validators/decimal-validator.ts","../../../projects/chrv-components/src/lib/models/chr-validators/max-date-validator.ts","../../../projects/chrv-components/src/lib/chr-search-select/chr-search-select.component.ts","../../../projects/chrv-components/src/lib/chr-search-select/chr-search-select.component.html","../../../projects/chrv-components/src/lib/chr-form-legacy/chr-form-legacy.component.ts","../../../projects/chrv-components/src/lib/chr-form-legacy/chr-form-legacy.component.html","../../../projects/chrv-components/src/lib/chr-form/chr-form.component.ts","../../../projects/chrv-components/src/lib/chr-form/chr-form.component.html","../../../projects/chrv-components/src/lib/chr-searchbar/chr-searchbar.component.ts","../../../projects/chrv-components/src/lib/chr-searchbar/chr-searchbar.component.html","../../../projects/chrv-components/src/lib/chr-paginator/chr-paginator.component.ts","../../../projects/chrv-components/src/lib/chr-paginator/chr-paginator.component.html","../../../projects/chrv-components/src/lib/chr-table-header-cell/chr-table-header-cell.component.ts","../../../projects/chrv-components/src/lib/chr-table-header-cell/chr-table-header-cell.component.html","../../../projects/chrv-components/src/lib/chr-table/chr-table.component.ts","../../../projects/chrv-components/src/lib/chr-table/chr-table.component.html","../../../projects/chrv-components/src/lib/chr-checkbox/chr-checkbox.component.ts","../../../projects/chrv-components/src/lib/chr-checkbox/chr-checkbox.component.html","../../../projects/chrv-components/src/lib/chr-separator/chr-separator.component.ts","../../../projects/chrv-components/src/lib/chr-separator/chr-separator.component.html","../../../projects/chrv-components/src/lib/models/live-update-message.ts","../../../projects/chrv-components/src/lib/services/loader.service.ts","../../../projects/chrv-components/src/lib/config/interceptors/SpinnerInterceptor.ts","../../../projects/chrv-components/src/lib/services/data.service.ts","../../../projects/chrv-components/src/lib/config/interceptors/XsrfInterceptor.ts","../../../projects/chrv-components/src/lib/config/providers/xsrf-provider.ts","../../../projects/chrv-components/src/lib/services/live-update.service.ts","../../../projects/chrv-components/src/lib/chr-spinner/chr-spinner.component.ts","../../../projects/chrv-components/src/lib/chr-spinner/chr-spinner.component.html","../../../projects/chrv-components/src/lib/services/toast.service.ts","../../../projects/chrv-components/src/lib/chr-toast/chr-toast.component.ts","../../../projects/chrv-components/src/lib/chr-toast/chr-toast.component.html","../../../projects/chrv-components/src/lib/services/dialog.service.ts","../../../projects/chrv-components/src/public-api.ts","../../../projects/chrv-components/src/chrv-components.ts"],"sourcesContent":["import { Component, Input } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { MatButton } from \"@angular/material/button\";\n\nexport interface Breadcrumb {\n\tdisplay: string;\n\tlink?: string;\n\tcallback?: Function;\n}\n\n@Component({\n\tselector: \"app-chr-breadcrumb\",\n\ttemplateUrl: \"./chr-breadcrumb.component.html\",\n\tstyleUrls: [\n\t\t\"./chr-breadcrumb.component.scss\",\n\t\t\"../../../../../tailwindbuild.css\",\n\t],\n\tstandalone: true,\n\timports: [MatButton],\n})\nexport class BreadcrumbComponent {\n\t@Input() crumbs?: Breadcrumb[];\n\n\tconstructor(public router: Router) {}\n\n\tnavigateTo = (uri: string, data?: any) => {\n\t\tthis.router.navigate([uri], { state: data });\n\t};\n}\n","<div class=\"w-full flex flex-row flex-wrap dark:!text-gray-400\">\n @for (crumb of crumbs; track crumb) {\n <div class=\"w-fit min-w-fit\">\n <button class=\"dark:!text-gray-400\" [disabled]=\"!crumb.link && !crumb.callback\" mat-button\n (click)=\"crumb.callback?.() || crumb.link && navigateTo(crumb.link)\">\n {{ crumb.display }}\n </button>\n {{ (crumb.link || crumb.callback) && \">\" }}\n </div>\n }\n</div>","import { Component, Input } from \"@angular/core\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { MatTooltipModule } from \"@angular/material/tooltip\";\nimport { MatButtonModule, MatFabButton } from \"@angular/material/button\";\nimport { CommonModule } from \"@angular/common\";\n\n@Component({\n\tselector: \"app-chr-button\",\n\ttemplateUrl: \"./chr-button.component.html\",\n\tstyleUrls: [\n\t\t\"./chr-button.component.scss\",\n\t\t\"../../../../../tailwindbuild.css\",\n\t],\n\tstandalone: true,\n\timports: [\n\t\tMatTooltipModule,\n\t\tMatIconModule,\n\t\tMatButtonModule,\n\t\tCommonModule,\n\t\tMatFabButton,\n\t],\n})\nexport class ChrButtonComponent {\n\t@Input() display?: string = \"\";\n\t@Input() icon?: string = \"\";\n\t@Input() click?: Function;\n\t@Input() color:\n\t\t| \"primary\"\n\t\t| \"accent\"\n\t\t| \"warn\"\n\t\t| \"alert\"\n\t\t| \"darkeraccent\"\n\t\t| \"none\" = \"none\";\n\t@Input() textColor?: \"white\" | \"black\" | string = undefined;\n\t@Input() predicate?: boolean = true;\n\t@Input() type: \"responsive\" | \"table\" | \"full\" | \"fixed\" | \"small\" | \"none\" =\n\t\t\"none\";\n\t@Input() href?: string;\n\t@Input() target?: \"_blank\" | \"_parent\" | \"_self\" | \"_top\";\n\t@Input() disabled: boolean = false;\n\t@Input() tooltip?: string;\n\t@Input() tooltipPosition?:\n\t\t| \"above\"\n\t\t| \"below\"\n\t\t| \"left\"\n\t\t| \"right\"\n\t\t| \"before\"\n\t\t| \"after\";\n\n\tconstructor() {}\n\n\tsetDisabled = (is: boolean) => {\n\t\tthis.disabled = is;\n\t};\n\n\tdoClick = () => {\n\t\tthis.click?.();\n\t};\n}\n","@if (predicate) {\n@if(display){\n<a mat-button mat-flat-button [disabled]=\"disabled\" style=\"--textcolor: {{textColor}};\" class=\"flex h-9 m-0 p-0 sm:w-36\"\n [ngClass]=\"{\n 'pointer-events-none cursor-none' : disabled,\n 'w-36': type=='fixed',\n 'w-full': type=='full',\n 'w-min': type=='table',\n 'w-full sm:w-36' : type=='responsive',\n 'chr-button': textColor !== undefined\n }\" color=\"{{ color }}\" (click)=\"click?.()\" [attr.href]=\"href && href\" [attr.target]=\"target && target\"\n [matTooltip]=\"tooltip||''\" [matTooltipPosition]=\"tooltipPosition||'above'\">\n {{ display }}\n @if (icon) {\n <mat-icon class=\"!m-0\">{{ icon }}</mat-icon>\n }\n</a>\n}\n@if(!display && icon){\n<a mat-raised-button class=\"chr-button flex small-button\" style=\"--textcolor: {{textColor}};\" [ngClass]=\"{\n '!pointer-events-none !cursor-none' : disabled,\n 'chr-button': textColor !== undefined\n }\" [disabled]=\"disabled\" color=\"{{ color }}\" (click)=\"click?.()\" [attr.href]=\"href && href\"\n [attr.target]=\"target && target\" [matTooltip]=\"tooltip||''\" [matTooltipPosition]=\"tooltipPosition||'above'\">\n <i class=\"material-icons\">{{ icon }}</i>\n</a>\n}\n\n}\n\n<!--\n @if (predicate) {\n<a (click)=\"click?.()\" [attr.href]=\"href && href\"\n class=\"flex justify-center align-middle items-center py-2 px-2 text-pretty text-sm rounded-md cursor-pointer\"\n [ngClass]=\"{\n 'pointer-events-none cursor-none' : disabled,\n 'bg-chrdblue hover:bg-blue-700 !text-white opacity-100' : color=='primary',\n 'bg-chrlblue hover:bg-blue-300 !text-black' : color=='accent',\n 'bg-red-600 hover:bg-red-500 !text-white' : color=='warn',\n 'bg-slate-400 hover:bg-slate-600 !text-black' : color=='none',\n 'w-36': type=='fixed',\n 'w-full': type=='full',\n 'w-min': type=='table',\n 'w-full sm:w-36': type=='responsive',\n }\" [attr.target]=\"target && target\" [matTooltip]=\"tooltip||''\" [matTooltipPosition]=\"tooltipPosition||'above'\">\n {{ display }}\n @if (icon) {\n <mat-icon class=\"!m-0\">{{ icon }}</mat-icon>\n }\n</a>\n-->\n<!--\nIF\nClick\ncolor\ntype: table : full\nicon\n-->","import { Component } from \"@angular/core\";\nimport {\n\tMatDialogRef,\n\tMatDialogTitle,\n\tMatDialogContent,\n\tMatDialogActions,\n\tMatDialogClose,\n} from \"@angular/material/dialog\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { ChrButtonComponent } from \"../chr-button/chr-button.component\";\n\n@Component({\n\tselector: \"app-chr-delete-modal\",\n\ttemplateUrl: \"./chr-delete-modal.component.html\",\n\tstyleUrls: [\n\t\t\"./chr-delete-modal.component.scss\",\n\t\t\"../../../../../tailwindbuild.css\",\n\t],\n\tstandalone: true,\n\timports: [\n\t\tMatDialogTitle,\n\t\tMatDialogContent,\n\t\tMatDialogActions,\n\t\tChrButtonComponent,\n\t\tMatDialogClose,\n\t\tMatTooltip,\n\t],\n})\nexport class ChrDeleteModalComponent {\n\tpublic valid: boolean = false;\n\n\tconstructor(public dialogRef: MatDialogRef<ChrDeleteModalComponent>) {}\n\n\tngOnInit() {}\n\n\tpublic close = () => {\n\t\tthis.dialogRef.close(true);\n\t};\n}\n","<div class=\"dark:bg-slate-800 w-full overflow-auto overflow-x-hidden\">\n <h2 mat-dialog-title class=\"dark:!text-gray-400\">Supprimer un élément</h2>\n <mat-dialog-content class=\"mat-typography dark:!text-gray-400\">\n Attention:\n <br>\n <br>\n La suppression d'un élément est irréversible.\n <br>\n <br>\n Vous allez supprimer un élément et sa référence sera effacée dans toute l'application.\n <br>\n Si d'autres éléments y sont liés, il est possible qu'ils soient supprimés en même temps.\n <br>\n <br>\n En effectuant cette action et cliquant sur \"Confirmer\" vous certifiez que vous avez pris connaissance des\n conséquences possibles et souhaitez tout de même poursuivre.\n\n </mat-dialog-content>\n <mat-dialog-actions>\n <div class=\"w-full flex flex-row justify-between\">\n <app-chr-button class=\"w-36\" display=\"Annuler\" color=\"accent\" mat-dialog-close></app-chr-button>\n <app-chr-button class=\"w-36\" display=\"Confirmer\" color=\"warn\" [click]=\"close\"\n [matTooltip]=\"'Attention: cette action est irréversible !'\" matTooltipPosition=\"above\"></app-chr-button>\n </div>\n </mat-dialog-actions>\n</div>","import { Directive, forwardRef, Input, Injectable } from \"@angular/core\";\r\nimport {\r\n\tAbstractControl,\r\n\tNG_VALIDATORS,\r\n\tValidationErrors,\r\n\tValidator,\r\n\tValidatorFn,\r\n} from \"@angular/forms\";\r\n\r\n@Injectable({ providedIn: \"root\" })\r\n@Directive({\r\n\tselector: \"[app-type]\",\r\n\tproviders: [\r\n\t\t{\r\n\t\t\tprovide: NG_VALIDATORS,\r\n\t\t\tuseExisting: TypeValidatorDirective,\r\n\t\t\tmulti: true,\r\n\t\t},\r\n\t],\r\n\tstandalone: true,\r\n})\r\nexport class TypeValidatorDirective implements Validator {\r\n\t@Input() type?: string;\r\n\r\n\tvalidate(control: AbstractControl): ValidationErrors | null {\r\n\t\treturn this.type ? type(this.type)(control) : null;\r\n\t}\r\n}\r\n\r\nexport function type(type: string): ValidatorFn {\r\n\treturn (control: AbstractControl): ValidationErrors | null => {\r\n\t\tconst value = control.value;\r\n\r\n\t\tif (!value) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst isType = typeof value === type;\r\n\r\n\t\treturn !isType\r\n\t\t\t? ({\r\n\t\t\t\t\ttype: true,\r\n\t\t\t\t\trequiredType: type,\r\n\t\t\t\t\tactualType: typeof value,\r\n\t\t\t } as ValidationErrors)\r\n\t\t\t: null;\r\n\t};\r\n}\r\n","import { Directive, forwardRef, Input, Injectable } from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n NG_VALIDATORS,\r\n ValidationErrors,\r\n Validator,\r\n ValidatorFn,\r\n} from '@angular/forms';\r\n\r\n@Injectable({ providedIn: 'root' })\r\n@Directive({\r\n selector: '[app-decimal]',\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: DecimalValidatorDirective,\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class DecimalValidatorDirective implements Validator {\r\n @Input() amount?: number;\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n return this.amount ? decimal(this.amount)(control) : null;\r\n }\r\n}\r\n\r\nexport function decimal(amount: number): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value = control.value;\r\n\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n let isTooLong = false;\r\n\r\n const str = `${value}`;\r\n isTooLong =\r\n str.indexOf(',') != -1\r\n ? (str.split(',')[1] ? str.split(',')[1].length : 0) > amount\r\n : str.indexOf('.') != -1\r\n ? (str.split('.')[1] ? str.split('.')[1].length : 0) > amount\r\n : false;\r\n\r\n return isTooLong\r\n ? ({\r\n decimal: true,\r\n max: amount,\r\n } as ValidationErrors)\r\n : null;\r\n };\r\n}\r\n","import { Directive, forwardRef, Input, Injectable } from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n NG_VALIDATORS,\r\n ValidationErrors,\r\n Validator,\r\n ValidatorFn,\r\n} from '@angular/forms';\r\nimport moment from 'moment';\r\n\r\n@Injectable({ providedIn: 'root' })\r\n@Directive({\r\n selector: '[app-max-date]',\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: MaxDateValidatorDirective,\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class MaxDateValidatorDirective implements Validator {\r\n @Input() date?: Date;\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n return this.date ? maxDate(this.date)(control) : null;\r\n }\r\n}\r\n\r\nexport function maxDate(date: Date): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value = control.value;\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n const maxDate = moment(date);\r\n const inputDate = moment(value);\r\n\r\n return !(inputDate.isValid() && inputDate.isBefore(maxDate))\r\n ? ({\r\n maxdate: true,\r\n max: maxDate.toDate(),\r\n actual: value,\r\n } as ValidationErrors)\r\n : null;\r\n };\r\n}\r\n","import {\n\tComponent,\n\tInput,\n\tOutput,\n\tEventEmitter,\n\tforwardRef,\n\tViewChild,\n\tViewEncapsulation,\n\tAfterViewInit,\n} from \"@angular/core\";\nimport {\n\tControlValueAccessor,\n\tFormControl,\n\tNG_VALUE_ACCESSOR,\n\tReactiveFormsModule,\n} from \"@angular/forms\";\nimport {\n\tMatAutocomplete,\n\tMatAutocompleteTrigger,\n} from \"@angular/material/autocomplete\";\nimport {\n\tObservable,\n\tstartWith,\n\tmap,\n\tof,\n\tcombineLatest,\n\tcombineLatestAll,\n} from \"rxjs\";\nimport { MatOption } from \"@angular/material/core\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { AsyncPipe } from \"@angular/common\";\n\nexport interface IInputSearchFilter {\n\tdisplay: string;\n\tcallback?: Function;\n\ttooltip?: string;\n}\n\n@Component({\n\tselector: \"app-chr-search-select, [app-chr-search-select]\",\n\ttemplateUrl: \"./chr-search-select.component.html\",\n\tstyleUrls: [\n\t\t\"./chr-search-select.component.scss\",\n\t\t\"../../../../../tailwindbuild.css\",\n\t],\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tmulti: true,\n\t\t\tuseExisting: ChrSearchSelectComponent,\n\t\t},\n\t],\n\tstandalone: true,\n\timports: [\n\t\tReactiveFormsModule,\n\t\tMatAutocompleteTrigger,\n\t\tMatTooltip,\n\t\tMatAutocomplete,\n\t\tMatOption,\n\t\tAsyncPipe,\n\t],\n})\nexport class ChrSearchSelectComponent\n\timplements ControlValueAccessor, AfterViewInit\n{\n\tpublic predicate: boolean = true;\n\n\tpublic searchSelect: FormControl = new FormControl<string | null>(null);\n\tpublic filteredModelOptions?: Observable<any>;\n\n\t@ViewChild(\"auto\") autocomplete!: MatAutocomplete;\n\n\tpublic onTouched: any = () => {};\n\n\t@Input() name?: string;\n\t@Input() placeholder?: string;\n\t@Input() data: any[] | null = [];\n\t@Input() display?: Function;\n\t@Input() disabled: boolean = false;\n\t@Input() model: any | null = null;\n\t@Input() id: any;\n\t@Output() modelChange: EventEmitter<any> = new EventEmitter();\n\t@Output() keyup: EventEmitter<KeyboardEvent> =\n\t\tnew EventEmitter<KeyboardEvent>();\n\n\t@Input() filters?: IInputSearchFilter[];\n\tpublic filterIndex: number = 0;\n\n\t@Output() validity: EventEmitter<boolean> = new EventEmitter();\n\n\tngOnInit() {\n\t\tthis.registerFilters();\n\t}\n\n\tngAfterViewInit(): void {\n\t\tthis.registerAutoComplete();\n\t}\n\n\treset = () => {\n\t\tthis.searchSelect.reset();\n\t\tthis.modelChange.emit(null);\n\t};\n\n\tgetModelDisplay = (model: any) => {\n\t\treturn this.display?.(model) || \"\";\n\t};\n\n\temit = (event: any) => {\n\t\tthis.modelChange.emit(event);\n\t};\n\n\twriteValue = (obj: any): void => {\n\t\tthis.searchSelect.setValue(obj);\n\t};\n\n\tregisterOnChange = (fn: any): void => {\n\t\tthis.searchSelect.valueChanges.subscribe((value) => {\n\t\t\t//this.validity.emit(false);\n\t\t\tfn(value !== undefined ? value! : null);\n\t\t});\n\t};\n\n\tregisterOnTouched = (fn: any): void => {\n\t\tthis.searchSelect.markAsTouched = fn;\n\t};\n\n\tregisterFilters = () => {\n\t\tthis.filteredModelOptions = this.searchSelect.valueChanges.pipe(\n\t\t\tstartWith(\"\"),\n\t\t\tmap((value) => this._filterModel(value! || -1)),\n\t\t\tmap((values) => {\n\t\t\t\treturn this.filters && this.filters[this.filterIndex].callback\n\t\t\t\t\t? values.filter((r) => this.filters![this.filterIndex].callback!(r))\n\t\t\t\t\t: values;\n\t\t\t})\n\t\t);\n\t};\n\n\tregisterAutoComplete = () => {\n\t\t//If there is only one value left,\n\t\t// this.filteredModelOptions?.subscribe((values) => {\n\t\t// \tif (values.length == 1) {\n\t\t// \t\tthis.emit(values[0]);\n\t\t// \t}\n\t\t// });\n\t\tthis.autocomplete.optionSelected.subscribe((event: MatOption) => {\n\t\t\tthis.validity.emit(true);\n\t\t});\n\t};\n\n\tsetDisabledState? = (isDisabled: boolean): void => {\n\t\tthis.disabled = isDisabled;\n\t\tisDisabled ? this.searchSelect.disable() : this.searchSelect.enable();\n\t};\n\n\tincrement = () => {\n\t\tthis.writeValue(\"\");\n\t\tconst modulo = this.filters ? this.filters.length : 1;\n\t\tthis.filterIndex = (this.filterIndex + 1) % modulo;\n\t};\n\n\tgetValue = () => {\n\t\treturn this.searchSelect.value;\n\t};\n\n\tvoid = () => {};\n\n\tprivate _filterModel = (value: number | string): any[] => {\n\t\treturn typeof value == \"string\"\n\t\t\t? this._doFilterModelString(`${value}`)\n\t\t\t: this._doFilterModelInt(value);\n\t};\n\n\tprivate _doFilterModelInt = (id: number) => {\n\t\tconst tmp = this.data?.find((r) => r.id == id);\n\t\treturn tmp ? tmp : [];\n\t};\n\n\tprivate _doFilterModelString = (input: string) => {\n\t\treturn this.data?.filter((r) => this._filterValues(r, input));\n\t};\n\n\tprivate _filterValues = (value: any, input: string) => {\n\t\t//Si l'utilisateur entre un espace, on renvoie true, afin que tous les résultats s'affichent.\n\t\tif (input == \" \") return true;\n\t\t//Sinon, on ne renvoie true que pour les éléments qui matchent son input\n\t\treturn `${this.getModelDisplay(value)}`\n\t\t\t.trim()\n\t\t\t.toLowerCase()\n\t\t\t.includes(input.trim().toLowerCase());\n\t};\n}\n","@if (predicate) {\n<input [matTooltip]=\"searchSelect.disabled ? '': 'Entrez un espace pour voir les choix disponibles'\"\n matTooltipPosition=\"above\" #input type=\"text\" name=\"{{name}}\" matInput [formControl]=\"searchSelect\"\n [value]=\"getModelDisplay(model)\"\n class=\"block input py-2.5 px-0 w-full text-sm text-gray-900 dark:text-white bg-transparent border-0 border-b-2 border-gray-300 appearance-none dark:border-gray-600 dark:focus:border-chrlblue focus:outline-none focus:ring-0 focus:border-chrdblue peer/inputs\"\n placeholder=\"{{ placeholder || ' ' }}\" required (keyup)=\"keyup.emit($event)\" (keyup.backspace)=\"reset()\"\n [matAutocomplete]=\"auto\" />\n<ng-content></ng-content>\n@if (filters) {\n<span [matTooltip]=\"filters[filterIndex].tooltip || ''\" matTooltipPosition=\"above\" class=\"absolute inner-button cursor-pointer top-0 right-0 h-[calc(100%_-_2px)] border-gray-300 dark:border-gray-400 border-l-2 border-b-0 border-t-0 \n border-r-0 w-fit text-gray-900 dark:text-gray-400 px-1 text-center opacity-100 bg-slate-100 dark:bg-slate-700 bg-opacity-50 flex justify-center \n align-middle items-center\" (click)=\"filters ? increment() : void()\">\n <p class=\"inline-block w-fit h-min overflow-hidden text-nowrap text-ellipsis\">{{ filters[filterIndex].display }}\n </p>\n</span>\n}\n<mat-autocomplete #auto class=\"dark:!bg-slate-700 dark:!text-white rounded-lg no-scrollbar \" id=\"{{id}}-auto\"\n [displayWith]=\"getModelDisplay.bind(this)\" (optionSelected)=\"emit($event.option.value)\">\n @for (model of filteredModelOptions | async; track model) {\n <mat-option class=\"dark:!text-gray-400 rounded-lg focus:!bg-blue-500 focus-visible:!bg-red-500\" [value]=\"model\"\n selected>\n {{ getModelDisplay(model) || '' }}\n </mat-option>\n }\n</mat-autocomplete>\n}","import {\n\tComponent,\n\tInput,\n\tOutput,\n\tEventEmitter,\n\tAfterViewInit,\n\tChangeDetectionStrategy,\n\tViewEncapsulation,\n\tChangeDetectorRef,\n\tOnChanges,\n\tSimpleChanges,\n\tOnInit,\n} from \"@angular/core\";\nimport {\n\tTypeValidatorDirective,\n\ttype,\n} from \"../models/chr-validators/type-validator\";\nimport { ValidatorFn, ReactiveFormsModule, FormsModule } from \"@angular/forms\";\nimport {\n\tFormBuilder,\n\tFormGroup,\n\tValidators,\n\tFormControl,\n} from \"@angular/forms\";\nimport { decimal } from \"../models/chr-validators/decimal-validator\";\nimport { maxDate } from \"../models/chr-validators/max-date-validator\";\nimport { MatError } from \"@angular/material/form-field\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { MatTooltipModule } from \"@angular/material/tooltip\";\nimport { ChrSearchSelectComponent } from \"../chr-search-select/chr-search-select.component\";\nimport { MatSlideToggleModule } from \"@angular/material/slide-toggle\";\nimport {\n\tDatePipe,\n\tCommonModule,\n\tDATE_PIPE_DEFAULT_OPTIONS,\n} from \"@angular/common\";\nimport { MatAutocompleteModule } from \"@angular/material/autocomplete\";\nimport { debounce, debounceTime } from \"rxjs\";\nimport { MatTabsModule } from \"@angular/material/tabs\";\n\nexport interface ISearchFilter {\n\tdisplay: string;\n\tcallback?: Function;\n\ttooltip?: string;\n}\n\nexport interface IControlValidation {\n\trule: string;\n\tvalue?: any;\n\tdisplay?: string;\n}\n\nexport interface IControl {\n\tlabel?: string;\n\tname: string;\n\tspan?: string;\n\twidth?: \"col\" | \"row\";\n\tcol?: number;\n\trow?: number;\n\ttype:\n\t\t| \"text\"\n\t\t| \"password\"\n\t\t| \"textArea\"\n\t\t| \"number\"\n\t\t| \"date\"\n\t\t| \"datetime\"\n\t\t| \"searchSelect\"\n\t\t| \"color\"\n\t\t| \"toggle\";\n\tvalue?: any;\n\tdata?: any[] | null;\n\ticon?: string;\n\ticonCallback?: Function;\n\ticonCallbackDisabled?: boolean;\n\ticonTooltip?: string;\n\tfn?: (object: any) => string;\n\tfilters?: ISearchFilter[];\n\tvalidations?: IControlValidation[];\n}\n\nexport interface IFormSection {\n\ttitle?: string;\n\tcontrols: IControl[];\n}\n\nexport interface IFormControl {\n\t[key: string]: any;\n}\n@Component({\n\tselector: \"app-chr-form-legacy\",\n\ttemplateUrl: \"./chr-form-legacy.component.html\",\n\tstyleUrls: [\n\t\t\"./chr-form-legacy.component.scss\",\n\t\t\"../../../../../tailwindbuild.css\",\n\t\t\"./chr-form-legacy.component.scss\",\n\t],\n\tstandalone: true,\n\timports: [\n\t\tReactiveFormsModule,\n\t\tFormsModule,\n\t\tMatTooltipModule,\n\t\tMatIconModule,\n\t\tMatSlideToggleModule,\n\t\tMatError,\n\t\tChrSearchSelectComponent,\n\t\tMatAutocompleteModule,\n\t\tDatePipe,\n\t\tCommonModule,\n\t\tTypeValidatorDirective,\n\t\tMatTabsModule,\n\t],\n\tproviders: [\n\t\tDatePipe,\n\t\t{\n\t\t\tprovide: DATE_PIPE_DEFAULT_OPTIONS,\n\t\t\tuseValue: { dateFormat: \"shortDate\" },\n\t\t},\n\t],\n\tchangeDetection: ChangeDetectionStrategy.Default,\n})\nexport class ChrFormComponentLegacy implements OnInit, AfterViewInit {\n\t@Input() sections?: IFormSection[];\n\t@Input() valid?: boolean;\n\t@Output() validChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n\t@Input() model?: any;\n\t@Output() modelChange: EventEmitter<any> = new EventEmitter<any>();\n\n\t@Input() disabled?: boolean;\n\t@Output() valuesChange: EventEmitter<any> = new EventEmitter();\n\n\t@Input() submit?: Function;\n\n\t@Input() compact: boolean = false;\n\n\t@Input() debounce: number = 0;\n\n\t@Output() formChange: EventEmitter<IFormControl> =\n\t\tnew EventEmitter<IFormControl>();\n\n\t@Input() tabDisplay: boolean = false;\n\n\tform: FormGroup = this.builder.group({});\n\n\tupdateValueAndValidity = () => {\n\t\tthis.form.markAsDirty();\n\t\tthis.form.updateValueAndValidity({ emitEvent: true });\n\t};\n\n\tpublic initialized: boolean = false;\n\n\tconstructor(\n\t\tprivate builder: FormBuilder,\n\t\tprivate datePipe: DatePipe,\n\t\tprivate changeDetector: ChangeDetectorRef\n\t) {}\n\n\tngOnInit(): void {\n\t\tthis._initValidators();\n\t\tthis._registerInputEmitters();\n\t\tthis._registerInputUpdaters();\n\t\tthis.initialized = true;\n\t}\n\n\tngAfterViewInit(): void {\n\t\t//this._initValues();\n\t\tthis.changeDetector.detectChanges();\n\t\tthis.form.valueChanges.subscribe((res) => {\n\t\t\tthis.valid = this.form.valid;\n\t\t\tthis.validChange.emit(this.form.valid);\n\t\t\tthis.valuesChange.emit(res);\n\t\t\tthis.changeDetector.markForCheck();\n\t\t\tthis.changeDetector.detectChanges();\n\t\t});\n\t}\n\n\tvalue = (input?: string) => {\n\t\tif (input) return this.form.controls[input]?.value;\n\t\treturn this.form.value;\n\t};\n\n\tsetValue = (input: string, value: any) => {\n\t\tif (input) this.form.get(input)?.setValue(value);\n\t};\n\n\tisValid = (input?: string) => {\n\t\tif (input) return this.form.get(input)?.valid;\n\t\treturn this.valid;\n\t};\n\n\tisControlRequired = (control: IControl) => {\n\t\treturn control.validations?.find((v) => v.rule.toLowerCase() == \"required\");\n\t};\n\n\tpatchValue = (key: string, value: any) => {\n\t\tthis.form.patchValue({ [key]: value });\n\t};\n\n\tpatch = (model: any) => {\n\t\tfor (const key of Object.keys(model)) {\n\t\t\tthis.patchValue(key, model[key]);\n\t\t}\n\t\tthis.form.markAsDirty();\n\t\tthis.form.updateValueAndValidity();\n\t};\n\n\treset = () => {\n\t\tthis.form.reset();\n\t};\n\n\tsetControlValue = (\n\t\tmodel: any,\n\t\tcontrol: IControl,\n\t\tvalue: any,\n\t\tindex?: number\n\t) => {\n\t\tif (model?.[control.name]) {\n\t\t\tmodel[control.name] = this._convertValueToType(value, control.type);\n\t\t}\n\t\tif (control.value)\n\t\t\tcontrol.value = this._convertValueToType(value, control.type);\n\n\t\tthis.patchValue(\n\t\t\tcontrol.name,\n\t\t\tthis._convertValueToType(value, control.type)\n\t\t);\n\t};\n\n\tpublic resize = (textArea: HTMLTextAreaElement) => {\n\t\tconst initialHeight = textArea.style.height;\n\t\ttextArea.style.height = initialHeight;\n\t\ttextArea.style.height = \"\" + textArea.scrollHeight + \"px\";\n\t};\n\n\tpublic doSubmit = () => {\n\t\tthis.form.markAllAsTouched();\n\t\tif (this.valid && this.form.valid) this.submit?.(this.form.value);\n\t};\n\n\tpublic track = (control: string, index: number) => {\n\t\tthis.form.get(control)?.updateValueAndValidity();\n\t\treturn index;\n\t};\n\n\tpublic getControl = (control: IControl) => {\n\t\treturn this.model?.[control.name] || control.value;\n\t};\n\n\tpublic setControl = (control: IControl, value: any) => {\n\t\tthis.setControlValue(this.model, control, value);\n\t};\n\n\tprivate _registerInputEmitters = () => {\n\t\tfor (const section of this.sections!) {\n\t\t\tfor (const control of section.controls) {\n\t\t\t\tconst formControl = this.form.get(control.name);\n\t\t\t\tformControl!.valueChanges\n\t\t\t\t\t.pipe(debounceTime(this.debounce))\n\t\t\t\t\t.subscribe((e) => {\n\t\t\t\t\t\tthis.formChange.emit({ [control.name]: e });\n\t\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\n\tprivate _registerInputUpdaters = () => {\n\t\tfor (const section of this.sections!) {\n\t\t\tfor (const control of section.controls) {\n\t\t\t\tconst formControl = this.form.get(control.name)!;\n\t\t\t\tformControl.valueChanges.subscribe((value) => {\n\t\t\t\t\tif (this.model) {\n\t\t\t\t\t\tthis.model[control.name] = value;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontrol.value = value;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\n\tprivate _initValues = () => {\n\t\tfor (const section of this.sections || []) {\n\t\t\tfor (let control of section.controls) {\n\t\t\t\tconst value = this.model ? this.model[control.name] : null;\n\t\t\t\tif (!value && typeof value != \"number\") {\n\t\t\t\t\tif (control.value)\n\t\t\t\t\t\tthis.form\n\t\t\t\t\t\t\t.get(control.name)!\n\t\t\t\t\t\t\t.patchValue(\n\t\t\t\t\t\t\t\tthis._convertValueToType(control.value, control.type)\n\t\t\t\t\t\t\t);\n\t\t\t\t\telse this.form.get(control.name)!.patchValue(null);\n\t\t\t\t} else {\n\t\t\t\t\tthis.form\n\t\t\t\t\t\t.get(control.name)!\n\t\t\t\t\t\t.patchValue(this._convertValueToType(value, control.type));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tprivate _convertValueToType = (\n\t\tvalue: any,\n\t\ttype:\n\t\t\t| \"text\"\n\t\t\t| \"password\"\n\t\t\t| \"textArea\"\n\t\t\t| \"number\"\n\t\t\t| \"date\"\n\t\t\t| \"datetime\"\n\t\t\t| \"searchSelect\"\n\t\t\t| \"select\"\n\t\t\t| \"color\"\n\t\t\t| \"toggle\"\n\t) => {\n\t\tswitch (type) {\n\t\t\tcase \"text\":\n\t\t\t\treturn value || \"\";\n\t\t\tcase \"number\":\n\t\t\t\treturn value || 0;\n\t\t\tcase \"searchSelect\": {\n\t\t\t\tif (typeof value == \"string\" && value.trim() == \"\") value = null;\n\t\t\t\treturn value || null;\n\t\t\t}\n\t\t\tcase \"textArea\":\n\t\t\t\treturn value || \"\";\n\t\t\tcase \"password\":\n\t\t\t\treturn value || \"\";\n\t\t\tcase \"select\":\n\t\t\t\treturn value || null;\n\t\t\tcase \"date\":\n\t\t\t\treturn this.datePipe.transform(value, \"yyyy-MM-dd\");\n\t\t\tcase \"datetime\":\n\t\t\t\treturn this.datePipe.transform(value, \"yyyy-MM-ddTHH:mm\");\n\t\t\tcase \"color\":\n\t\t\t\treturn value || \"\";\n\t\t\tcase \"toggle\":\n\t\t\t\treturn value as boolean;\n\t\t\tdefault:\n\t\t\t\treturn value;\n\t\t}\n\t};\n\n\tformatDateForInput = (date: any) => {\n\t\tthis.datePipe.transform(date, \"yyyy-MM-dd\");\n\t};\n\n\tprivate _initValidators() {\n\t\tfor (const section of this.sections || []) {\n\t\t\tfor (const input of section.controls) {\n\t\t\t\tif (input.type == \"searchSelect\" && !input.fn)\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\"An input of type 'searchSelect' needs a display function !\"\n\t\t\t\t\t);\n\t\t\t\tconst control = new FormControl(\n\t\t\t\t\tthis._convertValueToType(this.model?.[input.name], input.type) ||\n\t\t\t\t\t\tinput.value,\n\t\t\t\t\tthis._getValidators(input.validations)\n\t\t\t\t);\n\t\t\t\tthis.form.addControl(input.name, control);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _getValidators = (validations?: IControlValidation[]) => {\n\t\tconst validators: ValidatorFn[] = [];\n\t\tif (!validations) return validators;\n\t\t//Switch case breaks the mobile app so we'll do if statements\n\t\tfor (const validation of validations) {\n\t\t\tconst rule = validation.rule.toLocaleLowerCase();\n\t\t\tif (rule == \"min\") {\n\t\t\t\tvalidation.display = \"Cette valeur est trop petite !\";\n\t\t\t\tvalidators.push(Validators.min(validation.value));\n\t\t\t}\n\t\t\tif (rule == \"max\") {\n\t\t\t\tvalidation.display = \"Cette valeur est trop grande !\";\n\t\t\t\tvalidators.push(Validators.max(validation.value));\n\t\t\t}\n\t\t\tif (rule == \"required\") {\n\t\t\t\tvalidation.display = \"Ce champs est requis !\";\n\t\t\t\tvalidators.push(Validators.required);\n\t\t\t}\n\t\t\tif (rule == \"email\") {\n\t\t\t\tvalidation.display = \"Cette adresse email n'est pas valide !\";\n\t\t\t\tvalidators.push(Validators.email);\n\t\t\t}\n\t\t\tif (rule == \"minlength\") {\n\t\t\t\tvalidation.display = \"Cette valeur est trop petite !\";\n\t\t\t\tvalidators.push(Validators.minLength(validation.value));\n\t\t\t}\n\t\t\tif (rule == \"maxlength\") {\n\t\t\t\tvalidation.display = \"Cette valeur est trop grande !\";\n\t\t\t\tvalidators.push(Validators.maxLength(validation.value));\n\t\t\t}\n\t\t\tif (rule == \"type\") {\n\t\t\t\tvalidation.display = \"Cette valeur n'est pas valide !\";\n\t\t\t\tvalidators.push(type(validation.value));\n\t\t\t}\n\t\t\tif (rule == \"decimal\") {\n\t\t\t\tvalidation.display = `Le nombre de décimal n'est pas valide (max: ${validation.value}) !`;\n\t\t\t\tvalidators.push(decimal(validation.value));\n\t\t\t}\n\t\t\tif (rule == \"maxdate\") {\n\t\t\t\tvalidation.display = `Cette date est trop grande ! (max: ${validation.value}) !`;\n\t\t\t\tvalidators.push(maxDate(validation.value));\n\t\t\t}\n\t\t}\n\t\treturn validators;\n\t};\n}\n","<div class=\"flex flex-col justify-center min-h-5/6 mt-2\">\n <form [formGroup]=\"form\">\n\n <ng-container *ngIf=\"!tabDisplay\" [ngTemplateOutlet]=\"sectionTemplate\"\n [ngTemplateOutletContext]=\"{sections: sections}\">\n </ng-container>\n <ng-container *ngIf=\"tabDisplay\" [ngTemplateOutlet]=\"tabsTemplate\" [ngTemplateOutletContext]=\"{sects: sections}\">\n </ng-container>\n </form>\n</div>\n<ng-template #tabsTemplate let-sections='sects'>\n <fieldset [disabled]=\"disabled\">\n <mat-tab-group>\n @for (section of sections; track section; let index = $index) {\n <mat-tab [label]=\"section.title || 'Étape ' + (index + 1)\">\n <div *ngIf=\"initialized\" class=\"mt-4\"\n [ngClass]=\"compact ? 'grid gap-y-2 gap-x-6 sm:grid-cols-4':'grid gap-y-2 gap-x-6 sm:grid-cols-2'\">\n @for (ctrl of section.controls; track index; let index = $index; let\n last =\n $last)\n {\n <ng-container [ngTemplateOutlet]=\"controlTemplate\"\n [ngTemplateOutletContext]=\"{control: ctrl, index: index, last: $last}\">\n </ng-container>\n }\n </div>\n </mat-tab>\n }\n </mat-tab-group>\n </fieldset>\n</ng-template>\n\n<ng-template #sectionTemplate let-sections='sections'>\n <fieldset [disabled]=\"disabled\">\n @for (section of sections; track section; let index = $index) {\n <div>\n @if (section.title) {\n <h2 class=\"mb-2 font-bold text-xl text-gray-900 dark:text-white\">\n {{ section.title }}\n </h2>\n }\n <div *ngIf=\"initialized\"\n [ngClass]=\"compact ? 'grid gap-y-2 gap-x-6 sm:grid-cols-4':'grid gap-y-2 gap-x-6 sm:grid-cols-2'\">\n @for (control of section.controls; track index; let index = $index; let\n last =\n $last)\n {\n <ng-container [ngTemplateOutlet]=\"controlTemplate\"\n [ngTemplateOutletContext]=\"{control: control, index: index, last: $last}\">\n </ng-container>\n }\n </div>\n @if (index != (sections||[]).length - 1 && !compact) {\n <div class=\"py-4\">\n <hr class=\"\" />\n </div>\n }\n </div>\n }\n </fieldset>\n</ng-template>\n\n<ng-template #controlTemplate let-control='control' let-last='last' let-index='index'>\n <div class=\"relative h-min mt-2\" [formGroup]=\"form\" [ngClass]=\"{\n 'sm:col-span-2': (control.width == 'row' && !compact) || control.type=='textArea' && compact && control.width != 'row',\n 'sm:col-span-4': control.width =='row' && compact,\n }\">\n @if (control.type=='searchSelect') {\n <div app-chr-search-select class=\"relative input z-0 w-full\" id=\"{{ control.name }}_{{ index }}\"\n [ngClass]=\"(form.get([control.name])?.touched && form.get([control.name])?.errors) ? 'error':'border-gray-300 dark:border-gray-600'\"\n [data]=\"control.data || []\" [display]=\"control.fn!\" [name]=\"control.name\" placeholder=\" \"\n [filters]=\"control.filters\" [formControlName]=\"control.name\" [model]=\"getControl(control)\"\n (modelChange)=\"setControl(control, $event)\" (keyup.enter)=\"last ? doSubmit() : ''\">\n <label class=\"label absolute text-sm text-gray-500 dark:text-gray-400\" [for]=\"control.name\">{{\n control.label\n }}\n @if (isControlRequired(control)) {\n <span class=\"text-red-500\">*</span>\n }\n :\n @for (validation of control.validations; track validation) {\n @if (\n form.get([control.name])?.touched &&\n form.hasError(validation.rule.toLowerCase(), control.name)\n ) {\n <mat-error class=\"text-red-500 dark:text-red-800\">{{ validation.display }}</mat-error>\n }\n }\n </label>\n </div>\n }\n <div class=\"relative z-0 w-full group/inputs content\">\n <!-- Here we will *ngIf each type of input cause it's the cleanest way I can imagine-->\n <!--TEXT-->\n @if (control.type == 'text') {\n <input class=\"relative\"\n [ngClass]=\"(form.get([control.name])?.touched && form.get([control.name])?.errors) ? 'error':'border-gray-300 dark:border-gray-600'\"\n type=\"text\" id=\"{{ control.name }}_{{ index }}\" name=\"{{ control.name }}\" [formControlName]=\"control.name\"\n placeholder=\" \" [value]=\"model?.[control.name] || control.value || ''\"\n (valueChange)=\"setControlValue(model, control, $event)\" (keyup.enter)=\"last ? doSubmit() : ''\"\n class=\"block input py-2.5 px-0 w-full text-sm text-gray-900 dark:text-white bg-transparent border-0 border-b-2 appearance-none dark:focus:border-chrlblue focus:outline-none focus:ring-0 focus:border-chrdblue peer/inputs\" />\n }\n <!--PASSWORD-->\n @if (control.type == 'password') {\n <input class=\"relative\"\n [ngClass]=\"(form.get([control.name])?.touched && form.get([control.name])?.errors) ? 'error':'border-gray-300 dark:border-gray-600'\"\n type=\"password\" id=\"{{ control.name }}_{{ index }}\" name=\"{{ control.name }}\" [formControlName]=\"control.name\"\n placeholder=\" \" [value]=\"model?.[control.name] || control.value || ''\"\n (valueChange)=\"setControlValue(model, control, $event)\" (keyup.enter)=\"last ? doSubmit() : ''\"\n class=\"block input py-2.5 px-0 w-full text-sm text-gray-900 dark:text-white bg-transparent border-0 border-b-2 appearance-none dark:border-gray-600 dark:focus:border-chrlblue focus:outline-none focus:ring-0 focus:border-chrdblue peer/inputs\" />\n }\n <!--TEXT AREA-->\n @if (control.type == 'textArea') {\n <textarea #textArea class=\"relative\"\n [ngClass]=\"(form.get([control.name])?.touched && form.get([control.name])?.errors) ? 'error':'border-gray-300 dark:border-gray-600'\"\n id=\"{{ control.name }}_{{ index }}\" name=\"{{ control.name }}\" [formControlName]=\"control.name\" placeholder=\" \"\n [value]=\"model?.[control.name] || control.value || ''\" (valueChange)=\"setControlValue(model, control, $event)\"\n (input)=\"resize(textArea)\" (keyup.enter)=\"last ? doSubmit() : ''\"\n class=\"no-scrollbar input !resize-none height-normalized block py-2 px-0 w-full text-sm text-gray-900 dark:text-white bg-transparent border-0 border-b-2 appearance-none dark:border-gray-600 dark:focus:border-chrlblue focus:outline-none focus:ring-0 focus:border-chrdblue peer/inputs\"></textarea>\n }\n <!--NUMBER-->\n @if (control.type == 'number') {\n <input class=\"relative\"\n [ngClass]=\"(form.get([control.name])?.touched && form.get([control.name])?.errors) ? 'error':'border-gray-300 dark:border-gray-600'\"\n type=\"number\" id=\"{{ control.name }}_{{ index }}\" name=\"{{ control.name }}\" placeholder=\" \"\n [formControlName]=\"control.name\" [value]=\"model?.[control.name] || control.value || 0\"\n (valueChange)=\"setControlValue(model, control, $event)\" (keyup.enter)=\"last ? doSubmit() : ''\"\n class=\"block input py-2.5 px-0 w-full text-sm text-gray-900 dark:text-white bg-transparent border-0 border-b-2 appearance-none dark:border-gray-600 dark:focus:border-chrlblue focus:outline-none focus:ring-0 focus:border-chrdblue peer/inputs\" />\n }\n <!--DATE-->\n @if (control.type == 'date') {\n <input class=\"relative\"\n [ngClass]=\"(form.get([control.name])?.touched && form.get([control.name])?.errors) ? 'error':'border-gray-300 dark:border-gray-600'\"\n type=\"date\" id=\"{{ control.name }}_{{ index }}\" name=\"{{ control.name }}\" [formControlName]=\"control.name\"\n placeholder=\" \" [value]=\"model?.[control.name] || control.value || ''\"\n (valueChange)=\"setControlValue(model, control, $event)\" (keyup.enter)=\"last ? doSubmit() : ''\"\n class=\"block input py-2 px-0 w-full height-normalized text-sm text-gray-900 dark:text-white bg-transparent border-0 border-b-2 appearance-none dark:border-gray-600 dark:focus:border-chrlblue focus:outline-none focus:ring-0 focus:border-chrdblue peer/inputs\" />\n }\n @if (control.type == 'datetime') {\n <input class=\"relative\"\n [ngClass]=\"(form.get([control.name])?.touched && form.get([control.name])?.errors) ? 'error':'border-gray-300 dark:border-gray-600'\"\n type=\"datetime-local\" id=\"{{ control.name }}_{{ index }}\" name=\"{{ control.name }}\"\n [formControlName]=\"control.name\" placeholder=\" \" [value]=\"model?.[control.name] || control.value || ''\"\n (valueChange)=\"setControlValue(model, control, $event)\" (keyup.enter)=\"last ? doSubmit() : ''\"\n class=\"block input py-2 px-0 w-full height-normalized text-sm text-gray-900 dark:text-white bg-transparent border-0 border-b-2 appearance-none dark:border-gray-600 dark:focus:border-chrlblue focus:outline-none focus:ring-0 focus:border-chrdblue peer/inputs\" />\n }\n <!--COLOR-->\n @if (control.type == 'color') {\n <input class=\"relative\"\n [ngClass]=\"(form.get([control.name])?.touched && form.get([control.name])?.errors) ? 'error':'border-gray-300 dark:border-gray-600'\"\n type=\"color\" id=\"{{ control.name }}_{{ index }}\" name=\"{{ control.name }}\" [formControlName]=\"control.name\"\n placeholder=\" \" [value]=\"model?.[control.name] || control.value || ''\"\n (valueChange)=\"setControlValue(model, control, $event)\" (keyup.enter)=\"last ? doSubmit() : ''\"\n style=\"height: 42px;\"\n class=\"block input py-1.5 m-0 px-0 w-full bg-transparent border-0 border-b-2 dark:focus:border-chrlblue focus:outline-none focus:ring-0 focus:border-chrdblue peer/inputs\" />\n }\n @if (control.type == 'toggle'){\n <input #toggle type=\"checkbox\" class=\"hidden checkbox\" [formControlName]=\"control.name\" placeholder=\" \"\n [value]=\"model?.[control.name] || control.value || ''\"\n (valueChange)=\"setControlValue(model, control, $event)\" />\n <div\n class=\"relative toggle-wrapper block input bg-transparent border-0 border-b-2 border-gray-300 dark:focus:border-chrlblue focus:outline-none focus:ring-0 focus:border-chrdblue peer/inputs\">\n <div (click)=\"toggle?.click()\" class=\"relative block input toggle\">\n </div>\n </div>\n }\n @if (control.type != 'searchSelect') {\n <label class=\"label absolute text-sm text-gray-500 dark:text-gray-400\" [for]=\"control.name\">{{\n control.label\n }}\n @if(control.label && control.label != '' && control.label != ' '){\n @if (isControlRequired(control)) {\n <span class=\"text-red-500\">*</span>\n }\n :\n }\n @for (validation of control.validations; track validation) {\n @if (\n form.get([control.name])?.touched &&\n form.hasError(validation.rule.toLowerCase(), control.name)\n ) {\n <mat-error class=\"text-red-500 dark:text-red-800\">{{ validation.display }}</mat-error>\n }\n }\n </label>\n }\n @if (control.icon && !disabled) {\n <span\n [ngClass]=\"control.iconCallbackDisabled ? 'text-gray-400 dark:text-gray-500':'text-gray-900 dark:text-white'\"\n class=\"absolute p-2.5 bottom-0 right-0\" [matTooltip]=\"control.iconTooltip || ''\" matTooltipPosition=\"above\"\n (click)=\"!control.iconCallbackDisabled && control.iconCallback?.(form.get([control.name])?.value)\"><mat-icon\n class=\"flex input justify-center align-middle items-center content-center text-lg\">{{control.icon}}</mat-icon></span>\n }\n </div>\n @if (control.span) {\n <span\n [ngClass]=\"!form.get([control.name])?.errors || !form.get([control.name])?.touched ? 'text-gray-600 dark:text-gray-300' : '!text-red-500 dark:!text-red-800'\"\n class=\"h-0 text-xs\">{{ control.span\n }}</span>\n }\n </div>\n</ng-template>","import {\n\tComponent,\n\tInput,\n\tOutput,\n\tEventEmitter,\n\tChangeDetectionStrategy,\n\tChangeDetectorRef,\n\tOnInit,\n} from \"@angular/core\";\nimport { ValidatorFn, ReactiveFormsModule, FormsModule } from \"@angular/forms\";\nimport {\n\tFormBuilder,\n\tFormGroup,\n\tValidators,\n\tFormControl,\n} from \"@angular/forms\";\nimport { MatError } from \"@angular/material/form-field\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { MatTooltipModule } from \"@angular/material/tooltip\";\nimport { ChrSearchSelectComponent } from \"../chr-search-select/chr-search-select.component\";\nimport { MatSlideToggleModule } from \"@angular/material/slide-toggle\";\nimport {\n\tDatePipe,\n\tCommonModule,\n\tDATE_PIPE_DEFAULT_OPTIONS,\n} from \"@angular/common\";\nimport { MatAutocompleteModule } from \"@angular/material/autocomplete\";\nimport { MatTabsModule } from \"@angular/material/tabs\";\nimport {\n\ttype,\n\tTypeValidatorDirective,\n} from \"../models/chr-validators/type-validator\";\nimport { decimal } from \"../models/chr-validators/decimal-validator\";\nimport { maxDate } from \"../models/chr-validators/max-date-validator\";\n\nexport interface IFormControlCollection {\n\t[key: string]: FormControl;\n}\n\nexport interface ISearchFilter {\n\tdisplay: string;\n\tcallback?: Function;\n\ttooltip?: string;\n}\n\nexport interface IControlValidation {\n\trule: string;\n\tvalue?: any;\n\tdisplay?: string;\n}\n\nexport interface IControl {\n\tlabel?: string;\n\tname: string;\n\tspan?: string;\n\twidth?: \"col\" | \"row\";\n\tcol?: number;\n\trow?: number;\n\ttype:\n\t\t| \"text\"\n\t\t| \"password\"\n\t\t| \"textArea\"\n\t\t| \"number\"\n\t\t| \"date\"\n\t\t| \"datetime\"\n\t\t| \"searchSelect\"\n\t\t| \"color\"\n\t\t| \"toggle\";\n\tvalue?: any;\n\tdata?: any[] | null;\n\ticon?: string;\n\ticonCallback?: Function;\n\ticonCallbackDisabled?: boolean;\n\ticonTooltip?: string;\n\tfn?: (object: any) => string;\n\tfilters?: ISearchFilter[];\n\tvalidations?: IControlValidation[];\n}\n\nexport interface IFormSection {\n\ttitle?: string;\n\tcontrols: IControl[];\n}\n\nexport interface IFormControl {\n\t[key: string]: any;\n}\n@Component({\n\tselector: \"app-chr-form\",\n\ttemplateUrl: \"./chr-form.component.html\",\n\tstyleUrls: [\n\t\t\"./chr-form.component.scss\",\n\t\t\"../../../../../tailwindbuild.css\",\n\t\t\"./chr-form.component.scss\",\n\t],\n\tstandalone: true,\n\timports: [\n\t\tReactiveFormsModule,\n\t\tFormsModule,\n\t\tMatTooltipModule,\n\t\tMatIconModule,\n\t\tMatSlideToggleModule,\n\t\tMatError,\n\t\tChrSearchSelectComponent,\n\t\tMatAutocompleteModule,\n\t\tDatePipe,\n\t\tCommonModule,\n\t\tTypeValidatorDirective,\n\t\tMatTabsModule,\n\t],\n\tproviders: [\n\t\tDatePipe,\n\t\t{\n\t\t\tprovide: DATE_PIPE_DEFAULT_OPTIONS,\n\t\t\tuseValue: { dateFormat: \"shortDate\" },\n\t\t},\n\t],\n\tchangeDetection: ChangeDetectionStrategy.Default,\n})\nexport class ChrFormComponent implements OnInit {\n\t@Input() sections?: IFormSection[];\n\t@Input() controls?: IControl[];\n\n\t@Input() valid?: boolean;\n\t@Output() validChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n\t@Input() model: any = null;\n\t@Output() modelChange: EventEmitter<any> = new EventEmitter<any>();\n\n\t@Input() disabled?: boolean;\n\t@Output() valuesChange: EventEmitter<any> = new EventEmitter();\n\n\t@Input() submit?: Function;\n\n\t@Input() compact: boolean = false;\n\n\t@Output() formChange: EventEmitter<IFormControl> =\n\t\tnew EventEmitter<IFormControl>();\n\n\t@Input() tabDisplay: boolean = false;\n\n\tform: FormGroup = this.builder.group({});\n\n\tprivate values: { [key: string]: any } = {};\n\tprivate controlTypes: { [key: string]: string } = {};\n\tprivate flattenedControls: IControl[] = [];\n\n\tpublic initialized: boolean = false;\n\n\tconstructor(\n\t\tprivate builder: FormBuilder,\n\t\tprivate datePipe: DatePipe,\n\t\tprivate changeDetector: ChangeDetectorRef\n\t) {\n\t\tif (this.controls != null && this.sections != null)\n\t\t\tthrow new Error(\n\t\t\t\t\"You can't use both controls and sections in the same form\"\n\t\t\t);\n\t}\n\n\tngOnInit(): void {\n\t\tthis.flattenedControls =\n\t\t\tthis.sections\n\t\t\t\t?.map((s) => s.controls)\n\t\t\t\t.flat()\n\t\t\t\t.concat(this.controls ?? []) || [];\n\t\tthis.initModel();\n\t\tthis.initValues();\n\t\tthis.initControls();\n\t\tthis.initListeners();\n\t\tthis.initialized = true;\n\t}\n\n\tvalidateSearchSelectValidty = (valid: boolean) => {\n\t\t//this.valid = valid && this.form.valid;\n\t\t//this.validChange.emit(this.valid);\n\t};\n\n\tprivate initModel = () => {\n\t\tif (this.model == null) this.model = {};\n\n\t\tfor (const control of this.flattenedControls) {\n\t\t\tif (!this.model[control.name]) this.model[control.name] = control.value;\n\t\t}\n\t};\n\n\tprivate initValues = () => {\n\t\tfor (const control of this.flattenedControls) {\n\t\t\tif (!this.values[control.name])\n\t\t\t\tthis.values[control.name] = this.toInputValue(\n\t\t\t\t\tcontrol,\n\t\t\t\t\tthis.model[control.name]\n\t\t\t\t);\n\t\t}\n\t};\n\n\tprivate initControls = () => {\n\t\tconst formControls = {} as IFormControlCollection;\n\t\tfor (const control of this.flattenedControls) {\n\t\t\tconst validators = this._getValidators(control.validations);\n\t\t\tformControls[control.name] = new FormControl(\n\t\t\t\tthis.values[control.name],\n\t\t\t\tvalidators\n\t\t\t);\n\t\t\tthis.controlTypes[control.name] = control.type;\n\t\t}\n\n\t\tthis.form = this.builder.group(formControls);\n\t\tthis.valid = this.form.valid;\n\t};\n\n\tprivate initListeners = () => {\n\t\tthis.form.valueChanges.subscribe((values) => {\n\t\t\tfor (const key in values) {\n\t\t\t\tif (values.hasOwnProperty(key)) {\n\t\t\t\t\tthis.model[key] = values[key];\n\t\t\t\t\tthis.values[key] = values[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.valid = this.form.valid;\n\t\t\tthis.validChange.emit(this.valid);\n\t\t\tthis.modelChange.emit(this.model);\n\t\t\tthis.changeDetector.detectChanges();\n\t\t});\n\t};\n\n\tvalue = (input?: string) => this.getValue(input);\n\n\tgetValue = (input?: string) => {\n\t\tif (input) return this.form.controls[input]?.value;\n\t\treturn this.form.value;\n\t};\n\n\tisValid = (input?: string) => {\n\t\tif (input) return this.form.get(input)?.valid;\n\t\treturn this.valid;\n\t};\n\n\tisControlRequired = (control: IControl) => {\n\t\treturn control.validations?.find((v) => v.rule.toLowerCase() == \"required\");\n\t};\n\n\t/**\n\t * Update the value of a control WITHOUT triggering the modelChange event\n\t * @param key input key (control name)\n\t * @param value value to set\n\t * @param dateFormat optional date format for date and datetime inputs\n\t */\n\tsetValue = (key: string, value: any, dateFormat: string | null = null) => {\n\t\tconst val = this.typeToInputValue(this.controlTypes[key], value);\n\t\tthis.form.get(key)?.setValue(val, {\n\t\t\temitEvent: false,\n\t\t\temitViewToModelChange: false,\n\t\t});\n\t\tthis.model[key] = val;\n\t\tthis.changeDetector.detectChanges();\n\t};\n\n\t/**\n\t * Update the value of the form's model WITHOUT triggering the modelChange event\n\t * @param model the model to set\n\t * @param dateFormat optional date format for date and datetime inputs\n\t */\n\tset = (model: any, dateFormat: string | null = null) => {\n\t\tfor (const key of Object.keys(model)) {\n\t\t\tthis.setValue(key, model[key], dateFormat);\n\t\t}\n\t};\n\n\t/**\n\t * Updates the value of a control. This WILL trigger the modelChange event\n\t * @param key input key (control name)\n\t * @param value value to set\n\t * @param dateFormat optional date format for date and datetime inputs\n\t */\n\tpatchValue = (key: string, value: any, dateFormat: string | null = null) => {\n\t\tconst val = this.typeToInputValue(this.controlTypes[key], value);\n\t\tthis.setValue$(key, val);\n\t\tthis.form.get(key)?.updateValueAndValidity();\n\t\tthis.modelChange.emit(this.model);\n\t\tthis.detectChanges();\n\t};\n\n\t/**\n\t * Updates the value of the form's model. This WILL trigger the modelChange event once for each input\n\t * @param model model to set\n\t * @param dateFormat optional date format for date and datetime inputs\n\t */\n\tpatch = (model: any, dateFormat: string | null = null) => {\n\t\tfor (const key of Object.keys(model)) {\n\t\t\tthis.patchValue(key, model[key], dateFormat);\n\t\t}\n\t};\n\n\tcheckValidity = () => {\n\t\tfor (const control of this.flattenedControls) {\n\t\t\tthis.form.get(control.name)?.updateValueAndValidity();\n\t\t}\n\t\tthis.valid = this.form.valid;\n\t\tthis.detectChanges();\n\t};\n\n\tupdateValueAndValidity = (touched: boolean = false) => {\n\t\tthis.form.markAsDirty();\n\t\tif (touched) this.form.markAllAsTouched();\n\t\tthis.form.updateValueAndValidity({ emitEvent: true });\n\t};\n\n\tprivate setValue$ = (key: string, value: any) => {\n\t\tconst val = this.typeToInputValue(this.controlTypes[key], value);\n\t\tthis.form.get(key)?.patchValue(val);\n\t\tthis.values[key] = val;\n\t};\n\n\tprivate toInputValue = (control: IControl, value: any | null = null) => {\n\t\treturn this.typeToInputValue(control.type, value, control.value);\n\t};\n\n\tprivate typeToInputValue = (\n\t\ttype: string,\n\t\tvalue: any | null = null,\n\t\tdefaultValue: any | null = null\n\t) => {\n\t\tswitch (type) {\n\t\t\tcase \"date\":\n\t\t\t\treturn value\n\t\t\t\t\t? this.transformDate(\n\t\t\t\t\t\t\ttypeof value == \"string\" ? new Date(value) : value,\n\t\t\t\t\t\t\t\"yyyy-MM-dd\"\n\t\t\t\t\t )\n\t\t\t\t\t: this.transformDate(defaultValue, \"yyyy-MM-dd\");\n\t\t\tcase \"datetime\":\n\t\t\t\treturn value\n\t\t\t\t\t? this.transformDate(\n\t\t\t\t\t\t\ttypeof value == \"string\" ? new Date(value) : value,\n\t\t\t\t\t\t\t\"yyyy-MM-ddTHH:mm\"\n\t\t\t\t\t )\n\t\t\t\t\t: this.transformDate(defaultValue, \"yyyy-MM-ddTHH:mm\");\n\t\t\tcase \"number\":\n\t\t\t\treturn Number(value);\n\t\t\tcase \"searchSelect\":\n\t\t\t\tif (value !== null && value !== undefined) {\n\t\t\t\t\treturn value!;\n\t\t\t\t} else return null;\n\t\t\tdefault:\n\t\t\t\treturn value || defaultValue;\n\t\t}\n\t};\n\n\tprivate transformDate = (value: any, format: string) => {\n\t\treturn this.datePipe.transform(value, format);\n\t};\n\n\tpublic resize = (textArea: HTMLTextAreaElement) => {\n\t\tconst initialHeight = textArea.style.height;\n\t\ttextArea.style.height = initialHeight;\n\t\ttextArea.style.height = \"\" + textArea.scrollHeight + \"px\";\n\t};\n\n\tpublic doSubmit = () => {\n\t\tthis.form.markAllAsTouched();\n\t\tif (this.valid && this.form.valid) this.submit?.(this.form.value);\n\t};\n\n\tprivate detectChanges = () => {\n\t\tthis.form.markAsDirty();\n\t\tthis.form.updateValueAndValidity({ emitEvent: true });\n\t\tthis.changeDetector.detectChanges();\n\t};\n\n\tprivate _getValidators = (validations?: IControlValidation[]) => {\n\t\tconst validators: ValidatorFn[] = [];\n\t\tif (!validations) return validators;\n\t\t//Switch case breaks the mobile app so we'll do if statements\n\t\tfor (const validation of validations) {\n\t\t\tconst rule = validation.rule.toLocaleLowerCase();\n\t\t\tif (rule == \"min\") {\n\t\t\t\tvalidation.display = \"Cette valeur est trop petite !\";\n\t\t\t\tvalidators.push(Validators.min(validation.value));\n\t\t\t}\n\t\t\tif (rule == \"max\") {\n\t\t\t\tvalidation.display = \"Cette valeur est trop grande !\";\n\t\t\t\tvalidators.push(Validators.max(validation.value));\n\t\t\t}\n\t\t\tif (rule == \"required\") {\n\t\t\t\tvalidation.display = \"Ce champs est requis !\";\n\t\t\t\tvalidators.push(Validators.required);\n\t\t\t}\n\t\t\tif (rule == \"email\") {\n\t\t\t\tvalidation.display = \"Cette adresse email n'est pas valide !\";\n\t\t\t\tvalidators.push(Validators.email);\n\t\t\t}\n\t\t\tif (rule == \"minlength\") {\n\t\t\t\tvalidation.display = \"Cette valeur est trop petite !\";\n\t\t\t\tvalidators.push(Validators.minLength(validation.value));\n\t\t\t}\n\t\t\tif (rule == \"maxlength\") {\n\t\t\t\tvalidation.display = \"Cette valeur est trop grande !\";\n\t\t\t\tvalidators.push(Validators.maxLength(validation.value));\n\t\t\t}\n\t\t\tif (rule == \"type\") {\n\t\t\t\tvalidation.display = \"Cette valeur n'est pas valide !\";\n\t\t\t\tvalidators.push(type(validation.value));\n\t\t\t}\n\t\t\tif (rule == \"decimal\") {\n\t\t\t\tvalidation.display = `Le nombre de décimal n'est pas valide (max: ${validation.value}) !`;\n\t\t\t\tvalidators.push(decimal(validation.value));\n\t\t\t}\n\t\t\tif (rule == \"maxdate\") {\n\t\t\t\tvalidation.display = `Cette date est trop grande ! (max: ${validation.value}) !`;\n\t\t\t\tvalidators.push(maxDate(validation.value));\n\t\t\t}\n\t\t}\n\t\treturn validators;\n\t};\n}\n","<div class=\"flex flex-col justify-center min-h-5/6 mt-2\">\n <form [formGroup]=\"form\" *ngIf=\"initialized\">\n <ng-container *ngIf=\"!tabDisplay || !sections\" [ngTemplateOutlet]=\"singleTemplate\"\n [ngTemplateOutletContext]=\"{controls: controls}\">\n </ng-container>\n <ng-container *ngIf=\"!tabDisplay && sections\" [ngTemplateOutlet]=\"sectionTemplate\"\n [ngTemplateOutletContext]=\"{sections: sections}\">\n </ng-container>\n <ng-container *ngIf=\"tabDisplay && sections\" [ngTemplateOutlet]=\"tabsTemplate\"\n [ngTemplateOutletContext]=\"{sects: sections}\">\n </ng-container>\n </form>\n</div>\n\n<ng-template #tabsTemplate let-sections='sects'>\n <fieldset [disabled]=\"disabled\">\n <mat-tab-group>\n @for (section of sections; track section; let index = $index) {\n <mat-tab [label]=\"section.title || 'Étape ' + (index + 1)\">\n <div *ngIf=\"initialized\" class=\"mt-4\"\n [ngClass]=\"compact ? 'grid gap-y-2 gap-x-6 sm:grid-cols-4':'grid gap-y-2 gap-x-6 sm:grid-cols-2'\">\n @for (ctrl of section.controls; track index; let index = $index; let\n last =\n $last)\n {\n <ng-container [ngTemplateOutlet]=\"controlTemplate\"\n [ngTemplateOutletContext]=\"{control: ctrl, index: index, last: $last}\">\n </ng-container>\n }\n </div>\n </mat-tab>\n }\n </mat-tab-group>\n </fieldset>\n</ng-template>\n\n<ng-template #singleTemplate let-controls=\"controls\">\n <fieldset [disabled]=\"disabled\">\n <div *ngIf=\"initialized\"\n [ngClass]=\"compact ? 'grid gap-y-2 gap-x-6 sm:grid-cols-4':'grid gap-y-2 gap-x-6 sm:grid-cols-2'\">\n @for (control of controls; track control; let index = $index; let last = $last) {\n <ng-container [ngTemplateOutlet]=\"controlTemplate\"\n [ngTemplateOutletContext]=\"{control: control, index: index, last: last}\">\n </ng-container>\n }\n </div>\n\n </fieldset>\n</ng-template>\n\n<ng-template #sectionTemplate let-sections='sections'>\n <fieldset [disabled]=\"disabled\">\n @for (section of sections; track section; let index = $index) {\n <div>\n @if (section.title) {\n <h2 class=\"mb-2 font-bold text-xl text-gray-900 dark:text-white\">\n {{ section.title }}\n </h2>\n }\n <div *ngIf=\"initialized\"\n [ngClass]=\"compact ? 'grid gap-y-2 gap-x-6 sm:grid-cols-4':'grid gap-y-2 gap-x-6 sm:grid-cols-2'\">\n @for (control of section.controls; track index; let index = $index; let\n last =\n $last)\n {\n <ng-container [ngTemplateOutlet]=\"controlTemplate\"\n [ngTemplateOutletContext]=\"{control: control, index: index, last: $last}\">\n </ng-container>\n }\n </div>\n @if (index != (sections||[]).length - 1 && !compact) {\n <div class=\"py-4\">\n <hr class=\"\" />\n </div>\n }\n </div>\n }\n </fieldset>\n</ng-template>\n\n<ng-template #controlTemplate let-control='control' let-last='last' let-index='index'>\n <div class=\"relative h-min mt-2\" [formGroup]=\"form\" [ngClass]=\"{\n 'sm:col-span-2': (control.width == 'row' && !compact) || control.type=='textArea' && compact && control.width != 'row',\n 'sm:col-span-4': control.width =='row' && compact,\n }\">\n @if (control.type=='searchSelect') {\n <div app-chr-search-select class=\"relative input z-0 w-full\" id=\"{{ control.name }}_{{ index }}\"\n [ngClass]=\"(form.get([control.name])?.touched && form.get([control.name])?.errors) ? 'error':'border-gray-300 dark:border-gray-600'\"\n [data]=\"control.data || []\" [display]=\"control.fn!\" [name]=\"control.name\" placeholder=\" \"\n [filters]=\"control.filters\" [formControlName]=\"control.name\" (keyup.enter)=\"last ? doSubmit() : ''\">\n <label class=\"label absolute text-sm text-gray-500 dark:text-gray-400\" [for]=\"control.name\">{{\n control.label\n }}\n @if (isControlRequired(control)) {\n <span class=\"text-red-500\">*</span>\n }\n :\n @for (validation of control.validations; track validation) {\n @if (\n form.get([control.name])?.touched &&\n form.hasError(validation.rule.toLowerCase(), control.name)\n ) {\n <mat-error class=\"text-red-500 dark:text-red-800\">{{ validation.display }}</mat-error>\n }\n }\n </label>\n </div>\n }\n <div class=\"relative z-0 w-full group/inputs content\">\n <!-- Here we will *ngIf each type of input cause it's the cleanest way I can imagine-->\n <!--TEXT-->\n @if (control.type == 'text') {\n <input class=\"relative\"\n [ngClass]=\"(form.get([control.name])?.touched && form.get([control.name])?.errors) ? 'error':'border-gray-300 dark:border-gray-600'\"\n type=\"text\" id=\"{{ control.name }}_{{ index }}\" name=\"{{ control.name }}\" [formControlName]=\"control.name\"\n placeholder=\" \" [value]=\"model?.[control.name] || control.value || ''\" (keyup.enter)=\"last ? doSubmit() : ''\"\n class=\"block input py-2.5 px-0 w-full text-sm text-gray-900 dark:text-white bg-transparent border-0 border-b-2 appearance-none dark:focus:border-chrlblue focus:outline-none focus:ring-0 focus:border-chrdblue peer/inputs\" />\n }\n <!--PASSWORD-->\n @if (control.type == 'password') {\n <input class=\"relative\"\n [ngClass]=\"(form.get([control.name])?.touched && form.get([control.name])?.errors) ? 'error':'border-gray-300 dark:border-gray-600'\"\n type=\"password\" id=\"{{ control.name }}_{{ index }}\" name=\"{{ control.name }}\" [formControlName]=\"control.name\"\n placeholder=\" \" (keyup.enter)=\"last ? doSubmit() : ''\"\n class=\"block input py-2.5 px-0 w-full text-sm text-gray-900 dark:text-white bg-transparent border-0 border-b-2 appearance-none dark:border-gray-600 dark:focus:border-chrlblue focus:outline-none focus:ring-0 focus:border-chrdblue peer/inputs\" />\n }\n <!--TEXT AREA-->\n @if (control.type == 'textArea') {\n <textarea #textArea class=\"relative\"\n [ngClass]=\"(form.get([control.name])?.touched && form.get([control.name])?.errors) ? 'error':'border-gray-300 dark:border-gray-600'\"\n id=\"{{ control.name }}_{{ index }}\" name=\"{{ control.name }}\" [formControlName]=\"control.name\" placeholder=\" \"\n (input)=\"resize(textArea)\" (keyup.enter)=\"last ? doSubmit() : ''\"\n class=\"no-scrollbar input !resize-none height-normalized block py-2 px-0 w-full text-sm text-gray-900 dark:text-white bg-transparent border-0 border-b-2 appearance-none dark:border-gray-600 dark:focus:border-chrlblue focus:outline-none focus:ring-0 focus:border-chrdblue peer/inputs\"></textarea>\n }\n <!--NUMBER-->\n @if (control.type == 'number') {\n <input class=\"relative\"\n [ngClass]=\"(form.get([control.name])?.touched && form.get([control.name])?.errors) ? 'error':'border-gray-300 dark:border-gray-600'\"\n type=\"number\" id=\"{{ control.name }}_{{ index }}\" name=\"{{ control.name }}\" placeholder=\" \"\n [formControlName]=\"control.name\" (keyup.enter)=\"last ? doSubmit() : ''\"\n class=\"block input py-2.5 px-0 w-full text-sm text-gray-900 dark:text-white bg-transparent border-0 border-b-2 appearance-none dark:border-gray-600 dark:focus:border-chrlblue focus:outline-none focus:ring-0 focus:border-chrdblue peer/inputs\" />\n }\n <!--DATE-->\n @if (control.type == 'date') {\n <input class=\"relative\"\n [ngClass]=\"(form.get([control.name])?.touched && form.get([control.name])?.errors) ? 'error':'border-gray-300 dark:border-gray-600'\"\n type=\"date\" id=\"{{ control.name }}_{{ index }}\" name=\"{{ control.name }}\" [formControlName]=\"control.name\"\n placeholder=\" \" (keyup.enter)=\"last ? doSubmit() : ''\"\n class=\"block input py-2 px-0 w-full height-normalized text-sm text-gray-900 dark:text-white bg-transparent border-0 border-b-2 appearance-none dark:border-gray-600 dark:focus:border-chrlblue focus:outline-none focus:ring-0 focus:border-chrdblue peer/inputs\" />\n }\n @if (control.type == 'datetime') {\n <input class=\"relative\"\n [ngClass]=\"(form.get([control.name])?.touched && form.get([control.name])?.errors) ? 'error':'border-gray-300 dark:border-gray-600'\"\n type=\"datetime-local\" id=\"{{ control.name }}_{{ index }}\" name=\"{{ control.name }}\"\n [formControlName]=\"control.name\" placeholder=\" \" (keyup.enter)=\"last ? doSubmit() : ''\"\n class=\"block input py-2 px-0 w-full height-normalized text-sm text-gray-900 dark:text-white bg-transparent border-0 border-b-2 appearance-none dark:border-gray-600 dark:focus:border-chrlblue focus:outline-none focus:ring-0 focus:border-chrdblue peer/inputs\" />\n }\n <!--COLOR-->\n @if (control.type == 'color') {\n <input class=\"relative\"\n [ngClass]=\"(form.get([control.name])?.touched && form.get([control.name])?.errors) ? 'error':'border-gray-300 dark:border-gray-600'\"\n type=\"color\" id=\"{{ control.name }}_{{ index }}\" name=\"{{ control.name }}\" [formControlName]=\"control.name\"\n placeholder=\" \" (keyup.enter)=\"last ? doSubmit() : ''\" style=\"height: 42px;\"\n class=\"block input py-1.5 m-0 px-0 w-full bg-transparent border-0 border-b-2 dark:focus:border-chrlblue focus:outline-none focus:ring-0 focus:border-chrdblue peer/inputs\" />\n }\n @if (control.type == 'toggle'){\n <input #toggle type=\"checkbox\" class=\"hidden checkbox\" [formControlName]=\"control.name\" placeholder=\" \" />\n <div\n class=\"relative toggle-wrapper block input bg-transparent border-0 border-b-2 border-gray-300 dark:focus:border-chrlblue focus:outline-none focus:ring-0 focus:border-chrdblue peer/inputs\">\n <div (click)=\"toggle?.click()\" class=\"relative block input toggle\">\n </div>\n </div>\n }\n @if (control.type != 'searchSelect') {\n <label class=\"label absolute text-sm text-gray-500 dark:text-gray-400\" [for]=\"control.name\">{{\n control.label\n }}\n @if(control.label && control.label != '' && control.label != ' '){\n @if (isControlRequired(control)) {\n <span class=\"text-red-500\">*</span>\n }\n :\n }\n @for (validation of control.validations; track validation) {\n @if (\n form.get([control.name])?.touched &&\n form.hasError(validation.rule.toLowerCase(), control.name)\n ) {\n <mat-error class=\"text-red-500 dark:text-red-800\">{{ validation.display }}</mat-error>\n }\n }\n </label>\n }\n @if (control.icon && !disabled) {\n <span\n [ngClass]=\"control.iconCallbackDisabled ? 'text-gray-400 dark:text-gray-500':'text-gray-900 dark:text-white'\"\n class=\"absolute p-2.5 bottom-0 right-0\" [matTooltip]=\"control.iconTooltip || ''\" matTooltipPosition=\"above\"\n (click)=\"!control.iconCallbackDisabled && control.iconCallback?.(form.get([control.name])?.value)\"><mat-icon\n class=\"flex input justify-center align-middle items-center content-center text-lg\">{{control.icon}}</mat-icon></span>\n }\n </div>\n @if (control.span) {\n <span\n [ngClass]=\"!form.get([control.name])?.errors || !form.get([control.name])?.touched ? 'text-gray-600 dark:text-gray-300' : '!text-red-500 dark:!text-red-800'\"\n class=\"h-0 text-xs\">{{ control.span\n }}</span>\n }\n </div>\n</ng-template>","import { Component, Input, Output, EventEmitter } from \"@angular/core\";\nimport { FormControl, ReactiveFormsModule } from \"@angular/forms\";\n\n@Component({\n\tselector: \"app-chr-searchbar\",\n\ttemplateUrl: \"./chr-searchbar.component.html\",\n\tstyleUrls: [\n\t\t\"./chr-searchbar.component.scss\",\n\t\t\"../../../../../tailwindbuild.css\",\n\t],\n\tstandalone: true,\n\timports: [ReactiveFormsModule],\n})\nexport class ChrSearchbarComponent {\n\t@Input() model?: string | null;\n\t@Output() modelChange: EventEmitter<string> = new EventEmitter();\n\t@Input() placeholder?: string | null;\n\t@Input() label?: string | null;\n\tpublic searchBy = new FormControl<string>(\"\");\n\n\tconstructor() {\n\t\tthis.searchBy.valueChanges.subscribe((value) => this.emit(value));\n\t}\n\n\temit(event: any) {\n\t\tthis.modelChange.emit(event);\n\t}\n}\n","<div class=\"w-full relative z-0 group/inputs\">\n <input matInput [formControl]=\"searchBy\" placeholder=\" \" type=\"text\"\n class=\"block py-2.5 px-0 w-full text-sm text-gray-900 dark:text-white bg-transparent border-0 border-b-2 border-gray-300 appearance-none dark:border-gray-600 dark:focus:border-chrlblue focus:outline-none focus:ring-0 focus:border-chrdblue peer/inputs\" />\n <label\n class=\"peer/inputs-focus:font-medium absolute text-sm text-gray-500 dark:text-gray-400 duration-300 transform -translate-y-6 scale-75 top-3 -z-10 origin-[0] peer-focus/inputs:start-0 rtl:peer-focus/inputs:translate-x-1/4 rtl:peer-focus/inputs:left-auto peer-focus/inputs:text-chrdblue peer-focus/inputs:dark:text-chrlblue 0 peer-placeholder-shown/inputs:scale-100 peer-placeholder-shown/inputs:translate-y-0 peer-focus/inputs:scale-75 peer-focus/inputs:-translate-y-6\">{{\n label\n }}\n <!--\n @for (validation of control.validations; track validation) {\n @if (\n control?.touched &&\n form.hasError(validation.rule.toLowerCase(), name)\n ) {\n <mat-error class=\"text-red-500 dark:text-red-800\">{{ validation.display }}</mat-error>\n }\n }\n -->\n </label>\n</div>","import {\n\tAfterContentChecked,\n\tChangeDetectorRef,\n\tComponent,\n\tEventEmitter,\n\tInput,\n\tOnChanges,\n\tOnInit,\n\tOutput,\n\tSimpleChanges,\n} from \"@angular/core\";\nimport { PaginationInstance, PaginationService } from \"ngx-pagination\";\nimport { NgClass, CommonModule } from \"@angular/common\";\nimport { ChrFormComponent } from \"../chr-form/chr-form.component\";\nimport { MatIconModule } from \"@angular/material/icon\";\n\n@Component({\n\tselector: \"app-chr-paginator\",\n\ttemplateUrl: \"./chr-paginator.component.html\",\n\tstyleUrls: [\n\t\t\"./chr-paginator.component.scss\",\n\t\t\"../../../../../tailwindbuild.css\",\n\t],\n\tstandalone: true,\n\timports: [ChrFormComponent, CommonModule, MatIconModule],\n})\nexport class ChrPaginatorComponent implements OnInit, AfterContentChecked {\n\tprivate _page: number | null = null;\n\tprivate _pageSize: number | null = null;\n\t@Input()\n\tget page() {\n\t\treturn this._page || 1;\n\t}\n\tset page(value: number) {\n\t\tthis._page = value;\n\t\tthis.pageChange.emit(value);\n\t\tthis.changeDetector.markForCheck();\n\t\tthis.changeDetector.detectChanges();\n\t}\n\n\t@Output() pageChange: EventEmitter<number> = new EventEmitter<number>();\n\n\t@Input()\n\tget pageSize() {\n\t\treturn this._pageSize || 20;\n\t}\n\tset pageSize(value: number) {\n\t\tthis._pageSize = value;\n\t\tthis.pageSizeChange.emit(value);\n\t\tthis.changeDetector.markForCheck();\n\t\tthis.changeDetector.detectChanges();\n\t}\n\n\t@Output() pageSizeChange: EventEmitter<number> = new EventEmitter<number>();\n\n\t@Input() id: string | undefined = \"chr_base-data-table\";\n\n\t@Input() allowSizeChange: boolean | string = \"true\";\n\n\tinstance?: PaginationInstance;\n\n\tconstructor(\n\t\tpublic service: PaginationService,\n\t\tprivate changeDetector: ChangeDetectorRef\n\t) {}\n\n\tngAfterContentChecked(): void {\n\t\tthis.instance = this.service.getInstance(\n\t\t\t`${this.id}`\n\t\t) as PaginationInstance;\n\t}\n\n\tngOnInit(): void {}\n\n\tpublic previous = () => {\n\t\tif (this.isFirstPage()) return;\n\t\tthis.page--;\n\t\tthis.pageChange.emit(this.page);\n\t\t//this.emit();\n\t};\n\n\tpublic next = () => {\n\t\tif (this.isLastPage()) return;\n\t\tthis.page += 1;\n\t\tthis.pageChange.emit(this.page);\n\t\t//this.emit();\n\t};\n\n\tpublic setPage = (page: number) => {\n\t\tif (page < 1 || page > this.lastPage()) return;\n\t\tthis.page = page;\n\t\tthis.emit();\n\t};\n\n\tpublic setPageEventHandler = (event: any) => {\n\t\treturn this.setPage(event.target.value);\n\t};\n\n\tpublic isFirstPage = () => {\n\t\treturn this.page == 1;\n\t};\n\n\tpublic setPageSize = (pageSize: number) => {\n\t\tthis.setPage(1);\n\t\tif (this.instance) this.instance.itemsPerPage = pageSize;\n\t\tthis.pageSizeChange.emit(pageSize);\n\t};\n\n\tpublic setPageSizeEventHandler = (event: any) => {\n\t\treturn this.setPageSize(event.target.value);\n\t};\n\n\tpublic isLastPage = () => {\n\t\tif (!this.instance?.totalItems) return false;\n\t\treturn (\n\t\t\tthis.page >=\n\t\t\tMath.ceil(this.instance.totalItems / this.instance.itemsPerPage)\n\t\t);\n\t};\n\n\t// public pageSize = () => this.instance.itemsPerPage;\n\n\tpublic lastPage = () =>\n\t\tthis.instance?.totalItems\n\t\t\t? Math.ceil(this.instance.totalItems / this.instance.itemsPerPage)\n\t\t\t: 1;\n\n\tprivate emit = (page: number | undefined = undefined) => {\n\t\tif (!page) this.pageChange.emit(this.page);\n\t\telse this.pageChange.emit(page);\n\t};\n}\n","<div class=\"flex flex-row justify-between dark:text-gray-400\">\n <div class=\"flex flex-row justify-start py-2 items-center content-center\">\n @if (allowSizeChange === true || allowSizeChange == 'true') {\n <div class=\"w-40\">\n <app-chr-form id=\"table-paginator-form\" (keyup.enter)=\"setPageSizeEventHandler($event)\" [sections]=\"[\n { \n controls: [\n {\n label:'Éléments par page',\n type: 'number',\n name: 'pageSize',\n value: pageSize,\n width: 'row',\n icon: 'check',\n iconCallback: setPageSize,\n iconTooltip: 'Cliquez ici pour mettre à jour la taille de la table'\n }]\n }]\">\n </app-chr-form>\n </div>\n }\n </div>\n <div class=\"flex flex-row justify-end py-2 items-center content-center \">\n <button type=\"button\" (click)=\"previous()\" [ngClass]=\"isFirstPage() ? 'cursor-not-allowed':'cursor-pointer'\"\n class=\"w-fit flex justify-center align-middle items-center\"><mat-icon>arrow_left</mat-icon></button>\n\n <div class=\"flex flex-row items-center content-center mx-2 w-fit\">\n {{page}} / {{lastPage()}}\n </div>\n <button type=\"button\" [ngClass]=\"!isLastPage() ? 'cursor-pointer' : 'cursor-not-allowed'\"\n (click)=\"!isLastPage() && next()\"\n class=\"w-fit flex justify-center align-middle items-center\"><mat-icon>arrow_right</mat-icon></button>\n </div>\n</div>","import {\n\tComponent,\n\tInput,\n\tOutput,\n\tEventEmitter,\n\tDirective,\n} from \"@angular/core\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { NgClass } from \"@angular/common\";\n/**\n * This should only be used as a directive\n */\n@Component({\n\tselector: \"app-chr-table-header-cell, [app-chr-table-header-cell]\",\n\ttemplateUrl: \"./chr-table-header-cell.component.html\",\n\tstyleUrls: [\n\t\t\"./chr-table-header-cell.component.scss\",\n\t\t\"../../../../../tailwindbuild.css\",\n\t],\n\tstandalone: true,\n\timports: [NgClass, MatIcon],\n})\nexport class ChrTableHeaderCellComponent {\n\t@Input() display?: string;\n\t@Input() column?: string;\n\t@Input() alignment?: string;\n\t@Input() isAsc: boolean = true;\n\t@Output() isAscChange: EventEmitter<boolean> = new EventEmitter();\n\t@Input() sortBy?: string;\n\t@Output() sortByChange: EventEmitter<string> = new EventEmitter();\n\n\torderBy = (column?: string) => {\n\t\tif (!this.sortBy) this.sortBy = column;\n\n\t\tif (this.sortBy == column) {\n\t\t\tthis.isAsc = !this.isAsc;\n\t\t\tthis.sortBy = column;\n\t\t\tthis.isAscChange.emit(this.isAsc);\n\t\t\tthis.sortByChange.emit(this.sortBy);\n\t\t} else {\n\t\t\tthis.isAsc = true;\n\t\t\tthis.sortBy = column;\n\t\t\tthis.isAscChange.emit(this.isAsc);\n\t\t\tthis.sortByChange.emit(this.sortBy);\n\t\t}\n\t};\n}\n","<div class=\"relative w-full cursor-pointer flex flex-row align-middle self-center\" [ngClass]=\"\n alignment == 'left' ? 'justify-start' : \n alignment == 'center' ? 'justify-center' : \n alignment == 'right' ? 'justify-end' : \n 'justify-left'\" (click)=\"orderBy(column)\">\n <p>{{ display }}</p>\n @if (sortBy) {\n <div class=\"absolute right-3 top-0 h-0 w-0\">\n @if (sortBy == column && isAsc) {\n <mat-icon>arrow_upward</mat-icon>\n }\n @if (sortBy == column && !isAsc) {\n <mat-icon>arrow_downward</mat-icon>\n }\n </div>\n }\n</div>\n<ng-content></ng-content>","import * as moment from \"moment\";\nimport {\n\tComponent,\n\tInput,\n\tAfterViewInit,\n\tEventEmitter,\n\tOutput,\n\tChangeDetectorRef,\n} from \"@angular/core\";\nimport { ChrPaginatorComponent } from \"../chr-paginator/chr-paginator.component\";\nimport { ChrButtonComponent } from \"../chr-button/chr-button.component\";\nimport { ChrTableHeaderCellComponent } from \"../chr-table-header-cell/chr-table-header-cell.component\";\nimport { SortPipe } from \"chrv-pipes\";\nimport { NgxPaginationModule } from \"ngx-pagination\";\nimport {\n\tCommonModule,\n\tDATE_PIPE_DEFAULT_OPTIONS,\n\tDatePipe,\n} from \"@angular/common\";\nimport { callback } from \"chart.js/dist/helpers/helpers.core\";\n\nexport interface IColumn {\n\tdisplay: string;\n\talignment?: \"left\" | \"center\" | \"right\";\n\tchipsTarget?: string[];\n\tchipsDisplay?: string[];\n\tchipsCallback?: Function;\n\tproperties?: string[];\n\tcallback?: Function;\n\tdate?: string;\n\tisLink?: boolean;\n\tlinkStaticUrl?: string;\n}\n\nexport interface IComputedRow {\n\tcolumns: IComputedColumn[];\n}\n\nexport interface IComputedColumn {\n\tlabel?: string;\n\tvalue?: any;\n\tcallback?: Function;\n\talignment?: \"left\" | \"center\" | \"right\";\n\tafter?: string;\n}\n\nexport interface IAction {\n\tdisplay?: string;\n\ticon?: string;\n\tcallback: Function;\n\tdisabled?: boolean;\n\tdisabledCallback?: Function;\n\tcolor: \"primary\" | \"accent\" | \"warn\" | \"alert\" | \"darkeraccent\" | \"none\";\n}\n\n@Component({\n\tselector: \"app-chr-table, [app-chr-table]\",\n\ttemplateUrl: \"./chr-table.component.html\",\n\tstyleUrls: [\"./chr-table.component.scss\", \"../../../../../tailwindbuild.css\"],\n\tstandalone: true,\n\timports: [\n\t\tChrTableHeaderCellComponent,\n\t\tChrButtonComponent,\n\t\tChrPaginatorComponent,\n\t\tSortPipe,\n\t\tNgxPaginationModule,\n\t\tCommonModule,\n\t\tDatePipe,\n\t],\n\tproviders: [\n\t\tDatePipe,\n\t\t{\n\t\t\tprovide: DATE_PIPE_DEFAULT_OPTIONS,\n\t\t\tuseValue: { dateFormat: \"shortDate\" },\n\t\t},\n\t],\n})\nexport class ChrTableComponent implements AfterViewInit {\n\t@Input() computedRows?: IComputedRow[];\n\t@Input() columns?: IColumn[];\n\t@Input() data: any[] | null = [];\n\t@Input() actions?: IAction[];\n\n\t@Input() isAsc: boolean = true;\n\t@Output() isAscChange: EventEmitter<boolean> = new EventEmitter();\n\t@Input() sortBy?: string;\n\t@Output() sortByChange: EventEmitter<string> = new EventEmitter();\n\n\t@Input() pageSize: number = 50;\n\t@Output() pageSizeChange: EventEmitter<number> = new EventEmitter();\n\n\t@Input() id?: string = \"chr_base-data-table\";\n\n\t@Input() color: \"primary\" | \"accent\" | \"warn\" | \"alert\" | \"darkeraccent\" =\n\t\t\"accent\";\n\n\t@Input() textColor:\n\t\t| \"primary\"\n\t\t| \"accent\"\n\t\t| \"warn\"\n\t\t| \"alert\"\n\t\t| \"darkeraccent\"\n\t\t| \"white\"\n\t\t| \"black\" = \"black\";\n\n\tprivate _page: number = 1;\n\t@Input()\n\tget currentPage() {\n\t\treturn this._page;\n\t}\n\tset currentPage(value: number) {\n\t\tthis._page = value;\n\t\tthis.currentPageChange.emit(value);\n\t\tthis.changeDetector.markForCheck();\n\t\tthis.changeDetector.detectChanges();\n\t}\n\t@Output() currentPageChange: EventEmitter<number> = new EventEmitter();\n\n\tcurrentProperty: any | null = null;\n\tcurrentText: string | null = null;\n\n\tconstructor(\n\t\tprivate _date: DatePipe,\n\t\tprivate changeDetector: ChangeDetectorRef\n\t) {}\n\n\tngAfterViewInit(): void {}\n\n\temitIsAsc(isAsc: any) {\n\t\tthis.isAscChange.emit(isAsc);\n\t}\n\n\temitSortBy(sortBy: any) {\n\t\tthis.sortByChange.emit(sortBy);\n\t}\n\n\temitPageSize(pageSize: any) {\n\t\tthis.pageSize = pageSize;\n\t\tthis.pageSizeChange.emit(pageSize);\n\t}\n\n\temitCurrentPage(currentPage: any) {\n\t\tthis.currentPage = currentPage;\n\t\tthis.currentPageChange.emit(currentPage);\n\t}\n\n\tgetProperty = (entry: any, properties?: any[]) => {\n\t\tthis.currentProperty = null;\n\t\tthis.currentText = null;\n\n\t\tif (!properties) {\n\t\t\tthis.currentProperty = entry;\n\t\t\treturn entry;\n\t\t}\n\t\tlet value = entry;\n\t\tfor (const i of properties) {\n\t\t\tvalue = (value as any)?.[i];\n\t\t}\n\t\tthis.currentProperty = value;\n\t\treturn value;\n\t};\n\n\tgetText = (property: any, column: IColumn) => {\n\t\tlet text = null;\n\n\t\tif (column.callback) text = column.callback(property);\n\n\t\tif (text == null && column.date)\n\t\t\ttext = this._date.transform(property, column.date);\n\n\t\tthis.currentText = text || property;\n\n\t\treturn text || property;\n\t\t// column.date\n\t\t// ? column.callback\n\t\t// \t? column.callback(property)\n\t\t// \t: (property | date : column.date)\n\t\t// : column.callback\n\t\t// \t? column.callback(property)\n\t\t// \t: property\n\t};\n\n\tgetIsAsc = () => {\n\t\treturn this.isAsc;\n\t};\n\n\tgetSortBy = () => {\n\t\treturn this.sortBy;\n\t};\n}\n","<div class=\"h-full no-scrollbar\">\n <ng-content class=\"mt-5\"></ng-content>\n <div class=\"flex flex-col flex-1 overflow-auto no-scrollbar\">\n @if (data) {\n <table\n class=\"table-auto border dark:border-none relative flex flex-row flex-no-wrap w-full rounded-lg sm:shadow-lg bg-transparent no-scrollbar\">\n <thead class=\"text-black\">\n @if (data.length <= 0) { <tr\n class=\"bg-chr-{{color}} chr-{{textColor}} flex flex-col flex-no wrap sm:table-row rounded-lg mb-2 sm:mb-0\">\n @for (column of columns; track column) {\n <th app-chr-table-header-cell class=\"p-3 h-14\" display=\"{{ column.display }}\" column=\"{{ column.properties }}\"\n [(isAsc)]=\"isAsc\" (isAscChange)=\"emitIsAsc($event)\" [(sortBy)]=\"sortBy\" (sortByChange)=\"emitSortBy($event)\">\n </th>\n }\n @if (actions) {\n <th\n class=\"h-14 p-3 text-left sm:text-center place-content-center place-items-center items-center align-middle sm:w-0\">\n Actions\n </th>\n }\n </tr>\n }\n @for (entry of data |\n sort:isAsc:sortBy | paginate: {itemsPerPage: pageSize, currentPage: currentPage, id: this.id}; track entry)\n {\n <tr\n class=\"bg-chr-{{color}} chr-{{textColor}} flex flex-col flex-no wrap sm:table-row rounded-lg mb-2 sm:mb-0 \">\n @for (column of columns; track column) {\n <th app-chr-table-header-cell class=\"p-3 h-14\" display=\"{{ column.display }}\"\n column=\"{{ column.properties }}\" [(isAsc)]=\"isAsc\" alignment=\"{{column.alignment}}\"\n (isAscChange)=\"emitIsAsc($event)\" [(sortBy)]=\"sortBy\" (sortByChange)=\"emitSortBy($event)\"></th>\n }\n @if (actions) {\n <th\n class=\"h-14 p-3 text-left sm:text-center place-content-center place-items-center items-center align-middle self-center sm:w-0\">\n Actions\n </th>\n }\n </tr>\n }\n </thead>\n <tbody class=\"w-full\">\n @if (data.length <= 0) { <tr\n class=\"flex flex-col flex-no-wrap sm:table-row rounded-lg mb-0 sm:mb-2 dark:bg-slate-600\">\n <td class=\"p-3 h-14\">Pas de donnée(s)</td>\n @for (column of columns | slice: 1; track column) {\n <td class=\"p-3 h-14\"></td>\n }\n @if (actions) {\n <td class=\"p-3 h-14 grid gap-3 justify-center align-middle items-center\"\n [ngClass]=\"actions.length > 1 ? 'grid-cols-2' : 'grid-cols-1'\"></td>\n }\n </tr>\n }\n @for (entry of data |\n sort:isAsc:sortBy | paginate: {itemsPerPage: pageSize, currentPage: currentPage, id: this.id}; track\n entry; let i = $index) {\n <tr [attr.data-index]=\"i\"\n class=\"flex flex-col flex-no-wrap sm:table-row mb-2 sm:mb-0 dark:text-gray-400 dark:bg-slate-600 sm:odd:bg-gray-200 sm:dark:odd:bg-slate-700 sm:border-t-2 border-chr-{{color}} sm:first:border-0\">\n @for (column of columns; track column;) {\n <td [ngClass]=\"\n column.chipsTarget || column.chipsDisplay\n ? ''\n : ''\n \" class=\"p-3 h-14 text-ellipsis border-t-2 first:border-0 sm:first:border-t-2 border-chr-{{color}}\">\n <ng-container [ngTemplateOutlet]=\"default\"\n [ngTemplateOutletContext]=\"{prop: getProperty(entry, column.properties), column: column}\">\n </ng-container>\n </td>\n }\n\n <ng-template #default let-column='column' let-property=\"prop\">\n @if (column.isLink) {\n <a target=\"_blank\" class=\"text-{{column.alignment}}\" href=\"{{column.linkStaticUrl}}{{\n getText(property, column)\n }}\">\n {{\n currentText\n }}\n </a>\n }\n @if (!column.isLink) {\n <div class=\"flex flex-row\" [ngClass]=\"{\n 'justify-start': column.alignment == 'left',\n 'justify-center': column.alignment == 'center',\n 'justify-end': column.alignment == 'right',\n 'gap-2': column.chipsDisplay && getText(property, column)\n }\">\n @if (column.chipsTarget || column.chipsDisplay) {\n <div>\n <ng-container\n [ngTemplateOutlet]=\"column.chipsCallback ? (column.chipsCallback(entry) ? OK : NOK) : (getProperty(entry, column.chipsTarget) ? OK : NOK)\">\n </ng-container>\n <ng-template #OK>\n <span\n class=\"w-24 flex text-center content-center align-middle items-center justify-center bg-green-100 text-green-800 text-xs font-medium py-0.5 rounded-full dark:bg-green-900 dark:text-green-300\">{{\n column.chipsDisplay && column.chipsDisplay[0] }}</span>\n </ng-template>\n <ng-template #NOK>\n <span\n class=\"w-24 flex text-center content-center align-middle items-center justify-center bg-red-100 text-red-800 text-xs font-medium py-0.5 rounded-full dark:bg-red-900 dark:text-red-300\">{{\n column.chipsDisplay && column.chipsDisplay[1] }}</span>\n </ng-template>\n </div>\n }@else {\n <p class=\"inline-block overflow-hidden text-nowrap text-ellipsis\">\n {{\n currentText || getText(property, column)\n }}\n </p>\n }\n </div>\n }\n </ng-template>\n\n @if (actions) {\n <td class=\"p-3 h-14 flex gap-2 w-full sm:w-min justify-center\">\n @for (action of actions; track action) {\n <app-chr-button class=\"w-full\" [disabled]=\"\n action.disabledCallback\n ? action.disabledCallback(entry)\n : action.disabled || false\n \" [display]=\"action.display\" [icon]=\"action.icon\" [click]=\"action.callback.bind(null, entry, i)\"\n [color]=\"action.color\" type=\"responsive\">\n </app-chr-button>\n }\n </td>\n }\n </tr>\n }\n @for (r of computedRows; track r) {\n <tr\n class=\"flex flex-col flex-no-wrap sm:table-row mb-2 sm:mb-0 dark:text-gray-400 dark:bg-slate-600 sm:odd:bg-gray-200 sm:dark:odd:bg-slate-700\">\n @for (c of r.columns; track c) {\n <td [ngClass]=\"c.alignment && 'text-'+(c.alignment||'left')\" class=\"p-3 h-14\">\n {{c.label && c.label + ':'}} {{c.value || (c.callback && c.callback(data))}} {{c.after}}\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n <app-chr-paginator [id]=\"this.id\" [(pageSize)]=\"pageSize\" [(page)]=\"currentPage\"\n (pageSizeChange)=\"emitPageSize($event)\" (pageChange)=\"emitCurrentPage($event)\"></app-chr-paginator>\n }\n </div>\n</div>","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\nimport { MatIcon } from \"@angular/material/icon\";\n\n@Component({\n\tselector: \"app-chr-checkbox\",\n\ttemplateUrl: \"./chr-checkbox.component.html\",\n\tstyleUrls: [\n\t\t\"./chr-checkbox.component.scss\",\n\t\t\"../../../../../tailwindbuild.css\",\n\t],\n\tstandalone: true,\n\timports: [MatIcon],\n})\nexport class ChrCheckboxComponent {\n\tpublic checked: boolean = false;\n\n\t@Input() type: \"info\" | \"success\" = \"info\";\n\n\t@Input() disabled: boolean = false;\n\n\t@Output() change: EventEmitter<{ checked: boolean }> = new EventEmitter<{\n\t\tchecked: boolean;\n\t}>();\n\n\tcheck(end: boolean) {\n\t\tif (this.disabled) return;\n\t\tif (end) {\n\t\t\tthis.checked = true;\n\t\t\tthis.change.emit({ checked: true });\n\t\t} else {\n\t\t\tthis.checked = false;\n\t\t\tthis.change.emit({ checked: false });\n\t\t}\n\t}\n}\n","<div>\n @if (checked) {\n <div (click)=\"check(false)\" [class.info]=\"type=='info'&&!disabled\"\n [class.bg-green-100]=\"type=='success'&&!disabled\" [class.cursor-pointer]=\"!disabled\"\n [class.bg-grey-400]=\"disabled\"\n class=\"box-border rounded-lg p-3 h-12 text-center border-bottom-accent sm:border-none\">\n <div class=\"flex justify-center items-center\"><mat-icon>check-circle</mat-icon></div>\n </div>\n }\n @if (!checked) {\n <div (click)=\"check(true)\" [class.cursor-pointer]=\"!disabled\" [class.disabled]=\"disabled\"\n [class.bg-gray-200]=\"disabled\" [class.bg-red-100]=\"!disabled\"\n class=\"box-border p-3 h-12 text-center rounded-lg border-bottom-accent sm:border-none\">\n <div class=\"flex justify-center items-center\"><mat-icon>close</mat-icon></div>\n </div>\n }\n</div>","import { Component } from \"@angular/core\";\n\n@Component({\n\tselector: \"app-chr-separator\",\n\ttemplateUrl: \"./chr-separator.component.html\",\n\tstyleUrls: [\n\t\t\"./chr-separator.component.scss\",\n\t\t\"../../../../../tailwindbuild.css\",\n\t],\n\tstandalone: true,\n})\nexport class ChrSeparatorComponent {}\n","<div class=\"py-4\">\n <hr class=\"\" />\n</div>","export interface ILiveUpdateMessage {\r\n\tstatus: LiveUpdateStatus;\r\n\tmessage?: string | null;\r\n}\r\n\r\nexport enum LiveUpdateStatus {\r\n\tInfo,\r\n\tWarning,\r\n\tError,\r\n\tEnd,\r\n}\r\n\r\nexport const DEFAULTLIVEUPDATEMESSAGE: ILiveUpdateMessage = {\r\n\tstatus: LiveUpdateStatus.Info,\r\n\tmessage: \"Chargement...\",\r\n};\r\n\r\nexport const DefaultLiveUpdateMessage = DEFAULTLIVEUPDATEMESSAGE;\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class LoaderService {\r\n private is_loading: boolean = false;\r\n private is_loading$ = new BehaviorSubject<boolean>(this.is_loading);\r\n\r\n constructor() {}\r\n\r\n setLoading = (is: boolean) => {\r\n this.is_loading = is;\r\n this.is_loading$.next(this.is_loading);\r\n };\r\n\r\n isLoading = () => {\r\n return this.is_loading;\r\n };\r\n\r\n isLoadingAsync = () => {\r\n return this.is_loading$.asObservable();\r\n };\r\n}\r\n","import { Injectable, inject } from \"@angular/core\";\r\nimport {\r\n\tHttpErrorResponse,\r\n\tHttpEvent,\r\n\tHttpHandler,\r\n\tHttpInterceptor,\r\n\tHttpInterceptorFn,\r\n\tHttpRequest,\r\n\tHttpResponse,\r\n} from \"@angular/common/http\";\r\nimport { catchError, Observable, throwError, tap } from \"rxjs\";\r\nimport { finalize } from \"rxjs/operators\";\r\nimport { LoaderService } from \"../../services/loader.service\";\r\n\r\nexport const SpinnerInterceptor: HttpInterceptorFn = (req, next) => {\r\n\tconst loader: LoaderService = inject(LoaderService);\r\n\tlet requestStackSize = 0;\r\n\r\n\tif (req.headers.get(\"skip\") == \"true\") {\r\n\t\treq = req.clone({ headers: req.headers.delete(\"skip\") });\r\n\t\treturn next(req);\r\n\t}\r\n\treq = req.clone({ headers: req.headers.delete(\"skip\") });\r\n\trequestStackSize++;\r\n\tloader.setLoading(true);\r\n\treturn next(req).pipe(\r\n\t\ttap((data) => {\r\n\t\t\tif (data instanceof HttpResponse) {\r\n\t\t\t\t//Do something\r\n\t\t\t}\r\n\t\t}),\r\n\t\tfinalize(() => {\r\n\t\t\trequestStackSize--;\r\n\t\t\tif (requestStackSize == 0) {\r\n\t\t\t\tloader.setLoading(false);\r\n\t\t\t}\r\n\t\t})\r\n\t);\r\n};\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Observable, of, tap, Subject, BehaviorSubject } from \"rxjs\";\r\n\r\n@Injectable({\r\n\tprovidedIn: \"root\",\r\n})\r\nexport class DataService {\r\n\tprivate data = new Map<string, BehaviorSubject<any>>();\r\n\tprivate syncData: { [key: string]: any } = {};\r\n\tconstructor() {}\r\n\r\n\tset = (key: string, value: any): void => {\r\n\t\tconst data = this.data.get(key);\r\n\t\tif (!data) this.data.set(key, new BehaviorSubject(value));\r\n\t\telse data.next(value);\r\n\r\n\t\tthis.syncData[key] = value;\r\n\t};\r\n\r\n\tget = (key: string): Observable<any> => {\r\n\t\tconst data = this.data.get(key);\r\n\t\tif (!data) this.data.set(key, new BehaviorSubject(null));\r\n\t\treturn this.data.get(key)!;\r\n\t};\r\n\r\n\tgetSync = (key: string): any => {\r\n\t\treturn this.syncData[key];\r\n\t};\r\n\r\n\tclear = (key: string): void => {\r\n\t\treturn this.data.get(key)?.next(null);\r\n\t};\r\n\r\n\tremove = (key: string): boolean => {\r\n\t\treturn this.data.delete(key);\r\n\t};\r\n}\r\n","import { inject } from \"@angular/core\";\r\nimport {\r\n\tHttpContextToken,\r\n\tHttpEvent,\r\n\tHttpInterceptorFn,\r\n\tHttpResponse,\r\n} from \"@angular/common/http\";\r\nimport { finalize, Observable, tap } from \"rxjs\";\r\nimport { LiveUpdateService } from \"../../services/live-update.service\";\r\nimport { XSRFCOOKIENAME, XSRFHEADERNAME } from \"../providers/xsrf-provider\";\r\nimport { DataService } from \"../../services/data.service\";\r\n\r\nexport const XsrfInterceptor: HttpInterceptorFn = (req, next) => {\r\n\tconst headerName: string = inject(XSRFHEADERNAME);\r\n\r\n\tconst liveUpdateService: LiveUpdateService = inject(LiveUpdateService);\r\n\tconst dataService: DataService = inject(DataService);\r\n\r\n\tconst csrfToken = dataService.getSync(headerName);\r\n\r\n\tconst hasCsrfToken = csrfToken !== null && csrfToken !== undefined;\r\n\tconst shouldIntercept = [\"PUT\", \"POST\", \"DELETE\"].includes(req.method);\r\n\tconst isWebSocket = req.url.includes(liveUpdateService.getHubUrl());\r\n\r\n\tif (hasCsrfToken && shouldIntercept && !isWebSocket) {\r\n\t\tconst cloned = req.clone({\r\n\t\t\theaders: req.headers.set(headerName, csrfToken),\r\n\t\t});\r\n\r\n\t\tliveUpdateService.initConnection().subscribe();\r\n\t\treturn next(cloned).pipe(\r\n\t\t\tWaitAndStoreXsrfToken(headerName, dataService),\r\n\t\t\tfinalize(() => liveUpdateService.closeConnection().subscribe())\r\n\t\t);\r\n\t} else {\r\n\t\treturn next(req).pipe(WaitAndStoreXsrfToken(headerName, dataService));\r\n\t}\r\n};\r\n\r\nexport const WaitAndStoreXsrfToken = (\r\n\theadername: string,\r\n\tdataService: DataService\r\n) => {\r\n\treturn (source: Observable<HttpEvent<any>>) => {\r\n\t\treturn source.pipe(\r\n\t\t\ttap((event) => {\r\n\t\t\t\tif (event instanceof HttpResponse) {\r\n\t\t\t\t\tconst xsrfToken = event.headers.get(headername);\r\n\t\t\t\t\tif (xsrfToken) {\r\n\t\t\t\t\t\tdataService.set(headername, xsrfToken);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn event;\r\n\t\t\t})\r\n\t\t);\r\n\t};\r\n};\r\n","import {\r\n\tHttpFeature,\r\n\tHttpInterceptorFn,\r\n\tprovideHttpClient,\r\n\twithInterceptors,\r\n\twithXsrfConfiguration,\r\n} from \"@angular/common/http\";\r\nimport { InjectionToken } from \"@angular/core\";\r\nimport { SpinnerInterceptor } from \"../interceptors/SpinnerInterceptor\";\r\nimport { XsrfInterceptor } from \"../interceptors/XsrfInterceptor\";\r\n\r\nexport interface IXsrfProviderParams {\r\n\txsrfHeader: string;\r\n\txsrfCookie?: string;\r\n\thubUrl?: string;\r\n\tinterceptors?: HttpInterceptorFn[];\r\n\tfeatures?: HttpFeature<any>[];\r\n}\r\n\r\nexport const provideXsrfHttpClient = (params: IXsrfProviderParams): any[] => {\r\n\treturn [\r\n\t\t{ provide: XSRFHEADERNAME, useValue: params.xsrfHeader },\r\n\t\t{\r\n\t\t\tprovide: XSRFCOOKIENAME,\r\n\t\t\tuseValue: params.xsrfCookie || params.xsrfHeader,\r\n\t\t},\r\n\t\t{ provide: HUBURL, useValue: params.hubUrl },\r\n\t\tprovideHttpClient(\r\n\t\t\twithInterceptors([\r\n\t\t\t\tSpinnerInterceptor,\r\n\t\t\t\tXsrfInterceptor,\r\n\t\t\t\t...(params?.interceptors || []),\r\n\t\t\t]),\r\n\t\t\twithXsrfConfiguration({\r\n\t\t\t\theaderName: params.xsrfHeader,\r\n\t\t\t\tcookieName: params.xsrfHeader,\r\n\t\t\t}),\r\n\t\t\t...(params?.features || [])\r\n\t\t),\r\n\t];\r\n};\r\n\r\nexport const XSRFHEADERNAME = new InjectionToken<string>(\"xsrfHeader\");\r\nexport const XSRFCOOKIENAME = new InjectionToken<string>(\"xsrfCookie\");\r\nexport const HUBURL = new InjectionToken<string>(\"hubUrl\");\r\n","import { Inject, Injectable, Optional } from \"@angular/core\";\r\nimport {\r\n\tBehaviorSubject,\r\n\tdelay,\r\n\tfilter,\r\n\tfrom,\r\n\tObservable,\r\n\tReplaySubject,\r\n\tskipWhile,\r\n\tswitchMap,\r\n\ttap,\r\n\ttimer,\r\n} from \"rxjs\";\r\nimport {\r\n\tHttpClient,\r\n\tHttpTransportType,\r\n\tHubConnection,\r\n\tHubConnectionBuilder,\r\n\tHubConnectionState,\r\n\tIHttpConnectionOptions,\r\n\tLogLevel,\r\n} from \"@microsoft/signalr\";\r\nimport {\r\n\tDEFAULTLIVEUPDATEMESSAGE,\r\n\tILiveUpdateMessage,\r\n\tLiveUpdateStatus,\r\n} from \"../models/live-update-message\";\r\nimport { XSRFHEADERNAME, HUBURL } from \"../config/providers/xsrf-provider\";\r\nimport { DataService } from \"./data.service\";\r\n\r\n@Injectable({\r\n\tprovidedIn: \"root\",\r\n})\r\nexport class LiveUpdateService {\r\n\tprivate _hubUrl: string;\r\n\tprivate _connection: HubConnection | null = null;\r\n\tprivate _xsrf: string | null;\r\n\tprivate _xsrfHeader: string | null;\r\n\t//private _client: HttpClient;\r\n\tprivate _message: BehaviorSubject<ILiveUpdateMessage> = new BehaviorSubject(\r\n\t\tDEFAULTLIVEUPDATEMESSAGE\r\n\t);\r\n\tprivate _update: BehaviorSubject<string> = new BehaviorSubject(\r\n\t\tDEFAULTLIVEUPDATEMESSAGE?.message || \"\"\r\n\t);\r\n\r\n\tconstructor(\r\n\t\t@Inject(HUBURL) @Optional() hubUrl: string,\r\n\t\t@Inject(XSRFHEADERNAME) @Optional() xsrfHeader: string,\r\n\t\t@Inject(DataService) private dataService: DataService\r\n\t) {\r\n\t\tthis._hubUrl = hubUrl;\r\n\t\tthis._xsrfHeader = xsrfHeader;\r\n\t\tthis._xsrf = dataService.getSync(this._xsrfHeader);\r\n\t}\r\n\r\n\tpublic initConnection = (): Observable<void> => {\r\n\t\tif (this._xsrfHeader == null) throw new Error(\"xsrfHeader is not set\");\r\n\t\tif (this._hubUrl == null) throw new Error(\"hubUrl is not set\");\r\n\r\n\t\tthis._xsrf = this.dataService.getSync(this._xsrfHeader);\r\n\t\tif (this._connection == null)\r\n\t\t\tthis._connection = new HubConnectionBuilder()\r\n\t\t\t\t.withUrl(this._hubUrl, {\r\n\t\t\t\t\ttransport: HttpTransportType.ServerSentEvents,\r\n\t\t\t\t\theaders: { [this._xsrfHeader]: this._xsrf },\r\n\t\t\t\t} as IHttpConnectionOptions)\r\n\t\t\t\t.configureLogging(LogLevel.None)\r\n\t\t\t\t.withAutomaticReconnect()\r\n\t\t\t\t.build();\r\n\r\n\t\treturn new Observable<void>((observer) => {\r\n\t\t\tif (this._connection?.state == HubConnectionState.Connected)\r\n\t\t\t\tthis._connection;\r\n\t\t\telse\r\n\t\t\t\tthis._connection\r\n\t\t\t\t\t?.start()\r\n\t\t\t\t\t.then(() => {\r\n\t\t\t\t\t\tobserver.next();\r\n\t\t\t\t\t\tobserver.complete();\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch((error: any) => {\r\n\t\t\t\t\t\tobserver.error(error);\r\n\t\t\t\t\t});\r\n\r\n\t\t\tthis._connection?.on(\"UPDATE\", (message: ILiveUpdateMessage) => {\r\n\t\t\t\tthis.pushMessage(message);\r\n\t\t\t});\r\n\t\t});\r\n\t};\r\n\r\n\tpublic onUpdate(): Observable<string> {\r\n\t\treturn this._update\r\n\t\t\t.asObservable()\r\n\t\t\t.pipe(skipWhile((message) => message == null));\r\n\t}\r\n\r\n\tpublic closeConnection(): Observable<void> {\r\n\t\treturn from(this._connection!.stop()).pipe(\r\n\t\t\ttap(() => {\r\n\t\t\t\tthis._connection = null;\r\n\r\n\t\t\t\t//We push a null to flush the observable\r\n\t\t\t\tthis._message.next(DEFAULTLIVEUPDATEMESSAGE);\r\n\t\t\t\tthis._update.next(DEFAULTLIVEUPDATEMESSAGE?.message || \"\");\r\n\t\t\t})\r\n\t\t);\r\n\t}\r\n\r\n\tpublic getMessage(): Observable<ILiveUpdateMessage> {\r\n\t\treturn this._message\r\n\t\t\t.asObservable()\r\n\t\t\t.pipe(skipWhile((message) => message == null));\r\n\t}\r\n\r\n\tpublic getHubUrl = (): string => this._hubUrl;\r\n\r\n\tprivate pushMessage(message: ILiveUpdateMessage) {\r\n\t\tthis._message.next(message);\r\n\t\tthis._update.next(\r\n\t\t\tmessage?.message || DEFAULTLIVEUPDATEMESSAGE?.message || \"\"\r\n\t\t);\r\n\t\tif (message.status === LiveUpdateStatus.End) {\r\n\t\t\tthis._connection?.stop();\r\n\t\t}\r\n\t}\r\n}\r\n","import {\r\n\tChangeDetectionStrategy,\r\n\tChangeDetectorRef,\r\n\tComponent,\r\n\tOnDestroy,\r\n\tOnInit,\r\n} from \"@angular/core\";\r\n\r\nimport { CommonModule } from \"@angular/common\";\r\nimport {\r\n\ttap,\r\n\tpipe,\r\n\tObservable,\r\n\ttakeUntil,\r\n\tBehaviorSubject,\r\n\tskipWhile,\r\n\ttakeWhile,\r\n\tfinalize,\r\n} from \"rxjs\";\r\nimport {\r\n\tDefaultLiveUpdateMessage,\r\n\tILiveUpdateMessage,\r\n\tLiveUpdateStatus,\r\n} from \"../models/live-update-message\";\r\nimport { LoaderService } from \"../services/loader.service\";\r\nimport { LiveUpdateService } from \"../services/live-update.service\";\r\n\r\n@Component({\r\n\tselector: \"app-chr-spinner\",\r\n\ttemplateUrl: \"./chr-spinner.component.html\",\r\n\tstyleUrls: [\"./chr-spinner.component.scss\"],\r\n\timports: [CommonModule],\r\n\tstandalone: true,\r\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ChrSpinnerComponent implements OnInit {\r\n\tpublic message: ILiveUpdateMessage = DefaultLiveUpdateMessage;\r\n\r\n\tconstructor(\r\n\t\tpublic loader: LoaderService,\r\n\t\tpublic liveUpdate: LiveUpdateService,\r\n\t\tprivate changeDetector: ChangeDetectorRef\r\n\t) {}\r\n\r\n\tngOnInit() {\r\n\t\tthis.liveUpdate\r\n\t\t\t.getMessage()\r\n\t\t\t.pipe(\r\n\t\t\t\tfinalize(() => {\r\n\t\t\t\t\tthis.message = DefaultLiveUpdateMessage;\r\n\t\t\t\t\tconsole.error(\r\n\t\t\t\t\t\t\"Observable closed. This should not happen as further live update messages won't be received.\"\r\n\t\t\t\t\t);\r\n\t\t\t\t})\r\n\t\t\t)\r\n\t\t\t.subscribe((res) => {\r\n\t\t\t\tthis.message = res;\r\n\t\t\t\tthis.changeDetector.detectChanges();\r\n\t\t\t});\r\n\t\tthis.loader.isLoadingAsync().subscribe((res) => {\r\n\t\t\tthis.changeDetector.detectChanges();\r\n\t\t});\r\n\t}\r\n\r\n\tdisplay = (message: ILiveUpdateMessage | null) => {\r\n\t\treturn message?.message;\r\n\t\t//return `${message?.status} \\n\\n ${message?.message}`;\r\n\t};\r\n}\r\n","@if (this.loader.isLoading()) {\r\n<div\r\n class=\"cssload-container flex flex-col justify-center content-center items-center bg-gray-200 dark:bg-slate-600 opacity-85\">\r\n <div class=\"wheel-wrapper\">\r\n <div class=\"cssload-speeding-wheel\">\r\n </div>\r\n </div>\r\n <div class=\"w-96 inset-full h-0 text-ellipsis text-wrap text-center\">\r\n {{display((message))}}\r\n </div>\r\n</div>\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { Observable, Subject, timer, BehaviorSubject } from \"rxjs\";\r\nimport { concatMap, finalize, switchMap, takeUntil } from \"rxjs/operators\";\r\n\r\nexport interface Toast {\r\n\ttype: \"error\" | \"success\" | \"warning\";\r\n\tmessage: string;\r\n\tduration?: number;\r\n}\r\n\r\n@Injectable({\r\n\tprovidedIn: \"root\",\r\n})\r\nexport class ToastService {\r\n\tprivate toastQueue = new Subject<Toast>();\r\n\tprivate currentToastSubject = new BehaviorSubject<Toast | null>(null);\r\n\tpublic currentToast$ = this.currentToastSubject.asObservable();\r\n\tprivate toastCloseSubject = new Subject<void>();\r\n\tprivate default_duration = 5000;\r\n\r\n\tconstructor() {\r\n\t\t//We are leveraging the power of RXJS to handle the delay between the\r\n\t\tthis.toastQueue\r\n\t\t\t.pipe(\r\n\t\t\t\tconcatMap((toast: Toast) => {\r\n\t\t\t\t\t//We reset the click subject to ensure rxjs doesn't beleive it's been clicked\r\n\t\t\t\t\tthis.toastCloseSubject = new Subject<void>();\r\n\t\t\t\t\t// We send the next toast\r\n\t\t\t\t\tthis.currentToastSubject.next(toast);\r\n\t\t\t\t\treturn timer(toast.duration || this.default_duration).pipe(\r\n\t\t\t\t\t\t//If the user click the next button, we stop the current emission and go to the next one\r\n\t\t\t\t\t\ttakeUntil(this.toastCloseSubject),\r\n\t\t\t\t\t\t//After the toast duration, we send a null value. If there is still a toast waiting, this null value will be overriden after the small delay.\r\n\t\t\t\t\t\t//Otherwise this null value allows us to notify the subscriber that there is no toast waiting.\r\n\t\t\t\t\t\tfinalize(() => {\r\n\t\t\t\t\t\t\tthis.currentToastSubject.next(null);\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t//Small delay between toasts\r\n\t\t\t\t\t\tswitchMap(() => timer(500))\r\n\t\t\t\t\t);\r\n\t\t\t\t})\r\n\t\t\t)\r\n\t\t\t.subscribe();\r\n\t}\r\n\r\n\tpublic current = (): Observable<Toast | null> => {\r\n\t\treturn this.currentToastSubject;\r\n\t};\r\n\r\n\tpublic next = () => {\r\n\t\tthis.toastCloseSubject.next();\r\n\t};\r\n\r\n\tpublic setSuccess(message?: string, time?: number) {\r\n\t\tthis.set(\"success\", message || \"\", time);\r\n\t}\r\n\r\n\tpublic setError(message: string, time?: number) {\r\n\t\tthis.set(\"error\", message, time);\r\n\t}\r\n\r\n\tpublic setWarning(message: string, time?: number) {\r\n\t\tthis.set(\"warning\", message, time);\r\n\t}\r\n\r\n\tprivate set = async (\r\n\t\ttype: \"warning\" | \"error\" | \"success\",\r\n\t\tmessage: string,\r\n\t\tduration?: number\r\n\t) => {\r\n\t\tthis.toastQueue.next({\r\n\t\t\ttype: type,\r\n\t\t\tmessage: message,\r\n\t\t\tduration: duration || this.default_duration,\r\n\t\t});\r\n\t};\r\n}\r\n","import { Component, Input } from \"@angular/core\";\r\nimport { MatIconModule } from \"@angular/material/icon\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { ToastService } from \"../services/toast.service\";\r\n\r\n@Component({\r\n\tselector: \"app-chr-toast\",\r\n\tstandalone: true,\r\n\timports: [CommonModule, MatIconModule],\r\n\ttemplateUrl: \"./chr-toast.component.html\",\r\n\tstyleUrl: \"./chr-toast.component.scss\",\r\n})\r\nexport class ChrToastComponent {\r\n\t@Input() topmargin = \"0px\";\r\n\tpublic constructor(public toastService: ToastService) {}\r\n}\r\n","<div *ngIf=\"(toastService.current() | async); let toast;\" class=\"toast flex h-0\" style=\"--margin-top: {{topmargin}};\">\r\n <div class=\"toast-sticky-wrapper\">\r\n <div class=\"toast-content p-2\" [ngClass]=\"{\r\n 'chr-medium-blue':toast?.type == 'success',\r\n 'chr-orange':toast?.type == 'warning',\r\n 'chr-warn':toast?.type == 'error'\r\n }\" style=\"cursor: default;\">\r\n <mat-icon class=\"toast-status-icon\">icon</mat-icon>\r\n <p class=\"toast-message\">{{toast?.message}}</p>\r\n <mat-icon class=\"toast-close-icon\" style=\"cursor: pointer;\" (click)=\"toastService.next()\">close</mat-icon>\r\n </div>\r\n </div>\r\n</div>","import { Injectable } from \"@angular/core\";\r\nimport { MatDialog, MatDialogConfig } from \"@angular/material/dialog\";\r\nimport { ChrDeleteModalComponent } from \"../chr-delete-modal/chr-delete-modal.component\";\r\n\r\n@Injectable({\r\n\tprovidedIn: \"root\",\r\n})\r\nexport class DialogService {\r\n\tconstructor(private dialog: MatDialog) {}\r\n\r\n\topenDelete = (callback?: Function, callbackElement?: any) => {\r\n\t\tconst dialogRef = this.open(ChrDeleteModalComponent);\r\n\r\n\t\tdialogRef.afterClosed().subscribe((result) => {\r\n\t\t\tif (result == true) callback?.(callbackElement);\r\n\t\t});\r\n\t};\r\n\r\n\topen = (component: any, options?: MatDialogConfig<any> | undefined) => {\r\n\t\treturn this.dialog.open(component, options);\r\n\t};\r\n}\r\n","/*\n * Public API Surface of chr-components\n */\n//COMPONENTS\nexport * from \"./lib/chr-breadcrumb/chr-breadcrumb.component\";\nexport * from \"./lib/chr-button/chr-button.component\";\nexport * from \"./lib/chr-delete-modal/chr-delete-modal.component\";\nexport { ChrFormComponentLegacy } from \"./lib/chr-form-legacy/chr-form-legacy.component\";\nexport * from \"./lib/chr-form/chr-form.component\";\nexport * from \"./lib/chr-search-select/chr-search-select.component\";\nexport * from \"./lib/chr-searchbar/chr-searchbar.component\";\nexport * from \"./lib/chr-paginator/chr-paginator.component\";\nexport * from \"./lib/chr-table/chr-table.component\";\nexport * from \"./lib/chr-table-header-cell/chr-table-header-cell.component\";\nexport * from \"./lib/chr-checkbox/chr-checkbox.component\";\nexport * from \"./lib/chr-separator/chr-separator.component\";\nexport * from \"./lib/models/chr-validators/decimal-validator\";\nexport * from \"./lib/models/chr-validators/max-date-validator\";\nexport * from \"./lib/models/chr-validators/type-validator\";\nexport * from \"./lib/chr-spinner/chr-spinner.component\";\nexport * from \"./lib/chr-toast/chr-toast.component\";\n//SERVICES\nexport * from \"./lib/services/dialog.service\";\nexport * from \"./lib/services/data.service\";\nexport * from \"./lib/services/live-update.service\";\nexport * from \"./lib/services/loader.service\";\nexport * from \"./lib/services/toast.service\";\n//MODELS\nexport * from \"./lib/models/live-update-message\";\n//INTERCEPTORS\nexport * from \"./lib/config/interceptors/SpinnerInterceptor\";\nexport * from \"./lib/config/interceptors/XsrfInterceptor\";\n//PROVIDERS\nexport * from \"./lib/config/providers/xsrf-provider\";\n//OTHERS\nexport * from \"ngx-pagination\";\nexport * from \"chrv-pipes\";\nexport * from \"@angular/material/dialog\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3","i4","finalize","i1.LoaderService","i2.LiveUpdateService","i1.ToastService"],"mappings":"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"}
@@ -2,7 +2,7 @@ import { HttpFeature, HttpInterceptorFn } from "@angular/common/http";
2
2
  import { InjectionToken } from "@angular/core";
3
3
  export interface IXsrfProviderParams {
4
4
  xsrfHeader: string;
5
- xsrfCookie: string;
5
+ xsrfCookie?: string;
6
6
  hubUrl?: string;
7
7
  interceptors?: HttpInterceptorFn[];
8
8
  features?: HttpFeature<any>[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chrv-components",
3
- "version": "1.8.17",
3
+ "version": "1.8.18",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">=17.3.0",
6
6
  "@angular/core": ">=17.3.0",
Binary file