@villedemontreal/angular-ui 16.1.2 → 16.2.1

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.
@@ -1,10 +1,11 @@
1
- import * as i0 from '@angular/core';
2
- import { SecurityContext, Injectable, Inject, Component, ViewEncapsulation, ChangeDetectionStrategy, Input, NgModule, Directive, EventEmitter, Output, CUSTOM_ELEMENTS_SCHEMA, ViewChild, forwardRef, HostListener, ContentChildren, Optional, SkipSelf, ViewChildren, InjectionToken, Injector, TemplateRef, inject, ContentChild } from '@angular/core';
3
1
  import * as i1$1 from '@angular/common';
4
2
  import { DOCUMENT, CommonModule } from '@angular/common';
3
+ import * as i0 from '@angular/core';
4
+ import { SecurityContext, Injectable, Inject, Component, ViewEncapsulation, ChangeDetectionStrategy, Input, NgModule, Directive, EventEmitter, Output, CUSTOM_ELEMENTS_SCHEMA, ViewChild, forwardRef, HostListener, ContentChildren, Optional, SkipSelf, ViewChildren, InjectionToken, Injector, TemplateRef, inject, ContentChild } from '@angular/core';
5
5
  import * as i1 from '@angular/platform-browser';
6
6
  import * as i1$2 from '@angular/cdk/observers';
7
7
  import { ObserversModule } from '@angular/cdk/observers';
8
+ import * as i3$1 from '@angular/forms';
8
9
  import { NG_VALUE_ACCESSOR, FormsModule, ReactiveFormsModule } from '@angular/forms';
9
10
  import * as i1$3 from '@angular/cdk/a11y';
10
11
  import * as i1$4 from '@angular/cdk/overlay';
@@ -838,6 +839,57 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImpor
838
839
  * See LICENSE file in the project root for full license information.
839
840
  */
840
841
 
