@seniorsistemas/angular-components 19.0.9 → 19.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 (123) hide show
  1. package/breadcrumb/lib/breadcrumb/breadcrumb-models.d.ts +2 -0
  2. package/button/lib/button/button.component.d.ts +8 -2
  3. package/checkbox/lib/checkbox/checkbox.component.d.ts +5 -1
  4. package/dialog/lib/src/dialog/dialog.component.d.ts +7 -1
  5. package/esm2022/accordion/lib/accordion/components/accordion-panel/accordion-panel.component.mjs +2 -2
  6. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-models.mjs +1 -1
  7. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.component.mjs +3 -3
  8. package/esm2022/breadcrumb/lib/dynamic-breadcrumb/dynamic-breadcrumb.component.mjs +8 -6
  9. package/esm2022/button/lib/button/button.component.mjs +20 -8
  10. package/esm2022/checkbox/lib/checkbox/checkbox.component.mjs +8 -5
  11. package/esm2022/confirm-dialog/lib/popup-confirm-dialog/popup-confirm-dialog.component.mjs +2 -2
  12. package/esm2022/content-generator/lib/content-generator/content-generator.component.mjs +1 -1
  13. package/esm2022/dialog/lib/src/dialog/dialog.component.mjs +9 -3
  14. package/esm2022/dynamic-form/dynamic-form/components/grid/row/row.component.mjs +1 -1
  15. package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +2 -2
  16. package/esm2022/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +1 -1
  17. package/esm2022/dynamic-form/dynamic-form/form-field/fields/boolean/boolean-radio-field/boolean-field.component.mjs +1 -1
  18. package/esm2022/dynamic-form/dynamic-form/form-field/fields/boolean/boolean-switch-field/boolean-switch-field.component.mjs +2 -2
  19. package/esm2022/dynamic-form/dynamic-form/form-field/fields/button-field/button-field.component.mjs +1 -1
  20. package/esm2022/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.mjs +1 -1
  21. package/esm2022/dynamic-form/dynamic-form/form-field/fields/password/password-field.component.mjs +1 -1
  22. package/esm2022/dynamic-form/dynamic-form/form-field/fields/radio-button/radio-button-field.component.mjs +1 -1
  23. package/esm2022/dynamic-form/dynamic-form/form-field/fields/select/select-field.component.mjs +2 -2
  24. package/esm2022/dynamic-form/dynamic-form/form-field/fields/text/text-field.component.mjs +1 -1
  25. package/esm2022/empty-state/lib/empty-state/empty-state.component.mjs +1 -1
  26. package/esm2022/file-picker/lib/file-picker/file-picker.component.mjs +1 -1
  27. package/esm2022/global-search/lib/global-search/components/dropdown/global-search-dropdown-item.component.mjs +1 -1
  28. package/esm2022/global-search/lib/global-search/global-search.component.mjs +1 -1
  29. package/esm2022/help-popover/lib/help-popover/help-popover/help-popover.component.mjs +1 -1
  30. package/esm2022/image-cropper/lib/image-cropper/image-cropper.component.mjs +1 -1
  31. package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.mjs +1 -1
  32. package/esm2022/inline-edit/lib/inline-edit/components/inline-edit-item/inline-edit-item.component.mjs +1 -1
  33. package/esm2022/kanban/lib/kanban/components/kanban-column/kanban-column.component.mjs +1 -1
  34. package/esm2022/kanban/lib/kanban/components/kanban-item/kanban-item.component.mjs +1 -1
  35. package/esm2022/lib/locale/fallback.mjs +13 -2
  36. package/esm2022/navigation-button/lib/navigation-button/navigation-button.component.mjs +1 -1
  37. package/esm2022/object-card/lib/object-card/elements/field/object-card-field.component.mjs +1 -1
  38. package/esm2022/object-card/lib/object-card/elements/main/object-card-main.component.mjs +1 -1
  39. package/esm2022/paginator/lib/paginator/paginator.component.mjs +2 -2
  40. package/esm2022/picklist/lib/picklist/picklist.component.mjs +1 -1
  41. package/esm2022/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.mjs +1 -1
  42. package/esm2022/select/lib/select/components/select-option/select-option.component.mjs +3 -3
  43. package/esm2022/select/lib/select/select.component.mjs +132 -20
  44. package/esm2022/shared/lib/accessibility/paginator-accessibility.directive.mjs +182 -0
  45. package/esm2022/shared/lib/accessibility/table-checkbox-accessibility.directive.mjs +174 -0
  46. package/esm2022/shared/public-api.mjs +6 -4
  47. package/esm2022/switch/lib/switch/switch.component.mjs +19 -8
  48. package/esm2022/table/lib/table/table-paging/table-paging.component.mjs +1 -1
  49. package/esm2022/tiered-menu/lib/tiered-menu/components/tiered-menu/tiered-menu.component.mjs +18 -8
  50. package/esm2022/tiered-menu/lib/tiered-menu/components/tiered-menu-item/tiered-menu-item.component.mjs +1 -1
  51. package/esm2022/tiered-menu/lib/tiered-menu/services/tiered-menu.service.mjs +1 -1
  52. package/esm2022/tiered-menu/lib/tiered-menu/tiered-menu.directive.mjs +11 -3
  53. package/esm2022/tooltip/lib/tooltip/tooltip.component.mjs +17 -11
  54. package/esm2022/tooltip/lib/tooltip/tooltip.directive.mjs +108 -241
  55. package/esm2022/tooltip/lib/tooltip/tooltip.module.mjs +4 -6
  56. package/esm2022/topbar/lib/topbar/topbar.component.mjs +2 -2
  57. package/fesm2022/seniorsistemas-angular-components-accordion.mjs +1 -1
  58. package/fesm2022/seniorsistemas-angular-components-accordion.mjs.map +1 -1
  59. package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs +9 -7
  60. package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs.map +1 -1
  61. package/fesm2022/seniorsistemas-angular-components-button.mjs +19 -7
  62. package/fesm2022/seniorsistemas-angular-components-button.mjs.map +1 -1
  63. package/fesm2022/seniorsistemas-angular-components-checkbox.mjs +7 -4
  64. package/fesm2022/seniorsistemas-angular-components-checkbox.mjs.map +1 -1
  65. package/fesm2022/seniorsistemas-angular-components-confirm-dialog.mjs +1 -1
  66. package/fesm2022/seniorsistemas-angular-components-confirm-dialog.mjs.map +1 -1
  67. package/fesm2022/seniorsistemas-angular-components-content-generator.mjs +1 -1
  68. package/fesm2022/seniorsistemas-angular-components-content-generator.mjs.map +1 -1
  69. package/fesm2022/seniorsistemas-angular-components-dialog.mjs +8 -2
  70. package/fesm2022/seniorsistemas-angular-components-dialog.mjs.map +1 -1
  71. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +11 -11
  72. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
  73. package/fesm2022/seniorsistemas-angular-components-empty-state.mjs +1 -1
  74. package/fesm2022/seniorsistemas-angular-components-empty-state.mjs.map +1 -1
  75. package/fesm2022/seniorsistemas-angular-components-file-picker.mjs +1 -1
  76. package/fesm2022/seniorsistemas-angular-components-file-picker.mjs.map +1 -1
  77. package/fesm2022/seniorsistemas-angular-components-global-search.mjs +2 -2
  78. package/fesm2022/seniorsistemas-angular-components-global-search.mjs.map +1 -1
  79. package/fesm2022/seniorsistemas-angular-components-help-popover.mjs +1 -1
  80. package/fesm2022/seniorsistemas-angular-components-help-popover.mjs.map +1 -1
  81. package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs +1 -1
  82. package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs.map +1 -1
  83. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +2 -2
  84. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
  85. package/fesm2022/seniorsistemas-angular-components-kanban.mjs +2 -2
  86. package/fesm2022/seniorsistemas-angular-components-kanban.mjs.map +1 -1
  87. package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs +1 -1
  88. package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs.map +1 -1
  89. package/fesm2022/seniorsistemas-angular-components-object-card.mjs +2 -2
  90. package/fesm2022/seniorsistemas-angular-components-object-card.mjs.map +1 -1
  91. package/fesm2022/seniorsistemas-angular-components-paginator.mjs +1 -1
  92. package/fesm2022/seniorsistemas-angular-components-paginator.mjs.map +1 -1
  93. package/fesm2022/seniorsistemas-angular-components-picklist.mjs +1 -1
  94. package/fesm2022/seniorsistemas-angular-components-picklist.mjs.map +1 -1
  95. package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs +1 -1
  96. package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs.map +1 -1
  97. package/fesm2022/seniorsistemas-angular-components-select.mjs +133 -21
  98. package/fesm2022/seniorsistemas-angular-components-select.mjs.map +1 -1
  99. package/fesm2022/seniorsistemas-angular-components-shared.mjs +354 -2
  100. package/fesm2022/seniorsistemas-angular-components-shared.mjs.map +1 -1
  101. package/fesm2022/seniorsistemas-angular-components-switch.mjs +18 -7
  102. package/fesm2022/seniorsistemas-angular-components-switch.mjs.map +1 -1
  103. package/fesm2022/seniorsistemas-angular-components-table.mjs +1 -1
  104. package/fesm2022/seniorsistemas-angular-components-table.mjs.map +1 -1
  105. package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs +26 -8
  106. package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs.map +1 -1
  107. package/fesm2022/seniorsistemas-angular-components-tooltip.mjs +125 -254
  108. package/fesm2022/seniorsistemas-angular-components-tooltip.mjs.map +1 -1
  109. package/fesm2022/seniorsistemas-angular-components-topbar.mjs +2 -2
  110. package/fesm2022/seniorsistemas-angular-components-topbar.mjs.map +1 -1
  111. package/fesm2022/seniorsistemas-angular-components.mjs +12 -1
  112. package/fesm2022/seniorsistemas-angular-components.mjs.map +1 -1
  113. package/package.json +1 -1
  114. package/select/lib/select/select.component.d.ts +23 -2
  115. package/shared/lib/accessibility/paginator-accessibility.directive.d.ts +30 -0
  116. package/shared/lib/accessibility/table-checkbox-accessibility.directive.d.ts +46 -0
  117. package/shared/public-api.d.ts +7 -5
  118. package/switch/lib/switch/switch.component.d.ts +9 -5
  119. package/tiered-menu/lib/tiered-menu/components/tiered-menu/tiered-menu.component.d.ts +1 -0
  120. package/tiered-menu/lib/tiered-menu/tiered-menu.directive.d.ts +4 -2
  121. package/tooltip/lib/tooltip/tooltip.component.d.ts +13 -7
  122. package/tooltip/lib/tooltip/tooltip.directive.d.ts +27 -40
  123. package/tooltip/lib/tooltip/tooltip.module.d.ts +3 -4
@@ -1,19 +1,17 @@
1
1
  import { NgModule } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
2
  import { TooltipComponent } from './tooltip.component';
4
3
  import { TooltipDirective } from './tooltip.directive';
5
4
  import * as i0 from "@angular/core";
6
5
  export class TooltipModule {
7
6
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TooltipModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
8
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: TooltipModule, declarations: [TooltipComponent], imports: [CommonModule, TooltipDirective], exports: [TooltipDirective] });
9
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TooltipModule, imports: [CommonModule] });
7
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: TooltipModule, imports: [TooltipDirective, TooltipComponent], exports: [TooltipDirective] });
8
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TooltipModule });
10
9
  }
11
10
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TooltipModule, decorators: [{
12
11
  type: NgModule,
13
12
  args: [{
14
- imports: [CommonModule, TooltipDirective],
15
- declarations: [TooltipComponent],
13
+ imports: [TooltipDirective, TooltipComponent],
16
14
  exports: [TooltipDirective],
17
15
  }]
18
16
  }] });
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvdG9vbHRpcC9zcmMvbGliL3Rvb2x0aXAvdG9vbHRpcC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7O0FBT3ZELE1BQU0sT0FBTyxhQUFhO3dHQUFiLGFBQWE7eUdBQWIsYUFBYSxpQkFIUCxnQkFBZ0IsYUFEckIsWUFBWSxFQUFFLGdCQUFnQixhQUU5QixnQkFBZ0I7eUdBRWpCLGFBQWEsWUFKWixZQUFZOzs0RkFJYixhQUFhO2tCQUx6QixRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQztvQkFDekMsWUFBWSxFQUFFLENBQUMsZ0JBQWdCLENBQUM7b0JBQ2hDLE9BQU8sRUFBRSxDQUFDLGdCQUFnQixDQUFDO2lCQUM5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQgeyBUb29sdGlwQ29tcG9uZW50IH0gZnJvbSAnLi90b29sdGlwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnLi90b29sdGlwLmRpcmVjdGl2ZSc7XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgVG9vbHRpcERpcmVjdGl2ZV0sXG4gICAgZGVjbGFyYXRpb25zOiBbVG9vbHRpcENvbXBvbmVudF0sXG4gICAgZXhwb3J0czogW1Rvb2x0aXBEaXJlY3RpdmVdLFxufSlcbmV4cG9ydCBjbGFzcyBUb29sdGlwTW9kdWxlIHsgfVxuIl19
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvdG9vbHRpcC9zcmMvbGliL3Rvb2x0aXAvdG9vbHRpcC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFNdkQsTUFBTSxPQUFPLGFBQWE7d0dBQWIsYUFBYTt5R0FBYixhQUFhLFlBSFosZ0JBQWdCLEVBQUUsZ0JBQWdCLGFBQ2xDLGdCQUFnQjt5R0FFakIsYUFBYTs7NEZBQWIsYUFBYTtrQkFKekIsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQztvQkFDN0MsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7aUJBQzlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgVG9vbHRpcENvbXBvbmVudCB9IGZyb20gJy4vdG9vbHRpcC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gJy4vdG9vbHRpcC5kaXJlY3RpdmUnO1xuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtUb29sdGlwRGlyZWN0aXZlLCBUb29sdGlwQ29tcG9uZW50XSxcbiAgICBleHBvcnRzOiBbVG9vbHRpcERpcmVjdGl2ZV0sXG59KVxuZXhwb3J0IGNsYXNzIFRvb2x0aXBNb2R1bGUge31cblxuIl19
@@ -52,7 +52,7 @@ export class TopbarComponent {
52
52
  removalVersion: '20.0.0',
53
53
  },
54
54
  },
55
- ], viewQueries: [{ propertyName: "container", first: true, predicate: ["headerContainer"], descendants: true }], hostDirectives: [{ directive: i1.DeprecatedSelectorDirective }], ngImport: i0, template: "<div [id]=\"id\" class=\"box\">\n <div\n #headerContainer\n class=\"sds-container\"\n [class]=\"isHeaderFrame ? 'header-frame' : 'primary-header'\"\n >\n <h1 [class]=\"isHeaderFrame ? 'title' : 'primary-title'\">{{ header }}</h1>\n <div class=\"content\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n", styles: [".box{position:relative;width:100%;height:70px}.header-frame{padding-top:15px;padding-bottom:15px;width:100%;top:0;left:0;height:70px;background-color:#fff;display:flex;justify-content:space-between;align-items:center;position:fixed;z-index:32}.title{color:#999;font-weight:400;font-size:16pt;margin-right:15px;min-width:140px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.content{display:flex;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.primary-header{display:flex;width:100%;height:70px;padding:15px 20px;justify-content:space-between;align-items:center;border-bottom:1px solid #ddd;background-color:#fff;gap:24px}@media (max-width: 768px){.primary-header{width:100%}}.primary-header .primary-title{color:#999;font-weight:400;font-size:16pt;margin-right:15px;min-width:140px;overflow:hidden;text-overflow:ellipsis}\n"] });
55
+ ], viewQueries: [{ propertyName: "container", first: true, predicate: ["headerContainer"], descendants: true }], hostDirectives: [{ directive: i1.DeprecatedSelectorDirective }], ngImport: i0, template: "<div [id]=\"id\" class=\"box\">\n <div\n #headerContainer\n class=\"sds-container\"\n [class]=\"isHeaderFrame ? 'header-frame' : 'primary-header'\"\n >\n <h1 [class]=\"isHeaderFrame ? 'title' : 'primary-title'\">{{ header }}</h1>\n <div class=\"content\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n", styles: [".box{position:relative;width:100%;height:70px}.header-frame{padding-top:15px;padding-bottom:15px;width:100%;top:0;left:0;height:70px;background-color:#fff;display:flex;justify-content:space-between;align-items:center;position:fixed;z-index:32}.title{color:#595959;font-weight:400;font-size:16pt;margin-right:15px;min-width:140px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.content{display:flex;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.primary-header{display:flex;width:100%;height:70px;padding:15px 20px;justify-content:space-between;align-items:center;border-bottom:1px solid #ddd;background-color:#fff;gap:24px}@media (max-width: 768px){.primary-header{width:100%}}.primary-header .primary-title{color:#595959;font-weight:400;font-size:16pt;margin-right:15px;min-width:140px;overflow:hidden;text-overflow:ellipsis}\n"] });
56
56
  }
