barak-ui 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,63 @@
1
+ # BarakUi
2
+
3
+ This project was generated using [Angular CLI](https://github.com/angular/angular-cli) version 19.2.0.
4
+
5
+ ## Code scaffolding
6
+
7
+ Angular CLI includes powerful code scaffolding tools. To generate a new component, run:
8
+
9
+ ```bash
10
+ ng generate component component-name
11
+ ```
12
+
13
+ For a complete list of available schematics (such as `components`, `directives`, or `pipes`), run:
14
+
15
+ ```bash
16
+ ng generate --help
17
+ ```
18
+
19
+ ## Building
20
+
21
+ To build the library, run:
22
+
23
+ ```bash
24
+ ng build barak-ui
25
+ ```
26
+
27
+ This command will compile your project, and the build artifacts will be placed in the `dist/` directory.
28
+
29
+ ### Publishing the Library
30
+
31
+ Once the project is built, you can publish your library by following these steps:
32
+
33
+ 1. Navigate to the `dist` directory:
34
+ ```bash
35
+ cd dist/barak-ui
36
+ ```
37
+
38
+ 2. Run the `npm publish` command to publish your library to the npm registry:
39
+ ```bash
40
+ npm publish
41
+ ```
42
+
43
+ ## Running unit tests
44
+
45
+ To execute unit tests with the [Karma](https://karma-runner.github.io) test runner, use the following command:
46
+
47
+ ```bash
48
+ ng test
49
+ ```
50
+
51
+ ## Running end-to-end tests
52
+
53
+ For end-to-end (e2e) testing, run:
54
+
55
+ ```bash
56
+ ng e2e
57
+ ```
58
+
59
+ Angular CLI does not come with an end-to-end testing framework by default. You can choose one that suits your needs.
60
+
61
+ ## Additional Resources
62
+
63
+ For more information on using the Angular CLI, including detailed command references, visit the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page.
@@ -0,0 +1,382 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Injectable, EventEmitter, Output, Input, Component, Inject, ViewChild } from '@angular/core';
3
+ import * as i1 from '@angular/material/dialog';
4
+ import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
5
+ import * as i1$1 from '@angular/material/snack-bar';
6
+ import * as i1$2 from '@angular/common';
7
+ import { CommonModule } from '@angular/common';
8
+ import * as i3 from '@angular/material/button';
9
+ import { MatButtonModule } from '@angular/material/button';
10
+ import * as i2 from '@angular/material/icon';
11
+ import { MatIconModule } from '@angular/material/icon';
12
+ import * as i2$2 from '@angular/forms';
13
+ import { FormsModule } from '@angular/forms';
14
+ import * as i7 from '@angular/material/checkbox';
15
+ import { MatCheckboxModule } from '@angular/material/checkbox';
16
+ import * as i5 from '@angular/material/menu';
17
+ import { MatMenuModule } from '@angular/material/menu';
18
+ import * as i2$1 from '@angular/material/table';
19
+ import { MatTableModule } from '@angular/material/table';
20
+ import * as i6 from '@angular/material/tooltip';
21
+ import { MatTooltipModule } from '@angular/material/tooltip';
22
+ import * as i1$3 from '@angular/material/paginator';
23
+ import { MatPaginatorModule } from '@angular/material/paginator';
24
+ import * as i3$1 from '@angular/material/select';
25
+ import { MatSelectModule } from '@angular/material/select';
26
+ import { MatOptionModule } from '@angular/material/core';
27
+ import * as i4 from '@angular/material/input';
28
+ import { MatInputModule } from '@angular/material/input';
29
+ import { MatFormFieldModule } from '@angular/material/form-field';
30
+ import * as i1$4 from '@angular/material/progress-spinner';
31
+ import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
32
+
33
+ class BarakUiModalService {
34
+ dialog;
35
+ constructor(dialog) {
36
+ this.dialog = dialog;
37
+ }
38
+ /**
39
+ * Ouvre une modale générique
40
+ *
41
+ * @param component Le composant à afficher dans la modale
42
+ * @param data Les données à transmettre au composant
43
+ * @param options Options supplémentaires pour configurer la modale
44
+ * @returns Une référence à la modale
45
+ */
46
+ openModal(component, data, options = { width: '400px', maxWidth: '80wv' }) {
47
+ console.log("options.width", options.width);
48
+ return this.dialog.open(component, {
49
+ width: options.width,
50
+ maxWidth: options.maxWidth,
51
+ data: data,
52
+ disableClose: true
53
+ });
54
+ }
55
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: BarakUiModalService, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Injectable });
56
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: BarakUiModalService, providedIn: 'root' });
57
+ }
58
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: BarakUiModalService, decorators: [{
59
+ type: Injectable,
60
+ args: [{
61
+ providedIn: 'root'
62
+ }]
63
+ }], ctorParameters: () => [{ type: i1.MatDialog }] });
64
+
65
+ class BarakUiToastService {
66
+ snackBar;
67
+ constructor(snackBar) {
68
+ this.snackBar = snackBar;
69
+ }
70
+ /**
71
+ * Affiche un message de snack bar
72
+ * @param message Le texte à afficher
73
+ * @param type Type de message ('success', 'error', 'info')
74
+ */
75
+ open(message, type = 'info', duration = 3000, horizontalPosition = 'right', verticalPosition = 'top') {
76
+ const config = {
77
+ duration: duration,
78
+ horizontalPosition: horizontalPosition,
79
+ verticalPosition: verticalPosition,
80
+ panelClass: [`snackbar-${type}`]
81
+ };
82
+ this.snackBar.open(message, 'Fermer', config);
83
+ }
84
+ success(message) {
85
+ this.open(message, 'success');
86
+ }
87
+ error(message) {
88
+ this.open(message, 'error');
89
+ }
90
+ info(message) {
91
+ this.open(message, 'info');
92
+ }
93
+ /**
94
+ * Ferme tous les snackbars ouverts
95
+ */
96
+ dismiss() {
97
+ this.snackBar.dismiss();
98
+ }
99
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: BarakUiToastService, deps: [{ token: i1$1.MatSnackBar }], target: i0.ɵɵFactoryTarget.Injectable });
100
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: BarakUiToastService, providedIn: 'root' });
101
+ }
102
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: BarakUiToastService, decorators: [{
103
+ type: Injectable,
104
+ args: [{
105
+ providedIn: 'root'
106
+ }]
107
+ }], ctorParameters: () => [{ type: i1$1.MatSnackBar }] });
108
+
109
+ class BarakUiButtonComponent {
110
+ variant = 'primary';
111
+ size = 'md';
112
+ disabled = false;
113
+ clicked = new EventEmitter();
114
+ onClick(event) {
115
+ if (!this.disabled) {
116
+ this.clicked.emit();
117
+ }
118
+ }
119
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: BarakUiButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
120
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: BarakUiButtonComponent, isStandalone: true, selector: "barak-ui-button", inputs: { variant: "variant", size: "size", disabled: "disabled" }, outputs: { clicked: "clicked" }, ngImport: i0, template: "<button class=\"barak-btn\" [ngClass]=\"[\n 'barak-btn--' + variant,\n 'barak-btn--' + size,\n disabled ? 'barak-btn--disabled' : ''\n ]\" [disabled]=\"disabled\" (click)=\"onClick($event)\">\n <ng-content></ng-content>\n</button>", styles: ["@import\"https://fonts.googleapis.com/icon?family=Material+Icons\";.material-icons{font-family:Material Icons;font-weight:400;font-style:normal}.barak-btn{border:none;border-radius:8px;padding:.5rem 1rem;font-weight:600;cursor:pointer;transition:all .2s ease-in-out}.barak-btn--primary{background-color:#c25729;color:#fff}.barak-btn--secondary{background-color:#6b7280;color:#fff}.barak-btn--danger{background-color:#e53935;color:#fff}.barak-btn--sm{font-size:.8rem}.barak-btn--md{font-size:1rem}.barak-btn--lg{font-size:1.2rem}.barak-btn:disabled{opacity:.6;cursor:not-allowed}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
121
+ }
122
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: BarakUiButtonComponent, decorators: [{
123
+ type: Component,
124
+ args: [{ selector: 'barak-ui-button', imports: [
125
+ CommonModule
126
+ ], template: "<button class=\"barak-btn\" [ngClass]=\"[\n 'barak-btn--' + variant,\n 'barak-btn--' + size,\n disabled ? 'barak-btn--disabled' : ''\n ]\" [disabled]=\"disabled\" (click)=\"onClick($event)\">\n <ng-content></ng-content>\n</button>", styles: ["@import\"https://fonts.googleapis.com/icon?family=Material+Icons\";.material-icons{font-family:Material Icons;font-weight:400;font-style:normal}.barak-btn{border:none;border-radius:8px;padding:.5rem 1rem;font-weight:600;cursor:pointer;transition:all .2s ease-in-out}.barak-btn--primary{background-color:#c25729;color:#fff}.barak-btn--secondary{background-color:#6b7280;color:#fff}.barak-btn--danger{background-color:#e53935;color:#fff}.barak-btn--sm{font-size:.8rem}.barak-btn--md{font-size:1rem}.barak-btn--lg{font-size:1.2rem}.barak-btn:disabled{opacity:.6;cursor:not-allowed}\n"] }]
127
+ }], propDecorators: { variant: [{
128
+ type: Input
129
+ }], size: [{
130
+ type: Input
131
+ }], disabled: [{
132
+ type: Input
133
+ }], clicked: [{
134
+ type: Output
135
+ }] } });
136
+
137
+ class BarakUiConfirmationDialogComponent {
138
+ dialogRef;
139
+ data;
140
+ matIconRegistry;
141
+ constructor(dialogRef, data, matIconRegistry) {
142
+ this.dialogRef = dialogRef;
143
+ this.data = data;
144
+ this.matIconRegistry = matIconRegistry;
145
+ this.matIconRegistry.setDefaultFontSetClass('material-icons');
146
+ }
147
+ onCancel() {
148
+ this.dialogRef.close(false);
149
+ }
150
+ onConfirm() {
151
+ this.dialogRef.close(true);
152
+ }
153
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: BarakUiConfirmationDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i2.MatIconRegistry }], target: i0.ɵɵFactoryTarget.Component });
154
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: BarakUiConfirmationDialogComponent, isStandalone: true, selector: "barak-ui-confirmation-dialog", ngImport: i0, template: "<div class=\"confirmation-dialog\">\n <button mat-icon-button class=\"close-button\" (click)=\"onCancel()\">\n <mat-icon>close</mat-icon>\n </button>\n\n <div class=\"dialog-icon-wrapper\">\n <mat-icon class=\"dialog-icon\">info</mat-icon>\n </div>\n\n <h2 mat-dialog-title class=\"dialog-title\">Confirmation</h2>\n\n <mat-dialog-content class=\"dialog-content\">\n <p class=\"dialog-message\">{{ data.message }}</p>\n </mat-dialog-content>\n\n <mat-dialog-actions class=\"dialog-actions\">\n <button mat-stroked-button class=\"cancel-btn\" (click)=\"onCancel()\">\n Annuler\n </button>\n <button mat-raised-button class=\"confirm-btn\" (click)=\"onConfirm()\">\n Confirmer\n </button>\n </mat-dialog-actions>\n</div>", styles: ["@import\"https://fonts.googleapis.com/icon?family=Material+Icons\";.material-icons{font-family:Material Icons;font-weight:400;font-style:normal}.confirmation-dialog{position:relative;padding:0;margin:0;background:#fff;border-radius:8px;overflow:hidden}.confirmation-dialog .close-button{position:absolute;top:12px;right:12px;z-index:10;width:32px;height:32px;color:#95a5a6;transition:all .3s ease}.confirmation-dialog .close-button:hover{background-color:#95a5a61a;color:#7f8c8d;transform:rotate(90deg)}.confirmation-dialog .close-button mat-icon{font-size:20px;width:20px;height:20px}.confirmation-dialog .dialog-icon-wrapper{display:flex;justify-content:center;align-items:center;padding:32px 24px 16px}.confirmation-dialog .dialog-icon-wrapper .dialog-icon{font-size:64px;width:64px;height:64px;border-radius:50%;background:linear-gradient(135deg,#e8956f,#c25729);color:#fff;box-shadow:0 8px 24px #c257294d;animation:iconPulse 2s ease-in-out infinite}@keyframes iconPulse{0%,to{transform:scale(1);box-shadow:0 8px 24px #c257294d}50%{transform:scale(1.05);box-shadow:0 12px 32px #c2572966}}.confirmation-dialog .dialog-title{text-align:center;margin:0;padding:0 24px;color:#2c3e50;font-size:24px;font-weight:700;letter-spacing:-.5px}.confirmation-dialog .dialog-content{padding:20px 32px 32px;text-align:center}.confirmation-dialog .dialog-content .dialog-message{margin:0;font-size:16px;line-height:1.6;color:#7f8c8d;font-weight:400}.confirmation-dialog .dialog-actions{padding:0 24px 32px;margin:0;display:flex;justify-content:center;gap:16px}.confirmation-dialog .dialog-actions button{min-width:140px;height:48px;font-weight:600;font-size:15px;border-radius:12px;transition:all .3s cubic-bezier(.4,0,.2,1);text-transform:none;letter-spacing:.25px}.confirmation-dialog .dialog-actions button.cancel-btn{border:2px solid #e0e0e0;color:#7f8c8d;background:#fff}.confirmation-dialog .dialog-actions button.cancel-btn:hover{background-color:#f5f5f5;border-color:#bdc3c7;transform:translateY(-2px);box-shadow:0 6px 16px #00000014}.confirmation-dialog .dialog-actions button.cancel-btn:active{transform:translateY(0)}.confirmation-dialog .dialog-actions button.confirm-btn{background:linear-gradient(135deg,#c25729,#8b3a1f);color:#fff;box-shadow:0 4px 16px #c2572959;border:none}.confirmation-dialog .dialog-actions button.confirm-btn:hover{background:linear-gradient(135deg,#d36231,#c25729);transform:translateY(-2px);box-shadow:0 8px 24px #c2572973}.confirmation-dialog .dialog-actions button.confirm-btn:active{transform:translateY(0)}@media (max-width: 600px){.confirmation-dialog{border-radius:12px}.confirmation-dialog .close-button{top:8px;right:8px;width:28px;height:28px}.confirmation-dialog .close-button mat-icon{font-size:18px;width:18px;height:18px}.confirmation-dialog .dialog-icon-wrapper{padding:24px 20px 12px}.confirmation-dialog .dialog-icon-wrapper .dialog-icon{font-size:56px;width:56px;height:56px;padding:14px}.confirmation-dialog .dialog-title{font-size:20px;padding:0 20px}.confirmation-dialog .dialog-content{padding:16px 24px 24px}.confirmation-dialog .dialog-content .dialog-message{font-size:14px}.confirmation-dialog .dialog-actions{padding:0 20px 24px;flex-direction:column;gap:12px}.confirmation-dialog .dialog-actions button{width:100%;min-width:unset;height:44px}.confirmation-dialog .dialog-actions button.cancel-btn{order:2}.confirmation-dialog .dialog-actions button.confirm-btn{order:1}}:host ::ng-deep .mat-mdc-dialog-container{border-radius:16px;padding:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }] });
155
+ }
156
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: BarakUiConfirmationDialogComponent, decorators: [{
157
+ type: Component,
158
+ args: [{ selector: 'barak-ui-confirmation-dialog', imports: [
159
+ CommonModule,
160
+ MatButtonModule,
161
+ MatIconModule,
162
+ MatDialogModule
163
+ ], template: "<div class=\"confirmation-dialog\">\n <button mat-icon-button class=\"close-button\" (click)=\"onCancel()\">\n <mat-icon>close</mat-icon>\n </button>\n\n <div class=\"dialog-icon-wrapper\">\n <mat-icon class=\"dialog-icon\">info</mat-icon>\n </div>\n\n <h2 mat-dialog-title class=\"dialog-title\">Confirmation</h2>\n\n <mat-dialog-content class=\"dialog-content\">\n <p class=\"dialog-message\">{{ data.message }}</p>\n </mat-dialog-content>\n\n <mat-dialog-actions class=\"dialog-actions\">\n <button mat-stroked-button class=\"cancel-btn\" (click)=\"onCancel()\">\n Annuler\n </button>\n <button mat-raised-button class=\"confirm-btn\" (click)=\"onConfirm()\">\n Confirmer\n </button>\n </mat-dialog-actions>\n</div>", styles: ["@import\"https://fonts.googleapis.com/icon?family=Material+Icons\";.material-icons{font-family:Material Icons;font-weight:400;font-style:normal}.confirmation-dialog{position:relative;padding:0;margin:0;background:#fff;border-radius:8px;overflow:hidden}.confirmation-dialog .close-button{position:absolute;top:12px;right:12px;z-index:10;width:32px;height:32px;color:#95a5a6;transition:all .3s ease}.confirmation-dialog .close-button:hover{background-color:#95a5a61a;color:#7f8c8d;transform:rotate(90deg)}.confirmation-dialog .close-button mat-icon{font-size:20px;width:20px;height:20px}.confirmation-dialog .dialog-icon-wrapper{display:flex;justify-content:center;align-items:center;padding:32px 24px 16px}.confirmation-dialog .dialog-icon-wrapper .dialog-icon{font-size:64px;width:64px;height:64px;border-radius:50%;background:linear-gradient(135deg,#e8956f,#c25729);color:#fff;box-shadow:0 8px 24px #c257294d;animation:iconPulse 2s ease-in-out infinite}@keyframes iconPulse{0%,to{transform:scale(1);box-shadow:0 8px 24px #c257294d}50%{transform:scale(1.05);box-shadow:0 12px 32px #c2572966}}.confirmation-dialog .dialog-title{text-align:center;margin:0;padding:0 24px;color:#2c3e50;font-size:24px;font-weight:700;letter-spacing:-.5px}.confirmation-dialog .dialog-content{padding:20px 32px 32px;text-align:center}.confirmation-dialog .dialog-content .dialog-message{margin:0;font-size:16px;line-height:1.6;color:#7f8c8d;font-weight:400}.confirmation-dialog .dialog-actions{padding:0 24px 32px;margin:0;display:flex;justify-content:center;gap:16px}.confirmation-dialog .dialog-actions button{min-width:140px;height:48px;font-weight:600;font-size:15px;border-radius:12px;transition:all .3s cubic-bezier(.4,0,.2,1);text-transform:none;letter-spacing:.25px}.confirmation-dialog .dialog-actions button.cancel-btn{border:2px solid #e0e0e0;color:#7f8c8d;background:#fff}.confirmation-dialog .dialog-actions button.cancel-btn:hover{background-color:#f5f5f5;border-color:#bdc3c7;transform:translateY(-2px);box-shadow:0 6px 16px #00000014}.confirmation-dialog .dialog-actions button.cancel-btn:active{transform:translateY(0)}.confirmation-dialog .dialog-actions button.confirm-btn{background:linear-gradient(135deg,#c25729,#8b3a1f);color:#fff;box-shadow:0 4px 16px #c2572959;border:none}.confirmation-dialog .dialog-actions button.confirm-btn:hover{background:linear-gradient(135deg,#d36231,#c25729);transform:translateY(-2px);box-shadow:0 8px 24px #c2572973}.confirmation-dialog .dialog-actions button.confirm-btn:active{transform:translateY(0)}@media (max-width: 600px){.confirmation-dialog{border-radius:12px}.confirmation-dialog .close-button{top:8px;right:8px;width:28px;height:28px}.confirmation-dialog .close-button mat-icon{font-size:18px;width:18px;height:18px}.confirmation-dialog .dialog-icon-wrapper{padding:24px 20px 12px}.confirmation-dialog .dialog-icon-wrapper .dialog-icon{font-size:56px;width:56px;height:56px;padding:14px}.confirmation-dialog .dialog-title{font-size:20px;padding:0 20px}.confirmation-dialog .dialog-content{padding:16px 24px 24px}.confirmation-dialog .dialog-content .dialog-message{font-size:14px}.confirmation-dialog .dialog-actions{padding:0 20px 24px;flex-direction:column;gap:12px}.confirmation-dialog .dialog-actions button{width:100%;min-width:unset;height:44px}.confirmation-dialog .dialog-actions button.cancel-btn{order:2}.confirmation-dialog .dialog-actions button.confirm-btn{order:1}}:host ::ng-deep .mat-mdc-dialog-container{border-radius:16px;padding:0}\n"] }]
164
+ }], ctorParameters: () => [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
165
+ type: Inject,
166
+ args: [MAT_DIALOG_DATA]
167
+ }] }, { type: i2.MatIconRegistry }] });
168
+
169
+ class BarakUiGenericDialogComponent {
170
+ dialogRef;
171
+ constructor(dialogRef) {
172
+ this.dialogRef = dialogRef;
173
+ }
174
+ onClose() {
175
+ this.dialogRef.close();
176
+ }
177
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: BarakUiGenericDialogComponent, deps: [{ token: i1.MatDialogRef }], target: i0.ɵɵFactoryTarget.Component });
178
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: BarakUiGenericDialogComponent, isStandalone: true, selector: "barak-ui-generic-dialog", ngImport: i0, template: "<div class=\"dialog-container\">\n <h2 mat-dialog-title class=\"dialog-title\">\n <ng-content select=\"[dialog-header]\"></ng-content>\n <button mat-icon-button class=\"close-button\" (click)=\"onClose()\">\n <mat-icon>close</mat-icon>\n </button>\n </h2>\n\n <mat-dialog-content>\n <ng-content select=\"[dialog-content]\"></ng-content>\n </mat-dialog-content>\n\n <mat-dialog-actions align=\"end\">\n <ng-content select=\"[dialog-actions]\"></ng-content>\n </mat-dialog-actions>\n</div>", styles: [":host .dialog-container{position:relative}:host .close-button{position:absolute;top:0;right:0;margin:10px;color:#000;background:transparent;border:none;cursor:pointer}:host .close-button mat-icon{font-size:24px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }] });
179
+ }
180
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: BarakUiGenericDialogComponent, decorators: [{
181
+ type: Component,
182
+ args: [{ selector: 'barak-ui-generic-dialog', imports: [
183
+ CommonModule,
184
+ MatButtonModule,
185
+ MatIconModule,
186
+ MatDialogModule
187
+ ], template: "<div class=\"dialog-container\">\n <h2 mat-dialog-title class=\"dialog-title\">\n <ng-content select=\"[dialog-header]\"></ng-content>\n <button mat-icon-button class=\"close-button\" (click)=\"onClose()\">\n <mat-icon>close</mat-icon>\n </button>\n </h2>\n\n <mat-dialog-content>\n <ng-content select=\"[dialog-content]\"></ng-content>\n </mat-dialog-content>\n\n <mat-dialog-actions align=\"end\">\n <ng-content select=\"[dialog-actions]\"></ng-content>\n </mat-dialog-actions>\n</div>", styles: [":host .dialog-container{position:relative}:host .close-button{position:absolute;top:0;right:0;margin:10px;color:#000;background:transparent;border:none;cursor:pointer}:host .close-button mat-icon{font-size:24px}\n"] }]
188
+ }], ctorParameters: () => [{ type: i1.MatDialogRef }] });
189
+
190
+ class BarakUiTableComponent {
191
+ columns = [];
192
+ actions = [];
193
+ dataSource = [];
194
+ isMenu = true;
195
+ displayedColumns = [];
196
+ ngOnChanges(changes) {
197
+ this.displayedColumns = this.columns.map(col => col.field);
198
+ if (this.actions && this.actions.length > 0 && !this.displayedColumns.includes('actions')) {
199
+ this.displayedColumns.push('actions');
200
+ }
201
+ }
202
+ getColumnValue(column, element) {
203
+ if (column.template) {
204
+ return column.template(element);
205
+ }
206
+ else {
207
+ return element[column.field];
208
+ }
209
+ }
210
+ isFunction(value) {
211
+ return value && {}.toString.call(value) === '[object Function]';
212
+ }
213
+ onToggleAll(event) {
214
+ const checked = event.checked;
215
+ this.dataSource.forEach((row) => row.selected = checked);
216
+ }
217
+ get allSelected() {
218
+ return this.dataSource.length > 0 && this.dataSource.every((row) => row.selected);
219
+ }
220
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: BarakUiTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
221
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: BarakUiTableComponent, isStandalone: true, selector: "barak-ui-table", inputs: { columns: "columns", actions: "actions", dataSource: "dataSource", isMenu: "isMenu" }, usesOnChanges: true, ngImport: i0, template: "<table mat-table [dataSource]=\"dataSource\" class=\"mat-elevation-z2 tables-mat-table\">\n\n <!-- Colonnes dynamiques normales -->\n <ng-container *ngFor=\"let column of columns\" [matColumnDef]=\"column.field\">\n <th mat-header-cell *matHeaderCellDef>\n <ng-container *ngIf=\"column.field === 'select'; else defaultHeader\">\n <mat-checkbox [checked]=\"allSelected\" (change)=\"onToggleAll($event)\"></mat-checkbox> {{ column.header }}\n </ng-container>\n <ng-template #defaultHeader>\n {{ column.header }}\n </ng-template>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <ng-container *ngIf=\"column.field === 'select'; else cellContent\">\n <mat-checkbox [(ngModel)]=\"element.selected\"></mat-checkbox>\n </ng-container>\n <ng-template #cellContent>\n <ng-container *ngIf=\"column.template\">\n <ng-container *ngIf=\"isFunction(column.template); else templateOutlet\">\n {{ column.template(element) }}\n </ng-container>\n <ng-template #templateOutlet>\n <ng-container\n *ngTemplateOutlet=\"column.template; context: { $implicit: element }\"></ng-container>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"!column.template\">\n {{ element[column.field] }}\n </ng-container>\n </ng-template>\n </td>\n </ng-container>\n\n <!-- Colonne Actions -->\n <ng-container *ngIf=\"actions.length > 0\" matColumnDef=\"actions\">\n <th mat-header-cell *matHeaderCellDef class=\"align-right\">Actions</th>\n <td mat-cell *matCellDef=\"let element\" [ngClass]=\"isMenu ? 'align-right' : 'actions-inline'\">\n <ng-container *ngIf=\"isMenu\">\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <ng-container *ngFor=\"let action of actions\">\n <button mat-menu-item (click)=\"action?.handler(element)\" [matTooltip]=\"action.tooltip\"\n [disabled]=\"action.disabled ? action.disabled(element) : false\">\n <mat-icon>{{ action.icon }}</mat-icon>\n <span>{{ action.displayName }}</span>\n </button>\n </ng-container>\n </mat-menu>\n </ng-container>\n <!-- Affichage sans menu (boutons directs) -->\n <ng-container *ngIf=\"!isMenu\">\n <ng-container *ngFor=\"let action of actions\">\n <button class=\"button-actions-no-menu\" mat-icon-button (click)=\"action?.handler(element)\"\n [matTooltip]=\"action.tooltip\" [disabled]=\"action.disabled ? action.disabled(element) : false\">\n <mat-icon>{{ action.icon }}</mat-icon>\n </button>\n </ng-container>\n </ng-container>\n </td>\n </ng-container>\n\n <!-- Header et Row -->\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\"></tr>\n\n</table>", styles: ["@import\"https://fonts.googleapis.com/icon?family=Material+Icons\";.material-icons{font-family:Material Icons;font-weight:400;font-style:normal}:host{display:block}:host ::ng-deep .tables-mat-table{width:100%;background:#fff;border-radius:0;box-shadow:none;overflow:visible;margin-bottom:0;border-collapse:separate;border-spacing:0;transition:none;border:none;position:relative}:host ::ng-deep .tables-mat-table:after{display:none}:host ::ng-deep th.mat-header-cell,:host ::ng-deep .mat-mdc-header-cell{background-color:#f8f9fa!important;color:#c25729!important;font-weight:600!important;font-size:14px!important;text-transform:uppercase;letter-spacing:.5px;border-bottom:2px solid #c25729!important;padding:16px!important;border-top:none!important;border-left:none!important;border-right:none!important}:host ::ng-deep td.mat-cell,:host ::ng-deep .mat-mdc-cell{padding:16px!important;font-size:14px;color:#333;border-bottom:1px solid #f0f0f0!important;border-top:none!important;border-left:none!important;border-right:none!important}:host ::ng-deep tr.mat-row,:host ::ng-deep .mat-mdc-row{transition:background-color .2s ease}:host ::ng-deep tr.mat-row:hover,:host ::ng-deep .mat-mdc-row:hover{background-color:#c257290d!important}:host ::ng-deep tr.mat-header-row,:host ::ng-deep .mat-mdc-header-row{background-color:transparent!important}:host ::ng-deep tr.mat-row:last-child td.mat-cell,:host ::ng-deep .mat-mdc-row:last-child .mat-mdc-cell{border-bottom:none!important}:host ::ng-deep .mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,:host ::ng-deep .mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background{border-color:#c25729!important;background-color:#c25729!important}:host ::ng-deep .mdc-checkbox__native-control:hover:checked~.mdc-checkbox__background,:host ::ng-deep .mdc-checkbox__native-control:hover:indeterminate~.mdc-checkbox__background{border-color:#8b3a1f!important;background-color:#8b3a1f!important}:host ::ng-deep th.mat-header-cell mat-icon,:host ::ng-deep .mat-mdc-header-cell mat-icon{color:#c25729;vertical-align:middle}:host ::ng-deep .mat-mdc-menu-content{padding:8px 0}:host ::ng-deep .mat-mdc-menu-item{min-height:48px;padding:0 16px}:host ::ng-deep .mat-mdc-menu-item mat-icon{margin-right:16px;color:#c25729}:host ::ng-deep .mat-mdc-menu-item:hover{background-color:#c257290d}:host ::ng-deep button[mat-icon-button]{color:#c25729}:host ::ng-deep button[mat-icon-button]:hover{background-color:#c257291a}:host .align-right{text-align:right!important}:host .actions-inline{display:flex;gap:4px;justify-content:flex-end;align-items:center}:host .actions-btn-group{display:flex;gap:8px;align-items:center;justify-content:flex-end}@media (max-width: 600px){:host ::ng-deep th.mat-header-cell,:host ::ng-deep .mat-mdc-header-cell{font-size:12px!important;padding:12px 8px!important}:host ::ng-deep td.mat-cell,:host ::ng-deep .mat-mdc-cell{font-size:13px!important;padding:12px 8px!important}}@media (max-width: 400px){:host ::ng-deep th.mat-header-cell,:host ::ng-deep .mat-mdc-header-cell{font-size:11px!important;padding:10px 6px!important}:host ::ng-deep td.mat-cell,:host ::ng-deep .mat-mdc-cell{font-size:12px!important;padding:10px 6px!important}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i2$1.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i2$1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i2$1.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i2$1.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i2$1.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i2$1.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i2$1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i2$1.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i2$1.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i2$1.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i5.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i7.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
222
+ }
223
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: BarakUiTableComponent, decorators: [{
224
+ type: Component,
225
+ args: [{ selector: 'barak-ui-table', imports: [
226
+ CommonModule,
227
+ MatTableModule,
228
+ MatIconModule,
229
+ MatButtonModule,
230
+ MatMenuModule,
231
+ MatTooltipModule,
232
+ MatCheckboxModule,
233
+ FormsModule
234
+ ], template: "<table mat-table [dataSource]=\"dataSource\" class=\"mat-elevation-z2 tables-mat-table\">\n\n <!-- Colonnes dynamiques normales -->\n <ng-container *ngFor=\"let column of columns\" [matColumnDef]=\"column.field\">\n <th mat-header-cell *matHeaderCellDef>\n <ng-container *ngIf=\"column.field === 'select'; else defaultHeader\">\n <mat-checkbox [checked]=\"allSelected\" (change)=\"onToggleAll($event)\"></mat-checkbox> {{ column.header }}\n </ng-container>\n <ng-template #defaultHeader>\n {{ column.header }}\n </ng-template>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <ng-container *ngIf=\"column.field === 'select'; else cellContent\">\n <mat-checkbox [(ngModel)]=\"element.selected\"></mat-checkbox>\n </ng-container>\n <ng-template #cellContent>\n <ng-container *ngIf=\"column.template\">\n <ng-container *ngIf=\"isFunction(column.template); else templateOutlet\">\n {{ column.template(element) }}\n </ng-container>\n <ng-template #templateOutlet>\n <ng-container\n *ngTemplateOutlet=\"column.template; context: { $implicit: element }\"></ng-container>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"!column.template\">\n {{ element[column.field] }}\n </ng-container>\n </ng-template>\n </td>\n </ng-container>\n\n <!-- Colonne Actions -->\n <ng-container *ngIf=\"actions.length > 0\" matColumnDef=\"actions\">\n <th mat-header-cell *matHeaderCellDef class=\"align-right\">Actions</th>\n <td mat-cell *matCellDef=\"let element\" [ngClass]=\"isMenu ? 'align-right' : 'actions-inline'\">\n <ng-container *ngIf=\"isMenu\">\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <ng-container *ngFor=\"let action of actions\">\n <button mat-menu-item (click)=\"action?.handler(element)\" [matTooltip]=\"action.tooltip\"\n [disabled]=\"action.disabled ? action.disabled(element) : false\">\n <mat-icon>{{ action.icon }}</mat-icon>\n <span>{{ action.displayName }}</span>\n </button>\n </ng-container>\n </mat-menu>\n </ng-container>\n <!-- Affichage sans menu (boutons directs) -->\n <ng-container *ngIf=\"!isMenu\">\n <ng-container *ngFor=\"let action of actions\">\n <button class=\"button-actions-no-menu\" mat-icon-button (click)=\"action?.handler(element)\"\n [matTooltip]=\"action.tooltip\" [disabled]=\"action.disabled ? action.disabled(element) : false\">\n <mat-icon>{{ action.icon }}</mat-icon>\n </button>\n </ng-container>\n </ng-container>\n </td>\n </ng-container>\n\n <!-- Header et Row -->\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\"></tr>\n\n</table>", styles: ["@import\"https://fonts.googleapis.com/icon?family=Material+Icons\";.material-icons{font-family:Material Icons;font-weight:400;font-style:normal}:host{display:block}:host ::ng-deep .tables-mat-table{width:100%;background:#fff;border-radius:0;box-shadow:none;overflow:visible;margin-bottom:0;border-collapse:separate;border-spacing:0;transition:none;border:none;position:relative}:host ::ng-deep .tables-mat-table:after{display:none}:host ::ng-deep th.mat-header-cell,:host ::ng-deep .mat-mdc-header-cell{background-color:#f8f9fa!important;color:#c25729!important;font-weight:600!important;font-size:14px!important;text-transform:uppercase;letter-spacing:.5px;border-bottom:2px solid #c25729!important;padding:16px!important;border-top:none!important;border-left:none!important;border-right:none!important}:host ::ng-deep td.mat-cell,:host ::ng-deep .mat-mdc-cell{padding:16px!important;font-size:14px;color:#333;border-bottom:1px solid #f0f0f0!important;border-top:none!important;border-left:none!important;border-right:none!important}:host ::ng-deep tr.mat-row,:host ::ng-deep .mat-mdc-row{transition:background-color .2s ease}:host ::ng-deep tr.mat-row:hover,:host ::ng-deep .mat-mdc-row:hover{background-color:#c257290d!important}:host ::ng-deep tr.mat-header-row,:host ::ng-deep .mat-mdc-header-row{background-color:transparent!important}:host ::ng-deep tr.mat-row:last-child td.mat-cell,:host ::ng-deep .mat-mdc-row:last-child .mat-mdc-cell{border-bottom:none!important}:host ::ng-deep .mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,:host ::ng-deep .mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background{border-color:#c25729!important;background-color:#c25729!important}:host ::ng-deep .mdc-checkbox__native-control:hover:checked~.mdc-checkbox__background,:host ::ng-deep .mdc-checkbox__native-control:hover:indeterminate~.mdc-checkbox__background{border-color:#8b3a1f!important;background-color:#8b3a1f!important}:host ::ng-deep th.mat-header-cell mat-icon,:host ::ng-deep .mat-mdc-header-cell mat-icon{color:#c25729;vertical-align:middle}:host ::ng-deep .mat-mdc-menu-content{padding:8px 0}:host ::ng-deep .mat-mdc-menu-item{min-height:48px;padding:0 16px}:host ::ng-deep .mat-mdc-menu-item mat-icon{margin-right:16px;color:#c25729}:host ::ng-deep .mat-mdc-menu-item:hover{background-color:#c257290d}:host ::ng-deep button[mat-icon-button]{color:#c25729}:host ::ng-deep button[mat-icon-button]:hover{background-color:#c257291a}:host .align-right{text-align:right!important}:host .actions-inline{display:flex;gap:4px;justify-content:flex-end;align-items:center}:host .actions-btn-group{display:flex;gap:8px;align-items:center;justify-content:flex-end}@media (max-width: 600px){:host ::ng-deep th.mat-header-cell,:host ::ng-deep .mat-mdc-header-cell{font-size:12px!important;padding:12px 8px!important}:host ::ng-deep td.mat-cell,:host ::ng-deep .mat-mdc-cell{font-size:13px!important;padding:12px 8px!important}}@media (max-width: 400px){:host ::ng-deep th.mat-header-cell,:host ::ng-deep .mat-mdc-header-cell{font-size:11px!important;padding:10px 6px!important}:host ::ng-deep td.mat-cell,:host ::ng-deep .mat-mdc-cell{font-size:12px!important;padding:10px 6px!important}}\n"] }]
235
+ }], propDecorators: { columns: [{
236
+ type: Input
237
+ }], actions: [{
238
+ type: Input
239
+ }], dataSource: [{
240
+ type: Input
241
+ }], isMenu: [{
242
+ type: Input
243
+ }] } });
244
+
245
+ class BarakUiPaginationComponent {
246
+ totalItems = 0;
247
+ pageSize = 10;
248
+ pageIndex = 0;
249
+ pageChanged = new EventEmitter();
250
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: BarakUiPaginationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
251
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: BarakUiPaginationComponent, isStandalone: true, selector: "barak-ui-pagination", inputs: { totalItems: "totalItems", pageSize: "pageSize", pageIndex: "pageIndex" }, outputs: { pageChanged: "pageChanged" }, ngImport: i0, template: "<mat-paginator [length]=\"totalItems\" [pageSize]=\"pageSize\" [pageIndex]=\"pageIndex\" [pageSizeOptions]=\"[5, 10, 20, 50]\"\n (page)=\"pageChanged.emit($event)\">\n</mat-paginator>", styles: [":host ::ng-deep .mat-mdc-paginator{background-color:#fff!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i1$3.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }] });
252
+ }
253
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: BarakUiPaginationComponent, decorators: [{
254
+ type: Component,
255
+ args: [{ selector: 'barak-ui-pagination', imports: [
256
+ CommonModule,
257
+ MatPaginatorModule
258
+ ], template: "<mat-paginator [length]=\"totalItems\" [pageSize]=\"pageSize\" [pageIndex]=\"pageIndex\" [pageSizeOptions]=\"[5, 10, 20, 50]\"\n (page)=\"pageChanged.emit($event)\">\n</mat-paginator>", styles: [":host ::ng-deep .mat-mdc-paginator{background-color:#fff!important}\n"] }]
259
+ }], propDecorators: { totalItems: [{
260
+ type: Input
261
+ }], pageSize: [{
262
+ type: Input
263
+ }], pageIndex: [{
264
+ type: Input
265
+ }], pageChanged: [{
266
+ type: Output
267
+ }] } });
268
+
269
+ class BarakUiSpinnerComponent {
270
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: BarakUiSpinnerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
271
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: BarakUiSpinnerComponent, isStandalone: true, selector: "barak-ui-spinner", ngImport: i0, template: "<div class=\"loading-overlay\">\n <mat-progress-spinner \n mode=\"indeterminate\" \n color=\"primary\" \n diameter=\"50\">\n </mat-progress-spinner>\n</div>\n", styles: [":host ::ng-deep .loading-overlay{position:absolute;inset:0;display:flex;justify-content:center;align-items:center;background-color:#ffffffb3;width:100%;height:100%;z-index:1000}:host ::ng-deep .mdc-circular-progress__indeterminate-circle-graphic{stroke:#c25729!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i1$4.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }] });
272
+ }
273
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: BarakUiSpinnerComponent, decorators: [{
274
+ type: Component,
275
+ args: [{ selector: 'barak-ui-spinner', imports: [
276
+ CommonModule,
277
+ MatProgressSpinnerModule
278
+ ], template: "<div class=\"loading-overlay\">\n <mat-progress-spinner \n mode=\"indeterminate\" \n color=\"primary\" \n diameter=\"50\">\n </mat-progress-spinner>\n</div>\n", styles: [":host ::ng-deep .loading-overlay{position:absolute;inset:0;display:flex;justify-content:center;align-items:center;background-color:#ffffffb3;width:100%;height:100%;z-index:1000}:host ::ng-deep .mdc-circular-progress__indeterminate-circle-graphic{stroke:#c25729!important}\n"] }]
279
+ }] });
280
+
281
+ class BarakUiAutocompleteComponent {
282
+ options = [];
283
+ placeholder = 'Sélectionner...';
284
+ multiple = false;
285
+ value = this.multiple ? [] : '';
286
+ displayField = 'fullName';
287
+ loading = false;
288
+ appearance = 'fill'; // Permet de changer l'apparence
289
+ customClass = ''; // Permet d'ajouter des classes personnalisées
290
+ valueChange = new EventEmitter();
291
+ scrolledToBottom = new EventEmitter();
292
+ searchText = '';
293
+ select;
294
+ filteredOptions() {
295
+ if (!this.searchText)
296
+ return this.options;
297
+ return this.options.filter(option => option[this.displayField]?.toLowerCase().includes(this.searchText.toLowerCase()));
298
+ }
299
+ onValueChange(val) {
300
+ this.value = val;
301
+ this.valueChange.emit(val);
302
+ }
303
+ getOptionLabel(option) {
304
+ if (!option)
305
+ return '';
306
+ return option[this.displayField] || '';
307
+ }
308
+ ngAfterViewInit() {
309
+ this.select.openedChange.subscribe(opened => {
310
+ if (opened) {
311
+ // Timeout pour laisser le panel s'ouvrir et apparaître dans le DOM
312
+ setTimeout(() => {
313
+ const panel = document.querySelector('.mat-select-panel-animations-enabled');
314
+ if (panel) {
315
+ panel.addEventListener('scroll', this.onScroll.bind(this));
316
+ }
317
+ }, 0);
318
+ }
319
+ else {
320
+ const panel = document.querySelector('.mat-select-panel-animations-enabled');
321
+ if (panel) {
322
+ panel.removeEventListener('scroll', this.onScroll.bind(this));
323
+ }
324
+ }
325
+ });
326
+ }
327
+ onScroll(event) {
328
+ const element = event.target;
329
+ const atBottom = element.scrollHeight - element.scrollTop <= element.clientHeight + 1;
330
+ if (atBottom) {
331
+ this.scrolledToBottom.emit();
332
+ }
333
+ }
334
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: BarakUiAutocompleteComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
335
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: BarakUiAutocompleteComponent, isStandalone: true, selector: "barak-ui-autocomplete", inputs: { options: "options", placeholder: "placeholder", multiple: "multiple", value: "value", displayField: "displayField", loading: "loading", appearance: "appearance", customClass: "customClass" }, outputs: { valueChange: "valueChange", scrolledToBottom: "scrolledToBottom" }, viewQueries: [{ propertyName: "select", first: true, predicate: ["select"], descendants: true }], ngImport: i0, template: "<mat-form-field [appearance]=\"appearance\" [ngClass]=\"customClass\" style=\"width: 100%;\">\n <mat-select #select [(ngModel)]=\"value\" (ngModelChange)=\"onValueChange($event)\" [placeholder]=\"placeholder\"\n [multiple]=\"multiple\" (selectionChange)=\"onValueChange($event.value)\" [disabled]=\"loading\">\n\n <mat-select-trigger>\n {{ multiple ? (value?.length ? value.length + ' s\u00E9lectionn\u00E9s' : placeholder) : getOptionLabel(value) }}\n </mat-select-trigger>\n\n <!-- Champ de recherche -->\n <mat-option class=\"no-checkbox\">\n <input matInput type=\"text\" placeholder=\"Rechercher...\" [(ngModel)]=\"searchText\"\n (keydown)=\"$event.stopPropagation()\" (click)=\"$event.stopPropagation()\" class=\"search-input\"\n autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\" />\n </mat-option>\n\n <!-- Liste filtr\u00E9e -->\n <mat-option *ngFor=\"let option of filteredOptions()\" [value]=\"option\">\n {{ getOptionLabel(option) }}\n </mat-option>\n\n <!-- Indicateur de chargement -->\n <mat-option *ngIf=\"loading\" class=\"loading-option no-checkbox\" disabled>\n <barak-ui-spinner></barak-ui-spinner>\n <span>Chargement...</span>\n </mat-option>\n\n <!-- Message si aucune option ne correspond -->\n <mat-option *ngIf=\"filteredOptions().length === 0 && !loading\" class=\"no-results\" disabled>\n Aucune option trouv\u00E9e\n </mat-option>\n\n </mat-select>\n</mat-form-field>", styles: ["@import\"https://fonts.googleapis.com/icon?family=Material+Icons\";.material-icons{font-family:Material Icons;font-weight:400;font-style:normal}::ng-deep .no-checkbox>.mat-pseudo-checkbox-full,::ng-deep .no-results>.mat-pseudo-checkbox-full{display:none!important}::ng-deep .no-checkbox{padding:8px 16px!important;background-color:var(--bg-primary, #ffffff)!important;position:sticky!important;top:0!important;z-index:10!important;border-bottom:1px solid var(--border-color, #e0e0e0)!important;margin-bottom:4px!important;cursor:default!important}::ng-deep .no-checkbox:hover{background-color:var(--bg-primary, #ffffff)!important}::ng-deep .search-input{width:100%;padding:8px 12px;height:40px;border-radius:8px;border:1px solid var(--border-color, #ced4da);outline:none;background-color:var(--bg-secondary, #f5f7fa)!important;color:var(--text-primary, #333)!important;transition:border-color .2s ease-in-out,box-shadow .2s ease-in-out;font-size:14px;box-sizing:border-box}::ng-deep .search-input:focus{border-color:#c25729;box-shadow:0 0 5px #c2572926;background-color:var(--bg-primary, white)!important}::ng-deep .loading-option{display:flex!important;align-items:center!important;justify-content:center!important;gap:8px!important;font-style:italic!important;padding:12px 16px!important;color:var(--text-secondary, #666)!important;background-color:var(--bg-primary, #ffffff)!important;cursor:default!important}::ng-deep .loading-option:hover{background-color:var(--bg-primary, #ffffff)!important}::ng-deep .loading-option barak-ui-spinner{transform:scale(.6)}::ng-deep .mat-mdc-select-panel{background-color:var(--bg-primary, #ffffff)!important;border:1px solid var(--border-color, #e0e0e0);box-shadow:0 4px 6px #0000001a}::ng-deep .mat-mdc-option{background-color:var(--bg-primary, #ffffff)!important;color:var(--text-primary, #333)!important}::ng-deep .mat-mdc-option:hover{background-color:var(--bg-secondary, #f5f5f5)!important}::ng-deep .mat-mdc-option.mat-mdc-option-active{background-color:#fff5f0!important;color:#c25729!important}::ng-deep .mat-mdc-option.mdc-list-item--selected{background-color:#fff5f0!important;color:#c25729!important}::ng-deep .mat-mdc-option.mdc-list-item--selected .mat-pseudo-checkbox{background-color:#c25729!important;border-color:#c25729!important}::ng-deep .mat-mdc-option .mat-pseudo-checkbox{border-color:var(--border-color, #999)}::ng-deep .mat-mdc-option .mat-pseudo-checkbox.mat-pseudo-checkbox-checked{background-color:#c25729!important;border-color:#c25729!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i3$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i3$1.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "directive", type: i3$1.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i3$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: BarakUiSpinnerComponent, selector: "barak-ui-spinner" }] });
336
+ }
337
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: BarakUiAutocompleteComponent, decorators: [{
338
+ type: Component,
339
+ args: [{ selector: 'barak-ui-autocomplete', imports: [
340
+ CommonModule,
341
+ FormsModule,
342
+ MatSelectModule,
343
+ MatOptionModule,
344
+ MatInputModule,
345
+ MatFormFieldModule,
346
+ BarakUiSpinnerComponent
347
+ ], template: "<mat-form-field [appearance]=\"appearance\" [ngClass]=\"customClass\" style=\"width: 100%;\">\n <mat-select #select [(ngModel)]=\"value\" (ngModelChange)=\"onValueChange($event)\" [placeholder]=\"placeholder\"\n [multiple]=\"multiple\" (selectionChange)=\"onValueChange($event.value)\" [disabled]=\"loading\">\n\n <mat-select-trigger>\n {{ multiple ? (value?.length ? value.length + ' s\u00E9lectionn\u00E9s' : placeholder) : getOptionLabel(value) }}\n </mat-select-trigger>\n\n <!-- Champ de recherche -->\n <mat-option class=\"no-checkbox\">\n <input matInput type=\"text\" placeholder=\"Rechercher...\" [(ngModel)]=\"searchText\"\n (keydown)=\"$event.stopPropagation()\" (click)=\"$event.stopPropagation()\" class=\"search-input\"\n autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\" />\n </mat-option>\n\n <!-- Liste filtr\u00E9e -->\n <mat-option *ngFor=\"let option of filteredOptions()\" [value]=\"option\">\n {{ getOptionLabel(option) }}\n </mat-option>\n\n <!-- Indicateur de chargement -->\n <mat-option *ngIf=\"loading\" class=\"loading-option no-checkbox\" disabled>\n <barak-ui-spinner></barak-ui-spinner>\n <span>Chargement...</span>\n </mat-option>\n\n <!-- Message si aucune option ne correspond -->\n <mat-option *ngIf=\"filteredOptions().length === 0 && !loading\" class=\"no-results\" disabled>\n Aucune option trouv\u00E9e\n </mat-option>\n\n </mat-select>\n</mat-form-field>", styles: ["@import\"https://fonts.googleapis.com/icon?family=Material+Icons\";.material-icons{font-family:Material Icons;font-weight:400;font-style:normal}::ng-deep .no-checkbox>.mat-pseudo-checkbox-full,::ng-deep .no-results>.mat-pseudo-checkbox-full{display:none!important}::ng-deep .no-checkbox{padding:8px 16px!important;background-color:var(--bg-primary, #ffffff)!important;position:sticky!important;top:0!important;z-index:10!important;border-bottom:1px solid var(--border-color, #e0e0e0)!important;margin-bottom:4px!important;cursor:default!important}::ng-deep .no-checkbox:hover{background-color:var(--bg-primary, #ffffff)!important}::ng-deep .search-input{width:100%;padding:8px 12px;height:40px;border-radius:8px;border:1px solid var(--border-color, #ced4da);outline:none;background-color:var(--bg-secondary, #f5f7fa)!important;color:var(--text-primary, #333)!important;transition:border-color .2s ease-in-out,box-shadow .2s ease-in-out;font-size:14px;box-sizing:border-box}::ng-deep .search-input:focus{border-color:#c25729;box-shadow:0 0 5px #c2572926;background-color:var(--bg-primary, white)!important}::ng-deep .loading-option{display:flex!important;align-items:center!important;justify-content:center!important;gap:8px!important;font-style:italic!important;padding:12px 16px!important;color:var(--text-secondary, #666)!important;background-color:var(--bg-primary, #ffffff)!important;cursor:default!important}::ng-deep .loading-option:hover{background-color:var(--bg-primary, #ffffff)!important}::ng-deep .loading-option barak-ui-spinner{transform:scale(.6)}::ng-deep .mat-mdc-select-panel{background-color:var(--bg-primary, #ffffff)!important;border:1px solid var(--border-color, #e0e0e0);box-shadow:0 4px 6px #0000001a}::ng-deep .mat-mdc-option{background-color:var(--bg-primary, #ffffff)!important;color:var(--text-primary, #333)!important}::ng-deep .mat-mdc-option:hover{background-color:var(--bg-secondary, #f5f5f5)!important}::ng-deep .mat-mdc-option.mat-mdc-option-active{background-color:#fff5f0!important;color:#c25729!important}::ng-deep .mat-mdc-option.mdc-list-item--selected{background-color:#fff5f0!important;color:#c25729!important}::ng-deep .mat-mdc-option.mdc-list-item--selected .mat-pseudo-checkbox{background-color:#c25729!important;border-color:#c25729!important}::ng-deep .mat-mdc-option .mat-pseudo-checkbox{border-color:var(--border-color, #999)}::ng-deep .mat-mdc-option .mat-pseudo-checkbox.mat-pseudo-checkbox-checked{background-color:#c25729!important;border-color:#c25729!important}\n"] }]
348
+ }], propDecorators: { options: [{
349
+ type: Input
350
+ }], placeholder: [{
351
+ type: Input
352
+ }], multiple: [{
353
+ type: Input
354
+ }], value: [{
355
+ type: Input
356
+ }], displayField: [{
357
+ type: Input
358
+ }], loading: [{
359
+ type: Input
360
+ }], appearance: [{
361
+ type: Input
362
+ }], customClass: [{
363
+ type: Input
364
+ }], valueChange: [{
365
+ type: Output
366
+ }], scrolledToBottom: [{
367
+ type: Output
368
+ }], select: [{
369
+ type: ViewChild,
370
+ args: ['select']
371
+ }] } });
372
+
373
+ /*
374
+ * Public API Surface of barak-ui
375
+ */
376
+
377
+ /**
378
+ * Generated bundle index. Do not edit.
379
+ */
380
+
381
+ export { BarakUiAutocompleteComponent, BarakUiButtonComponent, BarakUiConfirmationDialogComponent, BarakUiGenericDialogComponent, BarakUiModalService, BarakUiPaginationComponent, BarakUiSpinnerComponent, BarakUiTableComponent, BarakUiToastService };
382
+ //# sourceMappingURL=barak-ui.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"barak-ui.mjs","sources":["../../../projects/barak-ui/src/lib/services/barak-ui.modal.service.ts","../../../projects/barak-ui/src/lib/services/barak-ui.toast.service.ts","../../../projects/barak-ui/src/lib/components/button/button.component.ts","../../../projects/barak-ui/src/lib/components/button/button.component.html","../../../projects/barak-ui/src/lib/components/dialog/confirmation-dialog/barak-ui-dialog.component.ts","../../../projects/barak-ui/src/lib/components/dialog/confirmation-dialog/barak-ui-dialog.component.html","../../../projects/barak-ui/src/lib/components/dialog/generic-dialog/barak-ui-generic-dialog.component.ts","../../../projects/barak-ui/src/lib/components/dialog/generic-dialog/barak-ui-generic-dialog.component.html","../../../projects/barak-ui/src/lib/components/table/barak-ui-table.component.ts","../../../projects/barak-ui/src/lib/components/table/barak-ui-table.component.html","../../../projects/barak-ui/src/lib/components/pagination/barak-ui.pagniation.component.ts","../../../projects/barak-ui/src/lib/components/pagination/barak-ui.pagination.component.html","../../../projects/barak-ui/src/lib/components/barak-ui-spinner/barak-ui-spinner.component.ts","../../../projects/barak-ui/src/lib/components/barak-ui-spinner/barak-ui-spinner.component.html","../../../projects/barak-ui/src/lib/components/autocomplete/barak-ui-autocomplete.component.ts","../../../projects/barak-ui/src/lib/components/autocomplete/barak-ui-autocomplete.component.html","../../../projects/barak-ui/src/public-api.ts","../../../projects/barak-ui/src/barak-ui.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BarakUiModalService {\n\n constructor(private dialog: MatDialog) { }\n\n /**\n * Ouvre une modale générique\n * \n * @param component Le composant à afficher dans la modale\n * @param data Les données à transmettre au composant\n * @param options Options supplémentaires pour configurer la modale\n * @returns Une référence à la modale\n */\n openModal<T, D = any>(component: T, data: D, options: { width?: string, maxWidth?: string } = { width: '400px', maxWidth: '80wv' }): MatDialogRef<any> {\n console.log(\"options.width\", options.width)\n return this.dialog.open(component as any, {\n width: options.width,\n maxWidth: options.maxWidth,\n data: data,\n disableClose: true\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BarakUiToastService {\n\n constructor(private snackBar: MatSnackBar) { }\n\n /**\n * Affiche un message de snack bar\n * @param message Le texte à afficher\n * @param type Type de message ('success', 'error', 'info')\n */\n open(message: string, type: 'success' | 'error' | 'info' = 'info', duration: number = 3000, horizontalPosition: string = 'right', verticalPosition: string = 'top'): void {\n const config: MatSnackBarConfig = {\n duration: duration,\n horizontalPosition: horizontalPosition as 'start' | 'center' | 'end' | 'left' | 'right',\n verticalPosition: verticalPosition as 'top' | 'bottom',\n panelClass: [`snackbar-${type}`]\n };\n\n this.snackBar.open(message, 'Fermer', config);\n }\n\n success(message: string): void {\n this.open(message, 'success');\n }\n\n error(message: string): void {\n this.open(message, 'error');\n }\n\n info(message: string): void {\n this.open(message, 'info');\n }\n\n /**\n * Ferme tous les snackbars ouverts\n */\n dismiss(): void {\n this.snackBar.dismiss();\n }\n}","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'barak-ui-button',\n imports: [\n CommonModule\n ],\n templateUrl: './button.component.html',\n styleUrl: './button.component.scss'\n})\nexport class BarakUiButtonComponent {\n @Input() variant: 'primary' | 'secondary' | 'danger' = 'primary';\n @Input() size: 'sm' | 'md' | 'lg' = 'md';\n @Input() disabled = false;\n\n @Output() clicked = new EventEmitter<Event>();\n\n onClick(event: Event): void {\n if (!this.disabled) {\n this.clicked.emit();\n }\n }\n}\n\n","<button class=\"barak-btn\" [ngClass]=\"[\n 'barak-btn--' + variant,\n 'barak-btn--' + size,\n disabled ? 'barak-btn--disabled' : ''\n ]\" [disabled]=\"disabled\" (click)=\"onClick($event)\">\n <ng-content></ng-content>\n</button>","import { CommonModule } from '@angular/common';\nimport { Component, Inject } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { MatIconModule, MatIconRegistry } from '@angular/material/icon';\n\n@Component({\n selector: 'barak-ui-confirmation-dialog',\n templateUrl: './barak-ui-dialog.component.html',\n styleUrls: ['./barak-ui-dialog.component.scss'],\n imports: [\n CommonModule,\n MatButtonModule,\n MatIconModule,\n MatDialogModule\n ]\n})\nexport class BarakUiConfirmationDialogComponent {\n constructor(\n public dialogRef: MatDialogRef<BarakUiConfirmationDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: { message: string },\n private matIconRegistry: MatIconRegistry,\n ) {\n this.matIconRegistry.setDefaultFontSetClass('material-icons');\n }\n\n onCancel(): void {\n this.dialogRef.close(false);\n }\n\n onConfirm(): void {\n this.dialogRef.close(true);\n }\n}\n","<div class=\"confirmation-dialog\">\n <button mat-icon-button class=\"close-button\" (click)=\"onCancel()\">\n <mat-icon>close</mat-icon>\n </button>\n\n <div class=\"dialog-icon-wrapper\">\n <mat-icon class=\"dialog-icon\">info</mat-icon>\n </div>\n\n <h2 mat-dialog-title class=\"dialog-title\">Confirmation</h2>\n\n <mat-dialog-content class=\"dialog-content\">\n <p class=\"dialog-message\">{{ data.message }}</p>\n </mat-dialog-content>\n\n <mat-dialog-actions class=\"dialog-actions\">\n <button mat-stroked-button class=\"cancel-btn\" (click)=\"onCancel()\">\n Annuler\n </button>\n <button mat-raised-button class=\"confirm-btn\" (click)=\"onConfirm()\">\n Confirmer\n </button>\n </mat-dialog-actions>\n</div>","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\n\n@Component({\n selector: 'barak-ui-generic-dialog',\n templateUrl: './barak-ui-generic-dialog.component.html',\n styleUrls: ['./barak-ui-generic-dialog.component.scss'],\n imports: [\n CommonModule,\n MatButtonModule,\n MatIconModule,\n MatDialogModule\n ]\n})\nexport class BarakUiGenericDialogComponent {\n\n constructor(private dialogRef: MatDialogRef<BarakUiGenericDialogComponent>) { }\n\n onClose(): void {\n this.dialogRef.close();\n }\n}\n","<div class=\"dialog-container\">\n <h2 mat-dialog-title class=\"dialog-title\">\n <ng-content select=\"[dialog-header]\"></ng-content>\n <button mat-icon-button class=\"close-button\" (click)=\"onClose()\">\n <mat-icon>close</mat-icon>\n </button>\n </h2>\n\n <mat-dialog-content>\n <ng-content select=\"[dialog-content]\"></ng-content>\n </mat-dialog-content>\n\n <mat-dialog-actions align=\"end\">\n <ng-content select=\"[dialog-actions]\"></ng-content>\n </mat-dialog-actions>\n</div>","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\n@Component({\n selector: 'barak-ui-table',\n imports: [\n CommonModule,\n MatTableModule,\n MatIconModule,\n MatButtonModule,\n MatMenuModule,\n MatTooltipModule,\n MatCheckboxModule,\n FormsModule\n ],\n templateUrl: './barak-ui-table.component.html',\n styleUrl: './barak-ui-table.component.scss'\n})\nexport class BarakUiTableComponent<T> implements OnChanges {\n @Input() columns: { header: string, field: string, template?: any }[] = [];\n @Input() actions: { label?: string, handler?: (element: any) => void, icon?: string, tooltip?: string, displayName?: string, color?: string, disabled?: (element: any) => boolean }[] = [];\n @Input() dataSource: T[] = [];\n @Input() isMenu = true;\n\n displayedColumns: string[] = [];\n\n ngOnChanges(changes: SimpleChanges): void {\n this.displayedColumns = this.columns.map(col => col.field);\n\n if (this.actions && this.actions.length > 0 && !this.displayedColumns.includes('actions')) {\n this.displayedColumns.push('actions');\n }\n }\n\n\n getColumnValue(column: any, element: any): any {\n if (column.template) {\n return column.template(element);\n } else {\n return element[column.field];\n }\n }\n\n isFunction(value: any): boolean {\n return value && {}.toString.call(value) === '[object Function]';\n }\n\n onToggleAll(event: any): void {\n const checked = event.checked;\n this.dataSource.forEach((row: any) => row.selected = checked);\n }\n\n get allSelected(): boolean {\n return this.dataSource.length > 0 && this.dataSource.every((row: any) => row.selected);\n }\n}\n","<table mat-table [dataSource]=\"dataSource\" class=\"mat-elevation-z2 tables-mat-table\">\n\n <!-- Colonnes dynamiques normales -->\n <ng-container *ngFor=\"let column of columns\" [matColumnDef]=\"column.field\">\n <th mat-header-cell *matHeaderCellDef>\n <ng-container *ngIf=\"column.field === 'select'; else defaultHeader\">\n <mat-checkbox [checked]=\"allSelected\" (change)=\"onToggleAll($event)\"></mat-checkbox> {{ column.header }}\n </ng-container>\n <ng-template #defaultHeader>\n {{ column.header }}\n </ng-template>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <ng-container *ngIf=\"column.field === 'select'; else cellContent\">\n <mat-checkbox [(ngModel)]=\"element.selected\"></mat-checkbox>\n </ng-container>\n <ng-template #cellContent>\n <ng-container *ngIf=\"column.template\">\n <ng-container *ngIf=\"isFunction(column.template); else templateOutlet\">\n {{ column.template(element) }}\n </ng-container>\n <ng-template #templateOutlet>\n <ng-container\n *ngTemplateOutlet=\"column.template; context: { $implicit: element }\"></ng-container>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"!column.template\">\n {{ element[column.field] }}\n </ng-container>\n </ng-template>\n </td>\n </ng-container>\n\n <!-- Colonne Actions -->\n <ng-container *ngIf=\"actions.length > 0\" matColumnDef=\"actions\">\n <th mat-header-cell *matHeaderCellDef class=\"align-right\">Actions</th>\n <td mat-cell *matCellDef=\"let element\" [ngClass]=\"isMenu ? 'align-right' : 'actions-inline'\">\n <ng-container *ngIf=\"isMenu\">\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <ng-container *ngFor=\"let action of actions\">\n <button mat-menu-item (click)=\"action?.handler(element)\" [matTooltip]=\"action.tooltip\"\n [disabled]=\"action.disabled ? action.disabled(element) : false\">\n <mat-icon>{{ action.icon }}</mat-icon>\n <span>{{ action.displayName }}</span>\n </button>\n </ng-container>\n </mat-menu>\n </ng-container>\n <!-- Affichage sans menu (boutons directs) -->\n <ng-container *ngIf=\"!isMenu\">\n <ng-container *ngFor=\"let action of actions\">\n <button class=\"button-actions-no-menu\" mat-icon-button (click)=\"action?.handler(element)\"\n [matTooltip]=\"action.tooltip\" [disabled]=\"action.disabled ? action.disabled(element) : false\">\n <mat-icon>{{ action.icon }}</mat-icon>\n </button>\n </ng-container>\n </ng-container>\n </td>\n </ng-container>\n\n <!-- Header et Row -->\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\"></tr>\n\n</table>","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MatPaginatorModule, PageEvent } from '@angular/material/paginator';\n\n@Component({\n selector: 'barak-ui-pagination',\n imports: [\n CommonModule,\n MatPaginatorModule\n ],\n templateUrl: './barak-ui.pagination.component.html',\n styleUrls: ['./barak-ui.pagination.component.scss']\n})\nexport class BarakUiPaginationComponent {\n @Input() totalItems: number = 0;\n @Input() pageSize: number = 10;\n @Input() pageIndex: number = 0;\n @Output() pageChanged = new EventEmitter<PageEvent>();\n}\n","<mat-paginator [length]=\"totalItems\" [pageSize]=\"pageSize\" [pageIndex]=\"pageIndex\" [pageSizeOptions]=\"[5, 10, 20, 50]\"\n (page)=\"pageChanged.emit($event)\">\n</mat-paginator>","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\n@Component({\n selector: 'barak-ui-spinner',\n templateUrl: './barak-ui-spinner.component.html',\n styleUrls: ['./barak-ui-spinner.component.scss'],\n imports: [\n CommonModule,\n MatProgressSpinnerModule\n ]\n})\nexport class BarakUiSpinnerComponent {\n\n}\n","<div class=\"loading-overlay\">\n <mat-progress-spinner \n mode=\"indeterminate\" \n color=\"primary\" \n diameter=\"50\">\n </mat-progress-spinner>\n</div>\n","import { Component, Input, Output, EventEmitter, ViewChild, AfterViewInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatSelect, MatSelectModule } from '@angular/material/select';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { BarakUiSpinnerComponent } from '../barak-ui-spinner/barak-ui-spinner.component';\n\n@Component({\n selector: 'barak-ui-autocomplete',\n imports: [\n CommonModule,\n FormsModule,\n MatSelectModule,\n MatOptionModule,\n MatInputModule,\n MatFormFieldModule,\n BarakUiSpinnerComponent\n ],\n templateUrl: './barak-ui-autocomplete.component.html',\n styleUrls: ['./barak-ui-autocomplete.component.scss']\n})\n\nexport class BarakUiAutocompleteComponent implements AfterViewInit {\n @Input() options: any[] = [];\n @Input() placeholder = 'Sélectionner...';\n @Input() multiple = false;\n @Input() value: any | any[] = this.multiple ? [] : '';\n @Input() displayField: string = 'fullName';\n @Input() loading: boolean = false;\n @Input() appearance: 'fill' | 'outline' = 'fill'; // Permet de changer l'apparence\n @Input() customClass: string = ''; // Permet d'ajouter des classes personnalisées\n\n @Output() valueChange = new EventEmitter<any | any[]>();\n @Output() scrolledToBottom = new EventEmitter<void>();\n\n searchText = '';\n\n @ViewChild('select') select!: MatSelect;\n\n filteredOptions(): any[] {\n if (!this.searchText) return this.options;\n return this.options.filter(option =>\n option[this.displayField]?.toLowerCase().includes(this.searchText.toLowerCase())\n );\n }\n\n onValueChange(val: any) {\n this.value = val;\n this.valueChange.emit(val);\n }\n\n getOptionLabel(option: any): string {\n if (!option) return '';\n return option[this.displayField] || '';\n }\n\n ngAfterViewInit() {\n this.select.openedChange.subscribe(opened => {\n if (opened) {\n // Timeout pour laisser le panel s'ouvrir et apparaître dans le DOM\n setTimeout(() => {\n const panel = document.querySelector('.mat-select-panel-animations-enabled');\n if (panel) {\n panel.addEventListener('scroll', this.onScroll.bind(this));\n }\n }, 0);\n } else {\n const panel = document.querySelector('.mat-select-panel-animations-enabled');\n if (panel) {\n panel.removeEventListener('scroll', this.onScroll.bind(this));\n }\n }\n });\n }\n\n onScroll(event: any) {\n const element = event.target;\n const atBottom = element.scrollHeight - element.scrollTop <= element.clientHeight + 1;\n if (atBottom) {\n this.scrolledToBottom.emit();\n }\n }\n}\n","<mat-form-field [appearance]=\"appearance\" [ngClass]=\"customClass\" style=\"width: 100%;\">\n <mat-select #select [(ngModel)]=\"value\" (ngModelChange)=\"onValueChange($event)\" [placeholder]=\"placeholder\"\n [multiple]=\"multiple\" (selectionChange)=\"onValueChange($event.value)\" [disabled]=\"loading\">\n\n <mat-select-trigger>\n {{ multiple ? (value?.length ? value.length + ' sélectionnés' : placeholder) : getOptionLabel(value) }}\n </mat-select-trigger>\n\n <!-- Champ de recherche -->\n <mat-option class=\"no-checkbox\">\n <input matInput type=\"text\" placeholder=\"Rechercher...\" [(ngModel)]=\"searchText\"\n (keydown)=\"$event.stopPropagation()\" (click)=\"$event.stopPropagation()\" class=\"search-input\"\n autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\" />\n </mat-option>\n\n <!-- Liste filtrée -->\n <mat-option *ngFor=\"let option of filteredOptions()\" [value]=\"option\">\n {{ getOptionLabel(option) }}\n </mat-option>\n\n <!-- Indicateur de chargement -->\n <mat-option *ngIf=\"loading\" class=\"loading-option no-checkbox\" disabled>\n <barak-ui-spinner></barak-ui-spinner>\n <span>Chargement...</span>\n </mat-option>\n\n <!-- Message si aucune option ne correspond -->\n <mat-option *ngIf=\"filteredOptions().length === 0 && !loading\" class=\"no-results\" disabled>\n Aucune option trouvée\n </mat-option>\n\n </mat-select>\n</mat-form-field>","/*\n * Public API Surface of barak-ui\n */\n\nexport * from './lib/services/barak-ui.modal.service';\nexport * from './lib/services/barak-ui.toast.service';\nexport * from './lib/components/button/button.component';\nexport * from './lib/components/dialog/confirmation-dialog/barak-ui-dialog.component';\nexport * from './lib/components/dialog/generic-dialog/barak-ui-generic-dialog.component';\nexport * from './lib/components/table/barak-ui-table.component';\nexport * from './lib/components/pagination/barak-ui.pagniation.component';\nexport * from './lib/components/autocomplete/barak-ui-autocomplete.component';\nexport * from './lib/components/barak-ui-spinner/barak-ui-spinner.component';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3","i8"],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="barak-ui" />
5
+ export * from './public-api';
@@ -0,0 +1,24 @@
1
+ import { EventEmitter, AfterViewInit } from '@angular/core';
2
+ import { MatSelect } from '@angular/material/select';
3
+ import * as i0 from "@angular/core";
4
+ export declare class BarakUiAutocompleteComponent implements AfterViewInit {
5
+ options: any[];
6
+ placeholder: string;
7
+ multiple: boolean;
8
+ value: any | any[];
9
+ displayField: string;
10
+ loading: boolean;
11
+ appearance: 'fill' | 'outline';
12
+ customClass: string;
13
+ valueChange: EventEmitter<any>;
14
+ scrolledToBottom: EventEmitter<void>;
15
+ searchText: string;
16
+ select: MatSelect;
17
+ filteredOptions(): any[];
18
+ onValueChange(val: any): void;
19
+ getOptionLabel(option: any): string;
20
+ ngAfterViewInit(): void;
21
+ onScroll(event: any): void;
22
+ static ɵfac: i0.ɵɵFactoryDeclaration<BarakUiAutocompleteComponent, never>;
23
+ static ɵcmp: i0.ɵɵComponentDeclaration<BarakUiAutocompleteComponent, "barak-ui-autocomplete", never, { "options": { "alias": "options"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "value": { "alias": "value"; "required": false; }; "displayField": { "alias": "displayField"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "appearance": { "alias": "appearance"; "required": false; }; "customClass": { "alias": "customClass"; "required": false; }; }, { "valueChange": "valueChange"; "scrolledToBottom": "scrolledToBottom"; }, never, never, true, never>;
24
+ }
@@ -0,0 +1,5 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class BarakUiSpinnerComponent {
3
+ static ɵfac: i0.ɵɵFactoryDeclaration<BarakUiSpinnerComponent, never>;
4
+ static ɵcmp: i0.ɵɵComponentDeclaration<BarakUiSpinnerComponent, "barak-ui-spinner", never, {}, {}, never, never, true, never>;
5
+ }
@@ -0,0 +1,11 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class BarakUiButtonComponent {
4
+ variant: 'primary' | 'secondary' | 'danger';
5
+ size: 'sm' | 'md' | 'lg';
6
+ disabled: boolean;
7
+ clicked: EventEmitter<Event>;
8
+ onClick(event: Event): void;
9
+ static ɵfac: i0.ɵɵFactoryDeclaration<BarakUiButtonComponent, never>;
10
+ static ɵcmp: i0.ɵɵComponentDeclaration<BarakUiButtonComponent, "barak-ui-button", never, { "variant": { "alias": "variant"; "required": false; }; "size": { "alias": "size"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, { "clicked": "clicked"; }, never, ["*"], true, never>;
11
+ }
@@ -0,0 +1,17 @@
1
+ import { MatDialogRef } from '@angular/material/dialog';
2
+ import { MatIconRegistry } from '@angular/material/icon';
3
+ import * as i0 from "@angular/core";
4
+ export declare class BarakUiConfirmationDialogComponent {
5
+ dialogRef: MatDialogRef<BarakUiConfirmationDialogComponent>;
6
+ data: {
7
+ message: string;
8
+ };
9
+ private matIconRegistry;
10
+ constructor(dialogRef: MatDialogRef<BarakUiConfirmationDialogComponent>, data: {
11
+ message: string;
12
+ }, matIconRegistry: MatIconRegistry);
13
+ onCancel(): void;
14
+ onConfirm(): void;
15
+ static ɵfac: i0.ɵɵFactoryDeclaration<BarakUiConfirmationDialogComponent, never>;
16
+ static ɵcmp: i0.ɵɵComponentDeclaration<BarakUiConfirmationDialogComponent, "barak-ui-confirmation-dialog", never, {}, {}, never, never, true, never>;
17
+ }
@@ -0,0 +1,9 @@
1
+ import { MatDialogRef } from '@angular/material/dialog';
2
+ import * as i0 from "@angular/core";
3
+ export declare class BarakUiGenericDialogComponent {
4
+ private dialogRef;
5
+ constructor(dialogRef: MatDialogRef<BarakUiGenericDialogComponent>);
6
+ onClose(): void;
7
+ static ɵfac: i0.ɵɵFactoryDeclaration<BarakUiGenericDialogComponent, never>;
8
+ static ɵcmp: i0.ɵɵComponentDeclaration<BarakUiGenericDialogComponent, "barak-ui-generic-dialog", never, {}, {}, never, ["[dialog-header]", "[dialog-content]", "[dialog-actions]"], true, never>;
9
+ }
@@ -0,0 +1,11 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import { PageEvent } from '@angular/material/paginator';
3
+ import * as i0 from "@angular/core";
4
+ export declare class BarakUiPaginationComponent {
5
+ totalItems: number;
6
+ pageSize: number;
7
+ pageIndex: number;
8
+ pageChanged: EventEmitter<PageEvent>;
9
+ static ɵfac: i0.ɵɵFactoryDeclaration<BarakUiPaginationComponent, never>;
10
+ static ɵcmp: i0.ɵɵComponentDeclaration<BarakUiPaginationComponent, "barak-ui-pagination", never, { "totalItems": { "alias": "totalItems"; "required": false; }; "pageSize": { "alias": "pageSize"; "required": false; }; "pageIndex": { "alias": "pageIndex"; "required": false; }; }, { "pageChanged": "pageChanged"; }, never, never, true, never>;
11
+ }
@@ -0,0 +1,28 @@
1
+ import { OnChanges, SimpleChanges } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class BarakUiTableComponent<T> implements OnChanges {
4
+ columns: {
5
+ header: string;
6
+ field: string;
7
+ template?: any;
8
+ }[];
9
+ actions: {
10
+ label?: string;
11
+ handler?: (element: any) => void;
12
+ icon?: string;
13
+ tooltip?: string;
14
+ displayName?: string;
15
+ color?: string;
16
+ disabled?: (element: any) => boolean;
17
+ }[];
18
+ dataSource: T[];
19
+ isMenu: boolean;
20
+ displayedColumns: string[];
21
+ ngOnChanges(changes: SimpleChanges): void;
22
+ getColumnValue(column: any, element: any): any;
23
+ isFunction(value: any): boolean;
24
+ onToggleAll(event: any): void;
25
+ get allSelected(): boolean;
26
+ static ɵfac: i0.ɵɵFactoryDeclaration<BarakUiTableComponent<any>, never>;
27
+ static ɵcmp: i0.ɵɵComponentDeclaration<BarakUiTableComponent<any>, "barak-ui-table", never, { "columns": { "alias": "columns"; "required": false; }; "actions": { "alias": "actions"; "required": false; }; "dataSource": { "alias": "dataSource"; "required": false; }; "isMenu": { "alias": "isMenu"; "required": false; }; }, {}, never, never, true, never>;
28
+ }
@@ -0,0 +1,20 @@
1
+ import { MatDialog, MatDialogRef } from '@angular/material/dialog';
2
+ import * as i0 from "@angular/core";
3
+ export declare class BarakUiModalService {
4
+ private dialog;
5
+ constructor(dialog: MatDialog);
6
+ /**
7
+ * Ouvre une modale générique
8
+ *
9
+ * @param component Le composant à afficher dans la modale
10
+ * @param data Les données à transmettre au composant
11
+ * @param options Options supplémentaires pour configurer la modale
12
+ * @returns Une référence à la modale
13
+ */
14
+ openModal<T, D = any>(component: T, data: D, options?: {
15
+ width?: string;
16
+ maxWidth?: string;
17
+ }): MatDialogRef<any>;
18
+ static ɵfac: i0.ɵɵFactoryDeclaration<BarakUiModalService, never>;
19
+ static ɵprov: i0.ɵɵInjectableDeclaration<BarakUiModalService>;
20
+ }
@@ -0,0 +1,21 @@
1
+ import { MatSnackBar } from '@angular/material/snack-bar';
2
+ import * as i0 from "@angular/core";
3
+ export declare class BarakUiToastService {
4
+ private snackBar;
5
+ constructor(snackBar: MatSnackBar);
6
+ /**
7
+ * Affiche un message de snack bar
8
+ * @param message Le texte à afficher
9
+ * @param type Type de message ('success', 'error', 'info')
10
+ */
11
+ open(message: string, type?: 'success' | 'error' | 'info', duration?: number, horizontalPosition?: string, verticalPosition?: string): void;
12
+ success(message: string): void;
13
+ error(message: string): void;
14
+ info(message: string): void;
15
+ /**
16
+ * Ferme tous les snackbars ouverts
17
+ */
18
+ dismiss(): void;
19
+ static ɵfac: i0.ɵɵFactoryDeclaration<BarakUiToastService, never>;
20
+ static ɵprov: i0.ɵɵInjectableDeclaration<BarakUiToastService>;
21
+ }
package/package.json ADDED
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "barak-ui",
3
+ "version": "1.0.0",
4
+ "peerDependencies": {
5
+ "@angular/common": "^19.2.0",
6
+ "@angular/core": "^19.2.0"
7
+ },
8
+ "dependencies": {
9
+ "tslib": "^2.3.0"
10
+ },
11
+ "sideEffects": false,
12
+ "module": "fesm2022/barak-ui.mjs",
13
+ "typings": "index.d.ts",
14
+ "exports": {
15
+ "./package.json": {
16
+ "default": "./package.json"
17
+ },
18
+ ".": {
19
+ "types": "./index.d.ts",
20
+ "default": "./fesm2022/barak-ui.mjs"
21
+ }
22
+ }
23
+ }
@@ -0,0 +1,9 @@
1
+ export * from './lib/services/barak-ui.modal.service';
2
+ export * from './lib/services/barak-ui.toast.service';
3
+ export * from './lib/components/button/button.component';
4
+ export * from './lib/components/dialog/confirmation-dialog/barak-ui-dialog.component';
5
+ export * from './lib/components/dialog/generic-dialog/barak-ui-generic-dialog.component';
6
+ export * from './lib/components/table/barak-ui-table.component';
7
+ export * from './lib/components/pagination/barak-ui.pagniation.component';
8
+ export * from './lib/components/autocomplete/barak-ui-autocomplete.component';
9
+ export * from './lib/components/barak-ui-spinner/barak-ui-spinner.component';