@apexara/ng-components 1.0.6-test.7 → 1.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/README.md +35 -0
  2. package/fesm2022/apexara-ng-components-button.mjs +15 -3
  3. package/fesm2022/apexara-ng-components-button.mjs.map +1 -1
  4. package/fesm2022/apexara-ng-components-chip.mjs +1 -1
  5. package/fesm2022/apexara-ng-components-chip.mjs.map +1 -1
  6. package/fesm2022/apexara-ng-components-datepicker.mjs +1 -1
  7. package/fesm2022/apexara-ng-components-datepicker.mjs.map +1 -1
  8. package/fesm2022/apexara-ng-components-dialog.mjs +26 -3
  9. package/fesm2022/apexara-ng-components-dialog.mjs.map +1 -1
  10. package/fesm2022/apexara-ng-components-drawer.mjs +26 -7
  11. package/fesm2022/apexara-ng-components-drawer.mjs.map +1 -1
  12. package/fesm2022/apexara-ng-components-expander.mjs +5 -2
  13. package/fesm2022/apexara-ng-components-expander.mjs.map +1 -1
  14. package/fesm2022/apexara-ng-components-filter-pill.mjs +58 -0
  15. package/fesm2022/apexara-ng-components-filter-pill.mjs.map +1 -0
  16. package/fesm2022/apexara-ng-components-image.mjs +15 -5
  17. package/fesm2022/apexara-ng-components-image.mjs.map +1 -1
  18. package/fesm2022/apexara-ng-components-input.mjs +30 -7
  19. package/fesm2022/apexara-ng-components-input.mjs.map +1 -1
  20. package/fesm2022/apexara-ng-components-more-options.mjs +1 -1
  21. package/fesm2022/apexara-ng-components-more-options.mjs.map +1 -1
  22. package/fesm2022/apexara-ng-components-select.mjs +258 -9
  23. package/fesm2022/apexara-ng-components-select.mjs.map +1 -1
  24. package/fesm2022/apexara-ng-components-services.mjs +6 -0
  25. package/fesm2022/apexara-ng-components-services.mjs.map +1 -1
  26. package/fesm2022/apexara-ng-components-snackbar.mjs +2 -2
  27. package/fesm2022/apexara-ng-components-snackbar.mjs.map +1 -1
  28. package/fesm2022/apexara-ng-components-table.mjs +157 -3
  29. package/fesm2022/apexara-ng-components-table.mjs.map +1 -1
  30. package/fesm2022/apexara-ng-components-textarea.mjs +10 -2
  31. package/fesm2022/apexara-ng-components-textarea.mjs.map +1 -1
  32. package/package.json +5 -1
  33. package/types/apexara-ng-components-button.d.ts +3 -2
  34. package/types/apexara-ng-components-dialog.d.ts +6 -1
  35. package/types/apexara-ng-components-drawer.d.ts +10 -2
  36. package/types/apexara-ng-components-expander.d.ts +2 -0
  37. package/types/apexara-ng-components-filter-pill.d.ts +30 -0
  38. package/types/apexara-ng-components-image.d.ts +2 -1
  39. package/types/apexara-ng-components-input.d.ts +14 -2
  40. package/types/apexara-ng-components-select.d.ts +31 -1
  41. package/types/apexara-ng-components-services.d.ts +1 -0
  42. package/types/apexara-ng-components-table.d.ts +36 -3
  43. package/types/apexara-ng-components-textarea.d.ts +5 -0
@@ -27,14 +27,14 @@ class ApexSnackbarComponent {
27
27
  this.container.nativeElement.style.height = this.container.nativeElement.scrollHeight + 'px';
28
28
  }
