@spicainternational/ngx-sds-components 7.1.0-beta.9 → 7.2.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 (53) hide show
  1. package/esm2020/src/lib/app-switcher/app-switcher.component.mjs +48 -11
  2. package/esm2020/src/lib/app-switcher/app-switcher.module.mjs +8 -4
  3. package/esm2020/src/lib/date-picker/date-picker.component.mjs +66 -12
  4. package/esm2020/src/lib/date-picker/date-picker.module.mjs +14 -6
  5. package/esm2020/src/lib/date-pipes/date-compare.pipe.mjs +31 -0
  6. package/esm2020/src/lib/date-pipes/date-pipes.module.mjs +17 -4
  7. package/esm2020/src/lib/date-pipes/date-time-formats.constants.mjs +156 -0
  8. package/esm2020/src/lib/date-pipes/date-time-range-format.pipe.mjs +44 -0
  9. package/esm2020/src/lib/date-pipes/public-api.mjs +4 -1
  10. package/esm2020/src/lib/navigation/navigation-user-profile/components/user-profile-action-button/user-profile-action-button.component.mjs +3 -3
  11. package/esm2020/src/lib/navigation/navigation-user-profile/components/user-profile-selector/user-profile-selector.component.mjs +3 -3
  12. package/esm2020/src/lib/navigation/navigation-user-profile/components/user-profile-tile/user-profile-tile.component.mjs +3 -3
  13. package/esm2020/src/lib/navigation/navigation-user-profile/navigation-user-profile.component.mjs +6 -5
  14. package/esm2020/src/lib/navigation/product-home/product-home.component.mjs +1 -1
  15. package/esm2020/src/lib/timeline/components/timeline.component.mjs +22 -4
  16. package/esm2020/src/lib/timeline/models/timeline.model.mjs +1 -1
  17. package/esm2020/src/lib/timeline/services/timeline.service.mjs +8 -4
  18. package/esm2020/src/lib/timeline/types/timeline.types.mjs +1 -1
  19. package/fesm2015/spicainternational-ngx-sds-components-src-lib-app-switcher.mjs +57 -14
  20. package/fesm2015/spicainternational-ngx-sds-components-src-lib-app-switcher.mjs.map +1 -1
  21. package/fesm2015/spicainternational-ngx-sds-components-src-lib-date-picker.mjs +79 -17
  22. package/fesm2015/spicainternational-ngx-sds-components-src-lib-date-picker.mjs.map +1 -1
  23. package/fesm2015/spicainternational-ngx-sds-components-src-lib-date-pipes.mjs +236 -4
  24. package/fesm2015/spicainternational-ngx-sds-components-src-lib-date-pipes.mjs.map +1 -1
  25. package/fesm2015/spicainternational-ngx-sds-components-src-lib-navigation.mjs +12 -11
  26. package/fesm2015/spicainternational-ngx-sds-components-src-lib-navigation.mjs.map +1 -1
  27. package/fesm2015/spicainternational-ngx-sds-components-src-lib-timeline.mjs +28 -6
  28. package/fesm2015/spicainternational-ngx-sds-components-src-lib-timeline.mjs.map +1 -1
  29. package/fesm2020/spicainternational-ngx-sds-components-src-lib-app-switcher.mjs +54 -14
  30. package/fesm2020/spicainternational-ngx-sds-components-src-lib-app-switcher.mjs.map +1 -1
  31. package/fesm2020/spicainternational-ngx-sds-components-src-lib-date-picker.mjs +79 -17
  32. package/fesm2020/spicainternational-ngx-sds-components-src-lib-date-picker.mjs.map +1 -1
  33. package/fesm2020/spicainternational-ngx-sds-components-src-lib-date-pipes.mjs +242 -4
  34. package/fesm2020/spicainternational-ngx-sds-components-src-lib-date-pipes.mjs.map +1 -1
  35. package/fesm2020/spicainternational-ngx-sds-components-src-lib-navigation.mjs +12 -11
  36. package/fesm2020/spicainternational-ngx-sds-components-src-lib-navigation.mjs.map +1 -1
  37. package/fesm2020/spicainternational-ngx-sds-components-src-lib-timeline.mjs +28 -6
  38. package/fesm2020/spicainternational-ngx-sds-components-src-lib-timeline.mjs.map +1 -1
  39. package/package.json +1 -1
  40. package/src/lib/app-switcher/app-switcher.component.d.ts +14 -4
  41. package/src/lib/app-switcher/app-switcher.module.d.ts +5 -4
  42. package/src/lib/date-picker/date-picker.component.d.ts +27 -1
  43. package/src/lib/date-picker/date-picker.module.d.ts +6 -4
  44. package/src/lib/date-pipes/date-compare.pipe.d.ts +7 -0
  45. package/src/lib/date-pipes/date-pipes.module.d.ts +4 -2
  46. package/src/lib/date-pipes/date-time-formats.constants.d.ts +22 -0
  47. package/src/lib/date-pipes/date-time-range-format.pipe.d.ts +15 -0
  48. package/src/lib/date-pipes/public-api.d.ts +3 -0
  49. package/src/lib/navigation/navigation-user-profile/navigation-user-profile.component.d.ts +1 -1
  50. package/src/lib/timeline/components/timeline.component.d.ts +16 -2
  51. package/src/lib/timeline/models/timeline.model.d.ts +2 -0
  52. package/src/lib/timeline/services/timeline.service.d.ts +2 -2
  53. package/src/lib/timeline/types/timeline.types.d.ts +1 -0
