@onemrvapublic/design-system 22.0.0-develop.22 → 22.0.0-develop.23

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 (127) hide show
  1. package/README.md +34 -3
  2. package/card/src/onemrva-card.component.scss +23 -0
  3. package/fesm2022/onemrvapublic-design-system-card.mjs +12 -2
  4. package/fesm2022/onemrvapublic-design-system-card.mjs.map +1 -1
  5. package/fesm2022/onemrvapublic-design-system-flag-icon.mjs +10 -0
  6. package/fesm2022/onemrvapublic-design-system-flag-icon.mjs.map +1 -1
  7. package/fesm2022/onemrvapublic-design-system-layout.mjs +135 -1
  8. package/fesm2022/onemrvapublic-design-system-layout.mjs.map +1 -1
  9. package/fesm2022/onemrvapublic-design-system-mat-avatar.mjs +4 -15
  10. package/fesm2022/onemrvapublic-design-system-mat-avatar.mjs.map +1 -1
  11. package/fesm2022/onemrvapublic-design-system-mat-breadcrumb.mjs +10 -0
  12. package/fesm2022/onemrvapublic-design-system-mat-breadcrumb.mjs.map +1 -1
  13. package/fesm2022/onemrvapublic-design-system-mat-carousel.mjs +18 -0
  14. package/fesm2022/onemrvapublic-design-system-mat-carousel.mjs.map +1 -1
  15. package/fesm2022/onemrvapublic-design-system-mat-choice-chip.mjs +10 -0
  16. package/fesm2022/onemrvapublic-design-system-mat-choice-chip.mjs.map +1 -1
  17. package/fesm2022/onemrvapublic-design-system-mat-copy-to-clipboard.mjs +10 -0
  18. package/fesm2022/onemrvapublic-design-system-mat-copy-to-clipboard.mjs.map +1 -1
  19. package/fesm2022/onemrvapublic-design-system-mat-country-item.mjs +10 -0
  20. package/fesm2022/onemrvapublic-design-system-mat-country-item.mjs.map +1 -1
  21. package/fesm2022/onemrvapublic-design-system-mat-datepicker-header.mjs +8 -0
  22. package/fesm2022/onemrvapublic-design-system-mat-datepicker-header.mjs.map +1 -1
  23. package/fesm2022/onemrvapublic-design-system-mat-empty-row.mjs +7 -0
  24. package/fesm2022/onemrvapublic-design-system-mat-empty-row.mjs.map +1 -1
  25. package/fesm2022/onemrvapublic-design-system-mat-file-upload.mjs +20 -0
  26. package/fesm2022/onemrvapublic-design-system-mat-file-upload.mjs.map +1 -1
  27. package/fesm2022/onemrvapublic-design-system-mat-input-address.mjs +10 -0
  28. package/fesm2022/onemrvapublic-design-system-mat-input-address.mjs.map +1 -1
  29. package/fesm2022/onemrvapublic-design-system-mat-input-birthplace.mjs +10 -0
  30. package/fesm2022/onemrvapublic-design-system-mat-input-birthplace.mjs.map +1 -1
  31. package/fesm2022/onemrvapublic-design-system-mat-input-country.mjs +10 -0
  32. package/fesm2022/onemrvapublic-design-system-mat-input-country.mjs.map +1 -1
  33. package/fesm2022/onemrvapublic-design-system-mat-input-enterprise-number.mjs +10 -0
  34. package/fesm2022/onemrvapublic-design-system-mat-input-enterprise-number.mjs.map +1 -1
  35. package/fesm2022/onemrvapublic-design-system-mat-input-iban.mjs +10 -0
  36. package/fesm2022/onemrvapublic-design-system-mat-input-iban.mjs.map +1 -1
  37. package/fesm2022/onemrvapublic-design-system-mat-input-phone.mjs +10 -0
  38. package/fesm2022/onemrvapublic-design-system-mat-input-phone.mjs.map +1 -1
  39. package/fesm2022/onemrvapublic-design-system-mat-message-box.mjs +10 -0
  40. package/fesm2022/onemrvapublic-design-system-mat-message-box.mjs.map +1 -1
  41. package/fesm2022/onemrvapublic-design-system-mat-multi-select.mjs +10 -0
  42. package/fesm2022/onemrvapublic-design-system-mat-multi-select.mjs.map +1 -1
  43. package/fesm2022/onemrvapublic-design-system-mat-navigation.mjs +30 -0
  44. package/fesm2022/onemrvapublic-design-system-mat-navigation.mjs.map +1 -1
  45. package/fesm2022/onemrvapublic-design-system-mat-notification.mjs +10 -0
  46. package/fesm2022/onemrvapublic-design-system-mat-notification.mjs.map +1 -1
  47. package/fesm2022/onemrvapublic-design-system-mat-paginator.mjs +10 -0
  48. package/fesm2022/onemrvapublic-design-system-mat-paginator.mjs.map +1 -1
  49. package/fesm2022/onemrvapublic-design-system-mat-panel.mjs +50 -0
  50. package/fesm2022/onemrvapublic-design-system-mat-panel.mjs.map +1 -1
  51. package/fesm2022/onemrvapublic-design-system-mat-pop-over.mjs +30 -0
  52. package/fesm2022/onemrvapublic-design-system-mat-pop-over.mjs.map +1 -1
  53. package/fesm2022/onemrvapublic-design-system-mat-progress-bar.mjs +10 -0
  54. package/fesm2022/onemrvapublic-design-system-mat-progress-bar.mjs.map +1 -1
  55. package/fesm2022/onemrvapublic-design-system-mat-select-search.mjs +10 -3
  56. package/fesm2022/onemrvapublic-design-system-mat-select-search.mjs.map +1 -1
  57. package/fesm2022/onemrvapublic-design-system-mat-selectable-box.mjs +10 -0
  58. package/fesm2022/onemrvapublic-design-system-mat-selectable-box.mjs.map +1 -1
  59. package/fesm2022/onemrvapublic-design-system-mat-side-menu.mjs +10 -0
  60. package/fesm2022/onemrvapublic-design-system-mat-side-menu.mjs.map +1 -1
  61. package/fesm2022/onemrvapublic-design-system-mat-skeleton.mjs +4 -7
  62. package/fesm2022/onemrvapublic-design-system-mat-skeleton.mjs.map +1 -1
  63. package/fesm2022/onemrvapublic-design-system-mat-spinner.mjs +8 -0
  64. package/fesm2022/onemrvapublic-design-system-mat-spinner.mjs.map +1 -1
  65. package/fesm2022/onemrvapublic-design-system-mat-stepper.mjs +10 -0
  66. package/fesm2022/onemrvapublic-design-system-mat-stepper.mjs.map +1 -1
  67. package/fesm2022/onemrvapublic-design-system-mat-sticker.mjs +8 -0
  68. package/fesm2022/onemrvapublic-design-system-mat-sticker.mjs.map +1 -1
  69. package/fesm2022/onemrvapublic-design-system-mat-table-of-content.mjs +11 -7
  70. package/fesm2022/onemrvapublic-design-system-mat-table-of-content.mjs.map +1 -1
  71. package/fesm2022/onemrvapublic-design-system-mat-task-list.mjs +40 -0
  72. package/fesm2022/onemrvapublic-design-system-mat-task-list.mjs.map +1 -1
  73. package/fesm2022/onemrvapublic-design-system-mat-toast.mjs +8 -0
  74. package/fesm2022/onemrvapublic-design-system-mat-toast.mjs.map +1 -1
  75. package/fesm2022/onemrvapublic-design-system-mat-tooltip.mjs +10 -0
  76. package/fesm2022/onemrvapublic-design-system-mat-tooltip.mjs.map +1 -1
  77. package/fesm2022/onemrvapublic-design-system-page-error.mjs +18 -0
  78. package/fesm2022/onemrvapublic-design-system-page-error.mjs.map +1 -1
  79. package/fesm2022/onemrvapublic-design-system-page-not-found.mjs +32 -0
  80. package/fesm2022/onemrvapublic-design-system-page-not-found.mjs.map +1 -1
  81. package/fesm2022/onemrvapublic-design-system-shared.mjs +9 -1
  82. package/fesm2022/onemrvapublic-design-system-shared.mjs.map +1 -1
  83. package/fesm2022/onemrvapublic-design-system-timeline.mjs.map +1 -1
  84. package/fesm2022/onemrvapublic-design-system.mjs +1 -1
  85. package/fesm2022/onemrvapublic-design-system.mjs.map +1 -1
  86. package/package.json +1 -1
  87. package/types/onemrvapublic-design-system-card.d.ts +11 -1
  88. package/types/onemrvapublic-design-system-flag-icon.d.ts +10 -0
  89. package/types/onemrvapublic-design-system-layout.d.ts +132 -0
  90. package/types/onemrvapublic-design-system-mat-avatar.d.ts +4 -15
  91. package/types/onemrvapublic-design-system-mat-breadcrumb.d.ts +10 -0
  92. package/types/onemrvapublic-design-system-mat-carousel.d.ts +18 -0
  93. package/types/onemrvapublic-design-system-mat-choice-chip.d.ts +10 -0
  94. package/types/onemrvapublic-design-system-mat-copy-to-clipboard.d.ts +10 -0
  95. package/types/onemrvapublic-design-system-mat-country-item.d.ts +10 -0
  96. package/types/onemrvapublic-design-system-mat-datepicker-header.d.ts +8 -0
  97. package/types/onemrvapublic-design-system-mat-empty-row.d.ts +7 -0
  98. package/types/onemrvapublic-design-system-mat-file-upload.d.ts +20 -0
  99. package/types/onemrvapublic-design-system-mat-input-address.d.ts +10 -0
  100. package/types/onemrvapublic-design-system-mat-input-birthplace.d.ts +10 -0
  101. package/types/onemrvapublic-design-system-mat-input-country.d.ts +10 -0
  102. package/types/onemrvapublic-design-system-mat-input-enterprise-number.d.ts +10 -0
  103. package/types/onemrvapublic-design-system-mat-input-iban.d.ts +10 -0
  104. package/types/onemrvapublic-design-system-mat-input-phone.d.ts +10 -0
  105. package/types/onemrvapublic-design-system-mat-message-box.d.ts +10 -0
  106. package/types/onemrvapublic-design-system-mat-multi-select.d.ts +10 -0
  107. package/types/onemrvapublic-design-system-mat-navigation.d.ts +20 -0
  108. package/types/onemrvapublic-design-system-mat-notification.d.ts +10 -0
  109. package/types/onemrvapublic-design-system-mat-paginator.d.ts +10 -0
  110. package/types/onemrvapublic-design-system-mat-panel.d.ts +50 -0
  111. package/types/onemrvapublic-design-system-mat-pop-over.d.ts +30 -0
  112. package/types/onemrvapublic-design-system-mat-progress-bar.d.ts +10 -0
  113. package/types/onemrvapublic-design-system-mat-select-search.d.ts +10 -0
  114. package/types/onemrvapublic-design-system-mat-selectable-box.d.ts +10 -0
  115. package/types/onemrvapublic-design-system-mat-side-menu.d.ts +10 -0
  116. package/types/onemrvapublic-design-system-mat-skeleton.d.ts +4 -7
  117. package/types/onemrvapublic-design-system-mat-spinner.d.ts +8 -0
  118. package/types/onemrvapublic-design-system-mat-stepper.d.ts +10 -0
  119. package/types/onemrvapublic-design-system-mat-sticker.d.ts +8 -0
  120. package/types/onemrvapublic-design-system-mat-table-of-content.d.ts +10 -0
  121. package/types/onemrvapublic-design-system-mat-task-list.d.ts +40 -0
  122. package/types/onemrvapublic-design-system-mat-toast.d.ts +8 -0
  123. package/types/onemrvapublic-design-system-mat-tooltip.d.ts +10 -0
  124. package/types/onemrvapublic-design-system-page-error.d.ts +18 -0
  125. package/types/onemrvapublic-design-system-page-not-found.d.ts +32 -0
  126. package/types/onemrvapublic-design-system-shared.d.ts +8 -0
  127. package/types/onemrvapublic-design-system.d.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"onemrvapublic-design-system-timeline.mjs","sources":["../../../../projects/onemrva/design-system/timeline/src/models/timeline-color.model.ts","../../../../projects/onemrva/design-system/timeline/src/models/timeline-filter.model.ts","../../../../projects/onemrva/design-system/timeline/src/timeline.utils.ts","../../../../projects/onemrva/design-system/timeline/src/onemrva-timeline.component.ts","../../../../projects/onemrva/design-system/timeline/src/onemrva-timeline.component.html","../../../../projects/onemrva/design-system/timeline/src/onemrva-timeline.module.ts","../../../../projects/onemrva/design-system/timeline/index.ts","../../../../projects/onemrva/design-system/timeline/onemrvapublic-design-system-timeline.ts"],"sourcesContent":["/** A palette token assigned to a legend entry; resolved to a hex value via `TIMELINE_PALETTE`. */\nexport type TimelineColor =\n | 'data-1'\n | 'data-2'\n | 'data-3'\n | 'data-4'\n | 'data-5'\n | 'data-6'\n | 'data-7';\n\n/** All palette tokens in display order. */\nexport const TIMELINE_COLORS: readonly TimelineColor[] = [\n 'data-1',\n 'data-2',\n 'data-3',\n 'data-4',\n 'data-5',\n 'data-6',\n 'data-7',\n];\n\n/** Maps each palette token to its hex value. */\nexport const TIMELINE_PALETTE: Record<TimelineColor, string> = {\n 'data-1': '#625d9c',\n 'data-2': '#7f56a2',\n 'data-3': '#9f499e',\n 'data-4': '#be358f',\n 'data-5': '#d71675',\n 'data-6': '#e70054',\n 'data-7': '#eb142a',\n};\n","/** A single-select filter toggle shown in the timeline header. */\nexport interface TimelineFilterOption {\n label: string;\n value: string;\n}\n\n/** Maximum filter options the timeline renders; extras are ignored. */\nexport const MAX_TIMELINE_FILTERS = 3;\n","import { TimelinePeriod } from './models/timeline-period.model';\nimport {\n MAX_TIMELINE_FILTERS,\n TimelineFilterOption,\n} from './models/timeline-filter.model';\n\nconst MS_PER_DAY = 1000 * 60 * 60 * 24;\n\nexport interface TimelineYearRange {\n baseBeginYear: number;\n baseEndYear: number;\n}\n\nexport interface TimelineBar {\n class: string;\n style: string;\n period?: TimelinePeriod;\n trackById: string;\n}\n\nexport function limitFilters(\n filters: TimelineFilterOption[],\n): TimelineFilterOption[] {\n return filters.slice(0, MAX_TIMELINE_FILTERS);\n}\n\nexport function daysBetween(a: Date, b: Date): number {\n return Math.max(1, Math.round((b.getTime() - a.getTime()) / MS_PER_DAY));\n}\n\nexport function formatDate(date: Date): string {\n const pad = (value: number) => value.toString().padStart(2, '0');\n return `${pad(date.getDate())}/${pad(date.getMonth() + 1)}/${date.getFullYear()}`;\n}\n\nexport function formatPeriodRange(period: TimelinePeriod): string {\n return `${formatDate(period.beginDate)} - ${formatDate(period.endDate)}`;\n}\n\nexport function monthsWithSize(\n year: number,\n): { month: number; widthPercent: number }[] {\n const daysInYear =\n (new Date(year, 11, 31).getTime() - new Date(year, 0, 1).getTime()) /\n MS_PER_DAY +\n 1;\n\n return Array.from({ length: 12 }, (_, month) => ({\n month: month + 1,\n widthPercent: (new Date(year, month + 1, 0).getDate() / daysInYear) * 100,\n }));\n}\n\nexport function fullTimelineRange(\n periods: TimelinePeriod[],\n): TimelineYearRange | null {\n if (!periods.length) return null;\n\n const minBegin = Math.min(...periods.map(p => p.beginDate.getTime()));\n const maxEnd = Math.max(...periods.map(p => p.endDate.getTime()));\n\n return {\n baseBeginYear: new Date(minBegin).getFullYear(),\n baseEndYear: new Date(maxEnd).getFullYear(),\n };\n}\n\nexport function splitIntoRows(periods: TimelinePeriod[]): TimelinePeriod[][] {\n const rows: TimelinePeriod[][] = [];\n const sorted = [...periods].sort(\n (a, b) => a.beginDate.getTime() - b.beginDate.getTime(),\n );\n\n for (const period of sorted) {\n const row = rows.find(\n r => r[r.length - 1].endDate.getTime() <= period.beginDate.getTime(),\n );\n if (row) {\n row.push(period);\n } else {\n rows.push([period]);\n }\n }\n\n return rows;\n}\n\nexport function buildRow(\n periods: TimelinePeriod[],\n range: { begin: Date; end: Date },\n colorOf: (period: TimelinePeriod) => string,\n): TimelineBar[] {\n if (!periods.length) return [];\n\n const result: TimelineBar[] = [];\n const { begin, end } = range;\n\n if (periods[0].beginDate > begin) {\n result.push(gapBar(begin, periods[0].beginDate));\n }\n\n let previous: TimelinePeriod | null = null;\n for (const period of periods) {\n if (previous) {\n result.push(gapBar(previous.endDate, period.beginDate));\n }\n result.push(periodBar(period, begin, end, colorOf(period)));\n previous = period;\n }\n\n if (previous && previous.endDate < end) {\n result.push(gapBar(previous.endDate, end));\n }\n\n return result;\n}\n\nfunction gapBar(from: Date, to: Date): TimelineBar {\n return bar(\n undefined,\n daysBetween(from, to),\n undefined,\n `gap-${from.getTime()}-${to.getTime()}`,\n );\n}\n\nfunction periodBar(\n period: TimelinePeriod,\n begin: Date,\n end: Date,\n color: string,\n): TimelineBar {\n const start = Math.max(begin.getTime(), period.beginDate.getTime());\n const stop = Math.min(end.getTime(), period.endDate.getTime());\n return bar(\n period,\n daysBetween(new Date(start), new Date(stop)),\n color,\n period.id,\n );\n}\n\nfunction bar(\n period: TimelinePeriod | undefined,\n diff: number,\n color: string | undefined,\n trackById: string,\n): TimelineBar {\n const classes = ['item'];\n if (period) classes.push('period', 'cursor');\n if (period?.disabled) classes.push('disabled');\n\n return {\n class: classes.join(' '),\n style: `flex: ${diff} 1 0${color ? `; background-color: ${color}` : ''}`,\n period,\n trackById,\n };\n}\n","import {\n Component,\n LOCALE_ID,\n ViewEncapsulation,\n computed,\n effect,\n inject,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatDivider } from '@angular/material/divider';\nimport {\n CdkOverlayOrigin,\n ConnectedPosition,\n OverlayModule,\n} from '@angular/cdk/overlay';\nimport { TimelinePeriod } from './models/timeline-period.model';\nimport {\n TimelineLegend,\n TimelineLegendItem,\n} from './models/timeline-legend.model';\nimport { TimelineFilterOption } from './models/timeline-filter.model';\nimport { TimelineColor, TIMELINE_PALETTE } from './models/timeline-color.model';\nimport {\n buildRow,\n formatPeriodRange,\n fullTimelineRange,\n limitFilters,\n monthsWithSize,\n splitIntoRows,\n} from './timeline.utils';\n\nlet nextTooltipId = 0;\n\n/**\n * Displays dated periods on a horizontal, year-based timeline. Overlapping\n * periods stack into rows and take their colour from the matching legend item.\n *\n * @example\n * ```html\n * <onemrva-timeline\n * title=\"Career timeline\"\n * [periods]=\"periods\"\n * [legend]=\"legend\"\n * [filters]=\"filters\"\n * [(activeFilter)]=\"activeFilter\"\n * [(selectedPeriod)]=\"selected\"\n * emptyMessage=\"No periods to display\"\n * />\n * ```\n */\n@Component({\n selector: 'onemrva-timeline',\n standalone: true,\n imports: [\n MatIcon,\n MatIconButton,\n MatButtonToggleModule,\n MatFormFieldModule,\n MatSelectModule,\n MatDivider,\n OverlayModule,\n TranslatePipe,\n ],\n templateUrl: './onemrva-timeline.component.html',\n styleUrl: './onemrva-timeline.component.scss',\n encapsulation: ViewEncapsulation.Emulated,\n host: { '[attr.title]': 'null' },\n})\nexport class OnemrvaTimelineComponent {\n private readonly fallbackColor = '#e5e5e5';\n private readonly rowHeightPx = 56;\n private readonly plotPaddingPx = 16;\n private readonly axesHeightPx = 56;\n\n /** Optional heading shown above the visible year range. */\n readonly title = input<string>('');\n\n /** Periods to plot on the timeline. */\n readonly periods = input<TimelinePeriod[]>([]);\n\n /** Legend entries that map a period `type` to its label and color. */\n readonly legend = input<TimelineLegend>();\n\n /** Size, in years, of the visible window; two-way bindable via the period dropdown. */\n readonly fixedYearCount = model<number>(5);\n\n /** Year-window sizes offered by the period dropdown. */\n readonly yearOptions = input<number[]>([1, 5, 10]);\n\n /** When true, the period dropdown offers a \"Month\" option. */\n readonly showMonthPicker = input<boolean>(false);\n\n /** Whether month numbers are shown under each year (only when the window spans at most 5 years). */\n readonly showMonths = input<boolean>(true);\n\n /** Whether period labels are rendered inside the bars. */\n readonly showLabels = input<boolean>(true);\n\n /** Whether the hover popup with period details is shown. */\n readonly showTooltip = input<boolean>(true);\n\n /** Optional max height (any CSS length) for the timeline body; rows scroll within it while the year and month axes stay pinned. Ignored when `fullSize` is true. */\n readonly maxHeight = input<string>('');\n\n /** When true, every row is shown at once and the body never scrolls; `maxHeight` is ignored. */\n readonly fullSize = input<boolean>(false);\n\n /** Single-select filter toggles shown in the header; at most three are rendered. */\n readonly filters = input<TimelineFilterOption[]>([]);\n\n /** Message shown when no periods are provided. Nothing renders when it is empty. */\n readonly emptyMessage = input<string>('');\n\n /** Currently selected period. Two-way bindable via `[(selectedPeriod)]`. */\n readonly selectedPeriod = model<TimelinePeriod | undefined>();\n\n /** Value of the currently active filter, or `undefined` when none. Two-way bindable. */\n readonly activeFilter = model<string | undefined>(undefined);\n\n /** Emits the active filter value whenever the selection changes. */\n readonly filterChange = output<string | undefined>();\n\n /**\n * Emits the unit shown on the lower axis whenever the period view changes:\n * `'months'` in the year view, or `'days'` when a single month is focused.\n */\n readonly axisUnitChange = output<'months' | 'days'>();\n\n protected readonly monthsByYear = computed(() => {\n const map = new Map<number, ReturnType<typeof monthsWithSize>>();\n for (const year of this.years()) {\n map.set(year, monthsWithSize(year));\n }\n return map;\n });\n\n protected readonly tooltipInfo = signal<TooltipInfo>({ visible: false });\n protected readonly tooltipId = `onemrva-timeline-tooltip-${nextTooltipId++}`;\n protected readonly tooltipPositions: ConnectedPosition[] = [\n {\n originX: 'center',\n originY: 'bottom',\n overlayX: 'center',\n overlayY: 'top',\n offsetY: 15,\n },\n ];\n\n protected readonly changeRange = signal<number>(0);\n protected readonly activeType = signal<string | undefined>(undefined);\n protected readonly monthMode = signal<boolean>(false);\n\n private readonly locale = inject(LOCALE_ID);\n private readonly shortMonthFormat = new Intl.DateTimeFormat(this.locale, {\n month: 'short',\n });\n private readonly longMonthFormat = new Intl.DateTimeFormat(this.locale, {\n month: 'long',\n });\n\n protected readonly focusedDate = signal<{ year: number; month: number }>({\n year: 0,\n month: 0,\n });\n\n constructor() {\n effect(() => {\n this.periods();\n this.fixedYearCount();\n this.changeRange.set(0);\n });\n }\n\n protected readonly scrollMaxHeight = computed(() => {\n if (this.fullSize()) return null;\n\n const raw = this.maxHeight().trim();\n const match = /^(\\d+)px$/.exec(raw);\n if (!match) return raw || null;\n\n const middle = Number(match[1]) - this.axesHeightPx;\n if (middle < this.rowHeightPx) return raw;\n\n const rows = Math.floor(middle / this.rowHeightPx);\n return `${rows * this.rowHeightPx + this.axesHeightPx}px`;\n });\n\n protected readonly plotHeightPx = computed(\n () => this.displayedRows().length * this.rowHeightPx + this.plotPaddingPx,\n );\n\n private readonly fullRange = computed(() =>\n fullTimelineRange(this.periods()),\n );\n\n private readonly totalYears = computed(() => {\n const range = this.fullRange();\n return range ? range.baseEndYear - range.baseBeginYear + 1 : 0;\n });\n\n private readonly maxOffset = computed(() =>\n Math.max(0, this.totalYears() - this.fixedYearCount()),\n );\n\n private readonly offset = computed(() =>\n Math.min(Math.max(this.changeRange(), 0), this.maxOffset()),\n );\n\n protected readonly displayRange = computed(() => {\n const range = this.fullRange();\n if (!range) return null;\n\n if (this.monthMode()) {\n const year = this.focusedDate().year;\n return { beginYear: year, endYear: year };\n }\n\n if (this.fixedYearCount() >= this.totalYears()) {\n return { beginYear: range.baseBeginYear, endYear: range.baseEndYear };\n }\n\n const beginYear = range.baseBeginYear + this.offset();\n return { beginYear, endYear: beginYear + this.fixedYearCount() - 1 };\n });\n\n protected readonly canPrevious = computed(\n () => this.fixedYearCount() < this.totalYears() && this.offset() > 0,\n );\n\n protected readonly canNext = computed(\n () =>\n this.fixedYearCount() < this.totalYears() &&\n this.offset() < this.maxOffset(),\n );\n\n protected readonly monthList = computed(() => {\n const range = this.fullRange();\n if (!range) return [];\n\n const list: { value: string; label: string }[] = [];\n for (let year = range.baseBeginYear; year <= range.baseEndYear; year++) {\n for (let month = 1; month <= 12; month++) {\n list.push({\n value: `${year}-${String(month).padStart(2, '0')}`,\n label: `${this.shortMonthFormat.format(new Date(year, month - 1, 1))} ${year}`,\n });\n }\n }\n return list;\n });\n\n protected readonly monthLabel = computed(() => {\n const focused = this.focusedDate();\n return `${this.longMonthFormat.format(new Date(focused.year, focused.month, 1))} ${focused.year}`;\n });\n\n protected readonly focusedMonthValue = computed(() => {\n const focused = this.focusedDate();\n return `${focused.year}-${String(focused.month + 1).padStart(2, '0')}`;\n });\n\n protected readonly canPreviousMonth = computed(() => {\n const range = this.fullRange();\n const focused = this.focusedDate();\n if (!range) return false;\n return focused.year > range.baseBeginYear || focused.month > 0;\n });\n\n protected readonly canNextMonth = computed(() => {\n const range = this.fullRange();\n const focused = this.focusedDate();\n if (!range) return false;\n return focused.year < range.baseEndYear || focused.month < 11;\n });\n\n protected readonly years = computed(() => {\n const range = this.displayRange();\n if (!range) return [];\n\n return Array.from(\n { length: range.endYear - range.beginYear + 1 },\n (_, i) => range.beginYear + i,\n );\n });\n\n private readonly displayWindow = computed(() => {\n const range = this.displayRange();\n if (!range) return null;\n\n if (this.monthMode()) {\n const { year, month } = this.focusedDate();\n return {\n begin: new Date(year, month, 1),\n end: new Date(year, month + 1, 0),\n };\n }\n\n return {\n begin: new Date(range.beginYear, 0, 1),\n end: new Date(range.endYear, 11, 31),\n };\n });\n\n protected readonly visiblePeriods = computed(() => {\n const bounds = this.displayWindow();\n if (!bounds) return [];\n\n return this.periods()\n .filter(p => p.endDate >= bounds.begin && p.beginDate <= bounds.end)\n .sort((a, b) => a.beginDate.getTime() - b.beginDate.getTime());\n });\n\n protected readonly displayedRows = computed(() => {\n const bounds = this.displayWindow();\n const periods = this.visiblePeriods();\n if (!bounds || !periods.length) return [];\n\n return splitIntoRows(periods).map(row =>\n buildRow(row, bounds, period => this.colorOf(period)),\n );\n });\n\n protected readonly focusedMonthDays = computed(() => {\n const { year, month } = this.focusedDate();\n const days = new Date(year, month + 1, 0).getDate();\n return Array.from({ length: days }, (_, i) => i + 1);\n });\n\n protected readonly dayWidthPercent = computed(() => {\n const count = this.focusedMonthDays().length;\n return count ? 100 / count : 0;\n });\n\n protected readonly sortedLegend = computed(() => {\n const seen = new Set<string>();\n return (this.legend() ?? [])\n .filter(item => {\n if (seen.has(item.type)) return false;\n seen.add(item.type);\n return true;\n })\n .sort((a, b) => a.label.localeCompare(b.label));\n });\n\n protected readonly visibleFilters = computed(() =>\n limitFilters(this.filters()),\n );\n\n protected getLegend(type?: string): TimelineLegendItem | undefined {\n if (!type) return undefined;\n return this.legend()?.find(l => l.type === type);\n }\n\n protected colorHex(color?: TimelineColor): string {\n return color ? TIMELINE_PALETTE[color] : this.fallbackColor;\n }\n\n private colorOf(period: TimelinePeriod): string {\n return this.colorHex(this.getLegend(period.type)?.color);\n }\n\n protected periodRange(period?: TimelinePeriod): string {\n return period ? formatPeriodRange(period) : '';\n }\n\n protected nextYear(): void {\n this.changeRange.set(Math.min(this.maxOffset(), this.offset() + 1));\n }\n\n protected previousYear(): void {\n this.changeRange.set(Math.max(0, this.offset() - 1));\n }\n\n protected onPeriodChange(value: string | number): void {\n if (value === 'month') {\n const range = this.fullRange();\n const periods = this.periods();\n const earliest = periods.length\n ? periods.reduce((a, b) => (a.beginDate <= b.beginDate ? a : b))\n : null;\n this.focusedDate.set({\n year: earliest?.beginDate.getFullYear() ?? range?.baseBeginYear ?? 0,\n month: earliest?.beginDate.getMonth() ?? 0,\n });\n this.monthMode.set(true);\n this.axisUnitChange.emit('days');\n } else {\n this.monthMode.set(false);\n this.changeRange.set(0);\n this.fixedYearCount.set(Number(value));\n this.axisUnitChange.emit('months');\n }\n }\n\n protected goToMonth(value: string): void {\n if (!value) return;\n const year = Number(value.slice(0, 4));\n const month = Number(value.slice(5, 7)) - 1;\n if (Number.isNaN(year) || Number.isNaN(month)) return;\n this.focusedDate.set({ year, month });\n }\n\n protected previousMonth(): void {\n const { year, month } = this.focusedDate();\n if (!this.canPreviousMonth()) return;\n this.focusedDate.set(\n month > 0 ? { year, month: month - 1 } : { year: year - 1, month: 11 },\n );\n }\n\n protected nextMonth(): void {\n const { year, month } = this.focusedDate();\n if (!this.canNextMonth()) return;\n this.focusedDate.set(\n month < 11 ? { year, month: month + 1 } : { year: year + 1, month: 0 },\n );\n }\n\n protected onFilterChange(value: string | undefined): void {\n this.activeFilter.set(value);\n this.filterChange.emit(value);\n }\n\n protected selectPeriod(period?: TimelinePeriod): void {\n if (!period || period.disabled) return;\n this.activeType.set(undefined);\n this.selectedPeriod.set(period);\n }\n\n protected onLegendSelect(item: TimelineLegendItem): void {\n const match = this.periods().find(p => p.type === item.type && !p.disabled);\n if (!match) return;\n\n if (this.monthMode()) {\n this.focusedDate.set({\n year: match.beginDate.getFullYear(),\n month: match.beginDate.getMonth(),\n });\n } else {\n const range = this.fullRange();\n if (range) {\n const target = match.beginDate.getFullYear() - range.baseBeginYear;\n this.changeRange.set(Math.min(Math.max(target, 0), this.maxOffset()));\n }\n }\n\n this.activeType.set(item.type);\n this.selectedPeriod.set(match);\n }\n\n protected isActive(period?: TimelinePeriod): boolean {\n if (!period || period.disabled) return false;\n const type = this.activeType();\n if (type && period.type === type) return true;\n return period.id === this.selectedPeriod()?.id;\n }\n\n protected showPeriodTooltip(\n period?: TimelinePeriod,\n origin?: CdkOverlayOrigin,\n ): void {\n if (!period) return;\n this.tooltipInfo.set({ visible: true, period, origin });\n }\n\n protected hidePeriodTooltip(): void {\n this.tooltipInfo.set({ visible: false });\n }\n\n protected isTooltipOpenFor(period?: TimelinePeriod): boolean {\n const info = this.tooltipInfo();\n return info.visible && !!period && info.period?.id === period.id;\n }\n\n protected ariaLabel(period?: TimelinePeriod): string | null {\n if (!period) return null;\n const name = period.label ?? period.type ?? '';\n return [name, this.periodRange(period)].filter(Boolean).join(', ') || null;\n }\n}\n\ninterface TooltipInfo {\n visible: boolean;\n period?: TimelinePeriod;\n origin?: CdkOverlayOrigin;\n}\n","<div class=\"container\">\n @if (periods().length !== 0) {\n <div class=\"navigation\">\n <div class=\"nav-info\">\n @if (title()) {\n <p class=\"timeline-title\">{{ title() }}</p>\n }\n <span class=\"timeline-range\">\n @if (monthMode()) {\n {{ monthLabel() }}\n } @else {\n {{ displayRange()?.beginYear }} - {{ displayRange()?.endYear }}\n }\n </span>\n </div>\n\n <div class=\"nav-controls\">\n <div class=\"nav-pager\">\n <button\n mat-icon-button\n data-cy=\"timeline-prev\"\n [attr.aria-label]=\"\n (monthMode() ? 'timeline.previousMonth' : 'timeline.previousYear')\n | translate\n \"\n [disabled]=\"monthMode() ? !canPreviousMonth() : !canPrevious()\"\n (click)=\"monthMode() ? previousMonth() : previousYear()\"\n >\n <mat-icon>arrow_back_ios</mat-icon>\n </button>\n <button\n mat-icon-button\n data-cy=\"timeline-next\"\n [attr.aria-label]=\"\n (monthMode() ? 'timeline.nextMonth' : 'timeline.nextYear')\n | translate\n \"\n [disabled]=\"monthMode() ? !canNextMonth() : !canNext()\"\n (click)=\"monthMode() ? nextMonth() : nextYear()\"\n >\n <mat-icon>arrow_forward_ios</mat-icon>\n </button>\n </div>\n\n <mat-form-field\n class=\"timeline-field timeline-period\"\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n >\n <mat-label>{{ 'timeline.period' | translate }}</mat-label>\n <mat-select\n [attr.aria-label]=\"'timeline.period' | translate\"\n [value]=\"monthMode() ? 'month' : fixedYearCount()\"\n (selectionChange)=\"onPeriodChange($event.value)\"\n >\n @if (showMonthPicker()) {\n <mat-option value=\"month\" data-cy=\"timeline-period-month\">\n {{ 'timeline.month' | translate }}\n </mat-option>\n }\n @for (option of yearOptions(); track option) {\n <mat-option\n [value]=\"option\"\n [attr.data-cy]=\"'timeline-period-' + option\"\n >\n {{ option }}\n {{\n (option === 1 ? 'timeline.year' : 'timeline.years')\n | translate\n }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n @if (showMonthPicker() && monthMode()) {\n <mat-form-field\n class=\"timeline-field timeline-month-jump\"\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n >\n <mat-label>{{ 'timeline.goToMonth' | translate }}</mat-label>\n <mat-select\n data-cy=\"timeline-month-jump\"\n [attr.aria-label]=\"'timeline.goToMonth' | translate\"\n [value]=\"focusedMonthValue()\"\n (selectionChange)=\"goToMonth($event.value)\"\n >\n @for (month of monthList(); track month.value) {\n <mat-option [value]=\"month.value\">{{ month.label }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n\n @if (visibleFilters().length) {\n <mat-divider vertical class=\"nav-divider\" />\n <mat-button-toggle-group\n class=\"timeline-filters\"\n [value]=\"activeFilter()\"\n (change)=\"onFilterChange($any($event).value)\"\n >\n @for (filter of visibleFilters(); track filter.value) {\n <mat-button-toggle\n class=\"filter-toggle\"\n [value]=\"filter.value\"\n [attr.aria-label]=\"filter.label\"\n >\n {{ filter.label }}\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n }\n </div>\n </div>\n\n <div\n class=\"timeline-scroll\"\n [class.full-size]=\"fullSize()\"\n [style.max-height]=\"scrollMaxHeight()\"\n >\n <div class=\"timelineContainer\">\n <div class=\"timeline-years\">\n @for (year of years(); track 'axis-' + year) {\n <div class=\"axis-col\">{{ monthMode() ? monthLabel() : year }}</div>\n }\n </div>\n\n <div class=\"timeline-plot\" [style.height.px]=\"plotHeightPx()\">\n <div class=\"timeline-grid\">\n @for (year of years(); track 'grid-' + year) {\n <div class=\"grid-col\"></div>\n }\n </div>\n\n <div class=\"timeline\">\n @for (row of displayedRows(); track $index) {\n <div class=\"timeline-row\">\n @for (item of row; track item.trackById) {\n <div\n [class]=\"item.class\"\n [class.selected]=\"isActive(item.period)\"\n [style]=\"item.style\"\n [attr.role]=\"\n item.period && !item.period.disabled ? 'button' : null\n \"\n [attr.tabindex]=\"\n item.period && !item.period.disabled ? 0 : null\n \"\n [attr.aria-label]=\"ariaLabel(item?.period)\"\n [attr.aria-describedby]=\"\n isTooltipOpenFor(item?.period) ? tooltipId : null\n \"\n (mouseenter)=\"showPeriodTooltip(item?.period, origin)\"\n (mouseleave)=\"hidePeriodTooltip()\"\n (focus)=\"showPeriodTooltip(item?.period, origin)\"\n (blur)=\"hidePeriodTooltip()\"\n (click)=\"selectPeriod(item?.period)\"\n (keydown.enter)=\"selectPeriod(item?.period)\"\n (keydown.space)=\"selectPeriod(item?.period)\"\n (keydown.escape)=\"hidePeriodTooltip()\"\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\"\n >\n @if (showLabels() && item.period?.label) {\n <span class=\"period-label\">{{ item.period.label }}</span>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n @if (showMonths() && years().length <= 5) {\n <div class=\"timeline-months\">\n @if (monthMode()) {\n <div class=\"months-col\">\n @for (day of focusedMonthDays(); track day) {\n <span class=\"month\" [style.width.%]=\"dayWidthPercent()\">{{\n day\n }}</span>\n }\n </div>\n } @else {\n @for (year of years(); track 'months-' + year) {\n <div class=\"months-col\">\n @for (\n month of monthsByYear().get(year) ?? [];\n track month.month\n ) {\n <span class=\"month\" [style.width.%]=\"month.widthPercent\">{{\n month.month\n }}</span>\n }\n </div>\n }\n }\n </div>\n }\n </div>\n </div>\n\n <div class=\"timeline-legend\">\n @for (legendItem of sortedLegend(); track legendItem) {\n <button\n type=\"button\"\n class=\"legend-item\"\n [attr.aria-label]=\"\n 'timeline.goTo' | translate: { label: legendItem.label }\n \"\n (click)=\"onLegendSelect(legendItem)\"\n >\n <span\n class=\"legend-color\"\n [style.background-color]=\"colorHex(legendItem.color)\"\n ></span>\n <span class=\"legend-label\">{{ legendItem.label }}</span>\n </button>\n }\n </div>\n\n @if (showTooltip() && tooltipInfo().visible && tooltipInfo().origin) {\n @let period = tooltipInfo().period;\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"tooltipInfo().origin!\"\n [cdkConnectedOverlayOpen]=\"true\"\n [cdkConnectedOverlayPositions]=\"tooltipPositions\"\n >\n <div\n class=\"tooltip\"\n role=\"tooltip\"\n [id]=\"tooltipId\"\n [style.border-color]=\"colorHex(getLegend(period?.type)?.color)\"\n >\n <div class=\"tooltip-title\">{{ periodRange(period) }}</div>\n @if (period?.label) {\n <div class=\"tooltip-label\">{{ period?.label }}</div>\n }\n @if (period?.description) {\n <div\n class=\"tooltip-description\"\n [innerHTML]=\"period?.description\"\n ></div>\n }\n </div>\n </ng-template>\n }\n } @else if (emptyMessage()) {\n <div class=\"parentDiv\">\n <p>{{ emptyMessage() }}</p>\n </div>\n }\n</div>\n","import { NgModule } from '@angular/core';\nimport { OnemrvaTimelineComponent } from './onemrva-timeline.component';\n\n@NgModule({\n declarations: [],\n imports: [OnemrvaTimelineComponent],\n exports: [OnemrvaTimelineComponent],\n})\nexport class OnemrvaTimelineModule {}\n","/*\n * Public API Surface of timeline\n */\n\nexport * from './src/onemrva-timeline.component';\nexport * from './src/onemrva-timeline.module';\nexport * from './src/models/timeline-period.model';\nexport * from './src/models/timeline-legend.model';\nexport * from './src/models/timeline-filter.model';\nexport * from './src/models/timeline-color.model';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"onemrvapublic-design-system-timeline.mjs","sources":["../../../../projects/onemrva/design-system/timeline/src/models/timeline-color.model.ts","../../../../projects/onemrva/design-system/timeline/src/models/timeline-filter.model.ts","../../../../projects/onemrva/design-system/timeline/src/timeline.utils.ts","../../../../projects/onemrva/design-system/timeline/src/onemrva-timeline.component.ts","../../../../projects/onemrva/design-system/timeline/src/onemrva-timeline.component.html","../../../../projects/onemrva/design-system/timeline/src/onemrva-timeline.module.ts","../../../../projects/onemrva/design-system/timeline/index.ts","../../../../projects/onemrva/design-system/timeline/onemrvapublic-design-system-timeline.ts"],"sourcesContent":["/** A palette token assigned to a legend entry; resolved to a hex value via `TIMELINE_PALETTE`. */\nexport type TimelineColor =\n 'data-1' | 'data-2' | 'data-3' | 'data-4' | 'data-5' | 'data-6' | 'data-7';\n\n/** All palette tokens in display order. */\nexport const TIMELINE_COLORS: readonly TimelineColor[] = [\n 'data-1',\n 'data-2',\n 'data-3',\n 'data-4',\n 'data-5',\n 'data-6',\n 'data-7',\n];\n\n/** Maps each palette token to its hex value. */\nexport const TIMELINE_PALETTE: Record<TimelineColor, string> = {\n 'data-1': '#625d9c',\n 'data-2': '#7f56a2',\n 'data-3': '#9f499e',\n 'data-4': '#be358f',\n 'data-5': '#d71675',\n 'data-6': '#e70054',\n 'data-7': '#eb142a',\n};\n","/** A single-select filter toggle shown in the timeline header. */\nexport interface TimelineFilterOption {\n label: string;\n value: string;\n}\n\n/** Maximum filter options the timeline renders; extras are ignored. */\nexport const MAX_TIMELINE_FILTERS = 3;\n","import { TimelinePeriod } from './models/timeline-period.model';\nimport {\n MAX_TIMELINE_FILTERS,\n TimelineFilterOption,\n} from './models/timeline-filter.model';\n\nconst MS_PER_DAY = 1000 * 60 * 60 * 24;\n\nexport interface TimelineYearRange {\n baseBeginYear: number;\n baseEndYear: number;\n}\n\nexport interface TimelineBar {\n class: string;\n style: string;\n period?: TimelinePeriod;\n trackById: string;\n}\n\nexport function limitFilters(\n filters: TimelineFilterOption[],\n): TimelineFilterOption[] {\n return filters.slice(0, MAX_TIMELINE_FILTERS);\n}\n\nexport function daysBetween(a: Date, b: Date): number {\n return Math.max(1, Math.round((b.getTime() - a.getTime()) / MS_PER_DAY));\n}\n\nexport function formatDate(date: Date): string {\n const pad = (value: number) => value.toString().padStart(2, '0');\n return `${pad(date.getDate())}/${pad(date.getMonth() + 1)}/${date.getFullYear()}`;\n}\n\nexport function formatPeriodRange(period: TimelinePeriod): string {\n return `${formatDate(period.beginDate)} - ${formatDate(period.endDate)}`;\n}\n\nexport function monthsWithSize(\n year: number,\n): { month: number; widthPercent: number }[] {\n const daysInYear =\n (new Date(year, 11, 31).getTime() - new Date(year, 0, 1).getTime()) /\n MS_PER_DAY +\n 1;\n\n return Array.from({ length: 12 }, (_, month) => ({\n month: month + 1,\n widthPercent: (new Date(year, month + 1, 0).getDate() / daysInYear) * 100,\n }));\n}\n\nexport function fullTimelineRange(\n periods: TimelinePeriod[],\n): TimelineYearRange | null {\n if (!periods.length) return null;\n\n const minBegin = Math.min(...periods.map(p => p.beginDate.getTime()));\n const maxEnd = Math.max(...periods.map(p => p.endDate.getTime()));\n\n return {\n baseBeginYear: new Date(minBegin).getFullYear(),\n baseEndYear: new Date(maxEnd).getFullYear(),\n };\n}\n\nexport function splitIntoRows(periods: TimelinePeriod[]): TimelinePeriod[][] {\n const rows: TimelinePeriod[][] = [];\n const sorted = [...periods].sort(\n (a, b) => a.beginDate.getTime() - b.beginDate.getTime(),\n );\n\n for (const period of sorted) {\n const row = rows.find(\n r => r[r.length - 1].endDate.getTime() <= period.beginDate.getTime(),\n );\n if (row) {\n row.push(period);\n } else {\n rows.push([period]);\n }\n }\n\n return rows;\n}\n\nexport function buildRow(\n periods: TimelinePeriod[],\n range: { begin: Date; end: Date },\n colorOf: (period: TimelinePeriod) => string,\n): TimelineBar[] {\n if (!periods.length) return [];\n\n const result: TimelineBar[] = [];\n const { begin, end } = range;\n\n if (periods[0].beginDate > begin) {\n result.push(gapBar(begin, periods[0].beginDate));\n }\n\n let previous: TimelinePeriod | null = null;\n for (const period of periods) {\n if (previous) {\n result.push(gapBar(previous.endDate, period.beginDate));\n }\n result.push(periodBar(period, begin, end, colorOf(period)));\n previous = period;\n }\n\n if (previous && previous.endDate < end) {\n result.push(gapBar(previous.endDate, end));\n }\n\n return result;\n}\n\nfunction gapBar(from: Date, to: Date): TimelineBar {\n return bar(\n undefined,\n daysBetween(from, to),\n undefined,\n `gap-${from.getTime()}-${to.getTime()}`,\n );\n}\n\nfunction periodBar(\n period: TimelinePeriod,\n begin: Date,\n end: Date,\n color: string,\n): TimelineBar {\n const start = Math.max(begin.getTime(), period.beginDate.getTime());\n const stop = Math.min(end.getTime(), period.endDate.getTime());\n return bar(\n period,\n daysBetween(new Date(start), new Date(stop)),\n color,\n period.id,\n );\n}\n\nfunction bar(\n period: TimelinePeriod | undefined,\n diff: number,\n color: string | undefined,\n trackById: string,\n): TimelineBar {\n const classes = ['item'];\n if (period) classes.push('period', 'cursor');\n if (period?.disabled) classes.push('disabled');\n\n return {\n class: classes.join(' '),\n style: `flex: ${diff} 1 0${color ? `; background-color: ${color}` : ''}`,\n period,\n trackById,\n };\n}\n","import {\n Component,\n LOCALE_ID,\n ViewEncapsulation,\n computed,\n effect,\n inject,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatDivider } from '@angular/material/divider';\nimport {\n CdkOverlayOrigin,\n ConnectedPosition,\n OverlayModule,\n} from '@angular/cdk/overlay';\nimport { TimelinePeriod } from './models/timeline-period.model';\nimport {\n TimelineLegend,\n TimelineLegendItem,\n} from './models/timeline-legend.model';\nimport { TimelineFilterOption } from './models/timeline-filter.model';\nimport { TimelineColor, TIMELINE_PALETTE } from './models/timeline-color.model';\nimport {\n buildRow,\n formatPeriodRange,\n fullTimelineRange,\n limitFilters,\n monthsWithSize,\n splitIntoRows,\n} from './timeline.utils';\n\nlet nextTooltipId = 0;\n\n/**\n * Displays dated periods on a horizontal, year-based timeline. Overlapping\n * periods stack into rows and take their colour from the matching legend item.\n *\n * @example\n * ```html\n * <onemrva-timeline\n * title=\"Career timeline\"\n * [periods]=\"periods\"\n * [legend]=\"legend\"\n * [filters]=\"filters\"\n * [(activeFilter)]=\"activeFilter\"\n * [(selectedPeriod)]=\"selected\"\n * emptyMessage=\"No periods to display\"\n * />\n * ```\n */\n@Component({\n selector: 'onemrva-timeline',\n standalone: true,\n imports: [\n MatIcon,\n MatIconButton,\n MatButtonToggleModule,\n MatFormFieldModule,\n MatSelectModule,\n MatDivider,\n OverlayModule,\n TranslatePipe,\n ],\n templateUrl: './onemrva-timeline.component.html',\n styleUrl: './onemrva-timeline.component.scss',\n encapsulation: ViewEncapsulation.Emulated,\n host: { '[attr.title]': 'null' },\n})\nexport class OnemrvaTimelineComponent {\n private readonly fallbackColor = '#e5e5e5';\n private readonly rowHeightPx = 56;\n private readonly plotPaddingPx = 16;\n private readonly axesHeightPx = 56;\n\n /** Optional heading shown above the visible year range. */\n readonly title = input<string>('');\n\n /** Periods to plot on the timeline. */\n readonly periods = input<TimelinePeriod[]>([]);\n\n /** Legend entries that map a period `type` to its label and color. */\n readonly legend = input<TimelineLegend>();\n\n /** Size, in years, of the visible window; two-way bindable via the period dropdown. */\n readonly fixedYearCount = model<number>(5);\n\n /** Year-window sizes offered by the period dropdown. */\n readonly yearOptions = input<number[]>([1, 5, 10]);\n\n /** When true, the period dropdown offers a \"Month\" option. */\n readonly showMonthPicker = input<boolean>(false);\n\n /** Whether month numbers are shown under each year (only when the window spans at most 5 years). */\n readonly showMonths = input<boolean>(true);\n\n /** Whether period labels are rendered inside the bars. */\n readonly showLabels = input<boolean>(true);\n\n /** Whether the hover popup with period details is shown. */\n readonly showTooltip = input<boolean>(true);\n\n /** Optional max height (any CSS length) for the timeline body; rows scroll within it while the year and month axes stay pinned. Ignored when `fullSize` is true. */\n readonly maxHeight = input<string>('');\n\n /** When true, every row is shown at once and the body never scrolls; `maxHeight` is ignored. */\n readonly fullSize = input<boolean>(false);\n\n /** Single-select filter toggles shown in the header; at most three are rendered. */\n readonly filters = input<TimelineFilterOption[]>([]);\n\n /** Message shown when no periods are provided. Nothing renders when it is empty. */\n readonly emptyMessage = input<string>('');\n\n /** Currently selected period. Two-way bindable via `[(selectedPeriod)]`. */\n readonly selectedPeriod = model<TimelinePeriod | undefined>();\n\n /** Value of the currently active filter, or `undefined` when none. Two-way bindable. */\n readonly activeFilter = model<string | undefined>(undefined);\n\n /** Emits the active filter value whenever the selection changes. */\n readonly filterChange = output<string | undefined>();\n\n /**\n * Emits the unit shown on the lower axis whenever the period view changes:\n * `'months'` in the year view, or `'days'` when a single month is focused.\n */\n readonly axisUnitChange = output<'months' | 'days'>();\n\n protected readonly monthsByYear = computed(() => {\n const map = new Map<number, ReturnType<typeof monthsWithSize>>();\n for (const year of this.years()) {\n map.set(year, monthsWithSize(year));\n }\n return map;\n });\n\n protected readonly tooltipInfo = signal<TooltipInfo>({ visible: false });\n protected readonly tooltipId = `onemrva-timeline-tooltip-${nextTooltipId++}`;\n protected readonly tooltipPositions: ConnectedPosition[] = [\n {\n originX: 'center',\n originY: 'bottom',\n overlayX: 'center',\n overlayY: 'top',\n offsetY: 15,\n },\n ];\n\n protected readonly changeRange = signal<number>(0);\n protected readonly activeType = signal<string | undefined>(undefined);\n protected readonly monthMode = signal<boolean>(false);\n\n private readonly locale = inject(LOCALE_ID);\n private readonly shortMonthFormat = new Intl.DateTimeFormat(this.locale, {\n month: 'short',\n });\n private readonly longMonthFormat = new Intl.DateTimeFormat(this.locale, {\n month: 'long',\n });\n\n protected readonly focusedDate = signal<{ year: number; month: number }>({\n year: 0,\n month: 0,\n });\n\n constructor() {\n effect(() => {\n this.periods();\n this.fixedYearCount();\n this.changeRange.set(0);\n });\n }\n\n protected readonly scrollMaxHeight = computed(() => {\n if (this.fullSize()) return null;\n\n const raw = this.maxHeight().trim();\n const match = /^(\\d+)px$/.exec(raw);\n if (!match) return raw || null;\n\n const middle = Number(match[1]) - this.axesHeightPx;\n if (middle < this.rowHeightPx) return raw;\n\n const rows = Math.floor(middle / this.rowHeightPx);\n return `${rows * this.rowHeightPx + this.axesHeightPx}px`;\n });\n\n protected readonly plotHeightPx = computed(\n () => this.displayedRows().length * this.rowHeightPx + this.plotPaddingPx,\n );\n\n private readonly fullRange = computed(() =>\n fullTimelineRange(this.periods()),\n );\n\n private readonly totalYears = computed(() => {\n const range = this.fullRange();\n return range ? range.baseEndYear - range.baseBeginYear + 1 : 0;\n });\n\n private readonly maxOffset = computed(() =>\n Math.max(0, this.totalYears() - this.fixedYearCount()),\n );\n\n private readonly offset = computed(() =>\n Math.min(Math.max(this.changeRange(), 0), this.maxOffset()),\n );\n\n protected readonly displayRange = computed(() => {\n const range = this.fullRange();\n if (!range) return null;\n\n if (this.monthMode()) {\n const year = this.focusedDate().year;\n return { beginYear: year, endYear: year };\n }\n\n if (this.fixedYearCount() >= this.totalYears()) {\n return { beginYear: range.baseBeginYear, endYear: range.baseEndYear };\n }\n\n const beginYear = range.baseBeginYear + this.offset();\n return { beginYear, endYear: beginYear + this.fixedYearCount() - 1 };\n });\n\n protected readonly canPrevious = computed(\n () => this.fixedYearCount() < this.totalYears() && this.offset() > 0,\n );\n\n protected readonly canNext = computed(\n () =>\n this.fixedYearCount() < this.totalYears() &&\n this.offset() < this.maxOffset(),\n );\n\n protected readonly monthList = computed(() => {\n const range = this.fullRange();\n if (!range) return [];\n\n const list: { value: string; label: string }[] = [];\n for (let year = range.baseBeginYear; year <= range.baseEndYear; year++) {\n for (let month = 1; month <= 12; month++) {\n list.push({\n value: `${year}-${String(month).padStart(2, '0')}`,\n label: `${this.shortMonthFormat.format(new Date(year, month - 1, 1))} ${year}`,\n });\n }\n }\n return list;\n });\n\n protected readonly monthLabel = computed(() => {\n const focused = this.focusedDate();\n return `${this.longMonthFormat.format(new Date(focused.year, focused.month, 1))} ${focused.year}`;\n });\n\n protected readonly focusedMonthValue = computed(() => {\n const focused = this.focusedDate();\n return `${focused.year}-${String(focused.month + 1).padStart(2, '0')}`;\n });\n\n protected readonly canPreviousMonth = computed(() => {\n const range = this.fullRange();\n const focused = this.focusedDate();\n if (!range) return false;\n return focused.year > range.baseBeginYear || focused.month > 0;\n });\n\n protected readonly canNextMonth = computed(() => {\n const range = this.fullRange();\n const focused = this.focusedDate();\n if (!range) return false;\n return focused.year < range.baseEndYear || focused.month < 11;\n });\n\n protected readonly years = computed(() => {\n const range = this.displayRange();\n if (!range) return [];\n\n return Array.from(\n { length: range.endYear - range.beginYear + 1 },\n (_, i) => range.beginYear + i,\n );\n });\n\n private readonly displayWindow = computed(() => {\n const range = this.displayRange();\n if (!range) return null;\n\n if (this.monthMode()) {\n const { year, month } = this.focusedDate();\n return {\n begin: new Date(year, month, 1),\n end: new Date(year, month + 1, 0),\n };\n }\n\n return {\n begin: new Date(range.beginYear, 0, 1),\n end: new Date(range.endYear, 11, 31),\n };\n });\n\n protected readonly visiblePeriods = computed(() => {\n const bounds = this.displayWindow();\n if (!bounds) return [];\n\n return this.periods()\n .filter(p => p.endDate >= bounds.begin && p.beginDate <= bounds.end)\n .sort((a, b) => a.beginDate.getTime() - b.beginDate.getTime());\n });\n\n protected readonly displayedRows = computed(() => {\n const bounds = this.displayWindow();\n const periods = this.visiblePeriods();\n if (!bounds || !periods.length) return [];\n\n return splitIntoRows(periods).map(row =>\n buildRow(row, bounds, period => this.colorOf(period)),\n );\n });\n\n protected readonly focusedMonthDays = computed(() => {\n const { year, month } = this.focusedDate();\n const days = new Date(year, month + 1, 0).getDate();\n return Array.from({ length: days }, (_, i) => i + 1);\n });\n\n protected readonly dayWidthPercent = computed(() => {\n const count = this.focusedMonthDays().length;\n return count ? 100 / count : 0;\n });\n\n protected readonly sortedLegend = computed(() => {\n const seen = new Set<string>();\n return (this.legend() ?? [])\n .filter(item => {\n if (seen.has(item.type)) return false;\n seen.add(item.type);\n return true;\n })\n .sort((a, b) => a.label.localeCompare(b.label));\n });\n\n protected readonly visibleFilters = computed(() =>\n limitFilters(this.filters()),\n );\n\n protected getLegend(type?: string): TimelineLegendItem | undefined {\n if (!type) return undefined;\n return this.legend()?.find(l => l.type === type);\n }\n\n protected colorHex(color?: TimelineColor): string {\n return color ? TIMELINE_PALETTE[color] : this.fallbackColor;\n }\n\n private colorOf(period: TimelinePeriod): string {\n return this.colorHex(this.getLegend(period.type)?.color);\n }\n\n protected periodRange(period?: TimelinePeriod): string {\n return period ? formatPeriodRange(period) : '';\n }\n\n protected nextYear(): void {\n this.changeRange.set(Math.min(this.maxOffset(), this.offset() + 1));\n }\n\n protected previousYear(): void {\n this.changeRange.set(Math.max(0, this.offset() - 1));\n }\n\n protected onPeriodChange(value: string | number): void {\n if (value === 'month') {\n const range = this.fullRange();\n const periods = this.periods();\n const earliest = periods.length\n ? periods.reduce((a, b) => (a.beginDate <= b.beginDate ? a : b))\n : null;\n this.focusedDate.set({\n year: earliest?.beginDate.getFullYear() ?? range?.baseBeginYear ?? 0,\n month: earliest?.beginDate.getMonth() ?? 0,\n });\n this.monthMode.set(true);\n this.axisUnitChange.emit('days');\n } else {\n this.monthMode.set(false);\n this.changeRange.set(0);\n this.fixedYearCount.set(Number(value));\n this.axisUnitChange.emit('months');\n }\n }\n\n protected goToMonth(value: string): void {\n if (!value) return;\n const year = Number(value.slice(0, 4));\n const month = Number(value.slice(5, 7)) - 1;\n if (Number.isNaN(year) || Number.isNaN(month)) return;\n this.focusedDate.set({ year, month });\n }\n\n protected previousMonth(): void {\n const { year, month } = this.focusedDate();\n if (!this.canPreviousMonth()) return;\n this.focusedDate.set(\n month > 0 ? { year, month: month - 1 } : { year: year - 1, month: 11 },\n );\n }\n\n protected nextMonth(): void {\n const { year, month } = this.focusedDate();\n if (!this.canNextMonth()) return;\n this.focusedDate.set(\n month < 11 ? { year, month: month + 1 } : { year: year + 1, month: 0 },\n );\n }\n\n protected onFilterChange(value: string | undefined): void {\n this.activeFilter.set(value);\n this.filterChange.emit(value);\n }\n\n protected selectPeriod(period?: TimelinePeriod): void {\n if (!period || period.disabled) return;\n this.activeType.set(undefined);\n this.selectedPeriod.set(period);\n }\n\n protected onLegendSelect(item: TimelineLegendItem): void {\n const match = this.periods().find(p => p.type === item.type && !p.disabled);\n if (!match) return;\n\n if (this.monthMode()) {\n this.focusedDate.set({\n year: match.beginDate.getFullYear(),\n month: match.beginDate.getMonth(),\n });\n } else {\n const range = this.fullRange();\n if (range) {\n const target = match.beginDate.getFullYear() - range.baseBeginYear;\n this.changeRange.set(Math.min(Math.max(target, 0), this.maxOffset()));\n }\n }\n\n this.activeType.set(item.type);\n this.selectedPeriod.set(match);\n }\n\n protected isActive(period?: TimelinePeriod): boolean {\n if (!period || period.disabled) return false;\n const type = this.activeType();\n if (type && period.type === type) return true;\n return period.id === this.selectedPeriod()?.id;\n }\n\n protected showPeriodTooltip(\n period?: TimelinePeriod,\n origin?: CdkOverlayOrigin,\n ): void {\n if (!period) return;\n this.tooltipInfo.set({ visible: true, period, origin });\n }\n\n protected hidePeriodTooltip(): void {\n this.tooltipInfo.set({ visible: false });\n }\n\n protected isTooltipOpenFor(period?: TimelinePeriod): boolean {\n const info = this.tooltipInfo();\n return info.visible && !!period && info.period?.id === period.id;\n }\n\n protected ariaLabel(period?: TimelinePeriod): string | null {\n if (!period) return null;\n const name = period.label ?? period.type ?? '';\n return [name, this.periodRange(period)].filter(Boolean).join(', ') || null;\n }\n}\n\ninterface TooltipInfo {\n visible: boolean;\n period?: TimelinePeriod;\n origin?: CdkOverlayOrigin;\n}\n","<div class=\"container\">\n @if (periods().length !== 0) {\n <div class=\"navigation\">\n <div class=\"nav-info\">\n @if (title()) {\n <p class=\"timeline-title\">{{ title() }}</p>\n }\n <span class=\"timeline-range\">\n @if (monthMode()) {\n {{ monthLabel() }}\n } @else {\n {{ displayRange()?.beginYear }} - {{ displayRange()?.endYear }}\n }\n </span>\n </div>\n\n <div class=\"nav-controls\">\n <div class=\"nav-pager\">\n <button\n mat-icon-button\n data-cy=\"timeline-prev\"\n [attr.aria-label]=\"\n (monthMode() ? 'timeline.previousMonth' : 'timeline.previousYear')\n | translate\n \"\n [disabled]=\"monthMode() ? !canPreviousMonth() : !canPrevious()\"\n (click)=\"monthMode() ? previousMonth() : previousYear()\"\n >\n <mat-icon>arrow_back_ios</mat-icon>\n </button>\n <button\n mat-icon-button\n data-cy=\"timeline-next\"\n [attr.aria-label]=\"\n (monthMode() ? 'timeline.nextMonth' : 'timeline.nextYear')\n | translate\n \"\n [disabled]=\"monthMode() ? !canNextMonth() : !canNext()\"\n (click)=\"monthMode() ? nextMonth() : nextYear()\"\n >\n <mat-icon>arrow_forward_ios</mat-icon>\n </button>\n </div>\n\n <mat-form-field\n class=\"timeline-field timeline-period\"\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n >\n <mat-label>{{ 'timeline.period' | translate }}</mat-label>\n <mat-select\n [attr.aria-label]=\"'timeline.period' | translate\"\n [value]=\"monthMode() ? 'month' : fixedYearCount()\"\n (selectionChange)=\"onPeriodChange($event.value)\"\n >\n @if (showMonthPicker()) {\n <mat-option value=\"month\" data-cy=\"timeline-period-month\">\n {{ 'timeline.month' | translate }}\n </mat-option>\n }\n @for (option of yearOptions(); track option) {\n <mat-option\n [value]=\"option\"\n [attr.data-cy]=\"'timeline-period-' + option\"\n >\n {{ option }}\n {{\n (option === 1 ? 'timeline.year' : 'timeline.years')\n | translate\n }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n @if (showMonthPicker() && monthMode()) {\n <mat-form-field\n class=\"timeline-field timeline-month-jump\"\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n >\n <mat-label>{{ 'timeline.goToMonth' | translate }}</mat-label>\n <mat-select\n data-cy=\"timeline-month-jump\"\n [attr.aria-label]=\"'timeline.goToMonth' | translate\"\n [value]=\"focusedMonthValue()\"\n (selectionChange)=\"goToMonth($event.value)\"\n >\n @for (month of monthList(); track month.value) {\n <mat-option [value]=\"month.value\">{{ month.label }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n\n @if (visibleFilters().length) {\n <mat-divider vertical class=\"nav-divider\" />\n <mat-button-toggle-group\n class=\"timeline-filters\"\n [value]=\"activeFilter()\"\n (change)=\"onFilterChange($any($event).value)\"\n >\n @for (filter of visibleFilters(); track filter.value) {\n <mat-button-toggle\n class=\"filter-toggle\"\n [value]=\"filter.value\"\n [attr.aria-label]=\"filter.label\"\n >\n {{ filter.label }}\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n }\n </div>\n </div>\n\n <div\n class=\"timeline-scroll\"\n [class.full-size]=\"fullSize()\"\n [style.max-height]=\"scrollMaxHeight()\"\n >\n <div class=\"timelineContainer\">\n <div class=\"timeline-years\">\n @for (year of years(); track 'axis-' + year) {\n <div class=\"axis-col\">{{ monthMode() ? monthLabel() : year }}</div>\n }\n </div>\n\n <div class=\"timeline-plot\" [style.height.px]=\"plotHeightPx()\">\n <div class=\"timeline-grid\">\n @for (year of years(); track 'grid-' + year) {\n <div class=\"grid-col\"></div>\n }\n </div>\n\n <div class=\"timeline\">\n @for (row of displayedRows(); track $index) {\n <div class=\"timeline-row\">\n @for (item of row; track item.trackById) {\n <div\n [class]=\"item.class\"\n [class.selected]=\"isActive(item.period)\"\n [style]=\"item.style\"\n [attr.role]=\"\n item.period && !item.period.disabled ? 'button' : null\n \"\n [attr.tabindex]=\"\n item.period && !item.period.disabled ? 0 : null\n \"\n [attr.aria-label]=\"ariaLabel(item?.period)\"\n [attr.aria-describedby]=\"\n isTooltipOpenFor(item?.period) ? tooltipId : null\n \"\n (mouseenter)=\"showPeriodTooltip(item?.period, origin)\"\n (mouseleave)=\"hidePeriodTooltip()\"\n (focus)=\"showPeriodTooltip(item?.period, origin)\"\n (blur)=\"hidePeriodTooltip()\"\n (click)=\"selectPeriod(item?.period)\"\n (keydown.enter)=\"selectPeriod(item?.period)\"\n (keydown.space)=\"selectPeriod(item?.period)\"\n (keydown.escape)=\"hidePeriodTooltip()\"\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\"\n >\n @if (showLabels() && item.period?.label) {\n <span class=\"period-label\">{{ item.period.label }}</span>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n @if (showMonths() && years().length <= 5) {\n <div class=\"timeline-months\">\n @if (monthMode()) {\n <div class=\"months-col\">\n @for (day of focusedMonthDays(); track day) {\n <span class=\"month\" [style.width.%]=\"dayWidthPercent()\">{{\n day\n }}</span>\n }\n </div>\n } @else {\n @for (year of years(); track 'months-' + year) {\n <div class=\"months-col\">\n @for (\n month of monthsByYear().get(year) ?? [];\n track month.month\n ) {\n <span class=\"month\" [style.width.%]=\"month.widthPercent\">{{\n month.month\n }}</span>\n }\n </div>\n }\n }\n </div>\n }\n </div>\n </div>\n\n <div class=\"timeline-legend\">\n @for (legendItem of sortedLegend(); track legendItem) {\n <button\n type=\"button\"\n class=\"legend-item\"\n [attr.aria-label]=\"\n 'timeline.goTo' | translate: { label: legendItem.label }\n \"\n (click)=\"onLegendSelect(legendItem)\"\n >\n <span\n class=\"legend-color\"\n [style.background-color]=\"colorHex(legendItem.color)\"\n ></span>\n <span class=\"legend-label\">{{ legendItem.label }}</span>\n </button>\n }\n </div>\n\n @if (showTooltip() && tooltipInfo().visible && tooltipInfo().origin) {\n @let period = tooltipInfo().period;\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"tooltipInfo().origin!\"\n [cdkConnectedOverlayOpen]=\"true\"\n [cdkConnectedOverlayPositions]=\"tooltipPositions\"\n >\n <div\n class=\"tooltip\"\n role=\"tooltip\"\n [id]=\"tooltipId\"\n [style.border-color]=\"colorHex(getLegend(period?.type)?.color)\"\n >\n <div class=\"tooltip-title\">{{ periodRange(period) }}</div>\n @if (period?.label) {\n <div class=\"tooltip-label\">{{ period?.label }}</div>\n }\n @if (period?.description) {\n <div\n class=\"tooltip-description\"\n [innerHTML]=\"period?.description\"\n ></div>\n }\n </div>\n </ng-template>\n }\n } @else if (emptyMessage()) {\n <div class=\"parentDiv\">\n <p>{{ emptyMessage() }}</p>\n </div>\n }\n</div>\n","import { NgModule } from '@angular/core';\nimport { OnemrvaTimelineComponent } from './onemrva-timeline.component';\n\n@NgModule({\n declarations: [],\n imports: [OnemrvaTimelineComponent],\n exports: [OnemrvaTimelineComponent],\n})\nexport class OnemrvaTimelineModule {}\n","/*\n * Public API Surface of timeline\n */\n\nexport * from './src/onemrva-timeline.component';\nexport * from './src/onemrva-timeline.module';\nexport * from './src/models/timeline-period.model';\nexport * from './src/models/timeline-legend.model';\nexport * from './src/models/timeline-filter.model';\nexport * from './src/models/timeline-color.model';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  // Auto-generated — do not edit
2
- const VERSION = '22.0.0-develop.22';
2
+ const VERSION = '22.0.0-develop.23';
3
3
 
4
4
  const ɵɵtsModuleIndicatorApiExtractorWorkaround = true;
5
5
 
@@ -1 +1 @@
1
- {"version":3,"file":"onemrvapublic-design-system.mjs","sources":["../../../../projects/onemrva/design-system/version.ts","../../../../projects/onemrva/design-system/index.ts","../../../../projects/onemrva/design-system/onemrvapublic-design-system.ts"],"sourcesContent":["// Auto-generated — do not edit\nexport const VERSION = '22.0.0-develop.22';\n","export { VERSION } from './version';\n\nexport const ɵɵtsModuleIndicatorApiExtractorWorkaround = true;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"AAAA;AACO,MAAM,OAAO,GAAG;;ACChB,MAAM,yCAAyC,GAAG;;ACFzD;;AAEG;;;;"}
1
+ {"version":3,"file":"onemrvapublic-design-system.mjs","sources":["../../../../projects/onemrva/design-system/version.ts","../../../../projects/onemrva/design-system/index.ts","../../../../projects/onemrva/design-system/onemrvapublic-design-system.ts"],"sourcesContent":["// Auto-generated — do not edit\nexport const VERSION = '22.0.0-develop.23';\n","export { VERSION } from './version';\n\nexport const ɵɵtsModuleIndicatorApiExtractorWorkaround = true;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"AAAA;AACO,MAAM,OAAO,GAAG;;ACChB,MAAM,yCAAyC,GAAG;;ACFzD;;AAEG;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onemrvapublic/design-system",
3
- "version": "22.0.0-develop.22",
3
+ "version": "22.0.0-develop.23",
4
4
  "description": "Design System Onem/Rva without theme included",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -1,5 +1,15 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
 
3
+ /**
4
+ * Content card with configurable image, border, and fill variants.
5
+ *
6
+ * Exposes 12 inputs and 0 outputs.
7
+ * Inputs: type: 'no-background' | 'outline' | 'background', image, imageSrc, imageAlt, label, title, subtitle, description, helpText, coloredTitle: boolean, textColor: string, width: string.
8
+ * Outputs: none.
9
+ *
10
+ * @MatKeywords card, container, content, surface, panel
11
+ * @MatGroup Card
12
+ */
3
13
  declare class OnemrvaCardComponent {
4
14
  /** Visual variant of the card. */
5
15
  readonly type: _angular_core.InputSignal<"no-background" | "outline" | "background">;
@@ -18,7 +28,7 @@ declare class OnemrvaCardComponent {
18
28
  readonly textColor: _angular_core.InputSignal<string | undefined>;
19
29
  readonly width: _angular_core.InputSignal<string | undefined>;
20
30
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<OnemrvaCardComponent, never>;
21
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<OnemrvaCardComponent, "onemrva-card", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "imageSrc": { "alias": "imageSrc"; "required": false; "isSignal": true; }; "imageAlt": { "alias": "imageAlt"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "helpText": { "alias": "helpText"; "required": false; "isSignal": true; }; "coloredTitle": { "alias": "coloredTitle"; "required": false; "isSignal": true; }; "textColor": { "alias": "textColor"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; }, {}, never, ["[cardActions]"], true, never>;
31
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OnemrvaCardComponent, "onemrva-card", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "imageSrc": { "alias": "imageSrc"; "required": false; "isSignal": true; }; "imageAlt": { "alias": "imageAlt"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "helpText": { "alias": "helpText"; "required": false; "isSignal": true; }; "coloredTitle": { "alias": "coloredTitle"; "required": false; "isSignal": true; }; "textColor": { "alias": "textColor"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; }, {}, never, ["[cardAvatar]", "*", "[cardActions]"], true, never>;
22
32
  }
23
33
 
24
34
  declare class OnemrvaCardModule {
@@ -1,5 +1,15 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
 
3
+ /**
4
+ * Country flag image resolved from an ISO 3166-1 alpha-2 code.
5
+ *
6
+ * Exposes 3 inputs and 0 outputs.
7
+ * Inputs: countryCode: string | null | undefined, mode: 'square' | 'rectangle', width.
8
+ * Outputs: none.
9
+ *
10
+ * @MatKeywords flag, country, icon, locale
11
+ * @MatGroup Misc
12
+ */
3
13
  declare class FlagIconComponent {
4
14
  readonly countryCode: _angular_core.InputSignal<string | null | undefined>;
5
15
  readonly mode: _angular_core.InputSignal<"square" | "rectangle">;
@@ -22,6 +22,16 @@ import * as i24 from '@onemrvapublic/design-system/mat-avatar';
22
22
  import * as i25 from '@angular/material/tooltip';
23
23
  import * as i27 from '@angular/material/core';
24
24
 
25
+ /**
26
+ * Child route item nested under a top-level navigation route.
27
+ *
28
+ * Exposes 6 inputs and 0 outputs.
29
+ * Inputs: customNgClass: any, routerLink: typeof RouterLink.prototype.routerLink | string, routerLinkActiveOptions: any, dataCy: string, label: string, icon: string.
30
+ * Outputs: none.
31
+ *
32
+ * @MatKeywords layout, subroute, route, navigation, menu-item
33
+ * @MatGroup Layout
34
+ */
25
35
  declare class LayoutSubrouteComponent implements AfterViewInit {
26
36
  private cd;
27
37
  private router;
@@ -41,6 +51,16 @@ declare class LayoutSubrouteComponent implements AfterViewInit {
41
51
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<LayoutSubrouteComponent, "onemrva-layout-subroute", never, { "customNgClass": { "alias": "customNgClass"; "required": false; "isSignal": true; }; "routerLink": { "alias": "routerLink"; "required": false; "isSignal": true; }; "routerLinkActiveOptions": { "alias": "routerLinkActiveOptions"; "required": false; "isSignal": true; }; "dataCy": { "alias": "dataCy"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; }, {}, ["subroutes"], never, true, never>;
42
52
  }
43
53
 
54
+ /**
55
+ * Top-level navigation route item with optional sub-items.
56
+ *
57
+ * Exposes 7 inputs and 0 outputs.
58
+ * Inputs: customNgClass: any, routerLink: string, routerLinkActiveOptions: any, dataCy: string, baseRouteForActiveMenu: string, label: string, icon: string.
59
+ * Outputs: none.
60
+ *
61
+ * @MatKeywords layout, route, navigation, menu-item
62
+ * @MatGroup Layout
63
+ */
44
64
  declare class LayoutRouteComponent implements AfterViewInit {
45
65
  readonly customNgClass: _angular_core.InputSignal<any>;
46
66
  readonly template: _angular_core.Signal<TemplateRef<any> | null | undefined>;
@@ -60,6 +80,16 @@ declare class LayoutRouteComponent implements AfterViewInit {
60
80
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<LayoutRouteComponent, "onemrva-layout-route", never, { "customNgClass": { "alias": "customNgClass"; "required": false; "isSignal": true; }; "routerLink": { "alias": "routerLink"; "required": false; "isSignal": true; }; "routerLinkActiveOptions": { "alias": "routerLinkActiveOptions"; "required": false; "isSignal": true; }; "dataCy": { "alias": "dataCy"; "required": false; "isSignal": true; }; "baseRouteForActiveMenu": { "alias": "baseRouteForActiveMenu"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; }, {}, ["subroutes"], never, true, never>;
61
81
  }
62
82
 
83
+ /**
84
+ * Main content area slot in the application shell.
85
+ *
86
+ * Exposes 1 input and 0 outputs.
87
+ * Inputs: customNgClass: any.
88
+ * Outputs: none.
89
+ *
90
+ * @MatKeywords layout, content, main, page
91
+ * @MatGroup Layout
92
+ */
63
93
  declare class LayoutContentComponent implements AfterViewInit {
64
94
  readonly customNgClass: _angular_core.InputSignal<any>;
65
95
  readonly template: _angular_core.Signal<TemplateRef<any> | undefined>;
@@ -69,6 +99,16 @@ declare class LayoutContentComponent implements AfterViewInit {
69
99
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<LayoutContentComponent, "onemrva-layout-content", never, { "customNgClass": { "alias": "customNgClass"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
70
100
  }
71
101
 
102
+ /**
103
+ * Page title slot in the application header toolbar.
104
+ *
105
+ * Exposes 1 input and 0 outputs.
106
+ * Inputs: customNgClass: any.
107
+ * Outputs: none.
108
+ *
109
+ * @MatKeywords layout, title, header, toolbar
110
+ * @MatGroup Layout
111
+ */
72
112
  declare class LayoutTitleComponent implements AfterViewInit {
73
113
  private cd;
74
114
  readonly customNgClass: _angular_core.InputSignal<any>;
@@ -85,6 +125,14 @@ declare enum Environment {
85
125
  PROD = "PROD"
86
126
  }
87
127
 
128
+ /**
129
+ * Footer slot projected into the application shell.
130
+ *
131
+ * This component exposes no configurable inputs or outputs.
132
+ *
133
+ * @MatKeywords layout, footer, shell
134
+ * @MatGroup Layout
135
+ */
88
136
  declare class LayoutFooterComponent {
89
137
  readonly template: _angular_core.Signal<TemplateRef<any> | undefined>;
90
138
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<LayoutFooterComponent, never>;
@@ -114,6 +162,16 @@ declare class OnemRvaProfile {
114
162
  logout(): void;
115
163
  }
116
164
 
165
+ /**
166
+ * User/login menu slot projected into the toolbar.
167
+ *
168
+ * Exposes 1 input and 0 outputs.
169
+ * Inputs: customNgClass: any.
170
+ * Outputs: none.
171
+ *
172
+ * @MatKeywords layout, login, user, menu, auth, toolbar
173
+ * @MatGroup Layout
174
+ */
117
175
  declare class LayoutLoginMenuComponent implements AfterViewInit {
118
176
  private cd;
119
177
  readonly customNgClass: _angular_core.InputSignal<any>;
@@ -168,6 +226,16 @@ declare class OnemrvaLeftSidenavService {
168
226
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<OnemrvaLeftSidenavService>;
169
227
  }
170
228
 
229
+ /**
230
+ * Slot projected after the navigation bar in the app shell.
231
+ *
232
+ * Exposes 1 input and 0 outputs.
233
+ * Inputs: customNgClass: any.
234
+ * Outputs: none.
235
+ *
236
+ * @MatKeywords layout, slot, after-nav
237
+ * @MatGroup Layout
238
+ */
171
239
  declare class LayoutAfterNavComponent implements AfterViewInit {
172
240
  private cd;
173
241
  readonly customNgClass: _angular_core.InputSignal<any>;
@@ -177,6 +245,16 @@ declare class LayoutAfterNavComponent implements AfterViewInit {
177
245
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<LayoutAfterNavComponent, "onemrva-layout-after-nav", never, { "customNgClass": { "alias": "customNgClass"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
178
246
  }
179
247
 
248
+ /**
249
+ * Application shell composing header, sidenav, content, and footer slots.
250
+ *
251
+ * Exposes 8 inputs and 2 outputs.
252
+ * Inputs: logo, languages: OnemRvaLanguage[], environment: Environment, logoRedictionUrl: (string | any[] | null) | undefined, profile: OnemRvaProfile | null, id, role, showThemeSwitcher.
253
+ * Outputs: login: void, logout: void.
254
+ *
255
+ * @MatKeywords layout, shell, page, app, sidenav, header, footer
256
+ * @MatGroup Layout
257
+ */
180
258
  declare class LayoutComponent implements OnInit, AfterViewInit, OnDestroy {
181
259
  readonly routes: Signal<readonly LayoutRouteComponent[]>;
182
260
  readonly title: Signal<LayoutTitleComponent | undefined>;
@@ -238,6 +316,16 @@ declare class LayoutComponent implements OnInit, AfterViewInit, OnDestroy {
238
316
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<LayoutComponent, "onemrva-layout", never, { "logo": { "alias": "logo"; "required": false; "isSignal": true; }; "languages": { "alias": "languages"; "required": false; "isSignal": true; }; "environment": { "alias": "environment"; "required": false; "isSignal": true; }; "logoRedictionUrl": { "alias": "logoRedictionUrl"; "required": false; "isSignal": true; }; "profile": { "alias": "profile"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "role": { "alias": "role"; "required": false; "isSignal": true; }; "showThemeSwitcher": { "alias": "showThemeSwitcher"; "required": false; "isSignal": true; }; }, { "login": "login"; "logout": "logout"; }, ["routes", "title", "loginMenu", "content", "afterNav", "footer"], ["onemrva-mat-notification"], true, never>;
239
317
  }
240
318
 
319
+ /**
320
+ * Sidenav with route list, language selector, and collapse support.
321
+ *
322
+ * Exposes 2 inputs and 0 outputs.
323
+ * Inputs: isSmall (required): boolean, languages: OnemRvaLanguage[].
324
+ * Outputs: none.
325
+ *
326
+ * @MatKeywords layout, sidenav, navigation, sidebar, routes
327
+ * @MatGroup Layout
328
+ */
241
329
  declare class LayoutSidenavComponent implements OnInit {
242
330
  readonly isSmall: _angular_core.InputSignal<boolean>;
243
331
  readonly routes: _angular_core.InputSignal<QueryList<LayoutRouteComponent> | undefined>;
@@ -257,6 +345,16 @@ declare class LayoutSidenavComponent implements OnInit {
257
345
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<LayoutSidenavComponent, "onemrva-layout-sidenav", never, { "isSmall": { "alias": "isSmall"; "required": true; "isSignal": true; }; "routes": { "alias": "routes"; "required": false; "isSignal": true; }; "languages": { "alias": "languages"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
258
346
  }
259
347
 
348
+ /**
349
+ * Collapsible left sidenav panel with navigation item list.
350
+ *
351
+ * Exposes 2 inputs and 0 outputs.
352
+ * Inputs: items: NavItem[], isCollapsed.
353
+ * Outputs: none.
354
+ *
355
+ * @MatKeywords layout, sidenav, navigation, sidebar, collapse
356
+ * @MatGroup Layout
357
+ */
260
358
  declare class LayoutLeftSidenavComponent {
261
359
  readonly items: _angular_core.ModelSignal<NavItem[]>;
262
360
  readonly leftSidenavService: OnemrvaLeftSidenavService;
@@ -268,24 +366,58 @@ declare class LayoutLeftSidenavComponent {
268
366
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<LayoutLeftSidenavComponent, "onemrva-layout-left-sidenav", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "isCollapsed": { "alias": "isCollapsed"; "required": false; "isSignal": true; }; }, { "items": "itemsChange"; "isCollapsed": "isCollapsedChange"; }, never, ["*"], true, never>;
269
367
  }
270
368
 
369
+ /**
370
+ * Title slot at the top of the side navigation panel.
371
+ *
372
+ * This component exposes no configurable inputs or outputs.
373
+ *
374
+ * @MatKeywords layout, sidenav, title, navigation
375
+ * @MatGroup Layout
376
+ */
271
377
  declare class LayoutSidenavTitleComponent {
272
378
  readonly template: _angular_core.Signal<TemplateRef<any> | undefined>;
273
379
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<LayoutSidenavTitleComponent, never>;
274
380
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<LayoutSidenavTitleComponent, "onemrva-layout-sidenav-title", never, {}, {}, never, ["*"], true, never>;
275
381
  }
276
382
 
383
+ /**
384
+ * Action buttons region at the bottom of a drawer panel.
385
+ *
386
+ * This component exposes no configurable inputs or outputs.
387
+ *
388
+ * @MatKeywords drawer, actions, sidebar
389
+ * @MatGroup Layout
390
+ */
277
391
  declare class LayoutDrawerActionsComponent {
278
392
  drawerService: OnemrvaDrawerService;
279
393
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<LayoutDrawerActionsComponent, never>;
280
394
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<LayoutDrawerActionsComponent, "onemrva-drawer-actions", never, {}, {}, never, ["*"], true, never>;
281
395
  }
282
396
 
397
+ /**
398
+ * Scrollable body region inside a drawer panel.
399
+ *
400
+ * This component exposes no configurable inputs or outputs.
401
+ *
402
+ * @MatKeywords drawer, content, sidebar
403
+ * @MatGroup Layout
404
+ */
283
405
  declare class LayoutDrawerContentComponent {
284
406
  drawerService: OnemrvaDrawerService;
285
407
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<LayoutDrawerContentComponent, never>;
286
408
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<LayoutDrawerContentComponent, "onemrva-drawer-content", never, {}, {}, never, ["*"], true, never>;
287
409
  }
288
410
 
411
+ /**
412
+ * Title bar with close button for a drawer panel.
413
+ *
414
+ * Exposes 1 input and 0 outputs.
415
+ * Inputs: showClose.
416
+ * Outputs: none.
417
+ *
418
+ * @MatKeywords drawer, title, close, sidebar
419
+ * @MatGroup Layout
420
+ */
289
421
  declare class LayoutDrawerTitleComponent {
290
422
  readonly showClose: _angular_core.InputSignal<boolean>;
291
423
  drawerService: OnemrvaDrawerService;
@@ -12,24 +12,13 @@ type MatAvatarType = (typeof MatAvatarType)[keyof typeof MatAvatarType];
12
12
  /**
13
13
  * Avatar provides a way to display an image, icon or initials to the user.
14
14
  *
15
- * @MatModule OnemrvaMatAvatarModule
16
- *
17
- * @MatTheme onemrva-mat-avatar-theme, onemrva-mat-icon-theme
15
+ * Exposes 6 inputs and 0 outputs.
16
+ * Inputs: id, roundShape, initials, text, icon, src.
17
+ * Outputs: none.
18
18
  *
19
19
  * @MatKeywords avatar, profile, picture, initials
20
- *
21
20
  * @MatGroup Layouts
22
- *
23
- * @remarks
24
- *
25
- * The Ignite UI Avatar provides an easy way to add an avatar icon to your application. This icon can be an
26
- * image, someone's initials or a material icon from the Google Material icon set.
27
- *
28
- * @example
29
- * ```html
30
- * <onemrva-mat-avatar initials="MS" [roundShape]="true" size="large">
31
- * </onemrva-mat-avatar>
32
- * ```
21
+ * @MatTheme onemrva-mat-avatar-theme, onemrva-mat-icon-theme
33
22
  */
34
23
  declare class OnemrvaMatAvatarComponent implements OnInit {
35
24
  readonly id: _angular_core.InputSignal<string>;
@@ -23,6 +23,16 @@ declare class OnemrvaMatBreadcrumbService {
23
23
  static ɵprov: i0.ɵɵInjectableDeclaration<OnemrvaMatBreadcrumbService>;
24
24
  }
25
25
 
26
+ /**
27
+ * Breadcrumb trail showing the current navigation hierarchy.
28
+ *
29
+ * Exposes 1 input and 0 outputs.
30
+ * Inputs: paths: OnemrvaBreadcrumb[].
31
+ * Outputs: none.
32
+ *
33
+ * @MatKeywords breadcrumb, navigation, path, trail
34
+ * @MatGroup Navigation
35
+ */
26
36
  declare class OnemrvaMatBreadcrumbComponent {
27
37
  paths: i0.InputSignal<OnemrvaBreadcrumb[]>;
28
38
  breadcrumbs: Signal<OnemrvaBreadcrumb[]>;