29
29
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: ApexSnackbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
30
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.2", type: ApexSnackbarComponent, isStandalone: true, selector: "apex-snackbar", inputs: { message: "message", options: "options", positionOptions: "positionOptions" }, outputs: { closed: "closed" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], ngImport: i0, template: "<div\n #container\n class=\"custom-snackbar\"\n [class.error]=\"options.error\"\n [class.closing]=\"closing()\"\n [style.--apex-snackbar-animation-duration]=\"options.animationDuration + 's'\"\n [style.--closing-duration]=\"(options.animationDuration / 3) + 's'\">\n\n <div class=\"placeholder-wrapper\">\n @if (options.icon) {\n <apex-img [src]=\"'assets/img/' + options.icon\" [alt]=\"'Snackbar prefix icon'\"></apex-img>\n }\n\n <div class=\"placeholder\">{{ options.title ?? (options.error ? 'Error' : 'Success') }}</div>\n\n <div class=\"x-icon\" (click)=\"closed.emit()\"></div>\n </div>\n\n <div class=\"message-wrapper\" [ngClass]=\"{ 'no-padding' : !options.icon }\">\n <div class=\"message\">{{ message }}</div>\n </div>\n\n @if (options.shouldClose) {\n <div class=\"progress\" [style.animation-duration]=\"(options.duration + 2 * options.animationDuration) + 's'\"></div>\n }\n</div>\n", styles: [":host{--apex-snackbar-animation-duration: 10s;--apex-snackbar-background-color: #14BD6C;--apex-snackbar-placeholder-text-color: #FFFFFF;--apex-snackbar-message-text-color: #FFFFFF;--apex-snackbar-error-background-color: #F96138;--apex-snackbar-progress-color: #FFFFFF;--apex-snackbar-x-icon-color: #FFFFFF;pointer-events:all;touch-action:manipulation}.placeholder-wrapper{height:24px;display:flex;align-items:center;align-self:stretch;gap:4px}.custom-snackbar{width:360px;height:fit-content;display:flex;position:relative;flex-direction:column;justify-content:center;align-items:flex-start;border-radius:4px;overflow:hidden;box-sizing:border-box;opacity:0;background:var(--apex-snackbar-background-color);padding:12px 16px 16px;margin-bottom:6px}.custom-snackbar.closing{transition:opacity var(--closing-duration, .33s) ease-in,transform var(--closing-duration, .33s) ease-in,height var(--closing-duration, .33s) ease-in var(--closing-duration, .33s),margin var(--closing-duration, .33s) ease-in var(--closing-duration, .33s),padding var(--closing-duration, .33s) ease-in var(--closing-duration, .33s);opacity:0;transform:translate(50px);height:0px;margin:0;padding:0}apex-img{width:20px;height:20px}.placeholder{flex:1 0 0;color:var(--apex-snackbar-placeholder-text-color);font-size:18px;font-style:normal;font-weight:600;line-height:22px}.message-wrapper{display:flex;align-items:flex-start;align-self:stretch;gap:10px;padding-left:24px}.message-wrapper.no-padding{padding:0}.message{flex:1 0 0;color:var(--apex-snackbar-message-text-color);font-size:16px;font-style:normal;font-weight:400;line-height:20px}.error{background-color:var(--apex-snackbar-error-background-color)}.vertical-1{top:.5em}.vertical-0{bottom:.5em}.horizontal-0{animation:LeftPopUp var(--apex-snackbar-enter-duration, .3s) ease-in-out forwards}.horizontal-1{animation:CenterPopUp var(--apex-snackbar-enter-duration, .3s) ease-in-out forwards}.horizontal-2{animation:RightPopUp var(--apex-snackbar-enter-duration, .3s) ease-in-out forwards}.progress{max-width:392px;height:4px;position:absolute;bottom:0;opacity:.5;background:var(--apex-snackbar-progress-color);transform:translate(-16px);animation:shrinkProgress var(--apex-snackbar-animation-duration) ease-in-out}.x-icon{width:20px;cursor:pointer;transition:transform .3s ease;opacity:.7;padding-top:8px}.x-icon:after{font-size:36px;color:var(--apex-snackbar-x-icon-color);content:\"\\d7\"}.x-icon:hover{animation:rotate .3s linear}@media(max-width:460px){.custom-snackbar{width:300px}}@keyframes rotate{0%{transform:rotate(0)}25%{transform:rotate(-10deg)}75%{transform:rotate(10deg)}to{transform:rotate(0)}}@keyframes shrinkProgress{0%{width:100%}to{width:0%}}@keyframes LeftPopUp{0%{left:-2em;opacity:0}to{left:.5em;opacity:1}}@keyframes CenterPopUp{0%{opacity:0}to{opacity:1}}@keyframes RightPopUp{0%{right:-2em;opacity:0}to{right:.5em;opacity:1}}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ApexImageComponent, selector: "apex-img", inputs: ["src", "alt"] }] }); }
30
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.2", type: ApexSnackbarComponent, isStandalone: true, selector: "apex-snackbar", inputs: { message: "message", options: "options", positionOptions: "positionOptions" }, outputs: { closed: "closed" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], ngImport: i0, template: "<!-- role=alert (errors) is announced immediately; role=status (success/info)\n politely. The progress bar + icon are decorative. -->\n<div\n #container\n class=\"custom-snackbar\"\n [attr.role]=\"options.error ? 'alert' : 'status'\"\n [attr.aria-live]=\"options.error ? 'assertive' : 'polite'\"\n [class.error]=\"options.error\"\n [class.closing]=\"closing()\"\n [style.--apex-snackbar-animation-duration]=\"options.animationDuration + 's'\"\n [style.--closing-duration]=\"(options.animationDuration / 3) + 's'\">\n\n <div class=\"placeholder-wrapper\">\n @if (options.icon) {\n <apex-img [src]=\"'assets/img/' + options.icon\" [alt]=\"''\"></apex-img>\n }\n\n <div class=\"placeholder\">{{ options.title ?? (options.error ? 'Error' : 'Success') }}</div>\n\n <div class=\"x-icon\" role=\"button\" tabindex=\"0\" aria-label=\"Dismiss notification\" (click)=\"closed.emit()\" (keydown.enter)=\"closed.emit()\" (keydown.space)=\"$event.preventDefault(); closed.emit()\"></div>\n </div>\n\n <div class=\"message-wrapper\" [ngClass]=\"{ 'no-padding' : !options.icon }\">\n <div class=\"message\">{{ message }}</div>\n </div>\n\n @if (options.shouldClose) {\n <div class=\"progress\" aria-hidden=\"true\" [style.animation-duration]=\"(options.duration + 2 * options.animationDuration) + 's'\"></div>\n }\n</div>\n", styles: [":host{--apex-snackbar-animation-duration: 10s;--apex-snackbar-background-color: #14BD6C;--apex-snackbar-placeholder-text-color: #FFFFFF;--apex-snackbar-message-text-color: #FFFFFF;--apex-snackbar-error-background-color: #F96138;--apex-snackbar-progress-color: #FFFFFF;--apex-snackbar-x-icon-color: #FFFFFF;pointer-events:all;touch-action:manipulation}.placeholder-wrapper{height:24px;display:flex;align-items:center;align-self:stretch;gap:4px}.custom-snackbar{width:360px;height:fit-content;display:flex;position:relative;flex-direction:column;justify-content:center;align-items:flex-start;border-radius:4px;overflow:hidden;box-sizing:border-box;opacity:0;background:var(--apex-snackbar-background-color);padding:12px 16px 16px;margin-bottom:6px}.custom-snackbar.closing{transition:opacity var(--closing-duration, .33s) ease-in,transform var(--closing-duration, .33s) ease-in,height var(--closing-duration, .33s) ease-in var(--closing-duration, .33s),margin var(--closing-duration, .33s) ease-in var(--closing-duration, .33s),padding var(--closing-duration, .33s) ease-in var(--closing-duration, .33s);opacity:0;transform:translate(50px);height:0px;margin:0;padding:0}apex-img{width:20px;height:20px}.placeholder{flex:1 0 0;color:var(--apex-snackbar-placeholder-text-color);font-size:18px;font-style:normal;font-weight:600;line-height:22px}.message-wrapper{display:flex;align-items:flex-start;align-self:stretch;gap:10px;padding-left:24px}.message-wrapper.no-padding{padding:0}.message{flex:1 0 0;color:var(--apex-snackbar-message-text-color);font-size:16px;font-style:normal;font-weight:400;line-height:20px}.error{background-color:var(--apex-snackbar-error-background-color)}.vertical-1{top:.5em}.vertical-0{bottom:.5em}.horizontal-0{animation:LeftPopUp var(--apex-snackbar-enter-duration, .3s) ease-in-out forwards}.horizontal-1{animation:CenterPopUp var(--apex-snackbar-enter-duration, .3s) ease-in-out forwards}.horizontal-2{animation:RightPopUp var(--apex-snackbar-enter-duration, .3s) ease-in-out forwards}.progress{max-width:392px;height:4px;position:absolute;bottom:0;opacity:.5;background:var(--apex-snackbar-progress-color);transform:translate(-16px);animation:shrinkProgress var(--apex-snackbar-animation-duration) ease-in-out}.x-icon{width:20px;cursor:pointer;transition:transform .3s ease;opacity:.7;padding-top:8px}.x-icon:after{font-size:36px;color:var(--apex-snackbar-x-icon-color);content:\"\\d7\"}.x-icon:hover{animation:rotate .3s linear}@media(max-width:460px){.custom-snackbar{width:300px}}@keyframes rotate{0%{transform:rotate(0)}25%{transform:rotate(-10deg)}75%{transform:rotate(10deg)}to{transform:rotate(0)}}@keyframes shrinkProgress{0%{width:100%}to{width:0%}}@keyframes LeftPopUp{0%{left:-2em;opacity:0}to{left:.5em;opacity:1}}@keyframes CenterPopUp{0%{opacity:0}to{opacity:1}}@keyframes RightPopUp{0%{right:-2em;opacity:0}to{right:.5em;opacity:1}}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ApexImageComponent, selector: "apex-img", inputs: ["src", "alt", "loading"] }] }); }
31
31
  }
