pantheon-libraries 0.1.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.
Files changed (36) hide show
  1. package/README.md +27 -0
  2. package/dist/pantheon-ui/README.md +63 -0
  3. package/dist/pantheon-ui/esm2022/lib/pantheon-Cards/card.component.mjs +32 -0
  4. package/dist/pantheon-ui/esm2022/lib/pantheon-Cards/card.module.mjs +32 -0
  5. package/dist/pantheon-ui/esm2022/lib/pantheon-Panels/grid-panel/grid-panel.component.mjs +48 -0
  6. package/dist/pantheon-ui/esm2022/lib/pantheon-Panels/grid-panel/grid-panel.module.mjs +36 -0
  7. package/dist/pantheon-ui/esm2022/lib/pantheon-Panels/grid-panel/grid-pannel-header/grid-panel-header.component.mjs +34 -0
  8. package/dist/pantheon-ui/esm2022/lib/pantheon-Panels/grid-panel/grid-pannel-header/grid-panel-header.module.mjs +25 -0
  9. package/dist/pantheon-ui/esm2022/lib/pantheon-ui.mjs +19 -0
  10. package/dist/pantheon-ui/esm2022/lib/pantheon-windows/SideActionPanel/interface.mjs +2 -0
  11. package/dist/pantheon-ui/esm2022/lib/pantheon-windows/SideActionPanel/side-action-panel.component.mjs +65 -0
  12. package/dist/pantheon-ui/esm2022/lib/pantheon-windows/SideActionPanel/side-action-panel.module.mjs +28 -0
  13. package/dist/pantheon-ui/esm2022/lib/pantheon-windows/window/constants.mjs +9 -0
  14. package/dist/pantheon-ui/esm2022/lib/pantheon-windows/window/window.component.mjs +44 -0
  15. package/dist/pantheon-ui/esm2022/lib/pantheon-windows/window/window.module.mjs +28 -0
  16. package/dist/pantheon-ui/esm2022/pantheon-ui.mjs +5 -0
  17. package/dist/pantheon-ui/esm2022/public-api.mjs +15 -0
  18. package/dist/pantheon-ui/fesm2022/pantheon-ui.mjs +369 -0
  19. package/dist/pantheon-ui/fesm2022/pantheon-ui.mjs.map +1 -0
  20. package/dist/pantheon-ui/index.d.ts +5 -0
  21. package/dist/pantheon-ui/lib/pantheon-Cards/card.component.d.ts +11 -0
  22. package/dist/pantheon-ui/lib/pantheon-Cards/card.module.d.ts +10 -0
  23. package/dist/pantheon-ui/lib/pantheon-Panels/grid-panel/grid-panel.component.d.ts +21 -0
  24. package/dist/pantheon-ui/lib/pantheon-Panels/grid-panel/grid-panel.module.d.ts +11 -0
  25. package/dist/pantheon-ui/lib/pantheon-Panels/grid-panel/grid-pannel-header/grid-panel-header.component.d.ts +17 -0
  26. package/dist/pantheon-ui/lib/pantheon-Panels/grid-panel/grid-pannel-header/grid-panel-header.module.d.ts +8 -0
  27. package/dist/pantheon-ui/lib/pantheon-ui.d.ts +5 -0
  28. package/dist/pantheon-ui/lib/pantheon-windows/SideActionPanel/interface.d.ts +6 -0
  29. package/dist/pantheon-ui/lib/pantheon-windows/SideActionPanel/side-action-panel.component.d.ts +12 -0
  30. package/dist/pantheon-ui/lib/pantheon-windows/SideActionPanel/side-action-panel.module.d.ts +9 -0
  31. package/dist/pantheon-ui/lib/pantheon-windows/window/constants.d.ts +5 -0
  32. package/dist/pantheon-ui/lib/pantheon-windows/window/window.component.d.ts +16 -0
  33. package/dist/pantheon-ui/lib/pantheon-windows/window/window.module.d.ts +9 -0
  34. package/dist/pantheon-ui/package.json +25 -0
  35. package/dist/pantheon-ui/public-api.d.ts +11 -0
  36. package/package.json +49 -0
