primeng 16.1.0 → 16.3.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 (245) hide show
  1. package/accordion/accordion.d.ts +14 -2
  2. package/api/primengconfig.d.ts +1 -1
  3. package/api/translation.d.ts +78 -23
  4. package/api/treetablenode.d.ts +1 -1
  5. package/autocomplete/autocomplete.d.ts +7 -10
  6. package/button/button.d.ts +1 -1
  7. package/calendar/calendar.d.ts +1 -0
  8. package/carousel/carousel.d.ts +19 -2
  9. package/chips/chips.d.ts +2 -1
  10. package/confirmdialog/confirmdialog.d.ts +7 -1
  11. package/contextmenu/contextmenu.d.ts +3 -1
  12. package/dataview/dataview.d.ts +11 -1
  13. package/dialog/dialog.d.ts +1 -0
  14. package/dynamicdialog/dynamicdialog-config.d.ts +8 -0
  15. package/dynamicdialog/dynamicdialog.d.ts +3 -0
  16. package/esm2022/accordion/accordion.mjs +37 -9
  17. package/esm2022/api/primengconfig.mjs +1 -1
  18. package/esm2022/api/translation.mjs +1 -1
  19. package/esm2022/api/treetablenode.mjs +1 -1
  20. package/esm2022/autocomplete/autocomplete.mjs +53 -31
  21. package/esm2022/button/button.mjs +37 -23
  22. package/esm2022/calendar/calendar.mjs +26 -6
  23. package/esm2022/carousel/carousel.mjs +158 -28
  24. package/esm2022/chips/chips.mjs +8 -4
  25. package/esm2022/confirmdialog/confirmdialog.mjs +22 -6
  26. package/esm2022/confirmpopup/confirmpopup.mjs +3 -1
  27. package/esm2022/contextmenu/contextmenu.mjs +19 -12
  28. package/esm2022/dataview/dataview.mjs +22 -4
  29. package/esm2022/dialog/dialog.mjs +32 -24
  30. package/esm2022/dropdown/dropdown.mjs +8 -5
  31. package/esm2022/dynamicdialog/dialogservice.mjs +8 -2
  32. package/esm2022/dynamicdialog/dynamicdialog-config.mjs +9 -1
  33. package/esm2022/dynamicdialog/dynamicdialog.mjs +28 -9
  34. package/esm2022/fileupload/fileupload.mjs +50 -41
  35. package/esm2022/galleria/galleria.mjs +254 -35
  36. package/esm2022/image/image.mjs +72 -24
  37. package/esm2022/inputnumber/inputnumber.mjs +13 -3
  38. package/esm2022/inputtextarea/inputtextarea.mjs +2 -18
  39. package/esm2022/keyfilter/keyfilter.interface.mjs +2 -0
  40. package/esm2022/keyfilter/keyfilter.mjs +15 -3
  41. package/esm2022/keyfilter/public_api.mjs +2 -1
  42. package/esm2022/megamenu/megamenu.mjs +15 -6
  43. package/esm2022/menu/menu.mjs +13 -7
  44. package/esm2022/menubar/menubar.mjs +17 -8
  45. package/esm2022/messages/messages.mjs +27 -27
  46. package/esm2022/multiselect/multiselect.mjs +17 -9
  47. package/esm2022/organizationchart/organizationchart.mjs +5 -5
  48. package/esm2022/overlaypanel/overlaypanel.mjs +12 -13
  49. package/esm2022/paginator/paginator.mjs +23 -5
  50. package/esm2022/panel/panel.mjs +2 -2
  51. package/esm2022/panelmenu/panelmenu.mjs +48 -26
  52. package/esm2022/password/password.mjs +13 -4
  53. package/esm2022/picklist/picklist.mjs +8 -4
  54. package/esm2022/selectbutton/selectbutton.mjs +14 -16
  55. package/esm2022/sidebar/sidebar.mjs +44 -13
  56. package/esm2022/slidemenu/slidemenu.mjs +27 -17
  57. package/esm2022/speeddial/speeddial.mjs +291 -15
  58. package/esm2022/splitbutton/splitbutton.mjs +63 -8
  59. package/esm2022/splitter/splitter.mjs +2 -2
  60. package/esm2022/table/table.interface.mjs +1 -1
  61. package/esm2022/table/table.mjs +35 -16
  62. package/esm2022/tabmenu/tabmenu.mjs +13 -3
  63. package/esm2022/tabview/tabview.mjs +64 -15
  64. package/esm2022/tieredmenu/tieredmenu.mjs +21 -13
  65. package/esm2022/toast/toast.mjs +69 -29
  66. package/esm2022/togglebutton/togglebutton.mjs +2 -2
  67. package/esm2022/tooltip/tooltip.mjs +29 -18
  68. package/esm2022/treeselect/treeselect.mjs +5 -5
  69. package/esm2022/treetable/treetable.interface.mjs +1 -1
  70. package/esm2022/treetable/treetable.mjs +26 -4
  71. package/fesm2022/primeng-accordion.mjs +36 -8
  72. package/fesm2022/primeng-accordion.mjs.map +1 -1
  73. package/fesm2022/primeng-api.mjs.map +1 -1
  74. package/fesm2022/primeng-autocomplete.mjs +52 -30
  75. package/fesm2022/primeng-autocomplete.mjs.map +1 -1
  76. package/fesm2022/primeng-button.mjs +36 -22
  77. package/fesm2022/primeng-button.mjs.map +1 -1
  78. package/fesm2022/primeng-calendar.mjs +25 -5
  79. package/fesm2022/primeng-calendar.mjs.map +1 -1
  80. package/fesm2022/primeng-carousel.mjs +157 -27
  81. package/fesm2022/primeng-carousel.mjs.map +1 -1
  82. package/fesm2022/primeng-chips.mjs +7 -3
  83. package/fesm2022/primeng-chips.mjs.map +1 -1
  84. package/fesm2022/primeng-confirmdialog.mjs +21 -5
  85. package/fesm2022/primeng-confirmdialog.mjs.map +1 -1
  86. package/fesm2022/primeng-confirmpopup.mjs +2 -0
  87. package/fesm2022/primeng-confirmpopup.mjs.map +1 -1
  88. package/fesm2022/primeng-contextmenu.mjs +18 -11
  89. package/fesm2022/primeng-contextmenu.mjs.map +1 -1
  90. package/fesm2022/primeng-dataview.mjs +21 -3
  91. package/fesm2022/primeng-dataview.mjs.map +1 -1
  92. package/fesm2022/primeng-dialog.mjs +31 -23
  93. package/fesm2022/primeng-dialog.mjs.map +1 -1
  94. package/fesm2022/primeng-dropdown.mjs +7 -4
  95. package/fesm2022/primeng-dropdown.mjs.map +1 -1
  96. package/fesm2022/primeng-dynamicdialog.mjs +42 -10
  97. package/fesm2022/primeng-dynamicdialog.mjs.map +1 -1
  98. package/fesm2022/primeng-fileupload.mjs +49 -40
  99. package/fesm2022/primeng-fileupload.mjs.map +1 -1
  100. package/fesm2022/primeng-galleria.mjs +253 -34
  101. package/fesm2022/primeng-galleria.mjs.map +1 -1
  102. package/fesm2022/primeng-image.mjs +71 -23
  103. package/fesm2022/primeng-image.mjs.map +1 -1
  104. package/fesm2022/primeng-inputnumber.mjs +12 -2
  105. package/fesm2022/primeng-inputnumber.mjs.map +1 -1
  106. package/fesm2022/primeng-inputtextarea.mjs +1 -17
  107. package/fesm2022/primeng-inputtextarea.mjs.map +1 -1
  108. package/fesm2022/primeng-keyfilter.mjs +14 -2
  109. package/fesm2022/primeng-keyfilter.mjs.map +1 -1
  110. package/fesm2022/primeng-megamenu.mjs +14 -5
  111. package/fesm2022/primeng-megamenu.mjs.map +1 -1
  112. package/fesm2022/primeng-menu.mjs +12 -6
  113. package/fesm2022/primeng-menu.mjs.map +1 -1
  114. package/fesm2022/primeng-menubar.mjs +16 -7
  115. package/fesm2022/primeng-menubar.mjs.map +1 -1
  116. package/fesm2022/primeng-messages.mjs +26 -26
  117. package/fesm2022/primeng-messages.mjs.map +1 -1
  118. package/fesm2022/primeng-multiselect.mjs +16 -8
  119. package/fesm2022/primeng-multiselect.mjs.map +1 -1
  120. package/fesm2022/primeng-organizationchart.mjs +4 -4
  121. package/fesm2022/primeng-organizationchart.mjs.map +1 -1
  122. package/fesm2022/primeng-overlaypanel.mjs +11 -12
  123. package/fesm2022/primeng-overlaypanel.mjs.map +1 -1
  124. package/fesm2022/primeng-paginator.mjs +22 -4
  125. package/fesm2022/primeng-paginator.mjs.map +1 -1
  126. package/fesm2022/primeng-panel.mjs +2 -2
  127. package/fesm2022/primeng-panelmenu.mjs +47 -25
  128. package/fesm2022/primeng-panelmenu.mjs.map +1 -1
  129. package/fesm2022/primeng-password.mjs +12 -3
  130. package/fesm2022/primeng-password.mjs.map +1 -1
  131. package/fesm2022/primeng-picklist.mjs +7 -3
  132. package/fesm2022/primeng-picklist.mjs.map +1 -1
  133. package/fesm2022/primeng-selectbutton.mjs +13 -15
  134. package/fesm2022/primeng-selectbutton.mjs.map +1 -1
  135. package/fesm2022/primeng-sidebar.mjs +43 -12
  136. package/fesm2022/primeng-sidebar.mjs.map +1 -1
  137. package/fesm2022/primeng-slidemenu.mjs +26 -16
  138. package/fesm2022/primeng-slidemenu.mjs.map +1 -1
  139. package/fesm2022/primeng-speeddial.mjs +290 -14
  140. package/fesm2022/primeng-speeddial.mjs.map +1 -1
  141. package/fesm2022/primeng-splitbutton.mjs +62 -7
  142. package/fesm2022/primeng-splitbutton.mjs.map +1 -1
  143. package/fesm2022/primeng-splitter.mjs +2 -2
  144. package/fesm2022/primeng-splitter.mjs.map +1 -1
  145. package/fesm2022/primeng-table.mjs +34 -15
  146. package/fesm2022/primeng-table.mjs.map +1 -1
  147. package/fesm2022/primeng-tabmenu.mjs +12 -2
  148. package/fesm2022/primeng-tabmenu.mjs.map +1 -1
  149. package/fesm2022/primeng-tabview.mjs +63 -14
  150. package/fesm2022/primeng-tabview.mjs.map +1 -1
  151. package/fesm2022/primeng-tieredmenu.mjs +20 -12
  152. package/fesm2022/primeng-tieredmenu.mjs.map +1 -1
  153. package/fesm2022/primeng-toast.mjs +68 -28
  154. package/fesm2022/primeng-toast.mjs.map +1 -1
  155. package/fesm2022/primeng-togglebutton.mjs +2 -2
  156. package/fesm2022/primeng-togglebutton.mjs.map +1 -1
  157. package/fesm2022/primeng-tooltip.mjs +28 -17
  158. package/fesm2022/primeng-tooltip.mjs.map +1 -1
  159. package/fesm2022/primeng-treeselect.mjs +4 -4
  160. package/fesm2022/primeng-treeselect.mjs.map +1 -1
  161. package/fesm2022/primeng-treetable.mjs +25 -3
  162. package/fesm2022/primeng-treetable.mjs.map +1 -1
  163. package/galleria/galleria.d.ts +30 -5
  164. package/image/image.d.ts +16 -2
  165. package/inputtextarea/inputtextarea.d.ts +0 -2
  166. package/keyfilter/keyfilter.d.ts +6 -5
  167. package/keyfilter/keyfilter.interface.d.ts +5 -0
  168. package/keyfilter/public_api.d.ts +1 -0
  169. package/megamenu/megamenu.d.ts +3 -1
  170. package/menu/menu.d.ts +1 -0
  171. package/menubar/menubar.d.ts +3 -1
  172. package/multiselect/multiselect.d.ts +8 -6
  173. package/package.json +134 -134
  174. package/paginator/paginator.d.ts +7 -1
  175. package/panelmenu/panelmenu.d.ts +3 -1
  176. package/password/password.d.ts +6 -1
  177. package/resources/components/button/button.css +4 -0
  178. package/resources/components/menubar/menubar.css +4 -0
  179. package/resources/components/panel/panel.css +1 -1
  180. package/resources/components/splitter/splitter.css +2 -1
  181. package/resources/components/tabview/tabview.css +3 -2
  182. package/resources/primeng.css +3 -0
  183. package/resources/primeng.min.css +1 -1
  184. package/resources/themes/arya-blue/theme.css +16 -6
  185. package/resources/themes/arya-green/theme.css +16 -6
  186. package/resources/themes/arya-orange/theme.css +16 -6
  187. package/resources/themes/arya-purple/theme.css +16 -6
  188. package/resources/themes/bootstrap4-dark-blue/theme.css +16 -6
  189. package/resources/themes/bootstrap4-dark-purple/theme.css +16 -6
  190. package/resources/themes/bootstrap4-light-blue/theme.css +16 -6
  191. package/resources/themes/bootstrap4-light-purple/theme.css +16 -6
  192. package/resources/themes/fluent-light/theme.css +16 -6
  193. package/resources/themes/lara-dark-blue/theme.css +16 -6
  194. package/resources/themes/lara-dark-indigo/theme.css +16 -6
  195. package/resources/themes/lara-dark-purple/theme.css +16 -6
  196. package/resources/themes/lara-dark-teal/theme.css +16 -6
  197. package/resources/themes/lara-light-blue/theme.css +16 -6
  198. package/resources/themes/lara-light-indigo/theme.css +16 -6
  199. package/resources/themes/lara-light-purple/theme.css +16 -6
  200. package/resources/themes/lara-light-teal/theme.css +16 -6
  201. package/resources/themes/luna-amber/theme.css +16 -6
  202. package/resources/themes/luna-blue/theme.css +16 -6
  203. package/resources/themes/luna-green/theme.css +16 -6
  204. package/resources/themes/luna-pink/theme.css +16 -6
  205. package/resources/themes/md-dark-deeppurple/theme.css +16 -6
  206. package/resources/themes/md-dark-indigo/theme.css +16 -6
  207. package/resources/themes/md-light-deeppurple/theme.css +16 -6
  208. package/resources/themes/md-light-indigo/theme.css +16 -6
  209. package/resources/themes/mdc-dark-deeppurple/theme.css +16 -6
  210. package/resources/themes/mdc-dark-indigo/theme.css +16 -6
  211. package/resources/themes/mdc-light-deeppurple/theme.css +16 -6
  212. package/resources/themes/mdc-light-indigo/theme.css +16 -6
  213. package/resources/themes/mira/theme.css +16 -6
  214. package/resources/themes/nano/theme.css +16 -6
  215. package/resources/themes/nova/theme.css +16 -6
  216. package/resources/themes/nova-accent/theme.css +16 -6
  217. package/resources/themes/nova-alt/theme.css +16 -6
  218. package/resources/themes/rhea/theme.css +16 -6
  219. package/resources/themes/saga-blue/theme.css +16 -6
  220. package/resources/themes/saga-green/theme.css +16 -6
  221. package/resources/themes/saga-orange/theme.css +16 -6
  222. package/resources/themes/saga-purple/theme.css +16 -6
  223. package/resources/themes/soho-dark/theme.css +16 -6
  224. package/resources/themes/soho-light/theme.css +16 -6
  225. package/resources/themes/tailwind-light/theme.css +16 -6
  226. package/resources/themes/vela-blue/theme.css +16 -6
  227. package/resources/themes/vela-green/theme.css +16 -6
  228. package/resources/themes/vela-orange/theme.css +16 -6
  229. package/resources/themes/vela-purple/theme.css +16 -6
  230. package/resources/themes/viva-dark/theme.css +16 -6
  231. package/resources/themes/viva-light/theme.css +16 -6
  232. package/sidebar/sidebar.d.ts +1 -0
  233. package/slidemenu/slidemenu.d.ts +8 -6
  234. package/speeddial/speeddial.d.ts +34 -1
  235. package/splitbutton/splitbutton.d.ts +5 -1
  236. package/table/table.d.ts +12 -3
  237. package/table/table.interface.d.ts +1 -1
  238. package/tabmenu/tabmenu.d.ts +3 -1
  239. package/tabview/tabview.d.ts +10 -2
  240. package/tieredmenu/tieredmenu.d.ts +3 -1
  241. package/toast/toast.d.ts +8 -2
  242. package/tooltip/tooltip.d.ts +6 -6
  243. package/treeselect/treeselect.d.ts +5 -5
  244. package/treetable/treetable.d.ts +14 -4
  245. package/treetable/treetable.interface.d.ts +9 -2