32
32
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: ApexSnackbarComponent, decorators: [{
33
33
  type: Component,
34
34
  args: [{ selector: 'apex-snackbar', imports: [
35
35
  NgClass,
36
36
  ApexImageComponent,
37
- ], template: "<div\n #container\n class=\"custom-snackbar\"\n [class.error]=\"options.error\"\n [class.closing]=\"closing()\"\n [style.--apex-snackbar-animation-duration]=\"options.animationDuration + 's'\"\n [style.--closing-duration]=\"(options.animationDuration / 3) + 's'\">\n\n <div class=\"placeholder-wrapper\">\n @if (options.icon) {\n <apex-img [src]=\"'assets/img/' + options.icon\" [alt]=\"'Snackbar prefix icon'\"></apex-img>\n }\n\n <div class=\"placeholder\">{{ options.title ?? (options.error ? 'Error' : 'Success') }}</div>\n\n <div class=\"x-icon\" (click)=\"closed.emit()\"></div>\n </div>\n\n <div class=\"message-wrapper\" [ngClass]=\"{ 'no-padding' : !options.icon }\">\n <div class=\"message\">{{ message }}</div>\n </div>\n\n @if (options.shouldClose) {\n <div class=\"progress\" [style.animation-duration]=\"(options.duration + 2 * options.animationDuration) + 's'\"></div>\n }\n</div>\n", styles: [":host{--apex-snackbar-animation-duration: 10s;--apex-snackbar-background-color: #14BD6C;--apex-snackbar-placeholder-text-color: #FFFFFF;--apex-snackbar-message-text-color: #FFFFFF;--apex-snackbar-error-background-color: #F96138;--apex-snackbar-progress-color: #FFFFFF;--apex-snackbar-x-icon-color: #FFFFFF;pointer-events:all;touch-action:manipulation}.placeholder-wrapper{height:24px;display:flex;align-items:center;align-self:stretch;gap:4px}.custom-snackbar{width:360px;height:fit-content;display:flex;position:relative;flex-direction:column;justify-content:center;align-items:flex-start;border-radius:4px;overflow:hidden;box-sizing:border-box;opacity:0;background:var(--apex-snackbar-background-color);padding:12px 16px 16px;margin-bottom:6px}.custom-snackbar.closing{transition:opacity var(--closing-duration, .33s) ease-in,transform var(--closing-duration, .33s) ease-in,height var(--closing-duration, .33s) ease-in var(--closing-duration, .33s),margin var(--closing-duration, .33s) ease-in var(--closing-duration, .33s),padding var(--closing-duration, .33s) ease-in var(--closing-duration, .33s);opacity:0;transform:translate(50px);height:0px;margin:0;padding:0}apex-img{width:20px;height:20px}.placeholder{flex:1 0 0;color:var(--apex-snackbar-placeholder-text-color);font-size:18px;font-style:normal;font-weight:600;line-height:22px}.message-wrapper{display:flex;align-items:flex-start;align-self:stretch;gap:10px;padding-left:24px}.message-wrapper.no-padding{padding:0}.message{flex:1 0 0;color:var(--apex-snackbar-message-text-color);font-size:16px;font-style:normal;font-weight:400;line-height:20px}.error{background-color:var(--apex-snackbar-error-background-color)}.vertical-1{top:.5em}.vertical-0{bottom:.5em}.horizontal-0{animation:LeftPopUp var(--apex-snackbar-enter-duration, .3s) ease-in-out forwards}.horizontal-1{animation:CenterPopUp var(--apex-snackbar-enter-duration, .3s) ease-in-out forwards}.horizontal-2{animation:RightPopUp var(--apex-snackbar-enter-duration, .3s) ease-in-out forwards}.progress{max-width:392px;height:4px;position:absolute;bottom:0;opacity:.5;background:var(--apex-snackbar-progress-color);transform:translate(-16px);animation:shrinkProgress var(--apex-snackbar-animation-duration) ease-in-out}.x-icon{width:20px;cursor:pointer;transition:transform .3s ease;opacity:.7;padding-top:8px}.x-icon:after{font-size:36px;color:var(--apex-snackbar-x-icon-color);content:\"\\d7\"}.x-icon:hover{animation:rotate .3s linear}@media(max-width:460px){.custom-snackbar{width:300px}}@keyframes rotate{0%{transform:rotate(0)}25%{transform:rotate(-10deg)}75%{transform:rotate(10deg)}to{transform:rotate(0)}}@keyframes shrinkProgress{0%{width:100%}to{width:0%}}@keyframes LeftPopUp{0%{left:-2em;opacity:0}to{left:.5em;opacity:1}}@keyframes CenterPopUp{0%{opacity:0}to{opacity:1}}@keyframes RightPopUp{0%{right:-2em;opacity:0}to{right:.5em;opacity:1}}\n"] }]
37
+ ], template: "<!-- role=alert (errors) is announced immediately; role=status (success/info)\n politely. The progress bar + icon are decorative. -->\n<div\n #container\n class=\"custom-snackbar\"\n [attr.role]=\"options.error ? 'alert' : 'status'\"\n [attr.aria-live]=\"options.error ? 'assertive' : 'polite'\"\n [class.error]=\"options.error\"\n [class.closing]=\"closing()\"\n [style.--apex-snackbar-animation-duration]=\"options.animationDuration + 's'\"\n [style.--closing-duration]=\"(options.animationDuration / 3) + 's'\">\n\n <div class=\"placeholder-wrapper\">\n @if (options.icon) {\n <apex-img [src]=\"'assets/img/' + options.icon\" [alt]=\"''\"></apex-img>\n }\n\n <div class=\"placeholder\">{{ options.title ?? (options.error ? 'Error' : 'Success') }}</div>\n\n <div class=\"x-icon\" role=\"button\" tabindex=\"0\" aria-label=\"Dismiss notification\" (click)=\"closed.emit()\" (keydown.enter)=\"closed.emit()\" (keydown.space)=\"$event.preventDefault(); closed.emit()\"></div>\n </div>\n\n <div class=\"message-wrapper\" [ngClass]=\"{ 'no-padding' : !options.icon }\">\n <div class=\"message\">{{ message }}</div>\n </div>\n\n @if (options.shouldClose) {\n <div class=\"progress\" aria-hidden=\"true\" [style.animation-duration]=\"(options.duration + 2 * options.animationDuration) + 's'\"></div>\n }\n</div>\n", styles: [":host{--apex-snackbar-animation-duration: 10s;--apex-snackbar-background-color: #14BD6C;--apex-snackbar-placeholder-text-color: #FFFFFF;--apex-snackbar-message-text-color: #FFFFFF;--apex-snackbar-error-background-color: #F96138;--apex-snackbar-progress-color: #FFFFFF;--apex-snackbar-x-icon-color: #FFFFFF;pointer-events:all;touch-action:manipulation}.placeholder-wrapper{height:24px;display:flex;align-items:center;align-self:stretch;gap:4px}.custom-snackbar{width:360px;height:fit-content;display:flex;position:relative;flex-direction:column;justify-content:center;align-items:flex-start;border-radius:4px;overflow:hidden;box-sizing:border-box;opacity:0;background:var(--apex-snackbar-background-color);padding:12px 16px 16px;margin-bottom:6px}.custom-snackbar.closing{transition:opacity var(--closing-duration, .33s) ease-in,transform var(--closing-duration, .33s) ease-in,height var(--closing-duration, .33s) ease-in var(--closing-duration, .33s),margin var(--closing-duration, .33s) ease-in var(--closing-duration, .33s),padding var(--closing-duration, .33s) ease-in var(--closing-duration, .33s);opacity:0;transform:translate(50px);height:0px;margin:0;padding:0}apex-img{width:20px;height:20px}.placeholder{flex:1 0 0;color:var(--apex-snackbar-placeholder-text-color);font-size:18px;font-style:normal;font-weight:600;line-height:22px}.message-wrapper{display:flex;align-items:flex-start;align-self:stretch;gap:10px;padding-left:24px}.message-wrapper.no-padding{padding:0}.message{flex:1 0 0;color:var(--apex-snackbar-message-text-color);font-size:16px;font-style:normal;font-weight:400;line-height:20px}.error{background-color:var(--apex-snackbar-error-background-color)}.vertical-1{top:.5em}.vertical-0{bottom:.5em}.horizontal-0{animation:LeftPopUp var(--apex-snackbar-enter-duration, .3s) ease-in-out forwards}.horizontal-1{animation:CenterPopUp var(--apex-snackbar-enter-duration, .3s) ease-in-out forwards}.horizontal-2{animation:RightPopUp var(--apex-snackbar-enter-duration, .3s) ease-in-out forwards}.progress{max-width:392px;height:4px;position:absolute;bottom:0;opacity:.5;background:var(--apex-snackbar-progress-color);transform:translate(-16px);animation:shrinkProgress var(--apex-snackbar-animation-duration) ease-in-out}.x-icon{width:20px;cursor:pointer;transition:transform .3s ease;opacity:.7;padding-top:8px}.x-icon:after{font-size:36px;color:var(--apex-snackbar-x-icon-color);content:\"\\d7\"}.x-icon:hover{animation:rotate .3s linear}@media(max-width:460px){.custom-snackbar{width:300px}}@keyframes rotate{0%{transform:rotate(0)}25%{transform:rotate(-10deg)}75%{transform:rotate(10deg)}to{transform:rotate(0)}}@keyframes shrinkProgress{0%{width:100%}to{width:0%}}@keyframes LeftPopUp{0%{left:-2em;opacity:0}to{left:.5em;opacity:1}}@keyframes CenterPopUp{0%{opacity:0}to{opacity:1}}@keyframes RightPopUp{0%{right:-2em;opacity:0}to{right:.5em;opacity:1}}\n"] }]
38
38
  }], propDecorators: { container: [{
39
39
  type: ViewChild,
40
40
  args: ['container']
@@ -1 +1 @@
1
- {"version":3,"file":"apexara-ng-components-snackbar.mjs","sources":["../../../../projects/apexara/ng-components/snackbar/src/snackbar.component.ts","../../../../projects/apexara/ng-components/snackbar/src/snackbar.component.html","../../../../projects/apexara/ng-components/snackbar/src/snackbar.service.ts","../../../../projects/apexara/ng-components/snackbar/apexara-ng-components-snackbar.ts"],"sourcesContent":["import { NgClass } from '@angular/common';\nimport { Component, Input, Output, EventEmitter, ViewChild, ElementRef, signal } from '@angular/core';\n\nimport { ApexImageComponent } from '@apexara/ng-components/image';\n\nexport enum VerticalPosition {\n Bottom,\n Top,\n}\n\nexport enum HorizontalPosition {\n Left,\n Center,\n Right,\n}\n\nexport interface ApexSnackbarOptions {\n title?: string;\n icon?: string;\n error: boolean;\n shouldClose: boolean;\n duration: number;\n animationDuration: number;\n position: SnackbarPosition;\n backgroundColor: string;\n errorBackgroundColor: string;\n progressColor: string;\n placeholderTextColor: string;\n messageTextColor: string;\n xIconColor: string;\n}\n\nexport interface SnackbarPosition {\n horizontalPosition?: HorizontalPosition;\n verticalPosition?: VerticalPosition;\n}\n\n@Component({\n selector: 'apex-snackbar',\n templateUrl: './snackbar.component.html',\n styleUrls: ['./snackbar.component.css'],\n imports: [\n NgClass,\n ApexImageComponent,\n ],\n})\n\nexport class ApexSnackbarComponent {\n\n @ViewChild('container') container!: ElementRef<HTMLDivElement>;\n\n @Input() message!: String;\n @Input() options!: ApexSnackbarOptions;\n\n @Input() positionOptions!: SnackbarPosition;\n\n public closing = signal(false);\n\n @Output() closed = new EventEmitter<void>();\n\n public ngAfterViewInit(): void {\n if (!this.container) {\n return;\n }\n\n this.container.nativeElement.style.height = this.container.nativeElement.scrollHeight + 'px';\n }\n\n}\n","<div\n #container\n class=\"custom-snackbar\"\n [class.error]=\"options.error\"\n [class.closing]=\"closing()\"\n [style.--apex-snackbar-animation-duration]=\"options.animationDuration + 's'\"\n [style.--closing-duration]=\"(options.animationDuration / 3) + 's'\">\n\n <div class=\"placeholder-wrapper\">\n @if (options.icon) {\n <apex-img [src]=\"'assets/img/' + options.icon\" [alt]=\"'Snackbar prefix icon'\"></apex-img>\n }\n\n <div class=\"placeholder\">{{ options.title ?? (options.error ? 'Error' : 'Success') }}</div>\n\n <div class=\"x-icon\" (click)=\"closed.emit()\"></div>\n </div>\n\n <div class=\"message-wrapper\" [ngClass]=\"{ 'no-padding' : !options.icon }\">\n <div class=\"message\">{{ message }}</div>\n </div>\n\n @if (options.shouldClose) {\n <div class=\"progress\" [style.animation-duration]=\"(options.duration + 2 * options.animationDuration) + 's'\"></div>\n }\n</div>\n","import { Injectable, ComponentRef, ApplicationRef, EmbeddedViewRef, createComponent } from '@angular/core';\n\nimport { OverlayService } from '@apexara/ng-components/services';\n\nimport { ApexSnackbarComponent, ApexSnackbarOptions, SnackbarPosition, VerticalPosition, HorizontalPosition } from './snackbar.component';\n\ntype SnackbarComponentRef = ComponentRef<ApexSnackbarComponent | unknown>;\n\ninterface SnackbarElement {\n containerId: string;\n ref: SnackbarComponentRef;\n options: ApexSnackbarOptions;\n}\n\n@Injectable({\n providedIn: 'root',\n})\n\nexport class ApexSnackbarService {\n\n constructor(\n private appRef: ApplicationRef,\n private overlayService: OverlayService) { }\n\n private maxSnackbars = 5;\n\n private snackbarContainerMap: Record<string, HTMLElement> = { };\n\n private defaultSnackbarOptions: ApexSnackbarOptions = {\n error: false,\n shouldClose: true,\n duration: 5,\n animationDuration: 1,\n position: {\n verticalPosition: VerticalPosition.Bottom,\n horizontalPosition: HorizontalPosition.Center,\n },\n backgroundColor: '#14BD6C',\n errorBackgroundColor: '#F96138',\n progressColor: '#FFFFFF',\n placeholderTextColor: '#FFFFFF',\n messageTextColor: '#FFFFFF',\n xIconColor: '#FFFFFF',\n };\n\n private snackbarsArray: SnackbarElement[] = [ ];\n\n public open(message?: string, options?: Partial<ApexSnackbarOptions>, component?: unknown, data?: Record<string, unknown>): void {\n const snackbarOptions: ApexSnackbarOptions = {\n ...this.defaultSnackbarOptions,\n ...options,\n };\n\n const snackbarContainerRef = this.createSnackbarContainer(snackbarOptions.position);\n\n const snackbarRef = this.createComponent(\n component ? component : ApexSnackbarComponent,\n snackbarOptions,\n snackbarContainerRef,\n component ? data : undefined,\n );\n\n if (!snackbarRef) {\n return;\n }\n\n if (message && !component) {\n snackbarRef.instance.message = message;\n }\n\n this.closeIfMaxSnackbar();\n\n this.snackbarsArray.push({\n containerId: this.generateSnackbarContainerId(snackbarOptions.position),\n ref: snackbarRef,\n options: snackbarOptions,\n });\n\n this.subscribeToClosingEvents(snackbarRef);\n }\n\n public setMaxSnackbars(length: number): void {\n this.maxSnackbars = length;\n }\n\n public updateDefaultOptions(options: Partial<ApexSnackbarOptions>): void {\n this.defaultSnackbarOptions = { ...this.defaultSnackbarOptions, ...options };\n }\n\n private createSnackbarContainer(position: SnackbarPosition): HTMLElement {\n const id = this.generateSnackbarContainerId(position);\n\n if (this.snackbarContainerMap[id]) {\n return this.snackbarContainerMap[id];\n }\n\n this.snackbarContainerMap[id] = document.createElement('div');\n\n this.applySnackbarContainerStyles(this.snackbarContainerMap[id], position);\n\n this.overlayService.appendToOverlay(this.snackbarContainerMap[id], false);\n\n return this.snackbarContainerMap[id];\n }\n\n private createComponent(component: any, options: ApexSnackbarOptions, container: HTMLElement, data?: Record<string, unknown>): ComponentRef<any> | void {\n const componentRef = createComponent(component, { environmentInjector: this.appRef.injector });\n\n if (!componentRef.instance) {\n return;\n }\n\n (componentRef.instance as any).data = data;\n (componentRef.instance as any).options = options;\n\n this.appRef.attachView(componentRef.hostView);\n\n const snackbarElement = (componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n\n this.applySnackbarStyles(snackbarElement, options);\n\n container.appendChild(snackbarElement);\n\n if (options.shouldClose) {\n setTimeout(() => {\n const closeIndex = this.findSnackbarElementIndexFromRef(componentRef);\n\n if (closeIndex === undefined) {\n return;\n }\n\n this.close(closeIndex);\n }, (2 * options.animationDuration + options.duration) * 1000);\n }\n\n return componentRef;\n }\n\n private applySnackbarStyles(snackbarElement: HTMLElement, options: ApexSnackbarOptions): void {\n const styles = {\n '--apex-snackbar-background-color': options.backgroundColor,\n '--apex-snackbar-placeholder-text-color': options.placeholderTextColor,\n '--apex-snackbar-message-text-color': options.messageTextColor,\n '--apex-snackbar-progress-color': options.progressColor,\n '--apex-snackbar-x-icon-color': options.xIconColor,\n '--apex-snackbar-animation-duration': options.animationDuration ? `${options.animationDuration}s` : undefined\n };\n \n for (const [cssVar, value] of Object.entries(styles)) {\n if (value) {\n snackbarElement.style.setProperty(cssVar, value);\n }\n }\n\n const position = options.position ? options.position : this.defaultSnackbarOptions.position!;\n\n snackbarElement.querySelector('div:first-child')!.classList.add(`horizontal-${position.horizontalPosition}`, `vertical-${position.verticalPosition}`);\n }\n\n private closeIfMaxSnackbar(): void {\n if (this.snackbarsArray.length === this.maxSnackbars) {\n this.close(0);\n }\n }\n\n private subscribeToClosingEvents(snackbarRef: SnackbarComponentRef): void {\n (snackbarRef.instance as any).closed.subscribe(() => {\n const closeIndex = this.findSnackbarElementIndexFromRef(snackbarRef);\n\n this.close(closeIndex);\n });\n\n snackbarRef.onDestroy(() => {\n (snackbarRef.instance as any).closed.unsubscribe();\n });\n }\n\n private applySnackbarContainerStyles(container: HTMLElement, position: SnackbarPosition): void {\n Object.assign(container.style, {\n position: 'fixed',\n zIndex: '1000',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-end',\n });\n\n Object.assign(container.style, {\n left: '50%',\n bottom: '0',\n transform: 'translateX(-50%)',\n });\n\n switch (position.horizontalPosition) {\n case HorizontalPosition.Left:\n Object.assign(container.style, {\n left: '0',\n right: '',\n transform: 'translateX(0)',\n });\n\n break;\n\n case HorizontalPosition.Right:\n Object.assign(container.style, {\n right: '0',\n left: '',\n transform: 'translateX(0)',\n });\n }\n\n if (position.verticalPosition === VerticalPosition.Top) {\n container.style.top = '0';\n container.style.bottom = '';\n } else {\n container.style.flexDirection = 'column-reverse';\n }\n }\n\n private close(index: number): void {\n const snackbar = this.snackbarsArray[index];\n\n if (!snackbar || !snackbar.ref || !snackbar.ref.instance) {\n return;\n }\n\n if ('closing' in (snackbar.ref.instance as object)) {\n (snackbar.ref.instance as any).closing.set(true);\n }\n\n this.snackbarsArray.splice(index, 1);\n\n setTimeout(() => {\n snackbar.ref.destroy();\n }, snackbar.options.animationDuration * 1000);\n }\n\n private generateSnackbarContainerId(position: SnackbarPosition): string {\n return `${position.horizontalPosition}_${position.verticalPosition}`;\n }\n\n private findSnackbarElementIndexFromRef(ref: SnackbarComponentRef): number {\n return this.snackbarsArray.findIndex(snackbar => snackbar.ref === ref);\n }\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"apexara-ng-components-snackbar.mjs","sources":["../../../../projects/apexara/ng-components/snackbar/src/snackbar.component.ts","../../../../projects/apexara/ng-components/snackbar/src/snackbar.component.html","../../../../projects/apexara/ng-components/snackbar/src/snackbar.service.ts","../../../../projects/apexara/ng-components/snackbar/apexara-ng-components-snackbar.ts"],"sourcesContent":["import { NgClass } from '@angular/common';\nimport { Component, Input, Output, EventEmitter, ViewChild, ElementRef, signal } from '@angular/core';\n\nimport { ApexImageComponent } from '@apexara/ng-components/image';\n\nexport enum VerticalPosition {\n Bottom,\n Top,\n}\n\nexport enum HorizontalPosition {\n Left,\n Center,\n Right,\n}\n\nexport interface ApexSnackbarOptions {\n title?: string;\n icon?: string;\n error: boolean;\n shouldClose: boolean;\n duration: number;\n animationDuration: number;\n position: SnackbarPosition;\n backgroundColor: string;\n errorBackgroundColor: string;\n progressColor: string;\n placeholderTextColor: string;\n messageTextColor: string;\n xIconColor: string;\n}\n\nexport interface SnackbarPosition {\n horizontalPosition?: HorizontalPosition;\n verticalPosition?: VerticalPosition;\n}\n\n@Component({\n selector: 'apex-snackbar',\n templateUrl: './snackbar.component.html',\n styleUrls: ['./snackbar.component.css'],\n imports: [\n NgClass,\n ApexImageComponent,\n ],\n})\n\nexport class ApexSnackbarComponent {\n\n @ViewChild('container') container!: ElementRef<HTMLDivElement>;\n\n @Input() message!: String;\n @Input() options!: ApexSnackbarOptions;\n\n @Input() positionOptions!: SnackbarPosition;\n\n public closing = signal(false);\n\n @Output() closed = new EventEmitter<void>();\n\n public ngAfterViewInit(): void {\n if (!this.container) {\n return;\n }\n\n this.container.nativeElement.style.height = this.container.nativeElement.scrollHeight + 'px';\n }\n\n}\n","<!-- role=alert (errors) is announced immediately; role=status (success/info)\n politely. The progress bar + icon are decorative. -->\n<div\n #container\n class=\"custom-snackbar\"\n [attr.role]=\"options.error ? 'alert' : 'status'\"\n [attr.aria-live]=\"options.error ? 'assertive' : 'polite'\"\n [class.error]=\"options.error\"\n [class.closing]=\"closing()\"\n [style.--apex-snackbar-animation-duration]=\"options.animationDuration + 's'\"\n [style.--closing-duration]=\"(options.animationDuration / 3) + 's'\">\n\n <div class=\"placeholder-wrapper\">\n @if (options.icon) {\n <apex-img [src]=\"'assets/img/' + options.icon\" [alt]=\"''\"></apex-img>\n }\n\n <div class=\"placeholder\">{{ options.title ?? (options.error ? 'Error' : 'Success') }}</div>\n\n <div class=\"x-icon\" role=\"button\" tabindex=\"0\" aria-label=\"Dismiss notification\" (click)=\"closed.emit()\" (keydown.enter)=\"closed.emit()\" (keydown.space)=\"$event.preventDefault(); closed.emit()\"></div>\n </div>\n\n <div class=\"message-wrapper\" [ngClass]=\"{ 'no-padding' : !options.icon }\">\n <div class=\"message\">{{ message }}</div>\n </div>\n\n @if (options.shouldClose) {\n <div class=\"progress\" aria-hidden=\"true\" [style.animation-duration]=\"(options.duration + 2 * options.animationDuration) + 's'\"></div>\n }\n</div>\n","import { Injectable, ComponentRef, ApplicationRef, EmbeddedViewRef, createComponent } from '@angular/core';\n\nimport { OverlayService } from '@apexara/ng-components/services';\n\nimport { ApexSnackbarComponent, ApexSnackbarOptions, SnackbarPosition, VerticalPosition, HorizontalPosition } from './snackbar.component';\n\ntype SnackbarComponentRef = ComponentRef<ApexSnackbarComponent | unknown>;\n\ninterface SnackbarElement {\n containerId: string;\n ref: SnackbarComponentRef;\n options: ApexSnackbarOptions;\n}\n\n@Injectable({\n providedIn: 'root',\n})\n\nexport class ApexSnackbarService {\n\n constructor(\n private appRef: ApplicationRef,\n private overlayService: OverlayService) { }\n\n private maxSnackbars = 5;\n\n private snackbarContainerMap: Record<string, HTMLElement> = { };\n\n private defaultSnackbarOptions: ApexSnackbarOptions = {\n error: false,\n shouldClose: true,\n duration: 5,\n animationDuration: 1,\n position: {\n verticalPosition: VerticalPosition.Bottom,\n horizontalPosition: HorizontalPosition.Center,\n },\n backgroundColor: '#14BD6C',\n errorBackgroundColor: '#F96138',\n progressColor: '#FFFFFF',\n placeholderTextColor: '#FFFFFF',\n messageTextColor: '#FFFFFF',\n xIconColor: '#FFFFFF',\n };\n\n private snackbarsArray: SnackbarElement[] = [ ];\n\n public open(message?: string, options?: Partial<ApexSnackbarOptions>, component?: unknown, data?: Record<string, unknown>): void {\n const snackbarOptions: ApexSnackbarOptions = {\n ...this.defaultSnackbarOptions,\n ...options,\n };\n\n const snackbarContainerRef = this.createSnackbarContainer(snackbarOptions.position);\n\n const snackbarRef = this.createComponent(\n component ? component : ApexSnackbarComponent,\n snackbarOptions,\n snackbarContainerRef,\n component ? data : undefined,\n );\n\n if (!snackbarRef) {\n return;\n }\n\n if (message && !component) {\n snackbarRef.instance.message = message;\n }\n\n this.closeIfMaxSnackbar();\n\n this.snackbarsArray.push({\n containerId: this.generateSnackbarContainerId(snackbarOptions.position),\n ref: snackbarRef,\n options: snackbarOptions,\n });\n\n this.subscribeToClosingEvents(snackbarRef);\n }\n\n public setMaxSnackbars(length: number): void {\n this.maxSnackbars = length;\n }\n\n public updateDefaultOptions(options: Partial<ApexSnackbarOptions>): void {\n this.defaultSnackbarOptions = { ...this.defaultSnackbarOptions, ...options };\n }\n\n private createSnackbarContainer(position: SnackbarPosition): HTMLElement {\n const id = this.generateSnackbarContainerId(position);\n\n if (this.snackbarContainerMap[id]) {\n return this.snackbarContainerMap[id];\n }\n\n this.snackbarContainerMap[id] = document.createElement('div');\n\n this.applySnackbarContainerStyles(this.snackbarContainerMap[id], position);\n\n this.overlayService.appendToOverlay(this.snackbarContainerMap[id], false);\n\n return this.snackbarContainerMap[id];\n }\n\n private createComponent(component: any, options: ApexSnackbarOptions, container: HTMLElement, data?: Record<string, unknown>): ComponentRef<any> | void {\n const componentRef = createComponent(component, { environmentInjector: this.appRef.injector });\n\n if (!componentRef.instance) {\n return;\n }\n\n (componentRef.instance as any).data = data;\n (componentRef.instance as any).options = options;\n\n this.appRef.attachView(componentRef.hostView);\n\n const snackbarElement = (componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n\n this.applySnackbarStyles(snackbarElement, options);\n\n container.appendChild(snackbarElement);\n\n if (options.shouldClose) {\n setTimeout(() => {\n const closeIndex = this.findSnackbarElementIndexFromRef(componentRef);\n\n if (closeIndex === undefined) {\n return;\n }\n\n this.close(closeIndex);\n }, (2 * options.animationDuration + options.duration) * 1000);\n }\n\n return componentRef;\n }\n\n private applySnackbarStyles(snackbarElement: HTMLElement, options: ApexSnackbarOptions): void {\n const styles = {\n '--apex-snackbar-background-color': options.backgroundColor,\n '--apex-snackbar-placeholder-text-color': options.placeholderTextColor,\n '--apex-snackbar-message-text-color': options.messageTextColor,\n '--apex-snackbar-progress-color': options.progressColor,\n '--apex-snackbar-x-icon-color': options.xIconColor,\n '--apex-snackbar-animation-duration': options.animationDuration ? `${options.animationDuration}s` : undefined\n };\n \n for (const [cssVar, value] of Object.entries(styles)) {\n if (value) {\n snackbarElement.style.setProperty(cssVar, value);\n }\n }\n\n const position = options.position ? options.position : this.defaultSnackbarOptions.position!;\n\n snackbarElement.querySelector('div:first-child')!.classList.add(`horizontal-${position.horizontalPosition}`, `vertical-${position.verticalPosition}`);\n }\n\n private closeIfMaxSnackbar(): void {\n if (this.snackbarsArray.length === this.maxSnackbars) {\n this.close(0);\n }\n }\n\n private subscribeToClosingEvents(snackbarRef: SnackbarComponentRef): void {\n (snackbarRef.instance as any).closed.subscribe(() => {\n const closeIndex = this.findSnackbarElementIndexFromRef(snackbarRef);\n\n this.close(closeIndex);\n });\n\n snackbarRef.onDestroy(() => {\n (snackbarRef.instance as any).closed.unsubscribe();\n });\n }\n\n private applySnackbarContainerStyles(container: HTMLElement, position: SnackbarPosition): void {\n Object.assign(container.style, {\n position: 'fixed',\n zIndex: '1000',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-end',\n });\n\n Object.assign(container.style, {\n left: '50%',\n bottom: '0',\n transform: 'translateX(-50%)',\n });\n\n switch (position.horizontalPosition) {\n case HorizontalPosition.Left:\n Object.assign(container.style, {\n left: '0',\n right: '',\n transform: 'translateX(0)',\n });\n\n break;\n\n case HorizontalPosition.Right:\n Object.assign(container.style, {\n right: '0',\n left: '',\n transform: 'translateX(0)',\n });\n }\n\n if (position.verticalPosition === VerticalPosition.Top) {\n container.style.top = '0';\n container.style.bottom = '';\n } else {\n container.style.flexDirection = 'column-reverse';\n }\n }\n\n private close(index: number): void {\n const snackbar = this.snackbarsArray[index];\n\n if (!snackbar || !snackbar.ref || !snackbar.ref.instance) {\n return;\n }\n\n if ('closing' in (snackbar.ref.instance as object)) {\n (snackbar.ref.instance as any).closing.set(true);\n }\n\n this.snackbarsArray.splice(index, 1);\n\n setTimeout(() => {\n snackbar.ref.destroy();\n }, snackbar.options.animationDuration * 1000);\n }\n\n private generateSnackbarContainerId(position: SnackbarPosition): string {\n return `${position.horizontalPosition}_${position.verticalPosition}`;\n }\n\n private findSnackbarElementIndexFromRef(ref: SnackbarComponentRef): number {\n return this.snackbarsArray.findIndex(snackbar => snackbar.ref === ref);\n }\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}