842
+ /*
843
+ * Copyright (c) 2025 Ville de Montreal. All rights reserved.
844
+ * Licensed under the MIT license.
845
+ * See LICENSE file in the project root for full license information.
846
+ */
847
+ class BaoBadgeComponent {
848
+ constructor() {
849
+ this.type = '';
850
+ }
851
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: BaoBadgeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
852
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: BaoBadgeComponent, selector: "bao-badge", inputs: { type: "type" }, host: { properties: { "class.positive": "type === \"success\"", "class.negative": "type === \"danger\"", "class.warning": "type === \"warning\"", "class.informative": "type === \"info\"" } }, ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{display:inline-block;border:.0625rem solid transparent;color:#fff;padding:0 .4375rem;border-radius:10rem;min-width:1.5rem;font-size:.875rem;font-weight:700;line-height:1.25rem;text-align:center;white-space:nowrap;overflow:hidden;vertical-align:baseline}:host.informative{background-color:#0079c4}:host.positive{background-color:#0da566}:host.warning{background-color:#ffb833;color:#000}:host.negative{background-color:#d3310a}\n"] }); }
853
+ }
854
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: BaoBadgeComponent, decorators: [{
855
+ type: Component,
856
+ args: [{ selector: 'bao-badge', host: {
857
+ class: '',
858
+ '[class.positive]': 'type === "success"',
859
+ '[class.negative]': 'type === "danger"',
860
+ '[class.warning]': 'type === "warning"',
861
+ '[class.informative]': 'type === "info"'
862
+ }, template: "<ng-content></ng-content>\n", styles: [":host{display:inline-block;border:.0625rem solid transparent;color:#fff;padding:0 .4375rem;border-radius:10rem;min-width:1.5rem;font-size:.875rem;font-weight:700;line-height:1.25rem;text-align:center;white-space:nowrap;overflow:hidden;vertical-align:baseline}:host.informative{background-color:#0079c4}:host.positive{background-color:#0da566}:host.warning{background-color:#ffb833;color:#000}:host.negative{background-color:#d3310a}\n"] }]
863
+ }], propDecorators: { type: [{
864
+ type: Input
865
+ }] } });
866
+
867
+ /*
868
+ * Copyright (c) 2025 Ville de Montreal. All rights reserved.
869
+ * Licensed under the MIT license.
870
+ * See LICENSE file in the project root for full license information.
871
+ */
872
+ const BADGE_DIRECTIVES = [BaoBadgeComponent];
873
+ class BaoBadgeModule {
874
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: BaoBadgeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
875
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.6", ngImport: i0, type: BaoBadgeModule, declarations: [BaoBadgeComponent], imports: [CommonModule], exports: [BaoBadgeComponent] }); }
876
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: BaoBadgeModule, imports: [CommonModule] }); }
877
+ }
878
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: BaoBadgeModule, decorators: [{
879
+ type: NgModule,
880
+ args: [{
881
+ imports: [CommonModule],
882
+ declarations: [BADGE_DIRECTIVES],
883
+ exports: [BADGE_DIRECTIVES]
884
+ }]
885
+ }] });
886
+
887
+ /*
888
+ * Copyright (c) 2025 Ville de Montreal. All rights reserved.
889
+ * Licensed under the MIT license.
890
+ * See LICENSE file in the project root for full license information.
891
+ */
892
+
841
893
  /*
842
894
  * Copyright (c) 2025 Ville de Montreal. All rights reserved.
843
895
  * Licensed under the MIT license.
@@ -3978,6 +4030,237 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImpor
3978
4030
  }]
3979
4031
  }] });
3980
4032
 
4033
+ /*
4034
+ * Copyright (c) 2025 Ville de Montreal. All rights reserved.
4035
+ * Licensed under the MIT license.
4036
+ * See LICENSE file in the project root for full license information.
4037
+ */
4038
+ class BaoPaginationComponent {
4039
+ constructor(cdr) {
4040
+ this.cdr = cdr;
4041
+ /**
4042
+ * The number of items per page as selected.
4043
+ */
4044
+ this.itemsPerPage = 10;
4045
+ /**
4046
+ * The current page number.
4047
+ */
4048
+ this.currentPage = 1;
4049
+ /**
4050
+ * The different page size options.
4051
+ */
4052
+ this.pageSizeOptions = [10, 25, 50, 100];
4053
+ /**
4054
+ * The label for the type of items that are displayed on the page
4055
+ */
4056
+ this.itemLabel = 'items';
4057
+ /**
4058
+ * If selector for number of items per page should be displayed or not
4059
+ */
4060
+ this.showItemsPerPageSelector = true;
4061
+ /**
4062
+ * EventEmitter that triggers when there is a page change and emits page number (index adjusted)
4063
+ */
4064
+ this.pageChanged = new EventEmitter();
4065
+ /**
4066
+ * EventEmitter that triggers when the number of items per page is changed.
4067
+ */
4068
+ this.itemsPerPageChanged = new EventEmitter();
4069
+ /**
4070
+ * Max number of pages to display
4071
+ */
4072
+ this._maxPages = 5;
4073
+ this.displayedPages = [];
4074
+ }
4075
+ get totalPages() {
4076
+ return this._totalPages;
4077
+ }
4078
+ set totalPages(value) {
4079
+ this._totalPages = value;
4080
+ }
4081
+ get startItem() {
4082
+ return this._startItem;
4083
+ }
4084
+ set startItem(value) {
4085
+ this._startItem = value;
4086
+ }
4087
+ get endItem() {
4088
+ return this._endItem;
4089
+ }
4090
+ set endItem(value) {
4091
+ this._endItem = value;
4092
+ }
4093
+ get rangeLabel() {
4094
+ return `${this.startItem} à ${this.endItem} sur ${this.totalItems} ${this.itemLabel}`;
4095
+ }
4096
+ /**
4097
+ * Flag that indicates if a previous page exists for the current list
4098
+ */
4099
+ get hasPrevious() {
4100
+ return this.currentPage !== 1;
4101
+ }
4102
+ /**
4103
+ * Flag that indicates if a next page exists for the current list
4104
+ */
4105
+ get hasNext() {
4106
+ return this.currentPage < this.totalPages;
4107
+ }
4108
+ ngOnInit() {
4109
+ this.startItem = this.updateStartItem();
4110
+ this.endItem = this.updateEndItem();
4111
+ this.totalPages = this.updateTotalPages();
4112
+ this.displayedPages = this.buildPageNumbers();
4113
+ this.cdr.detectChanges();
4114
+ }
4115
+ /**
4116
+ * Update list of displayed pages when current page is changed.
4117
+ */
4118
+ ngOnChanges(changes) {
4119
+ if (changes.hasOwnProperty('currentPage')) {
4120
+ this.displayedPages = this.buildPageNumbers();
4121
+ }
4122
+ }
4123
+ /**
4124
+ * Navigate to specific page
4125
+ */
4126
+ goTo(page) {
4127
+ this.currentPage = page;
4128
+ this.startItem = this.updateStartItem();
4129
+ this.endItem = this.updateEndItem();
4130
+ this.displayedPages = this.buildPageNumbers();
4131
+ this.pageChanged.emit(page - 1);
4132
+ }
4133
+ /**
4134
+ * Navigate to previous page
4135
+ */
4136
+ handlePreviousClick() {
4137
+ if (this.hasPrevious) {
4138
+ this.goTo(this.currentPage - 1);
4139
+ }
4140
+ }
4141
+ /**
4142
+ * Navigate to next page
4143
+ */
4144
+ handleNextClick() {
4145
+ if (this.hasNext) {
4146
+ this.goTo(this.currentPage + 1);
4147
+ }
4148
+ }
4149
+ /**
4150
+ * Update all required variables whenever the number of items displayed per page is changed.
4151
+ * @param value New amount of items per page
4152
+ */
4153
+ handlePageSizeChange(value) {
4154
+ this.currentPage = 1;
4155
+ this.startItem = this.updateStartItem();
4156
+ this.endItem = this.updateEndItem();
4157
+ this.totalPages = this.updateTotalPages();
4158
+ this.displayedPages = this.buildPageNumbers();
4159
+ this.itemsPerPageChanged.emit(value);
4160
+ }
4161
+ updateTotalPages() {
4162
+ return Math.ceil(this.totalItems / this.itemsPerPage);
4163
+ }
4164
+ updateStartItem() {
4165
+ const startItem = Math.min((this.currentPage - 1) * this.itemsPerPage + 1, Math.floor(this.totalItems / 10) * 10);
4166
+ return startItem || 1;
4167
+ }
4168
+ updateEndItem() {
4169
+ return Math.min(this.startItem + Number(this.itemsPerPage) - 1, this.totalItems);
4170
+ }
4171
+ /**
4172
+ * Generate series of page numbers to display. The list always starts with page 1
4173
+ * and ends with last page.
4174
+ * Adds negative numbers for ellipsis.
4175
+ */
4176
+ buildPageNumbers() {
4177
+ const pages = [];
4178
+ // If total pages are 5 or less, include all pages
4179
+ if (this.totalPages <= this._maxPages) {
4180
+ for (let i = 1; i <= this.totalPages; i++) {
4181
+ pages.push(i);
4182
+ }
4183
+ }
4184
+ else {
4185
+ pages.push(1);
4186
+ // Determine middle pages
4187
+ let middlePages = [];
4188
+ if (this.currentPage <= 3) {
4189
+ middlePages = [2, 3, 4, -1];
4190
+ }
4191
+ else if (this.currentPage >= this.totalPages - 2) {
4192
+ middlePages = [
4193
+ -1,
4194
+ this.totalPages - 3,
4195
+ this.totalPages - 2,
4196
+ this.totalPages - 1
4197
+ ];
4198
+ }
4199
+ else {
4200
+ middlePages = [
4201
+ -1,
4202
+ this.currentPage - 1,
4203
+ this.currentPage,
4204
+ this.currentPage + 1,
4205
+ -1
4206
+ ];
4207
+ }
4208
+ pages.push(...middlePages);
4209
+ pages.push(this.totalPages);
4210
+ }
4211
+ return pages;
4212
+ }
4213
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: BaoPaginationComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
4214
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: BaoPaginationComponent, selector: "bao-pagination", inputs: { totalItems: "totalItems", itemsPerPage: "itemsPerPage", currentPage: "currentPage", pageSizeOptions: "pageSizeOptions", itemLabel: "itemLabel", showItemsPerPageSelector: "showItemsPerPageSelector" }, outputs: { pageChanged: "pageChanged", itemsPerPageChanged: "itemsPerPageChanged" }, host: { classAttribute: "bao-pagination" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"items-diplayed-controls\">\n <span class=\"range-display\">\n {{ rangeLabel }}\n </span>\n <div *ngIf=\"showItemsPerPageSelector\" class=\"items-per-page\">\n <label for=\"items-per-page-select\" class=\"select-label\"\n >Items par page\n </label>\n <select\n [(ngModel)]=\"itemsPerPage\"\n (ngModelChange)=\"handlePageSizeChange($event)\"\n name=\"items-per-page\"\n id=\"items-per-page-select\"\n class=\"dropdown-select\"\n >\n <option *ngFor=\"let size of pageSizeOptions\" [value]=\"size\">\n {{ size }}\n </option>\n </select>\n </div>\n</div>\n<nav aria-label=\"Pagination\" class=\"page-controls\">\n <ul>\n <li\n class=\"page-item\"\n [ngClass]=\"{ disabled: !hasPrevious }\"\n [attr.aria-disabled]=\"!hasPrevious ? 'true' : null\"\n >\n <a\n class=\"page-link\"\n (click)=\"$event.preventDefault(); handlePreviousClick()\"\n (keydown.enter)=\"$event.preventDefault(); handlePreviousClick()\"\n (keydown.space)=\"$event.preventDefault(); handlePreviousClick()\"\n tabindex=\"0\"\n >\n <bao-icon title=\"Page pr\u00E9c\u00E9dente\" svgIcon=\"icon-chevron-left\"></bao-icon\n ></a>\n </li>\n <li\n class=\"page-item\"\n *ngFor=\"let page of displayedPages\"\n [ngClass]=\"{ active: page === currentPage }\"\n [attr.aria-current]=\"page === currentPage ? 'page' : null\"\n >\n <ng-container *ngIf=\"page > 0; else ellipsis\">\n <span class=\"sr-only\">{{ page }}</span>\n <a\n class=\"page-link\"\n (click)=\"$event.preventDefault(); goTo(page)\"\n (keydown.enter)=\"$event.preventDefault(); goTo(page)\"\n (keydown.space)=\"$event.preventDefault(); goTo(page)\"\n tabindex=\"0\"\n >{{ page }}</a\n >\n </ng-container>\n <ng-template #ellipsis>\n <span class=\"page-link ellipsis\" aria-hidden=\"true\">...</span>\n </ng-template>\n </li>\n\n <li\n class=\"page-item\"\n [ngClass]=\"{ disabled: !hasNext }\"\n [attr.aria-disabled]=\"!hasNext ? 'true' : null\"\n >\n <a\n class=\"page-link\"\n (click)=\"$event.preventDefault(); handleNextClick()\"\n (keydown.enter)=\"$event.preventDefault(); handleNextClick()\"\n (keydown.space)=\"$event.preventDefault(); handleNextClick()\"\n tabindex=\"0\"\n >\n <bao-icon title=\"Page suivante\" svgIcon=\"icon-chevron-right\"></bao-icon\n ></a>\n </li>\n </ul>\n</nav>\n", styles: [".bao-container{padding-right:16px;padding-left:16px;margin-right:auto;margin-left:auto;width:100%}@media (min-width: 576px){.bao-container{max-width:576px}}@media (min-width: 768px){.bao-container{max-width:768px}}@media (min-width: 992px){.bao-container{max-width:992px}}@media (min-width: 1200px){.bao-container{max-width:1200px}}.bao-row{display:flex;flex-wrap:wrap;margin-right:-16px;margin-left:-16px}.bao-col-12,.bao-col-lg-7{position:relative;width:100%;padding-right:1rem;padding-left:1rem}@media (min-width: 992px){.bao-col-lg-7{flex:0 0 58.33333%;max-width:58.33333%}}.bao-pagination{display:flex;flex-direction:column;justify-content:center}@media (min-width: 768px){.bao-pagination{justify-content:flex-start}}.bao-pagination>.items-diplayed-controls{display:flex;flex-direction:column;justify-content:center;align-self:center}@media (min-width: 768px){.bao-pagination>.items-diplayed-controls{flex-direction:row;justify-content:space-between;align-self:auto;margin-bottom:1rem}}.bao-pagination>.items-diplayed-controls .range-display{font-weight:700;font-size:.875rem;line-height:1.25rem;margin-bottom:1rem}@media (min-width: 768px){.bao-pagination>.items-diplayed-controls .range-display{margin-bottom:0rem}}.bao-pagination>.items-diplayed-controls>.items-per-page{display:flex;align-items:baseline;margin-bottom:2rem}@media (min-width: 768px){.bao-pagination>.items-diplayed-controls>.items-per-page{margin-bottom:0rem}}.bao-pagination>.items-diplayed-controls>.items-per-page>.select-label{font-weight:700;font-size:.875rem;line-height:1.25rem;color:#637381;margin-right:1rem}.bao-pagination>.items-diplayed-controls>.items-per-page>.dropdown-select{background-color:#fff;border-radius:.25rem;border-color:#ced4da;border-style:solid;border-width:thin;padding:.4375rem 2.4375rem .4375rem .4375rem;font-weight:400;font-size:1rem;line-height:1.5rem;color:#212529;-webkit-appearance:none;appearance:none;background:#ffffff url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3e%3cpath fill='%23adb2bd' d='M12 12.586l3.293-3.293a1 1 0 011.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L12 12.586z'/%3e%3c/svg%3e\") right .4375rem center/24px 24px no-repeat}.bao-pagination .page-controls{align-self:center}.bao-pagination .page-controls>ul{display:flex;padding-left:0;margin-bottom:0}.bao-pagination .page-controls>ul>.page-item.disabled>.page-link>.bao-icon{color:#adb2bd}.bao-pagination .page-controls>ul>.page-item>.page-link{border-style:none}.bao-pagination .page-controls>ul>.page-item.active>.page-link{background-color:#eefaf8;border:1px solid #097d6c;border-radius:.25rem}.bao-pagination .page-controls>ul>.page-item>.page-link{font-size:.875rem}.bao-pagination .page-controls>ul>.page-item>.page-link:focus{box-shadow:inset 0 0 0 2px #0079c4}.bao-pagination .page-controls>ul>.page-item>.ellipsis{font-weight:700}.bao-pagination .page-controls>ul>.page-item>.ellipsis:hover{background-color:#fff}\n"], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: BaoIconComponent, selector: "bao-icon", inputs: ["color", "size", "svgIcon", "title"], exportAs: ["baoIcon"] }, { kind: "directive", type: i3$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3$1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], encapsulation: i0.ViewEncapsulation.None }); }
4215
+ }
4216
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: BaoPaginationComponent, decorators: [{
4217
+ type: Component,
4218
+ args: [{ selector: 'bao-pagination', encapsulation: ViewEncapsulation.None, host: {
4219
+ class: 'bao-pagination'
4220
+ }, template: "<div class=\"items-diplayed-controls\">\n <span class=\"range-display\">\n {{ rangeLabel }}\n </span>\n <div *ngIf=\"showItemsPerPageSelector\" class=\"items-per-page\">\n <label for=\"items-per-page-select\" class=\"select-label\"\n >Items par page\n </label>\n <select\n [(ngModel)]=\"itemsPerPage\"\n (ngModelChange)=\"handlePageSizeChange($event)\"\n name=\"items-per-page\"\n id=\"items-per-page-select\"\n class=\"dropdown-select\"\n >\n <option *ngFor=\"let size of pageSizeOptions\" [value]=\"size\">\n {{ size }}\n </option>\n </select>\n </div>\n</div>\n<nav aria-label=\"Pagination\" class=\"page-controls\">\n <ul>\n <li\n class=\"page-item\"\n [ngClass]=\"{ disabled: !hasPrevious }\"\n [attr.aria-disabled]=\"!hasPrevious ? 'true' : null\"\n >\n <a\n class=\"page-link\"\n (click)=\"$event.preventDefault(); handlePreviousClick()\"\n (keydown.enter)=\"$event.preventDefault(); handlePreviousClick()\"\n (keydown.space)=\"$event.preventDefault(); handlePreviousClick()\"\n tabindex=\"0\"\n >\n <bao-icon title=\"Page pr\u00E9c\u00E9dente\" svgIcon=\"icon-chevron-left\"></bao-icon\n ></a>\n </li>\n <li\n class=\"page-item\"\n *ngFor=\"let page of displayedPages\"\n [ngClass]=\"{ active: page === currentPage }\"\n [attr.aria-current]=\"page === currentPage ? 'page' : null\"\n >\n <ng-container *ngIf=\"page > 0; else ellipsis\">\n <span class=\"sr-only\">{{ page }}</span>\n <a\n class=\"page-link\"\n (click)=\"$event.preventDefault(); goTo(page)\"\n (keydown.enter)=\"$event.preventDefault(); goTo(page)\"\n (keydown.space)=\"$event.preventDefault(); goTo(page)\"\n tabindex=\"0\"\n >{{ page }}</a\n >\n </ng-container>\n <ng-template #ellipsis>\n <span class=\"page-link ellipsis\" aria-hidden=\"true\">...</span>\n </ng-template>\n </li>\n\n <li\n class=\"page-item\"\n [ngClass]=\"{ disabled: !hasNext }\"\n [attr.aria-disabled]=\"!hasNext ? 'true' : null\"\n >\n <a\n class=\"page-link\"\n (click)=\"$event.preventDefault(); handleNextClick()\"\n (keydown.enter)=\"$event.preventDefault(); handleNextClick()\"\n (keydown.space)=\"$event.preventDefault(); handleNextClick()\"\n tabindex=\"0\"\n >\n <bao-icon title=\"Page suivante\" svgIcon=\"icon-chevron-right\"></bao-icon\n ></a>\n </li>\n </ul>\n</nav>\n", styles: [".bao-container{padding-right:16px;padding-left:16px;margin-right:auto;margin-left:auto;width:100%}@media (min-width: 576px){.bao-container{max-width:576px}}@media (min-width: 768px){.bao-container{max-width:768px}}@media (min-width: 992px){.bao-container{max-width:992px}}@media (min-width: 1200px){.bao-container{max-width:1200px}}.bao-row{display:flex;flex-wrap:wrap;margin-right:-16px;margin-left:-16px}.bao-col-12,.bao-col-lg-7{position:relative;width:100%;padding-right:1rem;padding-left:1rem}@media (min-width: 992px){.bao-col-lg-7{flex:0 0 58.33333%;max-width:58.33333%}}.bao-pagination{display:flex;flex-direction:column;justify-content:center}@media (min-width: 768px){.bao-pagination{justify-content:flex-start}}.bao-pagination>.items-diplayed-controls{display:flex;flex-direction:column;justify-content:center;align-self:center}@media (min-width: 768px){.bao-pagination>.items-diplayed-controls{flex-direction:row;justify-content:space-between;align-self:auto;margin-bottom:1rem}}.bao-pagination>.items-diplayed-controls .range-display{font-weight:700;font-size:.875rem;line-height:1.25rem;margin-bottom:1rem}@media (min-width: 768px){.bao-pagination>.items-diplayed-controls .range-display{margin-bottom:0rem}}.bao-pagination>.items-diplayed-controls>.items-per-page{display:flex;align-items:baseline;margin-bottom:2rem}@media (min-width: 768px){.bao-pagination>.items-diplayed-controls>.items-per-page{margin-bottom:0rem}}.bao-pagination>.items-diplayed-controls>.items-per-page>.select-label{font-weight:700;font-size:.875rem;line-height:1.25rem;color:#637381;margin-right:1rem}.bao-pagination>.items-diplayed-controls>.items-per-page>.dropdown-select{background-color:#fff;border-radius:.25rem;border-color:#ced4da;border-style:solid;border-width:thin;padding:.4375rem 2.4375rem .4375rem .4375rem;font-weight:400;font-size:1rem;line-height:1.5rem;color:#212529;-webkit-appearance:none;appearance:none;background:#ffffff url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3e%3cpath fill='%23adb2bd' d='M12 12.586l3.293-3.293a1 1 0 011.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L12 12.586z'/%3e%3c/svg%3e\") right .4375rem center/24px 24px no-repeat}.bao-pagination .page-controls{align-self:center}.bao-pagination .page-controls>ul{display:flex;padding-left:0;margin-bottom:0}.bao-pagination .page-controls>ul>.page-item.disabled>.page-link>.bao-icon{color:#adb2bd}.bao-pagination .page-controls>ul>.page-item>.page-link{border-style:none}.bao-pagination .page-controls>ul>.page-item.active>.page-link{background-color:#eefaf8;border:1px solid #097d6c;border-radius:.25rem}.bao-pagination .page-controls>ul>.page-item>.page-link{font-size:.875rem}.bao-pagination .page-controls>ul>.page-item>.page-link:focus{box-shadow:inset 0 0 0 2px #0079c4}.bao-pagination .page-controls>ul>.page-item>.ellipsis{font-weight:700}.bao-pagination .page-controls>ul>.page-item>.ellipsis:hover{background-color:#fff}\n"] }]
4221
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { totalItems: [{
4222
+ type: Input
4223
+ }], itemsPerPage: [{
4224
+ type: Input
4225
+ }], currentPage: [{
4226
+ type: Input
4227
+ }], pageSizeOptions: [{
4228
+ type: Input
4229
+ }], itemLabel: [{
4230
+ type: Input
4231
+ }], showItemsPerPageSelector: [{
4232
+ type: Input
4233
+ }], pageChanged: [{
4234
+ type: Output
4235
+ }], itemsPerPageChanged: [{
4236
+ type: Output
4237
+ }] } });
4238
+
4239
+ /*
4240
+ * Copyright (c) 2025 Ville de Montreal. All rights reserved.
4241
+ * Licensed under the MIT license.
4242
+ * See LICENSE file in the project root for full license information.
4243
+ */
4244
+ class BaoPaginationModule {
4245
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: BaoPaginationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
4246
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.6", ngImport: i0, type: BaoPaginationModule, declarations: [BaoPaginationComponent], imports: [CommonModule, BaoIconModule, FormsModule], exports: [BaoPaginationComponent] }); }
4247
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: BaoPaginationModule, imports: [CommonModule, BaoIconModule, FormsModule] }); }
4248
+ }
4249
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: BaoPaginationModule, decorators: [{
4250
+ type: NgModule,
4251
+ args: [{
4252
+ imports: [CommonModule, BaoIconModule, FormsModule],
4253
+ declarations: [BaoPaginationComponent],
4254
+ exports: [BaoPaginationComponent]
4255
+ }]
4256
+ }] });
4257
+
4258
+ /*
4259
+ * Copyright (c) 2025 Ville de Montreal. All rights reserved.
4260
+ * Licensed under the MIT license.
4261
+ * See LICENSE file in the project root for full license information.
4262
+ */
4263
+
3981
4264
  /*
3982
4265
  * Copyright (c) 2025 Ville de Montreal. All rights reserved.
3983
4266
  * Licensed under the MIT license.
@@ -6118,9 +6401,8 @@ class BaoModule {
6118
6401
  BaoFileModule,
6119
6402
  BaoSnackBarModule,
6120
6403
  BaoSystemHeaderModule,
6121
- BaoMessageBarModule
6122
- // TODO: reactivate once component does not depend on global css BaoBadgeModule,
6123
- ] }); }
6404
+ BaoMessageBarModule,
6405
+ BaoPaginationModule] }); }
6124
6406
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: BaoModule, imports: [BaoIconModule,
6125
6407
  BaoButtonModule,
6126
6408
  BaoAlertModule,
@@ -6146,9 +6428,8 @@ class BaoModule {
6146
6428
  BaoFileModule,
6147
6429
  BaoSnackBarModule,
6148
6430
  BaoSystemHeaderModule,
6149
- BaoMessageBarModule
6150
- // TODO: reactivate once component does not depend on global css BaoBadgeModule,
6151
- ] }); }
6431
+ BaoMessageBarModule,
6432
+ BaoPaginationModule] }); }
6152
6433
  }
6153
6434
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: BaoModule, decorators: [{
6154
6435
  type: NgModule,
@@ -6182,63 +6463,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImpor
6182
6463
  BaoFileModule,
6183
6464
  BaoSnackBarModule,
6184
6465
  BaoSystemHeaderModule,
6185
- BaoMessageBarModule
6186
- // TODO: reactivate once component does not depend on global css BaoBadgeModule,
6466
+ BaoMessageBarModule,
6467
+ BaoPaginationModule
6187
6468
  ]
6188
6469
  }]
6189
6470
  }] });
6190
6471
 
6191
- /*
6192
- * Copyright (c) 2025 Ville de Montreal. All rights reserved.
6193
- * Licensed under the MIT license.
6194
- * See LICENSE file in the project root for full license information.
6195
- */
6196
- class BaoBadgeComponent {
6197
- constructor() {
6198
- this.type = '';
6199
- }
6200
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: BaoBadgeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6201
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: BaoBadgeComponent, selector: "bao-badge", inputs: { type: "type" }, host: { properties: { "class.positive": "type === \"success\"", "class.negative": "type === \"danger\"", "class.warning": "type === \"warning\"", "class.informative": "type === \"info\"" } }, ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{display:inline-block;border:.0625rem solid transparent;color:#fff;padding:0 .4375rem;border-radius:10rem;min-width:1.5rem;font-size:.875rem;font-weight:700;line-height:1.25rem;text-align:center;white-space:nowrap;overflow:hidden;vertical-align:baseline}:host.informative{background-color:#0079c4}:host.positive{background-color:#0da566}:host.warning{background-color:#ffb833;color:#000}:host.negative{background-color:#d3310a}\n"] }); }
6202
- }
6203
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: BaoBadgeComponent, decorators: [{
6204
- type: Component,
6205
- args: [{ selector: 'bao-badge', host: {
6206
- class: '',
6207
- '[class.positive]': 'type === "success"',
6208
- '[class.negative]': 'type === "danger"',
6209
- '[class.warning]': 'type === "warning"',
6210
- '[class.informative]': 'type === "info"'
6211
- }, template: "<ng-content></ng-content>\n", styles: [":host{display:inline-block;border:.0625rem solid transparent;color:#fff;padding:0 .4375rem;border-radius:10rem;min-width:1.5rem;font-size:.875rem;font-weight:700;line-height:1.25rem;text-align:center;white-space:nowrap;overflow:hidden;vertical-align:baseline}:host.informative{background-color:#0079c4}:host.positive{background-color:#0da566}:host.warning{background-color:#ffb833;color:#000}:host.negative{background-color:#d3310a}\n"] }]
6212
- }], propDecorators: { type: [{
6213
- type: Input
6214
- }] } });
6215
-
6216
- /*
6217
- * Copyright (c) 2025 Ville de Montreal. All rights reserved.
6218
- * Licensed under the MIT license.
6219
- * See LICENSE file in the project root for full license information.
6220
- */
6221
- const BADGE_DIRECTIVES = [BaoBadgeComponent];
6222
- class BaoBadgeModule {
6223
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: BaoBadgeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
6224
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.6", ngImport: i0, type: BaoBadgeModule, declarations: [BaoBadgeComponent], imports: [CommonModule], exports: [BaoBadgeComponent] }); }
6225
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: BaoBadgeModule, imports: [CommonModule] }); }
6226
- }
6227
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: BaoBadgeModule, decorators: [{
6228
- type: NgModule,
6229
- args: [{
6230
- imports: [CommonModule],
6231
- declarations: [BADGE_DIRECTIVES],
6232
- exports: [BADGE_DIRECTIVES]
6233
- }]
6234
- }] });
6235
-
6236
- /*
6237
- * Copyright (c) 2025 Ville de Montreal. All rights reserved.
6238
- * Licensed under the MIT license.
6239
- * See LICENSE file in the project root for full license information.
6240
- */
6241
-
6242
6472
  /*
6243
6473
  * Copyright (c) 2025 Ville de Montreal. All rights reserved.
6244
6474
  * Licensed under the MIT license.
@@ -6273,5 +6503,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImpor
6273
6503
  * Generated bundle index. Do not edit.
6274
6504
  */