57
57
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TopbarComponent, decorators: [{
58
58
  type: Component,
@@ -65,7 +65,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
65
65
  removalVersion: '20.0.0',
66
66
  },
67
67
  },
68
- ], template: "<div [id]=\"id\" class=\"box\">\n <div\n #headerContainer\n class=\"sds-container\"\n [class]=\"isHeaderFrame ? 'header-frame' : 'primary-header'\"\n >\n <h1 [class]=\"isHeaderFrame ? 'title' : 'primary-title'\">{{ header }}</h1>\n <div class=\"content\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n", styles: [".box{position:relative;width:100%;height:70px}.header-frame{padding-top:15px;padding-bottom:15px;width:100%;top:0;left:0;height:70px;background-color:#fff;display:flex;justify-content:space-between;align-items:center;position:fixed;z-index:32}.title{color:#999;font-weight:400;font-size:16pt;margin-right:15px;min-width:140px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.content{display:flex;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.primary-header{display:flex;width:100%;height:70px;padding:15px 20px;justify-content:space-between;align-items:center;border-bottom:1px solid #ddd;background-color:#fff;gap:24px}@media (max-width: 768px){.primary-header{width:100%}}.primary-header .primary-title{color:#999;font-weight:400;font-size:16pt;margin-right:15px;min-width:140px;overflow:hidden;text-overflow:ellipsis}\n"] }]
68
+ ], template: "<div [id]=\"id\" class=\"box\">\n <div\n #headerContainer\n class=\"sds-container\"\n [class]=\"isHeaderFrame ? 'header-frame' : 'primary-header'\"\n >\n <h1 [class]=\"isHeaderFrame ? 'title' : 'primary-title'\">{{ header }}</h1>\n <div class=\"content\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n", styles: [".box{position:relative;width:100%;height:70px}.header-frame{padding-top:15px;padding-bottom:15px;width:100%;top:0;left:0;height:70px;background-color:#fff;display:flex;justify-content:space-between;align-items:center;position:fixed;z-index:32}.title{color:#595959;font-weight:400;font-size:16pt;margin-right:15px;min-width:140px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.content{display:flex;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.primary-header{display:flex;width:100%;height:70px;padding:15px 20px;justify-content:space-between;align-items:center;border-bottom:1px solid #ddd;background-color:#fff;gap:24px}@media (max-width: 768px){.primary-header{width:100%}}.primary-header .primary-title{color:#595959;font-weight:400;font-size:16pt;margin-right:15px;min-width:140px;overflow:hidden;text-overflow:ellipsis}\n"] }]
69
69
  }], propDecorators: { id: [{
70
70
  type: Input
71
71
  }], header: [{
@@ -141,7 +141,7 @@ class AccordionPanelComponent {
141
141
  }
142
142
  }
143
143
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AccordionPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
144
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AccordionPanelComponent, selector: "s-accordion-panel", inputs: { header: "header", buttons: "buttons", disabled: "disabled", switchControl: "switchControl", validationMessage: "validationMessage", cache: "cache", validationMessageIcon: "validationMessageIcon", validationMessageIconColor: "validationMessageIconColor" }, outputs: { panelOpened: "panelOpened", panelClosed: "panelClosed" }, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"accordion-panel\"\n [class.accordion-panel--open]=\"isOpen\"\n [class.accordion-panel--disabled]=\"disabled\"\n>\n <div\n class=\"header\"\n (click)=\"onTabClick()\"\n >\n <div class=\"header__title\">\n <span\n class=\"icon fas\"\n [class.fa-minus]=\"isOpen\"\n [class.fa-plus]=\"!isOpen\"\n >\n </span>\n @if (validationMessage) {\n <span\n class=\"exclamation-icon\"\n [class]=\"validationMessageIcon\"\n [sTooltip]=\"validationMessage\"\n [class.exclamation-icon-red]=\"validationMessageIconColor === 'Red'\"\n [class.exclamation-icon-orange]=\"validationMessageIconColor === 'Orange'\"\n [class.exclamation-icon-yellow]=\"validationMessageIconColor === 'Yellow'\"\n [class.exclamation-icon-green]=\"validationMessageIconColor === 'Green'\"\n [class.exclamation-icon-blue]=\"validationMessageIconColor === 'Blue'\"\n >\n </span>\n }\n <span class=\"title\">{{ header }}</span>\n </div>\n <div class=\"header__controls\">\n @for (button of buttons; track button.icon) {\n <button\n class=\"icon-button\"\n [ngClass]=\"button.icon\"\n (click)=\"onIconButtonsClick($event, button.onClick)\"\n ></button>\n }\n\n @if (switchControl) {\n <s-switch\n class=\"switch\"\n [formControl]=\"switchControl\"\n (click)=\"$event.stopPropagation()\"\n >\n </s-switch>\n }\n </div>\n </div>\n\n @if (cache) {\n <div\n class=\"content\"\n [@cacheAnimation]=\"isOpen\"\n [@.disabled]=\"isContentAnimationDisabled\"\n (@cacheAnimation.start)=\"onContentAnimationStart()\"\n (@cacheAnimation.done)=\"onContentAnimationDone()\"\n >\n <div class=\"content-container\">\n <ng-container [ngTemplateOutlet]=\"panelContent\"></ng-container>\n </div>\n </div>\n } @else {\n @if (isOpen) {\n <div\n class=\"content\"\n @cachelessAnimation\n [@.disabled]=\"isContentAnimationDisabled\"\n (@cachelessAnimation.start)=\"onContentAnimationStart()\"\n (@cachelessAnimation.done)=\"onContentAnimationDone()\"\n >\n <div class=\"content-container\">\n <ng-container [ngTemplateOutlet]=\"panelContent\"></ng-container>\n </div>\n </div>\n }\n }\n</div>\n\n<ng-template #panelContent>\n <ng-content></ng-content>\n</ng-template>\n", styles: [".accordion-panel{border-bottom:1px solid #c1c1cc}.accordion-panel .header{align-items:center;background-color:#fff;cursor:pointer;display:flex;justify-content:space-between;padding:16px;-webkit-user-select:none;user-select:none}.accordion-panel .header .header__title{align-items:center;display:flex;flex-wrap:nowrap}.accordion-panel .header .header__title .icon{color:#212533;font-size:1rem;margin-right:12px}.accordion-panel .header .header__title .exclamation-icon{font-size:1rem;margin-right:12px}.accordion-panel .header .header__title .exclamation-icon-red{color:#c13018}.accordion-panel .header .header__title .exclamation-icon-orange{color:#f8931f}.accordion-panel .header .header__title .exclamation-icon-yellow{color:#fcbf10}.accordion-panel .header .header__title .exclamation-icon-green{color:#0c9348}.accordion-panel .header .header__title .exclamation-icon-blue{color:#428bca}.accordion-panel .header .header__title .title{font-family:\"Open Sans\" sans-serif;font-size:.875rem;font-weight:700;line-height:150%;text-transform:uppercase}.accordion-panel .header .header__controls{align-items:center;display:flex;margin-left:16px}.accordion-panel .header .header__controls .icon-button{color:#212533;cursor:pointer;font-size:1rem;margin-left:12px;padding:4px;border:none;background:none}.accordion-panel .header .header__controls .switch{padding-left:16px}.accordion-panel .content{background-color:#fff;overflow:hidden}.accordion-panel .content .content-container{margin:20px}.accordion-panel--open .header{background-color:#eeebf2;border-bottom:1px solid #c1c1cc}.accordion-panel--disabled .header{cursor:auto}.accordion-panel--disabled .header .header__title .icon,.accordion-panel--disabled .header .header__title .title{color:#c1c1cc}.accordion-panel--disabled .header .header__controls .icon-button{color:#c1c1cc;cursor:auto}.accordion-panel--disabled .exclamation-icon{opacity:.5}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.TooltipDirective, selector: "[sTooltip]", inputs: ["sTooltip", "tooltipPosition", "showDelay", "displayTime", "tooltipEvent", "escape", "visible", "mobileBehavior", "focusedInputRef", "checkTruncatedText"] }, { kind: "component", type: i4.SwitchComponent, selector: "s-switch", inputs: ["readonly", "trueLabel", "falseLabel", "inputId", "inputName", "disabled", "value"], outputs: ["valueChanged"] }], animations: [
144
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AccordionPanelComponent, selector: "s-accordion-panel", inputs: { header: "header", buttons: "buttons", disabled: "disabled", switchControl: "switchControl", validationMessage: "validationMessage", cache: "cache", validationMessageIcon: "validationMessageIcon", validationMessageIconColor: "validationMessageIconColor" }, outputs: { panelOpened: "panelOpened", panelClosed: "panelClosed" }, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"accordion-panel\"\n [class.accordion-panel--open]=\"isOpen\"\n [class.accordion-panel--disabled]=\"disabled\"\n>\n <div\n class=\"header\"\n (click)=\"onTabClick()\"\n >\n <div class=\"header__title\">\n <span\n class=\"icon fas\"\n [class.fa-minus]=\"isOpen\"\n [class.fa-plus]=\"!isOpen\"\n >\n </span>\n @if (validationMessage) {\n <span\n class=\"exclamation-icon\"\n [class]=\"validationMessageIcon\"\n [sTooltip]=\"validationMessage\"\n [class.exclamation-icon-red]=\"validationMessageIconColor === 'Red'\"\n [class.exclamation-icon-orange]=\"validationMessageIconColor === 'Orange'\"\n [class.exclamation-icon-yellow]=\"validationMessageIconColor === 'Yellow'\"\n [class.exclamation-icon-green]=\"validationMessageIconColor === 'Green'\"\n [class.exclamation-icon-blue]=\"validationMessageIconColor === 'Blue'\"\n >\n </span>\n }\n <span class=\"title\">{{ header }}</span>\n </div>\n <div class=\"header__controls\">\n @for (button of buttons; track button.icon) {\n <button\n class=\"icon-button\"\n [ngClass]=\"button.icon\"\n (click)=\"onIconButtonsClick($event, button.onClick)\"\n ></button>\n }\n\n @if (switchControl) {\n <s-switch\n class=\"switch\"\n [formControl]=\"switchControl\"\n (click)=\"$event.stopPropagation()\"\n >\n </s-switch>\n }\n </div>\n </div>\n\n @if (cache) {\n <div\n class=\"content\"\n [@cacheAnimation]=\"isOpen\"\n [@.disabled]=\"isContentAnimationDisabled\"\n (@cacheAnimation.start)=\"onContentAnimationStart()\"\n (@cacheAnimation.done)=\"onContentAnimationDone()\"\n >\n <div class=\"content-container\">\n <ng-container [ngTemplateOutlet]=\"panelContent\"></ng-container>\n </div>\n </div>\n } @else {\n @if (isOpen) {\n <div\n class=\"content\"\n @cachelessAnimation\n [@.disabled]=\"isContentAnimationDisabled\"\n (@cachelessAnimation.start)=\"onContentAnimationStart()\"\n (@cachelessAnimation.done)=\"onContentAnimationDone()\"\n >\n <div class=\"content-container\">\n <ng-container [ngTemplateOutlet]=\"panelContent\"></ng-container>\n </div>\n </div>\n }\n }\n</div>\n\n<ng-template #panelContent>\n <ng-content></ng-content>\n</ng-template>\n", styles: [".accordion-panel{border-bottom:1px solid #c1c1cc}.accordion-panel .header{align-items:center;background-color:#fff;cursor:pointer;display:flex;justify-content:space-between;padding:16px;-webkit-user-select:none;user-select:none}.accordion-panel .header .header__title{align-items:center;display:flex;flex-wrap:nowrap}.accordion-panel .header .header__title .icon{color:#212533;font-size:1rem;margin-right:12px}.accordion-panel .header .header__title .exclamation-icon{font-size:1rem;margin-right:12px}.accordion-panel .header .header__title .exclamation-icon-red{color:#c13018}.accordion-panel .header .header__title .exclamation-icon-orange{color:#f8931f}.accordion-panel .header .header__title .exclamation-icon-yellow{color:#fcbf10}.accordion-panel .header .header__title .exclamation-icon-green{color:#0c9348}.accordion-panel .header .header__title .exclamation-icon-blue{color:#428bca}.accordion-panel .header .header__title .title{font-family:\"Open Sans\" sans-serif;font-size:.875rem;font-weight:700;line-height:150%;text-transform:uppercase}.accordion-panel .header .header__controls{align-items:center;display:flex;margin-left:16px}.accordion-panel .header .header__controls .icon-button{color:#212533;cursor:pointer;font-size:1rem;margin-left:12px;padding:4px;border:none;background:none}.accordion-panel .header .header__controls .switch{padding-left:16px}.accordion-panel .content{background-color:#fff;overflow:hidden}.accordion-panel .content .content-container{margin:20px}.accordion-panel--open .header{background-color:#eeebf2;border-bottom:1px solid #c1c1cc}.accordion-panel--disabled .header{cursor:auto}.accordion-panel--disabled .header .header__title .icon,.accordion-panel--disabled .header .header__title .title{color:#c1c1cc}.accordion-panel--disabled .header .header__controls .icon-button{color:#c1c1cc;cursor:auto}.accordion-panel--disabled .exclamation-icon{opacity:.5}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.TooltipDirective, selector: "[sTooltip]", inputs: ["sTooltip", "tooltipPosition", "showDelay", "displayTime", "tooltipEvent", "escape", "visible", "mobileBehavior", "focusedInputRef", "checkTruncatedText"] }, { kind: "component", type: i4.SwitchComponent, selector: "s-switch", inputs: ["readonly", "trueLabel", "falseLabel", "inputId", "label", "inputName", "disabled", "value", "showStatusLabel"], outputs: ["valueChanged"] }], animations: [
145
145
  trigger('cachelessAnimation', [
146
146
  transition(':enter', [style({ height: '0' }), animate('200ms linear', style({ height: '*' }))]),
147
147
  transition(':leave', [style({ height: '*' }), animate('200ms linear', style({ height: '0' }))]),
@@ -1 +1 @@
1
- {"version":3,"file":"seniorsistemas-angular-components-accordion.mjs","sources":["../../projects/angular-components/accordion/src/lib/accordion/components/accordion-panel/accordion-panel.component.ts","../../projects/angular-components/accordion/src/lib/accordion/components/accordion-panel/accordion-panel.component.html","../../projects/angular-components/accordion/src/lib/accordion/accordion.component.ts","../../projects/angular-components/accordion/src/lib/accordion/accordion.component.html","../../projects/angular-components/accordion/src/lib/accordion/accordion.module.ts","../../projects/angular-components/accordion/src/seniorsistemas-angular-components-accordion.ts"],"sourcesContent":["import { AfterViewInit, Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { trigger, style, animate, transition, state } from '@angular/animations';\n\nimport { UntypedFormControl } from '@angular/forms';\nimport { AccordionButtonSettings, ValidationMessageIconColor } from '../../models/accordion-button-settings';\n\n/**\n * @description Painel individual do {@link AccordionComponent}. Gerencia o estado de\n * abertura/fechamento com animação, podendo conter um switch de controle via `switchControl`,\n * botões de ação configuráveis e uma mensagem de validação com ícone.\n *\n * @example\n * ```html\n * <s-accordion-panel\n * header=\"Configurações\"\n * [disabled]=\"false\"\n * (panelOpened)=\"onOpen()\"\n * (panelClosed)=\"onClose()\">\n * <p>Conteúdo do painel</p>\n * </s-accordion-panel>\n * ```\n *\n * @category Inputs\n */\n@Component({\n selector: 's-accordion-panel',\n templateUrl: './accordion-panel.component.html',\n styleUrls: ['./accordion-panel.component.scss'],\n animations: [\n trigger('cachelessAnimation', [\n transition(':enter', [style({ height: '0' }), animate('200ms linear', style({ height: '*' }))]),\n transition(':leave', [style({ height: '*' }), animate('200ms linear', style({ height: '0' }))]),\n ]),\n trigger('cacheAnimation', [\n state('true', style({ height: '*' })),\n state('false', style({ height: '0px' })),\n transition('* => *', animate('200ms')),\n ]),\n ],\n})\nexport class AccordionPanelComponent implements OnChanges, AfterViewInit {\n /**\n * @description Título exibido no cabeçalho do painel. Campo obrigatório.\n */\n @Input({ required: true })\n public header!: string;\n\n /**\n * @description Lista de botões de ação exibidos no cabeçalho do painel,\n * à direita do título. Cada item define ícone, tooltip e callback de clique.\n */\n @Input()\n public buttons?: AccordionButtonSettings[];\n\n /**\n * @description Desabilita a interação do usuário com o painel, impedindo abertura e fechamento.\n *\n * @default false\n */\n @Input()\n public disabled = false;\n\n /**\n * @description `FormControl` vinculado a um switch exibido no cabeçalho do painel.\n * Permite habilitar/desabilitar o conteúdo do painel via toggle.\n */\n @Input()\n public switchControl?: UntypedFormControl;\n\n /**\n * @description Mensagem de validação exibida abaixo do cabeçalho, acompanhada de um ícone.\n * Útil para indicar erros ou alertas relacionados ao conteúdo do painel.\n */\n @Input()\n public validationMessage?: string;\n\n /**\n * @description Mantém o conteúdo do painel no DOM mesmo quando fechado (modo cache).\n * Útil para preservar o estado de componentes internos ao reabrir o painel.\n *\n * @default false\n */\n @Input()\n public cache = false;\n\n /**\n * @description Classe do ícone exibido ao lado da mensagem de validação.\n *\n * @default 'fas fa-exclamation-circle'\n */\n @Input() validationMessageIcon = 'fas fa-exclamation-circle';\n\n /**\n * @description Cor do ícone da mensagem de validação.\n *\n * @default 'Red'\n */\n @Input() validationMessageIconColor: ValidationMessageIconColor = 'Red';\n\n /**\n * @description Emitido quando o painel é aberto pelo usuário.\n */\n @Output()\n public panelOpened = new EventEmitter<void>();\n\n /**\n * @description Emitido quando o painel é fechado pelo usuário.\n */\n @Output()\n public panelClosed = new EventEmitter<void>();\n\n public isAnimating = false;\n public isContentAnimationDisabled = true;\n\n private _isOpen = false;\n\n public get isOpen() {\n return this._isOpen;\n }\n\n public set isOpen(isOpen: boolean) {\n this._isOpen = isOpen;\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if ('disabled' in changes && this.switchControl) {\n if (changes['disabled'].currentValue) {\n this.switchControl.disable({ emitEvent: false });\n } else {\n this.switchControl.enable({ emitEvent: false });\n }\n }\n\n if ('switch' in changes && 'switchControl' in changes) {\n throw new Error(\"You can't set switch and switchControl together.\");\n }\n }\n\n public ngAfterViewInit(): void {\n // to executed at a safe time prior to control returning to the browser's event loop\n queueMicrotask(() => {\n this.isContentAnimationDisabled = false;\n });\n }\n\n public onIconButtonsClick(event: Event, callback: VoidFunction) {\n if (this.disabled) {\n return;\n }\n\n event.stopPropagation();\n callback();\n }\n\n public onTabClick() {\n if (this.disabled || this.isAnimating) {\n return;\n }\n this.isOpen = !this.isOpen;\n this._emitPanelEvent();\n }\n\n public onContentAnimationStart() {\n this.isAnimating = true;\n }\n\n public onContentAnimationDone() {\n this.isAnimating = false;\n\n this._emitPanelEvent();\n }\n\n private _emitPanelEvent() {\n if (this.isOpen) {\n this.panelOpened.emit();\n } else {\n this.panelClosed.emit();\n }\n }\n}\n\n","<div\n class=\"accordion-panel\"\n [class.accordion-panel--open]=\"isOpen\"\n [class.accordion-panel--disabled]=\"disabled\"\n>\n <div\n class=\"header\"\n (click)=\"onTabClick()\"\n >\n <div class=\"header__title\">\n <span\n class=\"icon fas\"\n [class.fa-minus]=\"isOpen\"\n [class.fa-plus]=\"!isOpen\"\n >\n </span>\n @if (validationMessage) {\n <span\n class=\"exclamation-icon\"\n [class]=\"validationMessageIcon\"\n [sTooltip]=\"validationMessage\"\n [class.exclamation-icon-red]=\"validationMessageIconColor === 'Red'\"\n [class.exclamation-icon-orange]=\"validationMessageIconColor === 'Orange'\"\n [class.exclamation-icon-yellow]=\"validationMessageIconColor === 'Yellow'\"\n [class.exclamation-icon-green]=\"validationMessageIconColor === 'Green'\"\n [class.exclamation-icon-blue]=\"validationMessageIconColor === 'Blue'\"\n >\n </span>\n }\n <span class=\"title\">{{ header }}</span>\n </div>\n <div class=\"header__controls\">\n @for (button of buttons; track button.icon) {\n <button\n class=\"icon-button\"\n [ngClass]=\"button.icon\"\n (click)=\"onIconButtonsClick($event, button.onClick)\"\n ></button>\n }\n\n @if (switchControl) {\n <s-switch\n class=\"switch\"\n [formControl]=\"switchControl\"\n (click)=\"$event.stopPropagation()\"\n >\n </s-switch>\n }\n </div>\n </div>\n\n @if (cache) {\n <div\n class=\"content\"\n [@cacheAnimation]=\"isOpen\"\n [@.disabled]=\"isContentAnimationDisabled\"\n (@cacheAnimation.start)=\"onContentAnimationStart()\"\n (@cacheAnimation.done)=\"onContentAnimationDone()\"\n >\n <div class=\"content-container\">\n <ng-container [ngTemplateOutlet]=\"panelContent\"></ng-container>\n </div>\n </div>\n } @else {\n @if (isOpen) {\n <div\n class=\"content\"\n @cachelessAnimation\n [@.disabled]=\"isContentAnimationDisabled\"\n (@cachelessAnimation.start)=\"onContentAnimationStart()\"\n (@cachelessAnimation.done)=\"onContentAnimationDone()\"\n >\n <div class=\"content-container\">\n <ng-container [ngTemplateOutlet]=\"panelContent\"></ng-container>\n </div>\n </div>\n }\n }\n</div>\n\n<ng-template #panelContent>\n <ng-content></ng-content>\n</ng-template>\n","import {\n AfterContentInit,\n OnChanges,\n Component,\n ContentChildren,\n Input,\n QueryList,\n SimpleChanges,\n OnDestroy,\n} from '@angular/core';\n\nimport { AccordionPanelComponent } from './components/accordion-panel/accordion-panel.component';\nimport { Subject, Subscription } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n/**\n * @description Componente de acordeão que gerencia a abertura e o fechamento de painéis\n * {@link AccordionPanelComponent}. Suporta modo de painel único (apenas um aberto por vez)\n * ou modo múltiplo (vários painéis abertos simultaneamente), configurável via input `multiple`.\n *\n * @example\n * ```html\n * <s-accordion [multiple]=\"false\" [activeIndex]=\"0\">\n * <s-accordion-panel header=\"Seção 1\">Conteúdo 1</s-accordion-panel>\n * <s-accordion-panel header=\"Seção 2\">Conteúdo 2</s-accordion-panel>\n * </s-accordion>\n * ```\n *\n * @category Inputs\n */\n@Component({\n selector: 's-accordion',\n templateUrl: './accordion.component.html',\n styleUrls: ['./accordion.component.scss'],\n})\nexport class AccordionComponent implements AfterContentInit, OnChanges, OnDestroy {\n /**\n * @description Índice (ou lista de índices) do(s) painel(is) que devem iniciar abertos.\n * Aceita um número para painel único ou um array de números para o modo múltiplo.\n */\n @Input()\n public activeIndex?: number | number[];\n\n /**\n * @description Permite que múltiplos painéis estejam abertos ao mesmo tempo.\n * Quando `false`, abrir um painel fecha automaticamente o anterior.\n *\n * @default false\n */\n @Input()\n public multiple = false;\n\n @ContentChildren(AccordionPanelComponent)\n public panelsComponents?: QueryList<AccordionPanelComponent>;\n\n private readonly _unsubscribe$ = new Subject<void>();\n private _panels: AccordionPanelComponent[] = [];\n private _openSubs: Subscription[] = [];\n\n public ngAfterContentInit(): void {\n if (this.panelsComponents) {\n this._panels = this.panelsComponents?.toArray();\n }\n\n this._openSubs = Array.from({ length: this._panels.length });\n\n this._setBehavior(this.multiple);\n this._setupTabs();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes['multiple']) {\n this._setBehavior(changes['multiple'].currentValue);\n }\n }\n\n public ngOnDestroy(): void {\n this._unsubscribe$.next();\n this._unsubscribe$.complete();\n }\n\n private _setupTabs(): void {\n if (this._panels?.length) {\n if (this.activeIndex !== undefined && this.activeIndex !== null) {\n const activeTabs = Array.isArray(this.activeIndex)\n ? this._panels.filter((_, index) => (this.activeIndex as number[]).includes(index))\n : [this._panels[this.activeIndex]];\n\n if (activeTabs.length === 0) {\n throw new Error('activeIndex does not represent any panel.');\n }\n\n for (const activeTab of activeTabs) {\n if (!activeTab.disabled) {\n activeTab.isOpen = true;\n }\n }\n }\n }\n }\n\n private _closeOtherTabs(exception: number) {\n this._panels.forEach((panel, index) => {\n if (index !== exception) {\n panel.isOpen = false;\n }\n });\n }\n\n private _setBehavior(multiple: boolean): void {\n if (multiple) {\n this._enableMultiplePanelBehavior();\n } else {\n this._enableSinglePanelBehavior();\n }\n }\n\n private _enableSinglePanelBehavior() {\n this._panels.forEach((panel, index) => {\n this._openSubs[index] = panel.panelOpened.pipe(takeUntil(this._unsubscribe$)).subscribe(() => {\n this._closeOtherTabs(index);\n });\n });\n }\n\n private _enableMultiplePanelBehavior() {\n this._panels.forEach((_, index) => {\n if (this._openSubs[index]) {\n this._openSubs[index].unsubscribe();\n }\n });\n }\n}\n\n","<div class=\"accordion\">\n <ng-content></ng-content>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { AccordionComponent } from './accordion.component';\nimport { AccordionPanelComponent } from './components/accordion-panel/accordion-panel.component';\nimport { TooltipModule } from '@seniorsistemas/angular-components/tooltip';\nimport { SwitchModule } from '@seniorsistemas/angular-components/switch';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n TooltipModule,\n SwitchModule,\n ],\n declarations: [AccordionComponent, AccordionPanelComponent],\n exports: [AccordionComponent, AccordionPanelComponent],\n})\nexport class AccordionModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"seniorsistemas-angular-components-accordion.mjs","sources":["../../projects/angular-components/accordion/src/lib/accordion/components/accordion-panel/accordion-panel.component.ts","../../projects/angular-components/accordion/src/lib/accordion/components/accordion-panel/accordion-panel.component.html","../../projects/angular-components/accordion/src/lib/accordion/accordion.component.ts","../../projects/angular-components/accordion/src/lib/accordion/accordion.component.html","../../projects/angular-components/accordion/src/lib/accordion/accordion.module.ts","../../projects/angular-components/accordion/src/seniorsistemas-angular-components-accordion.ts"],"sourcesContent":["import { AfterViewInit, Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { trigger, style, animate, transition, state } from '@angular/animations';\n\nimport { UntypedFormControl } from '@angular/forms';\nimport { AccordionButtonSettings, ValidationMessageIconColor } from '../../models/accordion-button-settings';\n\n/**\n * @description Painel individual do {@link AccordionComponent}. Gerencia o estado de\n * abertura/fechamento com animação, podendo conter um switch de controle via `switchControl`,\n * botões de ação configuráveis e uma mensagem de validação com ícone.\n *\n * @example\n * ```html\n * <s-accordion-panel\n * header=\"Configurações\"\n * [disabled]=\"false\"\n * (panelOpened)=\"onOpen()\"\n * (panelClosed)=\"onClose()\">\n * <p>Conteúdo do painel</p>\n * </s-accordion-panel>\n * ```\n *\n * @category Inputs\n */\n@Component({\n selector: 's-accordion-panel',\n templateUrl: './accordion-panel.component.html',\n styleUrls: ['./accordion-panel.component.scss'],\n animations: [\n trigger('cachelessAnimation', [\n transition(':enter', [style({ height: '0' }), animate('200ms linear', style({ height: '*' }))]),\n transition(':leave', [style({ height: '*' }), animate('200ms linear', style({ height: '0' }))]),\n ]),\n trigger('cacheAnimation', [\n state('true', style({ height: '*' })),\n state('false', style({ height: '0px' })),\n transition('* => *', animate('200ms')),\n ]),\n ],\n})\nexport class AccordionPanelComponent implements OnChanges, AfterViewInit {\n /**\n * @description Título exibido no cabeçalho do painel. Campo obrigatório.\n */\n @Input({ required: true })\n public header!: string;\n\n /**\n * @description Lista de botões de ação exibidos no cabeçalho do painel,\n * à direita do título. Cada item define ícone, tooltip e callback de clique.\n */\n @Input()\n public buttons?: AccordionButtonSettings[];\n\n /**\n * @description Desabilita a interação do usuário com o painel, impedindo abertura e fechamento.\n *\n * @default false\n */\n @Input()\n public disabled = false;\n\n /**\n * @description `FormControl` vinculado a um switch exibido no cabeçalho do painel.\n * Permite habilitar/desabilitar o conteúdo do painel via toggle.\n */\n @Input()\n public switchControl?: UntypedFormControl;\n\n /**\n * @description Mensagem de validação exibida abaixo do cabeçalho, acompanhada de um ícone.\n * Útil para indicar erros ou alertas relacionados ao conteúdo do painel.\n */\n @Input()\n public validationMessage?: string;\n\n /**\n * @description Mantém o conteúdo do painel no DOM mesmo quando fechado (modo cache).\n * Útil para preservar o estado de componentes internos ao reabrir o painel.\n *\n * @default false\n */\n @Input()\n public cache = false;\n\n /**\n * @description Classe do ícone exibido ao lado da mensagem de validação.\n *\n * @default 'fas fa-exclamation-circle'\n */\n @Input() validationMessageIcon = 'fas fa-exclamation-circle';\n\n /**\n * @description Cor do ícone da mensagem de validação.\n *\n * @default 'Red'\n */\n @Input() validationMessageIconColor: ValidationMessageIconColor = 'Red';\n\n /**\n * @description Emitido quando o painel é aberto pelo usuário.\n */\n @Output()\n public panelOpened = new EventEmitter<void>();\n\n /**\n * @description Emitido quando o painel é fechado pelo usuário.\n */\n @Output()\n public panelClosed = new EventEmitter<void>();\n\n public isAnimating = false;\n public isContentAnimationDisabled = true;\n\n private _isOpen = false;\n\n public get isOpen() {\n return this._isOpen;\n }\n\n public set isOpen(isOpen: boolean) {\n this._isOpen = isOpen;\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if ('disabled' in changes && this.switchControl) {\n if (changes['disabled'].currentValue) {\n this.switchControl.disable({ emitEvent: false });\n } else {\n this.switchControl.enable({ emitEvent: false });\n }\n }\n\n if ('switch' in changes && 'switchControl' in changes) {\n throw new Error(\"You can't set switch and switchControl together.\");\n }\n }\n\n public ngAfterViewInit(): void {\n // to executed at a safe time prior to control returning to the browser's event loop\n queueMicrotask(() => {\n this.isContentAnimationDisabled = false;\n });\n }\n\n public onIconButtonsClick(event: Event, callback: VoidFunction) {\n if (this.disabled) {\n return;\n }\n\n event.stopPropagation();\n callback();\n }\n\n public onTabClick() {\n if (this.disabled || this.isAnimating) {\n return;\n }\n this.isOpen = !this.isOpen;\n this._emitPanelEvent();\n }\n\n public onContentAnimationStart() {\n this.isAnimating = true;\n }\n\n public onContentAnimationDone() {\n this.isAnimating = false;\n\n this._emitPanelEvent();\n }\n\n private _emitPanelEvent() {\n if (this.isOpen) {\n this.panelOpened.emit();\n } else {\n this.panelClosed.emit();\n }\n }\n}\n\n","<div\n class=\"accordion-panel\"\n [class.accordion-panel--open]=\"isOpen\"\n [class.accordion-panel--disabled]=\"disabled\"\n>\n <div\n class=\"header\"\n (click)=\"onTabClick()\"\n >\n <div class=\"header__title\">\n <span\n class=\"icon fas\"\n [class.fa-minus]=\"isOpen\"\n [class.fa-plus]=\"!isOpen\"\n >\n </span>\n @if (validationMessage) {\n <span\n class=\"exclamation-icon\"\n [class]=\"validationMessageIcon\"\n [sTooltip]=\"validationMessage\"\n [class.exclamation-icon-red]=\"validationMessageIconColor === 'Red'\"\n [class.exclamation-icon-orange]=\"validationMessageIconColor === 'Orange'\"\n [class.exclamation-icon-yellow]=\"validationMessageIconColor === 'Yellow'\"\n [class.exclamation-icon-green]=\"validationMessageIconColor === 'Green'\"\n [class.exclamation-icon-blue]=\"validationMessageIconColor === 'Blue'\"\n >\n </span>\n }\n <span class=\"title\">{{ header }}</span>\n </div>\n <div class=\"header__controls\">\n @for (button of buttons; track button.icon) {\n <button\n class=\"icon-button\"\n [ngClass]=\"button.icon\"\n (click)=\"onIconButtonsClick($event, button.onClick)\"\n ></button>\n }\n\n @if (switchControl) {\n <s-switch\n class=\"switch\"\n [formControl]=\"switchControl\"\n (click)=\"$event.stopPropagation()\"\n >\n </s-switch>\n }\n </div>\n </div>\n\n @if (cache) {\n <div\n class=\"content\"\n [@cacheAnimation]=\"isOpen\"\n [@.disabled]=\"isContentAnimationDisabled\"\n (@cacheAnimation.start)=\"onContentAnimationStart()\"\n (@cacheAnimation.done)=\"onContentAnimationDone()\"\n >\n <div class=\"content-container\">\n <ng-container [ngTemplateOutlet]=\"panelContent\"></ng-container>\n </div>\n </div>\n } @else {\n @if (isOpen) {\n <div\n class=\"content\"\n @cachelessAnimation\n [@.disabled]=\"isContentAnimationDisabled\"\n (@cachelessAnimation.start)=\"onContentAnimationStart()\"\n (@cachelessAnimation.done)=\"onContentAnimationDone()\"\n >\n <div class=\"content-container\">\n <ng-container [ngTemplateOutlet]=\"panelContent\"></ng-container>\n </div>\n </div>\n }\n }\n</div>\n\n<ng-template #panelContent>\n <ng-content></ng-content>\n</ng-template>\n","import {\n AfterContentInit,\n OnChanges,\n Component,\n ContentChildren,\n Input,\n QueryList,\n SimpleChanges,\n OnDestroy,\n} from '@angular/core';\n\nimport { AccordionPanelComponent } from './components/accordion-panel/accordion-panel.component';\nimport { Subject, Subscription } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n/**\n * @description Componente de acordeão que gerencia a abertura e o fechamento de painéis\n * {@link AccordionPanelComponent}. Suporta modo de painel único (apenas um aberto por vez)\n * ou modo múltiplo (vários painéis abertos simultaneamente), configurável via input `multiple`.\n *\n * @example\n * ```html\n * <s-accordion [multiple]=\"false\" [activeIndex]=\"0\">\n * <s-accordion-panel header=\"Seção 1\">Conteúdo 1</s-accordion-panel>\n * <s-accordion-panel header=\"Seção 2\">Conteúdo 2</s-accordion-panel>\n * </s-accordion>\n * ```\n *\n * @category Inputs\n */\n@Component({\n selector: 's-accordion',\n templateUrl: './accordion.component.html',\n styleUrls: ['./accordion.component.scss'],\n})\nexport class AccordionComponent implements AfterContentInit, OnChanges, OnDestroy {\n /**\n * @description Índice (ou lista de índices) do(s) painel(is) que devem iniciar abertos.\n * Aceita um número para painel único ou um array de números para o modo múltiplo.\n */\n @Input()\n public activeIndex?: number | number[];\n\n /**\n * @description Permite que múltiplos painéis estejam abertos ao mesmo tempo.\n * Quando `false`, abrir um painel fecha automaticamente o anterior.\n *\n * @default false\n */\n @Input()\n public multiple = false;\n\n @ContentChildren(AccordionPanelComponent)\n public panelsComponents?: QueryList<AccordionPanelComponent>;\n\n private readonly _unsubscribe$ = new Subject<void>();\n private _panels: AccordionPanelComponent[] = [];\n private _openSubs: Subscription[] = [];\n\n public ngAfterContentInit(): void {\n if (this.panelsComponents) {\n this._panels = this.panelsComponents?.toArray();\n }\n\n this._openSubs = Array.from({ length: this._panels.length });\n\n this._setBehavior(this.multiple);\n this._setupTabs();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes['multiple']) {\n this._setBehavior(changes['multiple'].currentValue);\n }\n }\n\n public ngOnDestroy(): void {\n this._unsubscribe$.next();\n this._unsubscribe$.complete();\n }\n\n private _setupTabs(): void {\n if (this._panels?.length) {\n if (this.activeIndex !== undefined && this.activeIndex !== null) {\n const activeTabs = Array.isArray(this.activeIndex)\n ? this._panels.filter((_, index) => (this.activeIndex as number[]).includes(index))\n : [this._panels[this.activeIndex]];\n\n if (activeTabs.length === 0) {\n throw new Error('activeIndex does not represent any panel.');\n }\n\n for (const activeTab of activeTabs) {\n if (!activeTab.disabled) {\n activeTab.isOpen = true;\n }\n }\n }\n }\n }\n\n private _closeOtherTabs(exception: number) {\n this._panels.forEach((panel, index) => {\n if (index !== exception) {\n panel.isOpen = false;\n }\n });\n }\n\n private _setBehavior(multiple: boolean): void {\n if (multiple) {\n this._enableMultiplePanelBehavior();\n } else {\n this._enableSinglePanelBehavior();\n }\n }\n\n private _enableSinglePanelBehavior() {\n this._panels.forEach((panel, index) => {\n this._openSubs[index] = panel.panelOpened.pipe(takeUntil(this._unsubscribe$)).subscribe(() => {\n this._closeOtherTabs(index);\n });\n });\n }\n\n private _enableMultiplePanelBehavior() {\n this._panels.forEach((_, index) => {\n if (this._openSubs[index]) {\n this._openSubs[index].unsubscribe();\n }\n });\n }\n}\n\n","<div class=\"accordion\">\n <ng-content></ng-content>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { AccordionComponent } from './accordion.component';\nimport { AccordionPanelComponent } from './components/accordion-panel/accordion-panel.component';\nimport { TooltipModule } from '@seniorsistemas/angular-components/tooltip';\nimport { SwitchModule } from '@seniorsistemas/angular-components/switch';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n TooltipModule,\n SwitchModule,\n ],\n declarations: [AccordionComponent, AccordionPanelComponent],\n exports: [AccordionComponent, AccordionPanelComponent],\n})\nexport class AccordionModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -42,11 +42,11 @@ class BreadcrumbListComponent {
42
42
  }
43
43
  }
44
44
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BreadcrumbListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
45
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: BreadcrumbListComponent, isStandalone: true, selector: "s-breadcrumb-list", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<nav\n [attr.aria-label]=\"'platform.angular_components.breadcrumb-aria-label' | translate\"\n class=\"mb-4 mt-4\"\n>\n <ol class=\"flex select-none flex-wrap items-center gap-3 pb-3 pt-3 [&_li]:font-open-sans [&_li]:text-sm\">\n @for (breadcrumbItem of items(); track $index; let first = $first) {\n @if (breadcrumbItem.icon) {\n <li>\n @if (!first) {\n <i class=\"fas fa-chevron-right\"></i>\n }\n </li>\n\n <ng-template #iconTemplate>\n <i\n [class]=\"breadcrumbItem.icon + (first ? ' text-criticality-blue' : '')\"\n ></i>\n </ng-template>\n\n @if (breadcrumbItem.url) {\n <a\n [href]=\"breadcrumbItem.url\"\n [target]=\"breadcrumbItem.target\"\n class=\"text-criticality-blue\"\n >\n <ng-container *ngTemplateOutlet=\"iconTemplate\"></ng-container>\n </a>\n } @else {\n <ng-container *ngTemplateOutlet=\"iconTemplate\"></ng-container>\n }\n }\n @if (breadcrumbItem.routerLink && !breadcrumbItem.disabled) {\n <i class=\"fas fa-chevron-right\"></i>\n <li>\n <a\n [routerLink]=\"breadcrumbItem.routerLink\"\n [queryParams]=\"breadcrumbItem.queryParams\"\n [queryParamsHandling]=\"breadcrumbItem.queryParams ? null : 'preserve'\"\n [target]=\"breadcrumbItem.target\"\n (sInteractiveContent)=\"onActivateRoute(breadcrumbItem)\"\n class=\"cursor-pointer text-primary hover:no-underline\"\n >\n {{ breadcrumbItem.label }}\n </a>\n </li>\n } @else if (breadcrumbItem.label) {\n <i class=\"fas fa-chevron-right\"></i>\n <li>{{ breadcrumbItem.label }}</li>\n }\n }\n </ol>\n</nav>\n\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "directive", type: InteractiveContentDirective, selector: "[sInteractiveContent]", inputs: ["focusable", "disabled", "stopPropagation"], outputs: ["sInteractiveContent"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
45
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: BreadcrumbListComponent, isStandalone: true, selector: "s-breadcrumb-list", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<nav\n [attr.aria-label]=\"'platform.angular_components.breadcrumb_aria_label' | translate\"\n class=\"mb-4 mt-4\"\n>\n <ol class=\"flex select-none flex-wrap items-center gap-3 pb-3 pt-3 [&_li]:font-open-sans [&_li]:text-sm\">\n @for (breadcrumbItem of items(); track $index; let first = $first; let last = $last) {\n <li class=\"flex items-center gap-3\">\n @if (!first) {\n <i\n class=\"fas fa-chevron-right\"\n aria-hidden=\"true\"\n ></i>\n }\n\n <ng-template #iconTemplate>\n <i\n [class]=\"breadcrumbItem.icon + (first ? ' text-criticality-blue' : '')\"\n aria-hidden=\"true\"\n ></i>\n </ng-template>\n\n @if (first && breadcrumbItem.icon && breadcrumbItem.disabledIcon) {\n <span\n class=\"flex items-center gap-1\"\n aria-hidden=\"true\"\n >\n <i\n [class]=\"breadcrumbItem.icon + ' text-grayscale-30'\"\n aria-hidden=\"true\"\n ></i>\n </span>\n }\n\n @if (breadcrumbItem.url) {\n <a\n [href]=\"breadcrumbItem.url\"\n [target]=\"breadcrumbItem.target\"\n class=\"flex items-center gap-1 text-criticality-blue\"\n [attr.aria-current]=\"last ? 'page' : null\"\n [attr.aria-label]=\"\n (first ? 'In\u00EDcio: ' : 'Navegar para ') +\n breadcrumbItem.label +\n (last ? ' (p\u00E1gina atual)' : '')\n \"\n >\n @if (breadcrumbItem.icon && !(first && breadcrumbItem.disabledIcon)) {\n <ng-container *ngTemplateOutlet=\"iconTemplate\"></ng-container>\n }\n @if (breadcrumbItem.label && !breadcrumbItem.hideLabel && !first) {\n <span>{{ breadcrumbItem.label }}</span>\n <span class=\"sr-only\"> (link externo)</span>\n }\n </a>\n } @else if (breadcrumbItem.routerLink && !breadcrumbItem.disabled) {\n <a\n [routerLink]=\"breadcrumbItem.routerLink\"\n [queryParams]=\"breadcrumbItem.queryParams\"\n [queryParamsHandling]=\"breadcrumbItem.queryParams ? null : 'preserve'\"\n [target]=\"breadcrumbItem.target\"\n (sInteractiveContent)=\"onActivateRoute(breadcrumbItem)\"\n class=\"flex cursor-pointer items-center gap-1 text-primary hover:no-underline\"\n [attr.aria-current]=\"last ? 'page' : null\"\n [attr.aria-label]=\"\n (first ? 'In\u00EDcio: ' : '') + breadcrumbItem.label + (last ? ' (p\u00E1gina atual)' : '')\n \"\n >\n @if (breadcrumbItem.icon && !(first && breadcrumbItem.disabledIcon)) {\n <ng-container *ngTemplateOutlet=\"iconTemplate\"></ng-container>\n }\n @if (breadcrumbItem.label && !breadcrumbItem.hideLabel) {\n <span>{{ breadcrumbItem.label }}</span>\n <span class=\"sr-only\"> (navega\u00E7\u00E3o interna)</span>\n }\n </a>\n } @else {\n <span\n class=\"flex items-center gap-1\"\n [attr.aria-current]=\"last ? 'page' : null\"\n >\n @if (breadcrumbItem.icon && !(first && breadcrumbItem.disabledIcon)) {\n <ng-container *ngTemplateOutlet=\"iconTemplate\"></ng-container>\n }\n @if (breadcrumbItem.label && !breadcrumbItem.hideLabel && !first) {\n <span>{{ breadcrumbItem.label }}</span>\n }\n </span>\n }\n </li>\n }\n </ol>\n</nav>\n\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "directive", type: InteractiveContentDirective, selector: "[sInteractiveContent]", inputs: ["focusable", "disabled", "stopPropagation"], outputs: ["sInteractiveContent"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
46
46
  }
47
47
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BreadcrumbListComponent, decorators: [{
48
48
  type: Component,
49
- args: [{ selector: 's-breadcrumb-list', standalone: true, imports: [CommonModule, TranslateModule, InteractiveContentDirective, RouterModule], template: "<nav\n [attr.aria-label]=\"'platform.angular_components.breadcrumb-aria-label' | translate\"\n class=\"mb-4 mt-4\"\n>\n <ol class=\"flex select-none flex-wrap items-center gap-3 pb-3 pt-3 [&_li]:font-open-sans [&_li]:text-sm\">\n @for (breadcrumbItem of items(); track $index; let first = $first) {\n @if (breadcrumbItem.icon) {\n <li>\n @if (!first) {\n <i class=\"fas fa-chevron-right\"></i>\n }\n </li>\n\n <ng-template #iconTemplate>\n <i\n [class]=\"breadcrumbItem.icon + (first ? ' text-criticality-blue' : '')\"\n ></i>\n </ng-template>\n\n @if (breadcrumbItem.url) {\n <a\n [href]=\"breadcrumbItem.url\"\n [target]=\"breadcrumbItem.target\"\n class=\"text-criticality-blue\"\n >\n <ng-container *ngTemplateOutlet=\"iconTemplate\"></ng-container>\n </a>\n } @else {\n <ng-container *ngTemplateOutlet=\"iconTemplate\"></ng-container>\n }\n }\n @if (breadcrumbItem.routerLink && !breadcrumbItem.disabled) {\n <i class=\"fas fa-chevron-right\"></i>\n <li>\n <a\n [routerLink]=\"breadcrumbItem.routerLink\"\n [queryParams]=\"breadcrumbItem.queryParams\"\n [queryParamsHandling]=\"breadcrumbItem.queryParams ? null : 'preserve'\"\n [target]=\"breadcrumbItem.target\"\n (sInteractiveContent)=\"onActivateRoute(breadcrumbItem)\"\n class=\"cursor-pointer text-primary hover:no-underline\"\n >\n {{ breadcrumbItem.label }}\n </a>\n </li>\n } @else if (breadcrumbItem.label) {\n <i class=\"fas fa-chevron-right\"></i>\n <li>{{ breadcrumbItem.label }}</li>\n }\n }\n </ol>\n</nav>\n\n" }]
49
+ args: [{ selector: 's-breadcrumb-list', standalone: true, imports: [CommonModule, TranslateModule, InteractiveContentDirective, RouterModule], template: "<nav\n [attr.aria-label]=\"'platform.angular_components.breadcrumb_aria_label' | translate\"\n class=\"mb-4 mt-4\"\n>\n <ol class=\"flex select-none flex-wrap items-center gap-3 pb-3 pt-3 [&_li]:font-open-sans [&_li]:text-sm\">\n @for (breadcrumbItem of items(); track $index; let first = $first; let last = $last) {\n <li class=\"flex items-center gap-3\">\n @if (!first) {\n <i\n class=\"fas fa-chevron-right\"\n aria-hidden=\"true\"\n ></i>\n }\n\n <ng-template #iconTemplate>\n <i\n [class]=\"breadcrumbItem.icon + (first ? ' text-criticality-blue' : '')\"\n aria-hidden=\"true\"\n ></i>\n </ng-template>\n\n @if (first && breadcrumbItem.icon && breadcrumbItem.disabledIcon) {\n <span\n class=\"flex items-center gap-1\"\n aria-hidden=\"true\"\n >\n <i\n [class]=\"breadcrumbItem.icon + ' text-grayscale-30'\"\n aria-hidden=\"true\"\n ></i>\n </span>\n }\n\n @if (breadcrumbItem.url) {\n <a\n [href]=\"breadcrumbItem.url\"\n [target]=\"breadcrumbItem.target\"\n class=\"flex items-center gap-1 text-criticality-blue\"\n [attr.aria-current]=\"last ? 'page' : null\"\n [attr.aria-label]=\"\n (first ? 'In\u00EDcio: ' : 'Navegar para ') +\n breadcrumbItem.label +\n (last ? ' (p\u00E1gina atual)' : '')\n \"\n >\n @if (breadcrumbItem.icon && !(first && breadcrumbItem.disabledIcon)) {\n <ng-container *ngTemplateOutlet=\"iconTemplate\"></ng-container>\n }\n @if (breadcrumbItem.label && !breadcrumbItem.hideLabel && !first) {\n <span>{{ breadcrumbItem.label }}</span>\n <span class=\"sr-only\"> (link externo)</span>\n }\n </a>\n } @else if (breadcrumbItem.routerLink && !breadcrumbItem.disabled) {\n <a\n [routerLink]=\"breadcrumbItem.routerLink\"\n [queryParams]=\"breadcrumbItem.queryParams\"\n [queryParamsHandling]=\"breadcrumbItem.queryParams ? null : 'preserve'\"\n [target]=\"breadcrumbItem.target\"\n (sInteractiveContent)=\"onActivateRoute(breadcrumbItem)\"\n class=\"flex cursor-pointer items-center gap-1 text-primary hover:no-underline\"\n [attr.aria-current]=\"last ? 'page' : null\"\n [attr.aria-label]=\"\n (first ? 'In\u00EDcio: ' : '') + breadcrumbItem.label + (last ? ' (p\u00E1gina atual)' : '')\n \"\n >\n @if (breadcrumbItem.icon && !(first && breadcrumbItem.disabledIcon)) {\n <ng-container *ngTemplateOutlet=\"iconTemplate\"></ng-container>\n }\n @if (breadcrumbItem.label && !breadcrumbItem.hideLabel) {\n <span>{{ breadcrumbItem.label }}</span>\n <span class=\"sr-only\"> (navega\u00E7\u00E3o interna)</span>\n }\n </a>\n } @else {\n <span\n class=\"flex items-center gap-1\"\n [attr.aria-current]=\"last ? 'page' : null\"\n >\n @if (breadcrumbItem.icon && !(first && breadcrumbItem.disabledIcon)) {\n <ng-container *ngTemplateOutlet=\"iconTemplate\"></ng-container>\n }\n @if (breadcrumbItem.label && !breadcrumbItem.hideLabel && !first) {\n <span>{{ breadcrumbItem.label }}</span>\n }\n </span>\n }\n </li>\n }\n </ol>\n</nav>\n\n" }]
50
50
  }] });
51
51
 
52
52
  class DynamicBreadcrumbComponent {
@@ -95,7 +95,12 @@ class DynamicBreadcrumbComponent {
95
95
  currentHome = { url: this.homeUrl, icon: 'fa fa-home', target: this.targetHomeUrl };
96
96
  }
97
97
  else if (routes.length) {
98
- currentHome = { ...this._getMenuItem(routes[0], routes.length === 1), icon: 'fa fa-home' };
98
+ currentHome = {
99
+ ...this._getMenuItem(routes[0], routes.length === 1),
100
+ disabledIcon: routes.length === 1,
101
+ hideLabel: routes.length > 1,
102
+ icon: 'fa fa-home',
103
+ };
99
104
  }
100
105
  return currentHome;
101
106
  }
@@ -111,10 +116,7 @@ class DynamicBreadcrumbComponent {
111
116
  }
112
117
  _getMenuItem(route, disabled = false) {
113
118
  const label = this._getTitle(route);
114
- const routes = route.pathFromRoot;
115
- const routerLink = routes
116
- .slice(0, routes.indexOf(route) + 1)
117
- .reduce((result, item) => [...result, ...item.snapshot.url.map((url) => url.path)], ['/']);
119
+ const routerLink = ['/', ...route.pathFromRoot.flatMap((item) => item.snapshot.url.map((url) => url.path))];
118
120
  return {
119
121
  disabled,
120
122
  label,
@@ -1 +1 @@
1
- {"version":3,"file":"seniorsistemas-angular-components-breadcrumb.mjs","sources":["../../projects/angular-components/breadcrumb/src/lib/breadcrumb/breadcrumb.component.ts","../../projects/angular-components/breadcrumb/src/lib/breadcrumb/breadcrumb.component.html","../../projects/angular-components/breadcrumb/src/lib/dynamic-breadcrumb/dynamic-breadcrumb.component.ts","../../projects/angular-components/breadcrumb/src/lib/dynamic-breadcrumb/dynamic-breadcrumb.component.html","../../projects/angular-components/breadcrumb/src/lib/dynamic-breadcrumb/dynamic-breadcrumb.module.ts","../../projects/angular-components/breadcrumb/src/seniorsistemas-angular-components-breadcrumb.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { Component, inject, input } from '@angular/core';\nimport { Router, RouterModule } from '@angular/router';\n\nimport { TranslateModule } from '@ngx-translate/core';\nimport { InteractiveContentDirective } from '@seniorsistemas/angular-components/interactive-content';\n\nimport { BreadcrumbItem } from './breadcrumb-models';\n\n/**\n * @description Componente de trilha de navegação (breadcrumb) que detecta automaticamente\n * a rota ativa do Angular Router e constrói o caminho hierárquico de páginas.\n * Cada segmento da rota precisa ter a propriedade `routeTitle` definida nos `data` da rota.\n *\n * @example\n * ```html\n * <s-breadcrumb homeUrl=\"/home\" targetHomeUrl=\"_self\" />\n * ```\n *\n * @category Navegação\n */\n@Component({\n selector: 's-breadcrumb-list',\n standalone: true,\n imports: [CommonModule, TranslateModule, InteractiveContentDirective, RouterModule],\n templateUrl: './breadcrumb.component.html',\n})\nexport class BreadcrumbListComponent {\n public readonly items = input.required<BreadcrumbItem[]>();\n\n private readonly router = inject(Router);\n\n protected onActivateRoute(activatedBreadcrumb: BreadcrumbItem): void {\n if (!activatedBreadcrumb.routerLink || activatedBreadcrumb.disabled) {\n return;\n }\n\n const routerLink = Array.isArray(activatedBreadcrumb.routerLink)\n ? activatedBreadcrumb.routerLink\n : [activatedBreadcrumb.routerLink];\n\n if (activatedBreadcrumb.queryParams) {\n this.router.navigate(routerLink, { queryParams: activatedBreadcrumb.queryParams });\n } else {\n this.router.navigate(routerLink, { queryParamsHandling: 'preserve' });\n }\n }\n}\n\n","<nav\n [attr.aria-label]=\"'platform.angular_components.breadcrumb-aria-label' | translate\"\n class=\"mb-4 mt-4\"\n>\n <ol class=\"flex select-none flex-wrap items-center gap-3 pb-3 pt-3 [&_li]:font-open-sans [&_li]:text-sm\">\n @for (breadcrumbItem of items(); track $index; let first = $first) {\n @if (breadcrumbItem.icon) {\n <li>\n @if (!first) {\n <i class=\"fas fa-chevron-right\"></i>\n }\n </li>\n\n <ng-template #iconTemplate>\n <i\n [class]=\"breadcrumbItem.icon + (first ? ' text-criticality-blue' : '')\"\n ></i>\n </ng-template>\n\n @if (breadcrumbItem.url) {\n <a\n [href]=\"breadcrumbItem.url\"\n [target]=\"breadcrumbItem.target\"\n class=\"text-criticality-blue\"\n >\n <ng-container *ngTemplateOutlet=\"iconTemplate\"></ng-container>\n </a>\n } @else {\n <ng-container *ngTemplateOutlet=\"iconTemplate\"></ng-container>\n }\n }\n @if (breadcrumbItem.routerLink && !breadcrumbItem.disabled) {\n <i class=\"fas fa-chevron-right\"></i>\n <li>\n <a\n [routerLink]=\"breadcrumbItem.routerLink\"\n [queryParams]=\"breadcrumbItem.queryParams\"\n [queryParamsHandling]=\"breadcrumbItem.queryParams ? null : 'preserve'\"\n [target]=\"breadcrumbItem.target\"\n (sInteractiveContent)=\"onActivateRoute(breadcrumbItem)\"\n class=\"cursor-pointer text-primary hover:no-underline\"\n >\n {{ breadcrumbItem.label }}\n </a>\n </li>\n } @else if (breadcrumbItem.label) {\n <i class=\"fas fa-chevron-right\"></i>\n <li>{{ breadcrumbItem.label }}</li>\n }\n }\n </ol>\n</nav>\n\n","import { Component, Input, OnDestroy } from '@angular/core';\nimport { ActivatedRoute, NavigationEnd, PRIMARY_OUTLET, Router } from '@angular/router';\nimport {\n DEPRECATED_CONFIG,\n DeprecatedSelectorDirective,\n} from '@seniorsistemas/angular-components/common/deprecated-selector';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { BreadcrumbItem } from '../breadcrumb/breadcrumb-models';\nimport { BreadcrumbListComponent } from '../breadcrumb/breadcrumb.component';\n\n@Component({\n standalone: true,\n imports: [BreadcrumbListComponent],\n selector: 's-breadcrumb, s-dynamic-breadcrumb',\n templateUrl: './dynamic-breadcrumb.component.html',\n hostDirectives: [DeprecatedSelectorDirective],\n providers: [\n {\n provide: DEPRECATED_CONFIG,\n useValue: {\n oldSelector: 's-breadcrumb',\n newSelector: 's-dynamic-breadcrumb',\n removalVersion: '20.0.0',\n },\n },\n ],\n})\nexport class DynamicBreadcrumbComponent implements OnDestroy {\n @Input()\n public homeUrl?: string;\n\n @Input()\n public targetHomeUrl = '_self';\n\n public items: BreadcrumbItem[] = [];\n public title?: string;\n\n private readonly _ngUnsubscribe = new Subject<void>();\n\n constructor(\n private readonly _activatedRoute: ActivatedRoute,\n private readonly _router: Router,\n ) {\n this._router.events\n .pipe(\n takeUntil(this._ngUnsubscribe),\n filter((event) => event instanceof NavigationEnd),\n )\n .subscribe(() => this._onNavigationEnd());\n }\n\n public ngOnDestroy() {\n this._ngUnsubscribe.next();\n this._ngUnsubscribe.complete();\n }\n\n private _onNavigationEnd() {\n const currentRoute = this._activatedRoute.root;\n const validRoutes: ActivatedRoute[] = this._getValidChildren(currentRoute);\n\n this.title = this._getCurrentTitle(validRoutes) ?? '';\n this.items = this._getCurrentItems(validRoutes) || [];\n const currentHome = this._getCurrentHome(validRoutes);\n if (currentHome) {\n this.items.unshift(currentHome);\n }\n }\n\n private _getValidChildren(route: ActivatedRoute): ActivatedRoute[] {\n const valid = route.routeConfig?.path && route.routeConfig?.component && route.outlet === PRIMARY_OUTLET;\n return route.children.reduce(\n (validRoutes, child) => [...validRoutes, ...this._getValidChildren(child)],\n valid ? [route] : [],\n );\n }\n\n private _getCurrentTitle(routes: ActivatedRoute[]): string | null {\n const last = routes.at(-1);\n\n if (last?.routeConfig) {\n return this._getTitle(last);\n }\n\n return null;\n }\n\n private _getCurrentHome(routes: ActivatedRoute[]) {\n let currentHome: BreadcrumbItem | undefined;\n\n if (this.homeUrl) {\n currentHome = { url: this.homeUrl, icon: 'fa fa-home', target: this.targetHomeUrl };\n } else if (routes.length) {\n currentHome = { ...this._getMenuItem(routes[0], routes.length === 1), icon: 'fa fa-home' };\n }\n\n return currentHome;\n }\n\n private _getCurrentItems(routes: ActivatedRoute[]): BreadcrumbItem[] {\n if (!routes.length) {\n return [];\n }\n\n const items = this.homeUrl ? routes : routes.slice(1);\n\n if (items.length) {\n return items.map((route, i) => this._getMenuItem(route, i === items.length - 1));\n }\n return [];\n }\n\n private _getMenuItem(route: ActivatedRoute, disabled = false): BreadcrumbItem {\n const label = this._getTitle(route);\n const routes = route.pathFromRoot;\n const routerLink = routes\n .slice(0, routes.indexOf(route) + 1)\n .reduce((result, item) => [...result, ...item.snapshot.url.map((url) => url.path)], ['/']);\n\n return {\n disabled,\n label,\n routerLink,\n queryParams: route.snapshot.queryParams,\n };\n }\n\n private _getTitle(route: ActivatedRoute): string {\n const { snapshot, routeConfig } = route;\n const title = snapshot.data['routeTitle'];\n\n if (!title) {\n throw new Error(`No routeTitle defined for the route /${routeConfig?.path}`);\n }\n return title;\n }\n}\n\n","<h1 class=\"sds-page-title\">{{ title }}</h1>\n<s-breadcrumb-list [items]=\"items\" />\n\n","import { NgModule } from '@angular/core';\n\nimport { DynamicBreadcrumbComponent } from './dynamic-breadcrumb.component';\n/**\n * @deprecated utilizar DynamicBreadcrumbComponent (standalone)\n */\n@NgModule({\n imports: [DynamicBreadcrumbComponent],\n exports: [DynamicBreadcrumbComponent],\n})\nexport class BreadcrumbModule {}\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3","i1","i2"],"mappings":"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"}
1
+ {"version":3,"file":"seniorsistemas-angular-components-breadcrumb.mjs","sources":["../../projects/angular-components/breadcrumb/src/lib/breadcrumb/breadcrumb.component.ts","../../projects/angular-components/breadcrumb/src/lib/breadcrumb/breadcrumb.component.html","../../projects/angular-components/breadcrumb/src/lib/dynamic-breadcrumb/dynamic-breadcrumb.component.ts","../../projects/angular-components/breadcrumb/src/lib/dynamic-breadcrumb/dynamic-breadcrumb.component.html","../../projects/angular-components/breadcrumb/src/lib/dynamic-breadcrumb/dynamic-breadcrumb.module.ts","../../projects/angular-components/breadcrumb/src/seniorsistemas-angular-components-breadcrumb.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { Component, inject, input } from '@angular/core';\nimport { Router, RouterModule } from '@angular/router';\n\nimport { TranslateModule } from '@ngx-translate/core';\nimport { InteractiveContentDirective } from '@seniorsistemas/angular-components/interactive-content';\n\nimport { BreadcrumbItem } from './breadcrumb-models';\n\n/**\n * @description Componente de trilha de navegação (breadcrumb) que detecta automaticamente\n * a rota ativa do Angular Router e constrói o caminho hierárquico de páginas.\n * Cada segmento da rota precisa ter a propriedade `routeTitle` definida nos `data` da rota.\n *\n * @example\n * ```html\n * <s-breadcrumb homeUrl=\"/home\" targetHomeUrl=\"_self\" />\n * ```\n *\n * @category Navegação\n */\n@Component({\n selector: 's-breadcrumb-list',\n standalone: true,\n imports: [CommonModule, TranslateModule, InteractiveContentDirective, RouterModule],\n templateUrl: './breadcrumb.component.html',\n})\nexport class BreadcrumbListComponent {\n public readonly items = input.required<BreadcrumbItem[]>();\n\n private readonly router = inject(Router);\n\n protected onActivateRoute(activatedBreadcrumb: BreadcrumbItem): void {\n if (!activatedBreadcrumb.routerLink || activatedBreadcrumb.disabled) {\n return;\n }\n\n const routerLink = Array.isArray(activatedBreadcrumb.routerLink)\n ? activatedBreadcrumb.routerLink\n : [activatedBreadcrumb.routerLink];\n\n if (activatedBreadcrumb.queryParams) {\n this.router.navigate(routerLink, { queryParams: activatedBreadcrumb.queryParams });\n } else {\n this.router.navigate(routerLink, { queryParamsHandling: 'preserve' });\n }\n }\n}\n\n","<nav\n [attr.aria-label]=\"'platform.angular_components.breadcrumb_aria_label' | translate\"\n class=\"mb-4 mt-4\"\n>\n <ol class=\"flex select-none flex-wrap items-center gap-3 pb-3 pt-3 [&_li]:font-open-sans [&_li]:text-sm\">\n @for (breadcrumbItem of items(); track $index; let first = $first; let last = $last) {\n <li class=\"flex items-center gap-3\">\n @if (!first) {\n <i\n class=\"fas fa-chevron-right\"\n aria-hidden=\"true\"\n ></i>\n }\n\n <ng-template #iconTemplate>\n <i\n [class]=\"breadcrumbItem.icon + (first ? ' text-criticality-blue' : '')\"\n aria-hidden=\"true\"\n ></i>\n </ng-template>\n\n @if (first && breadcrumbItem.icon && breadcrumbItem.disabledIcon) {\n <span\n class=\"flex items-center gap-1\"\n aria-hidden=\"true\"\n >\n <i\n [class]=\"breadcrumbItem.icon + ' text-grayscale-30'\"\n aria-hidden=\"true\"\n ></i>\n </span>\n }\n\n @if (breadcrumbItem.url) {\n <a\n [href]=\"breadcrumbItem.url\"\n [target]=\"breadcrumbItem.target\"\n class=\"flex items-center gap-1 text-criticality-blue\"\n [attr.aria-current]=\"last ? 'page' : null\"\n [attr.aria-label]=\"\n (first ? 'Início: ' : 'Navegar para ') +\n breadcrumbItem.label +\n (last ? ' (página atual)' : '')\n \"\n >\n @if (breadcrumbItem.icon && !(first && breadcrumbItem.disabledIcon)) {\n <ng-container *ngTemplateOutlet=\"iconTemplate\"></ng-container>\n }\n @if (breadcrumbItem.label && !breadcrumbItem.hideLabel && !first) {\n <span>{{ breadcrumbItem.label }}</span>\n <span class=\"sr-only\"> (link externo)</span>\n }\n </a>\n } @else if (breadcrumbItem.routerLink && !breadcrumbItem.disabled) {\n <a\n [routerLink]=\"breadcrumbItem.routerLink\"\n [queryParams]=\"breadcrumbItem.queryParams\"\n [queryParamsHandling]=\"breadcrumbItem.queryParams ? null : 'preserve'\"\n [target]=\"breadcrumbItem.target\"\n (sInteractiveContent)=\"onActivateRoute(breadcrumbItem)\"\n class=\"flex cursor-pointer items-center gap-1 text-primary hover:no-underline\"\n [attr.aria-current]=\"last ? 'page' : null\"\n [attr.aria-label]=\"\n (first ? 'Início: ' : '') + breadcrumbItem.label + (last ? ' (página atual)' : '')\n \"\n >\n @if (breadcrumbItem.icon && !(first && breadcrumbItem.disabledIcon)) {\n <ng-container *ngTemplateOutlet=\"iconTemplate\"></ng-container>\n }\n @if (breadcrumbItem.label && !breadcrumbItem.hideLabel) {\n <span>{{ breadcrumbItem.label }}</span>\n <span class=\"sr-only\"> (navegação interna)</span>\n }\n </a>\n } @else {\n <span\n class=\"flex items-center gap-1\"\n [attr.aria-current]=\"last ? 'page' : null\"\n >\n @if (breadcrumbItem.icon && !(first && breadcrumbItem.disabledIcon)) {\n <ng-container *ngTemplateOutlet=\"iconTemplate\"></ng-container>\n }\n @if (breadcrumbItem.label && !breadcrumbItem.hideLabel && !first) {\n <span>{{ breadcrumbItem.label }}</span>\n }\n </span>\n }\n </li>\n }\n </ol>\n</nav>\n\n","import { Component, Input, OnDestroy } from '@angular/core';\nimport { ActivatedRoute, NavigationEnd, PRIMARY_OUTLET, Router } from '@angular/router';\nimport {\n DEPRECATED_CONFIG,\n DeprecatedSelectorDirective,\n} from '@seniorsistemas/angular-components/common/deprecated-selector';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { BreadcrumbItem } from '../breadcrumb/breadcrumb-models';\nimport { BreadcrumbListComponent } from '../breadcrumb/breadcrumb.component';\n\n@Component({\n standalone: true,\n imports: [BreadcrumbListComponent],\n selector: 's-breadcrumb, s-dynamic-breadcrumb',\n templateUrl: './dynamic-breadcrumb.component.html',\n hostDirectives: [DeprecatedSelectorDirective],\n providers: [\n {\n provide: DEPRECATED_CONFIG,\n useValue: {\n oldSelector: 's-breadcrumb',\n newSelector: 's-dynamic-breadcrumb',\n removalVersion: '20.0.0',\n },\n },\n ],\n})\nexport class DynamicBreadcrumbComponent implements OnDestroy {\n @Input()\n public homeUrl?: string;\n\n @Input()\n public targetHomeUrl = '_self';\n\n public items: BreadcrumbItem[] = [];\n public title?: string;\n\n private readonly _ngUnsubscribe = new Subject<void>();\n\n constructor(\n private readonly _activatedRoute: ActivatedRoute,\n private readonly _router: Router,\n ) {\n this._router.events\n .pipe(\n takeUntil(this._ngUnsubscribe),\n filter((event) => event instanceof NavigationEnd),\n )\n .subscribe(() => this._onNavigationEnd());\n }\n\n public ngOnDestroy() {\n this._ngUnsubscribe.next();\n this._ngUnsubscribe.complete();\n }\n\n private _onNavigationEnd() {\n const currentRoute = this._activatedRoute.root;\n const validRoutes: ActivatedRoute[] = this._getValidChildren(currentRoute);\n\n this.title = this._getCurrentTitle(validRoutes) ?? '';\n this.items = this._getCurrentItems(validRoutes) || [];\n const currentHome = this._getCurrentHome(validRoutes);\n if (currentHome) {\n this.items.unshift(currentHome);\n }\n }\n\n private _getValidChildren(route: ActivatedRoute): ActivatedRoute[] {\n const valid = route.routeConfig?.path && route.routeConfig?.component && route.outlet === PRIMARY_OUTLET;\n return route.children.reduce(\n (validRoutes, child) => [...validRoutes, ...this._getValidChildren(child)],\n valid ? [route] : [],\n );\n }\n\n private _getCurrentTitle(routes: ActivatedRoute[]): string | null {\n const last = routes.at(-1);\n\n if (last?.routeConfig) {\n return this._getTitle(last);\n }\n\n return null;\n }\n\n private _getCurrentHome(routes: ActivatedRoute[]) {\n let currentHome: BreadcrumbItem | undefined;\n\n if (this.homeUrl) {\n currentHome = { url: this.homeUrl, icon: 'fa fa-home', target: this.targetHomeUrl };\n } else if (routes.length) {\n currentHome = {\n ...this._getMenuItem(routes[0], routes.length === 1),\n disabledIcon: routes.length === 1,\n hideLabel: routes.length > 1,\n icon: 'fa fa-home',\n };\n }\n\n return currentHome;\n }\n\n private _getCurrentItems(routes: ActivatedRoute[]): BreadcrumbItem[] {\n if (!routes.length) {\n return [];\n }\n\n const items = this.homeUrl ? routes : routes.slice(1);\n if (items.length) {\n return items.map((route, i) => this._getMenuItem(route, i === items.length - 1));\n }\n\n return [];\n }\n\n private _getMenuItem(route: ActivatedRoute, disabled = false): BreadcrumbItem {\n const label = this._getTitle(route);\n const routerLink = ['/', ...route.pathFromRoot.flatMap((item) => item.snapshot.url.map((url) => url.path))];\n\n return {\n disabled,\n label,\n routerLink,\n queryParams: route.snapshot.queryParams,\n };\n }\n\n private _getTitle(route: ActivatedRoute): string {\n const { snapshot, routeConfig } = route;\n const title = snapshot.data['routeTitle'];\n\n if (!title) {\n throw new Error(`No routeTitle defined for the route /${routeConfig?.path}`);\n }\n return title;\n }\n}\n\n","<h1 class=\"sds-page-title\">{{ title }}</h1>\n<s-breadcrumb-list [items]=\"items\" />\n\n","import { NgModule } from '@angular/core';\n\nimport { DynamicBreadcrumbComponent } from './dynamic-breadcrumb.component';\n/**\n * @deprecated utilizar DynamicBreadcrumbComponent (standalone)\n */\n@NgModule({\n imports: [DynamicBreadcrumbComponent],\n exports: [DynamicBreadcrumbComponent],\n})\nexport class BreadcrumbModule {}\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3","i1","i2"],"mappings":"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"}
@@ -108,7 +108,6 @@ class ButtonComponent {
108
108
  *
109
109
  * @default 'default'
110
110
  */
111
- menuAriaLabel;
112
111
  size = 'default';
113
112
  /**
114
113
  * @description Habilita o modo slide, que exibe uma animação de deslize ao passar o mouse.
@@ -129,10 +128,15 @@ class ButtonComponent {
129
128
  * @description Cor aplicada ao ícone do botão, sobrescrevendo a cor padrão do tema.
130
129
  */
131
130
  iconColor;
131
+ /**
132
+ * @description Texto alternativo para o menu associado ao botão, utilizado para acessibilidade.
133
+ */
134
+ menuAriaLabel;
132
135
  /**
133
136
  * @description Emitido ao clicar no botão, desde que não esteja desabilitado.
134
137
  */
135
138
  clicked = new EventEmitter();
139
+ isMenuOpen = false;
136
140
  validateSlideButton() {
137
141
  return !!(this.slide && (this.priority === 'default' || this.priority === 'link') && this.label?.length);
138
142
  }
@@ -140,22 +144,30 @@ class ButtonComponent {
140
144
  const hasIcon = this.iconClass;
141
145
  const hasText = this.label;
142
146
  const isMultiple = this.menuOptions?.length;
143
- if (hasText || (hasIcon && isMultiple))
147
+ if (hasText || (hasIcon && isMultiple)) {
144
148
  this.minWidth = '80px';
145
- if (hasText && hasIcon && isMultiple)
149
+ }
150
+ if (hasText && hasIcon && isMultiple) {
146
151
  this.minWidth = '100px';
152
+ }
147
153
  }
148
154
  isRotateAnimation() {
149
155
  return this.animation === 'rotate';
150
156
  }
157
+ onTieredMenuOpened() {
158
+ this.isMenuOpen = true;
159
+ }
160
+ onTieredMenuClosed() {
161
+ this.isMenuOpen = false;
162
+ }
151
163
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
152
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ButtonComponent, isStandalone: true, selector: "s-button", inputs: { id: "id", label: "label", tooltip: "tooltip", tooltipPosition: "tooltipPosition", iconClass: "iconClass", rightIconClass: "rightIconClass", caret: "caret", styleClass: "styleClass", baseZIndex: "baseZIndex", disabled: "disabled", auxiliary: "auxiliary", type: "type", priority: "priority", menuOptions: "menuOptions", menuAriaLabel: "menuAriaLabel", size: "size", slide: "slide", animation: "animation", badge: "badge", iconColor: "iconColor" }, outputs: { clicked: "clicked" }, host: { properties: { "class.s-button-with-badge": "!!badge", "style.min-width": "this.minWidth" } }, usesOnChanges: true, ngImport: i0, template: "<button\n [id]=\"id\"\n [type]=\"type\"\n [class]=\"styleClass\"\n [ngClass]=\"{\n 's-button-auxiliary': auxiliary,\n 's-button-with-icon': iconClass,\n 's-button-with-text': label,\n 's-button-only-icon': iconClass && !label && !menuOptions.length,\n 's-button-empty': !iconClass && !label,\n 's-button-size-default': size === 'default',\n 's-button-size-small': size === 'small',\n 's-button-priority-default': priority === 'default',\n 's-button-priority-primary': priority === 'primary',\n 's-button-priority-secondary': priority === 'secondary',\n 's-button-priority-link': priority === 'link',\n 's-button-priority-danger': priority === 'danger',\n 's-button-multiple': (caret && menuOptions.length) || rightIconClass,\n 's-button--slide': validateSlideButton(),\n 's-button--rotate-animation': isRotateAnimation(),\n }\"\n sTieredMenu\n [items]=\"menuOptions\"\n [ariaLabel]=\"menuAriaLabel\"\n [disabled]=\"disabled\"\n [sTooltip]=\"tooltip\"\n [tooltipPosition]=\"tooltipPosition\"\n (click)=\"clicked.emit($event)\"\n>\n @if (iconClass) {\n <span\n [class]=\"iconClass\"\n [ngClass]=\"{\n 's-button-icon': true,\n 's-button-icon-margin-right': !label && menuOptions.length,\n }\"\n [ngStyle]=\"{ color: iconColor }\"\n aria-hidden=\"true\"\n >\n </span>\n }\n @if (label) {\n <span\n class=\"s-button-text\"\n [ngClass]=\"{\n 's-button-icon-margin-right': !!rightIconClass || menuOptions.length,\n 's-button-icon-margin-left': !!iconClass,\n }\"\n >\n {{ label }}\n </span>\n }\n <ng-content></ng-content>\n @if (rightIconClass) {\n <span\n [class]=\"rightIconClass\"\n [ngClass]=\"{ 's-button-right-icon': true }\"\n [ngStyle]=\"{ color: iconColor }\"\n aria-hidden=\"true\"\n >\n </span>\n }\n @if ((caret && menuOptions.length) || (menuOptions && menuOptions.length)) {\n <span\n class=\"menu-options-icon fa fa-fw fa-caret-down\"\n aria-hidden=\"true\"\n >\n </span>\n }\n</button>\n@if (badge) {\n <div class=\"badge\">\n <s-badge\n [color]=\"badge.color\"\n [text]=\"badge.text\"\n [iconClass]=\"badge.iconClass\"\n >\n </s-badge>\n </div>\n}\n", styles: [":host{display:inline-flex;position:relative}:host.s-button-with-badge{margin-right:-15px}button{align-items:center;display:inline-flex;justify-content:center;border:1px solid;border-radius:4px;color:#fff;cursor:pointer;font-family:Open Sans,sans-serif;font-size:14px;height:35px;max-width:100%;min-width:40px;outline:none;overflow:visible;padding:5px 10px;position:relative;text-decoration:none;text-transform:none;transition:background-color .2s ease-out,border-color .2s ease-out,color .2s ease-out}button:disabled{background-image:none;cursor:text;filter:Alpha(Opacity=50);opacity:.5}button.s-button-auxiliary{border-radius:20px}button.s-button-size-small{height:25px}button.s-button-size-small.s-button-only-icon{max-width:24px;max-height:24px;min-width:24px}button.s-button-size-default{height:35px}button.s-button-with-text,button.s-button-with-icon.s-button-multiple{min-width:80px}button.s-button-with-icon.s-button-with-text.s-button-multiple{min-width:100px}button.s-button-multiple.s-button-size-small.s-button-empty{width:25px;min-width:25px}button .s-button-icon,button .s-button-right-icon,button .s-button-menu-icon,button.s-button-with-icon.s-button-multiple:not(.s-button-with-text) .s-button-icon{align-items:center;display:inline-flex;justify-content:center}button.s-button-multiple .s-button-text{align-items:left;display:inline-flex;justify-content:left}button.s-button-with-icon .s-button-text{align-items:right;display:inline-flex;justify-content:right}button.s-button-priority-primary{background-color:#428bca;border-color:#428bca}button.s-button-priority-primary .s-button-icon,button.s-button-priority-primary .s-button-right-icon,button.s-button-priority-primary .s-button-text,button.s-button-priority-primary .s-button-menu-icon{color:#fff}button.s-button-priority-primary:hover{background-color:#2a6496}button.s-button-priority-primary:focus{background-color:#2a6496;border-color:#22dce6}button.s-button-priority-primary:active:not(:disabled),button.s-button-priority-primary.s-button-active:not(:disabled){background-color:#245682;border-color:#245682}button.s-button-priority-primary .menu-options-icon{color:#fff}button.s-button-priority-secondary{background-color:#7892a1;border-color:#7892a1}button.s-button-priority-secondary .s-button-icon,button.s-button-priority-secondary .s-button-right-icon,button.s-button-priority-secondary .s-button-text,button.s-button-priority-secondary .s-button-menu-icon{color:#fff}button.s-button-priority-secondary:hover{background-color:#546b79}button.s-button-priority-secondary:focus{background-color:#546b79;border-color:#22dce6}button.s-button-priority-secondary:active:not(:disabled),button.s-button-priority-secondary.s-button-active:not(:disabled){background-color:#495e6a;border-color:#495e6a}button.s-button-priority-secondary .menu-options-icon{color:#fff}button.s-button-priority-default{background-color:#fff;border-color:#ccc}button.s-button-priority-default .s-button-icon,button.s-button-priority-default .s-button-right-icon,button.s-button-priority-default .s-button-text,button.s-button-priority-default .s-button-menu-icon{color:#333}button.s-button-priority-default:hover{background-color:#d9d9d9}button.s-button-priority-default:focus{background-color:#d9d9d9;border-color:#22dce6}button.s-button-priority-default:active:not(:disabled),button.s-button-priority-default.s-button-active:not(:disabled){background-color:#ccc;border-color:#ccc}button.s-button-priority-default .menu-options-icon{color:#333}button.s-button-auxiliary.s-button-only-icon{border-radius:50%}button.s-button-priority-link{background-color:transparent;border-color:transparent}button.s-button-priority-link .s-button-icon,button.s-button-priority-link .s-button-right-icon,button.s-button-priority-link .s-button-text,button.s-button-priority-link .s-button-menu-icon{color:#428bca}button.s-button-priority-link:hover{background-color:transparent}button.s-button-priority-link:hover .s-button-icon,button.s-button-priority-link:hover .s-button-right-icon,button.s-button-priority-link:hover .s-button-text,button.s-button-priority-link:hover .s-button-menu-icon{color:#2a6496}button.s-button-priority-link:focus{background-color:transparent;border-color:#22dce6}button.s-button-priority-link:focus .s-button-icon,button.s-button-priority-link:focus .s-button-right-icon,button.s-button-priority-link:focus .s-button-text,button.s-button-priority-link:focus .s-button-menu-icon{color:#2a6496}button.s-button-priority-link:active:not(:disabled),button.s-button-priority-link.s-button-active:not(:disabled){background-color:transparent;border-color:transparent}button.s-button-priority-link:active:not(:disabled) .s-button-icon,button.s-button-priority-link:active:not(:disabled) .s-button-right-icon,button.s-button-priority-link:active:not(:disabled) .s-button-text,button.s-button-priority-link:active:not(:disabled) .s-button-menu-icon,button.s-button-priority-link.s-button-active:not(:disabled) .s-button-icon,button.s-button-priority-link.s-button-active:not(:disabled) .s-button-right-icon,button.s-button-priority-link.s-button-active:not(:disabled) .s-button-text,button.s-button-priority-link.s-button-active:not(:disabled) .s-button-menu-icon{color:#245682}.s-button-priority-danger{background-color:#9c3a3a;border-color:#9c3a3a}.s-button-priority-danger .s-button-icon,.s-button-priority-danger .s-button-right-icon,.s-button-priority-danger .s-button-text,.s-button-priority-danger .s-button-menu-icon{color:#fff}.s-button-priority-danger:hover{background-color:#642525}.s-button-priority-danger:focus{background-color:#642525;border-color:#22dce6}.s-button-priority-danger:active:not(:disabled),.s-button-priority-danger.s-button-active:not(:disabled){background-color:#521e1e;border-color:#521e1e}.s-button-priority-danger .menu-options-icon{color:#fff}.s-button-text{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.s-button-menu-icon{right:10px;transition:transform .2s ease-out}.s-button-icon-margin-left{margin-left:10px}.s-button-icon-margin-right{margin-right:10px}.s-button-active .s-button-menu-icon{transform:rotateX(180deg)}.s-button--slide.s-button-with-text,.s-button--slide.s-button-with-icon.s-button-multiple{min-width:40px}.s-button--slide .s-button-text{opacity:0;position:absolute;width:0}.s-button--slide:hover .s-button-text{opacity:1;position:relative;transition:1s ease;width:auto}.s-button--slide:hover.s-button--rotate-animation .s-button-icon,.s-button--slide:hover.s-button--rotate-animation .s-button-right-icon{transform:rotate(360deg);transition:1.5s ease}.badge{z-index:99;position:relative;right:15px;bottom:16px}.menu-options-icon{color:#212533}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: BadgeModule }, { kind: "component", type: i1.BadgeComponent, selector: "s-badge", inputs: ["type", "color", "title", "text", "selectable", "iconClass", "iconPosition", "infoSign", "enableTruncateText"], outputs: ["selected"] }, { kind: "ngmodule", type: TieredMenuModule }, { kind: "directive", type: i2.TieredMenuDirective, selector: "[sTieredMenu]", inputs: ["items", "focusedItem", "triggerEvent", "ariaLabel"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i3.TooltipDirective, selector: "[sTooltip]", inputs: ["sTooltip", "tooltipPosition", "showDelay", "displayTime", "tooltipEvent", "escape", "visible", "mobileBehavior", "focusedInputRef", "checkTruncatedText"] }] });
164
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ButtonComponent, isStandalone: true, selector: "s-button", inputs: { id: "id", label: "label", tooltip: "tooltip", tooltipPosition: "tooltipPosition", iconClass: "iconClass", rightIconClass: "rightIconClass", caret: "caret", styleClass: "styleClass", baseZIndex: "baseZIndex", disabled: "disabled", auxiliary: "auxiliary", type: "type", priority: "priority", menuOptions: "menuOptions", size: "size", slide: "slide", animation: "animation", badge: "badge", iconColor: "iconColor", menuAriaLabel: "menuAriaLabel" }, outputs: { clicked: "clicked" }, host: { properties: { "class.s-button-with-badge": "!!badge", "style.min-width": "this.minWidth" } }, usesOnChanges: true, ngImport: i0, template: "<button\n [id]=\"id\"\n [type]=\"type\"\n [class]=\"styleClass\"\n [ngClass]=\"{\n 's-button-auxiliary': auxiliary,\n 's-button-with-icon': iconClass,\n 's-button-with-text': label,\n 's-button-only-icon': iconClass && !label && !menuOptions.length,\n 's-button-empty': !iconClass && !label,\n 's-button-size-default': size === 'default',\n 's-button-size-small': size === 'small',\n 's-button-priority-default': priority === 'default',\n 's-button-priority-primary': priority === 'primary',\n 's-button-priority-secondary': priority === 'secondary',\n 's-button-priority-link': priority === 'link',\n 's-button-priority-danger': priority === 'danger',\n 's-button-multiple': (caret && menuOptions.length) || rightIconClass,\n 's-button--slide': validateSlideButton(),\n 's-button--rotate-animation': isRotateAnimation(),\n }\"\n sTieredMenu\n [items]=\"menuOptions\"\n [ariaLabel]=\"menuAriaLabel\"\n [attr.aria-haspopup]=\"menuOptions.length ? 'menu' : null\"\n [attr.aria-expanded]=\"menuOptions.length ? isMenuOpen : null\"\n [disabled]=\"disabled\"\n [sTooltip]=\"tooltip\"\n [tooltipPosition]=\"tooltipPosition\"\n (tieredMenuOpened)=\"onTieredMenuOpened()\"\n (tieredMenuClosed)=\"onTieredMenuClosed()\"\n (click)=\"clicked.emit($event)\"\n>\n @if (iconClass) {\n <span\n [class]=\"iconClass\"\n [ngClass]=\"{\n 's-button-icon': true,\n 's-button-icon-margin-right': !label && menuOptions.length,\n }\"\n [ngStyle]=\"{ color: iconColor }\"\n aria-hidden=\"true\"\n >\n </span>\n }\n @if (label) {\n <span\n class=\"s-button-text\"\n [ngClass]=\"{\n 's-button-icon-margin-right': !!rightIconClass || menuOptions.length,\n 's-button-icon-margin-left': !!iconClass,\n }\"\n >\n {{ label }}\n </span>\n }\n <ng-content></ng-content>\n @if (rightIconClass) {\n <span\n [class]=\"rightIconClass\"\n [ngClass]=\"{ 's-button-right-icon': true }\"\n [ngStyle]=\"{ color: iconColor }\"\n aria-hidden=\"true\"\n >\n </span>\n }\n @if ((caret && menuOptions.length) || (menuOptions && menuOptions.length)) {\n <span\n class=\"menu-options-icon fa fa-fw fa-caret-down\"\n aria-hidden=\"true\"\n >\n </span>\n }\n</button>\n@if (badge) {\n <div class=\"badge\">\n <s-badge\n [color]=\"badge.color\"\n [text]=\"badge.text\"\n [iconClass]=\"badge.iconClass\"\n >\n </s-badge>\n </div>\n}\n\n", styles: [":host{display:inline-flex;position:relative}:host.s-button-with-badge{margin-right:-15px}button{align-items:center;display:inline-flex;justify-content:center;border:1px solid;border-radius:4px;color:#fff;cursor:pointer;font-family:Open Sans,sans-serif;font-size:14px;height:35px;max-width:100%;min-width:40px;outline:none;overflow:visible;padding:5px 10px;position:relative;text-decoration:none;text-transform:none;transition:background-color .2s ease-out,border-color .2s ease-out,color .2s ease-out}button:disabled{background-image:none;cursor:text;filter:Alpha(Opacity=50);opacity:.5}button.s-button-auxiliary{border-radius:20px}button.s-button-size-small{height:25px}button.s-button-size-small.s-button-only-icon{max-width:24px;max-height:24px;min-width:24px}button.s-button-size-default{height:35px}button.s-button-with-text,button.s-button-with-icon.s-button-multiple{min-width:80px}button.s-button-with-icon.s-button-with-text.s-button-multiple{min-width:100px}button.s-button-multiple.s-button-size-small.s-button-empty{width:25px;min-width:25px}button .s-button-icon,button .s-button-right-icon,button .s-button-menu-icon,button.s-button-with-icon.s-button-multiple:not(.s-button-with-text) .s-button-icon{align-items:center;display:inline-flex;justify-content:center}button.s-button-multiple .s-button-text{align-items:left;display:inline-flex;justify-content:left}button.s-button-with-icon .s-button-text{align-items:right;display:inline-flex;justify-content:right}button.s-button-priority-primary{background-color:#428bca;border-color:#428bca}button.s-button-priority-primary .s-button-icon,button.s-button-priority-primary .s-button-right-icon,button.s-button-priority-primary .s-button-text,button.s-button-priority-primary .s-button-menu-icon{color:#fff}button.s-button-priority-primary:hover{background-color:#2a6496}button.s-button-priority-primary:focus{background-color:#2a6496;border-color:#22dce6}button.s-button-priority-primary:active:not(:disabled),button.s-button-priority-primary.s-button-active:not(:disabled){background-color:#245682;border-color:#245682}button.s-button-priority-primary .menu-options-icon{color:#fff}button.s-button-priority-secondary{background-color:#7892a1;border-color:#7892a1}button.s-button-priority-secondary .s-button-icon,button.s-button-priority-secondary .s-button-right-icon,button.s-button-priority-secondary .s-button-text,button.s-button-priority-secondary .s-button-menu-icon{color:#fff}button.s-button-priority-secondary:hover{background-color:#546b79}button.s-button-priority-secondary:focus{background-color:#546b79;border-color:#22dce6}button.s-button-priority-secondary:active:not(:disabled),button.s-button-priority-secondary.s-button-active:not(:disabled){background-color:#495e6a;border-color:#495e6a}button.s-button-priority-secondary .menu-options-icon{color:#fff}button.s-button-priority-default{background-color:#fff;border-color:#ccc}button.s-button-priority-default .s-button-icon,button.s-button-priority-default .s-button-right-icon,button.s-button-priority-default .s-button-text,button.s-button-priority-default .s-button-menu-icon{color:#333}button.s-button-priority-default:hover{background-color:#d9d9d9}button.s-button-priority-default:focus{background-color:#d9d9d9;border-color:#22dce6}button.s-button-priority-default:active:not(:disabled),button.s-button-priority-default.s-button-active:not(:disabled){background-color:#ccc;border-color:#ccc}button.s-button-priority-default .menu-options-icon{color:#333}button.s-button-auxiliary.s-button-only-icon{border-radius:50%}button.s-button-priority-link{background-color:transparent;border-color:transparent}button.s-button-priority-link .s-button-icon,button.s-button-priority-link .s-button-right-icon,button.s-button-priority-link .s-button-text,button.s-button-priority-link .s-button-menu-icon{color:#428bca}button.s-button-priority-link:hover{background-color:transparent}button.s-button-priority-link:hover .s-button-icon,button.s-button-priority-link:hover .s-button-right-icon,button.s-button-priority-link:hover .s-button-text,button.s-button-priority-link:hover .s-button-menu-icon{color:#2a6496}button.s-button-priority-link:focus{background-color:transparent;border-color:#22dce6}button.s-button-priority-link:focus .s-button-icon,button.s-button-priority-link:focus .s-button-right-icon,button.s-button-priority-link:focus .s-button-text,button.s-button-priority-link:focus .s-button-menu-icon{color:#2a6496}button.s-button-priority-link:active:not(:disabled),button.s-button-priority-link.s-button-active:not(:disabled){background-color:transparent;border-color:transparent}button.s-button-priority-link:active:not(:disabled) .s-button-icon,button.s-button-priority-link:active:not(:disabled) .s-button-right-icon,button.s-button-priority-link:active:not(:disabled) .s-button-text,button.s-button-priority-link:active:not(:disabled) .s-button-menu-icon,button.s-button-priority-link.s-button-active:not(:disabled) .s-button-icon,button.s-button-priority-link.s-button-active:not(:disabled) .s-button-right-icon,button.s-button-priority-link.s-button-active:not(:disabled) .s-button-text,button.s-button-priority-link.s-button-active:not(:disabled) .s-button-menu-icon{color:#245682}.s-button-priority-danger{background-color:#9c3a3a;border-color:#9c3a3a}.s-button-priority-danger .s-button-icon,.s-button-priority-danger .s-button-right-icon,.s-button-priority-danger .s-button-text,.s-button-priority-danger .s-button-menu-icon{color:#fff}.s-button-priority-danger:hover{background-color:#642525}.s-button-priority-danger:focus{background-color:#642525;border-color:#22dce6}.s-button-priority-danger:active:not(:disabled),.s-button-priority-danger.s-button-active:not(:disabled){background-color:#521e1e;border-color:#521e1e}.s-button-priority-danger .menu-options-icon{color:#fff}.s-button-text{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.s-button-menu-icon{right:10px;transition:transform .2s ease-out}.s-button-icon-margin-left{margin-left:10px}.s-button-icon-margin-right{margin-right:10px}.s-button-active .s-button-menu-icon{transform:rotateX(180deg)}.s-button--slide.s-button-with-text,.s-button--slide.s-button-with-icon.s-button-multiple{min-width:40px}.s-button--slide .s-button-text{opacity:0;position:absolute;width:0}.s-button--slide:hover .s-button-text{opacity:1;position:relative;transition:1s ease;width:auto}.s-button--slide:hover.s-button--rotate-animation .s-button-icon,.s-button--slide:hover.s-button--rotate-animation .s-button-right-icon{transform:rotate(360deg);transition:1.5s ease}.badge{z-index:99;position:relative;right:15px;bottom:16px}.menu-options-icon{color:#212533}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: BadgeModule }, { kind: "component", type: i1.BadgeComponent, selector: "s-badge", inputs: ["type", "color", "title", "text", "selectable", "iconClass", "iconPosition", "infoSign", "enableTruncateText"], outputs: ["selected"] }, { kind: "ngmodule", type: TieredMenuModule }, { kind: "directive", type: i2.TieredMenuDirective, selector: "[sTieredMenu]", inputs: ["items", "focusedItem", "triggerEvent", "ariaLabel"], outputs: ["tieredMenuOpened", "tieredMenuClosed"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i3.TooltipDirective, selector: "[sTooltip]", inputs: ["sTooltip", "tooltipPosition", "showDelay", "displayTime", "tooltipEvent", "escape", "visible", "mobileBehavior", "focusedInputRef", "checkTruncatedText"] }] });
153
165
  }
154
166
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ButtonComponent, decorators: [{
155
167
  type: Component,
156
168
  args: [{ selector: 's-button', host: {
157
169
  '[class.s-button-with-badge]': '!!badge',
158
- }, standalone: true, imports: [NgClass, NgStyle, BadgeModule, TieredMenuModule, TooltipModule], template: "<button\n [id]=\"id\"\n [type]=\"type\"\n [class]=\"styleClass\"\n [ngClass]=\"{\n 's-button-auxiliary': auxiliary,\n 's-button-with-icon': iconClass,\n 's-button-with-text': label,\n 's-button-only-icon': iconClass && !label && !menuOptions.length,\n 's-button-empty': !iconClass && !label,\n 's-button-size-default': size === 'default',\n 's-button-size-small': size === 'small',\n 's-button-priority-default': priority === 'default',\n 's-button-priority-primary': priority === 'primary',\n 's-button-priority-secondary': priority === 'secondary',\n 's-button-priority-link': priority === 'link',\n 's-button-priority-danger': priority === 'danger',\n 's-button-multiple': (caret && menuOptions.length) || rightIconClass,\n 's-button--slide': validateSlideButton(),\n 's-button--rotate-animation': isRotateAnimation(),\n }\"\n sTieredMenu\n [items]=\"menuOptions\"\n [ariaLabel]=\"menuAriaLabel\"\n [disabled]=\"disabled\"\n [sTooltip]=\"tooltip\"\n [tooltipPosition]=\"tooltipPosition\"\n (click)=\"clicked.emit($event)\"\n>\n @if (iconClass) {\n <span\n [class]=\"iconClass\"\n [ngClass]=\"{\n 's-button-icon': true,\n 's-button-icon-margin-right': !label && menuOptions.length,\n }\"\n [ngStyle]=\"{ color: iconColor }\"\n aria-hidden=\"true\"\n >\n </span>\n }\n @if (label) {\n <span\n class=\"s-button-text\"\n [ngClass]=\"{\n 's-button-icon-margin-right': !!rightIconClass || menuOptions.length,\n 's-button-icon-margin-left': !!iconClass,\n }\"\n >\n {{ label }}\n </span>\n }\n <ng-content></ng-content>\n @if (rightIconClass) {\n <span\n [class]=\"rightIconClass\"\n [ngClass]=\"{ 's-button-right-icon': true }\"\n [ngStyle]=\"{ color: iconColor }\"\n aria-hidden=\"true\"\n >\n </span>\n }\n @if ((caret && menuOptions.length) || (menuOptions && menuOptions.length)) {\n <span\n class=\"menu-options-icon fa fa-fw fa-caret-down\"\n aria-hidden=\"true\"\n >\n </span>\n }\n</button>\n@if (badge) {\n <div class=\"badge\">\n <s-badge\n [color]=\"badge.color\"\n [text]=\"badge.text\"\n [iconClass]=\"badge.iconClass\"\n >\n </s-badge>\n </div>\n}\n", styles: [":host{display:inline-flex;position:relative}:host.s-button-with-badge{margin-right:-15px}button{align-items:center;display:inline-flex;justify-content:center;border:1px solid;border-radius:4px;color:#fff;cursor:pointer;font-family:Open Sans,sans-serif;font-size:14px;height:35px;max-width:100%;min-width:40px;outline:none;overflow:visible;padding:5px 10px;position:relative;text-decoration:none;text-transform:none;transition:background-color .2s ease-out,border-color .2s ease-out,color .2s ease-out}button:disabled{background-image:none;cursor:text;filter:Alpha(Opacity=50);opacity:.5}button.s-button-auxiliary{border-radius:20px}button.s-button-size-small{height:25px}button.s-button-size-small.s-button-only-icon{max-width:24px;max-height:24px;min-width:24px}button.s-button-size-default{height:35px}button.s-button-with-text,button.s-button-with-icon.s-button-multiple{min-width:80px}button.s-button-with-icon.s-button-with-text.s-button-multiple{min-width:100px}button.s-button-multiple.s-button-size-small.s-button-empty{width:25px;min-width:25px}button .s-button-icon,button .s-button-right-icon,button .s-button-menu-icon,button.s-button-with-icon.s-button-multiple:not(.s-button-with-text) .s-button-icon{align-items:center;display:inline-flex;justify-content:center}button.s-button-multiple .s-button-text{align-items:left;display:inline-flex;justify-content:left}button.s-button-with-icon .s-button-text{align-items:right;display:inline-flex;justify-content:right}button.s-button-priority-primary{background-color:#428bca;border-color:#428bca}button.s-button-priority-primary .s-button-icon,button.s-button-priority-primary .s-button-right-icon,button.s-button-priority-primary .s-button-text,button.s-button-priority-primary .s-button-menu-icon{color:#fff}button.s-button-priority-primary:hover{background-color:#2a6496}button.s-button-priority-primary:focus{background-color:#2a6496;border-color:#22dce6}button.s-button-priority-primary:active:not(:disabled),button.s-button-priority-primary.s-button-active:not(:disabled){background-color:#245682;border-color:#245682}button.s-button-priority-primary .menu-options-icon{color:#fff}button.s-button-priority-secondary{background-color:#7892a1;border-color:#7892a1}button.s-button-priority-secondary .s-button-icon,button.s-button-priority-secondary .s-button-right-icon,button.s-button-priority-secondary .s-button-text,button.s-button-priority-secondary .s-button-menu-icon{color:#fff}button.s-button-priority-secondary:hover{background-color:#546b79}button.s-button-priority-secondary:focus{background-color:#546b79;border-color:#22dce6}button.s-button-priority-secondary:active:not(:disabled),button.s-button-priority-secondary.s-button-active:not(:disabled){background-color:#495e6a;border-color:#495e6a}button.s-button-priority-secondary .menu-options-icon{color:#fff}button.s-button-priority-default{background-color:#fff;border-color:#ccc}button.s-button-priority-default .s-button-icon,button.s-button-priority-default .s-button-right-icon,button.s-button-priority-default .s-button-text,button.s-button-priority-default .s-button-menu-icon{color:#333}button.s-button-priority-default:hover{background-color:#d9d9d9}button.s-button-priority-default:focus{background-color:#d9d9d9;border-color:#22dce6}button.s-button-priority-default:active:not(:disabled),button.s-button-priority-default.s-button-active:not(:disabled){background-color:#ccc;border-color:#ccc}button.s-button-priority-default .menu-options-icon{color:#333}button.s-button-auxiliary.s-button-only-icon{border-radius:50%}button.s-button-priority-link{background-color:transparent;border-color:transparent}button.s-button-priority-link .s-button-icon,button.s-button-priority-link .s-button-right-icon,button.s-button-priority-link .s-button-text,button.s-button-priority-link .s-button-menu-icon{color:#428bca}button.s-button-priority-link:hover{background-color:transparent}button.s-button-priority-link:hover .s-button-icon,button.s-button-priority-link:hover .s-button-right-icon,button.s-button-priority-link:hover .s-button-text,button.s-button-priority-link:hover .s-button-menu-icon{color:#2a6496}button.s-button-priority-link:focus{background-color:transparent;border-color:#22dce6}button.s-button-priority-link:focus .s-button-icon,button.s-button-priority-link:focus .s-button-right-icon,button.s-button-priority-link:focus .s-button-text,button.s-button-priority-link:focus .s-button-menu-icon{color:#2a6496}button.s-button-priority-link:active:not(:disabled),button.s-button-priority-link.s-button-active:not(:disabled){background-color:transparent;border-color:transparent}button.s-button-priority-link:active:not(:disabled) .s-button-icon,button.s-button-priority-link:active:not(:disabled) .s-button-right-icon,button.s-button-priority-link:active:not(:disabled) .s-button-text,button.s-button-priority-link:active:not(:disabled) .s-button-menu-icon,button.s-button-priority-link.s-button-active:not(:disabled) .s-button-icon,button.s-button-priority-link.s-button-active:not(:disabled) .s-button-right-icon,button.s-button-priority-link.s-button-active:not(:disabled) .s-button-text,button.s-button-priority-link.s-button-active:not(:disabled) .s-button-menu-icon{color:#245682}.s-button-priority-danger{background-color:#9c3a3a;border-color:#9c3a3a}.s-button-priority-danger .s-button-icon,.s-button-priority-danger .s-button-right-icon,.s-button-priority-danger .s-button-text,.s-button-priority-danger .s-button-menu-icon{color:#fff}.s-button-priority-danger:hover{background-color:#642525}.s-button-priority-danger:focus{background-color:#642525;border-color:#22dce6}.s-button-priority-danger:active:not(:disabled),.s-button-priority-danger.s-button-active:not(:disabled){background-color:#521e1e;border-color:#521e1e}.s-button-priority-danger .menu-options-icon{color:#fff}.s-button-text{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.s-button-menu-icon{right:10px;transition:transform .2s ease-out}.s-button-icon-margin-left{margin-left:10px}.s-button-icon-margin-right{margin-right:10px}.s-button-active .s-button-menu-icon{transform:rotateX(180deg)}.s-button--slide.s-button-with-text,.s-button--slide.s-button-with-icon.s-button-multiple{min-width:40px}.s-button--slide .s-button-text{opacity:0;position:absolute;width:0}.s-button--slide:hover .s-button-text{opacity:1;position:relative;transition:1s ease;width:auto}.s-button--slide:hover.s-button--rotate-animation .s-button-icon,.s-button--slide:hover.s-button--rotate-animation .s-button-right-icon{transform:rotate(360deg);transition:1.5s ease}.badge{z-index:99;position:relative;right:15px;bottom:16px}.menu-options-icon{color:#212533}\n"] }]
170
+ }, standalone: true, imports: [NgClass, NgStyle, BadgeModule, TieredMenuModule, TooltipModule], template: "<button\n [id]=\"id\"\n [type]=\"type\"\n [class]=\"styleClass\"\n [ngClass]=\"{\n 's-button-auxiliary': auxiliary,\n 's-button-with-icon': iconClass,\n 's-button-with-text': label,\n 's-button-only-icon': iconClass && !label && !menuOptions.length,\n 's-button-empty': !iconClass && !label,\n 's-button-size-default': size === 'default',\n 's-button-size-small': size === 'small',\n 's-button-priority-default': priority === 'default',\n 's-button-priority-primary': priority === 'primary',\n 's-button-priority-secondary': priority === 'secondary',\n 's-button-priority-link': priority === 'link',\n 's-button-priority-danger': priority === 'danger',\n 's-button-multiple': (caret && menuOptions.length) || rightIconClass,\n 's-button--slide': validateSlideButton(),\n 's-button--rotate-animation': isRotateAnimation(),\n }\"\n sTieredMenu\n [items]=\"menuOptions\"\n [ariaLabel]=\"menuAriaLabel\"\n [attr.aria-haspopup]=\"menuOptions.length ? 'menu' : null\"\n [attr.aria-expanded]=\"menuOptions.length ? isMenuOpen : null\"\n [disabled]=\"disabled\"\n [sTooltip]=\"tooltip\"\n [tooltipPosition]=\"tooltipPosition\"\n (tieredMenuOpened)=\"onTieredMenuOpened()\"\n (tieredMenuClosed)=\"onTieredMenuClosed()\"\n (click)=\"clicked.emit($event)\"\n>\n @if (iconClass) {\n <span\n [class]=\"iconClass\"\n [ngClass]=\"{\n 's-button-icon': true,\n 's-button-icon-margin-right': !label && menuOptions.length,\n }\"\n [ngStyle]=\"{ color: iconColor }\"\n aria-hidden=\"true\"\n >\n </span>\n }\n @if (label) {\n <span\n class=\"s-button-text\"\n [ngClass]=\"{\n 's-button-icon-margin-right': !!rightIconClass || menuOptions.length,\n 's-button-icon-margin-left': !!iconClass,\n }\"\n >\n {{ label }}\n </span>\n }\n <ng-content></ng-content>\n @if (rightIconClass) {\n <span\n [class]=\"rightIconClass\"\n [ngClass]=\"{ 's-button-right-icon': true }\"\n [ngStyle]=\"{ color: iconColor }\"\n aria-hidden=\"true\"\n >\n </span>\n }\n @if ((caret && menuOptions.length) || (menuOptions && menuOptions.length)) {\n <span\n class=\"menu-options-icon fa fa-fw fa-caret-down\"\n aria-hidden=\"true\"\n >\n </span>\n }\n</button>\n@if (badge) {\n <div class=\"badge\">\n <s-badge\n [color]=\"badge.color\"\n [text]=\"badge.text\"\n [iconClass]=\"badge.iconClass\"\n >\n </s-badge>\n </div>\n}\n\n", styles: [":host{display:inline-flex;position:relative}:host.s-button-with-badge{margin-right:-15px}button{align-items:center;display:inline-flex;justify-content:center;border:1px solid;border-radius:4px;color:#fff;cursor:pointer;font-family:Open Sans,sans-serif;font-size:14px;height:35px;max-width:100%;min-width:40px;outline:none;overflow:visible;padding:5px 10px;position:relative;text-decoration:none;text-transform:none;transition:background-color .2s ease-out,border-color .2s ease-out,color .2s ease-out}button:disabled{background-image:none;cursor:text;filter:Alpha(Opacity=50);opacity:.5}button.s-button-auxiliary{border-radius:20px}button.s-button-size-small{height:25px}button.s-button-size-small.s-button-only-icon{max-width:24px;max-height:24px;min-width:24px}button.s-button-size-default{height:35px}button.s-button-with-text,button.s-button-with-icon.s-button-multiple{min-width:80px}button.s-button-with-icon.s-button-with-text.s-button-multiple{min-width:100px}button.s-button-multiple.s-button-size-small.s-button-empty{width:25px;min-width:25px}button .s-button-icon,button .s-button-right-icon,button .s-button-menu-icon,button.s-button-with-icon.s-button-multiple:not(.s-button-with-text) .s-button-icon{align-items:center;display:inline-flex;justify-content:center}button.s-button-multiple .s-button-text{align-items:left;display:inline-flex;justify-content:left}button.s-button-with-icon .s-button-text{align-items:right;display:inline-flex;justify-content:right}button.s-button-priority-primary{background-color:#428bca;border-color:#428bca}button.s-button-priority-primary .s-button-icon,button.s-button-priority-primary .s-button-right-icon,button.s-button-priority-primary .s-button-text,button.s-button-priority-primary .s-button-menu-icon{color:#fff}button.s-button-priority-primary:hover{background-color:#2a6496}button.s-button-priority-primary:focus{background-color:#2a6496;border-color:#22dce6}button.s-button-priority-primary:active:not(:disabled),button.s-button-priority-primary.s-button-active:not(:disabled){background-color:#245682;border-color:#245682}button.s-button-priority-primary .menu-options-icon{color:#fff}button.s-button-priority-secondary{background-color:#7892a1;border-color:#7892a1}button.s-button-priority-secondary .s-button-icon,button.s-button-priority-secondary .s-button-right-icon,button.s-button-priority-secondary .s-button-text,button.s-button-priority-secondary .s-button-menu-icon{color:#fff}button.s-button-priority-secondary:hover{background-color:#546b79}button.s-button-priority-secondary:focus{background-color:#546b79;border-color:#22dce6}button.s-button-priority-secondary:active:not(:disabled),button.s-button-priority-secondary.s-button-active:not(:disabled){background-color:#495e6a;border-color:#495e6a}button.s-button-priority-secondary .menu-options-icon{color:#fff}button.s-button-priority-default{background-color:#fff;border-color:#ccc}button.s-button-priority-default .s-button-icon,button.s-button-priority-default .s-button-right-icon,button.s-button-priority-default .s-button-text,button.s-button-priority-default .s-button-menu-icon{color:#333}button.s-button-priority-default:hover{background-color:#d9d9d9}button.s-button-priority-default:focus{background-color:#d9d9d9;border-color:#22dce6}button.s-button-priority-default:active:not(:disabled),button.s-button-priority-default.s-button-active:not(:disabled){background-color:#ccc;border-color:#ccc}button.s-button-priority-default .menu-options-icon{color:#333}button.s-button-auxiliary.s-button-only-icon{border-radius:50%}button.s-button-priority-link{background-color:transparent;border-color:transparent}button.s-button-priority-link .s-button-icon,button.s-button-priority-link .s-button-right-icon,button.s-button-priority-link .s-button-text,button.s-button-priority-link .s-button-menu-icon{color:#428bca}button.s-button-priority-link:hover{background-color:transparent}button.s-button-priority-link:hover .s-button-icon,button.s-button-priority-link:hover .s-button-right-icon,button.s-button-priority-link:hover .s-button-text,button.s-button-priority-link:hover .s-button-menu-icon{color:#2a6496}button.s-button-priority-link:focus{background-color:transparent;border-color:#22dce6}button.s-button-priority-link:focus .s-button-icon,button.s-button-priority-link:focus .s-button-right-icon,button.s-button-priority-link:focus .s-button-text,button.s-button-priority-link:focus .s-button-menu-icon{color:#2a6496}button.s-button-priority-link:active:not(:disabled),button.s-button-priority-link.s-button-active:not(:disabled){background-color:transparent;border-color:transparent}button.s-button-priority-link:active:not(:disabled) .s-button-icon,button.s-button-priority-link:active:not(:disabled) .s-button-right-icon,button.s-button-priority-link:active:not(:disabled) .s-button-text,button.s-button-priority-link:active:not(:disabled) .s-button-menu-icon,button.s-button-priority-link.s-button-active:not(:disabled) .s-button-icon,button.s-button-priority-link.s-button-active:not(:disabled) .s-button-right-icon,button.s-button-priority-link.s-button-active:not(:disabled) .s-button-text,button.s-button-priority-link.s-button-active:not(:disabled) .s-button-menu-icon{color:#245682}.s-button-priority-danger{background-color:#9c3a3a;border-color:#9c3a3a}.s-button-priority-danger .s-button-icon,.s-button-priority-danger .s-button-right-icon,.s-button-priority-danger .s-button-text,.s-button-priority-danger .s-button-menu-icon{color:#fff}.s-button-priority-danger:hover{background-color:#642525}.s-button-priority-danger:focus{background-color:#642525;border-color:#22dce6}.s-button-priority-danger:active:not(:disabled),.s-button-priority-danger.s-button-active:not(:disabled){background-color:#521e1e;border-color:#521e1e}.s-button-priority-danger .menu-options-icon{color:#fff}.s-button-text{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.s-button-menu-icon{right:10px;transition:transform .2s ease-out}.s-button-icon-margin-left{margin-left:10px}.s-button-icon-margin-right{margin-right:10px}.s-button-active .s-button-menu-icon{transform:rotateX(180deg)}.s-button--slide.s-button-with-text,.s-button--slide.s-button-with-icon.s-button-multiple{min-width:40px}.s-button--slide .s-button-text{opacity:0;position:absolute;width:0}.s-button--slide:hover .s-button-text{opacity:1;position:relative;transition:1s ease;width:auto}.s-button--slide:hover.s-button--rotate-animation .s-button-icon,.s-button--slide:hover.s-button--rotate-animation .s-button-right-icon{transform:rotate(360deg);transition:1.5s ease}.badge{z-index:99;position:relative;right:15px;bottom:16px}.menu-options-icon{color:#212533}\n"] }]
159
171
  }], propDecorators: { minWidth: [{
160
172
  type: HostBinding,
161
173
  args: ['style.min-width']
@@ -187,8 +199,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
187
199
  type: Input
188
200
  }], menuOptions: [{
189
201
  type: Input
190
- }], menuAriaLabel: [{
191
- type: Input
192
202
  }], size: [{
193
203
  type: Input
194
204
  }], slide: [{
@@ -199,6 +209,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
199
209
  type: Input
200
210
  }], iconColor: [{
201
211
  type: Input
212
+ }], menuAriaLabel: [{
213
+ type: Input
202
214
  }], clicked: [{
203
215
  type: Output
204
216
  }] } });