@@ -14,6 +14,8 @@ import { WindowMinimizeIcon } from 'primeng/icons/windowminimize';
14
14
  import * as i3 from 'primeng/ripple';
15
15
  import { RippleModule } from 'primeng/ripple';
16
16
  import { ZIndexUtils, UniqueComponentId } from 'primeng/utils';
17
+ import * as i4 from 'primeng/focustrap';
18
+ import { FocusTrapModule } from 'primeng/focustrap';
17
19
 
18
20
  /**
19
21
  * Galleria is an advanced content gallery component.
@@ -90,6 +92,11 @@ class Galleria {
90
92
  * @group Props
91
93
  */
92
94
  autoPlay = false;
95
+ /**
96
+ * When enabled, autorun should stop by click.
97
+ * @group Props
98
+ */
99
+ shouldStopAutoplayByClick = true;
93
100
  /**
94
101
  * Time in milliseconds to scroll items.
95
102
  * @group Props
@@ -181,6 +188,7 @@ class Galleria {
181
188
  */
182
189
  visibleChange = new EventEmitter();
183
190
  mask;
191
+ container;
184
192
  templates;
185
193
  _visible = false;
186
194
  _activeIndex = 0;
@@ -252,6 +260,9 @@ class Galleria {
252
260
  switch (event.toState) {
253
261
  case 'visible':
254
262
  this.enableModality();
263
+ setTimeout(() => {
264
+ DomHandler.focus(DomHandler.findSingle(this.container.nativeElement, '[data-pc-section="closebutton"]'));
265
+ }, 25);
255
266
  break;
256
267
  case 'void':
257
268
  DomHandler.addClass(this.mask?.nativeElement, 'p-component-overlay-leave');
@@ -289,9 +300,16 @@ class Galleria {
289
300
  }
290
301
  }
291
302
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: Galleria, deps: [{ token: DOCUMENT }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.PrimeNGConfig }], target: i0.ɵɵFactoryTarget.Component });
292
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.2", type: Galleria, selector: "p-galleria", inputs: { activeIndex: "activeIndex", fullScreen: "fullScreen", id: "id", value: "value", numVisible: "numVisible", responsiveOptions: "responsiveOptions", showItemNavigators: "showItemNavigators", showThumbnailNavigators: "showThumbnailNavigators", showItemNavigatorsOnHover: "showItemNavigatorsOnHover", changeItemOnIndicatorHover: "changeItemOnIndicatorHover", circular: "circular", autoPlay: "autoPlay", transitionInterval: "transitionInterval", showThumbnails: "showThumbnails", thumbnailsPosition: "thumbnailsPosition", verticalThumbnailViewPortHeight: "verticalThumbnailViewPortHeight", showIndicators: "showIndicators", showIndicatorsOnItem: "showIndicatorsOnItem", indicatorsPosition: "indicatorsPosition", baseZIndex: "baseZIndex", maskClass: "maskClass", containerClass: "containerClass", containerStyle: "containerStyle", showTransitionOptions: "showTransitionOptions", hideTransitionOptions: "hideTransitionOptions", visible: "visible" }, outputs: { activeIndexChange: "activeIndexChange", visibleChange: "visibleChange" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "mask", first: true, predicate: ["mask"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
293
- <div *ngIf="fullScreen; else windowed">
294
- <div *ngIf="maskVisible" #mask [ngClass]="{ 'p-galleria-mask p-component-overlay p-component-overlay-enter': true, 'p-galleria-visible': this.visible }" [class]="maskClass">
303
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.2", type: Galleria, selector: "p-galleria", inputs: { activeIndex: "activeIndex", fullScreen: "fullScreen", id: "id", value: "value", numVisible: "numVisible", responsiveOptions: "responsiveOptions", showItemNavigators: "showItemNavigators", showThumbnailNavigators: "showThumbnailNavigators", showItemNavigatorsOnHover: "showItemNavigatorsOnHover", changeItemOnIndicatorHover: "changeItemOnIndicatorHover", circular: "circular", autoPlay: "autoPlay", shouldStopAutoplayByClick: "shouldStopAutoplayByClick", transitionInterval: "transitionInterval", showThumbnails: "showThumbnails", thumbnailsPosition: "thumbnailsPosition", verticalThumbnailViewPortHeight: "verticalThumbnailViewPortHeight", showIndicators: "showIndicators", showIndicatorsOnItem: "showIndicatorsOnItem", indicatorsPosition: "indicatorsPosition", baseZIndex: "baseZIndex", maskClass: "maskClass", containerClass: "containerClass", containerStyle: "containerStyle", showTransitionOptions: "showTransitionOptions", hideTransitionOptions: "hideTransitionOptions", visible: "visible" }, outputs: { activeIndexChange: "activeIndexChange", visibleChange: "visibleChange" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "mask", first: true, predicate: ["mask"], descendants: true }, { propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
304
+ <div *ngIf="fullScreen; else windowed" #container>
305
+ <div
306
+ *ngIf="maskVisible"
307
+ #mask
308
+ [ngClass]="{ 'p-galleria-mask p-component-overlay p-component-overlay-enter': true, 'p-galleria-visible': this.visible }"
309
+ [class]="maskClass"
310
+ [attr.role]="fullScreen ? 'dialog' : 'region'"
311
+ [attr.aria-modal]="fullScreen ? 'true' : undefined"
312
+ >
295
313
  <p-galleriaContent