package/README.md ADDED
@@ -0,0 +1,27 @@
1
+ #
2
+
3
+ This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 16.2.16.
4
+
5
+ ## Development server
6
+
7
+ Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The application will automatically reload if you change any of the source files.
8
+
9
+ ## Code scaffolding
10
+
11
+ Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`.
12
+
13
+ ## Build
14
+
15
+ Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory.
16
+
17
+ ## Running unit tests
18
+
19
+ Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io).
20
+
21
+ ## Running end-to-end tests
22
+
23
+ Run `ng e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities.
24
+
25
+ ## Further help
26
+
27
+ To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
@@ -0,0 +1,63 @@
1
+ # PantheonUi
2
+
3
+ This project was generated using [Angular CLI](https://github.com/angular/angular-cli) version 21.0.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 pantheon-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/pantheon-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,32 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/common";
4
+ import * as i2 from "@angular/material/icon";
5
+ export class CardComponent {
6
+ constructor() {
7
+ this.isCompleted = false;
8
+ this.cardClass = '';
9
+ }
10
+ get title() {
11
+ return this.data?.title || '';
12
+ }
13
+ get description() {
14
+ return this.data?.description || '';
15
+ }
16
+ get createdAt() {
17
+ return this.data?.createdAt || '';
18
+ }
19
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
20
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CardComponent, selector: "pantehon-card", inputs: { data: "data", isCompleted: "isCompleted", cardClass: "cardClass" }, ngImport: i0, template: "<div class=\"container-card\">\n <div class=\"card\" [ngClass]=\"[cardClass, isCompleted ? 'is-completed' : '']\">\n <div class=\"date-container\">\n <mat-icon>calendar_today</mat-icon>\n {{ createdAt }}\n </div>\n <h3>{{ title }}</h3>\n <p>{{ description }}</p>\n <div class=\"card-footer\">\n <ng-content select=\"[footer]\"></ng-content>\n </div>\n <ng-content select=\"[extra]\"></ng-content>\n </div>\n</div>\n", styles: [".card{display:flex;flex-direction:column;background:#fff;padding:16px;border-radius:8px;border:1px solid #e0e0e0;box-shadow:0 10px 4px #0625d11a;transition:all .3s ease;cursor:grab}.card-footer{margin-top:12px;border-top:1px solid #e0e0e0;padding-top:8px;font-size:12px;color:#666}.card:hover{box-shadow:0 4px 12px #00000026;transform:translateY(-2px)}.card:active{cursor:grabbing}.date-container{display:flex;align-items:center;gap:4px;align-self:flex-end;color:#666}.is-completed{text-decoration:line-through;color:#888}.mat-icon{font-size:16px;margin-left:14%;margin-top:4%}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
21
+ }
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CardComponent, decorators: [{
23
+ type: Component,
24
+ args: [{ selector: 'pantehon-card', template: "<div class=\"container-card\">\n <div class=\"card\" [ngClass]=\"[cardClass, isCompleted ? 'is-completed' : '']\">\n <div class=\"date-container\">\n <mat-icon>calendar_today</mat-icon>\n {{ createdAt }}\n </div>\n <h3>{{ title }}</h3>\n <p>{{ description }}</p>\n <div class=\"card-footer\">\n <ng-content select=\"[footer]\"></ng-content>\n </div>\n <ng-content select=\"[extra]\"></ng-content>\n </div>\n</div>\n", styles: [".card{display:flex;flex-direction:column;background:#fff;padding:16px;border-radius:8px;border:1px solid #e0e0e0;box-shadow:0 10px 4px #0625d11a;transition:all .3s ease;cursor:grab}.card-footer{margin-top:12px;border-top:1px solid #e0e0e0;padding-top:8px;font-size:12px;color:#666}.card:hover{box-shadow:0 4px 12px #00000026;transform:translateY(-2px)}.card:active{cursor:grabbing}.date-container{display:flex;align-items:center;gap:4px;align-self:flex-end;color:#666}.is-completed{text-decoration:line-through;color:#888}.mat-icon{font-size:16px;margin-left:14%;margin-top:4%}\n"] }]
25
+ }], propDecorators: { data: [{
26
+ type: Input
27
+ }], isCompleted: [{
28
+ type: Input
29
+ }], cardClass: [{
30
+ type: Input
31
+ }] } });
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYW50aGVvbi11aS9zcmMvbGliL3BhbnRoZW9uLUNhcmRzL2NhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGFudGhlb24tdWkvc3JjL2xpYi9wYW50aGVvbi1DYXJkcy9jYXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBT2pELE1BQU0sT0FBTyxhQUFhO0lBTDFCO1FBT1csZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDcEIsY0FBUyxHQUFHLEVBQUUsQ0FBQztLQWF6QjtJQVhDLElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxJQUFJLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsSUFBSSxFQUFFLENBQUM7SUFDcEMsQ0FBQzsrR0FmVSxhQUFhO21HQUFiLGFBQWEsbUlDUDFCLHVjQWNBOzs0RkRQYSxhQUFhO2tCQUx6QixTQUFTOytCQUNFLGVBQWU7OEJBS2hCLElBQUk7c0JBQVosS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BhbnRlaG9uLWNhcmQnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2FyZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NhcmQuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBDYXJkQ29tcG9uZW50IHtcbiAgQElucHV0KCkgZGF0YSE6IGFueTtcbiAgQElucHV0KCkgaXNDb21wbGV0ZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgY2FyZENsYXNzID0gJyc7XG5cbiAgZ2V0IHRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YT8udGl0bGUgfHwgJyc7XG4gIH1cblxuICBnZXQgZGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhPy5kZXNjcmlwdGlvbiB8fCAnJztcbiAgfVxuXG4gIGdldCBjcmVhdGVkQXQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhPy5jcmVhdGVkQXQgfHwgJyc7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjb250YWluZXItY2FyZFwiPlxuICA8ZGl2IGNsYXNzPVwiY2FyZFwiIFtuZ0NsYXNzXT1cIltjYXJkQ2xhc3MsIGlzQ29tcGxldGVkID8gJ2lzLWNvbXBsZXRlZCcgOiAnJ11cIj5cbiAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1jb250YWluZXJcIj5cbiAgICAgIDxtYXQtaWNvbj5jYWxlbmRhcl90b2RheTwvbWF0LWljb24+XG4gICAgICB7eyBjcmVhdGVkQXQgfX1cbiAgICA8L2Rpdj5cbiAgICA8aDM+e3sgdGl0bGUgfX08L2gzPlxuICAgIDxwPnt7IGRlc2NyaXB0aW9uIH19PC9wPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlclwiPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2Zvb3Rlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2V4dHJhXVwiPjwvbmctY29udGVudD5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,32 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { CardComponent } from './card.component';
4
+ import { WindowModule } from '../pantheon-windows/window/window.module';
5
+ import { MatIconModule } from '@angular/material/icon';
6
+ import * as i0 from "@angular/core";
7
+ export class CardModule {
8
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CardModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
9
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: CardModule, declarations: [CardComponent], imports: [CommonModule,
10
+ MatIconModule,
11
+ WindowModule], exports: [CardComponent] }); }
12
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CardModule, imports: [CommonModule,
13
+ MatIconModule,
14
+ WindowModule] }); }
15
+ }
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CardModule, decorators: [{
17
+ type: NgModule,
18
+ args: [{
19
+ declarations: [
20
+ CardComponent,
21
+ ],
22
+ imports: [
23
+ CommonModule,
24
+ MatIconModule,
25
+ WindowModule
26
+ ],
27
+ exports: [
28
+ CardComponent,
29
+ ]
30
+ }]
31
+ }] });
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYW50aGVvbi11aS9zcmMvbGliL3BhbnRoZW9uLUNhcmRzL2NhcmQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQWV2RCxNQUFNLE9BQU8sVUFBVTsrR0FBVixVQUFVO2dIQUFWLFVBQVUsaUJBWG5CLGFBQWEsYUFHYixZQUFZO1lBQ1osYUFBYTtZQUNiLFlBQVksYUFHWixhQUFhO2dIQUdKLFVBQVUsWUFSbkIsWUFBWTtZQUNaLGFBQWE7WUFDYixZQUFZOzs0RkFNSCxVQUFVO2tCQWJ0QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRTt3QkFDWixhQUFhO3FCQUNkO29CQUNELE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLGFBQWE7d0JBQ2IsWUFBWTtxQkFDYjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsYUFBYTtxQkFDZDtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2FyZENvbXBvbmVudCB9IGZyb20gJy4vY2FyZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgV2luZG93TW9kdWxlIH0gZnJvbSAnLi4vcGFudGhlb24td2luZG93cy93aW5kb3cvd2luZG93Lm1vZHVsZSc7IFxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtcbiAgICBDYXJkQ29tcG9uZW50LFxuICBdLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgV2luZG93TW9kdWxlXG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBDYXJkQ29tcG9uZW50LFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIENhcmRNb2R1bGUgeyB9XG4iXX0=
@@ -0,0 +1,48 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ import * as i2 from "@angular/cdk/drag-drop";
6
+ export class GridPanelComponent {
7
+ constructor() {
8
+ this.dataColumns = [];
9
+ this.gridTemplateColumns = 'repeat(4, 1fr)';
10
+ this.taskMoved = new EventEmitter();
11
+ this.crossOutEnabled = false;
12
+ }
13
+ get connectedDropLists() {
14
+ return this.dataColumns.map((_, index) => `column-${index}`);
15
+ }
16
+ onTaskDrop(event, targetColumnIndex) {
17
+ let movedTask;
18
+ if (event.previousContainer === event.container) {
19
+ moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);
20
+ movedTask = event.container.data[event.currentIndex];
21
+ }
22
+ else {
23
+ movedTask = event.previousContainer.data[event.previousIndex];
24
+ transferArrayItem(event.previousContainer.data, event.container.data, event.previousIndex, event.currentIndex);
25
+ }
26
+ this.dataColumns = [...this.dataColumns];
27
+ this.taskMoved.emit({
28
+ task: movedTask,
29
+ fromIndex: Number(event.previousContainer.id.split('-')[1]),
30
+ toIndex: targetColumnIndex
31
+ });
32
+ }
33
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GridPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
34
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: GridPanelComponent, selector: "pantehon-grid-panel", inputs: { dataColumns: "dataColumns", gridTemplateColumns: "gridTemplateColumns", itemTemplate: "itemTemplate" }, outputs: { taskMoved: "taskMoved" }, ngImport: i0, template: "<div class=\"grid-panel\" [ngStyle]=\"{'grid-template-columns': gridTemplateColumns}\">\n <div class=\"grid-column\" *ngFor=\"let column of dataColumns; let columnIndex = index\"\n cdkDropList\n [id]=\"'column-' + columnIndex\"\n [cdkDropListData]=\"column.items\"\n [cdkDropListConnectedTo]=\"connectedDropLists\"\n (cdkDropListDropped)=\"onTaskDrop($event, columnIndex)\">\n \n <div class=\"column-content\">\n <div *ngFor=\"let item of column.items\" cdkDrag>\n <ng-container\n *ngTemplateOutlet=\"itemTemplate; context: { $implicit: item, columnIndex: columnIndex }\">\n </ng-container>\n </div>\n </div>\n </div>\n</div>\n", styles: [".grid-panel{width:100%;height:95vh;padding:16px;box-sizing:border-box;background:#f5f5f5}.grid-panel{display:grid;grid-template-columns:repeat(4,1fr);column-gap:16px;row-gap:16px}.grid-column{padding:16px;border:2px solid #0645f1;border-radius:8px;background:#fff;box-shadow:0 2px 8px #0000001a;transition:all .3s ease}.grid-column:hover{box-shadow:0 4px 12px #0645f14d;transform:translateY(-2px)}.column-content{min-height:200px;display:flex;flex-direction:column;gap:8px}.cdk-drop-list-dragging .task-card:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.cdk-drag-placeholder{display:none!important}.cdk-drag-preview{padding:16px;border-radius:8px;background:#fff;box-shadow:0 5px 15px #0645f166;opacity:.95;border:2px solid #0645f1}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.cdk-drop-list-dragging .cdk-drag:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i2.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }] }); }
35
+ }
36
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GridPanelComponent, decorators: [{
37
+ type: Component,
38
+ args: [{ selector: 'pantehon-grid-panel', template: "<div class=\"grid-panel\" [ngStyle]=\"{'grid-template-columns': gridTemplateColumns}\">\n <div class=\"grid-column\" *ngFor=\"let column of dataColumns; let columnIndex = index\"\n cdkDropList\n [id]=\"'column-' + columnIndex\"\n [cdkDropListData]=\"column.items\"\n [cdkDropListConnectedTo]=\"connectedDropLists\"\n (cdkDropListDropped)=\"onTaskDrop($event, columnIndex)\">\n \n <div class=\"column-content\">\n <div *ngFor=\"let item of column.items\" cdkDrag>\n <ng-container\n *ngTemplateOutlet=\"itemTemplate; context: { $implicit: item, columnIndex: columnIndex }\">\n </ng-container>\n </div>\n </div>\n </div>\n</div>\n", styles: [".grid-panel{width:100%;height:95vh;padding:16px;box-sizing:border-box;background:#f5f5f5}.grid-panel{display:grid;grid-template-columns:repeat(4,1fr);column-gap:16px;row-gap:16px}.grid-column{padding:16px;border:2px solid #0645f1;border-radius:8px;background:#fff;box-shadow:0 2px 8px #0000001a;transition:all .3s ease}.grid-column:hover{box-shadow:0 4px 12px #0645f14d;transform:translateY(-2px)}.column-content{min-height:200px;display:flex;flex-direction:column;gap:8px}.cdk-drop-list-dragging .task-card:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.cdk-drag-placeholder{display:none!important}.cdk-drag-preview{padding:16px;border-radius:8px;background:#fff;box-shadow:0 5px 15px #0645f166;opacity:.95;border:2px solid #0645f1}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.cdk-drop-list-dragging .cdk-drag:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\n"] }]
39
+ }], propDecorators: { dataColumns: [{
40
+ type: Input
41
+ }], gridTemplateColumns: [{
42
+ type: Input
43
+ }], itemTemplate: [{
44
+ type: Input
45
+ }], taskMoved: [{
46
+ type: Output
47
+ }] } });
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1wYW5lbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYW50aGVvbi11aS9zcmMvbGliL3BhbnRoZW9uLVBhbmVscy9ncmlkLXBhbmVsL2dyaWQtcGFuZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGFudGhlb24tdWkvc3JjL2xpYi9wYW50aGVvbi1QYW5lbHMvZ3JpZC1wYW5lbC9ncmlkLXBhbmVsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFDcEYsT0FBTyxFQUFlLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7O0FBT3pGLE1BQU0sT0FBTyxrQkFBa0I7SUFML0I7UUFPVyxnQkFBVyxHQUEwQyxFQUFFLENBQUM7UUFDeEQsd0JBQW1CLEdBQUcsZ0JBQWdCLENBQUM7UUFFdEMsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFxRCxDQUFDO1FBRTVGLG9CQUFlLEdBQUcsS0FBSyxDQUFDO0tBK0J6QjtJQTdCQyxJQUFJLGtCQUFrQjtRQUNwQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsVUFBVSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxVQUFVLENBQUMsS0FBeUIsRUFBRSxpQkFBeUI7UUFDN0QsSUFBSSxTQUFTLENBQUM7UUFFZCxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsS0FBSyxLQUFLLENBQUMsU0FBUyxFQUFFO1lBQy9DLGVBQWUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUMvRSxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ3REO2FBQU07WUFDTCxTQUFTLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDOUQsaUJBQWlCLENBQ2YsS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFDNUIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQ3BCLEtBQUssQ0FBQyxhQUFhLEVBQ25CLEtBQUssQ0FBQyxZQUFZLENBQ25CLENBQUM7U0FDSDtRQUVELElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUV6QyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztZQUNsQixJQUFJLEVBQUUsU0FBUztZQUNmLFNBQVMsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0QsT0FBTyxFQUFFLGlCQUFpQjtTQUMzQixDQUFDLENBQUM7SUFDTCxDQUFDOytHQXBDVSxrQkFBa0I7bUdBQWxCLGtCQUFrQixrTkNSL0IsK3JCQWlCQTs7NEZEVGEsa0JBQWtCO2tCQUw5QixTQUFTOytCQUNFLHFCQUFxQjs4QkFNdEIsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDSSxTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5LCB0cmFuc2ZlckFycmF5SXRlbSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwYW50ZWhvbi1ncmlkLXBhbmVsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dyaWQtcGFuZWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ncmlkLXBhbmVsLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgR3JpZFBhbmVsQ29tcG9uZW50IHtcblxuICBASW5wdXQoKSBkYXRhQ29sdW1uczogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IGl0ZW1zOiBhbnlbXSB9PiA9IFtdO1xuICBASW5wdXQoKSBncmlkVGVtcGxhdGVDb2x1bW5zID0gJ3JlcGVhdCg0LCAxZnIpJztcbiAgQElucHV0KCkgaXRlbVRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcbiAgQE91dHB1dCgpIHRhc2tNb3ZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyB0YXNrOiBhbnk7IGZyb21JbmRleDogbnVtYmVyOyB0b0luZGV4OiBudW1iZXIgfT4oKTtcblxuICBjcm9zc091dEVuYWJsZWQgPSBmYWxzZTtcblxuICBnZXQgY29ubmVjdGVkRHJvcExpc3RzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhQ29sdW1ucy5tYXAoKF8sIGluZGV4KSA9PiBgY29sdW1uLSR7aW5kZXh9YCk7XG4gIH1cblxuICBvblRhc2tEcm9wKGV2ZW50OiBDZGtEcmFnRHJvcDxhbnlbXT4sIHRhcmdldENvbHVtbkluZGV4OiBudW1iZXIpIHtcbiAgICBsZXQgbW92ZWRUYXNrO1xuXG4gICAgaWYgKGV2ZW50LnByZXZpb3VzQ29udGFpbmVyID09PSBldmVudC5jb250YWluZXIpIHtcbiAgICAgIG1vdmVJdGVtSW5BcnJheShldmVudC5jb250YWluZXIuZGF0YSwgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICAgIG1vdmVkVGFzayA9IGV2ZW50LmNvbnRhaW5lci5kYXRhW2V2ZW50LmN1cnJlbnRJbmRleF07XG4gICAgfSBlbHNlIHtcbiAgICAgIG1vdmVkVGFzayA9IGV2ZW50LnByZXZpb3VzQ29udGFpbmVyLmRhdGFbZXZlbnQucHJldmlvdXNJbmRleF07XG4gICAgICB0cmFuc2ZlckFycmF5SXRlbShcbiAgICAgICAgZXZlbnQucHJldmlvdXNDb250YWluZXIuZGF0YSxcbiAgICAgICAgZXZlbnQuY29udGFpbmVyLmRhdGEsXG4gICAgICAgIGV2ZW50LnByZXZpb3VzSW5kZXgsXG4gICAgICAgIGV2ZW50LmN1cnJlbnRJbmRleFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGFDb2x1bW5zID0gWy4uLnRoaXMuZGF0YUNvbHVtbnNdO1xuXG4gICAgdGhpcy50YXNrTW92ZWQuZW1pdCh7XG4gICAgICB0YXNrOiBtb3ZlZFRhc2ssXG4gICAgICBmcm9tSW5kZXg6IE51bWJlcihldmVudC5wcmV2aW91c0NvbnRhaW5lci5pZC5zcGxpdCgnLScpWzFdKSxcbiAgICAgIHRvSW5kZXg6IHRhcmdldENvbHVtbkluZGV4XG4gICAgfSk7XG4gIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cImdyaWQtcGFuZWxcIiBbbmdTdHlsZV09XCJ7J2dyaWQtdGVtcGxhdGUtY29sdW1ucyc6IGdyaWRUZW1wbGF0ZUNvbHVtbnN9XCI+XG4gIDxkaXYgY2xhc3M9XCJncmlkLWNvbHVtblwiICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgZGF0YUNvbHVtbnM7IGxldCBjb2x1bW5JbmRleCA9IGluZGV4XCJcbiAgICAgICBjZGtEcm9wTGlzdFxuICAgICAgIFtpZF09XCInY29sdW1uLScgKyBjb2x1bW5JbmRleFwiXG4gICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJjb2x1bW4uaXRlbXNcIlxuICAgICAgIFtjZGtEcm9wTGlzdENvbm5lY3RlZFRvXT1cImNvbm5lY3RlZERyb3BMaXN0c1wiXG4gICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJvblRhc2tEcm9wKCRldmVudCwgY29sdW1uSW5kZXgpXCI+XG4gICAgXG4gICAgPGRpdiBjbGFzcz1cImNvbHVtbi1jb250ZW50XCI+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNvbHVtbi5pdGVtc1wiIGNka0RyYWc+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0sIGNvbHVtbkluZGV4OiBjb2x1bW5JbmRleCB9XCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,36 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { DragDropModule } from '@angular/cdk/drag-drop';
4
+ import { GridPanelComponent } from './grid-panel.component';
5
+ import { CardModule } from '../../pantheon-Cards/card.module';
6
+ import { GridPanelHeaderModule } from './grid-pannel-header/grid-panel-header.module';
7
+ import * as i0 from "@angular/core";
8
+ export class GridPanelModule {
9
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GridPanelModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
10
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: GridPanelModule, declarations: [GridPanelComponent], imports: [CommonModule,
11
+ CardModule,
12
+ GridPanelHeaderModule,
13
+ DragDropModule], exports: [GridPanelComponent] }); }
14
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GridPanelModule, imports: [CommonModule,
15
+ CardModule,
16
+ GridPanelHeaderModule,
17
+ DragDropModule] }); }
18
+ }
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GridPanelModule, decorators: [{
20
+ type: NgModule,
21
+ args: [{
22
+ declarations: [
23
+ GridPanelComponent,
24
+ ],
25
+ imports: [
26
+ CommonModule,
27
+ CardModule,
28
+ GridPanelHeaderModule,
29
+ DragDropModule,
30
+ ],
31
+ exports: [
32
+ GridPanelComponent,
33
+ ]
34
+ }]
35
+ }] });
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1wYW5lbC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYW50aGVvbi11aS9zcmMvbGliL3BhbnRoZW9uLVBhbmVscy9ncmlkLXBhbmVsL2dyaWQtcGFuZWwubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDOUQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sK0NBQStDLENBQUM7O0FBZ0J0RixNQUFNLE9BQU8sZUFBZTsrR0FBZixlQUFlO2dIQUFmLGVBQWUsaUJBWnhCLGtCQUFrQixhQUdsQixZQUFZO1lBQ1osVUFBVTtZQUNWLHFCQUFxQjtZQUNyQixjQUFjLGFBR2Qsa0JBQWtCO2dIQUdULGVBQWUsWUFUeEIsWUFBWTtZQUNaLFVBQVU7WUFDVixxQkFBcUI7WUFDckIsY0FBYzs7NEZBTUwsZUFBZTtrQkFkM0IsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUU7d0JBQ1osa0JBQWtCO3FCQUNuQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixVQUFVO3dCQUNWLHFCQUFxQjt3QkFDckIsY0FBYztxQkFDZjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1Asa0JBQWtCO3FCQUNuQjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRHJhZ0Ryb3BNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IEdyaWRQYW5lbENvbXBvbmVudCB9IGZyb20gJy4vZ3JpZC1wYW5lbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FyZE1vZHVsZSB9IGZyb20gJy4uLy4uL3BhbnRoZW9uLUNhcmRzL2NhcmQubW9kdWxlJztcbmltcG9ydCB7IEdyaWRQYW5lbEhlYWRlck1vZHVsZSB9IGZyb20gJy4vZ3JpZC1wYW5uZWwtaGVhZGVyL2dyaWQtcGFuZWwtaGVhZGVyLm1vZHVsZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIEdyaWRQYW5lbENvbXBvbmVudCxcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBDYXJkTW9kdWxlLFxuICAgIEdyaWRQYW5lbEhlYWRlck1vZHVsZSxcbiAgICBEcmFnRHJvcE1vZHVsZSxcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIEdyaWRQYW5lbENvbXBvbmVudCxcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBHcmlkUGFuZWxNb2R1bGUge31cbiJdfQ==
@@ -0,0 +1,34 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ export class GridPanelHeaderComponent {
6
+ constructor() {
7
+ this.columns = [];
8
+ this.menuAux = false;
9
+ this.iconMenu = 'menu';
10
+ /**
11
+ * Icono que se mostrará en el botón del menú auxiliar.
12
+ * Debe ser un nombre válido de Material Icons (Filled) disponible en:
13
+ * https://fonts.google.com/icons?icon.set=Material+Icons&icon.style=Filled
14
+ * Ejemplos válidos: 'menu', 'more_vert', 'add', 'account_circle', etc.
15
+ */
16
+ this.gridTemplateColumns = `repeat(${this.columns.length}, 1fr)`;
17
+ this.extraMenuClick = new EventEmitter();
18
+ }
19
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GridPanelHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
20
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: GridPanelHeaderComponent, isStandalone: true, selector: "pantehon-grid-panel-header", inputs: { columns: "columns", menuAux: "menuAux", iconMenu: "iconMenu" }, outputs: { extraMenuClick: "extraMenuClick" }, ngImport: i0, template: "<div class=\"header-container\">\n <div class=\"menus\">\n <button *ngIf=\"menuAux\" class=\"menu-button\" (click)=\"extraMenuClick.emit($event)\"\n>\n <span class=\"material-icons\">{{ iconMenu }}</span>\n </button>\n </div>\n\n <div class=\"header-column\" *ngFor=\"let col of columns\">\n {{ col }}\n </div>\n</div>", styles: [".header-container{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));background:#0645f1;padding:12px;border-radius:10px 10px 0 0;font-weight:600;color:#333;text-align:center;gap:10px}.header-column{padding:8px 0;background:#0789f3;border-radius:6px;color:#fff}.menus{position:absolute;top:21px;left:28px;z-index:10}.menu-button{width:40px;height:32px;border:none;border-radius:8px;background-color:#7297ff;color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px #0003;transition:all .3s ease}.menu-button:hover{box-shadow:0 4px 12px #0645f14d;transform:translateY(-2px)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
21
+ }
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GridPanelHeaderComponent, decorators: [{
23
+ type: Component,
24
+ args: [{ selector: 'pantehon-grid-panel-header', standalone: true, imports: [CommonModule], template: "<div class=\"header-container\">\n <div class=\"menus\">\n <button *ngIf=\"menuAux\" class=\"menu-button\" (click)=\"extraMenuClick.emit($event)\"\n>\n <span class=\"material-icons\">{{ iconMenu }}</span>\n </button>\n </div>\n\n <div class=\"header-column\" *ngFor=\"let col of columns\">\n {{ col }}\n </div>\n</div>", styles: [".header-container{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));background:#0645f1;padding:12px;border-radius:10px 10px 0 0;font-weight:600;color:#333;text-align:center;gap:10px}.header-column{padding:8px 0;background:#0789f3;border-radius:6px;color:#fff}.menus{position:absolute;top:21px;left:28px;z-index:10}.menu-button{width:40px;height:32px;border:none;border-radius:8px;background-color:#7297ff;color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px #0003;transition:all .3s ease}.menu-button:hover{box-shadow:0 4px 12px #0645f14d;transform:translateY(-2px)}\n"] }]
25
+ }], propDecorators: { columns: [{
26
+ type: Input
27
+ }], menuAux: [{
28
+ type: Input
29
+ }], iconMenu: [{
30
+ type: Input
31
+ }], extraMenuClick: [{
32
+ type: Output
33
+ }] } });
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1wYW5lbC1oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGFudGhlb24tdWkvc3JjL2xpYi9wYW50aGVvbi1QYW5lbHMvZ3JpZC1wYW5lbC9ncmlkLXBhbm5lbC1oZWFkZXIvZ3JpZC1wYW5lbC1oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGFudGhlb24tdWkvc3JjL2xpYi9wYW50aGVvbi1QYW5lbHMvZ3JpZC1wYW5lbC9ncmlkLXBhbm5lbC1oZWFkZXIvZ3JpZC1wYW5lbC1oZWFkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQVMvQyxNQUFNLE9BQU8sd0JBQXdCO0lBUHJDO1FBVVcsWUFBTyxHQUFrQixFQUFFLENBQUM7UUFDNUIsWUFBTyxHQUFZLEtBQUssQ0FBQztRQUN6QixhQUFRLEdBQVcsTUFBTSxDQUFDO1FBQ25DOzs7OztXQUtHO1FBQ0gsd0JBQW1CLEdBQVcsVUFBVSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO1FBQzFELG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQWMsQ0FBQztLQUczRDsrR0FoQlksd0JBQXdCO21HQUF4Qix3QkFBd0IsK01DVnJDLGtWQVdNLHNyQkRMTSxZQUFZOzs0RkFJWCx3QkFBd0I7a0JBUHBDLFNBQVM7K0JBQ0UsNEJBQTRCLGNBQzFCLElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQzs4QkFPZCxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBUUksY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwYW50ZWhvbi1ncmlkLXBhbmVsLWhlYWRlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vZ3JpZC1wYW5lbC1oZWFkZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ncmlkLXBhbmVsLWhlYWRlci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEdyaWRQYW5lbEhlYWRlckNvbXBvbmVudCB7XG5cblxuICBASW5wdXQoKSBjb2x1bW5zOiBBcnJheTxTdHJpbmc+ID0gW107XG4gIEBJbnB1dCgpIG1lbnVBdXg6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaWNvbk1lbnU6IHN0cmluZyA9ICdtZW51JztcbiAgLyoqXG4gICAqIEljb25vIHF1ZSBzZSBtb3N0cmFyw6EgZW4gZWwgYm90w7NuIGRlbCBtZW7DuiBhdXhpbGlhci5cbiAgICogRGViZSBzZXIgdW4gbm9tYnJlIHbDoWxpZG8gZGUgTWF0ZXJpYWwgSWNvbnMgKEZpbGxlZCkgZGlzcG9uaWJsZSBlbjpcbiAgICogaHR0cHM6Ly9mb250cy5nb29nbGUuY29tL2ljb25zP2ljb24uc2V0PU1hdGVyaWFsK0ljb25zJmljb24uc3R5bGU9RmlsbGVkXG4gICAqIEVqZW1wbG9zIHbDoWxpZG9zOiAnbWVudScsICdtb3JlX3ZlcnQnLCAnYWRkJywgJ2FjY291bnRfY2lyY2xlJywgZXRjLlxuICAgKi9cbiAgZ3JpZFRlbXBsYXRlQ29sdW1uczogc3RyaW5nID0gYHJlcGVhdCgke3RoaXMuY29sdW1ucy5sZW5ndGh9LCAxZnIpYDtcbiAgQE91dHB1dCgpIGV4dHJhTWVudUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PigpO1xuXG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJoZWFkZXItY29udGFpbmVyXCI+XG4gIDxkaXYgY2xhc3M9XCJtZW51c1wiPlxuICAgIDxidXR0b24gKm5nSWY9XCJtZW51QXV4XCIgY2xhc3M9XCJtZW51LWJ1dHRvblwiIChjbGljayk9XCJleHRyYU1lbnVDbGljay5lbWl0KCRldmVudClcIlxuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPnt7IGljb25NZW51IH19PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWNvbHVtblwiICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiPlxuICAgIHt7IGNvbCB9fVxuICA8L2Rpdj5cbjwvZGl2PiJdfQ==
@@ -0,0 +1,25 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { GridPanelHeaderComponent } from './grid-panel-header.component';
4
+ import * as i0 from "@angular/core";
5
+ export class GridPanelHeaderModule {
6
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GridPanelHeaderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
7
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: GridPanelHeaderModule, imports: [CommonModule,
8
+ GridPanelHeaderComponent], exports: [GridPanelHeaderComponent] }); }
9
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GridPanelHeaderModule, imports: [CommonModule,
10
+ GridPanelHeaderComponent] }); }
11
+ }
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GridPanelHeaderModule, decorators: [{
13
+ type: NgModule,
14
+ args: [{
15
+ declarations: [],
16
+ imports: [
17
+ CommonModule,
18
+ GridPanelHeaderComponent,
19
+ ],
20
+ exports: [
21
+ GridPanelHeaderComponent,
22
+ ]
23
+ }]
24
+ }] });
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1wYW5lbC1oZWFkZXIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGFudGhlb24tdWkvc3JjL2xpYi9wYW50aGVvbi1QYW5lbHMvZ3JpZC1wYW5lbC9ncmlkLXBhbm5lbC1oZWFkZXIvZ3JpZC1wYW5lbC1oZWFkZXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtCQUErQixDQUFDOztBQVl6RSxNQUFNLE9BQU8scUJBQXFCOytHQUFyQixxQkFBcUI7Z0hBQXJCLHFCQUFxQixZQVA5QixZQUFZO1lBQ1osd0JBQXdCLGFBR3hCLHdCQUF3QjtnSEFHZixxQkFBcUIsWUFQOUIsWUFBWTtZQUNaLHdCQUF3Qjs7NEZBTWYscUJBQXFCO2tCQVZqQyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxFQUFFO29CQUNoQixPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWix3QkFBd0I7cUJBQ3pCO29CQUNELE9BQU8sRUFBRTt3QkFDUCx3QkFBd0I7cUJBQ3pCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBHcmlkUGFuZWxIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuL2dyaWQtcGFuZWwtaGVhZGVyLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW10sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgR3JpZFBhbmVsSGVhZGVyQ29tcG9uZW50LFxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgR3JpZFBhbmVsSGVhZGVyQ29tcG9uZW50LFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEdyaWRQYW5lbEhlYWRlck1vZHVsZSB7IH1cbiJdfQ==
@@ -0,0 +1,19 @@
1
+ import { Component } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class PantheonUi {
4
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PantheonUi, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: PantheonUi, isStandalone: true, selector: "lib-pantheon-ui", ngImport: i0, template: `
6
+ <p>
7
+ pantheon-ui works!
8
+ </p>
9
+ `, isInline: true }); }
10
+ }
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PantheonUi, decorators: [{
12
+ type: Component,
13
+ args: [{ selector: 'lib-pantheon-ui', standalone: true, template: `
14
+ <p>
15
+ pantheon-ui works!
16
+ </p>
17
+ ` }]
18
+ }] });
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFudGhlb24tdWkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9wYW50aGVvbi11aS9zcmMvbGliL3BhbnRoZW9uLXVpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBWTFDLE1BQU0sT0FBTyxVQUFVOytHQUFWLFVBQVU7bUdBQVYsVUFBVSwyRUFQWDs7OztHQUlUOzs0RkFHVSxVQUFVO2tCQVZ0QixTQUFTOytCQUNFLGlCQUFpQixjQUNmLElBQUksWUFDTjs7OztHQUlUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1wYW50aGVvbi11aScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHRlbXBsYXRlOiBgXG4gICAgPHA+XG4gICAgICBwYW50aGVvbi11aSB3b3JrcyFcbiAgICA8L3A+XG4gIGAsXG4gIHN0eWxlczogW10sXG59KVxuZXhwb3J0IGNsYXNzIFBhbnRoZW9uVWkge1xuXG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGFudGhlb24tdWkvc3JjL2xpYi9wYW50aGVvbi13aW5kb3dzL1NpZGVBY3Rpb25QYW5lbC9pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgaWNvbj86IHN0cmluZztcbiAgdHlwZT86ICdkZWZhdWx0JyB8ICdkYW5nZXInIHwgJ3ByaW1hcnknO1xuICBjYWxsYmFjazogKCkgPT4gdm9pZDtcbn0iXX0=
@@ -0,0 +1,65 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/common";
4
+ export class SideActionPanelComponent {
5
+ constructor() {
6
+ this.open = false;
7
+ this.actions = [];
8
+ this.close = new EventEmitter();
9
+ }
10
+ createStars(event) {
11
+ const button = event.currentTarget;
12
+ const rect = button.getBoundingClientRect();
13
+ const startX = rect.left + rect.width / 2;
14
+ const startY = rect.top + rect.height / 2;
15
+ for (let i = 0; i < 6; i++) {
16
+ const star = document.createElement('div');
17
+ star.style.position = 'fixed';
18
+ star.style.left = `${startX}px`;
19
+ star.style.top = `${startY}px`;
20
+ star.style.width = '8px';
21
+ star.style.height = '8px';
22
+ star.style.borderRadius = '50%';
23
+ star.style.background = 'radial-gradient(circle, #fbbf24 0%, #f59e0b 50%)';
24
+ star.style.boxShadow = '0 0 8px rgba(251, 191, 36, 1)';
25
+ star.style.pointerEvents = 'none';
26
+ star.style.zIndex = '10000';
27
+ const offsetX = Math.random() * 100 - 50;
28
+ const offsetY = Math.random() * 100 - 50;
29
+ document.body.appendChild(star);
30
+ // Animar con requestAnimationFrame para mejor visibilidad
31
+ let elapsed = 0;
32
+ const duration = 1500;
33
+ const animate = () => {
34
+ elapsed += 16;
35
+ const progress = elapsed / duration;
36
+ star.style.transform = `translate(${offsetX * progress}px, ${offsetY * progress}px) scale(${1 - progress})`;
37
+ star.style.opacity = `${1 - progress}`;
38
+ if (elapsed < duration) {
39
+ requestAnimationFrame(animate);
40
+ }
41
+ else {
42
+ star.remove();
43
+ }
44
+ };
45
+ animate();
46
+ }
47
+ }
48
+ handleAction(event, action) {
49
+ this.createStars(event);
50
+ action.callback();
51
+ }
52
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SideActionPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
53
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: SideActionPanelComponent, selector: "pantheon-side-action-panel", inputs: { open: "open", actions: "actions" }, outputs: { close: "close" }, ngImport: i0, template: "<div class=\"overlay\" *ngIf=\"open\" (click)=\"close.emit()\">\n <aside class=\"panel\" (click)=\"$event.stopPropagation()\">\n\n <button\n class=\"close-btn\"\n aria-label=\"Cerrar\"\n (click)=\"close.emit()\">\n \u2715\n </button>\n\n <div class=\"actions\">\n <button *ngFor=\"let action of actions\"\n (click)=\"handleAction($event, action)\"\n [ngClass]=\"action.type || 'default'\">\n <span *ngIf=\"action.icon\">{{ action.icon }}</span>\n {{ action.label }}\n </button>\n </div>\n\n </aside>\n</div>\n", styles: ["@keyframes slideIn{0%{transform:translate(-100%)}to{transform:translate(0)}}.overlay{position:fixed;inset:0;background:#0003;display:flex;justify-content:flex-start;align-items:stretch;z-index:1000}.panel{position:relative;width:320px;height:100%;background:#fff;padding:1.5rem;box-shadow:2px 0 12px #00000026;animation:slideIn .25s ease-out}.close-btn{position:absolute;top:12px;right:12px;background:none;border:none;font-size:20px;cursor:pointer;opacity:.6;transition:opacity .2s ease,transform .1s ease}.close-btn:hover{opacity:1;transform:scale(1.05)}.close-btn:focus-visible{outline:2px solid #999;border-radius:4px}.actions{display:flex;flex-direction:column;gap:16px;margin-top:32px}.actions button{display:flex;align-items:center;gap:10px;padding:12px 14px;border:none;border-radius:12px;background:linear-gradient(135deg,#4f46e5,#6842c0);color:#fff;font-size:14px;font-weight:600;cursor:pointer;position:relative;overflow:visible;transition:transform .15s ease,box-shadow .15s ease;z-index:1}.actions button:hover{transform:translateY(-2px);box-shadow:0 8px 20px #4b00ff4d}.actions button:active{transform:scale(.97)}.actions .danger{background:linear-gradient(135deg,#f43f5e,#ec4899)}.actions .primary{background:linear-gradient(135deg,#031bf5,#3b09b1)}.star{width:8px;height:8px;background:radial-gradient(circle,#fbbf24 0%,#f59e0b 50%,transparent 70%);border-radius:50%;pointer-events:none;animation:starMove 1.5s ease-out forwards;box-shadow:0 0 8px #fbbf24,0 0 12px #f59e0bcc;z-index:9999}@keyframes starMove{0%{transform:translate(0) scale(1);opacity:1}to{transform:translate(var(--x),var(--y)) scale(0);opacity:0}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
54
+ }
55
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SideActionPanelComponent, decorators: [{
56
+ type: Component,
57
+ args: [{ selector: 'pantheon-side-action-panel', template: "<div class=\"overlay\" *ngIf=\"open\" (click)=\"close.emit()\">\n <aside class=\"panel\" (click)=\"$event.stopPropagation()\">\n\n <button\n class=\"close-btn\"\n aria-label=\"Cerrar\"\n (click)=\"close.emit()\">\n \u2715\n </button>\n\n <div class=\"actions\">\n <button *ngFor=\"let action of actions\"\n (click)=\"handleAction($event, action)\"\n [ngClass]=\"action.type || 'default'\">\n <span *ngIf=\"action.icon\">{{ action.icon }}</span>\n {{ action.label }}\n </button>\n </div>\n\n </aside>\n</div>\n", styles: ["@keyframes slideIn{0%{transform:translate(-100%)}to{transform:translate(0)}}.overlay{position:fixed;inset:0;background:#0003;display:flex;justify-content:flex-start;align-items:stretch;z-index:1000}.panel{position:relative;width:320px;height:100%;background:#fff;padding:1.5rem;box-shadow:2px 0 12px #00000026;animation:slideIn .25s ease-out}.close-btn{position:absolute;top:12px;right:12px;background:none;border:none;font-size:20px;cursor:pointer;opacity:.6;transition:opacity .2s ease,transform .1s ease}.close-btn:hover{opacity:1;transform:scale(1.05)}.close-btn:focus-visible{outline:2px solid #999;border-radius:4px}.actions{display:flex;flex-direction:column;gap:16px;margin-top:32px}.actions button{display:flex;align-items:center;gap:10px;padding:12px 14px;border:none;border-radius:12px;background:linear-gradient(135deg,#4f46e5,#6842c0);color:#fff;font-size:14px;font-weight:600;cursor:pointer;position:relative;overflow:visible;transition:transform .15s ease,box-shadow .15s ease;z-index:1}.actions button:hover{transform:translateY(-2px);box-shadow:0 8px 20px #4b00ff4d}.actions button:active{transform:scale(.97)}.actions .danger{background:linear-gradient(135deg,#f43f5e,#ec4899)}.actions .primary{background:linear-gradient(135deg,#031bf5,#3b09b1)}.star{width:8px;height:8px;background:radial-gradient(circle,#fbbf24 0%,#f59e0b 50%,transparent 70%);border-radius:50%;pointer-events:none;animation:starMove 1.5s ease-out forwards;box-shadow:0 0 8px #fbbf24,0 0 12px #f59e0bcc;z-index:9999}@keyframes starMove{0%{transform:translate(0) scale(1);opacity:1}to{transform:translate(var(--x),var(--y)) scale(0);opacity:0}}\n"] }]
58
+ }], propDecorators: { open: [{
59
+ type: Input
60
+ }], actions: [{
61
+ type: Input
62
+ }], close: [{
63
+ type: Output
64
+ }] } });
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZS1hY3Rpb24tcGFuZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGFudGhlb24tdWkvc3JjL2xpYi9wYW50aGVvbi13aW5kb3dzL1NpZGVBY3Rpb25QYW5lbC9zaWRlLWFjdGlvbi1wYW5lbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYW50aGVvbi11aS9zcmMvbGliL3BhbnRoZW9uLXdpbmRvd3MvU2lkZUFjdGlvblBhbmVsL3NpZGUtYWN0aW9uLXBhbmVsLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBUXZFLE1BQU0sT0FBTyx3QkFBd0I7SUFMckM7UUFNVyxTQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ2IsWUFBTyxHQUFhLEVBQUUsQ0FBQztRQUN0QixVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztLQW9ENUM7SUFsREMsV0FBVyxDQUFDLEtBQWlCO1FBQzNCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxhQUE0QixDQUFDO1FBQ2xELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzVDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDMUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUUxQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzFCLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1lBQzlCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUM7WUFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQztZQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztZQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxrREFBa0QsQ0FBQztZQUMzRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRywrQkFBK0IsQ0FBQztZQUN2RCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7WUFDbEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDO1lBRTVCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO1lBRXpDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRWhDLDBEQUEwRDtZQUMxRCxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7WUFDaEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBRXRCLE1BQU0sT0FBTyxHQUFHLEdBQUcsRUFBRTtnQkFDbkIsT0FBTyxJQUFJLEVBQUUsQ0FBQztnQkFDZCxNQUFNLFFBQVEsR0FBRyxPQUFPLEdBQUcsUUFBUSxDQUFDO2dCQUVwQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxhQUFhLE9BQU8sR0FBRyxRQUFRLE9BQU8sT0FBTyxHQUFHLFFBQVEsYUFBYSxDQUFDLEdBQUcsUUFBUSxHQUFHLENBQUM7Z0JBQzVHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDO2dCQUV2QyxJQUFJLE9BQU8sR0FBRyxRQUFRLEVBQUU7b0JBQ3RCLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUNoQztxQkFBTTtvQkFDTCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7aUJBQ2Y7WUFDSCxDQUFDLENBQUM7WUFFRixPQUFPLEVBQUUsQ0FBQztTQUNYO0lBQ0gsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFpQixFQUFFLE1BQWM7UUFDNUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDcEIsQ0FBQzsrR0F0RFUsd0JBQXdCO21HQUF4Qix3QkFBd0IsNklDUnJDLG1sQkFxQkE7OzRGRGJhLHdCQUF3QjtrQkFMcEMsU0FBUzsrQkFDRSw0QkFBNEI7OEJBSzdCLElBQUk7c0JBQVosS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0ksS0FBSztzQkFBZCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gJy4vaW50ZXJmYWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncGFudGhlb24tc2lkZS1hY3Rpb24tcGFuZWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2lkZS1hY3Rpb24tcGFuZWwuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NpZGUtYWN0aW9uLXBhbmVsLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgU2lkZUFjdGlvblBhbmVsQ29tcG9uZW50IHtcbiAgQElucHV0KCkgb3BlbiA9IGZhbHNlO1xuICBASW5wdXQoKSBhY3Rpb25zOiBBY3Rpb25bXSA9IFtdO1xuICBAT3V0cHV0KCkgY2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgY3JlYXRlU3RhcnMoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBjb25zdCBidXR0b24gPSBldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IHJlY3QgPSBidXR0b24uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3Qgc3RhcnRYID0gcmVjdC5sZWZ0ICsgcmVjdC53aWR0aCAvIDI7XG4gICAgY29uc3Qgc3RhcnRZID0gcmVjdC50b3AgKyByZWN0LmhlaWdodCAvIDI7XG4gICAgICAgIFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNjsgaSsrKSB7XG4gICAgICBjb25zdCBzdGFyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBzdGFyLnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJztcbiAgICAgIHN0YXIuc3R5bGUubGVmdCA9IGAke3N0YXJ0WH1weGA7XG4gICAgICBzdGFyLnN0eWxlLnRvcCA9IGAke3N0YXJ0WX1weGA7XG4gICAgICBzdGFyLnN0eWxlLndpZHRoID0gJzhweCc7XG4gICAgICBzdGFyLnN0eWxlLmhlaWdodCA9ICc4cHgnO1xuICAgICAgc3Rhci5zdHlsZS5ib3JkZXJSYWRpdXMgPSAnNTAlJztcbiAgICAgIHN0YXIuc3R5bGUuYmFja2dyb3VuZCA9ICdyYWRpYWwtZ3JhZGllbnQoY2lyY2xlLCAjZmJiZjI0IDAlLCAjZjU5ZTBiIDUwJSknO1xuICAgICAgc3Rhci5zdHlsZS5ib3hTaGFkb3cgPSAnMCAwIDhweCByZ2JhKDI1MSwgMTkxLCAzNiwgMSknO1xuICAgICAgc3Rhci5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xuICAgICAgc3Rhci5zdHlsZS56SW5kZXggPSAnMTAwMDAnO1xuICAgICAgXG4gICAgICBjb25zdCBvZmZzZXRYID0gTWF0aC5yYW5kb20oKSAqIDEwMCAtIDUwO1xuICAgICAgY29uc3Qgb2Zmc2V0WSA9IE1hdGgucmFuZG9tKCkgKiAxMDAgLSA1MDtcbiAgICAgIFxuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzdGFyKTtcbiAgICAgIFxuICAgICAgLy8gQW5pbWFyIGNvbiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgcGFyYSBtZWpvciB2aXNpYmlsaWRhZFxuICAgICAgbGV0IGVsYXBzZWQgPSAwO1xuICAgICAgY29uc3QgZHVyYXRpb24gPSAxNTAwO1xuICAgICAgXG4gICAgICBjb25zdCBhbmltYXRlID0gKCkgPT4ge1xuICAgICAgICBlbGFwc2VkICs9IDE2O1xuICAgICAgICBjb25zdCBwcm9ncmVzcyA9IGVsYXBzZWQgLyBkdXJhdGlvbjtcbiAgICAgICAgXG4gICAgICAgIHN0YXIuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZSgke29mZnNldFggKiBwcm9ncmVzc31weCwgJHtvZmZzZXRZICogcHJvZ3Jlc3N9cHgpIHNjYWxlKCR7MSAtIHByb2dyZXNzfSlgO1xuICAgICAgICBzdGFyLnN0eWxlLm9wYWNpdHkgPSBgJHsxIC0gcHJvZ3Jlc3N9YDtcbiAgICAgICAgXG4gICAgICAgIGlmIChlbGFwc2VkIDwgZHVyYXRpb24pIHtcbiAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYW5pbWF0ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3Rhci5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIFxuICAgICAgYW5pbWF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUFjdGlvbihldmVudDogTW91c2VFdmVudCwgYWN0aW9uOiBBY3Rpb24pIHtcbiAgICB0aGlzLmNyZWF0ZVN0YXJzKGV2ZW50KTtcbiAgICBhY3Rpb24uY2FsbGJhY2soKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm92ZXJsYXlcIiAqbmdJZj1cIm9wZW5cIiAoY2xpY2spPVwiY2xvc2UuZW1pdCgpXCI+XG4gIDxhc2lkZSBjbGFzcz1cInBhbmVsXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuXG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJjbG9zZS1idG5cIlxuICAgICAgYXJpYS1sYWJlbD1cIkNlcnJhclwiXG4gICAgICAoY2xpY2spPVwiY2xvc2UuZW1pdCgpXCI+XG4gICAgICDinJVcbiAgICA8L2J1dHRvbj5cblxuICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zXCI+XG4gICAgICA8YnV0dG9uICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgYWN0aW9uc1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBY3Rpb24oJGV2ZW50LCBhY3Rpb24pXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiYWN0aW9uLnR5cGUgfHwgJ2RlZmF1bHQnXCI+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiYWN0aW9uLmljb25cIj57eyBhY3Rpb24uaWNvbiB9fTwvc3Bhbj5cbiAgICAgICAge3sgYWN0aW9uLmxhYmVsIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICA8L2FzaWRlPlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,28 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { SideActionPanelComponent } from './side-action-panel.component';
4
+ import { MatIconModule } from '@angular/material/icon';
5
+ import * as i0 from "@angular/core";
6
+ export class SideActionPanelModule {
7
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SideActionPanelModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
8
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: SideActionPanelModule, declarations: [SideActionPanelComponent], imports: [CommonModule,
9
+ MatIconModule], exports: [SideActionPanelComponent] }); }
10
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SideActionPanelModule, imports: [CommonModule,
11
+ MatIconModule] }); }
12
+ }
13
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SideActionPanelModule, decorators: [{
14
+ type: NgModule,
15
+ args: [{
16
+ declarations: [
17
+ SideActionPanelComponent,
18
+ ],
19
+ imports: [
20
+ CommonModule,
21
+ MatIconModule
22
+ ],
23
+ exports: [
24
+ SideActionPanelComponent,
25
+ ]
26
+ }]
27
+ }] });
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZS1hY3Rpb24tcGFuZWwubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGFudGhlb24tdWkvc3JjL2xpYi9wYW50aGVvbi13aW5kb3dzL1NpZGVBY3Rpb25QYW5lbC9zaWRlLWFjdGlvbi1wYW5lbC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQWN2RCxNQUFNLE9BQU8scUJBQXFCOytHQUFyQixxQkFBcUI7Z0hBQXJCLHFCQUFxQixpQkFWOUIsd0JBQXdCLGFBR3hCLFlBQVk7WUFDWixhQUFhLGFBR2Isd0JBQXdCO2dIQUdmLHFCQUFxQixZQVA5QixZQUFZO1lBQ1osYUFBYTs7NEZBTUoscUJBQXFCO2tCQVpqQyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRTt3QkFDWix3QkFBd0I7cUJBQ3pCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLGFBQWE7cUJBQ2Q7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLHdCQUF3QjtxQkFDekI7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuICBpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuICBpbXBvcnQgeyBTaWRlQWN0aW9uUGFuZWxDb21wb25lbnQgfSBmcm9tICcuL3NpZGUtYWN0aW9uLXBhbmVsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIFNpZGVBY3Rpb25QYW5lbENvbXBvbmVudCxcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlXG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBTaWRlQWN0aW9uUGFuZWxDb21wb25lbnQsXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgU2lkZUFjdGlvblBhbmVsTW9kdWxlIHsgfVxuIl19
@@ -0,0 +1,9 @@
1
+ export const MODAL_SIZES = ['sm', 'md', 'lg', 'fullscreen'];
2
+ export const MODAL_VARIANTS = ['default', 'info', 'warning', 'error'];
3
+ export const ICONS = {
4
+ default: 'info',
5
+ info: 'info',
6
+ warning: 'warning',
7
+ error: 'error_outline'
8
+ };
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGFudGhlb24tdWkvc3JjL2xpYi9wYW50aGVvbi13aW5kb3dzL3dpbmRvdy9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDNUQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFHdEUsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFpQztJQUNqRCxPQUFPLEVBQUUsTUFBTTtJQUNmLElBQUksRUFBRSxNQUFNO0lBQ1osT0FBTyxFQUFFLFNBQVM7SUFDbEIsS0FBSyxFQUFFLGVBQWU7Q0FDdkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIE1vZGFsU2l6ZSA9IHR5cGVvZiBNT0RBTF9TSVpFU1tudW1iZXJdO1xuZXhwb3J0IHR5cGUgTW9kYWxWYXJpYW50ID0gdHlwZW9mIE1PREFMX1ZBUklBTlRTW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBNT0RBTF9TSVpFUyA9IFsnc20nLCAnbWQnLCAnbGcnLCAnZnVsbHNjcmVlbiddO1xuZXhwb3J0IGNvbnN0IE1PREFMX1ZBUklBTlRTID0gWydkZWZhdWx0JywgJ2luZm8nLCAnd2FybmluZycsICdlcnJvciddO1xuXG5cbmV4cG9ydCBjb25zdCBJQ09OUzogUmVjb3JkPE1vZGFsVmFyaWFudCwgc3RyaW5nPiA9IHtcbiAgZGVmYXVsdDogJ2luZm8nLFxuICBpbmZvOiAnaW5mbycsXG4gIHdhcm5pbmc6ICd3YXJuaW5nJyxcbiAgZXJyb3I6ICdlcnJvcl9vdXRsaW5lJ1xufTtcbiJdfQ==
@@ -0,0 +1,44 @@
1
+ import { Component, Input, Output, EventEmitter } from '@angular/core';
2
+ import { ICONS } from './constants';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ import * as i2 from "@angular/material/icon";
6
+ export class WindowComponent {
7
+ constructor() {
8
+ this.size = 'md';
9
+ this.variant = 'default';
10
+ this.show = false;
11
+ this.titleBtnClose = 'Volver';
12
+ this.titleBtnNext = '';
13
+ this.onAction = () => { };
14
+ this.showChange = new EventEmitter();
15
+ }
16
+ get icon() {
17
+ return ICONS[this.variant];
18
+ }
19
+ close() {
20
+ this.show = false;
21
+ this.showChange.emit(this.show);
22
+ }
23
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WindowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
24
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: WindowComponent, selector: "pantehon-window", inputs: { size: "size", variant: "variant", show: "show", titleBtnClose: "titleBtnClose", titleBtnNext: "titleBtnNext", onAction: "onAction" }, outputs: { showChange: "showChange" }, ngImport: i0, template: "<div class=\"modal-backdrop\" *ngIf=\"show\" (click)=\"close()\"></div>\n\n<div *ngIf=\"show\" class=\"container-window\" [ngClass]=\"['size-' + size, 'variant-' + variant]\">\n <div class=\"window-header\">\n <mat-icon class=\"window-icon\">{{ icon }}</mat-icon><ng-content select=\"[title]\"></ng-content>\n </div>\n <div class=\"window-body\"><ng-content select=\"[body]\"></ng-content>\n </div>\n <div class=\"window-footer\">\n <button mat-button class=\"btn-close\" (click)=\"close()\">{{ titleBtnClose }}</button>\n <button *ngIf=\"titleBtnNext && titleBtnNext.trim() !== ''\" mat-button class=\"btn-next\" (click)=\"onAction()\">\n {{ titleBtnNext }}\n </button>\n </div>\n</div>", styles: [".container-window{display:flex;flex-direction:column;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);z-index:1000;border-radius:8px;box-shadow:0 10px 4px #0625d11a;background:#e4e1e1;overflow:hidden;min-width:50vw;min-height:50vh;max-width:90vw;max-height:90vh}.container-window .window-body{overflow:auto;padding-top:8px;width:100%;display:flex;flex-grow:1;justify-content:center}.container-window.size-sm{width:300px}.container-window.size-md{width:600px}.container-window.size-lg{width:900px}.container-window.size-fullscreen{width:100%;height:100%}.container-window.variant-default{background:#e4e1e1}.container-window.variant-info{background:#d0ebff}.container-window.variant-warning{background:#fff4e5}.container-window.variant-error{background:#ffe5e5}.modal-backdrop{position:fixed;top:0;left:0;width:100%;height:100%;background:#00000080;z-index:900}.window-header{display:flex;align-items:center;justify-content:center;padding:10px;background:#0000001a;border-bottom:1px solid rgba(0,0,0,.1)}.window-header .window-icon{margin-top:8px;font-size:16px}.window-header .window-title{flex-grow:1;font-weight:700;font-size:16px}.window-footer{display:flex;justify-content:center;padding:10px;background:#0000001a;border-top:1px solid rgba(0,0,0,.1)}.btn-next{margin-left:8px}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
25
+ }
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WindowComponent, decorators: [{
27
+ type: Component,
28
+ args: [{ selector: 'pantehon-window', template: "<div class=\"modal-backdrop\" *ngIf=\"show\" (click)=\"close()\"></div>\n\n<div *ngIf=\"show\" class=\"container-window\" [ngClass]=\"['size-' + size, 'variant-' + variant]\">\n <div class=\"window-header\">\n <mat-icon class=\"window-icon\">{{ icon }}</mat-icon><ng-content select=\"[title]\"></ng-content>\n </div>\n <div class=\"window-body\"><ng-content select=\"[body]\"></ng-content>\n </div>\n <div class=\"window-footer\">\n <button mat-button class=\"btn-close\" (click)=\"close()\">{{ titleBtnClose }}</button>\n <button *ngIf=\"titleBtnNext && titleBtnNext.trim() !== ''\" mat-button class=\"btn-next\" (click)=\"onAction()\">\n {{ titleBtnNext }}\n </button>\n </div>\n</div>", styles: [".container-window{display:flex;flex-direction:column;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);z-index:1000;border-radius:8px;box-shadow:0 10px 4px #0625d11a;background:#e4e1e1;overflow:hidden;min-width:50vw;min-height:50vh;max-width:90vw;max-height:90vh}.container-window .window-body{overflow:auto;padding-top:8px;width:100%;display:flex;flex-grow:1;justify-content:center}.container-window.size-sm{width:300px}.container-window.size-md{width:600px}.container-window.size-lg{width:900px}.container-window.size-fullscreen{width:100%;height:100%}.container-window.variant-default{background:#e4e1e1}.container-window.variant-info{background:#d0ebff}.container-window.variant-warning{background:#fff4e5}.container-window.variant-error{background:#ffe5e5}.modal-backdrop{position:fixed;top:0;left:0;width:100%;height:100%;background:#00000080;z-index:900}.window-header{display:flex;align-items:center;justify-content:center;padding:10px;background:#0000001a;border-bottom:1px solid rgba(0,0,0,.1)}.window-header .window-icon{margin-top:8px;font-size:16px}.window-header .window-title{flex-grow:1;font-weight:700;font-size:16px}.window-footer{display:flex;justify-content:center;padding:10px;background:#0000001a;border-top:1px solid rgba(0,0,0,.1)}.btn-next{margin-left:8px}\n"] }]
29
+ }], propDecorators: { size: [{
30
+ type: Input
31
+ }], variant: [{
32
+ type: Input
33
+ }], show: [{
34
+ type: Input
35
+ }], titleBtnClose: [{
36
+ type: Input
37
+ }], titleBtnNext: [{
38
+ type: Input
39
+ }], onAction: [{
40
+ type: Input
41
+ }], showChange: [{
42
+ type: Output
43
+ }] } });
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2luZG93LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BhbnRoZW9uLXVpL3NyYy9saWIvcGFudGhlb24td2luZG93cy93aW5kb3cvd2luZG93LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BhbnRoZW9uLXVpL3NyYy9saWIvcGFudGhlb24td2luZG93cy93aW5kb3cvd2luZG93LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUEyQixLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7Ozs7QUFPN0QsTUFBTSxPQUFPLGVBQWU7SUFMNUI7UUFNVyxTQUFJLEdBQWMsSUFBSSxDQUFDO1FBQ3ZCLFlBQU8sR0FBaUIsU0FBUyxDQUFDO1FBQ2xDLFNBQUksR0FBWSxLQUFLLENBQUM7UUFDdEIsa0JBQWEsR0FBVyxRQUFRLENBQUM7UUFDakMsaUJBQVksR0FBVyxFQUFFLENBQUM7UUFFMUIsYUFBUSxHQUFlLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUMvQixlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztLQVVwRDtJQVJDLElBQUksSUFBSTtRQUNOLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQyxDQUFDOytHQWpCVSxlQUFlO21HQUFmLGVBQWUsOE9DUjVCLHdzQkFjTTs7NEZETk8sZUFBZTtrQkFMM0IsU0FBUzsrQkFDRSxpQkFBaUI7OEJBS2xCLElBQUk7c0JBQVosS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNJLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTW9kYWxTaXplLCBNb2RhbFZhcmlhbnQsIElDT05TIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwYW50ZWhvbi13aW5kb3cnLFxuICB0ZW1wbGF0ZVVybDogJy4vd2luZG93LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vd2luZG93LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgV2luZG93Q29tcG9uZW50IHtcbiAgQElucHV0KCkgc2l6ZTogTW9kYWxTaXplID0gJ21kJztcbiAgQElucHV0KCkgdmFyaWFudDogTW9kYWxWYXJpYW50ID0gJ2RlZmF1bHQnO1xuICBASW5wdXQoKSBzaG93OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHRpdGxlQnRuQ2xvc2U6IHN0cmluZyA9ICdWb2x2ZXInO1xuICBASW5wdXQoKSB0aXRsZUJ0bk5leHQ6IHN0cmluZyA9ICcnO1xuXG4gIEBJbnB1dCgpIG9uQWN0aW9uOiAoKSA9PiB2b2lkID0gKCkgPT4ge307XG4gIEBPdXRwdXQoKSBzaG93Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIGdldCBpY29uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIElDT05TW3RoaXMudmFyaWFudF07XG4gIH1cblxuICBjbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNob3cgPSBmYWxzZTtcbiAgICB0aGlzLnNob3dDaGFuZ2UuZW1pdCh0aGlzLnNob3cpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibW9kYWwtYmFja2Ryb3BcIiAqbmdJZj1cInNob3dcIiAoY2xpY2spPVwiY2xvc2UoKVwiPjwvZGl2PlxuXG48ZGl2ICpuZ0lmPVwic2hvd1wiIGNsYXNzPVwiY29udGFpbmVyLXdpbmRvd1wiIFtuZ0NsYXNzXT1cIlsnc2l6ZS0nICsgc2l6ZSwgJ3ZhcmlhbnQtJyArIHZhcmlhbnRdXCI+XG4gIDxkaXYgY2xhc3M9XCJ3aW5kb3ctaGVhZGVyXCI+XG4gICAgPG1hdC1pY29uIGNsYXNzPVwid2luZG93LWljb25cIj57eyBpY29uIH19PC9tYXQtaWNvbj48bmctY29udGVudCBzZWxlY3Q9XCJbdGl0bGVdXCI+PC9uZy1jb250ZW50PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIndpbmRvdy1ib2R5XCI+PG5nLWNvbnRlbnQgc2VsZWN0PVwiW2JvZHldXCI+PC9uZy1jb250ZW50PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIndpbmRvdy1mb290ZXJcIj5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9XCJidG4tY2xvc2VcIiAoY2xpY2spPVwiY2xvc2UoKVwiPnt7IHRpdGxlQnRuQ2xvc2UgfX08L2J1dHRvbj5cbiAgICA8YnV0dG9uICpuZ0lmPVwidGl0bGVCdG5OZXh0ICYmIHRpdGxlQnRuTmV4dC50cmltKCkgIT09ICcnXCIgbWF0LWJ1dHRvbiBjbGFzcz1cImJ0bi1uZXh0XCIgKGNsaWNrKT1cIm9uQWN0aW9uKClcIj5cbiAgICAgIHt7IHRpdGxlQnRuTmV4dCB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PiJdfQ==
@@ -0,0 +1,28 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { WindowComponent } from './window.component';
4
+ import { MatIconModule } from '@angular/material/icon';
5
+ import * as i0 from "@angular/core";
6
+ export class WindowModule {
7
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WindowModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
8
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: WindowModule, declarations: [WindowComponent], imports: [CommonModule,
9
+ MatIconModule], exports: [WindowComponent] }); }
10
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WindowModule, imports: [CommonModule,
11
+ MatIconModule] }); }
12
+ }
13
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WindowModule, decorators: [{
14
+ type: NgModule,
15
+ args: [{
16
+ declarations: [
17
+ WindowComponent,
18
+ ],
19
+ imports: [
20
+ CommonModule,
21
+ MatIconModule
22
+ ],
23
+ exports: [
24
+ WindowComponent,
25
+ ]
26
+ }]
27
+ }] });
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2luZG93Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BhbnRoZW9uLXVpL3NyYy9saWIvcGFudGhlb24td2luZG93cy93aW5kb3cvd2luZG93Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQWN2RCxNQUFNLE9BQU8sWUFBWTsrR0FBWixZQUFZO2dIQUFaLFlBQVksaUJBVnJCLGVBQWUsYUFHZixZQUFZO1lBQ1osYUFBYSxhQUdiLGVBQWU7Z0hBR04sWUFBWSxZQVByQixZQUFZO1lBQ1osYUFBYTs7NEZBTUosWUFBWTtrQkFaeEIsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUU7d0JBQ1osZUFBZTtxQkFDaEI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osYUFBYTtxQkFDZDtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsZUFBZTtxQkFDaEI7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFdpbmRvd0NvbXBvbmVudCB9IGZyb20gJy4vd2luZG93LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIFdpbmRvd0NvbXBvbmVudCxcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlXG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBXaW5kb3dDb21wb25lbnQsXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgV2luZG93TW9kdWxlIHsgfVxuIl19
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFudGhlb24tdWkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9wYW50aGVvbi11aS9zcmMvcGFudGhlb24tdWkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==