@@ -1 +1 @@
1
- {"version":3,"file":"spicainternational-ngx-sds-components-src-lib-timeline.mjs","sources":["../../../projects/ngx-sds-components/src/lib/timeline/services/timeline.service.ts","../../../projects/ngx-sds-components/src/lib/timeline/components/timeline.component.ts","../../../projects/ngx-sds-components/src/lib/timeline/components/timeline.component.html","../../../projects/ngx-sds-components/src/lib/timeline/timeline.module.ts","../../../projects/ngx-sds-components/src/lib/timeline/spicainternational-ngx-sds-components-src-lib-timeline.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { TimelineIntervalLabel, TimelineTick } from '../models/timeline.model';\r\nimport { TimelineTickFrequency } from '../types/timeline.types';\r\n\r\nexport class SdsTimelineService {\r\n\r\n private start: Date = new Date();\r\n private end: Date = new Date();\r\n\r\n private widthPercentPerMinute: number;\r\n\r\n private hourTicks: TimelineTick[] = [];\r\n // public dayLabels: TimelineIntervalLabel[] = [];\r\n // public hourLabels: TimelineIntervalLabel[] = [];\r\n \r\n constructor(start: Date, end: Date, offSetMinutes: number) {\r\n this.start = new Date(start);\r\n this.start.setMinutes(this.start.getMinutes() - offSetMinutes);\r\n\r\n this.end = new Date(end); \r\n this.end.setMinutes(this.end.getMinutes() + offSetMinutes);\r\n\r\n this.widthPercentPerMinute = (100 / this.diffInMinutes(this.start, this.end));\r\n\r\n this.initHourTicks();\r\n //this.initDayLabels();\r\n // this.initHourLabels();\r\n }\r\n\r\n public getX(time: Date): number {\r\n return this.diffInMinutes(this.start, time) * this.widthPercentPerMinute; \r\n }\r\n\r\n public getWidthFromMinutes(minutes: number): number {\r\n return minutes * this.widthPercentPerMinute;\r\n }\r\n\r\n public getWidthFromTime(start: Date, end: Date): number {\r\n return this.getWidthFromMinutes(this.diffInMinutes(start, end));\r\n }\r\n\r\n public getTick(time: Date): TimelineTick {\r\n return {\r\n date: new Date(time),\r\n x: this.getX(time),\r\n } \r\n }\r\n \r\n public getHourTicks(frequency: TimelineTickFrequency = 'hourly'): TimelineTick[] {\r\n return this.hourTicks.filter(tick => this.isValidFrequencyHour(tick.date.getHours(), frequency));\r\n }\r\n\r\n public getHourLabels(frequency: TimelineTickFrequency = 'hourly'): TimelineIntervalLabel[] {\r\n const hourLabels: TimelineIntervalLabel[] = [];\r\n\r\n const ticks = this.hourTicks.filter(tick => this.isValidFrequencyHour(tick.date.getHours(), frequency));\r\n ticks.forEach(tick => {\r\n let labelStartTime = new Date(tick.date);\r\n hourLabels.push(\r\n {\r\n x: this.getX(labelStartTime),\r\n width: 0,\r\n label: tick.date.getHours().toString()\r\n });\r\n });\r\n return hourLabels;\r\n }\r\n\r\n public getDayLabels(locales: string | Array<string> | undefined): TimelineIntervalLabel[] {\r\n const dayLabels = [];\r\n\r\n // get start date at the beginning of the day\r\n let startDate = new Date(this.start);\r\n startDate.setHours(0, 0, 0, 0);\r\n\r\n // get end date at the end of the day\r\n let endDate = new Date(this.end);\r\n endDate.setHours(23, 59, 59, 999);\r\n\r\n let currentDate = new Date(startDate);\r\n while (currentDate <= endDate) {\r\n let endOfCurrentDay = new Date(currentDate);\r\n endOfCurrentDay.setHours(23, 59, 59, 999);\r\n\r\n dayLabels.push({\r\n // date: new Date(currentDate),\r\n x: this.getX(new Date(currentDate)),\r\n width: this.getWidthFromTime(currentDate, endOfCurrentDay),\r\n label: currentDate.toLocaleDateString(locales ?? [], { weekday: 'long', day: 'numeric', month: 'long', year: 'numeric' })\r\n });\r\n currentDate.setDate(currentDate.getDate() + 1); \r\n }\r\n return dayLabels;\r\n } \r\n\r\n //#region Private Methods\r\n\r\n private isValidFrequencyHour(hours: number, frequency: TimelineTickFrequency) {\r\n\r\n if (frequency === 'hourly') {\r\n return true; // every tick is valid\r\n } \r\n if (frequency === '2hrs') {\r\n return hours % 2 === 0;\r\n } \r\n if (frequency === '3hrs') {\r\n return hours % 3 === 0;\r\n } \r\n if (frequency === '6hrs') {\r\n return hours % 6 === 0;\r\n }\r\n return false; // unsupported frequency\r\n }\r\n\r\n private diffInMinutes(start: Date, end: Date): number {\r\n return (end.getTime() - start.getTime()) / (1000 * 60);;\r\n }\r\n\r\n private roundHoursUp(time: Date): Date {\r\n \r\n let newTime = new Date(time);\r\n \r\n if (newTime.getMinutes() > 0 || newTime.getSeconds() > 0 || newTime.getMilliseconds() > 0) {\r\n newTime.setHours(newTime.getHours() + 1);\r\n }\r\n newTime.setMinutes(0, 0, 0);\r\n return newTime;\r\n }\r\n\r\n\r\n private roundHoursDown(time: Date) {\r\n let newTime = new Date(time);\r\n newTime.setMinutes(0, 0, 0);\r\n return newTime;\r\n }\r\n \r\n\r\n private initHourTicks(): void {\r\n this.hourTicks = [];\r\n\r\n // get first whole hour from start date\r\n let startHour = this.roundHoursUp(this.start);\r\n\r\n // get last whole hour from end date\r\n let endHour = this.roundHoursDown(this.end);\r\n\r\n let currentHour = new Date(startHour)\r\n while (currentHour <= endHour) {\r\n this.hourTicks.push(this.getTick(currentHour));\r\n currentHour.setHours(currentHour.getHours() + 1);\r\n }\r\n }\r\n \r\n //#endregion\r\n\r\n}\r\n","import {\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n HostListener,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Output,\r\n SimpleChanges,\r\n TemplateRef,\r\n ViewChild,\r\n EventEmitter\r\n} from '@angular/core';\r\nimport { TimelineTickFrequency } from '../types/timeline.types';\r\nimport { SdsTimelineService } from '../services/timeline.service';\r\nimport {\r\n TimelineIntervalLabel,\r\n TimelineItem,\r\n TimelineItemPresentation,\r\n TimelinePointInTimeItem,\r\n TimelinePointInTimeItemPresentation,\r\n TimelineTick,\r\n} from '../models/timeline.model';\r\n\r\n@Component({\r\n selector: 'sds-timeline',\r\n templateUrl: './timeline.component.html',\r\n styleUrls: ['./timeline.component.scss'],\r\n})\r\nexport class SdsTimelineComponent implements OnInit, OnChanges, AfterViewInit {\r\n /**\r\n * The start date and time for the timeline.\r\n *\r\n * @type {Date}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() start: Date = new Date();\r\n\r\n /**\r\n * The end date and time for the timeline.\r\n *\r\n * @type {Date}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() end: Date = new Date();\r\n\r\n /**\r\n * The period based items to be displayed on the timeline. Specify data if you need \r\n * additional data for custom rendering of the items.\r\n *\r\n * @type {TimelineItem[]}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() items: TimelineItem[] = [];\r\n\r\n /**\r\n * Items to be displayed on the timeline at a specific point in time.\r\n * Specify data if you need additional data for custom rendering of the items.\r\n *\r\n * @type {TimelinePointInTimeItem[]}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() pointInTimeItems: TimelinePointInTimeItem[] = [];\r\n\r\n /**\r\n * The template to be used for custom rendering of the items.\r\n *\r\n * @type {(TemplateRef<any> | undefined)}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() itemTemplate: TemplateRef<any> | undefined = undefined;\r\n\r\n /**\r\n * The template to be used for custom rendering of the poin-in-time items.\r\n *\r\n * @type {(TemplateRef<any> | undefined)}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() pointInTimeTemplate: TemplateRef<any> | undefined = undefined;\r\n\r\n\r\n /**\r\n * The frequency of the ticks on the timeline.\r\n *\r\n * @type {TimelineTickFrequency}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() tickFrequency: TimelineTickFrequency = 'hourly';\r\n\r\n /**\r\n * The frequency of the hour labels on the timeline.\r\n *\r\n * @type {TimelineTickFrequency}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() hourLabelFrequency: TimelineTickFrequency = '3hrs';\r\n\r\n\r\n /**\r\n * The current zoom level of the timeline. In percent.\r\n *\r\n * @type {number}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() zoomPercent: number = 100;\r\n @Output() zoomPercentChange = new EventEmitter<number>();\r\n\r\n /**\r\n * Initial offset of the viewport in percent. This is used in scenarios \r\n * with multiple days when you want to show non-first day as defult.\r\n *\r\n * @type {number}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() viewOffsetPercent: number = 0;\r\n @Output() viewOffsetPercentChange = new EventEmitter<number>();\r\n\r\n /**\r\n * The maximum allowed zoom level of the timeline. In percent.\r\n *\r\n * @type {number}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() maxZoomPercent: number = 500;\r\n\r\n /**\r\n * Whether to show hour labels.\r\n *\r\n * @type {boolean}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() showHourLabels: boolean = true;\r\n\r\n /**\r\n * The CSS class to be applied to the hour labels.\r\n *\r\n * @type {string}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() hourLabelClass?: string;\r\n\r\n /**\r\n * Whether to show day labels. \r\n *\r\n * @type {boolean}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() showDayLabels: boolean = false;\r\n\r\n /**\r\n * The CSS class to be applied to the day labels.\r\n *\r\n * @type {string}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() dayLabelClass?: string;\r\n\r\n /**\r\n * Whether to show timeline. Useful for hiding the timeline when we only need header.\r\n *\r\n * @type {boolean}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() showTimeline: boolean = true; \r\n\r\n /**\r\n * The CSS class to be applied to the hour ticks.\r\n *\r\n * @type {string}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() hourTickClass?: string;\r\n\r\n /**\r\n * The height of the timeline. Default is 2rem.\r\n *\r\n * @type {string}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() timelineHeight: string = '2rem';\r\n\r\n /**\r\n * Whether to enable zoom and drag functionality.\r\n *\r\n * @type {boolean}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() enableZoomAndDrag: boolean = true;\r\n\r\n /**\r\n * Number of minutes added to start and stop to fit the data on the edges\r\n *\r\n * @type {number}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() offSetMinutes: number = 15;\r\n\r\n /**\r\n * The locales to be used for formatting the timeline.\r\n *\r\n * @type {(string | Array<string>)}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() locales?: string | Array<string>;\r\n\r\n // protected\r\n hourTicks: TimelineTick[] = [];\r\n hourLabels: TimelineIntervalLabel[] = [];\r\n dayLabels: TimelineIntervalLabel[] = [];\r\n\r\n private _timelineService: SdsTimelineService = new SdsTimelineService(\r\n this.start,\r\n this.end,\r\n this.offSetMinutes\r\n );\r\n\r\n public presentationItems: TimelineItemPresentation[] = [];\r\n public presentationPointInTimeItems: TimelinePointInTimeItemPresentation[] = [];\r\n\r\n public isDragging = false;\r\n public initialDragX = 0;\r\n\r\n private viewOffsetPercentDragStart = 0;\r\n\r\n @ViewChild('viewport', { static: true }) _viewport: ElementRef | undefined;\r\n\r\n constructor() {}\r\n\r\n ngAfterViewInit(): void {\r\n this.generateTicks();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (this.start && this.end) {\r\n this._timelineService = new SdsTimelineService(\r\n this.start,\r\n this.end,\r\n this.offSetMinutes\r\n );\r\n this.generateTicks();\r\n this.generateInternalTimelineItems();\r\n }\r\n\r\n if (changes['start'] || changes['end'] || changes['offSetMinutes']) {\r\n this._timelineService = new SdsTimelineService(\r\n this.start,\r\n this.end,\r\n this.offSetMinutes\r\n );\r\n this.generateTicks();\r\n this.generateInternalTimelineItems(); \r\n }\r\n\r\n if (changes['items']) {\r\n this.generateInternalTimelineItems();\r\n }\r\n\r\n if (changes['pointInTimeItems']) {\r\n this.generateInternalTimelinePointInTimeItems();\r\n }\r\n\r\n if (changes['zoomPercent']) {\r\n // this.viewOffsetPercent = (this.zoomPercent - 100) / -2;\r\n }\r\n\r\n if (changes['showDayLabels'] || changes['showHourLabels']) {\r\n this.generateTicks();\r\n } \r\n }\r\n\r\n ngOnInit(): void {}\r\n\r\n //#region mouse wheel zoom\r\n onScroll(event: WheelEvent): void {\r\n if (this.enableZoomAndDrag) {\r\n\r\n event.preventDefault();\r\n\r\n const delta = Math.sign(event.deltaY);\r\n const newZoomPercent = Math.min(\r\n Math.max(this.zoomPercent + -delta * 20, 100),\r\n this.maxZoomPercent\r\n );\r\n const deltaZoomPercent = newZoomPercent - this.zoomPercent;\r\n this.zoomPercent = newZoomPercent;\r\n this.zoomPercentChange.emit(this.zoomPercent);\r\n \r\n // get the relative position of the cursor on the viewport so we can zoom in into this position\r\n const x = event.clientX - this._viewport?.nativeElement.getBoundingClientRect().left;\r\n const cursorRelativePosition = x / this._viewport?.nativeElement.getBoundingClientRect().width;\r\n // this.viewOffsetPercent = this.viewOffsetPercent - deltaZoomPercent * cursorRelativePosition;\r\n\r\n this.constrainOffset(this.viewOffsetPercent - deltaZoomPercent * cursorRelativePosition);\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region dragging\r\n \r\n public onDragStart(event: MouseEvent | TouchEvent): void {\r\n if (this.enableZoomAndDrag && this.zoomPercent > 100) {\r\n event.preventDefault();\r\n this.isDragging = true;\r\n this.viewOffsetPercentDragStart = this.viewOffsetPercent;\r\n\r\n if (event instanceof MouseEvent) {\r\n this.initialDragX = event.clientX;\r\n } else if (event instanceof TouchEvent) {\r\n this.initialDragX = event.touches[0].clientX;\r\n }\r\n }\r\n }\r\n\r\n @HostListener('window:mousemove', ['$event'])\r\n public onDragMove(event: MouseEvent): void {\r\n if (this.enableZoomAndDrag) {\r\n if (this.isDragging) {\r\n const currentX = event.clientX;\r\n this.moveElement(currentX);\r\n }\r\n }\r\n }\r\n\r\n @HostListener('window:touchmove', ['$event'])\r\n onDragMoveTouch(event: TouchEvent): void {\r\n if (this.enableZoomAndDrag) {\r\n if (this.isDragging) {\r\n const currentX = event.touches[0].clientX;\r\n this.moveElement(currentX);\r\n }\r\n }\r\n }\r\n\r\n @HostListener('window:mouseup', ['$event'])\r\n @HostListener('window:touchend', ['$event'])\r\n public onDragEnd(event: MouseEvent | TouchEvent): void {\r\n if (this.enableZoomAndDrag) {\r\n this.isDragging = false;\r\n }\r\n }\r\n\r\n private moveElement(currentX: number): void {\r\n const diff = currentX - this.initialDragX;\r\n if (this._viewport && this._viewport.nativeElement) {\r\n const diffInPercent = (diff / this._viewport?.nativeElement.getBoundingClientRect().width) * 100;\r\n // this.viewOffsetPercent = this.viewOffsetPercentDragStart + diffInPercent;\r\n this.constrainOffset(this.viewOffsetPercentDragStart + diffInPercent);\r\n }\r\n }\r\n\r\n //#endregion\r\n\r\n private constrainOffset(newOffset: number): void { \r\n if (this.zoomPercent + newOffset < 100) {\r\n newOffset = -this.zoomPercent + 100;\r\n }\r\n newOffset = Math.min(0, newOffset);\r\n if (newOffset != this.viewOffsetPercent) {\r\n this.viewOffsetPercent = newOffset;\r\n this.viewOffsetPercentChange.emit(this.viewOffsetPercent);\r\n }\r\n }\r\n\r\n private generateTicks(): void {\r\n this.hourTicks = this._timelineService.getHourTicks(this.tickFrequency);\r\n this.dayLabels = this._timelineService.getDayLabels(this.locales);\r\n this.hourLabels = this._timelineService.getHourLabels(this.hourLabelFrequency);\r\n }\r\n\r\n private generateInternalTimelineItems(): void {\r\n this.presentationItems = this.items.map((item) => {\r\n\r\n const startTime = new Date(item.start).toLocaleTimeString(this.locales?? [], { hour: 'numeric', minute: '2-digit' });\r\n const endTime = new Date(item.end).toLocaleTimeString(this.locales?? [], { hour: 'numeric', minute: '2-digit' });\r\n const timeRange = `${startTime} - ${endTime}`;\r\n \r\n return {\r\n data: item.data,\r\n x: this._timelineService.getX(item.start),\r\n width: this._timelineService.getWidthFromTime(\r\n item.start,\r\n item.end\r\n ),\r\n hint: item.hint ?? timeRange,\r\n backgroundColor: item.backgroundColor,\r\n top: item.top ?? '50%',\r\n height: item.height ?? '60%',\r\n class: item.class,\r\n };\r\n });\r\n }\r\n\r\n\r\n private generateInternalTimelinePointInTimeItems(): void {\r\n this.presentationPointInTimeItems = this.pointInTimeItems.map((item) => {\r\n\r\n const timePointString = new Date(item.date).toLocaleTimeString(this.locales?? [], { hour: 'numeric', minute: '2-digit' });\r\n\r\n return {\r\n data: item.data,\r\n x: this._timelineService.getX(item.date),\r\n hint: item.hint ?? timePointString,\r\n top: item.top ?? '20%',\r\n height: item.height ?? '1rem',\r\n width: item.width ?? '1rem',\r\n class: item.class,\r\n backgroundColor: item.backgroundColor,\r\n };\r\n });\r\n }\r\n}\r\n","<ng-template #defaultItemTemplate let-item=\"item\">\r\n <div \r\n class=\"sds-timeline-item h-100\"\r\n [title]=\"item.hint\"\r\n >\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #defaultPointInTimeItemTemplate let-item=\"item\">\r\n <div \r\n class=\"sds-timeline-item h-100\"\r\n [title]=\"item.hint\"\r\n >\r\n </div>\r\n</ng-template>\r\n\r\n<div \r\n #viewport\r\n class=\"sds-timeline-viewport\"\r\n (wheel)=\"onScroll($event)\"\r\n\r\n (mousedown)=\"onDragStart($event)\"\r\n (touchstart)=\"onDragStart($event)\"\r\n >\r\n\r\n <div \r\n class=\"sds-timeline-container d-flex flex-column\"\r\n [style.left.%]=\"viewOffsetPercent\"\r\n [style.width.%]=\"zoomPercent\"\r\n [style.cursor]=\"isDragging ? 'ew-resize' : 'default'\"\r\n >\r\n\r\n <div\r\n *ngIf=\"showDayLabels\" \r\n class=\"sds-timeline-day-header\">\r\n\r\n <div \r\n *ngFor=\"let label of dayLabels\"\r\n class=\"sds-day-label\" \r\n [ngClass]=\"dayLabelClass ?? null\"\r\n [style.left.%]=\"label.x\"\r\n [style.width.%]=\"label.width\"\r\n >\r\n {{label.label}}\r\n </div>\r\n </div>\r\n\r\n <div \r\n *ngIf=\"showHourLabels\" \r\n class=\"sds-timeline-hour-header\">\r\n\r\n <div \r\n *ngFor=\"let label of hourLabels;\"\r\n class=\"sds-hour-label\" \r\n [ngClass]=\"hourLabelClass ?? null\"\r\n [style.left.%]=\"label.x\"\r\n [style.width.rem]=\"1.2\"\r\n [ngStyle]=\"{'left': 'calc(' + label.x + '% - 0.6rem)'}\"\r\n >\r\n \r\n {{label.label}}\r\n \r\n </div>\r\n </div>\r\n\r\n <div \r\n *ngIf=\"showTimeline\"\r\n class=\"sds-timeline flex-grow-1\"\r\n [style.height]=\"timelineHeight\"\r\n >\r\n\r\n <div \r\n *ngFor=\"let tick of hourTicks\"\r\n class=\"sds-timeline-tick\" \r\n [ngClass]=\"hourTickClass ?? null\"\t\r\n [ngStyle]=\"tick.x == 100 ? {'left': 'calc(' + tick.x +'% - 1px)'} : {'left': 'calc(' + tick.x + '% - 0.5px)'}\"\r\n >\r\n </div>\r\n\r\n <div \r\n *ngFor=\"let item of presentationItems\"\r\n class=\"sds-timeline-item-container\"\r\n [ngClass]=\"item.class ?? null\"\r\n [ngStyle]=\"{\r\n 'width': 'max(' + item.width +'%, 1px)',\r\n 'top': 'calc(' + item.top + ' - max(calc(' + item.height +'/2), 1px))', \r\n }\"\r\n\r\n [style.left.%]=\"item.x\"\r\n [style.height]=\"item.height\"\r\n [style.backgroundColor]=\"item.backgroundColor\"\r\n >\r\n\r\n <ng-container \r\n [ngTemplateOutlet]=\"itemTemplate ? itemTemplate : defaultItemTemplate\"\r\n [ngTemplateOutletContext]=\"{item: item}\">\r\n </ng-container> \r\n </div>\r\n\r\n\r\n <div *ngFor=\"let item of presentationPointInTimeItems\"\r\n class=\"sds-timeline-point-in-time-item-container\"\r\n [ngClass]=\"item.class\"\t\r\n [style.height]=\"item.height\"\r\n [style.width]=\"item.width\"\r\n [ngStyle]=\"{\r\n 'top': 'calc(' + item.top + ' - max(calc(' + item.height +'/2), 1px))', \r\n 'left': 'calc(' + item.x + '% - max( calc(' + item.width +'/2), 1px))',\r\n \r\n }\"\r\n [style.backgroundColor]=\"item.backgroundColor\"\r\n >\r\n\r\n <ng-container \r\n [ngTemplateOutlet]=\"pointInTimeTemplate ? pointInTimeTemplate : defaultPointInTimeItemTemplate\"\r\n [ngTemplateOutletContext]=\"{item: item}\">\r\n </ng-container> \r\n\r\n </div>\r\n\r\n </div>\r\n </div>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SdsTimelineComponent } from './components/timeline.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n SdsTimelineComponent\r\n ],\r\n imports: [\r\n CommonModule\r\n ],\r\n exports: [\r\n SdsTimelineComponent\r\n ],\r\n})\r\nexport class SdsTimelineModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spicainternational-ngx-sds-components-src-lib-timeline.mjs","sources":["../../../projects/ngx-sds-components/src/lib/timeline/services/timeline.service.ts","../../../projects/ngx-sds-components/src/lib/timeline/components/timeline.component.ts","../../../projects/ngx-sds-components/src/lib/timeline/components/timeline.component.html","../../../projects/ngx-sds-components/src/lib/timeline/timeline.module.ts","../../../projects/ngx-sds-components/src/lib/timeline/spicainternational-ngx-sds-components-src-lib-timeline.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { TimelineIntervalLabel, TimelineTick } from '../models/timeline.model';\r\nimport { TimelineCustomDateDataProvider, TimelineTickFrequency } from '../types/timeline.types';\r\n\r\nexport class SdsTimelineService {\r\n\r\n private start: Date = new Date();\r\n private end: Date = new Date();\r\n\r\n private widthPercentPerMinute: number;\r\n\r\n private hourTicks: TimelineTick[] = [];\r\n // public dayLabels: TimelineIntervalLabel[] = [];\r\n // public hourLabels: TimelineIntervalLabel[] = [];\r\n \r\n constructor(start: Date, end: Date, offSetMinutes: number) {\r\n this.start = new Date(start);\r\n this.start.setMinutes(this.start.getMinutes() - offSetMinutes);\r\n\r\n this.end = new Date(end); \r\n this.end.setMinutes(this.end.getMinutes() + offSetMinutes);\r\n\r\n this.widthPercentPerMinute = (100 / this.diffInMinutes(this.start, this.end));\r\n\r\n this.initHourTicks();\r\n //this.initDayLabels();\r\n // this.initHourLabels();\r\n }\r\n\r\n public getX(time: Date): number {\r\n return this.diffInMinutes(this.start, time) * this.widthPercentPerMinute; \r\n }\r\n\r\n public getWidthFromMinutes(minutes: number): number {\r\n return minutes * this.widthPercentPerMinute;\r\n }\r\n\r\n public getWidthFromTime(start: Date, end: Date): number {\r\n return this.getWidthFromMinutes(this.diffInMinutes(start, end));\r\n }\r\n\r\n public getTick(time: Date): TimelineTick {\r\n return {\r\n date: new Date(time),\r\n x: this.getX(time),\r\n } \r\n }\r\n \r\n public getHourTicks(frequency: TimelineTickFrequency = 'hourly'): TimelineTick[] {\r\n return this.hourTicks.filter(tick => this.isValidFrequencyHour(tick.date.getHours(), frequency));\r\n }\r\n\r\n public getHourLabels(frequency: TimelineTickFrequency = 'hourly'): TimelineIntervalLabel[] {\r\n const hourLabels: TimelineIntervalLabel[] = [];\r\n\r\n const ticks = this.hourTicks.filter(tick => this.isValidFrequencyHour(tick.date.getHours(), frequency));\r\n ticks.forEach(tick => {\r\n let labelStartTime = new Date(tick.date);\r\n hourLabels.push(\r\n {\r\n x: this.getX(labelStartTime),\r\n width: 0,\r\n label: tick.date.getHours().toString(),\r\n date: new Date(labelStartTime),\r\n data: null\r\n });\r\n });\r\n return hourLabels;\r\n }\r\n\r\n public getDayLabels(\r\n locales: string | Array<string> | undefined, \r\n customDataFn: TimelineCustomDateDataProvider | undefined): TimelineIntervalLabel[] {\r\n const dayLabels = [];\r\n\r\n // get start date at the beginning of the day\r\n let startDate = new Date(this.start);\r\n startDate.setHours(0, 0, 0, 0);\r\n\r\n // get end date at the end of the day\r\n let endDate = new Date(this.end);\r\n endDate.setHours(23, 59, 59, 999);\r\n\r\n let currentDate = new Date(startDate);\r\n while (currentDate <= endDate) {\r\n let endOfCurrentDay = new Date(currentDate);\r\n endOfCurrentDay.setHours(23, 59, 59, 999);\r\n\r\n dayLabels.push({\r\n // date: new Date(currentDate),\r\n x: this.getX(new Date(currentDate)),\r\n width: this.getWidthFromTime(currentDate, endOfCurrentDay),\r\n label: currentDate.toLocaleDateString(locales ?? [], { weekday: 'long', day: 'numeric', month: 'long', year: 'numeric' }),\r\n date: new Date(currentDate),\r\n data: customDataFn ? customDataFn(new Date(currentDate)) : null\r\n });\r\n currentDate.setDate(currentDate.getDate() + 1); \r\n }\r\n return dayLabels;\r\n } \r\n\r\n //#region Private Methods\r\n\r\n private isValidFrequencyHour(hours: number, frequency: TimelineTickFrequency) {\r\n\r\n if (frequency === 'hourly') {\r\n return true; // every tick is valid\r\n } \r\n if (frequency === '2hrs') {\r\n return hours % 2 === 0;\r\n } \r\n if (frequency === '3hrs') {\r\n return hours % 3 === 0;\r\n } \r\n if (frequency === '6hrs') {\r\n return hours % 6 === 0;\r\n }\r\n return false; // unsupported frequency\r\n }\r\n\r\n private diffInMinutes(start: Date, end: Date): number {\r\n return (end.getTime() - start.getTime()) / (1000 * 60);;\r\n }\r\n\r\n private roundHoursUp(time: Date): Date {\r\n \r\n let newTime = new Date(time);\r\n \r\n if (newTime.getMinutes() > 0 || newTime.getSeconds() > 0 || newTime.getMilliseconds() > 0) {\r\n newTime.setHours(newTime.getHours() + 1);\r\n }\r\n newTime.setMinutes(0, 0, 0);\r\n return newTime;\r\n }\r\n\r\n\r\n private roundHoursDown(time: Date) {\r\n let newTime = new Date(time);\r\n newTime.setMinutes(0, 0, 0);\r\n return newTime;\r\n }\r\n \r\n\r\n private initHourTicks(): void {\r\n this.hourTicks = [];\r\n\r\n // get first whole hour from start date\r\n let startHour = this.roundHoursUp(this.start);\r\n\r\n // get last whole hour from end date\r\n let endHour = this.roundHoursDown(this.end);\r\n\r\n let currentHour = new Date(startHour)\r\n while (currentHour <= endHour) {\r\n this.hourTicks.push(this.getTick(currentHour));\r\n currentHour.setHours(currentHour.getHours() + 1);\r\n }\r\n }\r\n \r\n //#endregion\r\n\r\n}\r\n","import {\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n HostListener,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Output,\r\n SimpleChanges,\r\n TemplateRef,\r\n ViewChild,\r\n EventEmitter\r\n} from '@angular/core';\r\nimport { TimelineCustomDateDataProvider, TimelineTickFrequency } from '../types/timeline.types';\r\nimport { SdsTimelineService } from '../services/timeline.service';\r\nimport {\r\n TimelineIntervalLabel,\r\n TimelineItem,\r\n TimelineItemPresentation,\r\n TimelinePointInTimeItem,\r\n TimelinePointInTimeItemPresentation,\r\n TimelineTick,\r\n} from '../models/timeline.model';\r\n\r\n@Component({\r\n selector: 'sds-timeline',\r\n templateUrl: './timeline.component.html',\r\n styleUrls: ['./timeline.component.scss'],\r\n})\r\nexport class SdsTimelineComponent implements OnInit, OnChanges, AfterViewInit {\r\n /**\r\n * The start date and time for the timeline.\r\n *\r\n * @type {Date}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() start: Date = new Date();\r\n\r\n /**\r\n * The end date and time for the timeline.\r\n *\r\n * @type {Date}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() end: Date = new Date();\r\n\r\n /**\r\n * The period based items to be displayed on the timeline. Specify data if you need \r\n * additional data for custom rendering of the items.\r\n *\r\n * @type {TimelineItem[]}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() items: TimelineItem[] = [];\r\n\r\n /**\r\n * Items to be displayed on the timeline at a specific point in time.\r\n * Specify data if you need additional data for custom rendering of the items.\r\n *\r\n * @type {TimelinePointInTimeItem[]}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() pointInTimeItems: TimelinePointInTimeItem[] = [];\r\n\r\n /**\r\n * The template to be used for custom rendering of the items.\r\n *\r\n * @type {(TemplateRef<any> | undefined)}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() itemTemplate: TemplateRef<any> | undefined = undefined;\r\n\r\n /**\r\n * The template to be used for custom rendering of the poin-in-time items.\r\n *\r\n * @type {(TemplateRef<any> | undefined)}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() pointInTimeTemplate: TemplateRef<any> | undefined = undefined;\r\n\r\n /**\r\n * The template to be used for custom rendering of the day labels.\r\n *\r\n * @type {(TemplateRef<any> | undefined)}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() dayLabelTemplate: TemplateRef<any> | undefined = undefined;\r\n \r\n /**\r\n * A custom data function for the day labels. \r\n * This function takes a Date object as input and returns any custom data that will be available for the custom template\r\n *\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() dayLabelCustomDataFn: TimelineCustomDateDataProvider | undefined = undefined;\r\n\r\n /**\r\n * The frequency of the ticks on the timeline.\r\n *\r\n * @type {TimelineTickFrequency}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() tickFrequency: TimelineTickFrequency = 'hourly';\r\n\r\n /**\r\n * The frequency of the hour labels on the timeline.\r\n *\r\n * @type {TimelineTickFrequency}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() hourLabelFrequency: TimelineTickFrequency = '3hrs';\r\n\r\n\r\n /**\r\n * The current zoom level of the timeline. In percent.\r\n *\r\n * @type {number}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() zoomPercent: number = 100;\r\n @Output() zoomPercentChange = new EventEmitter<number>();\r\n\r\n /**\r\n * Initial offset of the viewport in percent. This is used in scenarios \r\n * with multiple days when you want to show non-first day as defult.\r\n *\r\n * @type {number}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() viewOffsetPercent: number = 0;\r\n @Output() viewOffsetPercentChange = new EventEmitter<number>();\r\n\r\n /**\r\n * The maximum allowed zoom level of the timeline. In percent.\r\n *\r\n * @type {number}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() maxZoomPercent: number = 500;\r\n\r\n /**\r\n * Whether to show hour labels.\r\n *\r\n * @type {boolean}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() showHourLabels: boolean = true;\r\n\r\n /**\r\n * The CSS class to be applied to the hour labels.\r\n *\r\n * @type {string}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() hourLabelClass?: string;\r\n\r\n /**\r\n * Whether to show day labels. \r\n *\r\n * @type {boolean}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() showDayLabels: boolean = false;\r\n\r\n /**\r\n * The CSS class to be applied to the day labels.\r\n *\r\n * @type {string}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() dayLabelClass?: string;\r\n\r\n /**\r\n * Whether to show timeline. Useful for hiding the timeline when we only need header.\r\n *\r\n * @type {boolean}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() showTimeline: boolean = true; \r\n\r\n /**\r\n * The CSS class to be applied to the hour ticks.\r\n *\r\n * @type {string}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() hourTickClass?: string;\r\n\r\n /**\r\n * The height of the timeline. Default is 2rem.\r\n *\r\n * @type {string}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() timelineHeight: string = '2rem';\r\n\r\n /**\r\n * Whether to enable zoom and drag functionality.\r\n *\r\n * @type {boolean}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() enableZoomAndDrag: boolean = true;\r\n\r\n /**\r\n * Number of minutes added to start and stop to fit the data on the edges\r\n *\r\n * @type {number}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() offSetMinutes: number = 15;\r\n\r\n /**\r\n * The locales to be used for formatting the timeline.\r\n *\r\n * @type {(string | Array<string>)}\r\n * @memberof SdsTimelineComponent\r\n */\r\n @Input() locales?: string | Array<string>;\r\n\r\n // protected\r\n hourTicks: TimelineTick[] = [];\r\n hourLabels: TimelineIntervalLabel[] = [];\r\n dayLabels: TimelineIntervalLabel[] = [];\r\n\r\n private _timelineService: SdsTimelineService = new SdsTimelineService(\r\n this.start,\r\n this.end,\r\n this.offSetMinutes\r\n );\r\n\r\n public presentationItems: TimelineItemPresentation[] = [];\r\n public presentationPointInTimeItems: TimelinePointInTimeItemPresentation[] = [];\r\n\r\n public isDragging = false;\r\n public initialDragX = 0;\r\n\r\n private viewOffsetPercentDragStart = 0;\r\n\r\n @ViewChild('viewport', { static: true }) _viewport: ElementRef | undefined;\r\n\r\n constructor() {}\r\n\r\n ngAfterViewInit(): void {\r\n this.generateTicks();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (this.start && this.end) {\r\n this._timelineService = new SdsTimelineService(\r\n this.start,\r\n this.end,\r\n this.offSetMinutes\r\n );\r\n this.generateTicks();\r\n this.generateInternalTimelineItems();\r\n }\r\n\r\n if (changes['start'] || changes['end'] || changes['offSetMinutes']) {\r\n this._timelineService = new SdsTimelineService(\r\n this.start,\r\n this.end,\r\n this.offSetMinutes\r\n );\r\n this.generateTicks();\r\n this.generateInternalTimelineItems(); \r\n }\r\n\r\n if (changes['items']) {\r\n this.generateInternalTimelineItems();\r\n }\r\n\r\n if (changes['pointInTimeItems']) {\r\n this.generateInternalTimelinePointInTimeItems();\r\n }\r\n\r\n if (changes['zoomPercent']) {\r\n // this.viewOffsetPercent = (this.zoomPercent - 100) / -2;\r\n }\r\n\r\n if (changes['showDayLabels'] || changes['showHourLabels']) {\r\n this.generateTicks();\r\n } \r\n }\r\n\r\n ngOnInit(): void {}\r\n\r\n //#region mouse wheel zoom\r\n onScroll(event: WheelEvent): void {\r\n if (this.enableZoomAndDrag) {\r\n\r\n event.preventDefault();\r\n\r\n const delta = Math.sign(event.deltaY);\r\n const newZoomPercent = Math.min(\r\n Math.max(this.zoomPercent + -delta * 20, 100),\r\n this.maxZoomPercent\r\n );\r\n const deltaZoomPercent = newZoomPercent - this.zoomPercent;\r\n this.zoomPercent = newZoomPercent;\r\n this.zoomPercentChange.emit(this.zoomPercent);\r\n \r\n // get the relative position of the cursor on the viewport so we can zoom in into this position\r\n const x = event.clientX - this._viewport?.nativeElement.getBoundingClientRect().left;\r\n const cursorRelativePosition = x / this._viewport?.nativeElement.getBoundingClientRect().width;\r\n // this.viewOffsetPercent = this.viewOffsetPercent - deltaZoomPercent * cursorRelativePosition;\r\n\r\n this.constrainOffset(this.viewOffsetPercent - deltaZoomPercent * cursorRelativePosition);\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region dragging\r\n \r\n public onDragStart(event: MouseEvent | TouchEvent): void {\r\n if (this.enableZoomAndDrag && this.zoomPercent > 100) {\r\n event.preventDefault();\r\n this.isDragging = true;\r\n this.viewOffsetPercentDragStart = this.viewOffsetPercent;\r\n\r\n if (event instanceof MouseEvent) {\r\n this.initialDragX = event.clientX;\r\n } else if (event instanceof TouchEvent) {\r\n this.initialDragX = event.touches[0].clientX;\r\n }\r\n }\r\n }\r\n\r\n @HostListener('window:mousemove', ['$event'])\r\n public onDragMove(event: MouseEvent): void {\r\n if (this.enableZoomAndDrag) {\r\n if (this.isDragging) {\r\n const currentX = event.clientX;\r\n this.moveElement(currentX);\r\n }\r\n }\r\n }\r\n\r\n @HostListener('window:touchmove', ['$event'])\r\n onDragMoveTouch(event: TouchEvent): void {\r\n if (this.enableZoomAndDrag) {\r\n if (this.isDragging) {\r\n const currentX = event.touches[0].clientX;\r\n this.moveElement(currentX);\r\n }\r\n }\r\n }\r\n\r\n @HostListener('window:mouseup', ['$event'])\r\n @HostListener('window:touchend', ['$event'])\r\n public onDragEnd(event: MouseEvent | TouchEvent): void {\r\n if (this.enableZoomAndDrag) {\r\n this.isDragging = false;\r\n }\r\n }\r\n\r\n private moveElement(currentX: number): void {\r\n const diff = currentX - this.initialDragX;\r\n if (this._viewport && this._viewport.nativeElement) {\r\n const diffInPercent = (diff / this._viewport?.nativeElement.getBoundingClientRect().width) * 100;\r\n // this.viewOffsetPercent = this.viewOffsetPercentDragStart + diffInPercent;\r\n this.constrainOffset(this.viewOffsetPercentDragStart + diffInPercent);\r\n }\r\n }\r\n\r\n //#endregion\r\n\r\n private constrainOffset(newOffset: number): void { \r\n if (this.zoomPercent + newOffset < 100) {\r\n newOffset = -this.zoomPercent + 100;\r\n }\r\n newOffset = Math.min(0, newOffset);\r\n if (newOffset != this.viewOffsetPercent) {\r\n this.viewOffsetPercent = newOffset;\r\n this.viewOffsetPercentChange.emit(this.viewOffsetPercent);\r\n }\r\n }\r\n\r\n private generateTicks(): void {\r\n this.hourTicks = this._timelineService.getHourTicks(this.tickFrequency);\r\n this.dayLabels = this._timelineService.getDayLabels(this.locales, this.dayLabelCustomDataFn);\r\n this.hourLabels = this._timelineService.getHourLabels(this.hourLabelFrequency);\r\n }\r\n\r\n private generateInternalTimelineItems(): void {\r\n this.presentationItems = this.items.map((item) => {\r\n\r\n const startTime = new Date(item.start).toLocaleTimeString(this.locales?? [], { hour: 'numeric', minute: '2-digit' });\r\n const endTime = new Date(item.end).toLocaleTimeString(this.locales?? [], { hour: 'numeric', minute: '2-digit' });\r\n const timeRange = `${startTime} - ${endTime}`;\r\n \r\n return {\r\n data: item.data,\r\n x: this._timelineService.getX(item.start),\r\n width: this._timelineService.getWidthFromTime(\r\n item.start,\r\n item.end\r\n ),\r\n hint: item.hint ?? timeRange,\r\n backgroundColor: item.backgroundColor,\r\n top: item.top ?? '50%',\r\n height: item.height ?? '60%',\r\n class: item.class,\r\n };\r\n });\r\n }\r\n\r\n\r\n private generateInternalTimelinePointInTimeItems(): void {\r\n this.presentationPointInTimeItems = this.pointInTimeItems.map((item) => {\r\n\r\n const timePointString = new Date(item.date).toLocaleTimeString(this.locales?? [], { hour: 'numeric', minute: '2-digit' });\r\n\r\n return {\r\n data: item.data,\r\n x: this._timelineService.getX(item.date),\r\n hint: item.hint ?? timePointString,\r\n top: item.top ?? '20%',\r\n height: item.height ?? '1rem',\r\n width: item.width ?? '1rem',\r\n class: item.class,\r\n backgroundColor: item.backgroundColor,\r\n };\r\n });\r\n }\r\n}\r\n","<ng-template #defaultItemTemplate let-item=\"item\">\r\n <div \r\n class=\"sds-timeline-item h-100\"\r\n [title]=\"item.hint\"\r\n >\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #defaultPointInTimeItemTemplate let-item=\"item\">\r\n <div \r\n class=\"sds-timeline-item h-100\"\r\n [title]=\"item.hint\"\r\n >\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #defaultDayLabelTemplate let-label=\"label\">\r\n {{label.label}}\r\n</ng-template>\r\n\r\n<div \r\n #viewport\r\n class=\"sds-timeline-viewport\"\r\n (wheel)=\"onScroll($event)\"\r\n\r\n (mousedown)=\"onDragStart($event)\"\r\n (touchstart)=\"onDragStart($event)\"\r\n >\r\n\r\n <div \r\n class=\"sds-timeline-container d-flex flex-column\"\r\n [style.left.%]=\"viewOffsetPercent\"\r\n [style.width.%]=\"zoomPercent\"\r\n [style.cursor]=\"isDragging ? 'ew-resize' : 'default'\"\r\n >\r\n\r\n <div\r\n *ngIf=\"showDayLabels\" \r\n class=\"sds-timeline-day-header\">\r\n\r\n <div \r\n *ngFor=\"let label of dayLabels\"\r\n class=\"sds-day-label\" \r\n [ngClass]=\"dayLabelClass ?? null\"\r\n [style.left.%]=\"label.x\"\r\n [style.width.%]=\"label.width\"\r\n >\r\n <ng-container \r\n [ngTemplateOutlet]=\"dayLabelTemplate ? dayLabelTemplate : defaultDayLabelTemplate\"\r\n [ngTemplateOutletContext]=\"{label: label}\">\r\n </ng-container> \r\n </div>\r\n </div>\r\n\r\n <div \r\n *ngIf=\"showHourLabels\" \r\n class=\"sds-timeline-hour-header\">\r\n\r\n <div \r\n *ngFor=\"let label of hourLabels;\"\r\n class=\"sds-hour-label\" \r\n [ngClass]=\"hourLabelClass ?? null\"\r\n [style.left.%]=\"label.x\"\r\n [style.width.rem]=\"1.2\"\r\n [ngStyle]=\"{'left': 'calc(' + label.x + '% - 0.6rem)'}\"\r\n >\r\n \r\n {{label.label}}\r\n \r\n </div>\r\n </div>\r\n\r\n <div \r\n *ngIf=\"showTimeline\"\r\n class=\"sds-timeline flex-grow-1\"\r\n [style.height]=\"timelineHeight\"\r\n >\r\n\r\n <div \r\n *ngFor=\"let tick of hourTicks\"\r\n class=\"sds-timeline-tick\" \r\n [ngClass]=\"hourTickClass ?? null\"\t\r\n [ngStyle]=\"tick.x == 100 ? {'left': 'calc(' + tick.x +'% - 1px)'} : {'left': 'calc(' + tick.x + '% - 0.5px)'}\"\r\n >\r\n </div>\r\n\r\n <div \r\n *ngFor=\"let item of presentationItems\"\r\n class=\"sds-timeline-item-container\"\r\n [ngClass]=\"item.class ?? null\"\r\n [ngStyle]=\"{\r\n 'width': 'max(' + item.width +'%, 1px)',\r\n 'top': 'calc(' + item.top + ' - max(calc(' + item.height +'/2), 1px))', \r\n }\"\r\n\r\n [style.left.%]=\"item.x\"\r\n [style.height]=\"item.height\"\r\n [style.backgroundColor]=\"item.backgroundColor\"\r\n >\r\n\r\n <ng-container \r\n [ngTemplateOutlet]=\"itemTemplate ? itemTemplate : defaultItemTemplate\"\r\n [ngTemplateOutletContext]=\"{item: item}\">\r\n </ng-container> \r\n </div>\r\n\r\n\r\n <div *ngFor=\"let item of presentationPointInTimeItems\"\r\n class=\"sds-timeline-point-in-time-item-container\"\r\n [ngClass]=\"item.class\"\t\r\n [style.height]=\"item.height\"\r\n [style.width]=\"item.width\"\r\n [ngStyle]=\"{\r\n 'top': 'calc(' + item.top + ' - max(calc(' + item.height +'/2), 1px))', \r\n 'left': 'calc(' + item.x + '% - max( calc(' + item.width +'/2), 1px))',\r\n \r\n }\"\r\n [style.backgroundColor]=\"item.backgroundColor\"\r\n >\r\n\r\n <ng-container \r\n [ngTemplateOutlet]=\"pointInTimeTemplate ? pointInTimeTemplate : defaultPointInTimeItemTemplate\"\r\n [ngTemplateOutletContext]=\"{item: item}\">\r\n </ng-container> \r\n\r\n </div>\r\n\r\n </div>\r\n </div>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SdsTimelineComponent } from './components/timeline.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n SdsTimelineComponent\r\n ],\r\n imports: [\r\n CommonModule\r\n ],\r\n exports: [\r\n SdsTimelineComponent\r\n ],\r\n})\r\nexport class SdsTimelineModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spicainternational/ngx-sds-components",
3
- "version": "7.1.0-beta.9",
3
+ "version": "7.2.0",
4
4
  "license": "MIT",
5
5
  "description": "Spica design system angular components.",
6
6
  "peerDependencies": {
@@ -1,24 +1,34 @@
1
- import { EventEmitter, OnChanges, OnInit, SimpleChanges } from '@angular/core';
1
+ import { EventEmitter, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core';
2
2
  import { ProductModel } from './app-switcher.model';
3
3
  import * as i0 from "@angular/core";
4
- export declare class SdsAppSwitcherComponent implements OnInit, OnChanges {
4
+ export declare class SdsAppSwitcherComponent implements OnInit, OnChanges, OnDestroy {
5
+ private readonly _document;
5
6
  private popover?;
6
7
  productCode: Number | undefined;
7
8
  userProductCodes: Number[] | undefined;
8
9
  tenantProducts: ProductModel[] | undefined;
9
10
  switchText: string;
10
11
  discoverText: string;
12
+ /**
13
+ * @description
14
+ * Aria label appended to native button element. Defaults to 'Switch between apps'
15
+ */
16
+ ariaLabel: string;
11
17
  productClick: EventEmitter<ProductModel>;
12
18
  activatedProducts: ProductModel[];
13
19
  discoverProducts: ProductModel[];
14
20
  showSkeleton: boolean;
15
21
  elementUUID: string;
16
22
  showDropdown: boolean;
17
- constructor();
23
+ private _subscriptions;
24
+ constructor(_document: Document);
18
25
  ngOnInit(): void;
19
26
  ngOnChanges(changes: SimpleChanges): void;
27
+ ngOnDestroy(): void;
20
28
  emitProductClick(product: ProductModel): void;
29
+ onCloseDropdownPressed(): void;
21
30
  onDropdownClicked(): void;
31
+ onProductKeyReleased(event: KeyboardEvent, product: ProductModel): void;
22
32
  static ɵfac: i0.ɵɵFactoryDeclaration<SdsAppSwitcherComponent, never>;
23
- static ɵcmp: i0.ɵɵComponentDeclaration<SdsAppSwitcherComponent, "sds-app-switcher", never, { "productCode": "productCode"; "userProductCodes": "userProductCodes"; "tenantProducts": "tenantProducts"; "switchText": "switchText"; "discoverText": "discoverText"; }, { "productClick": "productClick"; }, never, never, false, never>;
33
+ static ɵcmp: i0.ɵɵComponentDeclaration<SdsAppSwitcherComponent, "sds-app-switcher", never, { "productCode": "productCode"; "userProductCodes": "userProductCodes"; "tenantProducts": "tenantProducts"; "switchText": "switchText"; "discoverText": "discoverText"; "ariaLabel": "ariaLabel"; }, { "productClick": "productClick"; }, never, never, false, never>;
24
34
  }
@@ -1,10 +1,11 @@
1
1
  import * as i0 from "@angular/core";
2
2
  import * as i1 from "./app-switcher.component";
3
- import * as i2 from "@angular/common";
4
- import * as i3 from "devextreme-angular/ui/popover";
5
- import * as i4 from "devextreme-angular/ui/scroll-view";
3
+ import * as i2 from "@angular/cdk/a11y";
4
+ import * as i3 from "@angular/common";
5
+ import * as i4 from "devextreme-angular/ui/popover";
6
+ import * as i5 from "devextreme-angular/ui/scroll-view";
6
7
  export declare class SdsAppSwitcherModule {
7
8
  static ɵfac: i0.ɵɵFactoryDeclaration<SdsAppSwitcherModule, never>;
8
- static ɵmod: i0.ɵɵNgModuleDeclaration<SdsAppSwitcherModule, [typeof i1.SdsAppSwitcherComponent], [typeof i2.CommonModule, typeof i3.DxPopoverModule, typeof i4.DxScrollViewModule], [typeof i1.SdsAppSwitcherComponent]>;
9
+ static ɵmod: i0.ɵɵNgModuleDeclaration<SdsAppSwitcherModule, [typeof i1.SdsAppSwitcherComponent], [typeof i2.A11yModule, typeof i3.CommonModule, typeof i4.DxPopoverModule, typeof i5.DxScrollViewModule], [typeof i1.SdsAppSwitcherComponent]>;
9
10
  static ɵinj: i0.ɵɵInjectorDeclaration<SdsAppSwitcherModule>;
10
11
  }
@@ -42,10 +42,33 @@ export declare class SdsDatePickerComponent implements OnInit, OnChanges {
42
42
  style: 'classic' | 'compact';
43
43
  compactStyleDisplay: 'date' | 'predefinedRange' | 'both';
44
44
  dateInputDisplayFormat: string;
45
+ /**
46
+ * @description
47
+ * Component aria-label. Defaults to 'Date picker'
48
+ */
49
+ componentAriaLabel: string;
50
+ /**
51
+ * @description
52
+ * Predefined date range definitions dropdown button aria-label. Defaults to 'Open predefined date ranges pane'
53
+ */
54
+ openDateRangeDefinitionsAriaLabel: string;
55
+ /**
56
+ * @description
57
+ * Next period button aria-label. Default to 'Next period'
58
+ */
59
+ nextPeriodAriaLabel: string;
60
+ /**
61
+ * @description
62
+ * Previous period button aria-label. Defaults to 'Previous period'
63
+ */
64
+ previousPeriodAriaLabel: string;
65
+ lockBeforeDate?: Date;
66
+ lockBeforeDateHint?: string;
45
67
  previousPeriodIcon: import("@fortawesome/fontawesome-common-types").IconDefinition;
46
68
  nextPeriodIcon: import("@fortawesome/fontawesome-common-types").IconDefinition;
47
69
  calendarIcon: import("@fortawesome/fontawesome-common-types").IconDefinition;
48
70
  toIcon: import("@fortawesome/fontawesome-common-types").IconDefinition;
71
+ lockIcon: import("@fortawesome/fontawesome-common-types").IconDefinition;
49
72
  predefinedDateRanges: Array<PeriodPickerDateRange>;
50
73
  predefinedDateRangesGeneratedDate: Date | undefined;
51
74
  selectedDateRange: PeriodPickerDateRange;
@@ -67,6 +90,7 @@ export declare class SdsDatePickerComponent implements OnInit, OnChanges {
67
90
  isSettingNotPreprocessedDate: boolean;
68
91
  isSelectedPredefinedPeriod: boolean;
69
92
  selectedDateFocus: boolean;
93
+ protected elementUUID: string;
70
94
  private customDateRange;
71
95
  private initCalendarValue;
72
96
  private singleDatePickerBox;
@@ -90,6 +114,7 @@ export declare class SdsDatePickerComponent implements OnInit, OnChanges {
90
114
  handleEndDateChange(newDate: Date): void;
91
115
  onStartDateChange(event: any): void;
92
116
  onEndDateChange(event: any): void;
117
+ onRangeKeyReleased(event: KeyboardEvent, range: PeriodPickerDateRange): void;
93
118
  onStartDateFocus(): void;
94
119
  onEndDateFocus(): void;
95
120
  applyPeriodPicker(): void;
@@ -114,10 +139,11 @@ export declare class SdsDatePickerComponent implements OnInit, OnChanges {
114
139
  private setSelectedDateRangeText;
115
140
  toggleDateRangeSelectorVisibility(): void;
116
141
  changDateRange(range: PeriodPickerDateRange): void;
142
+ isDateDisabled: (args: any) => boolean;
117
143
  private matchDateRange;
118
144
  private setDateRangeText;
119
145
  private formatDate;
120
146
  private generateDateRanges;
121
147
  static ɵfac: i0.ɵɵFactoryDeclaration<SdsDatePickerComponent, never>;
122
- static ɵcmp: i0.ɵɵComponentDeclaration<SdsDatePickerComponent, "sds-date-picker", never, { "selectionKind": "selectionKind"; "dateRangeDefinitions": "dateRangeDefinitions"; "selectedDate": "selectedDate"; "selectedDateStart": "selectedDateStart"; "singleDayFormatFn": "singleDayFormatFn"; "dateRangeFormatFn": "dateRangeFormatFn"; "selectedDateEnd": "selectedDateEnd"; "minDate": "minDate"; "maxDate": "maxDate"; "locales": "locales"; "disabled": "disabled"; "validationError": "validationError"; "isValid": "isValid"; "disabledDates": "disabledDates"; "applyText": "applyText"; "cancelText": "cancelText"; "translations": "translations"; "firstDayOfWeek": "firstDayOfWeek"; "dateRangeDefinitionsWidth": "dateRangeDefinitionsWidth"; "showPreviousAndNextButtons": "showPreviousAndNextButtons"; "width": "width"; "dropdownWrapperClass": "dropdownWrapperClass"; "dropdownWrapperId": "dropdownWrapperId"; "getPreviousDateCallback": "getPreviousDateCallback"; "getNextDateCallback": "getNextDateCallback"; "getPreviousRangeCallback": "getPreviousRangeCallback"; "getNextRangeCallback": "getNextRangeCallback"; "useCustomDisplayContent": "useCustomDisplayContent"; "displayPredefinedDateRangeName": "displayPredefinedDateRangeName"; "style": "style"; "compactStyleDisplay": "compactStyleDisplay"; "dateInputDisplayFormat": "dateInputDisplayFormat"; }, { "selectedDateChange": "selectedDateChange"; "selectedDateStartChange": "selectedDateStartChange"; "selectedDateEndChange": "selectedDateEndChange"; "periodChange": "periodChange"; }, ["displayContent"], ["display", "display"], false, never>;
148
+ static ɵcmp: i0.ɵɵComponentDeclaration<SdsDatePickerComponent, "sds-date-picker", never, { "selectionKind": "selectionKind"; "dateRangeDefinitions": "dateRangeDefinitions"; "selectedDate": "selectedDate"; "selectedDateStart": "selectedDateStart"; "singleDayFormatFn": "singleDayFormatFn"; "dateRangeFormatFn": "dateRangeFormatFn"; "selectedDateEnd": "selectedDateEnd"; "minDate": "minDate"; "maxDate": "maxDate"; "locales": "locales"; "disabled": "disabled"; "validationError": "validationError"; "isValid": "isValid"; "disabledDates": "disabledDates"; "applyText": "applyText"; "cancelText": "cancelText"; "translations": "translations"; "firstDayOfWeek": "firstDayOfWeek"; "dateRangeDefinitionsWidth": "dateRangeDefinitionsWidth"; "showPreviousAndNextButtons": "showPreviousAndNextButtons"; "width": "width"; "dropdownWrapperClass": "dropdownWrapperClass"; "dropdownWrapperId": "dropdownWrapperId"; "getPreviousDateCallback": "getPreviousDateCallback"; "getNextDateCallback": "getNextDateCallback"; "getPreviousRangeCallback": "getPreviousRangeCallback"; "getNextRangeCallback": "getNextRangeCallback"; "useCustomDisplayContent": "useCustomDisplayContent"; "displayPredefinedDateRangeName": "displayPredefinedDateRangeName"; "style": "style"; "compactStyleDisplay": "compactStyleDisplay"; "dateInputDisplayFormat": "dateInputDisplayFormat"; "componentAriaLabel": "componentAriaLabel"; "openDateRangeDefinitionsAriaLabel": "openDateRangeDefinitionsAriaLabel"; "nextPeriodAriaLabel": "nextPeriodAriaLabel"; "previousPeriodAriaLabel": "previousPeriodAriaLabel"; "lockBeforeDate": "lockBeforeDate"; "lockBeforeDateHint": "lockBeforeDateHint"; }, { "selectedDateChange": "selectedDateChange"; "selectedDateStartChange": "selectedDateStartChange"; "selectedDateEndChange": "selectedDateEndChange"; "periodChange": "periodChange"; }, ["displayContent"], ["display", "display"], false, never>;
123
149
  }
@@ -1,10 +1,12 @@
1
1
  import * as i0 from "@angular/core";
2
2
  import * as i1 from "./date-picker.component";
3
- import * as i2 from "@angular/common";
4
- import * as i3 from "@fortawesome/angular-fontawesome";
5
- import * as i4 from "devextreme-angular";
3
+ import * as i2 from "@angular/cdk/a11y";
4
+ import * as i3 from "@angular/common";
5
+ import * as i4 from "@fortawesome/angular-fontawesome";
6
+ import * as i5 from "devextreme-angular";
7
+ import * as i6 from "@spicainternational/ngx-sds-components/src/lib/date-pipes";
6
8
  export declare class SdsDatePickerModule {
7
9
  static ɵfac: i0.ɵɵFactoryDeclaration<SdsDatePickerModule, never>;
8
- static ɵmod: i0.ɵɵNgModuleDeclaration<SdsDatePickerModule, [typeof i1.SdsDatePickerComponent], [typeof i2.CommonModule, typeof i3.FontAwesomeModule, typeof i4.DxDateBoxModule, typeof i4.DxPopoverModule, typeof i4.DxScrollViewModule, typeof i4.DxCalendarModule, typeof i4.DxDropDownButtonModule, typeof i4.DxDropDownBoxModule, typeof i4.DxSelectBoxModule, typeof i4.DxListModule], [typeof i1.SdsDatePickerComponent]>;
10
+ static ɵmod: i0.ɵɵNgModuleDeclaration<SdsDatePickerModule, [typeof i1.SdsDatePickerComponent], [typeof i2.A11yModule, typeof i3.CommonModule, typeof i4.FontAwesomeModule, typeof i5.DxDateBoxModule, typeof i5.DxPopoverModule, typeof i5.DxScrollViewModule, typeof i5.DxCalendarModule, typeof i5.DxDropDownButtonModule, typeof i5.DxDropDownBoxModule, typeof i5.DxSelectBoxModule, typeof i5.DxListModule, typeof i6.SdsDatePipesModule], [typeof i1.SdsDatePickerComponent]>;
9
11
  static ɵinj: i0.ɵɵInjectorDeclaration<SdsDatePickerModule>;
10
12
  }
@@ -0,0 +1,7 @@
1
+ import { PipeTransform } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class SdsDateComparePipe implements PipeTransform {
4
+ transform(date1: Date | string | number, date2: Date | string | number, operator: 'gt' | 'lt' | 'eq' | 'gte' | 'lte'): boolean;
5
+ static ɵfac: i0.ɵɵFactoryDeclaration<SdsDateComparePipe, never>;
6
+ static ɵpipe: i0.ɵɵPipeDeclaration<SdsDateComparePipe, "sdsDateCompare", false>;
7
+ }
@@ -1,9 +1,11 @@
1
1
  import * as i0 from "@angular/core";
2
2
  import * as i1 from "./date-period-format.pipe";
3
3
  import * as i2 from "./date-format.pipe";
4
- import * as i3 from "@angular/common";
4
+ import * as i3 from "./date-time-range-format.pipe";
5
+ import * as i4 from "./date-compare.pipe";
6
+ import * as i5 from "@angular/common";
5
7
  export declare class SdsDatePipesModule {
6
8
  static ɵfac: i0.ɵɵFactoryDeclaration<SdsDatePipesModule, never>;
7
- static ɵmod: i0.ɵɵNgModuleDeclaration<SdsDatePipesModule, [typeof i1.SdsDatePeriodFormatPipe, typeof i2.SdsDateFormatPipe], [typeof i3.CommonModule], [typeof i1.SdsDatePeriodFormatPipe, typeof i2.SdsDateFormatPipe]>;
9
+ static ɵmod: i0.ɵɵNgModuleDeclaration<SdsDatePipesModule, [typeof i1.SdsDatePeriodFormatPipe, typeof i2.SdsDateFormatPipe, typeof i3.DateTimeRangeFormatPipe, typeof i4.SdsDateComparePipe], [typeof i5.CommonModule], [typeof i1.SdsDatePeriodFormatPipe, typeof i2.SdsDateFormatPipe, typeof i3.DateTimeRangeFormatPipe, typeof i4.SdsDateComparePipe]>;
8
10
  static ɵinj: i0.ɵɵInjectorDeclaration<SdsDatePipesModule>;
9
11
  }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Common Intl.DateTimeFormatOptions constants for consistent date/time formatting
3
+ */
4
+ export declare const DATE_NUMERIC_MONTH_OPTIONS: Intl.DateTimeFormatOptions;
5
+ export declare const DATE_SHORT_MONTH_OPTIONS: Intl.DateTimeFormatOptions;
6
+ export declare const DATE_LONG_MONTH_OPTIONS: Intl.DateTimeFormatOptions;
7
+ export declare const DATE_LONG_MONTH_LONG_WEEKDAY_OPTIONS: Intl.DateTimeFormatOptions;
8
+ export declare const DATE_LONG_MONTH_SHORT_WEEKDAY_OPTIONS: Intl.DateTimeFormatOptions;
9
+ export declare const TIME_HOUR_NUMERIC_OPTION: Intl.DateTimeFormatOptions;
10
+ export declare const TIME_HOUR_2DIGIT_OPTION: Intl.DateTimeFormatOptions;
11
+ export declare const TIME_HOUR_NUMERIC_SECONDS_OPTION: Intl.DateTimeFormatOptions;
12
+ export declare const DATE_TIME_FORMAT_OPTIONS: {
13
+ readonly DATE_NUMERIC_MONTH: Intl.DateTimeFormatOptions;
14
+ readonly DATE_SHORT_MONTH: Intl.DateTimeFormatOptions;
15
+ readonly DATE_LONG_MONTH: Intl.DateTimeFormatOptions;
16
+ readonly DATE_LONG_MONTH_LONG_WEEKDAY: Intl.DateTimeFormatOptions;
17
+ readonly DATE_LONG_MONTH_SHORT_WEEKDAY: Intl.DateTimeFormatOptions;
18
+ readonly TIME_HOUR_NUMERIC: Intl.DateTimeFormatOptions;
19
+ readonly TIME_HOUR_2DIGIT: Intl.DateTimeFormatOptions;
20
+ readonly TIME_HOUR_NUMERIC_SECONDS: Intl.DateTimeFormatOptions;
21
+ };
22
+ export type DateTimeFormatOptionKeys = keyof typeof DATE_TIME_FORMAT_OPTIONS;
@@ -0,0 +1,15 @@
1
+ import { PipeTransform } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class DateTimeRangeFormatPipe implements PipeTransform {
4
+ /**
5
+ * Formats a date range using Intl.DateTimeFormat.formatRange
6
+ * @param startDate - The start date of the range
7
+ * @param endDate - The end date of the range
8
+ * @param locales - Locale(s) to use for formatting (optional, defaults to browser locale)
9
+ * @param options - Intl.DateTimeFormatOptions for customizing the format
10
+ * @returns Formatted date range string
11
+ */
12
+ transform(startDate: Date | string | number, endDate: Date | string | number, locales: string | string[], options: Intl.DateTimeFormatOptions): string;
13
+ static ɵfac: i0.ɵɵFactoryDeclaration<DateTimeRangeFormatPipe, never>;
14
+ static ɵpipe: i0.ɵɵPipeDeclaration<DateTimeRangeFormatPipe, "sdsDateTimeRangeFormat", false>;
15
+ }
@@ -1,3 +1,6 @@
1
1
  export * from './date-pipes.module';
2
2
  export * from './date-period-format.pipe';
3
3
  export * from './date-format.pipe';
4
+ export * from './date-time-range-format.pipe';
5
+ export * from './date-time-formats.constants';
6
+ export * from './date-compare.pipe';
@@ -24,7 +24,7 @@ export declare class SdsNavigationUserProfileComponent implements OnInit, OnChan
24
24
  onSignOutClick(): void;
25
25
  closeOptions(): void;
26
26
  openOptions(): void;
27
- protected toggleOptions(): void;
27
+ protected toggleOptions(event: MouseEvent): void;
28
28
  onNotificationBadgeClick(event: MouseEvent): void;
29
29
  static ɵfac: i0.ɵɵFactoryDeclaration<SdsNavigationUserProfileComponent, never>;
30
30
  static ɵcmp: i0.ɵɵComponentDeclaration<SdsNavigationUserProfileComponent, "sds-navigation-user-profile", never, { "profile": "profile"; "profileInfo": "profileInfo"; "showSignOut": "showSignOut"; "showProfile": "showProfile"; "signOutText": "signOutText"; "profileText": "profileText"; "showNotificationBadge": "showNotificationBadge"; "newNotificationsText": "newNotificationsText"; "showOptions": "showOptions"; }, { "profileClick": "profileClick"; "signOutClick": "signOutClick"; "notificationBadgeClick": "notificationBadgeClick"; "showOptionsChange": "showOptionsChange"; }, never, ["*"], false, never>;
@@ -1,5 +1,5 @@
1
1
  import { AfterViewInit, ElementRef, OnChanges, OnInit, SimpleChanges, TemplateRef, EventEmitter } from '@angular/core';
2
- import { TimelineTickFrequency } from '../types/timeline.types';
2
+ import { TimelineCustomDateDataProvider, TimelineTickFrequency } from '../types/timeline.types';
3
3
  import { TimelineIntervalLabel, TimelineItem, TimelineItemPresentation, TimelinePointInTimeItem, TimelinePointInTimeItemPresentation, TimelineTick } from '../models/timeline.model';
4
4
  import * as i0 from "@angular/core";
5
5
  export declare class SdsTimelineComponent implements OnInit, OnChanges, AfterViewInit {
@@ -47,6 +47,20 @@ export declare class SdsTimelineComponent implements OnInit, OnChanges, AfterVie
47
47
  * @memberof SdsTimelineComponent
48
48
  */
49
49
  pointInTimeTemplate: TemplateRef<any> | undefined;
50
+ /**
51
+ * The template to be used for custom rendering of the day labels.
52
+ *
53
+ * @type {(TemplateRef<any> | undefined)}
54
+ * @memberof SdsTimelineComponent
55
+ */
56
+ dayLabelTemplate: TemplateRef<any> | undefined;
57
+ /**
58
+ * A custom data function for the day labels.
59
+ * This function takes a Date object as input and returns any custom data that will be available for the custom template
60
+ *
61
+ * @memberof SdsTimelineComponent
62
+ */
63
+ dayLabelCustomDataFn: TimelineCustomDateDataProvider | undefined;
50
64
  /**
51
65
  * The frequency of the ticks on the timeline.
52
66
  *
@@ -180,5 +194,5 @@ export declare class SdsTimelineComponent implements OnInit, OnChanges, AfterVie
180
194
  private generateInternalTimelineItems;
181
195
  private generateInternalTimelinePointInTimeItems;
182
196
  static ɵfac: i0.ɵɵFactoryDeclaration<SdsTimelineComponent, never>;
183
- static ɵcmp: i0.ɵɵComponentDeclaration<SdsTimelineComponent, "sds-timeline", never, { "start": "start"; "end": "end"; "items": "items"; "pointInTimeItems": "pointInTimeItems"; "itemTemplate": "itemTemplate"; "pointInTimeTemplate": "pointInTimeTemplate"; "tickFrequency": "tickFrequency"; "hourLabelFrequency": "hourLabelFrequency"; "zoomPercent": "zoomPercent"; "viewOffsetPercent": "viewOffsetPercent"; "maxZoomPercent": "maxZoomPercent"; "showHourLabels": "showHourLabels"; "hourLabelClass": "hourLabelClass"; "showDayLabels": "showDayLabels"; "dayLabelClass": "dayLabelClass"; "showTimeline": "showTimeline"; "hourTickClass": "hourTickClass"; "timelineHeight": "timelineHeight"; "enableZoomAndDrag": "enableZoomAndDrag"; "offSetMinutes": "offSetMinutes"; "locales": "locales"; }, { "zoomPercentChange": "zoomPercentChange"; "viewOffsetPercentChange": "viewOffsetPercentChange"; }, never, never, false, never>;
197
+ static ɵcmp: i0.ɵɵComponentDeclaration<SdsTimelineComponent, "sds-timeline", never, { "start": "start"; "end": "end"; "items": "items"; "pointInTimeItems": "pointInTimeItems"; "itemTemplate": "itemTemplate"; "pointInTimeTemplate": "pointInTimeTemplate"; "dayLabelTemplate": "dayLabelTemplate"; "dayLabelCustomDataFn": "dayLabelCustomDataFn"; "tickFrequency": "tickFrequency"; "hourLabelFrequency": "hourLabelFrequency"; "zoomPercent": "zoomPercent"; "viewOffsetPercent": "viewOffsetPercent"; "maxZoomPercent": "maxZoomPercent"; "showHourLabels": "showHourLabels"; "hourLabelClass": "hourLabelClass"; "showDayLabels": "showDayLabels"; "dayLabelClass": "dayLabelClass"; "showTimeline": "showTimeline"; "hourTickClass": "hourTickClass"; "timelineHeight": "timelineHeight"; "enableZoomAndDrag": "enableZoomAndDrag"; "offSetMinutes": "offSetMinutes"; "locales": "locales"; }, { "zoomPercentChange": "zoomPercentChange"; "viewOffsetPercentChange": "viewOffsetPercentChange"; }, never, never, false, never>;
184
198
  }
@@ -6,6 +6,8 @@ export interface TimelineIntervalLabel {
6
6
  x: number;
7
7
  width: number;
8
8
  label: string;
9
+ date: Date;
10
+ data: any;
9
11
  }
10
12
  interface TimelineBaseItem {
11
13
  data?: any;
@@ -1,5 +1,5 @@
1
1
  import { TimelineIntervalLabel, TimelineTick } from '../models/timeline.model';
2
- import { TimelineTickFrequency } from '../types/timeline.types';
2
+ import { TimelineCustomDateDataProvider, TimelineTickFrequency } from '../types/timeline.types';
3
3
  export declare class SdsTimelineService {
4
4
  private start;
5
5
  private end;
@@ -12,7 +12,7 @@ export declare class SdsTimelineService {
12
12
  getTick(time: Date): TimelineTick;
13
13
  getHourTicks(frequency?: TimelineTickFrequency): TimelineTick[];
14
14
  getHourLabels(frequency?: TimelineTickFrequency): TimelineIntervalLabel[];
15
- getDayLabels(locales: string | Array<string> | undefined): TimelineIntervalLabel[];
15
+ getDayLabels(locales: string | Array<string> | undefined, customDataFn: TimelineCustomDateDataProvider | undefined): TimelineIntervalLabel[];
16
16
  private isValidFrequencyHour;
17
17
  private diffInMinutes;
18
18
  private roundHoursUp;
@@ -1 +1,2 @@
1
1
  export type TimelineTickFrequency = 'hourly' | '2hrs' | '3hrs' | '6hrs';
2
+ export type TimelineCustomDateDataProvider = (date: Date) => any;