fx-form-builder-wrapper 0.0.49 → 0.0.53

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/ng-package.json +9 -0
  2. package/package.json +16 -29
  3. package/src/lib/components/button/button.component.css +0 -0
  4. package/src/lib/components/button/button.component.html +1 -0
  5. package/src/lib/components/button/button.component.ts +24 -0
  6. package/src/lib/components/dynamic-table/dynamic-table.component.css +31 -0
  7. package/src/lib/components/dynamic-table/dynamic-table.component.html +69 -0
  8. package/src/lib/components/dynamic-table/dynamic-table.component.ts +258 -0
  9. package/src/lib/components/fx-form-component/fx-form-component.component.ts +86 -0
  10. package/src/lib/components/toggle/toggle.component.css +51 -0
  11. package/src/lib/components/toggle/toggle.component.html +12 -0
  12. package/src/lib/components/toggle/toggle.component.ts +33 -0
  13. package/src/lib/components/toggle-button/toggle-button.component.css +22 -0
  14. package/src/lib/components/toggle-button/toggle-button.component.html +10 -0
  15. package/src/lib/components/toggle-button/toggle-button.component.ts +40 -0
  16. package/src/lib/components/uploader/uploader.component.css +49 -0
  17. package/src/lib/components/uploader/uploader.component.html +23 -0
  18. package/src/lib/components/uploader/uploader.component.ts +59 -0
  19. package/src/lib/custom-controls/dispatch-to-clinic/dispatch-to-clinic.component.html +78 -0
  20. package/src/lib/custom-controls/dispatch-to-clinic/dispatch-to-clinic.component.ts +44 -0
  21. package/src/lib/form-builder.css +9 -0
  22. package/src/lib/fx-builder-wrapper.component.ts +68 -0
  23. package/src/lib/fx-builder-wrapper.service.ts +38 -0
  24. package/src/lib/panel/configuration-panel/configuration-panel.component.css +154 -0
  25. package/src/lib/panel/configuration-panel/configuration-panel.component.html +162 -0
  26. package/src/lib/panel/configuration-panel/configuration-panel.component.ts +120 -0
  27. package/src/lib/panel/settings-panel/settings-panel.component.css +30 -0
  28. package/src/lib/panel/settings-panel/settings-panel.component.html +28 -0
  29. package/src/lib/panel/settings-panel/settings-panel.component.ts +23 -0
  30. package/src/public-api.ts +8 -0
  31. package/tsconfig.lib.json +15 -0
  32. package/tsconfig.lib.prod.json +13 -0
  33. package/tsconfig.spec.json +15 -0
  34. package/esm2022/fx-form-builder-wrapper.mjs +0 -5
  35. package/esm2022/lib/components/dynamic-table/dynamic-table.component.mjs +0 -235
  36. package/esm2022/lib/components/fx-form-component/fx-form-component.component.mjs +0 -103
  37. package/esm2022/lib/components/toggle/toggle.component.mjs +0 -33
  38. package/esm2022/lib/components/toggle-button/toggle-button.component.mjs +0 -38
  39. package/esm2022/lib/components/uploader/uploader.component.mjs +0 -58
  40. package/esm2022/lib/custom-controls/dispatch-to-clinic/dispatch-to-clinic.component.mjs +0 -42
  41. package/esm2022/lib/fx-builder-wrapper.component.mjs +0 -79
  42. package/esm2022/lib/fx-builder-wrapper.service.mjs +0 -44
  43. package/esm2022/lib/panel/configuration-panel/configuration-panel.component.mjs +0 -117
  44. package/esm2022/lib/panel/settings-panel/settings-panel.component.mjs +0 -24
  45. package/esm2022/public-api.mjs +0 -7
  46. package/fesm2022/fx-form-builder-wrapper.mjs +0 -718
  47. package/fesm2022/fx-form-builder-wrapper.mjs.map +0 -1
  48. package/index.d.ts +0 -5
  49. package/lib/components/dynamic-table/dynamic-table.component.d.ts +0 -52
  50. package/lib/components/fx-form-component/fx-form-component.component.d.ts +0 -19
  51. package/lib/components/toggle/toggle.component.d.ts +0 -13
  52. package/lib/components/toggle-button/toggle-button.component.d.ts +0 -15
  53. package/lib/components/uploader/uploader.component.d.ts +0 -16
  54. package/lib/custom-controls/dispatch-to-clinic/dispatch-to-clinic.component.d.ts +0 -17
  55. package/lib/fx-builder-wrapper.component.d.ts +0 -19
  56. package/lib/fx-builder-wrapper.service.d.ts +0 -14
  57. package/lib/panel/configuration-panel/configuration-panel.component.d.ts +0 -27
  58. package/lib/panel/settings-panel/settings-panel.component.d.ts +0 -10
  59. package/public-api.d.ts +0 -3