6275
6505
 
6276
- export { BAO_FILE_INTL_PROVIDER, BAO_FILE_INTL_PROVIDER_FACTORY, BAO_MODAL_DATA, BAO_RADIO_GROUP, BAO_SNACK_BAR_DATA, BAO_SNACK_BAR_DEFAULT_OPTIONS, BaoAlertActions, BaoAlertComponent, BaoAlertContent, BaoAlertLink, BaoAlertModule, BaoAlertTitle, BaoAvatarComponent, BaoAvatarContent, BaoAvatarModule, BaoBackNavigationComponent, BaoBackNavigationInsert, BaoBadgeComponent, BaoBadgeModule, BaoBreadcrumbComponent, BaoBreadcrumbModule, BaoButtonComponent, BaoButtonModule, BaoCardComponent, BaoCardContent, BaoCardHeader, BaoCardModule, BaoCardTextInterface, BaoCardTitle, BaoCheckBoxDescription, BaoCheckboxComponent, BaoCheckboxGroupComponent, BaoCheckboxModule, BaoCommonComponentsModule, BaoDropdownMenuComponent, BaoDropdownMenuDivider, BaoDropdownMenuItem, BaoDropdownMenuItemDescription, BaoDropdownMenuItemLabel, BaoDropdownMenuModule, BaoDropdownMenuSection, BaoDropdownMenuTrigger, BaoErrorTextComponent, BaoFileDropDirective, BaoFileDropzoneIntructions, BaoFileInputComponent, BaoFileIntl, BaoFileIntlEnglish, BaoFileModule, BaoFilePreviewComponent, BaoGuidingTextComponent, BaoHeaderInfoComponent, BaoHeaderInfoContent, BaoHeaderInfoModule, BaoHeaderInfoSubtitle, BaoHeaderInfoSurtitle, BaoHeaderInfoTitle, BaoHeaderInfoTitleGroupComponent, BaoHyperlinkComponent, BaoHyperlinkModule, BaoIconComponent, BaoIconModule, BaoLabelTextComponent, BaoList, BaoListItem, BaoListItemDescription, BaoListItemTitle, BaoListModule, BaoListSummary, BaoListSummaryItem, BaoMessageBarComponent, BaoMessageBarContent, BaoMessageBarModule, BaoModal, BaoModalBase, BaoModalClose, BaoModalContainer, BaoModalInitialConfig, BaoModalModule, BaoModalRef, BaoModule, BaoNavList, BaoRadioButtonComponent, BaoRadioButtonGroupComponent, BaoRadioDescription, BaoRadioModule, BaoSimpleSnackBarComponent, BaoSnackBarConfig, BaoSnackBarContainerComponent, BaoSnackBarModule, BaoSnackBarRef, BaoSnackBarService, BaoSummaryComponent, BaoSummaryDescription, BaoSummaryModule, BaoSystemHeaderComponent, BaoSystemHeaderModule, BaoTabHeader, BaoTabPanel, BaoTablistComponent, BaoTabsContainer, BaoTabsModule, BaoTagComponent, BaoTagModule, BaoTitleTextComponent, _BaoModalContainerBase, _closeModalVia, baoFactory, eModalDesktopWidthSize, eModalMobileWidthSize, throwBaoModalContentAlreadyAttachedError };
6506
+ export { BAO_FILE_INTL_PROVIDER, BAO_FILE_INTL_PROVIDER_FACTORY, BAO_MODAL_DATA, BAO_RADIO_GROUP, BAO_SNACK_BAR_DATA, BAO_SNACK_BAR_DEFAULT_OPTIONS, BaoAlertActions, BaoAlertComponent, BaoAlertContent, BaoAlertLink, BaoAlertModule, BaoAlertTitle, BaoAvatarComponent, BaoAvatarContent, BaoAvatarModule, BaoBackNavigationComponent, BaoBackNavigationInsert, BaoBadgeComponent, BaoBadgeModule, BaoBreadcrumbComponent, BaoBreadcrumbModule, BaoButtonComponent, BaoButtonModule, BaoCardComponent, BaoCardContent, BaoCardHeader, BaoCardModule, BaoCardTextInterface, BaoCardTitle, BaoCheckBoxDescription, BaoCheckboxComponent, BaoCheckboxGroupComponent, BaoCheckboxModule, BaoCommonComponentsModule, BaoDropdownMenuComponent, BaoDropdownMenuDivider, BaoDropdownMenuItem, BaoDropdownMenuItemDescription, BaoDropdownMenuItemLabel, BaoDropdownMenuModule, BaoDropdownMenuSection, BaoDropdownMenuTrigger, BaoErrorTextComponent, BaoFileDropDirective, BaoFileDropzoneIntructions, BaoFileInputComponent, BaoFileIntl, BaoFileIntlEnglish, BaoFileModule, BaoFilePreviewComponent, BaoGuidingTextComponent, BaoHeaderInfoComponent, BaoHeaderInfoContent, BaoHeaderInfoModule, BaoHeaderInfoSubtitle, BaoHeaderInfoSurtitle, BaoHeaderInfoTitle, BaoHeaderInfoTitleGroupComponent, BaoHyperlinkComponent, BaoHyperlinkModule, BaoIconComponent, BaoIconModule, BaoLabelTextComponent, BaoList, BaoListItem, BaoListItemDescription, BaoListItemTitle, BaoListModule, BaoListSummary, BaoListSummaryItem, BaoMessageBarComponent, BaoMessageBarContent, BaoMessageBarModule, BaoModal, BaoModalBase, BaoModalClose, BaoModalContainer, BaoModalInitialConfig, BaoModalModule, BaoModalRef, BaoModule, BaoNavList, BaoPaginationComponent, BaoPaginationModule, BaoRadioButtonComponent, BaoRadioButtonGroupComponent, BaoRadioDescription, BaoRadioModule, BaoSimpleSnackBarComponent, BaoSnackBarConfig, BaoSnackBarContainerComponent, BaoSnackBarModule, BaoSnackBarRef, BaoSnackBarService, BaoSummaryComponent, BaoSummaryDescription, BaoSummaryModule, BaoSystemHeaderComponent, BaoSystemHeaderModule, BaoTabHeader, BaoTabPanel, BaoTablistComponent, BaoTabsContainer, BaoTabsModule, BaoTagComponent, BaoTagModule, BaoTitleTextComponent, _BaoModalContainerBase, _closeModalVia, baoFactory, eModalDesktopWidthSize, eModalMobileWidthSize, throwBaoModalContentAlreadyAttachedError };
6277
6507
  //# sourceMappingURL=villedemontreal-angular-ui.mjs.map