ng-prime-tools 1.1.9 → 1.1.11

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.
@@ -9785,8 +9785,15 @@ var PTNewsTickerType;
9785
9785
  PTNewsTickerType["DANGER"] = "DANGER";
9786
9786
  PTNewsTickerType["FLASH"] = "FLASH";
9787
9787
  })(PTNewsTickerType || (PTNewsTickerType = {}));
9788
+ var PTNewsTickerTrend;
9789
+ (function (PTNewsTickerTrend) {
9790
+ PTNewsTickerTrend["UP"] = "UP";
9791
+ PTNewsTickerTrend["DOWN"] = "DOWN";
9792
+ PTNewsTickerTrend["STABLE"] = "STABLE";
9793
+ })(PTNewsTickerTrend || (PTNewsTickerTrend = {}));
9788
9794
 
9789
9795
  class PTNewsTickerComponent {
9796
+ static { this.SCROLL_ANIMATION_NAME = 'pt-news-ticker-scroll'; }
9790
9797
  constructor(changeDetectorRef, zone) {
9791
9798
  this.changeDetectorRef = changeDetectorRef;
9792
9799
  this.zone = zone;
@@ -9806,6 +9813,9 @@ class PTNewsTickerComponent {
9806
9813
  this.showResetSpeedControl = true;
9807
9814
  this.showRemoveButton = true;
9808
9815
  this.showSpeedValue = false;
9816
+ this.showNewBadge = true;
9817
+ this.newBadgeText = 'Nouveau';
9818
+ this.newBadgeDuration = 20_000;
9809
9819
  this.height = '3.25rem';
9810
9820
  this.gap = '2rem';
9811
9821
  this.itemGap = '0.5rem';
@@ -9825,41 +9835,52 @@ class PTNewsTickerComponent {
9825
9835
  this.playStateChange = new EventEmitter();
9826
9836
  this.speedChange = new EventEmitter();
9827
9837
  this.PTNewsTickerType = PTNewsTickerType;
9838
+ this.PTNewsTickerTrend = PTNewsTickerTrend;
9828
9839
  this.internalNews = [];
9829
9840
  this.animationDurationSeconds = 20;
9830
9841
  this.playing = true;
9831
9842
  this.hovered = false;
9843
+ this.pendingNews = null;
9832
9844
  this.animationFrameId = null;
9833
9845
  this.viewInitialized = false;
9846
+ this.applyingPendingNews = false;
9847
+ this.newBadgeTimeouts = new Map();
9848
+ this.expiredNewBadgeIds = new Set();
9834
9849
  }
9835
9850
  ngOnChanges(changes) {
9836
9851
  if (changes['news']) {
9837
- this.internalNews = this.normalizeNews(changes['news'].currentValue ?? []);
9838
- this.scheduleAnimationRefresh();
9852
+ const normalizedNews = this.normalizeNews(changes['news'].currentValue ?? []);
9853
+ this.queueOrApplyNews(normalizedNews);
9839
9854
  }
9840
9855
  if (changes['speed'] || changes['minSpeed'] || changes['maxSpeed']) {
9841
9856
  this.speed = this.normalizeSpeed(this.speed);
9842
- this.scheduleAnimationRefresh();
9857
+ this.scheduleAnimationRefresh(true);
9843
9858
  }
9844
9859
  if (changes['defaultSpeed']) {
9845
9860
  this.defaultSpeed = this.normalizeSpeed(this.defaultSpeed);
9846
9861
  }
9862
+ if (changes['newBadgeDuration']) {
9863
+ this.newBadgeDuration = this.normalizeNewBadgeDuration(this.newBadgeDuration);
9864
+ }
9847
9865
  if (changes['autoplay']) {
9848
9866
  this.playing = this.autoplay;
9849
9867
  this.emitPlayStateChange();
9868
+ if (!this.playing) {
9869
+ this.applyPendingNewsImmediately();
9870
+ }
9850
9871
  }
9851
9872
  if (changes['gap'] ||
9852
9873
  changes['height'] ||
9853
9874
  changes['direction'] ||
9854
9875
  changes['loop']) {
9855
- this.scheduleAnimationRefresh();
9876
+ this.scheduleAnimationRefresh(true);
9856
9877
  }
9857
9878
  }
9858
9879
  ngAfterViewInit() {
9859
9880
  this.viewInitialized = true;
9860
9881
  this.playing = this.autoplay;
9861
9882
  this.initializeResizeObserver();
9862
- this.scheduleAnimationRefresh();
9883
+ this.scheduleAnimationRefresh(true);
9863
9884
  this.changeDetectorRef.detectChanges();
9864
9885
  }
9865
9886
  ngOnDestroy() {
@@ -9869,52 +9890,57 @@ class PTNewsTickerComponent {
9869
9890
  cancelAnimationFrame(this.animationFrameId);
9870
9891
  this.animationFrameId = null;
9871
9892
  }
9893
+ this.clearNewBadgeTimeouts();
9894
+ this.pendingNews = null;
9872
9895
  }
9873
9896
  addNews(item) {
9874
9897
  if (!item || item.id === null || item.id === undefined) {
9875
9898
  return;
9876
9899
  }
9877
9900
  const normalizedItem = this.normalizeItem(item);
9878
- const existingIndex = this.internalNews.findIndex((newsItem) => newsItem.id === normalizedItem.id);
9879
- if (existingIndex >= 0) {
9880
- this.internalNews = this.internalNews.map((newsItem, index) => index === existingIndex ? normalizedItem : newsItem);
9881
- }
9882
- else {
9883
- this.internalNews = [...this.internalNews, normalizedItem];
9884
- }
9901
+ const sourceNews = this.pendingNews ?? this.internalNews;
9902
+ const existingIndex = sourceNews.findIndex((newsItem) => String(newsItem.id) === String(normalizedItem.id));
9903
+ const updatedNews = existingIndex >= 0
9904
+ ? sourceNews.map((newsItem, index) => index === existingIndex ? normalizedItem : newsItem)
9905
+ : [...sourceNews, normalizedItem];
9906
+ this.queueOrApplyNews(updatedNews);
9885
9907
  this.emitNewsChange({
9886
- news: [...this.internalNews],
9908
+ news: this.cloneNews(updatedNews),
9887
9909
  addedItem: normalizedItem,
9888
9910
  });
9889
- this.scheduleAnimationRefresh();
9890
9911
  }
9891
9912
  removeNews(itemOrId) {
9892
9913
  const id = typeof itemOrId === 'object' ? itemOrId?.id : itemOrId;
9893
- const removedItem = this.internalNews.find((item) => item.id === id);
9914
+ const sourceNews = this.pendingNews ?? this.internalNews;
9915
+ const removedItem = sourceNews.find((item) => String(item.id) === String(id));
9894
9916
  if (!removedItem) {
9895
9917
  return;
9896
9918
  }
9897
- this.internalNews = this.internalNews.filter((item) => item.id !== id);
9919
+ const updatedNews = sourceNews.filter((item) => String(item.id) !== String(id));
9920
+ this.clearNewBadgeTimeout(removedItem);
9921
+ this.queueOrApplyNews(updatedNews);
9898
9922
  this.newsRemove.emit(removedItem);
9899
9923
  this.emitNewsChange({
9900
- news: [...this.internalNews],
9924
+ news: this.cloneNews(updatedNews),
9901
9925
  removedItem,
9902
9926
  });
9903
- this.scheduleAnimationRefresh();
9904
9927
  }
9905
9928
  clearNews() {
9929
+ this.pendingNews = null;
9906
9930
  this.internalNews = [];
9931
+ this.clearNewBadgeTimeouts();
9932
+ this.expiredNewBadgeIds.clear();
9907
9933
  this.emitNewsChange({
9908
9934
  news: [],
9909
9935
  });
9910
- this.scheduleAnimationRefresh();
9936
+ this.scheduleAnimationRefresh(true);
9911
9937
  }
9912
9938
  replaceNews(news) {
9913
- this.internalNews = this.normalizeNews(news);
9939
+ const normalizedNews = this.normalizeNews(news);
9940
+ this.queueOrApplyNews(normalizedNews);
9914
9941
  this.emitNewsChange({
9915
- news: [...this.internalNews],
9942
+ news: this.cloneNews(normalizedNews),
9916
9943
  });
9917
- this.scheduleAnimationRefresh();
9918
9944
  }
9919
9945
  play() {
9920
9946
  if (this.playing) {
@@ -9929,10 +9955,14 @@ class PTNewsTickerComponent {
9929
9955
  }
9930
9956
  this.playing = false;
9931
9957
  this.emitPlayStateChange();
9958
+ this.applyPendingNewsImmediately();
9932
9959
  }
9933
9960
  togglePlayState() {
9934
9961
  this.playing = !this.playing;
9935
9962
  this.emitPlayStateChange();
9963
+ if (!this.playing) {
9964
+ this.applyPendingNewsImmediately();
9965
+ }
9936
9966
  }
9937
9967
  increaseSpeed() {
9938
9968
  this.setSpeed(this.speed + this.normalizeSpeedStep());
@@ -9955,7 +9985,7 @@ class PTNewsTickerComponent {
9955
9985
  speed: nextSpeed,
9956
9986
  });
9957
9987
  this.emitPlayStateChange();
9958
- this.scheduleAnimationRefresh();
9988
+ this.scheduleAnimationRefresh(true);
9959
9989
  }
9960
9990
  onMouseEnter() {
9961
9991
  if (!this.pauseOnHover) {
@@ -9966,6 +9996,18 @@ class PTNewsTickerComponent {
9966
9996
  onMouseLeave() {
9967
9997
  this.hovered = false;
9968
9998
  }
9999
+ onTrackAnimationIteration(event) {
10000
+ if (!this.isTickerScrollEvent(event)) {
10001
+ return;
10002
+ }
10003
+ this.applyPendingNewsAtCycleBoundary();
10004
+ }
10005
+ onTrackAnimationEnd(event) {
10006
+ if (!this.isTickerScrollEvent(event)) {
10007
+ return;
10008
+ }
10009
+ this.applyPendingNewsAtCycleBoundary();
10010
+ }
9969
10011
  onItemClick(event, item) {
9970
10012
  if (item.disabled) {
9971
10013
  event.preventDefault();
@@ -9985,9 +10027,6 @@ class PTNewsTickerComponent {
9985
10027
  }
9986
10028
  window.location.assign(link);
9987
10029
  }
9988
- hasItemLink(item) {
9989
- return !!item.link?.trim() && !item.disabled;
9990
- }
9991
10030
  onRemoveClick(event, item) {
9992
10031
  event.preventDefault();
9993
10032
  event.stopPropagation();
@@ -9996,12 +10035,60 @@ class PTNewsTickerComponent {
9996
10035
  }
9997
10036
  this.removeNews(item);
9998
10037
  }
10038
+ hasItemLink(item) {
10039
+ return !!item.link?.trim() && !item.disabled;
10040
+ }
10041
+ hasSegments(item) {
10042
+ return Array.isArray(item.segments) && item.segments.length > 0;
10043
+ }
9999
10044
  isItemRemovable(item) {
10000
10045
  return this.showRemoveButton && item.removable !== false && !item.disabled;
10001
10046
  }
10002
10047
  isItemFlash(item) {
10003
10048
  return item.flash === true || item.type === PTNewsTickerType.FLASH;
10004
10049
  }
10050
+ shouldShowNewBadge(item) {
10051
+ if (!this.showNewBadge || item.showNewBadge === false) {
10052
+ return false;
10053
+ }
10054
+ const key = this.getItemKey(item);
10055
+ if (this.expiredNewBadgeIds.has(key)) {
10056
+ return false;
10057
+ }
10058
+ const createdAt = this.resolveCreatedAt(item);
10059
+ if (createdAt === null) {
10060
+ return true;
10061
+ }
10062
+ return Date.now() - createdAt < this.getNewBadgeDuration(item);
10063
+ }
10064
+ getNewBadgeText(item) {
10065
+ return item.newBadgeText?.trim() || this.newBadgeText;
10066
+ }
10067
+ getSegmentSeparator(item) {
10068
+ return item.segmentSeparator?.trim() || '•';
10069
+ }
10070
+ getSegmentIcon(segment) {
10071
+ if (segment.icon?.trim()) {
10072
+ return segment.icon.trim();
10073
+ }
10074
+ switch (segment.trend) {
10075
+ case PTNewsTickerTrend.UP:
10076
+ return 'pi pi-arrow-up';
10077
+ case PTNewsTickerTrend.DOWN:
10078
+ return 'pi pi-arrow-down';
10079
+ case PTNewsTickerTrend.STABLE:
10080
+ return 'pi pi-minus';
10081
+ default:
10082
+ return null;
10083
+ }
10084
+ }
10085
+ getSegmentStyle(segment) {
10086
+ const trendColor = this.getSegmentTrendColor(segment.trend);
10087
+ return {
10088
+ '--pt-news-segment-color': segment.textColor ?? trendColor ?? 'currentColor',
10089
+ '--pt-news-segment-icon-color': segment.iconColor ?? segment.textColor ?? trendColor ?? 'currentColor',
10090
+ };
10091
+ }
10005
10092
  getTrackStyle() {
10006
10093
  return {
10007
10094
  '--pt-news-ticker-duration': `${this.animationDurationSeconds}s`,
@@ -10024,9 +10111,9 @@ class PTNewsTickerComponent {
10024
10111
  }
10025
10112
  getItemStyle(item) {
10026
10113
  const typeStyles = this.getTypeStyles(item.type);
10027
- const backgroundColor = item.backgroundColor ?? typeStyles.backgroundColor;
10028
- const textColor = item.textColor ?? typeStyles.textColor;
10029
- const iconColor = item.iconColor ?? textColor ?? this.containerTextColor;
10114
+ const backgroundColor = this.resolveItemBackgroundColor(item, typeStyles.backgroundColor);
10115
+ const textColor = item.textColor ?? typeStyles.textColor ?? this.containerTextColor;
10116
+ const iconColor = item.iconColor ?? textColor;
10030
10117
  const borderColor = item.borderColor ?? typeStyles.borderColor ?? 'transparent';
10031
10118
  const flashBackgroundColor = item.flashBackgroundColor ??
10032
10119
  item.backgroundColor ??
@@ -10035,8 +10122,8 @@ class PTNewsTickerComponent {
10035
10122
  const flashAlternateBackgroundColor = item.flashAlternateBackgroundColor ?? '#7f1d1d';
10036
10123
  const flashTextColor = item.flashTextColor ?? item.textColor ?? '#ffffff';
10037
10124
  return {
10038
- '--pt-news-item-background': backgroundColor ?? 'transparent',
10039
- '--pt-news-item-text-color': textColor ?? this.containerTextColor,
10125
+ '--pt-news-item-background': backgroundColor,
10126
+ '--pt-news-item-text-color': textColor,
10040
10127
  '--pt-news-item-icon-color': iconColor,
10041
10128
  '--pt-news-item-border-color': borderColor,
10042
10129
  '--pt-news-item-gap': this.itemGap,
@@ -10053,17 +10140,183 @@ class PTNewsTickerComponent {
10053
10140
  'pt-news-ticker__item--clickable': !item.disabled &&
10054
10141
  (this.hasItemLink(item) || this.newsClick.observers.length > 0),
10055
10142
  'pt-news-ticker__item--link': this.hasItemLink(item),
10143
+ 'pt-news-ticker__item--info': item.type === PTNewsTickerType.INFO,
10144
+ 'pt-news-ticker__item--default': !item.type || item.type === PTNewsTickerType.DEFAULT,
10145
+ 'pt-news-ticker__item--success': item.type === PTNewsTickerType.SUCCESS,
10146
+ 'pt-news-ticker__item--warning': item.type === PTNewsTickerType.WARNING,
10147
+ 'pt-news-ticker__item--danger': item.type === PTNewsTickerType.DANGER,
10056
10148
  };
10057
10149
  if (item.styleClass?.trim()) {
10058
10150
  classes[item.styleClass.trim()] = true;
10059
10151
  }
10060
10152
  return classes;
10061
10153
  }
10154
+ getDuplicateItemClasses(item) {
10155
+ const classes = this.getItemClasses(item);
10156
+ classes['pt-news-ticker__item--clickable'] = false;
10157
+ classes['pt-news-ticker__item--link'] = false;
10158
+ return classes;
10159
+ }
10062
10160
  getTrackById(index, item) {
10063
- return `${item.id}-${index}`;
10161
+ return `${String(item.id)}-${index}`;
10064
10162
  }
10065
10163
  getDuplicateTrackById(index, item) {
10066
- return `duplicate-${item.id}-${index}`;
10164
+ return `duplicate-${String(item.id)}-${index}`;
10165
+ }
10166
+ getItemRole(item) {
10167
+ return this.hasItemLink(item) ? 'link' : null;
10168
+ }
10169
+ getItemTabIndex(item) {
10170
+ if (item.disabled) {
10171
+ return -1;
10172
+ }
10173
+ return this.hasItemLink(item) || this.newsClick.observers.length > 0
10174
+ ? 0
10175
+ : -1;
10176
+ }
10177
+ queueOrApplyNews(news) {
10178
+ const clonedNews = this.cloneNews(news);
10179
+ this.scheduleNewBadges(clonedNews);
10180
+ if (this.shouldApplyNewsImmediately()) {
10181
+ this.pendingNews = null;
10182
+ this.internalNews = clonedNews;
10183
+ this.scheduleAnimationRefresh(true);
10184
+ return;
10185
+ }
10186
+ this.pendingNews = clonedNews;
10187
+ }
10188
+ shouldApplyNewsImmediately() {
10189
+ return (!this.viewInitialized ||
10190
+ !this.loop ||
10191
+ !this.playing ||
10192
+ this.internalNews.length === 0 ||
10193
+ this.prefersReducedMotion());
10194
+ }
10195
+ applyPendingNewsAtCycleBoundary() {
10196
+ if (!this.pendingNews || this.applyingPendingNews) {
10197
+ return;
10198
+ }
10199
+ this.applyingPendingNews = true;
10200
+ const nextNews = this.cloneNews(this.pendingNews);
10201
+ this.pendingNews = null;
10202
+ this.internalNews = nextNews;
10203
+ this.changeDetectorRef.detectChanges();
10204
+ this.zone.runOutsideAngular(() => {
10205
+ requestAnimationFrame(() => {
10206
+ requestAnimationFrame(() => {
10207
+ this.zone.run(() => {
10208
+ this.calculateAnimationDuration();
10209
+ this.applyingPendingNews = false;
10210
+ });
10211
+ });
10212
+ });
10213
+ });
10214
+ }
10215
+ applyPendingNewsImmediately() {
10216
+ if (!this.pendingNews) {
10217
+ return;
10218
+ }
10219
+ const nextNews = this.cloneNews(this.pendingNews);
10220
+ this.pendingNews = null;
10221
+ this.internalNews = nextNews;
10222
+ this.changeDetectorRef.detectChanges();
10223
+ this.scheduleAnimationRefresh(true);
10224
+ }
10225
+ isTickerScrollEvent(event) {
10226
+ return (event.animationName === PTNewsTickerComponent.SCROLL_ANIMATION_NAME &&
10227
+ event.target === event.currentTarget);
10228
+ }
10229
+ resolveItemBackgroundColor(item, typeBackgroundColor) {
10230
+ if (item.type === PTNewsTickerType.INFO ||
10231
+ !item.type ||
10232
+ item.type === PTNewsTickerType.DEFAULT) {
10233
+ return 'transparent';
10234
+ }
10235
+ return item.backgroundColor ?? typeBackgroundColor ?? 'transparent';
10236
+ }
10237
+ scheduleNewBadges(news) {
10238
+ news.forEach((item) => {
10239
+ this.scheduleNewBadgeExpiration(item);
10240
+ });
10241
+ }
10242
+ scheduleNewBadgeExpiration(item) {
10243
+ if (!this.showNewBadge || item.showNewBadge === false) {
10244
+ return;
10245
+ }
10246
+ const key = this.getItemKey(item);
10247
+ if (this.expiredNewBadgeIds.has(key) || this.newBadgeTimeouts.has(key)) {
10248
+ return;
10249
+ }
10250
+ const duration = this.getNewBadgeDuration(item);
10251
+ const createdAt = this.resolveCreatedAt(item) ?? Date.now();
10252
+ const elapsed = Date.now() - createdAt;
10253
+ const remainingDuration = Math.max(0, duration - elapsed);
10254
+ if (remainingDuration === 0) {
10255
+ this.expiredNewBadgeIds.add(key);
10256
+ return;
10257
+ }
10258
+ const timeout = setTimeout(() => {
10259
+ this.newBadgeTimeouts.delete(key);
10260
+ this.expiredNewBadgeIds.add(key);
10261
+ this.changeDetectorRef.markForCheck();
10262
+ }, remainingDuration);
10263
+ this.newBadgeTimeouts.set(key, timeout);
10264
+ }
10265
+ getNewBadgeDuration(item) {
10266
+ return this.normalizeNewBadgeDuration(item.newBadgeDuration ?? this.newBadgeDuration);
10267
+ }
10268
+ normalizeNewBadgeDuration(duration) {
10269
+ const numericDuration = Number(duration);
10270
+ if (!Number.isFinite(numericDuration) || numericDuration <= 0) {
10271
+ return 20_000;
10272
+ }
10273
+ return Math.max(1_000, numericDuration);
10274
+ }
10275
+ clearNewBadgeTimeout(item) {
10276
+ const key = this.getItemKey(item);
10277
+ const timeout = this.newBadgeTimeouts.get(key);
10278
+ if (timeout) {
10279
+ clearTimeout(timeout);
10280
+ this.newBadgeTimeouts.delete(key);
10281
+ }
10282
+ this.expiredNewBadgeIds.delete(key);
10283
+ }
10284
+ clearNewBadgeTimeouts() {
10285
+ this.newBadgeTimeouts.forEach((timeout) => {
10286
+ clearTimeout(timeout);
10287
+ });
10288
+ this.newBadgeTimeouts.clear();
10289
+ }
10290
+ resolveCreatedAt(item) {
10291
+ if (!item.createdAt) {
10292
+ return null;
10293
+ }
10294
+ if (item.createdAt instanceof Date) {
10295
+ const timestamp = item.createdAt.getTime();
10296
+ return Number.isFinite(timestamp) ? timestamp : null;
10297
+ }
10298
+ const timestamp = new Date(item.createdAt).getTime();
10299
+ return Number.isFinite(timestamp) ? timestamp : null;
10300
+ }
10301
+ getItemKey(item) {
10302
+ return String(item.id);
10303
+ }
10304
+ getSegmentTrendColor(trend) {
10305
+ switch (trend) {
10306
+ case PTNewsTickerTrend.UP:
10307
+ return '#15803d';
10308
+ case PTNewsTickerTrend.DOWN:
10309
+ return '#dc2626';
10310
+ case PTNewsTickerTrend.STABLE:
10311
+ return '#64748b';
10312
+ default:
10313
+ return null;
10314
+ }
10315
+ }
10316
+ prefersReducedMotion() {
10317
+ return (typeof window !== 'undefined' &&
10318
+ typeof window.matchMedia === 'function' &&
10319
+ window.matchMedia('(prefers-reduced-motion: reduce)').matches);
10067
10320
  }
10068
10321
  getAnimationPlayState() {
10069
10322
  if (!this.playing) {
@@ -10076,25 +10329,25 @@ class PTNewsTickerComponent {
10076
10329
  }
10077
10330
  initializeResizeObserver() {
10078
10331
  if (typeof ResizeObserver === 'undefined' ||
10079
- !this.tickerGroup?.nativeElement) {
10332
+ !this.tickerViewport?.nativeElement) {
10080
10333
  return;
10081
10334
  }
10082
10335
  this.zone.runOutsideAngular(() => {
10083
10336
  this.resizeObserver = new ResizeObserver(() => {
10084
10337
  this.zone.run(() => {
10085
- this.calculateAnimationDuration();
10338
+ this.scheduleAnimationRefresh(true);
10086
10339
  });
10087
10340
  });
10088
- this.resizeObserver.observe(this.tickerGroup.nativeElement);
10089
- if (this.tickerViewport?.nativeElement) {
10090
- this.resizeObserver.observe(this.tickerViewport.nativeElement);
10091
- }
10341
+ this.resizeObserver.observe(this.tickerViewport.nativeElement);
10092
10342
  });
10093
10343
  }
10094
- scheduleAnimationRefresh() {
10344
+ scheduleAnimationRefresh(force = false) {
10095
10345
  if (!this.viewInitialized) {
10096
10346
  return;
10097
10347
  }
10348
+ if (!force && this.playing && this.loop) {
10349
+ return;
10350
+ }
10098
10351
  if (this.animationFrameId !== null) {
10099
10352
  cancelAnimationFrame(this.animationFrameId);
10100
10353
  }
@@ -10107,11 +10360,16 @@ class PTNewsTickerComponent {
10107
10360
  const groupElement = this.tickerGroup?.nativeElement;
10108
10361
  if (!groupElement || this.internalNews.length === 0) {
10109
10362
  this.animationDurationSeconds = 1;
10363
+ this.changeDetectorRef.markForCheck();
10110
10364
  return;
10111
10365
  }
10112
10366
  const contentWidth = Math.max(groupElement.scrollWidth, groupElement.getBoundingClientRect().width, 1);
10113
10367
  const normalizedSpeed = this.normalizeSpeed(this.speed);
10114
- this.animationDurationSeconds = Math.max(1, contentWidth / normalizedSpeed);
10368
+ const nextDuration = Math.max(1, contentWidth / normalizedSpeed);
10369
+ if (Math.abs(nextDuration - this.animationDurationSeconds) < 0.01) {
10370
+ return;
10371
+ }
10372
+ this.animationDurationSeconds = nextDuration;
10115
10373
  this.changeDetectorRef.markForCheck();
10116
10374
  }
10117
10375
  normalizeNews(news) {
@@ -10134,8 +10392,37 @@ class PTNewsTickerComponent {
10134
10392
  removable: item.removable ?? true,
10135
10393
  disabled: item.disabled ?? false,
10136
10394
  flashDuration: Math.max(100, Number(item.flashDuration ?? 700)),
10395
+ showNewBadge: item.showNewBadge ?? true,
10396
+ newBadgeDuration: this.normalizeNewBadgeDuration(item.newBadgeDuration ?? this.newBadgeDuration),
10397
+ newBadgeText: item.newBadgeText?.trim() || this.newBadgeText,
10398
+ segmentSeparator: item.segmentSeparator?.trim() || '•',
10399
+ segments: this.normalizeSegments(item.segments),
10137
10400
  };
10138
10401
  }
10402
+ normalizeSegments(segments) {
10403
+ if (!Array.isArray(segments)) {
10404
+ return [];
10405
+ }
10406
+ return segments
10407
+ .filter((segment) => !!segment &&
10408
+ (String(segment.label ?? '').trim().length > 0 ||
10409
+ String(segment.value ?? '').trim().length > 0))
10410
+ .map((segment) => ({
10411
+ ...segment,
10412
+ label: String(segment.label ?? '').trim(),
10413
+ value: segment.value === undefined || segment.value === null
10414
+ ? undefined
10415
+ : String(segment.value).trim(),
10416
+ }));
10417
+ }
10418
+ cloneNews(news) {
10419
+ return news.map((item) => ({
10420
+ ...item,
10421
+ segments: item.segments?.map((segment) => ({
10422
+ ...segment,
10423
+ })),
10424
+ }));
10425
+ }
10139
10426
  normalizeSpeed(speed) {
10140
10427
  const numericSpeed = Number(speed);
10141
10428
  const safeMinSpeed = Math.max(1, Number(this.minSpeed) || 1);
@@ -10165,9 +10452,9 @@ class PTNewsTickerComponent {
10165
10452
  switch (type) {
10166
10453
  case PTNewsTickerType.INFO:
10167
10454
  return {
10168
- backgroundColor: '#dbeafe',
10455
+ backgroundColor: 'transparent',
10169
10456
  textColor: '#1e3a8a',
10170
- borderColor: '#93c5fd',
10457
+ borderColor: '#bfdbfe',
10171
10458
  };
10172
10459
  case PTNewsTickerType.SUCCESS:
10173
10460
  return {
@@ -10183,9 +10470,9 @@ class PTNewsTickerComponent {
10183
10470
  };
10184
10471
  case PTNewsTickerType.DANGER:
10185
10472
  return {
10186
- backgroundColor: '#fee2e2',
10187
- textColor: '#7f1d1d',
10188
- borderColor: '#fca5a5',
10473
+ backgroundColor: '#dc2626',
10474
+ textColor: '#ffffff',
10475
+ borderColor: '#991b1b',
10189
10476
  };
10190
10477
  case PTNewsTickerType.FLASH:
10191
10478
  return {
@@ -10195,29 +10482,18 @@ class PTNewsTickerComponent {
10195
10482
  };
10196
10483
  default:
10197
10484
  return {
10198
- backgroundColor: '#f8fafc',
10485
+ backgroundColor: 'transparent',
10199
10486
  textColor: '#0f172a',
10200
10487
  borderColor: '#e2e8f0',
10201
10488
  };
10202
10489
  }
10203
10490
  }
10204
- getItemRole(item) {
10205
- return this.hasItemLink(item) ? 'link' : null;
10206
- }
10207
- getItemTabIndex(item) {
10208
- if (item.disabled) {
10209
- return -1;
10210
- }
10211
- return this.hasItemLink(item) || this.newsClick.observers.length > 0
10212
- ? 0
10213
- : -1;
10214
- }
10215
10491
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PTNewsTickerComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
10216
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: PTNewsTickerComponent, isStandalone: false, selector: "pt-news-ticker", inputs: { news: "news", speed: "speed", defaultSpeed: "defaultSpeed", speedStep: "speedStep", minSpeed: "minSpeed", maxSpeed: "maxSpeed", direction: "direction", autoplay: "autoplay", loop: "loop", pauseOnHover: "pauseOnHover", showControls: "showControls", showPlayPauseControl: "showPlayPauseControl", showSpeedControls: "showSpeedControls", showResetSpeedControl: "showResetSpeedControl", showRemoveButton: "showRemoveButton", showSpeedValue: "showSpeedValue", height: "height", gap: "gap", itemGap: "itemGap", containerBackgroundColor: "containerBackgroundColor", containerTextColor: "containerTextColor", borderColor: "borderColor", borderWidth: "borderWidth", borderRadius: "borderRadius", controlsBackgroundColor: "controlsBackgroundColor", controlsBorderColor: "controlsBorderColor", emptyMessage: "emptyMessage", emptyIcon: "emptyIcon", ariaLabel: "ariaLabel" }, outputs: { newsClick: "newsClick", newsRemove: "newsRemove", newsChange: "newsChange", playStateChange: "playStateChange", speedChange: "speedChange" }, viewQueries: [{ propertyName: "tickerViewport", first: true, predicate: ["tickerViewport"], descendants: true }, { propertyName: "tickerGroup", first: true, predicate: ["tickerGroup"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"pt-news-ticker\"\n [ngStyle]=\"getContainerStyle()\"\n [attr.aria-label]=\"ariaLabel\"\n role=\"region\"\n>\n @if (showControls) {\n <div class=\"pt-news-ticker__controls\">\n @if (showPlayPauseControl) {\n <button\n pButton\n pRipple\n type=\"button\"\n class=\"p-button-rounded p-button-text p-button-sm\"\n [icon]=\"playing ? 'pi pi-pause' : 'pi pi-play'\"\n [pTooltip]=\"playing ? 'Mettre en pause' : 'Reprendre'\"\n tooltipPosition=\"top\"\n appendTo=\"body\"\n [attr.aria-label]=\"\n playing ? 'Mettre le ruban en pause' : 'Reprendre le ruban'\n \"\n (click)=\"togglePlayState()\"\n ></button>\n }\n\n @if (showSpeedControls) {\n <button\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-minus\"\n class=\"p-button-rounded p-button-text p-button-sm\"\n pTooltip=\"Ralentir\"\n tooltipPosition=\"top\"\n appendTo=\"body\"\n aria-label=\"Ralentir le ruban\"\n [disabled]=\"speed <= minSpeed\"\n (click)=\"decreaseSpeed()\"\n ></button>\n\n <button\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-plus\"\n class=\"p-button-rounded p-button-text p-button-sm\"\n pTooltip=\"Acc\u00E9l\u00E9rer\"\n tooltipPosition=\"top\"\n appendTo=\"body\"\n aria-label=\"Acc\u00E9l\u00E9rer le ruban\"\n [disabled]=\"speed >= maxSpeed\"\n (click)=\"increaseSpeed()\"\n ></button>\n }\n\n @if (showResetSpeedControl) {\n <button\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-refresh\"\n class=\"p-button-rounded p-button-text p-button-sm\"\n pTooltip=\"R\u00E9initialiser la vitesse\"\n tooltipPosition=\"top\"\n appendTo=\"body\"\n aria-label=\"R\u00E9initialiser la vitesse\"\n [disabled]=\"speed === defaultSpeed\"\n (click)=\"resetSpeed()\"\n ></button>\n }\n\n @if (showSpeedValue) {\n <span\n class=\"pt-news-ticker__speed\"\n [attr.aria-label]=\"'Vitesse ' + speed + ' pixels par seconde'\"\n >\n {{ speed }} px/s\n </span>\n }\n </div>\n }\n\n <div\n #tickerViewport\n class=\"pt-news-ticker__viewport\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\"\n >\n @if (internalNews.length > 0) {\n <div\n class=\"pt-news-ticker__track\"\n [class.pt-news-ticker__track--single]=\"!loop\"\n [ngStyle]=\"getTrackStyle()\"\n >\n <div\n #tickerGroup\n class=\"pt-news-ticker__group\"\n [attr.aria-hidden]=\"false\"\n >\n @for (item of internalNews; track getTrackById($index, item)) {\n <article\n class=\"pt-news-ticker__item\"\n [ngClass]=\"getItemClasses(item)\"\n [ngStyle]=\"getItemStyle(item)\"\n [pTooltip]=\"item.tooltip || ''\"\n tooltipPosition=\"top\"\n appendTo=\"body\"\n [attr.aria-disabled]=\"item.disabled\"\n [attr.aria-label]=\"\n hasItemLink(item) ? item.text + ', ouvrir le lien' : item.text\n \"\n [attr.role]=\"getItemRole(item)\"\n [attr.tabindex]=\"getItemTabIndex(item)\"\n (click)=\"onItemClick($event, item)\"\n (keydown.enter)=\"onItemClick($event, item)\"\n (keydown.space)=\"onItemClick($event, item)\"\n >\n @if (item.icon) {\n <i\n class=\"pt-news-ticker__item-icon\"\n [ngClass]=\"item.icon\"\n aria-hidden=\"true\"\n ></i>\n }\n\n <span class=\"pt-news-ticker__item-text\">\n {{ item.text }}\n </span>\n\n @if (hasItemLink(item)) {\n <i\n class=\"pt-news-ticker__link-icon pi pi-external-link\"\n aria-hidden=\"true\"\n ></i>\n }\n\n @if (isItemRemovable(item)) {\n <button\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-times\"\n class=\"pt-news-ticker__remove-button p-button-rounded p-button-text p-button-sm\"\n pTooltip=\"Supprimer l\u2019actualit\u00E9\"\n tooltipPosition=\"top\"\n appendTo=\"body\"\n [attr.aria-label]=\"'Supprimer : ' + item.text\"\n (click)=\"onRemoveClick($event, item)\"\n ></button>\n }\n </article>\n }\n </div>\n\n @if (loop) {\n <div class=\"pt-news-ticker__group\" aria-hidden=\"true\">\n @for (\n item of internalNews;\n track getDuplicateTrackById($index, item)\n ) {\n <article\n class=\"pt-news-ticker__item\"\n [ngClass]=\"getItemClasses(item)\"\n [ngStyle]=\"getItemStyle(item)\"\n >\n @if (item.icon) {\n <i\n class=\"pt-news-ticker__item-icon\"\n [ngClass]=\"item.icon\"\n aria-hidden=\"true\"\n ></i>\n }\n\n <span class=\"pt-news-ticker__item-text\">\n {{ item.text }}\n </span>\n\n @if (hasItemLink(item)) {\n <i\n class=\"pt-news-ticker__link-icon pi pi-external-link\"\n aria-hidden=\"true\"\n ></i>\n }\n\n @if (isItemRemovable(item)) {\n <span\n class=\"pt-news-ticker__duplicate-remove-placeholder\"\n aria-hidden=\"true\"\n >\n <i class=\"pi pi-times\"></i>\n </span>\n }\n </article>\n }\n </div>\n }\n </div>\n } @else {\n <div class=\"pt-news-ticker__empty\">\n @if (emptyIcon) {\n <i [ngClass]=\"emptyIcon\" aria-hidden=\"true\"></i>\n }\n\n <span>{{ emptyMessage }}</span>\n </div>\n }\n </div>\n</div>\n", styles: [":host{display:block;width:100%;min-width:0;max-width:100%;box-sizing:border-box}:host *,:host *:before,:host *:after{box-sizing:border-box}.pt-news-ticker{display:flex;align-items:stretch;width:100%;min-width:0;max-width:100%;min-height:var(--pt-news-ticker-height, 3.25rem);overflow:hidden;border:var(--pt-news-ticker-border-width, 1px) solid var(--pt-news-ticker-border-color, #e2e8f0);border-radius:var(--pt-news-ticker-border-radius, 8px);background:var(--pt-news-ticker-background, #ffffff);color:var(--pt-news-ticker-text-color, #0f172a)}.pt-news-ticker__controls{position:relative;z-index:4;display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;gap:.1rem;min-height:var(--pt-news-ticker-height, 3.25rem);padding:.25rem .4rem;border-right:1px solid var(--pt-news-ticker-controls-border-color, #e2e8f0);background:var(--pt-news-ticker-controls-background, #f8fafc)}.pt-news-ticker__controls ::ng-deep .p-button.p-button-rounded.p-button-text{width:1.9rem;min-width:1.9rem;height:1.9rem;padding:0}.pt-news-ticker__controls ::ng-deep .p-button .p-button-icon{font-size:.78rem}.pt-news-ticker__speed{min-width:3.5rem;padding:0 .35rem;color:#475569;font-size:.7rem;font-weight:700;text-align:center;white-space:nowrap}.pt-news-ticker__viewport{position:relative;display:flex;align-items:center;flex:1 1 auto;width:100%;min-width:0;min-height:var(--pt-news-ticker-height, 3.25rem);overflow:hidden}.pt-news-ticker__viewport:before,.pt-news-ticker__viewport:after{position:absolute;z-index:3;top:0;bottom:0;width:2.5rem;content:\"\";pointer-events:none}.pt-news-ticker__viewport:before{left:0;background:linear-gradient(to right,var(--pt-news-ticker-background, #ffffff),transparent)}.pt-news-ticker__viewport:after{right:0;background:linear-gradient(to left,var(--pt-news-ticker-background, #ffffff),transparent)}.pt-news-ticker__track{display:flex;align-items:center;flex:0 0 auto;width:max-content;min-width:max-content;animation-name:pt-news-ticker-scroll;animation-duration:var(--pt-news-ticker-duration, 20s);animation-timing-function:linear;animation-iteration-count:infinite;will-change:transform}.pt-news-ticker__track--single{animation-iteration-count:1;animation-fill-mode:forwards}.pt-news-ticker__group{display:inline-flex;align-items:center;flex:0 0 auto;gap:var(--pt-news-ticker-gap, 2rem);min-width:max-content;padding-right:var(--pt-news-ticker-gap, 2rem)}.pt-news-ticker__item{display:inline-flex;align-items:center;flex:0 0 auto;gap:var(--pt-news-item-gap, .5rem);min-height:2.25rem;max-width:36rem;padding:.35rem .65rem;overflow:hidden;border:1px solid var(--pt-news-item-border-color, transparent);border-radius:999px;outline:none;background:var(--pt-news-item-background, transparent);color:var( --pt-news-item-text-color, var(--pt-news-ticker-text-color, #0f172a) );line-height:1.25;white-space:nowrap;transition:box-shadow .15s ease,opacity .15s ease,transform .15s ease}.pt-news-ticker__item--clickable{cursor:pointer}.pt-news-ticker__item--clickable:hover{box-shadow:0 3px 10px #0f172a1f;transform:translateY(-1px)}.pt-news-ticker__item:focus-visible{box-shadow:0 0 0 2px #fff,0 0 0 4px var(--primary-color, #3b82f6)}.pt-news-ticker__item--disabled{cursor:not-allowed;opacity:.5}.pt-news-ticker__item-icon{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;color:var(--pt-news-item-icon-color, currentColor);font-size:.95rem}.pt-news-ticker__item-text{display:block;flex:1 1 auto;min-width:0;overflow:hidden;font-size:.85rem;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.pt-news-ticker__remove-button{flex:0 0 auto}.pt-news-ticker__item ::ng-deep .pt-news-ticker__remove-button.p-button{width:1.45rem;min-width:1.45rem;height:1.45rem;padding:0;color:currentColor}.pt-news-ticker__item ::ng-deep .pt-news-ticker__remove-button.p-button .p-button-icon{font-size:.65rem}.pt-news-ticker__item ::ng-deep .pt-news-ticker__remove-button.p-button:not(:disabled):hover{background:#0f172a1a}.pt-news-ticker__duplicate-remove-placeholder{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;width:1.45rem;min-width:1.45rem;height:1.45rem;opacity:0;pointer-events:none}.pt-news-ticker__duplicate-remove-placeholder .pi{font-size:.65rem}.pt-news-ticker__item--flash{border-color:var(--pt-news-item-border-color, #991b1b);color:var(--pt-news-flash-text-color, #ffffff);animation-name:pt-news-ticker-flash;animation-duration:var(--pt-news-flash-duration, .7s);animation-timing-function:ease-in-out;animation-iteration-count:infinite;animation-direction:alternate}.pt-news-ticker__item--flash .pt-news-ticker__item-icon{color:var(--pt-news-item-icon-color, #ffffff)}.pt-news-ticker__empty{display:flex;align-items:center;justify-content:center;gap:.5rem;width:100%;min-height:var(--pt-news-ticker-height, 3.25rem);padding:.75rem 1rem;color:#64748b;font-size:.85rem;font-weight:500;text-align:center}.pt-news-ticker__empty .pi{font-size:1rem}@keyframes pt-news-ticker-scroll{0%{transform:translateZ(0)}to{transform:translate3d(-50%,0,0)}}@keyframes pt-news-ticker-flash{0%{background-color:var(--pt-news-flash-background, #dc2626)}to{background-color:var(--pt-news-flash-alternate-background, #7f1d1d)}}@media(max-width:768px){.pt-news-ticker{min-height:3rem}.pt-news-ticker__controls{padding-right:.25rem;padding-left:.25rem}.pt-news-ticker__speed{display:none}.pt-news-ticker__item{max-width:22rem}.pt-news-ticker__viewport:before,.pt-news-ticker__viewport:after{width:1.25rem}}@media(max-width:480px){.pt-news-ticker__item{max-width:17rem}.pt-news-ticker__item-text{font-size:.78rem}}@media(prefers-reduced-motion:reduce){.pt-news-ticker__track{animation:none!important;transform:none!important}.pt-news-ticker__item--flash{animation:none!important;background-color:var(--pt-news-flash-background, #dc2626)!important}.pt-news-ticker__viewport{overflow-x:auto}.pt-news-ticker__viewport:before,.pt-news-ticker__viewport:after{display:none}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i6.ButtonDirective, selector: "[pButton]", inputs: ["ptButtonDirective", "pButtonPT", "pButtonUnstyled", "hostName", "text", "plain", "raised", "size", "outlined", "rounded", "iconPos", "loadingIcon", "fluid", "label", "icon", "loading", "buttonProps", "severity"] }, { kind: "directive", type: i13.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "showOnEllipsis", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo", "ptTooltip", "pTooltipPT", "pTooltipUnstyled"] }] }); }
10492
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: PTNewsTickerComponent, isStandalone: false, selector: "pt-news-ticker", inputs: { news: "news", speed: "speed", defaultSpeed: "defaultSpeed", speedStep: "speedStep", minSpeed: "minSpeed", maxSpeed: "maxSpeed", direction: "direction", autoplay: "autoplay", loop: "loop", pauseOnHover: "pauseOnHover", showControls: "showControls", showPlayPauseControl: "showPlayPauseControl", showSpeedControls: "showSpeedControls", showResetSpeedControl: "showResetSpeedControl", showRemoveButton: "showRemoveButton", showSpeedValue: "showSpeedValue", showNewBadge: "showNewBadge", newBadgeText: "newBadgeText", newBadgeDuration: "newBadgeDuration", height: "height", gap: "gap", itemGap: "itemGap", containerBackgroundColor: "containerBackgroundColor", containerTextColor: "containerTextColor", borderColor: "borderColor", borderWidth: "borderWidth", borderRadius: "borderRadius", controlsBackgroundColor: "controlsBackgroundColor", controlsBorderColor: "controlsBorderColor", emptyMessage: "emptyMessage", emptyIcon: "emptyIcon", ariaLabel: "ariaLabel" }, outputs: { newsClick: "newsClick", newsRemove: "newsRemove", newsChange: "newsChange", playStateChange: "playStateChange", speedChange: "speedChange" }, viewQueries: [{ propertyName: "tickerViewport", first: true, predicate: ["tickerViewport"], descendants: true }, { propertyName: "tickerTrack", first: true, predicate: ["tickerTrack"], descendants: true }, { propertyName: "tickerGroup", first: true, predicate: ["tickerGroup"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"pt-news-ticker\"\n [ngStyle]=\"getContainerStyle()\"\n [attr.aria-label]=\"ariaLabel\"\n role=\"region\"\n>\n @if (showControls) {\n <div class=\"pt-news-ticker__controls\">\n @if (showPlayPauseControl) {\n <button\n pButton\n pRipple\n type=\"button\"\n class=\"p-button-rounded p-button-text p-button-sm\"\n [icon]=\"playing ? 'pi pi-pause' : 'pi pi-play'\"\n [pTooltip]=\"playing ? 'Mettre en pause' : 'Reprendre'\"\n tooltipPosition=\"top\"\n appendTo=\"body\"\n [attr.aria-label]=\"\n playing ? 'Mettre le ruban en pause' : 'Reprendre le ruban'\n \"\n (click)=\"togglePlayState()\"\n ></button>\n }\n\n @if (showSpeedControls) {\n <button\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-minus\"\n class=\"p-button-rounded p-button-text p-button-sm\"\n pTooltip=\"Ralentir\"\n tooltipPosition=\"top\"\n appendTo=\"body\"\n aria-label=\"Ralentir le ruban\"\n [disabled]=\"speed <= minSpeed\"\n (click)=\"decreaseSpeed()\"\n ></button>\n\n <button\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-plus\"\n class=\"p-button-rounded p-button-text p-button-sm\"\n pTooltip=\"Acc\u00E9l\u00E9rer\"\n tooltipPosition=\"top\"\n appendTo=\"body\"\n aria-label=\"Acc\u00E9l\u00E9rer le ruban\"\n [disabled]=\"speed >= maxSpeed\"\n (click)=\"increaseSpeed()\"\n ></button>\n }\n\n @if (showResetSpeedControl) {\n <button\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-refresh\"\n class=\"p-button-rounded p-button-text p-button-sm\"\n pTooltip=\"R\u00E9initialiser la vitesse\"\n tooltipPosition=\"top\"\n appendTo=\"body\"\n aria-label=\"R\u00E9initialiser la vitesse\"\n [disabled]=\"speed === defaultSpeed\"\n (click)=\"resetSpeed()\"\n ></button>\n }\n\n @if (showSpeedValue) {\n <span\n class=\"pt-news-ticker__speed\"\n [attr.aria-label]=\"'Vitesse ' + speed + ' pixels par seconde'\"\n >\n {{ speed }} px/s\n </span>\n }\n </div>\n }\n\n <div\n #tickerViewport\n class=\"pt-news-ticker__viewport\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\"\n >\n @if (internalNews.length > 0) {\n <div\n #tickerTrack\n class=\"pt-news-ticker__track\"\n [class.pt-news-ticker__track--single]=\"!loop\"\n [ngStyle]=\"getTrackStyle()\"\n (animationiteration)=\"onTrackAnimationIteration($event)\"\n (animationend)=\"onTrackAnimationEnd($event)\"\n >\n <div\n #tickerGroup\n class=\"pt-news-ticker__group\"\n [attr.aria-hidden]=\"false\"\n >\n @for (item of internalNews; track getTrackById($index, item)) {\n <article\n class=\"pt-news-ticker__item\"\n [ngClass]=\"getItemClasses(item)\"\n [ngStyle]=\"getItemStyle(item)\"\n [pTooltip]=\"item.tooltip || ''\"\n tooltipPosition=\"top\"\n appendTo=\"body\"\n [attr.aria-disabled]=\"item.disabled\"\n [attr.aria-label]=\"\n hasItemLink(item) ? item.text + ', ouvrir le lien' : item.text\n \"\n [attr.role]=\"getItemRole(item)\"\n [attr.tabindex]=\"getItemTabIndex(item)\"\n (click)=\"onItemClick($event, item)\"\n (keydown.enter)=\"onItemClick($event, item)\"\n (keydown.space)=\"onItemClick($event, item)\"\n >\n @if (item.icon) {\n <i\n class=\"pt-news-ticker__item-icon\"\n [ngClass]=\"item.icon\"\n aria-hidden=\"true\"\n ></i>\n }\n\n <div class=\"pt-news-ticker__content\">\n <span class=\"pt-news-ticker__item-title\">\n {{ item.text }}\n </span>\n\n @if (hasSegments(item)) {\n <span class=\"pt-news-ticker__segments\">\n @for (segment of item.segments; track $index) {\n @if ($index > 0) {\n <span\n class=\"pt-news-ticker__segment-separator\"\n aria-hidden=\"true\"\n >\n {{ getSegmentSeparator(item) }}\n </span>\n }\n\n <span\n class=\"pt-news-ticker__segment\"\n [ngStyle]=\"getSegmentStyle(segment)\"\n [pTooltip]=\"segment.tooltip || ''\"\n tooltipPosition=\"top\"\n appendTo=\"body\"\n >\n @if (segment.label) {\n <span class=\"pt-news-ticker__segment-label\">\n {{ segment.label }}\n </span>\n }\n\n @if (getSegmentIcon(segment); as segmentIcon) {\n <i\n class=\"pt-news-ticker__segment-icon\"\n [ngClass]=\"segmentIcon\"\n aria-hidden=\"true\"\n ></i>\n }\n\n @if (segment.value) {\n <span class=\"pt-news-ticker__segment-value\">\n {{ segment.value }}\n </span>\n }\n </span>\n }\n </span>\n }\n </div>\n\n @if (shouldShowNewBadge(item)) {\n <span class=\"pt-news-ticker__new-badge\">\n {{ getNewBadgeText(item) }}\n </span>\n }\n\n @if (hasItemLink(item)) {\n <i\n class=\"pt-news-ticker__link-icon pi pi-external-link\"\n aria-hidden=\"true\"\n ></i>\n }\n\n @if (isItemRemovable(item)) {\n <button\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-times\"\n class=\"pt-news-ticker__remove-button p-button-rounded p-button-text p-button-sm\"\n pTooltip=\"Supprimer l\u2019actualit\u00E9\"\n tooltipPosition=\"top\"\n appendTo=\"body\"\n [attr.aria-label]=\"'Supprimer : ' + item.text\"\n (click)=\"onRemoveClick($event, item)\"\n ></button>\n }\n </article>\n }\n </div>\n\n @if (loop) {\n <div class=\"pt-news-ticker__group\" aria-hidden=\"true\">\n @for (\n item of internalNews;\n track getDuplicateTrackById($index, item)\n ) {\n <article\n class=\"pt-news-ticker__item\"\n [ngClass]=\"getDuplicateItemClasses(item)\"\n [ngStyle]=\"getItemStyle(item)\"\n >\n @if (item.icon) {\n <i\n class=\"pt-news-ticker__item-icon\"\n [ngClass]=\"item.icon\"\n aria-hidden=\"true\"\n ></i>\n }\n\n <div class=\"pt-news-ticker__content\">\n <span class=\"pt-news-ticker__item-title\">\n {{ item.text }}\n </span>\n\n @if (hasSegments(item)) {\n <span class=\"pt-news-ticker__segments\">\n @for (segment of item.segments; track $index) {\n @if ($index > 0) {\n <span\n class=\"pt-news-ticker__segment-separator\"\n aria-hidden=\"true\"\n >\n {{ getSegmentSeparator(item) }}\n </span>\n }\n\n <span\n class=\"pt-news-ticker__segment\"\n [ngStyle]=\"getSegmentStyle(segment)\"\n >\n @if (segment.label) {\n <span class=\"pt-news-ticker__segment-label\">\n {{ segment.label }}\n </span>\n }\n\n @if (getSegmentIcon(segment); as segmentIcon) {\n <i\n class=\"pt-news-ticker__segment-icon\"\n [ngClass]=\"segmentIcon\"\n aria-hidden=\"true\"\n ></i>\n }\n\n @if (segment.value) {\n <span class=\"pt-news-ticker__segment-value\">\n {{ segment.value }}\n </span>\n }\n </span>\n }\n </span>\n }\n </div>\n\n @if (shouldShowNewBadge(item)) {\n <span class=\"pt-news-ticker__new-badge\">\n {{ getNewBadgeText(item) }}\n </span>\n }\n\n @if (hasItemLink(item)) {\n <i\n class=\"pt-news-ticker__link-icon pi pi-external-link\"\n aria-hidden=\"true\"\n ></i>\n }\n\n @if (isItemRemovable(item)) {\n <span\n class=\"pt-news-ticker__duplicate-remove-placeholder\"\n aria-hidden=\"true\"\n >\n <i class=\"pi pi-times\"></i>\n </span>\n }\n </article>\n }\n </div>\n }\n </div>\n } @else {\n <div class=\"pt-news-ticker__empty\">\n @if (emptyIcon) {\n <i [ngClass]=\"emptyIcon\" aria-hidden=\"true\"></i>\n }\n\n <span>{{ emptyMessage }}</span>\n </div>\n }\n </div>\n</div>\n", styles: [":host{display:block;width:100%;min-width:0;max-width:100%;box-sizing:border-box}:host *,:host *:before,:host *:after{box-sizing:border-box}.pt-news-ticker{display:flex;align-items:stretch;width:100%;min-width:0;max-width:100%;min-height:var(--pt-news-ticker-height, 3.25rem);overflow:hidden;border:var(--pt-news-ticker-border-width, 1px) solid var(--pt-news-ticker-border-color, #e2e8f0);border-radius:var(--pt-news-ticker-border-radius, 8px);background:var(--pt-news-ticker-background, #ffffff);color:var(--pt-news-ticker-text-color, #0f172a)}.pt-news-ticker__controls{position:relative;z-index:4;display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;gap:.1rem;min-height:var(--pt-news-ticker-height, 3.25rem);padding:.25rem .4rem;border-right:1px solid var(--pt-news-ticker-controls-border-color, #e2e8f0);background:var(--pt-news-ticker-controls-background, #f8fafc)}.pt-news-ticker__controls ::ng-deep .p-button.p-button-rounded.p-button-text{width:1.9rem;min-width:1.9rem;height:1.9rem;padding:0}.pt-news-ticker__controls ::ng-deep .p-button .p-button-icon{font-size:.78rem}.pt-news-ticker__speed{min-width:3.5rem;padding:0 .35rem;color:#475569;font-size:.7rem;font-weight:700;text-align:center;white-space:nowrap}.pt-news-ticker__viewport{position:relative;display:flex;align-items:center;flex:1 1 auto;width:100%;min-width:0;min-height:var(--pt-news-ticker-height, 3.25rem);overflow:hidden;contain:layout paint}.pt-news-ticker__viewport:before,.pt-news-ticker__viewport:after{position:absolute;z-index:3;top:0;bottom:0;width:2.5rem;content:\"\";pointer-events:none}.pt-news-ticker__viewport:before{left:0;background:linear-gradient(to right,var(--pt-news-ticker-background, #ffffff),transparent)}.pt-news-ticker__viewport:after{right:0;background:linear-gradient(to left,var(--pt-news-ticker-background, #ffffff),transparent)}.pt-news-ticker__track{display:flex;align-items:center;flex:0 0 auto;width:max-content;min-width:max-content;transform:translateZ(0);animation-name:pt-news-ticker-scroll;animation-duration:var(--pt-news-ticker-duration, 20s);animation-timing-function:linear;animation-iteration-count:infinite;animation-fill-mode:both;backface-visibility:hidden;will-change:transform}.pt-news-ticker__track--single{animation-iteration-count:1;animation-fill-mode:forwards}.pt-news-ticker__group{display:inline-flex;align-items:center;flex:0 0 auto;gap:var(--pt-news-ticker-gap, 2rem);min-width:max-content;padding-right:var(--pt-news-ticker-gap, 2rem)}.pt-news-ticker__item{display:inline-flex;align-items:center;flex:0 0 auto;gap:var(--pt-news-item-gap, .5rem);min-height:2.25rem;max-width:48rem;padding:.35rem .65rem;overflow:hidden;border:1px solid var(--pt-news-item-border-color, transparent);border-radius:999px;outline:none;background:var(--pt-news-item-background, transparent);color:var( --pt-news-item-text-color, var(--pt-news-ticker-text-color, #0f172a) );line-height:1.25;white-space:nowrap;transition:box-shadow .15s ease,opacity .15s ease,transform .15s ease}.pt-news-ticker__item--info,.pt-news-ticker__item--default{background:transparent}.pt-news-ticker__item--clickable,.pt-news-ticker__item--link{cursor:pointer}.pt-news-ticker__item--clickable:hover,.pt-news-ticker__item--link:hover{box-shadow:0 3px 10px #0f172a1f;transform:translateY(-1px)}.pt-news-ticker__item:focus-visible{box-shadow:0 0 0 2px #fff,0 0 0 4px var(--primary-color, #3b82f6)}.pt-news-ticker__item--disabled{cursor:not-allowed;opacity:.5}.pt-news-ticker__item-icon{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;color:var(--pt-news-item-icon-color, currentColor);font-size:.95rem}.pt-news-ticker__content{display:inline-flex;align-items:center;flex:0 0 auto;gap:.55rem;min-width:0}.pt-news-ticker__item-title{display:inline-block;flex:0 0 auto;overflow:hidden;font-size:.85rem;font-weight:700;text-overflow:ellipsis;white-space:nowrap}.pt-news-ticker__item-text{display:block;flex:1 1 auto;min-width:0;overflow:hidden;font-size:.85rem;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.pt-news-ticker__segments{display:inline-flex;align-items:center;flex:0 0 auto;gap:.45rem;white-space:nowrap}.pt-news-ticker__segment{display:inline-flex;align-items:center;flex:0 0 auto;gap:.22rem;color:var(--pt-news-segment-color, currentColor);font-size:.82rem;font-weight:700;white-space:nowrap}.pt-news-ticker__segment-label{color:inherit;font-weight:700}.pt-news-ticker__segment-icon{display:inline-flex;align-items:center;justify-content:center;color:var(--pt-news-segment-icon-color, currentColor);font-size:.68rem;font-weight:700}.pt-news-ticker__segment-value{color:inherit;font-variant-numeric:tabular-nums;font-weight:800}.pt-news-ticker__segment-separator{color:#94a3b8;font-size:.75rem;font-weight:700}.pt-news-ticker__new-badge{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;min-height:1.15rem;padding:.12rem .42rem;border:1px solid #93c5fd;border-radius:999px;background:#dbeafe;color:#1d4ed8;font-size:.62rem;font-weight:800;line-height:1;letter-spacing:.025em;text-transform:uppercase;white-space:nowrap;animation:pt-news-ticker-new-badge-pulse 1.5s ease-in-out infinite}.pt-news-ticker__item--flash .pt-news-ticker__new-badge{border-color:#ffffffb3;background:#fff;color:#b91c1c}.pt-news-ticker__item--danger .pt-news-ticker__new-badge{border-color:#ffffffbf;background:#fff;color:#b91c1c}.pt-news-ticker__link-icon{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;color:currentColor;font-size:.72rem;opacity:.75}.pt-news-ticker__item--link:hover .pt-news-ticker__link-icon{opacity:1}.pt-news-ticker__remove-button{flex:0 0 auto}.pt-news-ticker__item ::ng-deep .pt-news-ticker__remove-button.p-button{width:1.45rem;min-width:1.45rem;height:1.45rem;padding:0;color:currentColor}.pt-news-ticker__item ::ng-deep .pt-news-ticker__remove-button.p-button .p-button-icon{font-size:.65rem}.pt-news-ticker__item ::ng-deep .pt-news-ticker__remove-button.p-button:not(:disabled):hover{background:#0f172a1a}.pt-news-ticker__duplicate-remove-placeholder{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;width:1.45rem;min-width:1.45rem;height:1.45rem;opacity:0;pointer-events:none}.pt-news-ticker__duplicate-remove-placeholder .pi{font-size:.65rem}.pt-news-ticker__item--flash{border-color:var(--pt-news-item-border-color, #991b1b);color:var(--pt-news-flash-text-color, #ffffff);animation-name:pt-news-ticker-flash;animation-duration:var(--pt-news-flash-duration, .7s);animation-timing-function:ease-in-out;animation-iteration-count:infinite;animation-direction:alternate}.pt-news-ticker__item--flash .pt-news-ticker__item-icon{color:var(--pt-news-item-icon-color, #ffffff)}.pt-news-ticker__empty{display:flex;align-items:center;justify-content:center;gap:.5rem;width:100%;min-height:var(--pt-news-ticker-height, 3.25rem);padding:.75rem 1rem;color:#64748b;font-size:.85rem;font-weight:500;text-align:center}.pt-news-ticker__empty .pi{font-size:1rem}@keyframes pt-news-ticker-scroll{0%{transform:translateZ(0)}to{transform:translate3d(-50%,0,0)}}@keyframes pt-news-ticker-flash{0%{background-color:var(--pt-news-flash-background, #dc2626)}to{background-color:var(--pt-news-flash-alternate-background, #7f1d1d)}}@keyframes pt-news-ticker-new-badge-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.75;transform:scale(.96)}}@media(max-width:768px){.pt-news-ticker{min-height:3rem}.pt-news-ticker__controls{padding-right:.25rem;padding-left:.25rem}.pt-news-ticker__speed{display:none}.pt-news-ticker__item{max-width:34rem}.pt-news-ticker__viewport:before,.pt-news-ticker__viewport:after{width:1.25rem}}@media(max-width:480px){.pt-news-ticker__item{max-width:24rem}.pt-news-ticker__item-title,.pt-news-ticker__item-text{font-size:.78rem}.pt-news-ticker__segment{font-size:.75rem}.pt-news-ticker__new-badge{font-size:.56rem}}@media(prefers-reduced-motion:reduce){.pt-news-ticker__track{animation:none!important;transform:none!important}.pt-news-ticker__item--flash{animation:none!important;background-color:var(--pt-news-flash-background, #dc2626)!important}.pt-news-ticker__new-badge{animation:none!important}.pt-news-ticker__viewport{overflow-x:auto;contain:none}.pt-news-ticker__viewport:before,.pt-news-ticker__viewport:after{display:none}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i6.ButtonDirective, selector: "[pButton]", inputs: ["ptButtonDirective", "pButtonPT", "pButtonUnstyled", "hostName", "text", "plain", "raised", "size", "outlined", "rounded", "iconPos", "loadingIcon", "fluid", "label", "icon", "loading", "buttonProps", "severity"] }, { kind: "directive", type: i13.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "showOnEllipsis", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo", "ptTooltip", "pTooltipPT", "pTooltipUnstyled"] }] }); }
10217
10493
  }
10218
10494
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PTNewsTickerComponent, decorators: [{
10219
10495
  type: Component,
10220
- args: [{ selector: 'pt-news-ticker', standalone: false, template: "<div\n class=\"pt-news-ticker\"\n [ngStyle]=\"getContainerStyle()\"\n [attr.aria-label]=\"ariaLabel\"\n role=\"region\"\n>\n @if (showControls) {\n <div class=\"pt-news-ticker__controls\">\n @if (showPlayPauseControl) {\n <button\n pButton\n pRipple\n type=\"button\"\n class=\"p-button-rounded p-button-text p-button-sm\"\n [icon]=\"playing ? 'pi pi-pause' : 'pi pi-play'\"\n [pTooltip]=\"playing ? 'Mettre en pause' : 'Reprendre'\"\n tooltipPosition=\"top\"\n appendTo=\"body\"\n [attr.aria-label]=\"\n playing ? 'Mettre le ruban en pause' : 'Reprendre le ruban'\n \"\n (click)=\"togglePlayState()\"\n ></button>\n }\n\n @if (showSpeedControls) {\n <button\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-minus\"\n class=\"p-button-rounded p-button-text p-button-sm\"\n pTooltip=\"Ralentir\"\n tooltipPosition=\"top\"\n appendTo=\"body\"\n aria-label=\"Ralentir le ruban\"\n [disabled]=\"speed <= minSpeed\"\n (click)=\"decreaseSpeed()\"\n ></button>\n\n <button\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-plus\"\n class=\"p-button-rounded p-button-text p-button-sm\"\n pTooltip=\"Acc\u00E9l\u00E9rer\"\n tooltipPosition=\"top\"\n appendTo=\"body\"\n aria-label=\"Acc\u00E9l\u00E9rer le ruban\"\n [disabled]=\"speed >= maxSpeed\"\n (click)=\"increaseSpeed()\"\n ></button>\n }\n\n @if (showResetSpeedControl) {\n <button\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-refresh\"\n class=\"p-button-rounded p-button-text p-button-sm\"\n pTooltip=\"R\u00E9initialiser la vitesse\"\n tooltipPosition=\"top\"\n appendTo=\"body\"\n aria-label=\"R\u00E9initialiser la vitesse\"\n [disabled]=\"speed === defaultSpeed\"\n (click)=\"resetSpeed()\"\n ></button>\n }\n\n @if (showSpeedValue) {\n <span\n class=\"pt-news-ticker__speed\"\n [attr.aria-label]=\"'Vitesse ' + speed + ' pixels par seconde'\"\n >\n {{ speed }} px/s\n </span>\n }\n </div>\n }\n\n <div\n #tickerViewport\n class=\"pt-news-ticker__viewport\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\"\n >\n @if (internalNews.length > 0) {\n <div\n class=\"pt-news-ticker__track\"\n [class.pt-news-ticker__track--single]=\"!loop\"\n [ngStyle]=\"getTrackStyle()\"\n >\n <div\n #tickerGroup\n class=\"pt-news-ticker__group\"\n [attr.aria-hidden]=\"false\"\n >\n @for (item of internalNews; track getTrackById($index, item)) {\n <article\n class=\"pt-news-ticker__item\"\n [ngClass]=\"getItemClasses(item)\"\n [ngStyle]=\"getItemStyle(item)\"\n [pTooltip]=\"item.tooltip || ''\"\n tooltipPosition=\"top\"\n appendTo=\"body\"\n [attr.aria-disabled]=\"item.disabled\"\n [attr.aria-label]=\"\n hasItemLink(item) ? item.text + ', ouvrir le lien' : item.text\n \"\n [attr.role]=\"getItemRole(item)\"\n [attr.tabindex]=\"getItemTabIndex(item)\"\n (click)=\"onItemClick($event, item)\"\n (keydown.enter)=\"onItemClick($event, item)\"\n (keydown.space)=\"onItemClick($event, item)\"\n >\n @if (item.icon) {\n <i\n class=\"pt-news-ticker__item-icon\"\n [ngClass]=\"item.icon\"\n aria-hidden=\"true\"\n ></i>\n }\n\n <span class=\"pt-news-ticker__item-text\">\n {{ item.text }}\n </span>\n\n @if (hasItemLink(item)) {\n <i\n class=\"pt-news-ticker__link-icon pi pi-external-link\"\n aria-hidden=\"true\"\n ></i>\n }\n\n @if (isItemRemovable(item)) {\n <button\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-times\"\n class=\"pt-news-ticker__remove-button p-button-rounded p-button-text p-button-sm\"\n pTooltip=\"Supprimer l\u2019actualit\u00E9\"\n tooltipPosition=\"top\"\n appendTo=\"body\"\n [attr.aria-label]=\"'Supprimer : ' + item.text\"\n (click)=\"onRemoveClick($event, item)\"\n ></button>\n }\n </article>\n }\n </div>\n\n @if (loop) {\n <div class=\"pt-news-ticker__group\" aria-hidden=\"true\">\n @for (\n item of internalNews;\n track getDuplicateTrackById($index, item)\n ) {\n <article\n class=\"pt-news-ticker__item\"\n [ngClass]=\"getItemClasses(item)\"\n [ngStyle]=\"getItemStyle(item)\"\n >\n @if (item.icon) {\n <i\n class=\"pt-news-ticker__item-icon\"\n [ngClass]=\"item.icon\"\n aria-hidden=\"true\"\n ></i>\n }\n\n <span class=\"pt-news-ticker__item-text\">\n {{ item.text }}\n </span>\n\n @if (hasItemLink(item)) {\n <i\n class=\"pt-news-ticker__link-icon pi pi-external-link\"\n aria-hidden=\"true\"\n ></i>\n }\n\n @if (isItemRemovable(item)) {\n <span\n class=\"pt-news-ticker__duplicate-remove-placeholder\"\n aria-hidden=\"true\"\n >\n <i class=\"pi pi-times\"></i>\n </span>\n }\n </article>\n }\n </div>\n }\n </div>\n } @else {\n <div class=\"pt-news-ticker__empty\">\n @if (emptyIcon) {\n <i [ngClass]=\"emptyIcon\" aria-hidden=\"true\"></i>\n }\n\n <span>{{ emptyMessage }}</span>\n </div>\n }\n </div>\n</div>\n", styles: [":host{display:block;width:100%;min-width:0;max-width:100%;box-sizing:border-box}:host *,:host *:before,:host *:after{box-sizing:border-box}.pt-news-ticker{display:flex;align-items:stretch;width:100%;min-width:0;max-width:100%;min-height:var(--pt-news-ticker-height, 3.25rem);overflow:hidden;border:var(--pt-news-ticker-border-width, 1px) solid var(--pt-news-ticker-border-color, #e2e8f0);border-radius:var(--pt-news-ticker-border-radius, 8px);background:var(--pt-news-ticker-background, #ffffff);color:var(--pt-news-ticker-text-color, #0f172a)}.pt-news-ticker__controls{position:relative;z-index:4;display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;gap:.1rem;min-height:var(--pt-news-ticker-height, 3.25rem);padding:.25rem .4rem;border-right:1px solid var(--pt-news-ticker-controls-border-color, #e2e8f0);background:var(--pt-news-ticker-controls-background, #f8fafc)}.pt-news-ticker__controls ::ng-deep .p-button.p-button-rounded.p-button-text{width:1.9rem;min-width:1.9rem;height:1.9rem;padding:0}.pt-news-ticker__controls ::ng-deep .p-button .p-button-icon{font-size:.78rem}.pt-news-ticker__speed{min-width:3.5rem;padding:0 .35rem;color:#475569;font-size:.7rem;font-weight:700;text-align:center;white-space:nowrap}.pt-news-ticker__viewport{position:relative;display:flex;align-items:center;flex:1 1 auto;width:100%;min-width:0;min-height:var(--pt-news-ticker-height, 3.25rem);overflow:hidden}.pt-news-ticker__viewport:before,.pt-news-ticker__viewport:after{position:absolute;z-index:3;top:0;bottom:0;width:2.5rem;content:\"\";pointer-events:none}.pt-news-ticker__viewport:before{left:0;background:linear-gradient(to right,var(--pt-news-ticker-background, #ffffff),transparent)}.pt-news-ticker__viewport:after{right:0;background:linear-gradient(to left,var(--pt-news-ticker-background, #ffffff),transparent)}.pt-news-ticker__track{display:flex;align-items:center;flex:0 0 auto;width:max-content;min-width:max-content;animation-name:pt-news-ticker-scroll;animation-duration:var(--pt-news-ticker-duration, 20s);animation-timing-function:linear;animation-iteration-count:infinite;will-change:transform}.pt-news-ticker__track--single{animation-iteration-count:1;animation-fill-mode:forwards}.pt-news-ticker__group{display:inline-flex;align-items:center;flex:0 0 auto;gap:var(--pt-news-ticker-gap, 2rem);min-width:max-content;padding-right:var(--pt-news-ticker-gap, 2rem)}.pt-news-ticker__item{display:inline-flex;align-items:center;flex:0 0 auto;gap:var(--pt-news-item-gap, .5rem);min-height:2.25rem;max-width:36rem;padding:.35rem .65rem;overflow:hidden;border:1px solid var(--pt-news-item-border-color, transparent);border-radius:999px;outline:none;background:var(--pt-news-item-background, transparent);color:var( --pt-news-item-text-color, var(--pt-news-ticker-text-color, #0f172a) );line-height:1.25;white-space:nowrap;transition:box-shadow .15s ease,opacity .15s ease,transform .15s ease}.pt-news-ticker__item--clickable{cursor:pointer}.pt-news-ticker__item--clickable:hover{box-shadow:0 3px 10px #0f172a1f;transform:translateY(-1px)}.pt-news-ticker__item:focus-visible{box-shadow:0 0 0 2px #fff,0 0 0 4px var(--primary-color, #3b82f6)}.pt-news-ticker__item--disabled{cursor:not-allowed;opacity:.5}.pt-news-ticker__item-icon{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;color:var(--pt-news-item-icon-color, currentColor);font-size:.95rem}.pt-news-ticker__item-text{display:block;flex:1 1 auto;min-width:0;overflow:hidden;font-size:.85rem;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.pt-news-ticker__remove-button{flex:0 0 auto}.pt-news-ticker__item ::ng-deep .pt-news-ticker__remove-button.p-button{width:1.45rem;min-width:1.45rem;height:1.45rem;padding:0;color:currentColor}.pt-news-ticker__item ::ng-deep .pt-news-ticker__remove-button.p-button .p-button-icon{font-size:.65rem}.pt-news-ticker__item ::ng-deep .pt-news-ticker__remove-button.p-button:not(:disabled):hover{background:#0f172a1a}.pt-news-ticker__duplicate-remove-placeholder{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;width:1.45rem;min-width:1.45rem;height:1.45rem;opacity:0;pointer-events:none}.pt-news-ticker__duplicate-remove-placeholder .pi{font-size:.65rem}.pt-news-ticker__item--flash{border-color:var(--pt-news-item-border-color, #991b1b);color:var(--pt-news-flash-text-color, #ffffff);animation-name:pt-news-ticker-flash;animation-duration:var(--pt-news-flash-duration, .7s);animation-timing-function:ease-in-out;animation-iteration-count:infinite;animation-direction:alternate}.pt-news-ticker__item--flash .pt-news-ticker__item-icon{color:var(--pt-news-item-icon-color, #ffffff)}.pt-news-ticker__empty{display:flex;align-items:center;justify-content:center;gap:.5rem;width:100%;min-height:var(--pt-news-ticker-height, 3.25rem);padding:.75rem 1rem;color:#64748b;font-size:.85rem;font-weight:500;text-align:center}.pt-news-ticker__empty .pi{font-size:1rem}@keyframes pt-news-ticker-scroll{0%{transform:translateZ(0)}to{transform:translate3d(-50%,0,0)}}@keyframes pt-news-ticker-flash{0%{background-color:var(--pt-news-flash-background, #dc2626)}to{background-color:var(--pt-news-flash-alternate-background, #7f1d1d)}}@media(max-width:768px){.pt-news-ticker{min-height:3rem}.pt-news-ticker__controls{padding-right:.25rem;padding-left:.25rem}.pt-news-ticker__speed{display:none}.pt-news-ticker__item{max-width:22rem}.pt-news-ticker__viewport:before,.pt-news-ticker__viewport:after{width:1.25rem}}@media(max-width:480px){.pt-news-ticker__item{max-width:17rem}.pt-news-ticker__item-text{font-size:.78rem}}@media(prefers-reduced-motion:reduce){.pt-news-ticker__track{animation:none!important;transform:none!important}.pt-news-ticker__item--flash{animation:none!important;background-color:var(--pt-news-flash-background, #dc2626)!important}.pt-news-ticker__viewport{overflow-x:auto}.pt-news-ticker__viewport:before,.pt-news-ticker__viewport:after{display:none}}\n"] }]
10496
+ args: [{ selector: 'pt-news-ticker', standalone: false, template: "<div\n class=\"pt-news-ticker\"\n [ngStyle]=\"getContainerStyle()\"\n [attr.aria-label]=\"ariaLabel\"\n role=\"region\"\n>\n @if (showControls) {\n <div class=\"pt-news-ticker__controls\">\n @if (showPlayPauseControl) {\n <button\n pButton\n pRipple\n type=\"button\"\n class=\"p-button-rounded p-button-text p-button-sm\"\n [icon]=\"playing ? 'pi pi-pause' : 'pi pi-play'\"\n [pTooltip]=\"playing ? 'Mettre en pause' : 'Reprendre'\"\n tooltipPosition=\"top\"\n appendTo=\"body\"\n [attr.aria-label]=\"\n playing ? 'Mettre le ruban en pause' : 'Reprendre le ruban'\n \"\n (click)=\"togglePlayState()\"\n ></button>\n }\n\n @if (showSpeedControls) {\n <button\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-minus\"\n class=\"p-button-rounded p-button-text p-button-sm\"\n pTooltip=\"Ralentir\"\n tooltipPosition=\"top\"\n appendTo=\"body\"\n aria-label=\"Ralentir le ruban\"\n [disabled]=\"speed <= minSpeed\"\n (click)=\"decreaseSpeed()\"\n ></button>\n\n <button\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-plus\"\n class=\"p-button-rounded p-button-text p-button-sm\"\n pTooltip=\"Acc\u00E9l\u00E9rer\"\n tooltipPosition=\"top\"\n appendTo=\"body\"\n aria-label=\"Acc\u00E9l\u00E9rer le ruban\"\n [disabled]=\"speed >= maxSpeed\"\n (click)=\"increaseSpeed()\"\n ></button>\n }\n\n @if (showResetSpeedControl) {\n <button\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-refresh\"\n class=\"p-button-rounded p-button-text p-button-sm\"\n pTooltip=\"R\u00E9initialiser la vitesse\"\n tooltipPosition=\"top\"\n appendTo=\"body\"\n aria-label=\"R\u00E9initialiser la vitesse\"\n [disabled]=\"speed === defaultSpeed\"\n (click)=\"resetSpeed()\"\n ></button>\n }\n\n @if (showSpeedValue) {\n <span\n class=\"pt-news-ticker__speed\"\n [attr.aria-label]=\"'Vitesse ' + speed + ' pixels par seconde'\"\n >\n {{ speed }} px/s\n </span>\n }\n </div>\n }\n\n <div\n #tickerViewport\n class=\"pt-news-ticker__viewport\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\"\n >\n @if (internalNews.length > 0) {\n <div\n #tickerTrack\n class=\"pt-news-ticker__track\"\n [class.pt-news-ticker__track--single]=\"!loop\"\n [ngStyle]=\"getTrackStyle()\"\n (animationiteration)=\"onTrackAnimationIteration($event)\"\n (animationend)=\"onTrackAnimationEnd($event)\"\n >\n <div\n #tickerGroup\n class=\"pt-news-ticker__group\"\n [attr.aria-hidden]=\"false\"\n >\n @for (item of internalNews; track getTrackById($index, item)) {\n <article\n class=\"pt-news-ticker__item\"\n [ngClass]=\"getItemClasses(item)\"\n [ngStyle]=\"getItemStyle(item)\"\n [pTooltip]=\"item.tooltip || ''\"\n tooltipPosition=\"top\"\n appendTo=\"body\"\n [attr.aria-disabled]=\"item.disabled\"\n [attr.aria-label]=\"\n hasItemLink(item) ? item.text + ', ouvrir le lien' : item.text\n \"\n [attr.role]=\"getItemRole(item)\"\n [attr.tabindex]=\"getItemTabIndex(item)\"\n (click)=\"onItemClick($event, item)\"\n (keydown.enter)=\"onItemClick($event, item)\"\n (keydown.space)=\"onItemClick($event, item)\"\n >\n @if (item.icon) {\n <i\n class=\"pt-news-ticker__item-icon\"\n [ngClass]=\"item.icon\"\n aria-hidden=\"true\"\n ></i>\n }\n\n <div class=\"pt-news-ticker__content\">\n <span class=\"pt-news-ticker__item-title\">\n {{ item.text }}\n </span>\n\n @if (hasSegments(item)) {\n <span class=\"pt-news-ticker__segments\">\n @for (segment of item.segments; track $index) {\n @if ($index > 0) {\n <span\n class=\"pt-news-ticker__segment-separator\"\n aria-hidden=\"true\"\n >\n {{ getSegmentSeparator(item) }}\n </span>\n }\n\n <span\n class=\"pt-news-ticker__segment\"\n [ngStyle]=\"getSegmentStyle(segment)\"\n [pTooltip]=\"segment.tooltip || ''\"\n tooltipPosition=\"top\"\n appendTo=\"body\"\n >\n @if (segment.label) {\n <span class=\"pt-news-ticker__segment-label\">\n {{ segment.label }}\n </span>\n }\n\n @if (getSegmentIcon(segment); as segmentIcon) {\n <i\n class=\"pt-news-ticker__segment-icon\"\n [ngClass]=\"segmentIcon\"\n aria-hidden=\"true\"\n ></i>\n }\n\n @if (segment.value) {\n <span class=\"pt-news-ticker__segment-value\">\n {{ segment.value }}\n </span>\n }\n </span>\n }\n </span>\n }\n </div>\n\n @if (shouldShowNewBadge(item)) {\n <span class=\"pt-news-ticker__new-badge\">\n {{ getNewBadgeText(item) }}\n </span>\n }\n\n @if (hasItemLink(item)) {\n <i\n class=\"pt-news-ticker__link-icon pi pi-external-link\"\n aria-hidden=\"true\"\n ></i>\n }\n\n @if (isItemRemovable(item)) {\n <button\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-times\"\n class=\"pt-news-ticker__remove-button p-button-rounded p-button-text p-button-sm\"\n pTooltip=\"Supprimer l\u2019actualit\u00E9\"\n tooltipPosition=\"top\"\n appendTo=\"body\"\n [attr.aria-label]=\"'Supprimer : ' + item.text\"\n (click)=\"onRemoveClick($event, item)\"\n ></button>\n }\n </article>\n }\n </div>\n\n @if (loop) {\n <div class=\"pt-news-ticker__group\" aria-hidden=\"true\">\n @for (\n item of internalNews;\n track getDuplicateTrackById($index, item)\n ) {\n <article\n class=\"pt-news-ticker__item\"\n [ngClass]=\"getDuplicateItemClasses(item)\"\n [ngStyle]=\"getItemStyle(item)\"\n >\n @if (item.icon) {\n <i\n class=\"pt-news-ticker__item-icon\"\n [ngClass]=\"item.icon\"\n aria-hidden=\"true\"\n ></i>\n }\n\n <div class=\"pt-news-ticker__content\">\n <span class=\"pt-news-ticker__item-title\">\n {{ item.text }}\n </span>\n\n @if (hasSegments(item)) {\n <span class=\"pt-news-ticker__segments\">\n @for (segment of item.segments; track $index) {\n @if ($index > 0) {\n <span\n class=\"pt-news-ticker__segment-separator\"\n aria-hidden=\"true\"\n >\n {{ getSegmentSeparator(item) }}\n </span>\n }\n\n <span\n class=\"pt-news-ticker__segment\"\n [ngStyle]=\"getSegmentStyle(segment)\"\n >\n @if (segment.label) {\n <span class=\"pt-news-ticker__segment-label\">\n {{ segment.label }}\n </span>\n }\n\n @if (getSegmentIcon(segment); as segmentIcon) {\n <i\n class=\"pt-news-ticker__segment-icon\"\n [ngClass]=\"segmentIcon\"\n aria-hidden=\"true\"\n ></i>\n }\n\n @if (segment.value) {\n <span class=\"pt-news-ticker__segment-value\">\n {{ segment.value }}\n </span>\n }\n </span>\n }\n </span>\n }\n </div>\n\n @if (shouldShowNewBadge(item)) {\n <span class=\"pt-news-ticker__new-badge\">\n {{ getNewBadgeText(item) }}\n </span>\n }\n\n @if (hasItemLink(item)) {\n <i\n class=\"pt-news-ticker__link-icon pi pi-external-link\"\n aria-hidden=\"true\"\n ></i>\n }\n\n @if (isItemRemovable(item)) {\n <span\n class=\"pt-news-ticker__duplicate-remove-placeholder\"\n aria-hidden=\"true\"\n >\n <i class=\"pi pi-times\"></i>\n </span>\n }\n </article>\n }\n </div>\n }\n </div>\n } @else {\n <div class=\"pt-news-ticker__empty\">\n @if (emptyIcon) {\n <i [ngClass]=\"emptyIcon\" aria-hidden=\"true\"></i>\n }\n\n <span>{{ emptyMessage }}</span>\n </div>\n }\n </div>\n</div>\n", styles: [":host{display:block;width:100%;min-width:0;max-width:100%;box-sizing:border-box}:host *,:host *:before,:host *:after{box-sizing:border-box}.pt-news-ticker{display:flex;align-items:stretch;width:100%;min-width:0;max-width:100%;min-height:var(--pt-news-ticker-height, 3.25rem);overflow:hidden;border:var(--pt-news-ticker-border-width, 1px) solid var(--pt-news-ticker-border-color, #e2e8f0);border-radius:var(--pt-news-ticker-border-radius, 8px);background:var(--pt-news-ticker-background, #ffffff);color:var(--pt-news-ticker-text-color, #0f172a)}.pt-news-ticker__controls{position:relative;z-index:4;display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;gap:.1rem;min-height:var(--pt-news-ticker-height, 3.25rem);padding:.25rem .4rem;border-right:1px solid var(--pt-news-ticker-controls-border-color, #e2e8f0);background:var(--pt-news-ticker-controls-background, #f8fafc)}.pt-news-ticker__controls ::ng-deep .p-button.p-button-rounded.p-button-text{width:1.9rem;min-width:1.9rem;height:1.9rem;padding:0}.pt-news-ticker__controls ::ng-deep .p-button .p-button-icon{font-size:.78rem}.pt-news-ticker__speed{min-width:3.5rem;padding:0 .35rem;color:#475569;font-size:.7rem;font-weight:700;text-align:center;white-space:nowrap}.pt-news-ticker__viewport{position:relative;display:flex;align-items:center;flex:1 1 auto;width:100%;min-width:0;min-height:var(--pt-news-ticker-height, 3.25rem);overflow:hidden;contain:layout paint}.pt-news-ticker__viewport:before,.pt-news-ticker__viewport:after{position:absolute;z-index:3;top:0;bottom:0;width:2.5rem;content:\"\";pointer-events:none}.pt-news-ticker__viewport:before{left:0;background:linear-gradient(to right,var(--pt-news-ticker-background, #ffffff),transparent)}.pt-news-ticker__viewport:after{right:0;background:linear-gradient(to left,var(--pt-news-ticker-background, #ffffff),transparent)}.pt-news-ticker__track{display:flex;align-items:center;flex:0 0 auto;width:max-content;min-width:max-content;transform:translateZ(0);animation-name:pt-news-ticker-scroll;animation-duration:var(--pt-news-ticker-duration, 20s);animation-timing-function:linear;animation-iteration-count:infinite;animation-fill-mode:both;backface-visibility:hidden;will-change:transform}.pt-news-ticker__track--single{animation-iteration-count:1;animation-fill-mode:forwards}.pt-news-ticker__group{display:inline-flex;align-items:center;flex:0 0 auto;gap:var(--pt-news-ticker-gap, 2rem);min-width:max-content;padding-right:var(--pt-news-ticker-gap, 2rem)}.pt-news-ticker__item{display:inline-flex;align-items:center;flex:0 0 auto;gap:var(--pt-news-item-gap, .5rem);min-height:2.25rem;max-width:48rem;padding:.35rem .65rem;overflow:hidden;border:1px solid var(--pt-news-item-border-color, transparent);border-radius:999px;outline:none;background:var(--pt-news-item-background, transparent);color:var( --pt-news-item-text-color, var(--pt-news-ticker-text-color, #0f172a) );line-height:1.25;white-space:nowrap;transition:box-shadow .15s ease,opacity .15s ease,transform .15s ease}.pt-news-ticker__item--info,.pt-news-ticker__item--default{background:transparent}.pt-news-ticker__item--clickable,.pt-news-ticker__item--link{cursor:pointer}.pt-news-ticker__item--clickable:hover,.pt-news-ticker__item--link:hover{box-shadow:0 3px 10px #0f172a1f;transform:translateY(-1px)}.pt-news-ticker__item:focus-visible{box-shadow:0 0 0 2px #fff,0 0 0 4px var(--primary-color, #3b82f6)}.pt-news-ticker__item--disabled{cursor:not-allowed;opacity:.5}.pt-news-ticker__item-icon{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;color:var(--pt-news-item-icon-color, currentColor);font-size:.95rem}.pt-news-ticker__content{display:inline-flex;align-items:center;flex:0 0 auto;gap:.55rem;min-width:0}.pt-news-ticker__item-title{display:inline-block;flex:0 0 auto;overflow:hidden;font-size:.85rem;font-weight:700;text-overflow:ellipsis;white-space:nowrap}.pt-news-ticker__item-text{display:block;flex:1 1 auto;min-width:0;overflow:hidden;font-size:.85rem;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.pt-news-ticker__segments{display:inline-flex;align-items:center;flex:0 0 auto;gap:.45rem;white-space:nowrap}.pt-news-ticker__segment{display:inline-flex;align-items:center;flex:0 0 auto;gap:.22rem;color:var(--pt-news-segment-color, currentColor);font-size:.82rem;font-weight:700;white-space:nowrap}.pt-news-ticker__segment-label{color:inherit;font-weight:700}.pt-news-ticker__segment-icon{display:inline-flex;align-items:center;justify-content:center;color:var(--pt-news-segment-icon-color, currentColor);font-size:.68rem;font-weight:700}.pt-news-ticker__segment-value{color:inherit;font-variant-numeric:tabular-nums;font-weight:800}.pt-news-ticker__segment-separator{color:#94a3b8;font-size:.75rem;font-weight:700}.pt-news-ticker__new-badge{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;min-height:1.15rem;padding:.12rem .42rem;border:1px solid #93c5fd;border-radius:999px;background:#dbeafe;color:#1d4ed8;font-size:.62rem;font-weight:800;line-height:1;letter-spacing:.025em;text-transform:uppercase;white-space:nowrap;animation:pt-news-ticker-new-badge-pulse 1.5s ease-in-out infinite}.pt-news-ticker__item--flash .pt-news-ticker__new-badge{border-color:#ffffffb3;background:#fff;color:#b91c1c}.pt-news-ticker__item--danger .pt-news-ticker__new-badge{border-color:#ffffffbf;background:#fff;color:#b91c1c}.pt-news-ticker__link-icon{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;color:currentColor;font-size:.72rem;opacity:.75}.pt-news-ticker__item--link:hover .pt-news-ticker__link-icon{opacity:1}.pt-news-ticker__remove-button{flex:0 0 auto}.pt-news-ticker__item ::ng-deep .pt-news-ticker__remove-button.p-button{width:1.45rem;min-width:1.45rem;height:1.45rem;padding:0;color:currentColor}.pt-news-ticker__item ::ng-deep .pt-news-ticker__remove-button.p-button .p-button-icon{font-size:.65rem}.pt-news-ticker__item ::ng-deep .pt-news-ticker__remove-button.p-button:not(:disabled):hover{background:#0f172a1a}.pt-news-ticker__duplicate-remove-placeholder{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;width:1.45rem;min-width:1.45rem;height:1.45rem;opacity:0;pointer-events:none}.pt-news-ticker__duplicate-remove-placeholder .pi{font-size:.65rem}.pt-news-ticker__item--flash{border-color:var(--pt-news-item-border-color, #991b1b);color:var(--pt-news-flash-text-color, #ffffff);animation-name:pt-news-ticker-flash;animation-duration:var(--pt-news-flash-duration, .7s);animation-timing-function:ease-in-out;animation-iteration-count:infinite;animation-direction:alternate}.pt-news-ticker__item--flash .pt-news-ticker__item-icon{color:var(--pt-news-item-icon-color, #ffffff)}.pt-news-ticker__empty{display:flex;align-items:center;justify-content:center;gap:.5rem;width:100%;min-height:var(--pt-news-ticker-height, 3.25rem);padding:.75rem 1rem;color:#64748b;font-size:.85rem;font-weight:500;text-align:center}.pt-news-ticker__empty .pi{font-size:1rem}@keyframes pt-news-ticker-scroll{0%{transform:translateZ(0)}to{transform:translate3d(-50%,0,0)}}@keyframes pt-news-ticker-flash{0%{background-color:var(--pt-news-flash-background, #dc2626)}to{background-color:var(--pt-news-flash-alternate-background, #7f1d1d)}}@keyframes pt-news-ticker-new-badge-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.75;transform:scale(.96)}}@media(max-width:768px){.pt-news-ticker{min-height:3rem}.pt-news-ticker__controls{padding-right:.25rem;padding-left:.25rem}.pt-news-ticker__speed{display:none}.pt-news-ticker__item{max-width:34rem}.pt-news-ticker__viewport:before,.pt-news-ticker__viewport:after{width:1.25rem}}@media(max-width:480px){.pt-news-ticker__item{max-width:24rem}.pt-news-ticker__item-title,.pt-news-ticker__item-text{font-size:.78rem}.pt-news-ticker__segment{font-size:.75rem}.pt-news-ticker__new-badge{font-size:.56rem}}@media(prefers-reduced-motion:reduce){.pt-news-ticker__track{animation:none!important;transform:none!important}.pt-news-ticker__item--flash{animation:none!important;background-color:var(--pt-news-flash-background, #dc2626)!important}.pt-news-ticker__new-badge{animation:none!important}.pt-news-ticker__viewport{overflow-x:auto;contain:none}.pt-news-ticker__viewport:before,.pt-news-ticker__viewport:after{display:none}}\n"] }]
10221
10497
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.NgZone }], propDecorators: { news: [{
10222
10498
  type: Input
10223
10499
  }], speed: [{
@@ -10250,6 +10526,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
10250
10526
  type: Input
10251
10527
  }], showSpeedValue: [{
10252
10528
  type: Input
10529
+ }], showNewBadge: [{
10530
+ type: Input
10531
+ }], newBadgeText: [{
10532
+ type: Input
10533
+ }], newBadgeDuration: [{
10534
+ type: Input
10253
10535
  }], height: [{
10254
10536
  type: Input
10255
10537
  }], gap: [{
@@ -10289,6 +10571,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
10289
10571
  }], tickerViewport: [{
10290
10572
  type: ViewChild,
10291
10573
  args: ['tickerViewport', { static: false }]
10574
+ }], tickerTrack: [{
10575
+ type: ViewChild,
10576
+ args: ['tickerTrack', { static: false }]
10292
10577
  }], tickerGroup: [{
10293
10578
  type: ViewChild,
10294
10579
  args: ['tickerGroup', { static: false }]
@@ -10716,5 +11001,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
10716
11001
  * Generated bundle index. Do not edit.
10717
11002
  */
10718
11003
 
10719
- export { AlignEnum, BadgeType, BadgeTypeStyles, ButtonColorEnum, DateUtilityService, FormInputTypeEnum, InputValidationEnum, MultiSearchCriteriaComponent, MultiSearchCriteriaModule, NgPrimeToolsModule, PTAccordionComponent, PTAccordionModule, PTAccordionPanelDirective, PTAdvancedPrimeTableComponent, PTAdvancedPrimeTableModule, PTBreadCrumbComponent, PTBreadCrumbModule, PTButtonComponent, PTButtonModule, PTCardComponent, PTCardModule, PTChangePasswordPageComponent, PTChangePasswordPageModule, PTChartComparisonComponent, PTChartComparisonModule, PTChartComponent, PTChartModule, PTCheckBoxInputComponent, PTCheckBoxInputModule, PTConfirmDialogComponent, PTConfirmDialogModule, PTDateInputComponent, PTDateInputModule, PTDialogComponent, PTDialogModule, PTDropdownComponent, PTDropdownModule, PTFooterComponent, PTFooterModule, PTFormBuilderComponent, PTFormBuilderModule, PTGroupComponent, PTGroupModule, PTLineChartComponent, PTLineChartModule, PTLoginPageComponent, PTLoginPageModule, PTMenuComponent, PTMenuFancyComponent, PTMenuFancyModule, PTMenuModule, PTMetricCardComponent, PTMetricCardGroupComponent, PTMetricCardGroupModule, PTMetricCardModule, PTMetricPanelComponent, PTMetricPanelModule, PTMultiSelectComponent, PTMultiSelectModule, PTNavbarMenuComponent, PTNavbarMenuModule, PTNewsTickerComponent, PTNewsTickerDirection, PTNewsTickerModule, PTNewsTickerType, PTNumberInputComponent, PTNumberInputModule, PTOtpInputComponent, PTOtpInputModule, PTOtpPageComponent, PTOtpPageModule, PTPageSkeletonComponent, PTPageSkeletonModule, PTPasswordInputComponent, PTPasswordInputModule, PTSideBarMenuComponent, PTSideBarMenuModule, PTSwitchInputComponent, PTSwitchInputModule, PTTextAreaInputComponent, PTTextAreaInputModule, PTTextInputComponent, PTTextInputModule, PTToastNotifierComponent, PTToastNotifierModule, SearchCriteriaTypeEnum, SeverityEnum, TableTypeEnum };
11004
+ export { AlignEnum, BadgeType, BadgeTypeStyles, ButtonColorEnum, DateUtilityService, FormInputTypeEnum, InputValidationEnum, MultiSearchCriteriaComponent, MultiSearchCriteriaModule, NgPrimeToolsModule, PTAccordionComponent, PTAccordionModule, PTAccordionPanelDirective, PTAdvancedPrimeTableComponent, PTAdvancedPrimeTableModule, PTBreadCrumbComponent, PTBreadCrumbModule, PTButtonComponent, PTButtonModule, PTCardComponent, PTCardModule, PTChangePasswordPageComponent, PTChangePasswordPageModule, PTChartComparisonComponent, PTChartComparisonModule, PTChartComponent, PTChartModule, PTCheckBoxInputComponent, PTCheckBoxInputModule, PTConfirmDialogComponent, PTConfirmDialogModule, PTDateInputComponent, PTDateInputModule, PTDialogComponent, PTDialogModule, PTDropdownComponent, PTDropdownModule, PTFooterComponent, PTFooterModule, PTFormBuilderComponent, PTFormBuilderModule, PTGroupComponent, PTGroupModule, PTLineChartComponent, PTLineChartModule, PTLoginPageComponent, PTLoginPageModule, PTMenuComponent, PTMenuFancyComponent, PTMenuFancyModule, PTMenuModule, PTMetricCardComponent, PTMetricCardGroupComponent, PTMetricCardGroupModule, PTMetricCardModule, PTMetricPanelComponent, PTMetricPanelModule, PTMultiSelectComponent, PTMultiSelectModule, PTNavbarMenuComponent, PTNavbarMenuModule, PTNewsTickerComponent, PTNewsTickerDirection, PTNewsTickerModule, PTNewsTickerTrend, PTNewsTickerType, PTNumberInputComponent, PTNumberInputModule, PTOtpInputComponent, PTOtpInputModule, PTOtpPageComponent, PTOtpPageModule, PTPageSkeletonComponent, PTPageSkeletonModule, PTPasswordInputComponent, PTPasswordInputModule, PTSideBarMenuComponent, PTSideBarMenuModule, PTSwitchInputComponent, PTSwitchInputModule, PTTextAreaInputComponent, PTTextAreaInputModule, PTTextInputComponent, PTTextInputModule, PTToastNotifierComponent, PTToastNotifierModule, SearchCriteriaTypeEnum, SeverityEnum, TableTypeEnum };
10720
11005
  //# sourceMappingURL=ng-prime-tools.mjs.map