296
314
  *ngIf="visible"
297
315
  [@animation]="{ value: 'visible', params: { showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions } }"
@@ -320,8 +338,15 @@ class Galleria {
320
338
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: Galleria, decorators: [{
321
339
  type: Component,
322
340
  args: [{ selector: 'p-galleria', template: `
323
- <div *ngIf="fullScreen; else windowed">
324
- <div *ngIf="maskVisible" #mask [ngClass]="{ 'p-galleria-mask p-component-overlay p-component-overlay-enter': true, 'p-galleria-visible': this.visible }" [class]="maskClass">
341
+ <div *ngIf="fullScreen; else windowed" #container>
342
+ <div
343
+ *ngIf="maskVisible"
344
+ #mask
345
+ [ngClass]="{ 'p-galleria-mask p-component-overlay p-component-overlay-enter': true, 'p-galleria-visible': this.visible }"
346
+ [class]="maskClass"
347
+ [attr.role]="fullScreen ? 'dialog' : 'region'"
348
+ [attr.aria-modal]="fullScreen ? 'true' : undefined"
349
+ >
325
350
  <p-galleriaContent
326
351
  *ngIf="visible"
327
352
  [@animation]="{ value: 'visible', params: { showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions } }"
@@ -375,6 +400,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImpor
375
400
  type: Input
376
401
  }], autoPlay: [{
377
402
  type: Input
403
+ }], shouldStopAutoplayByClick: [{
404
+ type: Input
378
405
  }], transitionInterval: [{
379
406
  type: Input
380
407
  }], showThumbnails: [{
@@ -410,6 +437,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImpor
410
437
  }], mask: [{
411
438
  type: ViewChild,
412
439
  args: ['mask']
440
+ }], container: [{
441
+ type: ViewChild,
442
+ args: ['container']
413
443
  }], templates: [{
414
444
  type: ContentChildren,
415
445
  args: [PrimeTemplate]
@@ -418,6 +448,7 @@ class GalleriaContent {
418
448
  galleria;
419
449
  cd;
420
450
  differs;
451
+ config;
421
452
  get activeIndex() {
422
453
  return this._activeIndex;
423
454
  }
@@ -428,16 +459,18 @@ class GalleriaContent {
428
459
  numVisible;
429
460
  maskHide = new EventEmitter();
430
461
  activeItemChange = new EventEmitter();
462
+ closeButton;
431
463
  id;
432
464
  _activeIndex = 0;
433
465
  slideShowActive = true;
434
466
  interval;
435
467
  styleClass;
436
468
  differ;
437
- constructor(galleria, cd, differs) {
469
+ constructor(galleria, cd, differs, config) {
438
470
  this.galleria = galleria;
439
471
  this.cd = cd;
440
472
  this.differs = differs;
473
+ this.config = config;
441
474
  this.id = this.galleria.id || UniqueComponentId();
442
475
  this.differ = this.differs.find(this.galleria).create();
443
476
  }
@@ -465,6 +498,9 @@ class GalleriaContent {
465
498
  this.slideShowActive = true;
466
499
  }
467
500
  stopSlideShow() {
501
+ if (this.galleria.autoPlay && !this.galleria.shouldStopAutoplayByClick) {
502
+ return;
503
+ }
468
504
  if (this.interval) {
469
505
  clearInterval(this.interval);
470
506
  }
@@ -484,8 +520,11 @@ class GalleriaContent {
484
520
  this.activeItemChange.emit(this.activeIndex);
485
521
  }
486
522
  }
487
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: GalleriaContent, deps: [{ token: Galleria }, { token: i0.ChangeDetectorRef }, { token: i0.KeyValueDiffers }], target: i0.ɵɵFactoryTarget.Component });
488
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.2", type: GalleriaContent, selector: "p-galleriaContent", inputs: { activeIndex: "activeIndex", value: "value", numVisible: "numVisible" }, outputs: { maskHide: "maskHide", activeItemChange: "activeItemChange" }, ngImport: i0, template: `
523
+ closeAriaLabel() {
524
+ return this.config.translation.aria ? this.config.translation.aria.close : undefined;
525
+ }
526
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: GalleriaContent, deps: [{ token: Galleria }, { token: i0.ChangeDetectorRef }, { token: i0.KeyValueDiffers }, { token: i1.PrimeNGConfig }], target: i0.ɵɵFactoryTarget.Component });
527
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.2", type: GalleriaContent, selector: "p-galleriaContent", inputs: { activeIndex: "activeIndex", value: "value", numVisible: "numVisible" }, outputs: { maskHide: "maskHide", activeItemChange: "activeItemChange" }, viewQueries: [{ propertyName: "closeButton", first: true, predicate: ["closeButton"], descendants: true }], ngImport: i0, template: `
489
528
  <div
490
529
  [attr.id]="id"
491
530
  *ngIf="value && value.length > 0"
@@ -497,16 +536,18 @@ class GalleriaContent {
497
536
  }"
498
537
  [ngStyle]="!galleria.fullScreen ? galleria.containerStyle : {}"
499
538
  [class]="galleriaClass()"
539
+ pFocusTrap
500
540
  >
501
- <button *ngIf="galleria.fullScreen" type="button" class="p-galleria-close p-link" (click)="maskHide.emit()" pRipple>
541
+ <button *ngIf="galleria.fullScreen" type="button" class="p-galleria-close p-link" (click)="maskHide.emit()" pRipple [attr.aria-label]="closeAriaLabel()" [attr.data-pc-section]="'closebutton'">
502
542
  <TimesIcon *ngIf="!galleria.closeIconTemplate" [styleClass]="'p-galleria-close-icon'" />
503
543
  <ng-template *ngTemplateOutlet="galleria.closeIconTemplate"></ng-template>
504
544
  </button>
505
545
  <div *ngIf="galleria.templates && galleria.headerFacet" class="p-galleria-header">
506
546
  <p-galleriaItemSlot type="header" [templates]="galleria.templates"></p-galleriaItemSlot>
507
547
  </div>
508
- <div class="p-galleria-content">
548
+ <div class="p-galleria-content" [attr.aria-live]="galleria.autoPlay ? 'polite' : 'off'">
509
549
  <p-galleriaItem
550
+ [id]="id"
510
551
  [value]="value"
511
552
  [activeIndex]="activeIndex"
512
553
  [circular]="galleria.circular"
@@ -544,7 +585,7 @@ class GalleriaContent {
544
585
  <p-galleriaItemSlot type="footer" [templates]="galleria.templates"></p-galleriaItemSlot>
545
586
  </div>
546
587
  </div>
547
- `, isInline: true, dependencies: [{ kind: "directive", type: i0.forwardRef(function () { return i2.NgClass; }), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgTemplateOutlet; }), selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgStyle; }), selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i0.forwardRef(function () { return i3.Ripple; }), selector: "[pRipple]" }, { kind: "component", type: i0.forwardRef(function () { return TimesIcon; }), selector: "TimesIcon" }, { kind: "component", type: i0.forwardRef(function () { return GalleriaItemSlot; }), selector: "p-galleriaItemSlot", inputs: ["templates", "index", "item", "type"] }, { kind: "component", type: i0.forwardRef(function () { return GalleriaItem; }), selector: "p-galleriaItem", inputs: ["circular", "value", "showItemNavigators", "showIndicators", "slideShowActive", "changeItemOnIndicatorHover", "autoPlay", "templates", "indicatorFacet", "captionFacet", "activeIndex"], outputs: ["startSlideShow", "stopSlideShow", "onActiveIndexChange"] }, { kind: "component", type: i0.forwardRef(function () { return GalleriaThumbnails; }), selector: "p-galleriaThumbnails", inputs: ["containerId", "value", "isVertical", "slideShowActive", "circular", "responsiveOptions", "contentHeight", "showThumbnailNavigators", "templates", "numVisible", "activeIndex"], outputs: ["onActiveIndexChange", "stopSlideShow"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
588
+ `, isInline: true, dependencies: [{ kind: "directive", type: i0.forwardRef(function () { return i2.NgClass; }), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgTemplateOutlet; }), selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgStyle; }), selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i0.forwardRef(function () { return i3.Ripple; }), selector: "[pRipple]" }, { kind: "component", type: i0.forwardRef(function () { return TimesIcon; }), selector: "TimesIcon" }, { kind: "directive", type: i0.forwardRef(function () { return i4.FocusTrap; }), selector: "[pFocusTrap]", inputs: ["pFocusTrapDisabled"] }, { kind: "component", type: i0.forwardRef(function () { return GalleriaItemSlot; }), selector: "p-galleriaItemSlot", inputs: ["templates", "index", "item", "type"] }, { kind: "component", type: i0.forwardRef(function () { return GalleriaItem; }), selector: "p-galleriaItem", inputs: ["id", "circular", "value", "showItemNavigators", "showIndicators", "slideShowActive", "changeItemOnIndicatorHover", "autoPlay", "templates", "indicatorFacet", "captionFacet", "activeIndex"], outputs: ["startSlideShow", "stopSlideShow", "onActiveIndexChange"] }, { kind: "component", type: i0.forwardRef(function () { return GalleriaThumbnails; }), selector: "p-galleriaThumbnails", inputs: ["containerId", "value", "isVertical", "slideShowActive", "circular", "responsiveOptions", "contentHeight", "showThumbnailNavigators", "templates", "numVisible", "activeIndex"], outputs: ["onActiveIndexChange", "stopSlideShow"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
548
589
  }
549
590
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: GalleriaContent, decorators: [{
550
591
  type: Component,
@@ -562,16 +603,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImpor
562
603
  }"
563
604
  [ngStyle]="!galleria.fullScreen ? galleria.containerStyle : {}"
564
605
  [class]="galleriaClass()"
606
+ pFocusTrap
565
607
  >
566
- <button *ngIf="galleria.fullScreen" type="button" class="p-galleria-close p-link" (click)="maskHide.emit()" pRipple>
608
+ <button *ngIf="galleria.fullScreen" type="button" class="p-galleria-close p-link" (click)="maskHide.emit()" pRipple [attr.aria-label]="closeAriaLabel()" [attr.data-pc-section]="'closebutton'">
567
609
  <TimesIcon *ngIf="!galleria.closeIconTemplate" [styleClass]="'p-galleria-close-icon'" />
568
610
  <ng-template *ngTemplateOutlet="galleria.closeIconTemplate"></ng-template>
569
611
  </button>
570
612
  <div *ngIf="galleria.templates && galleria.headerFacet" class="p-galleria-header">
571
613
  <p-galleriaItemSlot type="header" [templates]="galleria.templates"></p-galleriaItemSlot>
572
614
  </div>
573
- <div class="p-galleria-content">
615
+ <div class="p-galleria-content" [attr.aria-live]="galleria.autoPlay ? 'polite' : 'off'">
574
616
  <p-galleriaItem
617
+ [id]="id"
575
618
  [value]="value"
576
619
  [activeIndex]="activeIndex"
577
620
  [circular]="galleria.circular"
@@ -612,7 +655,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImpor
612
655
  `,
613
656
  changeDetection: ChangeDetectionStrategy.OnPush
614
657
  }]
615
- }], ctorParameters: function () { return [{ type: Galleria }, { type: i0.ChangeDetectorRef }, { type: i0.KeyValueDiffers }]; }, propDecorators: { activeIndex: [{
658
+ }], ctorParameters: function () { return [{ type: Galleria }, { type: i0.ChangeDetectorRef }, { type: i0.KeyValueDiffers }, { type: i1.PrimeNGConfig }]; }, propDecorators: { activeIndex: [{
616
659
  type: Input
617
660
  }], value: [{
618
661
  type: Input
@@ -622,6 +665,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImpor
622
665
  type: Output
623
666
  }], activeItemChange: [{
624
667
  type: Output
668
+ }], closeButton: [{
669
+ type: ViewChild,
670
+ args: ['closeButton']
625
671
  }] } });
626
672
  class GalleriaItemSlot {
627
673
  templates;
@@ -701,6 +747,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImpor
701
747
  }] } });
702
748
  class GalleriaItem {
703
749
  galleria;
750
+ id;
704
751
  circular = false;
705
752
  value;
706
753
  showItemNavigators = false;
@@ -774,9 +821,21 @@ class GalleriaItem {
774
821
  this.onActiveIndexChange.emit(index);
775
822
  }
776
823
  }
777
- onIndicatorKeyDown(index) {
778
- this.stopTheSlideShow();
779
- this.onActiveIndexChange.emit(index);
824
+ onIndicatorKeyDown(event, index) {
825
+ switch (event.code) {
826
+ case 'Enter':
827
+ case 'Space':
828
+ this.stopTheSlideShow();
829
+ this.onActiveIndexChange.emit(index);
830
+ event.preventDefault();
831
+ break;
832
+ case 'ArrowDown':
833
+ case 'ArrowUp':
834
+ event.preventDefault();
835
+ break;
836
+ default:
837
+ break;
838
+ }
780
839
  }
781
840
  isNavForwardDisabled() {
782
841
  return !this.circular && this.activeIndex === this.value.length - 1;
@@ -787,13 +846,23 @@ class GalleriaItem {
787
846
  isIndicatorItemActive(index) {
788
847
  return this.activeIndex === index;
789
848
  }
849
+ ariaSlideLabel() {
850
+ return this.galleria.config.translation.aria ? this.galleria.config.translation.aria.slide : undefined;
851
+ }
852
+ ariaSlideNumber(value) {
853
+ return this.galleria.config.translation.aria ? this.galleria.config.translation.aria.slideNumber.replace(/{slideNumber}/g, value) : undefined;
854
+ }
855
+ ariaPageLabel(value) {
856
+ return this.galleria.config.translation.aria ? this.galleria.config.translation.aria.pageLabel.replace(/{page}/g, value) : undefined;
857
+ }
790
858
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: GalleriaItem, deps: [{ token: Galleria }], target: i0.ɵɵFactoryTarget.Component });
791
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.2", type: GalleriaItem, selector: "p-galleriaItem", inputs: { circular: "circular", value: "value", showItemNavigators: "showItemNavigators", showIndicators: "showIndicators", slideShowActive: "slideShowActive", changeItemOnIndicatorHover: "changeItemOnIndicatorHover", autoPlay: "autoPlay", templates: "templates", indicatorFacet: "indicatorFacet", captionFacet: "captionFacet", activeIndex: "activeIndex" }, outputs: { startSlideShow: "startSlideShow", stopSlideShow: "stopSlideShow", onActiveIndexChange: "onActiveIndexChange" }, usesOnChanges: true, ngImport: i0, template: `
859
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.2", type: GalleriaItem, selector: "p-galleriaItem", inputs: { id: "id", circular: "circular", value: "value", showItemNavigators: "showItemNavigators", showIndicators: "showIndicators", slideShowActive: "slideShowActive", changeItemOnIndicatorHover: "changeItemOnIndicatorHover", autoPlay: "autoPlay", templates: "templates", indicatorFacet: "indicatorFacet", captionFacet: "captionFacet", activeIndex: "activeIndex" }, outputs: { startSlideShow: "startSlideShow", stopSlideShow: "stopSlideShow", onActiveIndexChange: "onActiveIndexChange" }, usesOnChanges: true, ngImport: i0, template: `
792
860
  <div class="p-galleria-item-wrapper">
793
861
  <div class="p-galleria-item-container">
794
862
  <button
795
863
  *ngIf="showItemNavigators"
796
864
  type="button"
865
+ role="navigation"
797
866
  [ngClass]="{ 'p-galleria-item-prev p-galleria-item-nav p-link': true, 'p-disabled': this.isNavBackwardDisabled() }"
798
867
  (click)="navBackward($event)"
799
868
  [disabled]="isNavBackwardDisabled()"
@@ -802,7 +871,9 @@ class GalleriaItem {
802
871
  <ChevronLeftIcon *ngIf="!galleria.itemPreviousIconTemplate" [styleClass]="'p-galleria-item-prev-icon'" />
803
872
  <ng-template *ngTemplateOutlet="galleria.itemPreviousIconTemplate"></ng-template>
804
873
  </button>
805
- <p-galleriaItemSlot type="item" [item]="activeItem" [templates]="templates" class="p-galleria-item"></p-galleriaItemSlot>
874
+ <div [id]="id + '_item_' + activeIndex" role="group" [attr.aria-label]="ariaSlideNumber(activeIndex + 1)" [attr.aria-roledescription]="ariaSlideLabel()" [style.width]="'100%'">
875
+ <p-galleriaItemSlot type="item" [item]="activeItem" [templates]="templates" class="p-galleria-item"></p-galleriaItemSlot>
876
+ </div>
806
877
  <button
807
878
  *ngIf="showItemNavigators"
808
879
  type="button"
@@ -810,6 +881,7 @@ class GalleriaItem {
810
881
  (click)="navForward($event)"
811
882
  [disabled]="isNavForwardDisabled()"
812
883
  pRipple
884
+ role="navigation"
813
885
  >
814
886
  <ChevronRightIcon *ngIf="!galleria.itemNextIconTemplate" [styleClass]="'p-galleria-item-next-icon'" />
815
887
  <ng-template *ngTemplateOutlet="galleria.itemNextIconTemplate"></ng-template>
@@ -824,8 +896,11 @@ class GalleriaItem {
824
896
  tabindex="0"
825
897
  (click)="onIndicatorClick(index)"
826
898
  (mouseenter)="onIndicatorMouseEnter(index)"
827
- (keydown.enter)="onIndicatorKeyDown(index)"
899
+ (keydown)="onIndicatorKeyDown(event, index)"
828
900
  [ngClass]="{ 'p-galleria-indicator': true, 'p-highlight': isIndicatorItemActive(index) }"
901
+ [attr.aria-label]="ariaPageLabel(index + 1)"
902
+ [attr.aria-selected]="activeIndex === index"
903
+ [attr.aria-controls]="id + '_item_' + index"
829
904
  >
830
905
  <button type="button" tabIndex="-1" class="p-link" *ngIf="!indicatorFacet"></button>
831
906
  <p-galleriaItemSlot type="indicator" [index]="index" [templates]="templates"></p-galleriaItemSlot>
@@ -844,6 +919,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImpor
844
919
  <button
845
920
  *ngIf="showItemNavigators"
846
921
  type="button"
922
+ role="navigation"
847
923
  [ngClass]="{ 'p-galleria-item-prev p-galleria-item-nav p-link': true, 'p-disabled': this.isNavBackwardDisabled() }"
848
924
  (click)="navBackward($event)"
849
925
  [disabled]="isNavBackwardDisabled()"
@@ -852,7 +928,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImpor
852
928
  <ChevronLeftIcon *ngIf="!galleria.itemPreviousIconTemplate" [styleClass]="'p-galleria-item-prev-icon'" />
853
929
  <ng-template *ngTemplateOutlet="galleria.itemPreviousIconTemplate"></ng-template>
854
930
  </button>
855
- <p-galleriaItemSlot type="item" [item]="activeItem" [templates]="templates" class="p-galleria-item"></p-galleriaItemSlot>
931
+ <div [id]="id + '_item_' + activeIndex" role="group" [attr.aria-label]="ariaSlideNumber(activeIndex + 1)" [attr.aria-roledescription]="ariaSlideLabel()" [style.width]="'100%'">
932
+ <p-galleriaItemSlot type="item" [item]="activeItem" [templates]="templates" class="p-galleria-item"></p-galleriaItemSlot>
933
+ </div>
856
934
  <button
857
935
  *ngIf="showItemNavigators"
858
936
  type="button"
@@ -860,6 +938,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImpor
860
938
  (click)="navForward($event)"
861
939
  [disabled]="isNavForwardDisabled()"
862
940
  pRipple
941
+ role="navigation"
863
942
  >
864
943
  <ChevronRightIcon *ngIf="!galleria.itemNextIconTemplate" [styleClass]="'p-galleria-item-next-icon'" />
865
944
  <ng-template *ngTemplateOutlet="galleria.itemNextIconTemplate"></ng-template>
@@ -874,8 +953,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImpor
874
953
  tabindex="0"
875
954
  (click)="onIndicatorClick(index)"
876
955
  (mouseenter)="onIndicatorMouseEnter(index)"
877
- (keydown.enter)="onIndicatorKeyDown(index)"
956
+ (keydown)="onIndicatorKeyDown(event, index)"
878
957
  [ngClass]="{ 'p-galleria-indicator': true, 'p-highlight': isIndicatorItemActive(index) }"
958
+ [attr.aria-label]="ariaPageLabel(index + 1)"
959
+ [attr.aria-selected]="activeIndex === index"
960
+ [attr.aria-controls]="id + '_item_' + index"
879
961
  >
880
962
  <button type="button" tabIndex="-1" class="p-link" *ngIf="!indicatorFacet"></button>
881
963
  <p-galleriaItemSlot type="indicator" [index]="index" [templates]="templates"></p-galleriaItemSlot>
@@ -885,7 +967,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImpor
885
967
  `,
886
968
  changeDetection: ChangeDetectionStrategy.OnPush
887
969
  }]
888
- }], ctorParameters: function () { return [{ type: Galleria }]; }, propDecorators: { circular: [{
970
+ }], ctorParameters: function () { return [{ type: Galleria }]; }, propDecorators: { id: [{
971
+ type: Input
972
+ }], circular: [{
889
973
  type: Input
890
974
  }], value: [{
891
975
  type: Input
@@ -1113,6 +1197,74 @@ class GalleriaThumbnails {
1113
1197
  this.onActiveIndexChange.emit(this.activeIndex);
1114
1198
  }
1115
1199
  }
1200
+ onThumbnailKeydown(event, index) {
1201
+ if (event.code === 'Enter' || event.code === 'Space') {
1202
+ this.onItemClick(index);
1203
+ event.preventDefault();
1204
+ }
1205
+ switch (event.code) {
1206
+ case 'ArrowRight':
1207
+ this.onRightKey();
1208
+ break;
1209
+ case 'ArrowLeft':
1210
+ this.onLeftKey();
1211
+ break;
1212
+ case 'Home':
1213
+ this.onHomeKey();
1214
+ event.preventDefault();
1215
+ break;
1216
+ case 'End':
1217
+ this.onEndKey();
1218
+ event.preventDefault();
1219
+ break;
1220
+ case 'ArrowUp':
1221
+ case 'ArrowDown':
1222
+ event.preventDefault();
1223
+ break;
1224
+ case 'Tab':
1225
+ this.onTabKey();
1226
+ break;
1227
+ default:
1228
+ break;
1229
+ }
1230
+ }
1231
+ onRightKey() {
1232
+ const indicators = DomHandler.find(this.itemsContainer.nativeElement, '[data-pc-section="thumbnailitem"]');
1233
+ const activeIndex = this.findFocusedIndicatorIndex();
1234
+ this.changedFocusedIndicator(activeIndex, activeIndex + 1 === indicators.length ? indicators.length - 1 : activeIndex + 1);
1235
+ }
1236
+ onLeftKey() {
1237
+ const activeIndex = this.findFocusedIndicatorIndex();
1238
+ this.changedFocusedIndicator(activeIndex, activeIndex - 1 <= 0 ? 0 : activeIndex - 1);
1239
+ }
1240
+ onHomeKey() {
1241
+ const activeIndex = this.findFocusedIndicatorIndex();
1242
+ this.changedFocusedIndicator(activeIndex, 0);
1243
+ }
1244
+ onEndKey() {
1245
+ const indicators = DomHandler.find(this.itemsContainer.nativeElement, '[data-pc-section="thumbnailitem"]');
1246
+ const activeIndex = this.findFocusedIndicatorIndex();
1247
+ this.changedFocusedIndicator(activeIndex, indicators.length - 1);
1248
+ }
1249
+ onTabKey() {
1250
+ const indicators = [...DomHandler.find(this.itemsContainer.nativeElement, '[data-pc-section="thumbnailitem"]')];
1251
+ const highlightedIndex = indicators.findIndex((ind) => DomHandler.getAttribute(ind, 'data-p-active') === true);
1252
+ const activeIndicator = DomHandler.findSingle(this.itemsContainer.nativeElement, '[tabindex="0"]');
1253
+ const activeIndex = indicators.findIndex((ind) => ind === activeIndicator.parentElement);
1254
+ indicators[activeIndex].children[0].tabIndex = '-1';
1255
+ indicators[highlightedIndex].children[0].tabIndex = '0';
1256
+ }
1257
+ findFocusedIndicatorIndex() {
1258
+ const indicators = [...DomHandler.find(this.itemsContainer.nativeElement, '[data-pc-section="thumbnailitem"]')];
1259
+ const activeIndicator = DomHandler.findSingle(this.itemsContainer.nativeElement, '[data-pc-section="thumbnailitem"] > [tabindex="0"]');
1260
+ return indicators.findIndex((ind) => ind === activeIndicator.parentElement);
1261
+ }
1262
+ changedFocusedIndicator(prevInd, nextInd) {
1263
+ const indicators = DomHandler.find(this.itemsContainer.nativeElement, '[data-pc-section="thumbnailitem"]');
1264
+ indicators[prevInd].children[0].tabIndex = '-1';
1265
+ indicators[nextInd].children[0].tabIndex = '0';
1266
+ indicators[nextInd].children[0].focus();
1267
+ }
1116
1268
  step(dir) {
1117
1269
  let totalShiftedItems = this.totalShiftedItems + dir;
1118
1270
  if (dir < 0 && -1 * totalShiftedItems + this.d_numVisible > this.value.length - 1) {
@@ -1222,11 +1374,28 @@ class GalleriaThumbnails {
1222
1374
  this.thumbnailsStyle.parentNode?.removeChild(this.thumbnailsStyle);
1223
1375
  }
1224
1376
  }
1377
+ ariaPrevButtonLabel() {
1378
+ return this.galleria.config.translation.aria ? this.galleria.config.translation.aria.prevPageLabel : undefined;
1379
+ }
1380
+ ariaNextButtonLabel() {
1381
+ return this.galleria.config.translation.aria ? this.galleria.config.translation.aria.nextPageLabel : undefined;
1382
+ }
1383
+ ariaPageLabel(value) {
1384
+ return this.galleria.config.translation.aria ? this.galleria.config.translation.aria.pageLabel.replace(/{page}/g, value) : undefined;
1385
+ }
1225
1386
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: GalleriaThumbnails, deps: [{ token: Galleria }, { token: DOCUMENT }, { token: PLATFORM_ID }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
1226
1387
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.2", type: GalleriaThumbnails, selector: "p-galleriaThumbnails", inputs: { containerId: "containerId", value: "value", isVertical: "isVertical", slideShowActive: "slideShowActive", circular: "circular", responsiveOptions: "responsiveOptions", contentHeight: "contentHeight", showThumbnailNavigators: "showThumbnailNavigators", templates: "templates", numVisible: "numVisible", activeIndex: "activeIndex" }, outputs: { onActiveIndexChange: "onActiveIndexChange", stopSlideShow: "stopSlideShow" }, viewQueries: [{ propertyName: "itemsContainer", first: true, predicate: ["itemsContainer"], descendants: true }], ngImport: i0, template: `
1227
1388
  <div class="p-galleria-thumbnail-wrapper">
1228
1389
  <div class="p-galleria-thumbnail-container">
1229
- <button *ngIf="showThumbnailNavigators" type="button" [ngClass]="{ 'p-galleria-thumbnail-prev p-link': true, 'p-disabled': this.isNavBackwardDisabled() }" (click)="navBackward($event)" [disabled]="isNavBackwardDisabled()" pRipple>
1390
+ <button
1391
+ *ngIf="showThumbnailNavigators"
1392
+ type="button"
1393
+ [ngClass]="{ 'p-galleria-thumbnail-prev p-link': true, 'p-disabled': this.isNavBackwardDisabled() }"
1394
+ (click)="navBackward($event)"
1395
+ [disabled]="isNavBackwardDisabled()"
1396
+ pRipple
1397
+ [attr.aria-label]="ariaPrevButtonLabel()"
1398
+ >
1230
1399
  <ng-container *ngIf="!galleria.previousThumbnailIconTemplate">
1231
1400
  <ChevronLeftIcon *ngIf="!isVertical" [styleClass]="'p-galleria-thumbnail-prev-icon'" />
1232
1401
  <ChevronUpIcon *ngIf="isVertical" [styleClass]="'p-galleria-thumbnail-prev-icon'" />
@@ -1234,7 +1403,7 @@ class GalleriaThumbnails {
1234
1403
  <ng-template *ngTemplateOutlet="galleria.previousThumbnailIconTemplate"></ng-template>
1235
1404
  </button>
1236
1405
  <div class="p-galleria-thumbnail-items-container" [ngStyle]="{ height: isVertical ? contentHeight : '' }">
1237
- <div #itemsContainer class="p-galleria-thumbnail-items" (transitionend)="onTransitionEnd()" (touchstart)="onTouchStart($event)" (touchmove)="onTouchMove($event)">
1406
+ <div #itemsContainer class="p-galleria-thumbnail-items" (transitionend)="onTransitionEnd()" (touchstart)="onTouchStart($event)" (touchmove)="onTouchMove($event)" role="tablist">
1238
1407
  <div
1239
1408
  *ngFor="let item of value; let index = index"
1240
1409
  [ngClass]="{
@@ -1244,14 +1413,35 @@ class GalleriaThumbnails {
1244
1413
  'p-galleria-thumbnail-item-start': firstItemAciveIndex() === index,
1245
1414
  'p-galleria-thumbnail-item-end': lastItemActiveIndex() === index
1246
1415
  }"
1416
+ [attr.aria-selected]="activeIndex === index"
1417
+ [attr.aria-controls]="containerId + '_item_' + index"
1418
+ [attr.data-pc-section]="'thumbnailitem'"
1419
+ [attr.data-p-active]="activeIndex === index"
1420
+ (keydown)="onThumbnailKeydown($event, index)"
1247
1421
  >
1248
- <div class="p-galleria-thumbnail-item-content" [attr.tabindex]="getTabIndex(index)" (click)="onItemClick(index)" (touchend)="onItemClick(index)" (keydown.enter)="onItemClick(index)">
1422
+ <div
1423
+ class="p-galleria-thumbnail-item-content"
1424
+ [attr.tabindex]="activeIndex === index ? 0 : -1"
1425
+ [attr.aria-current]="activeIndex === index ? 'page' : undefined"
1426
+ [attr.aria-label]="ariaPageLabel(index + 1)"
1427
+ (click)="onItemClick(index)"
1428
+ (touchend)="onItemClick(index)"
1429
+ (keydown.enter)="onItemClick(index)"
1430
+ >
1249
1431
  <p-galleriaItemSlot type="thumbnail" [item]="item" [templates]="templates"></p-galleriaItemSlot>
1250
1432
  </div>
1251
1433
  </div>
1252
1434
  </div>
1253
1435
  </div>
1254
- <button *ngIf="showThumbnailNavigators" type="button" [ngClass]="{ 'p-galleria-thumbnail-next p-link': true, 'p-disabled': this.isNavForwardDisabled() }" (click)="navForward($event)" [disabled]="isNavForwardDisabled()" pRipple>
1436
+ <button
1437
+ *ngIf="showThumbnailNavigators"
1438
+ type="button"
1439
+ [ngClass]="{ 'p-galleria-thumbnail-next p-link': true, 'p-disabled': this.isNavForwardDisabled() }"
1440
+ (click)="navForward($event)"
1441
+ [disabled]="isNavForwardDisabled()"
1442
+ pRipple
1443
+ [attr.aria-label]="ariaNextButtonLabel()"
1444
+ >
1255
1445
  <ng-container *ngIf="!galleria.nextThumbnailIconTemplate">
1256
1446
  <ChevronRightIcon *ngIf="!isVertical" [ngClass]="'p-galleria-thumbnail-next-icon'" />
1257
1447
  <ChevronDownIcon *ngIf="isVertical" [ngClass]="'p-galleria-thumbnail-next-icon'" />
@@ -1269,7 +1459,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImpor
1269
1459
  template: `
1270
1460
  <div class="p-galleria-thumbnail-wrapper">
1271
1461
  <div class="p-galleria-thumbnail-container">
1272
- <button *ngIf="showThumbnailNavigators" type="button" [ngClass]="{ 'p-galleria-thumbnail-prev p-link': true, 'p-disabled': this.isNavBackwardDisabled() }" (click)="navBackward($event)" [disabled]="isNavBackwardDisabled()" pRipple>
1462
+ <button
1463
+ *ngIf="showThumbnailNavigators"
1464
+ type="button"
1465
+ [ngClass]="{ 'p-galleria-thumbnail-prev p-link': true, 'p-disabled': this.isNavBackwardDisabled() }"
1466
+ (click)="navBackward($event)"
1467
+ [disabled]="isNavBackwardDisabled()"
1468
+ pRipple
1469
+ [attr.aria-label]="ariaPrevButtonLabel()"
1470
+ >
1273
1471
  <ng-container *ngIf="!galleria.previousThumbnailIconTemplate">
1274
1472
  <ChevronLeftIcon *ngIf="!isVertical" [styleClass]="'p-galleria-thumbnail-prev-icon'" />
1275
1473
  <ChevronUpIcon *ngIf="isVertical" [styleClass]="'p-galleria-thumbnail-prev-icon'" />
@@ -1277,7 +1475,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImpor
1277
1475
  <ng-template *ngTemplateOutlet="galleria.previousThumbnailIconTemplate"></ng-template>
1278
1476
  </button>
1279
1477
  <div class="p-galleria-thumbnail-items-container" [ngStyle]="{ height: isVertical ? contentHeight : '' }">
1280
- <div #itemsContainer class="p-galleria-thumbnail-items" (transitionend)="onTransitionEnd()" (touchstart)="onTouchStart($event)" (touchmove)="onTouchMove($event)">
1478
+ <div #itemsContainer class="p-galleria-thumbnail-items" (transitionend)="onTransitionEnd()" (touchstart)="onTouchStart($event)" (touchmove)="onTouchMove($event)" role="tablist">
1281
1479
  <div
1282
1480
  *ngFor="let item of value; let index = index"
1283
1481
  [ngClass]="{
@@ -1287,14 +1485,35 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImpor
1287
1485
  'p-galleria-thumbnail-item-start': firstItemAciveIndex() === index,
1288
1486
  'p-galleria-thumbnail-item-end': lastItemActiveIndex() === index
1289
1487
  }"
1488
+ [attr.aria-selected]="activeIndex === index"
1489
+ [attr.aria-controls]="containerId + '_item_' + index"
1490
+ [attr.data-pc-section]="'thumbnailitem'"
1491
+ [attr.data-p-active]="activeIndex === index"
1492
+ (keydown)="onThumbnailKeydown($event, index)"
1290
1493
  >
1291
- <div class="p-galleria-thumbnail-item-content" [attr.tabindex]="getTabIndex(index)" (click)="onItemClick(index)" (touchend)="onItemClick(index)" (keydown.enter)="onItemClick(index)">
1494
+ <div
1495
+ class="p-galleria-thumbnail-item-content"
1496
+ [attr.tabindex]="activeIndex === index ? 0 : -1"
1497
+ [attr.aria-current]="activeIndex === index ? 'page' : undefined"
1498
+ [attr.aria-label]="ariaPageLabel(index + 1)"
1499
+ (click)="onItemClick(index)"
1500
+ (touchend)="onItemClick(index)"
1501
+ (keydown.enter)="onItemClick(index)"
1502
+ >
1292
1503
  <p-galleriaItemSlot type="thumbnail" [item]="item" [templates]="templates"></p-galleriaItemSlot>
1293
1504
  </div>
1294
1505
  </div>
1295
1506
  </div>
1296
1507
  </div>
1297
- <button *ngIf="showThumbnailNavigators" type="button" [ngClass]="{ 'p-galleria-thumbnail-next p-link': true, 'p-disabled': this.isNavForwardDisabled() }" (click)="navForward($event)" [disabled]="isNavForwardDisabled()" pRipple>
1508
+ <button
1509
+ *ngIf="showThumbnailNavigators"
1510
+ type="button"
1511
+ [ngClass]="{ 'p-galleria-thumbnail-next p-link': true, 'p-disabled': this.isNavForwardDisabled() }"
1512
+ (click)="navForward($event)"
1513
+ [disabled]="isNavForwardDisabled()"
1514
+ pRipple
1515
+ [attr.aria-label]="ariaNextButtonLabel()"
1516
+ >
1298
1517
  <ng-container *ngIf="!galleria.nextThumbnailIconTemplate">
1299
1518
  <ChevronRightIcon *ngIf="!isVertical" [ngClass]="'p-galleria-thumbnail-next-icon'" />
1300
1519
  <ChevronDownIcon *ngIf="isVertical" [ngClass]="'p-galleria-thumbnail-next-icon'" />
@@ -1344,13 +1563,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImpor
1344
1563
  }] } });
1345
1564
  class GalleriaModule {
1346
1565
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: GalleriaModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1347
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.0.2", ngImport: i0, type: GalleriaModule, declarations: [Galleria, GalleriaContent, GalleriaItemSlot, GalleriaItem, GalleriaThumbnails], imports: [CommonModule, SharedModule, RippleModule, TimesIcon, ChevronRightIcon, ChevronLeftIcon, WindowMaximizeIcon, WindowMinimizeIcon], exports: [CommonModule, Galleria, GalleriaContent, GalleriaItemSlot, GalleriaItem, GalleriaThumbnails, SharedModule] });
1348
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: GalleriaModule, imports: [CommonModule, SharedModule, RippleModule, TimesIcon, ChevronRightIcon, ChevronLeftIcon, WindowMaximizeIcon, WindowMinimizeIcon, CommonModule, SharedModule] });
1566
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.0.2", ngImport: i0, type: GalleriaModule, declarations: [Galleria, GalleriaContent, GalleriaItemSlot, GalleriaItem, GalleriaThumbnails], imports: [CommonModule, SharedModule, RippleModule, TimesIcon, ChevronRightIcon, ChevronLeftIcon, WindowMaximizeIcon, WindowMinimizeIcon, FocusTrapModule], exports: [CommonModule, Galleria, GalleriaContent, GalleriaItemSlot, GalleriaItem, GalleriaThumbnails, SharedModule] });
1567
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: GalleriaModule, imports: [CommonModule, SharedModule, RippleModule, TimesIcon, ChevronRightIcon, ChevronLeftIcon, WindowMaximizeIcon, WindowMinimizeIcon, FocusTrapModule, CommonModule, SharedModule] });
1349
1568
  }
1350
1569
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: GalleriaModule, decorators: [{
1351
1570
  type: NgModule,
1352
1571
  args: [{
1353
- imports: [CommonModule, SharedModule, RippleModule, TimesIcon, ChevronRightIcon, ChevronLeftIcon, WindowMaximizeIcon, WindowMinimizeIcon],
1572
+ imports: [CommonModule, SharedModule, RippleModule, TimesIcon, ChevronRightIcon, ChevronLeftIcon, WindowMaximizeIcon, WindowMinimizeIcon, FocusTrapModule],
1354
1573
  exports: [CommonModule, Galleria, GalleriaContent, GalleriaItemSlot, GalleriaItem, GalleriaThumbnails, SharedModule],
1355
1574
  declarations: [Galleria, GalleriaContent, GalleriaItemSlot, GalleriaItem, GalleriaThumbnails]
1356
1575
  }]