@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.
- package/README.md +34 -3
- package/card/src/onemrva-card.component.scss +23 -0
- package/fesm2022/onemrvapublic-design-system-card.mjs +12 -2
- package/fesm2022/onemrvapublic-design-system-card.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-flag-icon.mjs +10 -0
- package/fesm2022/onemrvapublic-design-system-flag-icon.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-layout.mjs +135 -1
- package/fesm2022/onemrvapublic-design-system-layout.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-avatar.mjs +4 -15
- package/fesm2022/onemrvapublic-design-system-mat-avatar.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-breadcrumb.mjs +10 -0
- package/fesm2022/onemrvapublic-design-system-mat-breadcrumb.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-carousel.mjs +18 -0
- package/fesm2022/onemrvapublic-design-system-mat-carousel.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-choice-chip.mjs +10 -0
- package/fesm2022/onemrvapublic-design-system-mat-choice-chip.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-copy-to-clipboard.mjs +10 -0
- package/fesm2022/onemrvapublic-design-system-mat-copy-to-clipboard.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-country-item.mjs +10 -0
- package/fesm2022/onemrvapublic-design-system-mat-country-item.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-datepicker-header.mjs +8 -0
- package/fesm2022/onemrvapublic-design-system-mat-datepicker-header.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-empty-row.mjs +7 -0
- package/fesm2022/onemrvapublic-design-system-mat-empty-row.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-file-upload.mjs +20 -0
- package/fesm2022/onemrvapublic-design-system-mat-file-upload.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-input-address.mjs +10 -0
- package/fesm2022/onemrvapublic-design-system-mat-input-address.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-input-birthplace.mjs +10 -0
- package/fesm2022/onemrvapublic-design-system-mat-input-birthplace.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-input-country.mjs +10 -0
- package/fesm2022/onemrvapublic-design-system-mat-input-country.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-input-enterprise-number.mjs +10 -0
- package/fesm2022/onemrvapublic-design-system-mat-input-enterprise-number.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-input-iban.mjs +10 -0
- package/fesm2022/onemrvapublic-design-system-mat-input-iban.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-input-phone.mjs +10 -0
- package/fesm2022/onemrvapublic-design-system-mat-input-phone.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-message-box.mjs +10 -0
- package/fesm2022/onemrvapublic-design-system-mat-message-box.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-multi-select.mjs +10 -0
- package/fesm2022/onemrvapublic-design-system-mat-multi-select.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-navigation.mjs +30 -0
- package/fesm2022/onemrvapublic-design-system-mat-navigation.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-notification.mjs +10 -0
- package/fesm2022/onemrvapublic-design-system-mat-notification.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-paginator.mjs +10 -0
- package/fesm2022/onemrvapublic-design-system-mat-paginator.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-panel.mjs +50 -0
- package/fesm2022/onemrvapublic-design-system-mat-panel.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-pop-over.mjs +30 -0
- package/fesm2022/onemrvapublic-design-system-mat-pop-over.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-progress-bar.mjs +10 -0
- package/fesm2022/onemrvapublic-design-system-mat-progress-bar.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-select-search.mjs +10 -3
- package/fesm2022/onemrvapublic-design-system-mat-select-search.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-selectable-box.mjs +10 -0
- package/fesm2022/onemrvapublic-design-system-mat-selectable-box.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-side-menu.mjs +10 -0
- package/fesm2022/onemrvapublic-design-system-mat-side-menu.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-skeleton.mjs +4 -7
- package/fesm2022/onemrvapublic-design-system-mat-skeleton.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-spinner.mjs +8 -0
- package/fesm2022/onemrvapublic-design-system-mat-spinner.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-stepper.mjs +10 -0
- package/fesm2022/onemrvapublic-design-system-mat-stepper.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-sticker.mjs +8 -0
- package/fesm2022/onemrvapublic-design-system-mat-sticker.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-table-of-content.mjs +11 -7
- package/fesm2022/onemrvapublic-design-system-mat-table-of-content.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-task-list.mjs +40 -0
- package/fesm2022/onemrvapublic-design-system-mat-task-list.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-toast.mjs +8 -0
- package/fesm2022/onemrvapublic-design-system-mat-toast.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-tooltip.mjs +10 -0
- package/fesm2022/onemrvapublic-design-system-mat-tooltip.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-page-error.mjs +18 -0
- package/fesm2022/onemrvapublic-design-system-page-error.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-page-not-found.mjs +32 -0
- package/fesm2022/onemrvapublic-design-system-page-not-found.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-shared.mjs +9 -1
- package/fesm2022/onemrvapublic-design-system-shared.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-timeline.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system.mjs +1 -1
- package/fesm2022/onemrvapublic-design-system.mjs.map +1 -1
- package/package.json +1 -1
- package/types/onemrvapublic-design-system-card.d.ts +11 -1
- package/types/onemrvapublic-design-system-flag-icon.d.ts +10 -0
- package/types/onemrvapublic-design-system-layout.d.ts +132 -0
- package/types/onemrvapublic-design-system-mat-avatar.d.ts +4 -15
- package/types/onemrvapublic-design-system-mat-breadcrumb.d.ts +10 -0
- package/types/onemrvapublic-design-system-mat-carousel.d.ts +18 -0
- package/types/onemrvapublic-design-system-mat-choice-chip.d.ts +10 -0
- package/types/onemrvapublic-design-system-mat-copy-to-clipboard.d.ts +10 -0
- package/types/onemrvapublic-design-system-mat-country-item.d.ts +10 -0
- package/types/onemrvapublic-design-system-mat-datepicker-header.d.ts +8 -0
- package/types/onemrvapublic-design-system-mat-empty-row.d.ts +7 -0
- package/types/onemrvapublic-design-system-mat-file-upload.d.ts +20 -0
- package/types/onemrvapublic-design-system-mat-input-address.d.ts +10 -0
- package/types/onemrvapublic-design-system-mat-input-birthplace.d.ts +10 -0
- package/types/onemrvapublic-design-system-mat-input-country.d.ts +10 -0
- package/types/onemrvapublic-design-system-mat-input-enterprise-number.d.ts +10 -0
- package/types/onemrvapublic-design-system-mat-input-iban.d.ts +10 -0
- package/types/onemrvapublic-design-system-mat-input-phone.d.ts +10 -0
- package/types/onemrvapublic-design-system-mat-message-box.d.ts +10 -0
- package/types/onemrvapublic-design-system-mat-multi-select.d.ts +10 -0
- package/types/onemrvapublic-design-system-mat-navigation.d.ts +20 -0
- package/types/onemrvapublic-design-system-mat-notification.d.ts +10 -0
- package/types/onemrvapublic-design-system-mat-paginator.d.ts +10 -0
- package/types/onemrvapublic-design-system-mat-panel.d.ts +50 -0
- package/types/onemrvapublic-design-system-mat-pop-over.d.ts +30 -0
- package/types/onemrvapublic-design-system-mat-progress-bar.d.ts +10 -0
- package/types/onemrvapublic-design-system-mat-select-search.d.ts +10 -0
- package/types/onemrvapublic-design-system-mat-selectable-box.d.ts +10 -0
- package/types/onemrvapublic-design-system-mat-side-menu.d.ts +10 -0
- package/types/onemrvapublic-design-system-mat-skeleton.d.ts +4 -7
- package/types/onemrvapublic-design-system-mat-spinner.d.ts +8 -0
- package/types/onemrvapublic-design-system-mat-stepper.d.ts +10 -0
- package/types/onemrvapublic-design-system-mat-sticker.d.ts +8 -0
- package/types/onemrvapublic-design-system-mat-table-of-content.d.ts +10 -0
- package/types/onemrvapublic-design-system-mat-task-list.d.ts +40 -0
- package/types/onemrvapublic-design-system-mat-toast.d.ts +8 -0
- package/types/onemrvapublic-design-system-mat-tooltip.d.ts +10 -0
- package/types/onemrvapublic-design-system-page-error.d.ts +18 -0
- package/types/onemrvapublic-design-system-page-not-found.d.ts +32 -0
- package/types/onemrvapublic-design-system-shared.d.ts +8 -0
- 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":";;;;;;;;;;;;;;;AAIA;AACO,MAAM,eAAe,GAA6B;IACvD,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;;AAGV;AACO,MAAM,gBAAgB,GAAkC;AAC7D,IAAA,QAAQ,EAAE,SAAS;AACnB,IAAA,QAAQ,EAAE,SAAS;AACnB,IAAA,QAAQ,EAAE,SAAS;AACnB,IAAA,QAAQ,EAAE,SAAS;AACnB,IAAA,QAAQ,EAAE,SAAS;AACnB,IAAA,QAAQ,EAAE,SAAS;AACnB,IAAA,QAAQ,EAAE,SAAS;;;ACjBrB;AACO,MAAM,oBAAoB,GAAG;;ACDpC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAchC,SAAU,YAAY,CAC1B,OAA+B,EAAA;IAE/B,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,oBAAoB,CAAC;AAC/C;AAEM,SAAU,WAAW,CAAC,CAAO,EAAE,CAAO,EAAA;IAC1C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,IAAI,UAAU,CAAC,CAAC;AAC1E;AAEM,SAAU,UAAU,CAAC,IAAU,EAAA;AACnC,IAAA,MAAM,GAAG,GAAG,CAAC,KAAa,KAAK,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;IAChE,OAAO,CAAA,EAAG,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA,CAAA,EAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,WAAW,EAAE,CAAA,CAAE;AACnF;AAEM,SAAU,iBAAiB,CAAC,MAAsB,EAAA;AACtD,IAAA,OAAO,CAAA,EAAG,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA,GAAA,EAAM,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;AAC1E;AAEM,SAAU,cAAc,CAC5B,IAAY,EAAA;AAEZ,IAAA,MAAM,UAAU,GACd,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE;QAChE,UAAU;AACZ,QAAA,CAAC;AAEH,IAAA,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,MAAM;QAC/C,KAAK,EAAE,KAAK,GAAG,CAAC;QAChB,YAAY,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,UAAU,IAAI,GAAG;AAC1E,KAAA,CAAC,CAAC;AACL;AAEM,SAAU,iBAAiB,CAC/B,OAAyB,EAAA;IAEzB,IAAI,CAAC,OAAO,CAAC,MAAM;AAAE,QAAA,OAAO,IAAI;IAEhC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAEjE,OAAO;QACL,aAAa,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE;QAC/C,WAAW,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE;KAC5C;AACH;AAEM,SAAU,aAAa,CAAC,OAAyB,EAAA;IACrD,MAAM,IAAI,GAAuB,EAAE;AACnC,IAAA,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAC9B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,CACxD;AAED,IAAA,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE;AAC3B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CACnB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CACrE;QACD,IAAI,GAAG,EAAE;AACP,YAAA,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;QAClB;aAAO;AACL,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;QACrB;IACF;AAEA,IAAA,OAAO,IAAI;AACb;SAEgB,QAAQ,CACtB,OAAyB,EACzB,KAAiC,EACjC,OAA2C,EAAA;IAE3C,IAAI,CAAC,OAAO,CAAC,MAAM;AAAE,QAAA,OAAO,EAAE;IAE9B,MAAM,MAAM,GAAkB,EAAE;AAChC,IAAA,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,KAAK;IAE5B,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,KAAK,EAAE;AAChC,QAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAClD;IAEA,IAAI,QAAQ,GAA0B,IAAI;AAC1C,IAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;QAC5B,IAAI,QAAQ,EAAE;AACZ,YAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QACzD;AACA,QAAA,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3D,QAAQ,GAAG,MAAM;IACnB;IAEA,IAAI,QAAQ,IAAI,QAAQ,CAAC,OAAO,GAAG,GAAG,EAAE;AACtC,QAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC5C;AAEA,IAAA,OAAO,MAAM;AACf;AAEA,SAAS,MAAM,CAAC,IAAU,EAAE,EAAQ,EAAA;IAClC,OAAO,GAAG,CACR,SAAS,EACT,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,EACrB,SAAS,EACT,CAAA,IAAA,EAAO,IAAI,CAAC,OAAO,EAAE,CAAA,CAAA,EAAI,EAAE,CAAC,OAAO,EAAE,CAAA,CAAE,CACxC;AACH;AAEA,SAAS,SAAS,CAChB,MAAsB,EACtB,KAAW,EACX,GAAS,EACT,KAAa,EAAA;AAEb,IAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;AACnE,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IAC9D,OAAO,GAAG,CACR,MAAM,EACN,WAAW,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,EAC5C,KAAK,EACL,MAAM,CAAC,EAAE,CACV;AACH;AAEA,SAAS,GAAG,CACV,MAAkC,EAClC,IAAY,EACZ,KAAyB,EACzB,SAAiB,EAAA;AAEjB,IAAA,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC;AACxB,IAAA,IAAI,MAAM;AAAE,QAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5C,IAAI,MAAM,EAAE,QAAQ;AAAE,QAAA,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;IAE9C,OAAO;AACL,QAAA,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AACxB,QAAA,KAAK,EAAE,CAAA,MAAA,EAAS,IAAI,CAAA,IAAA,EAAO,KAAK,GAAG,CAAA,oBAAA,EAAuB,KAAK,CAAA,CAAE,GAAG,EAAE,CAAA,CAAE;QACxE,MAAM;QACN,SAAS;KACV;AACH;;ACtHA,IAAI,aAAa,GAAG,CAAC;AAErB;;;;;;;;;;;;;;;;AAgBG;MAmBU,wBAAwB,CAAA;AAiGnC,IAAA,WAAA,GAAA;QAhGiB,IAAA,CAAA,aAAa,GAAG,SAAS;QACzB,IAAA,CAAA,WAAW,GAAG,EAAE;QAChB,IAAA,CAAA,aAAa,GAAG,EAAE;QAClB,IAAA,CAAA,YAAY,GAAG,EAAE;;QAGzB,IAAA,CAAA,KAAK,GAAG,KAAK,CAAS,EAAE;kFAAC;;QAGzB,IAAA,CAAA,OAAO,GAAG,KAAK,CAAmB,EAAE;oFAAC;;AAGrC,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK;8FAAkB;;QAGhC,IAAA,CAAA,cAAc,GAAG,KAAK,CAAS,CAAC;2FAAC;;QAGjC,IAAA,CAAA,WAAW,GAAG,KAAK,CAAW,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;wFAAC;;QAGzC,IAAA,CAAA,eAAe,GAAG,KAAK,CAAU,KAAK;4FAAC;;QAGvC,IAAA,CAAA,UAAU,GAAG,KAAK,CAAU,IAAI;uFAAC;;QAGjC,IAAA,CAAA,UAAU,GAAG,KAAK,CAAU,IAAI;uFAAC;;QAGjC,IAAA,CAAA,WAAW,GAAG,KAAK,CAAU,IAAI;wFAAC;;QAGlC,IAAA,CAAA,SAAS,GAAG,KAAK,CAAS,EAAE;sFAAC;;QAG7B,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,KAAK;qFAAC;;QAGhC,IAAA,CAAA,OAAO,GAAG,KAAK,CAAyB,EAAE;oFAAC;;QAG3C,IAAA,CAAA,YAAY,GAAG,KAAK,CAAS,EAAE;yFAAC;;AAGhC,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK;sGAA8B;;QAGpD,IAAA,CAAA,YAAY,GAAG,KAAK,CAAqB,SAAS;yFAAC;;QAGnD,IAAA,CAAA,YAAY,GAAG,MAAM,EAAsB;AAEpD;;;AAGG;QACM,IAAA,CAAA,cAAc,GAAG,MAAM,EAAqB;AAElC,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC9C,YAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAA6C;YAChE,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE;gBAC/B,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC;YACrC;AACA,YAAA,OAAO,GAAG;QACZ,CAAC;yFAAC;AAEiB,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAc,EAAE,OAAO,EAAE,KAAK,EAAE;wFAAC;AACrD,QAAA,IAAA,CAAA,SAAS,GAAG,CAAA,yBAAA,EAA4B,aAAa,EAAE,EAAE;AACzD,QAAA,IAAA,CAAA,gBAAgB,GAAwB;AACzD,YAAA;AACE,gBAAA,OAAO,EAAE,QAAQ;AACjB,gBAAA,OAAO,EAAE,QAAQ;AACjB,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,OAAO,EAAE,EAAE;AACZ,aAAA;SACF;QAEkB,IAAA,CAAA,WAAW,GAAG,MAAM,CAAS,CAAC;wFAAC;QAC/B,IAAA,CAAA,UAAU,GAAG,MAAM,CAAqB,SAAS;uFAAC;QAClD,IAAA,CAAA,SAAS,GAAG,MAAM,CAAU,KAAK;sFAAC;AAEpC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC;QAC1B,IAAA,CAAA,gBAAgB,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE;AACvE,YAAA,KAAK,EAAE,OAAO;AACf,SAAA,CAAC;QACe,IAAA,CAAA,eAAe,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE;AACtE,YAAA,KAAK,EAAE,MAAM;AACd,SAAA,CAAC;QAEiB,IAAA,CAAA,WAAW,GAAG,MAAM,CAAkC;AACvE,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,KAAK,EAAE,CAAC;AACT,SAAA;wFAAC;AAUiB,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;YACjD,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,gBAAA,OAAO,IAAI;YAEhC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE;YACnC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;AACnC,YAAA,IAAI,CAAC,KAAK;gBAAE,OAAO,GAAG,IAAI,IAAI;AAE9B,YAAA,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY;AACnD,YAAA,IAAI,MAAM,GAAG,IAAI,CAAC,WAAW;AAAE,gBAAA,OAAO,GAAG;AAEzC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;YAClD,OAAO,CAAA,EAAG,IAAI,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAA,EAAA,CAAI;QAC3D,CAAC;4FAAC;AAEiB,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CACxC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa;yFAC1E;AAEgB,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MACpC,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;sFAClC;AAEgB,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AAC1C,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;AAC9B,YAAA,OAAO,KAAK,GAAG,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,aAAa,GAAG,CAAC,GAAG,CAAC;QAChE,CAAC;uFAAC;QAEe,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MACpC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;sFACvD;QAEgB,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MACjC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;mFAC5D;AAEkB,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC9C,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;AAC9B,YAAA,IAAI,CAAC,KAAK;AAAE,gBAAA,OAAO,IAAI;AAEvB,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;gBACpB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI;gBACpC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;YAC3C;YAEA,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;AAC9C,gBAAA,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,aAAa,EAAE,OAAO,EAAE,KAAK,CAAC,WAAW,EAAE;YACvE;YAEA,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,EAAE;AACrD,YAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,GAAG,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC,EAAE;QACtE,CAAC;yFAAC;QAEiB,IAAA,CAAA,WAAW,GAAG,QAAQ,CACvC,MAAM,IAAI,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;wFACrE;AAEkB,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CACnC,MACE,IAAI,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE;AACzC,YAAA,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE;oFACnC;AAEkB,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;AAC3C,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;AAC9B,YAAA,IAAI,CAAC,KAAK;AAAE,gBAAA,OAAO,EAAE;YAErB,MAAM,IAAI,GAAuC,EAAE;AACnD,YAAA,KAAK,IAAI,IAAI,GAAG,KAAK,CAAC,aAAa,EAAE,IAAI,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE;AACtE,gBAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE;oBACxC,IAAI,CAAC,IAAI,CAAC;AACR,wBAAA,KAAK,EAAE,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,CAAE;wBAClD,KAAK,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE;AAC/E,qBAAA,CAAC;gBACJ;YACF;AACA,YAAA,OAAO,IAAI;QACb,CAAC;sFAAC;AAEiB,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AAC5C,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;YAClC,OAAO,CAAA,EAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,OAAO,CAAC,IAAI,CAAA,CAAE;QACnG,CAAC;uFAAC;AAEiB,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;AACnD,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;YAClC,OAAO,CAAA,EAAG,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,CAAE;QACxE,CAAC;8FAAC;AAEiB,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;AAClD,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;AAC9B,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;AAClC,YAAA,IAAI,CAAC,KAAK;AAAE,gBAAA,OAAO,KAAK;AACxB,YAAA,OAAO,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC,aAAa,IAAI,OAAO,CAAC,KAAK,GAAG,CAAC;QAChE,CAAC;6FAAC;AAEiB,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC9C,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;AAC9B,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;AAClC,YAAA,IAAI,CAAC,KAAK;AAAE,gBAAA,OAAO,KAAK;AACxB,YAAA,OAAO,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC,WAAW,IAAI,OAAO,CAAC,KAAK,GAAG,EAAE;QAC/D,CAAC;yFAAC;AAEiB,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;AACvC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE;AACjC,YAAA,IAAI,CAAC,KAAK;AAAE,gBAAA,OAAO,EAAE;AAErB,YAAA,OAAO,KAAK,CAAC,IAAI,CACf,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,SAAS,GAAG,CAAC,EAAE,EAC/C,CAAC,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,SAAS,GAAG,CAAC,CAC9B;QACH,CAAC;kFAAC;AAEe,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC7C,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE;AACjC,YAAA,IAAI,CAAC,KAAK;AAAE,gBAAA,OAAO,IAAI;AAEvB,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;gBACpB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE;gBAC1C,OAAO;oBACL,KAAK,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;oBAC/B,GAAG,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;iBAClC;YACH;YAEA,OAAO;gBACL,KAAK,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;gBACtC,GAAG,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC;aACrC;QACH,CAAC;0FAAC;AAEiB,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AAChD,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE;AACnC,YAAA,IAAI,CAAC,MAAM;AAAE,gBAAA,OAAO,EAAE;YAEtB,OAAO,IAAI,CAAC,OAAO;iBAChB,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC,GAAG;iBAClE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QAClE,CAAC;2FAAC;AAEiB,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC/C,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE;AACnC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE;AACrC,YAAA,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM;AAAE,gBAAA,OAAO,EAAE;AAEzC,YAAA,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,IACnC,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CACtD;QACH,CAAC;0FAAC;AAEiB,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;YAClD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE;AAC1C,YAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE;YACnD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACtD,CAAC;6FAAC;AAEiB,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;YACjD,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,MAAM;YAC5C,OAAO,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,CAAC;QAChC,CAAC;4FAAC;AAEiB,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC9C,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU;AAC9B,YAAA,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE;iBACxB,MAAM,CAAC,IAAI,IAAG;AACb,gBAAA,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AAAE,oBAAA,OAAO,KAAK;AACrC,gBAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AACnB,gBAAA,OAAO,IAAI;AACb,YAAA,CAAC;AACA,iBAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACnD,CAAC;yFAAC;AAEiB,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAC3C,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;2FAC7B;QApLC,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,cAAc,EAAE;AACrB,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,QAAA,CAAC,CAAC;IACJ;AAiLU,IAAA,SAAS,CAAC,IAAa,EAAA;AAC/B,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,SAAS;AAC3B,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC;IAClD;AAEU,IAAA,QAAQ,CAAC,KAAqB,EAAA;AACtC,QAAA,OAAO,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,aAAa;IAC7D;AAEQ,IAAA,OAAO,CAAC,MAAsB,EAAA;AACpC,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC;IAC1D;AAEU,IAAA,WAAW,CAAC,MAAuB,EAAA;AAC3C,QAAA,OAAO,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,GAAG,EAAE;IAChD;IAEU,QAAQ,GAAA;QAChB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IACrE;IAEU,YAAY,GAAA;AACpB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IACtD;AAEU,IAAA,cAAc,CAAC,KAAsB,EAAA;AAC7C,QAAA,IAAI,KAAK,KAAK,OAAO,EAAE;AACrB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;AAC9B,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AAC9B,YAAA,MAAM,QAAQ,GAAG,OAAO,CAAC;AACvB,kBAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC;kBAC7D,IAAI;AACR,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;AACnB,gBAAA,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,WAAW,EAAE,IAAI,KAAK,EAAE,aAAa,IAAI,CAAC;gBACpE,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC;AAC3C,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC;QAClC;aAAO;AACL,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;YACvB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACtC,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;QACpC;IACF;AAEU,IAAA,SAAS,CAAC,KAAa,EAAA;AAC/B,QAAA,IAAI,CAAC,KAAK;YAAE;AACZ,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACtC,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;AAC3C,QAAA,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;YAAE;QAC/C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACvC;IAEU,aAAa,GAAA;QACrB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE;AAC1C,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YAAE;AAC9B,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAClB,KAAK,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CACvE;IACH;IAEU,SAAS,GAAA;QACjB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE;AAC1C,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YAAE;AAC1B,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAClB,KAAK,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CACvE;IACH;AAEU,IAAA,cAAc,CAAC,KAAyB,EAAA;AAChD,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/B;AAEU,IAAA,YAAY,CAAC,MAAuB,EAAA;AAC5C,QAAA,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ;YAAE;AAChC,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC;AAC9B,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC;IACjC;AAEU,IAAA,cAAc,CAAC,IAAwB,EAAA;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC3E,QAAA,IAAI,CAAC,KAAK;YAAE;AAEZ,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;AACnB,gBAAA,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE;AACnC,gBAAA,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE;AAClC,aAAA,CAAC;QACJ;aAAO;AACL,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;YAC9B,IAAI,KAAK,EAAE;AACT,gBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,aAAa;gBAClE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YACvE;QACF;QAEA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AAC9B,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;IAChC;AAEU,IAAA,QAAQ,CAAC,MAAuB,EAAA;AACxC,QAAA,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ;AAAE,YAAA,OAAO,KAAK;AAC5C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;AAC9B,QAAA,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI;QAC7C,OAAO,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC,cAAc,EAAE,EAAE,EAAE;IAChD;IAEU,iBAAiB,CACzB,MAAuB,EACvB,MAAyB,EAAA;AAEzB,QAAA,IAAI,CAAC,MAAM;YAAE;AACb,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IACzD;IAEU,iBAAiB,GAAA;QACzB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC1C;AAEU,IAAA,gBAAgB,CAAC,MAAuB,EAAA;AAChD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;AAC/B,QAAA,OAAO,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,MAAM,CAAC,EAAE;IAClE;AAEU,IAAA,SAAS,CAAC,MAAuB,EAAA;AACzC,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI;QACxB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,IAAI,EAAE;QAC9C,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI;IAC5E;8GA1ZW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,qzEC7ErC,4hSA+PA,EAAA,MAAA,EAAA,CAAA,wqJAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDhMI,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,aAAa,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,qBAAqB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,8BAAA,EAAA,gCAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,eAAA,EAAA,YAAA,EAAA,SAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACrB,kBAAkB,0SAClB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,YAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,UAAU,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACV,aAAa,+wCACb,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAOJ,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAlBpC,SAAS;+BACE,kBAAkB,EAAA,UAAA,EAChB,IAAI,EAAA,OAAA,EACP;wBACP,OAAO;wBACP,aAAa;wBACb,qBAAqB;wBACrB,kBAAkB;wBAClB,eAAe;wBACf,UAAU;wBACV,aAAa;wBACb,aAAa;qBACd,EAAA,aAAA,EAGc,iBAAiB,CAAC,QAAQ,EAAA,IAAA,EACnC,EAAE,cAAc,EAAE,MAAM,EAAE,EAAA,QAAA,EAAA,4hSAAA,EAAA,MAAA,EAAA,CAAA,wqJAAA,CAAA,EAAA;;;MEnErB,qBAAqB,CAAA;8GAArB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAArB,qBAAqB,EAAA,OAAA,EAAA,CAHtB,wBAAwB,CAAA,EAAA,OAAA,EAAA,CACxB,wBAAwB,CAAA,EAAA,CAAA,CAAA;AAEvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,YAHtB,wBAAwB,CAAA,EAAA,CAAA,CAAA;;2FAGvB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBALjC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,EAAE;oBAChB,OAAO,EAAE,CAAC,wBAAwB,CAAC;oBACnC,OAAO,EAAE,CAAC,wBAAwB,CAAC;AACpC,iBAAA;;;ACPD;;AAEG;;ACFH;;AAEG;;;;"}
|
|
@@ -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.
|
|
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,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
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
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[]>;
|