@@ -0,0 +1,40 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angular/core';
3
+ import { FormControl, FormsModule, ReactiveFormsModule, UntypedFormControl } from '@angular/forms';
4
+ import { FxBaseComponent, FxComponent, FxIconSetting, FxSetting, FxStringSetting, FxValidation, FxValidatorService } from '@instantsys-labs/fx';
5
+
6
+ @Component({
7
+ selector: 'lib-toggle-button',
8
+ standalone: true,
9
+ imports: [CommonModule, FxComponent, ReactiveFormsModule, FormsModule],
10
+ templateUrl: './toggle-button.component.html',
11
+ styleUrl: './toggle-button.component.css'
12
+ })
13
+ export class ToggleButtonComponent extends FxBaseComponent {
14
+ public toggleBtnControl = new UntypedFormControl(false);
15
+ public isToggled = false;
16
+
17
+ constructor(private cdr: ChangeDetectorRef) {
18
+ super(cdr);
19
+ this.onInit.subscribe((fxData)=>{
20
+ this._register(this.toggleBtnControl);
21
+ })
22
+ }
23
+
24
+ public toggle(): void {
25
+ this.isToggled = !this.toggleBtnControl.value;
26
+ this.toggleBtnControl.setValue(this.isToggled);
27
+ }
28
+
29
+ protected settings(): FxSetting[] {
30
+ return [
31
+ new FxStringSetting({ key: 'classes', $title: 'Classes', value: '' }),
32
+ new FxStringSetting({ key: 'active-text', $title: 'Active Text', value: 'On' }),
33
+ new FxStringSetting({ key: 'inactive-text', $title: 'Inactive Text', value: 'Off' }),
34
+ ];
35
+ }
36
+
37
+ protected validations(): FxValidation[] {
38
+ return [FxValidatorService.required];
39
+ }
40
+ }
@@ -0,0 +1,49 @@
1
+ .custom-upload {
2
+ display: flex;
3
+ flex-direction: row;
4
+ align-items: flex-start;
5
+ }
6
+
7
+ .custom-upload button {
8
+ padding: 10px 20px;
9
+ font-size: 16px;
10
+ font-weight: bold;
11
+ color: white;
12
+ background-color: #007bff;
13
+ border: none;
14
+ border-radius: 5px;
15
+ cursor: pointer;
16
+ transition: background-color 0.3s;
17
+ }
18
+
19
+ .custom-upload button:hover {
20
+ background-color: #0056b3;
21
+ }
22
+
23
+ .custom-upload .file-list {
24
+ display: flex;
25
+ /* margin-top: 10px; */
26
+ }
27
+
28
+ .custom-upload .file-list p {
29
+ margin: 0;
30
+ padding: 5px;
31
+ background-color: #f1f1f1;
32
+ border: 1px solid #ddd;
33
+ border-radius: 3px;
34
+ font-size: 14px;
35
+ }
36
+
37
+ .custom-upload .file-list > div {
38
+ display: flex;
39
+ flex-direction: column;
40
+ align-items: center;
41
+ justify-content: center;
42
+ }
43
+
44
+ .custom-upload .file-list .file-thumbnail {
45
+ width: 100px;
46
+ height: 100px;
47
+ object-fit: contain;
48
+ }
49
+
@@ -0,0 +1,23 @@
1
+ <fx-component [fxData]="fxData">
2
+ <div class="custom-upload">
3
+ <button type="button" (click)="fileInput.click()">
4
+ {{setting('upload-text')}}
5
+ </button>
6
+ <input
7
+ #fileInput
8
+ type="file"
9
+ [multiple]="setting('multiple-upload')"
10
+ (change)="onFileSelected($event)"
11
+ [formControl]="uploadFileControl"
12
+ hidden
13
+ />
14
+ <div class="file-list">
15
+ <ng-container *ngIf="uploadedFiles?.length">
16
+ <div (click)="deleteFile(file?.id)" *ngFor="let file of uploadedFiles">
17
+ <img class="file-thumbnail" style="border-radius: 4px" [src]="file?.previewUrl" alt="">
18
+ <!-- <p>{{file?.name}}</p> -->
19
+ </div>
20
+ </ng-container>
21
+ </div>
22
+ </div>
23
+ </fx-component>
@@ -0,0 +1,59 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { ChangeDetectorRef, Component } from '@angular/core';
3
+ import { FormsModule, ReactiveFormsModule, UntypedFormControl } from '@angular/forms';
4
+ import { FxBaseComponent, FxComponent, FxSelectSetting, FxSetting, FxStringSetting, FxValidation, FxValidatorService } from '@instantsys-labs/fx';
5
+ import { v4 as uuidv4} from 'uuid';
6
+
7
+ @Component({
8
+ selector: 'fx-uploader',
9
+ standalone: true,
10
+ imports: [CommonModule, FxComponent, FormsModule, ReactiveFormsModule],
11
+ templateUrl: './uploader.component.html',
12
+ styleUrl: './uploader.component.css'
13
+ })
14
+ export class UploaderComponent extends FxBaseComponent {
15
+ public uploadFileControl = new UntypedFormControl();
16
+ public uploadedFiles: Array<any> = [];
17
+
18
+ constructor(private cdr: ChangeDetectorRef) {
19
+ super(cdr)
20
+ this.onInit.subscribe((fxData)=>{
21
+ this._register(this.uploadFileControl);
22
+ })
23
+ }
24
+
25
+ public onFileSelected(event: Event) {
26
+ const input = event.target as HTMLInputElement;
27
+ if (input.files) {
28
+ for(let i = 0; i < input?.files?.length; i++) {
29
+ const file = input.files[i];
30
+ const reader = new FileReader();
31
+ reader.onload = e => {
32
+ this.uploadedFiles.push({
33
+ file: file,
34
+ previewUrl: e.target?.result,
35
+ name: file?.name,
36
+ id: uuidv4()
37
+ })
38
+ this.uploadFileControl.setValue(this.uploadedFiles)
39
+ }
40
+ reader.readAsDataURL(file);
41
+ }
42
+ }
43
+ }
44
+
45
+ public deleteFile(id: string): void {
46
+ this.uploadedFiles = this.uploadedFiles.filter(file => file?.id !== id);
47
+ }
48
+
49
+ protected settings(): FxSetting[] {
50
+ return [
51
+ new FxStringSetting({ key: 'upload-text', $title: 'Upload Text', value: 'Upload File'}),
52
+ new FxSelectSetting({key: 'multiple-upload', $title: 'Multiple Upload', value: false}, [{option: 'Enable', value: true}, {option: 'Disable', value: false}])
53
+ ];
54
+ }
55
+
56
+ protected validations(): FxValidation[] {
57
+ return [FxValidatorService.required];
58
+ }
59
+ }
@@ -0,0 +1,78 @@
1
+ <fx-component [fxData]="fxData">
2
+ <section
3
+ class="justify-content-around lg:justify-content-between w-full white-color border-1 border-solid stroke_light_grey p-3 mb-3 mt-3">
4
+ <form [formGroup]="dispatchForm">
5
+ <div class="grid">
6
+ <!-- Courier Name -->
7
+ <div class="col-12 sm:col-6 md:col-3 input-container">
8
+ <label for="courierName" class="input-title">Courier Name</label>
9
+ <input autocomplete="off" formControlName="courierName" type="text" id="courierName"
10
+ name="courierName" class="p-inputtext p-component p-element input-field border-1 w-full"
11
+ placeholder="enter courier name" />
12
+
13
+ <!-- validation -->
14
+ <small *ngIf="dispatchForm.get('courierName')?.invalid && dispatchForm.get('courierName')?.touched"
15
+ class="text-danger-color block mt-1">
16
+ Courier Name is required.
17
+ </small>
18
+ <!-- validation -->
19
+ </div>
20
+ <!-- Courier Name -->
21
+
22
+ <!-- Tracking Number -->
23
+ <div class="col-12 sm:col-6 md:col-3 input-container">
24
+ <label for="trackingNumber" class="input-title">Tracking Number</label>
25
+ <input autocomplete="off" formControlName="trackingNumber" type="text" id="trackingNumber"
26
+ name="trackingNumber" class="p-inputtext p-component p-element input-field border-1 w-full"
27
+ placeholder="enter tracking number" />
28
+ <small
29
+ *ngIf="dispatchForm.get('trackingNumber')?.invalid && dispatchForm.get('trackingNumber')?.touched"
30
+ class="text-danger-color block mt-1">
31
+ Tracking Number is required.
32
+ </small>
33
+ </div>
34
+ <!-- Tracking Number -->
35
+
36
+ <!-- Tracking URL -->
37
+ <div class="col-12 sm:col-6 md:col-3 input-container">
38
+ <label for="trackingUrl" class="input-title">Tracking URL</label>
39
+ <input autocomplete="off" formControlName="trackingUrl" type="text" id="trackingUrl"
40
+ name="trackingUrl" class="p-inputtext p-component p-element input-field border-1 w-full"
41
+ placeholder="enter tracking url" />
42
+ <small *ngIf="dispatchForm.get('trackingUrl')?.invalid && dispatchForm.get('trackingUrl')?.touched"
43
+ class="text-danger-color block mt-1">
44
+ <span *ngIf="dispatchForm.get('trackingUrl')?.errors?.['required']">Tracking URL is
45
+ required.</span>
46
+ <span *ngIf="dispatchForm.get('trackingUrl')?.errors?.['pattern']">Invalid URL format.</span>
47
+ </small>
48
+ </div>
49
+ <!-- Tracking URL -->
50
+
51
+ <!-- Notes -->
52
+ <div class="col-12 md:col-6 input-container">
53
+ <label for="notes" class="input-title">Notes</label>
54
+ <textarea autocomplete="off" formControlName="notes" rows="5" id="notes" name="notes"
55
+ class="p-inputtext p-component p-element input-field border-1 w-full"
56
+ placeholder="enter notes"></textarea>
57
+ <small *ngIf="dispatchForm.get('notes')?.invalid && dispatchForm.get('notes')?.touched"
58
+ class="text-danger-color block mt-1">
59
+ Notes are required.
60
+ </small>
61
+ </div>
62
+ <!-- Notes -->
63
+
64
+ <!-- Address with Copy Icon -->
65
+ <div class="col-12 md:col-6 pt-0">
66
+ <div class="mb-1">Address</div>
67
+ <ng-container *ngIf="(clinicAddress$ | async) as address">
68
+ <address #completeAddress>{{address?.street}}, {{address?.state}}, {{address?.postalCode}}
69
+ <i class="pi pi-copy cursor-pointer text-xl text-secondary-color"
70
+ (click)="copyToClipboard(completeAddress.textContent)"></i>
71
+ </address>
72
+ </ng-container>
73
+ </div>
74
+ <!-- Address with Copy Icon -->
75
+ </div>
76
+ </form>
77
+ </section>
78
+ </fx-component>
@@ -0,0 +1,44 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { ChangeDetectorRef, Component, inject } from '@angular/core';
3
+ import { FormGroup, ReactiveFormsModule, Validators, FormBuilder, FormsModule } from '@angular/forms';
4
+ import { FxBaseComponent, FxComponent, FxSetting, FxStringSetting, FxValidation, FxValidatorService } from '@instantsys-labs/fx';
5
+ import { BehaviorSubject, take } from 'rxjs';
6
+
7
+ @Component({
8
+ selector: 'lib-dispatch-to-clinic',
9
+ standalone: true,
10
+ imports: [CommonModule, ReactiveFormsModule, FormsModule, FxComponent],
11
+ templateUrl: './dispatch-to-clinic.component.html'
12
+ })
13
+ export class DispatchToClinicComponent extends FxBaseComponent {
14
+ private fb = inject(FormBuilder);
15
+
16
+ public clinicAddress$: BehaviorSubject<any> = new BehaviorSubject<any>({});
17
+
18
+ public dispatchForm: FormGroup = this.fb.group({
19
+ courierName: ['', Validators.required],
20
+ trackingNumber: ['', Validators.required],
21
+ trackingUrl: ['', [Validators.required, Validators.pattern('https?://.+')]],
22
+ notes: ['', Validators.required]
23
+ })
24
+
25
+ constructor(private cdr: ChangeDetectorRef) {
26
+ super(cdr);
27
+
28
+ this.onInit.subscribe(() => {
29
+ this._register(this.dispatchForm);
30
+ });
31
+ }
32
+
33
+ protected settings(): FxSetting[] {
34
+ return [new FxStringSetting({ key: 'heading-text', $title: 'Heading Text', value: 'My Default Value' })];
35
+ }
36
+
37
+ protected validations(): FxValidation[] {
38
+ return [FxValidatorService.required];
39
+ }
40
+
41
+ public copyToClipboard(address: any): void {
42
+ navigator.clipboard.writeText(address);
43
+ }
44
+ }
@@ -0,0 +1,9 @@
1
+
2
+ /* @import "../../../../node_modules/@instantsys-labs/fx/css/styles.css";
3
+ @import "../../../../node_modules/@instantsys-labs/icons/fonts/css/all.css"; */
4
+
5
+
6
+ /* @import "../../node_modules/@instantsys-labs/fx/css/styles.css";
7
+ @import "../../node_modules/@instantsys-labs/icons/fonts/css/all.css"; */
8
+
9
+
@@ -0,0 +1,68 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component, Input, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';
3
+ import { FxBuilderConfiguration, FxComponentBuilder, FxForm, FxMode, FxScope, FxUtils } from '@instantsys-labs/fx';
4
+ import { DispatchToClinicComponent } from './custom-controls/dispatch-to-clinic/dispatch-to-clinic.component';
5
+ import { FxBuilderWrapperService } from './fx-builder-wrapper.service';
6
+ import { DynamicTableComponent } from './components/dynamic-table/dynamic-table.component';
7
+ import { ToggleButtonComponent } from './components/toggle-button/toggle-button.component';
8
+ import { UploaderComponent } from './components/uploader/uploader.component';
9
+ import { ToggleComponent } from './components/toggle/toggle.component';
10
+
11
+ @Component({
12
+ selector: 'fx-builder-wrapper',
13
+ standalone: true,
14
+ imports: [CommonModule, FxComponentBuilder],
15
+ template: `
16
+ <fx-component-builder
17
+ #componentBuilder
18
+ [fx-form]="fxForm"
19
+ [configuration]="fxConfiguration"
20
+ [scope]="FxScope.BUILDER"
21
+ >
22
+ </fx-component-builder>
23
+ `,
24
+ styleUrl: './form-builder.css',
25
+ })
26
+ export class FxBuilderWrapperComponent implements OnInit {
27
+ @ViewChild('componentBuilder') componentBuilder!: FxComponentBuilder;
28
+ @Input({ alias: 'fx-form', required: true }) fxForm: FxForm = FxUtils.createNewForm();
29
+ public fxMode: FxMode = FxMode.EDIT;
30
+ public fxConfiguration: FxBuilderConfiguration = {
31
+ settings: true,
32
+ logics: true,
33
+ customControls: true,
34
+ }
35
+
36
+ protected readonly FxScope = FxScope;
37
+ protected readonly FxMode = FxMode;
38
+
39
+ constructor(private fxWrapperService: FxBuilderWrapperService) { }
40
+
41
+ public ngOnInit(): void {
42
+ if (!Boolean(this.fxWrapperService.getComponent('dispatch-to-clinic'))) {
43
+ this.fxWrapperService.registerCustomComponent('Dispatch To Clinic', 'dispatch-to-clinic', DispatchToClinicComponent);
44
+ }
45
+ if (!Boolean(this.fxWrapperService.getComponent('dynamic-table'))) {
46
+ this.fxWrapperService.registerCustomComponent('Dynamic Table', 'dynamic-table', DynamicTableComponent);
47
+ }
48
+ if (!Boolean(this.fxWrapperService.getComponent('toggle-button'))) {
49
+ this.fxWrapperService.registerCustomComponent('Toggle Button', 'toggle-button', ToggleButtonComponent);
50
+ }
51
+ if (!Boolean(this.fxWrapperService.getComponent('uploader'))) {
52
+ this.fxWrapperService.registerCustomComponent('Uploader', 'uploader', UploaderComponent);
53
+ }
54
+ if (!Boolean(this.fxWrapperService.getComponent('toggle'))) {
55
+ this.fxWrapperService.registerCustomComponent('Toggle', 'toggle', ToggleComponent);
56
+ }
57
+ };
58
+
59
+ public getParsedForm(): FxForm {
60
+ return this.componentBuilder.getParsedForm();
61
+ }
62
+
63
+ public getInitializedFxForm(): FxForm {
64
+ return FxUtils.createNewForm();
65
+ }
66
+ }
67
+
68
+
@@ -0,0 +1,38 @@
1
+ import { Injectable, Type } from '@angular/core';
2
+ import { FxBaseComponent, FxComponentRegistryService, FxForm, FxUtils } from '@instantsys-labs/fx';
3
+ import { BehaviorSubject, Subject } from 'rxjs';
4
+
5
+ @Injectable({
6
+ providedIn: 'root'
7
+ })
8
+ export class FxBuilderWrapperService {
9
+ public variables$ = new BehaviorSubject<any | null>(null);
10
+ constructor(private fxComponentRegistry: FxComponentRegistryService) { }
11
+
12
+ public registerCustomComponent(title: string, selector: string, component: Type<FxBaseComponent>
13
+ ): void {
14
+ this.fxComponentRegistry.registerComponent(selector, component, {
15
+ registeringAs: "CUSTOM",
16
+ libraryItem: {
17
+ title,
18
+ icon: 'fa-eye',
19
+ fxData: {
20
+ id: null,
21
+ name: selector,
22
+ value: "",
23
+ selector: selector,
24
+ elements: [],
25
+ events: []
26
+ }
27
+ },
28
+ })
29
+ }
30
+
31
+ public getComponent(selector: string): Type<FxBaseComponent> | undefined {
32
+ return this.fxComponentRegistry.getComponent(selector);
33
+ }
34
+
35
+ public getInitializedFxForm(): FxForm {
36
+ return FxUtils.createNewForm();
37
+ }
38
+ }
@@ -0,0 +1,154 @@
1
+ /* .form__input {
2
+ width: clamp(120px, 50vw, 420px);
3
+ width: 100%;
4
+ height: 2.5rem;
5
+ padding: 0 1.25rem;
6
+ border: 1px solid black;
7
+ border-radius: 2px;
8
+ margin: 0.625rem auto;
9
+ transition: all 250ms;
10
+ } */
11
+ @import "../../../../../../node_modules/primeng//resources/primeng.min.css";
12
+
13
+
14
+ /* :host ::ng-deep .p-dialog {
15
+ .p-dialog-content {
16
+ padding: 1.5rem;
17
+ }
18
+
19
+ .p-dialog-header {
20
+ background: white;
21
+ padding: 1rem;
22
+ font-size: 1.25rem;
23
+ font-weight: bold;
24
+ }
25
+ } */
26
+
27
+ .customDialogClass .p-dialog {
28
+ height: auto;
29
+ }
30
+ .customDialogClass .p-dialog-header {
31
+ padding: 0.8rem 0.55rem !important;
32
+ background-color: white !important;
33
+ }
34
+ .customDialogClass .p-dialog-header-close-icon {
35
+ color: black !important;
36
+ }
37
+ .customDialogClass .p-dialog-content {
38
+ border-top-left-radius: 0%;
39
+ padding: 0px;
40
+ }
41
+
42
+
43
+ .p-dialog .p-dialog-header {
44
+ background-color: white !important;
45
+ border-bottom: 2px solid #e5e7eb;
46
+ padding: 12px 16px;
47
+ font-weight: bold;
48
+ font-size: 1rem;
49
+ display: flex;
50
+ align-items: center;
51
+ justify-content: space-between;
52
+ }
53
+
54
+
55
+ .p-dialog-mask {
56
+ background: rgba(0, 0, 0, 0.5) !important;
57
+ }
58
+
59
+ .p-dialog .p-dialog-content {
60
+ background-color: white;
61
+ padding: 16px;
62
+ }
63
+
64
+ .p-dialog .p-dialog-footer {
65
+ background-color: #f3f4f6;
66
+ padding: 12px 16px;
67
+ border-top: 2px solid #e5e7eb;
68
+ }
69
+
70
+ .p-dialog .p-dialog-content::-webkit-scrollbar {
71
+ width: 8px;
72
+ }
73
+
74
+ .p-dialog .p-dialog-content::-webkit-scrollbar-track {
75
+ background-color: #f1f1f1;
76
+ }
77
+
78
+ .p-dialog .p-dialog-content::-webkit-scrollbar-thumb {
79
+ background-color: #FAA762;
80
+ border-radius: 10px;
81
+ }
82
+
83
+ .p-dialog .p-dialog-content::-webkit-scrollbar-thumb:hover {
84
+ background-color: #FAA762;
85
+ }
86
+
87
+ .custom-save-button {
88
+ background-color: #FAA762 !important;
89
+ color: white !important;
90
+ border: 1px solid #FAA762 !important;
91
+ }
92
+
93
+ .custom-save-button:hover {
94
+ background-color: #e59550 !important;
95
+ border-color: #e59550 !important;
96
+ }
97
+
98
+
99
+ .form__input {
100
+ width: 100%;
101
+ padding: 8px;
102
+ border: 1px solid #ccc;
103
+ border-radius: 5px;
104
+ }
105
+
106
+ label {
107
+ font-size: 14px;
108
+ font-weight: 600;
109
+ margin-bottom: 5px;
110
+ }
111
+
112
+
113
+ .button-group {
114
+ display: flex;
115
+ justify-content: flex-end;
116
+ gap: 10px;
117
+ padding-top: 1rem;
118
+ }
119
+
120
+ button {
121
+ padding: 8px 12px;
122
+ border: none;
123
+ border-radius: 5px;
124
+ cursor: pointer;
125
+ }
126
+
127
+ .cancel {
128
+ background: #ccc;
129
+ color: black;
130
+ }
131
+
132
+ .save {
133
+ background: #007bff;
134
+ color: white;
135
+ }
136
+
137
+ button:hover {
138
+ opacity: 0.8;
139
+ }
140
+
141
+
142
+ .card-width{
143
+ width:295px !important;
144
+ flex-shrink: 0;
145
+
146
+ }
147
+
148
+ .justify-end{
149
+ justify-content: end;
150
+ }
151
+
152
+
153
+
154
+