@eherve/angular-material-section-tabs 0.0.0-stage → 22.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eherve-angular-material-section-tabs.mjs","names":["i1.SectionTabsIntl","i2","i9.SectionTabsComponent","i10.SectionTabComponent","i11.SectionTabLabelDirective","i12.SectionTabContentDirective","i13.SectionTabsMenuHeaderDirective","i14.SectionTabsFooterDirective","i15.SectionTabsDisplayResponsiveGridDirective"],"sources":["../../../projects/section-tabs/src/lib/section-selection-handler.ts","../../../projects/section-tabs/src/lib/directives/section-tab-content.directive.ts","../../../projects/section-tabs/src/lib/directives/section-tab-label.directive.ts","../../../projects/section-tabs/src/lib/section-tab.component.ts","../../../projects/section-tabs/src/lib/section-tabs-intl.ts","../../../projects/section-tabs/src/lib/directives/section-tabs-footer.directive.ts","../../../projects/section-tabs/src/lib/directives/section-tabs-menu-header.directive.ts","../../../projects/section-tabs/src/lib/section-tabs.component.ts","../../../projects/section-tabs/src/lib/section-tabs.component.html","../../../projects/section-tabs/src/lib/directives/section-tabs-display-responsive-grid.directive.ts","../../../projects/section-tabs/src/lib/section-tabs-display/section-tabs-display.component.ts","../../../projects/section-tabs/src/lib/section-tabs-display/section-tabs-display.component.html","../../../projects/section-tabs/src/lib/section-tabs.module.ts"],"sourcesContent":["import { InjectionToken } from \"@angular/core\";\nimport { Observable } from \"rxjs\";\n\nexport interface SectionSelectionHandler {\n observe(key: string): Observable<string | null>;\n select(key: string, value: string): void | Promise<void>;\n}\n\nexport const SECTION_SELECTION_HANDLER =\n new InjectionToken<SectionSelectionHandler>(\"SECTION_SELECTION_HANDLER\");\n","import { Directive, TemplateRef } from \"@angular/core\";\n\n@Directive({\n selector: \"ng-template[appSectionTabContent]\",\n standalone: false,\n})\nexport class SectionTabContentDirective {\n constructor(public readonly templateRef: TemplateRef<unknown>) {}\n}\n","import { Directive, TemplateRef } from \"@angular/core\";\n\n@Directive({\n selector: \"ng-template[appSectionTabLabel]\",\n standalone: false,\n})\nexport class SectionTabLabelDirective {\n constructor(public readonly templateRef: TemplateRef<unknown>) {}\n}\n","/** @format */\n\nimport {\n Component,\n ContentChild,\n Input,\n OnChanges,\n OnDestroy,\n booleanAttribute,\n ChangeDetectionStrategy,\n} from \"@angular/core\";\nimport { Subject } from \"rxjs\";\nimport { SectionTabContentDirective } from \"./directives/section-tab-content.directive\";\nimport { SectionTabLabelDirective } from \"./directives/section-tab-label.directive\";\n\nexport type SectionTabCounter = number | string | null | undefined;\nexport type SectionTabType = \"button\" | \"separator\";\n\n@Component({\n selector: \"app-section-tab\",\n template: \"\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class SectionTabComponent implements OnChanges, OnDestroy {\n @Input() type: SectionTabType = \"button\";\n @Input() queryParamValue?: string;\n @Input({ transform: booleanAttribute }) disabled = false;\n @Input() done: SectionTabCounter;\n @Input() total: SectionTabCounter;\n @Input() totalMax: SectionTabCounter;\n @Input() progress = true;\n @Input() statusColor? = \"#607286\";\n @Input() statusColorDone?: string;\n @Input() statusColorTotal?: string;\n\n @ContentChild(SectionTabLabelDirective)\n labelDirective?: SectionTabLabelDirective;\n\n @ContentChild(SectionTabContentDirective)\n contentDirective?: SectionTabContentDirective;\n\n readonly stateChanges = new Subject<void>();\n\n ngOnChanges(): void {\n this.stateChanges.next();\n }\n\n ngOnDestroy(): void {\n this.stateChanges.complete();\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\n\nexport interface SectionTabsMessages {\n sections: string;\n emptySections: string;\n emptyComponents: string;\n emptyFields: string;\n emptyFieldsDescription: string;\n showEmptyFields: string;\n}\n\n@Injectable({ providedIn: \"root\" })\nexport class SectionTabsIntl {\n readonly changes = new Subject<void>();\n messages: SectionTabsMessages = {\n sections: \"Sections\",\n emptySections: \"Aucune section à afficher\",\n emptyComponents: \"Aucun composant configuré\",\n emptyFields: \"Aucun champ renseigné\",\n emptyFieldsDescription: \"Activez l'affichage des champs vides pour voir les informations attendues.\",\n showEmptyFields: \"Afficher les champs vides\",\n };\n}\n","import { Directive, TemplateRef } from \"@angular/core\";\n\n@Directive({\n selector: \"ng-template[appSectionTabsFooter]\",\n standalone: false,\n})\nexport class SectionTabsFooterDirective {\n constructor(public readonly templateRef: TemplateRef<unknown>) {}\n}\n","import { Directive, TemplateRef } from \"@angular/core\";\n\n@Directive({\n selector: \"ng-template[appSectionTabsMenuHeader]\",\n standalone: false,\n})\nexport class SectionTabsMenuHeaderDirective {\n constructor(public readonly templateRef: TemplateRef<unknown>) {}\n}\n","/** @format */\n\nimport {\n animate,\n group,\n query,\n style,\n transition,\n trigger,\n} from \"@angular/animations\";\nimport {\n AfterContentInit,\n Component,\n ContentChild,\n ContentChildren,\n EventEmitter,\n ErrorHandler,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n QueryList,\n SimpleChanges,\n TemplateRef,\n ViewEncapsulation,\n booleanAttribute,\n inject,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n} from \"@angular/core\";\nimport { Subscription } from \"rxjs\";\nimport { SectionTabsIntl } from \"./section-tabs-intl\";\nimport { SECTION_SELECTION_HANDLER } from \"./section-selection-handler\";\nimport {\n SectionTabComponent,\n SectionTabCounter,\n SectionTabType,\n} from \"./section-tab.component\";\nimport { SectionTabsFooterDirective } from \"./directives/section-tabs-footer.directive\";\nimport { SectionTabsMenuHeaderDirective } from \"./directives/section-tabs-menu-header.directive\";\n\nexport interface SectionTabItem {\n tab: SectionTabComponent;\n type: SectionTabType;\n index: number;\n renderIndex: number;\n queryParamValue?: string;\n selected: boolean;\n disabled: boolean;\n buttonId: string;\n panelId: string;\n statusDoneLabel?: string;\n statusTotalLabel?: string;\n progress?: number;\n labelTemplate?: TemplateRef<unknown>;\n contentTemplate?: TemplateRef<unknown>;\n}\n\nexport const sectionTabsSlideTopTransitions = [\n query(\n \":enter, :leave\",\n style({\n position: \"absolute\",\n inset: 0,\n width: \"100%\",\n height: \"100%\",\n overflow: \"auto\",\n }),\n {\n optional: true,\n },\n ),\n group([\n query(\n \":enter\",\n [\n style({ opacity: 0, transform: \"translateY(100%)\" }),\n animate(\n \".3s ease-out\",\n style({ opacity: 1, transform: \"translateY(0%)\" }),\n ),\n ],\n { optional: true },\n ),\n query(\n \":leave\",\n [\n style({ opacity: 1, transform: \"translateY(0%)\" }),\n animate(\n \".3s ease-out\",\n style({ opacity: 0, transform: \"translateY(-100%)\" }),\n ),\n ],\n { optional: true },\n ),\n ]),\n];\n\nexport const sectionTabsSlideBottomTransitions = [\n query(\n \":enter, :leave\",\n style({\n position: \"absolute\",\n inset: 0,\n width: \"100%\",\n height: \"100%\",\n overflow: \"auto\",\n }),\n {\n optional: true,\n },\n ),\n group([\n query(\n \":enter\",\n [\n style({ opacity: 0, transform: \"translateY(-100%)\" }),\n animate(\n \".3s ease-out\",\n style({ opacity: 1, transform: \"translateY(0%)\" }),\n ),\n ],\n { optional: true },\n ),\n query(\n \":leave\",\n [\n style({ opacity: 1, transform: \"translateY(0%)\" }),\n animate(\n \".3s ease-out\",\n style({ opacity: 0, transform: \"translateY(100%)\" }),\n ),\n ],\n { optional: true },\n ),\n ]),\n];\n\n@Component({\n selector: \"app-section-tabs\",\n templateUrl: \"./section-tabs.component.html\",\n styleUrl: \"./section-tabs.component.scss\",\n standalone: false,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Eager,\n animations: [\n trigger(\"sectionTabsContentTransition\", [\n transition(\":increment\", sectionTabsSlideTopTransitions),\n transition(\":decrement\", sectionTabsSlideBottomTransitions),\n ]),\n ],\n})\nexport class SectionTabsComponent\n implements AfterContentInit, OnChanges, OnDestroy\n{\n private static nextId = 0;\n\n @Input() selectedIndex = 0;\n @Input() queryParamKey?: string;\n\n @Output() selectedIndexChange = new EventEmitter<number>();\n\n @ContentChildren(SectionTabComponent, { descendants: true })\n private tabComponents!: QueryList<SectionTabComponent>;\n\n @ContentChild(SectionTabsMenuHeaderDirective)\n private menuHeaderDirective?: SectionTabsMenuHeaderDirective;\n\n @ContentChild(SectionTabsFooterDirective)\n private footerDirective?: SectionTabsFooterDirective;\n\n readonly intl = inject(SectionTabsIntl);\n\n readonly instanceId = `section-tabs-${SectionTabsComponent.nextId++}`;\n\n tabItems: SectionTabItem[] = [];\n activeTabItems: SectionTabItem[] = [];\n selectedTabItem?: SectionTabItem;\n menuHeaderTemplate?: TemplateRef<unknown>;\n footerTemplate?: TemplateRef<unknown>;\n\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n private readonly handler = inject(SECTION_SELECTION_HANDLER, {\n optional: true,\n });\n private readonly errorHandler = inject(ErrorHandler);\n private handlerSubscription?: Subscription;\n private handlerGeneration = 0;\n private externalValue: string | null = null;\n private readonly subscriptions = new Subscription();\n private tabStateSubscriptions = new Subscription();\n private contentInitialized = false;\n\n ngAfterContentInit(): void {\n this.contentInitialized = true;\n this.subscriptions.add(\n this.intl.changes.subscribe(() => this.changeDetectorRef.markForCheck()),\n );\n this.refreshProjectedTemplates();\n this.refreshTabItems();\n this.synchronizeSelectionWithQueryParameter();\n this.bindSelectionHandler();\n this.subscriptions.add(\n this.tabComponents.changes.subscribe((): void => this.handleTabsChange()),\n );\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.contentInitialized) return;\n if (changes[\"queryParamKey\"]) {\n this.bindSelectionHandler();\n this.synchronizeSelectionWithQueryParameter();\n return;\n }\n if (!changes[\"selectedIndex\"]) return;\n this.synchronizeSelectionWithQueryParameter();\n }\n\n ngOnDestroy(): void {\n this.handlerGeneration++;\n this.handlerSubscription?.unsubscribe();\n this.subscriptions.unsubscribe();\n this.tabStateSubscriptions.unsubscribe();\n }\n\n selectTab(tabItem: SectionTabItem): void {\n if (!this.isSelectableTabItem(tabItem)) return;\n this.applySelectedIndex(tabItem.index, true);\n this.updateQueryParameter(tabItem);\n }\n\n private handleTabsChange(): void {\n this.refreshProjectedTemplates();\n this.refreshTabItems();\n this.synchronizeSelectionWithQueryParameter();\n }\n\n private handleTabStateChange(): void {\n this.refreshTabItems(false);\n this.synchronizeSelectionWithQueryParameter();\n }\n\n private refreshProjectedTemplates(): void {\n this.menuHeaderTemplate = this.menuHeaderDirective?.templateRef;\n this.footerTemplate = this.footerDirective?.templateRef;\n }\n\n private refreshTabItems(refreshSubscriptions = true): void {\n const tabs = this.tabComponents?.toArray() ?? [];\n this.tabItems = this.buildTabItems(tabs);\n if (refreshSubscriptions) this.refreshTabStateSubscriptions(tabs);\n }\n\n private buildTabItems(tabs: SectionTabComponent[]): SectionTabItem[] {\n let buttonIndex = 0;\n return tabs.map((tab, renderIndex): SectionTabItem => {\n const index = tab.type === \"separator\" ? -1 : buttonIndex++;\n return this.buildTabItem(tab, index, renderIndex);\n });\n }\n\n private refreshTabStateSubscriptions(tabs: SectionTabComponent[]): void {\n this.tabStateSubscriptions.unsubscribe();\n const subscription = new Subscription();\n tabs.forEach((tab): void => {\n subscription.add(\n tab.stateChanges.subscribe((): void => this.handleTabStateChange()),\n );\n });\n this.tabStateSubscriptions = subscription;\n }\n\n private buildTabItem(\n tab: SectionTabComponent,\n index: number,\n renderIndex: number,\n ): SectionTabItem {\n const isButton = tab.type === \"button\";\n\n return {\n tab,\n type: tab.type,\n index,\n renderIndex,\n queryParamValue: isButton ? tab.queryParamValue : undefined,\n selected: isButton && index === this.selectedIndex,\n disabled: isButton && tab.disabled,\n buttonId: `${this.instanceId}-button-${renderIndex}`,\n panelId: `${this.instanceId}-panel-${renderIndex}`,\n statusDoneLabel: isButton ? this.buildDoneLabel(tab.done) : undefined,\n statusTotalLabel: isButton\n ? this.buildTotalLabel(tab.done, tab.total, tab.totalMax)\n : undefined,\n progress:\n tab.progress && isButton\n ? this.buildProgress(tab.done, tab.total)\n : undefined,\n labelTemplate: tab.labelDirective?.templateRef,\n contentTemplate: isButton ? tab.contentDirective?.templateRef : undefined,\n };\n }\n\n private synchronizeSelectionWithQueryParameter(): void {\n const queryParamValue = this.getQueryParameterValue();\n if (queryParamValue === null) {\n this.applySelectedIndex(this.selectedIndex, false);\n return;\n }\n\n const queryParamTabItem = this.tabItems.find(\n (tabItem): boolean => tabItem.queryParamValue === queryParamValue,\n );\n if (!queryParamTabItem || !this.isSelectableTabItem(queryParamTabItem)) {\n this.applySelectedIndex(this.selectedIndex, false);\n return;\n }\n\n this.applySelectedIndex(queryParamTabItem.index, true);\n }\n\n private bindSelectionHandler(): void {\n const generation = ++this.handlerGeneration;\n this.handlerSubscription?.unsubscribe();\n this.externalValue = null;\n const key = this.queryParamKey;\n if (!this.handler || !key?.trim()) return;\n try {\n this.handlerSubscription = this.handler.observe(key).subscribe({\n next: (value): void => {\n if (generation !== this.handlerGeneration) return;\n this.externalValue = value;\n this.synchronizeSelectionWithQueryParameter();\n this.changeDetectorRef.markForCheck();\n },\n error: (error: unknown): void => {\n if (generation === this.handlerGeneration)\n this.errorHandler.handleError(error);\n },\n });\n } catch (error) {\n this.errorHandler.handleError(error);\n }\n }\n\n private getQueryParameterValue(): string | null {\n return this.externalValue;\n }\n\n private updateQueryParameter(tabItem: SectionTabItem): void {\n const key = this.queryParamKey;\n const value = tabItem.queryParamValue;\n if (\n !this.handler ||\n !key?.trim() ||\n value === undefined ||\n value === this.externalValue\n )\n return;\n try {\n const result = this.handler.select(key, value);\n if (result)\n void Promise.resolve(result).catch((error: unknown): void =>\n this.errorHandler.handleError(error),\n );\n } catch (error) {\n this.errorHandler.handleError(error);\n }\n }\n\n private buildDoneLabel(done: SectionTabCounter): string | undefined {\n return this.hasCounterValue(done) ? `${done}` : undefined;\n }\n\n private buildTotalLabel(\n done: SectionTabCounter,\n total: SectionTabCounter,\n totalMax: SectionTabCounter,\n ): string | undefined {\n if (!this.hasCounterValue(done) || !this.hasCounterValue(total))\n return undefined;\n return `/${this.buildDisplayedTotal(total, totalMax)}`;\n }\n\n private buildDisplayedTotal(\n total: SectionTabCounter,\n totalMax: SectionTabCounter,\n ): string {\n const numericTotal = this.toNumericCounter(total);\n const numericTotalMax = this.toNumericCounter(totalMax);\n if (\n numericTotal !== undefined &&\n numericTotalMax !== undefined &&\n numericTotal > numericTotalMax\n ) {\n return `+${numericTotalMax}`;\n }\n return `${total}`;\n }\n\n private toNumericCounter(value: SectionTabCounter): number | undefined {\n if (typeof value === \"number\")\n return Number.isFinite(value) ? value : undefined;\n if (typeof value !== \"string\" || value.trim() === \"\") return undefined;\n const numericValue = Number(value);\n return Number.isFinite(numericValue) ? numericValue : undefined;\n }\n\n private buildProgress(\n done: SectionTabCounter,\n total: SectionTabCounter,\n ): number | undefined {\n if (typeof done !== \"number\" || typeof total !== \"number\" || total <= 0)\n return undefined;\n return Math.min(Math.max((done / total) * 100, 0), 100);\n }\n\n private hasCounterValue(value: SectionTabCounter): boolean {\n return value !== undefined && value !== null && value !== \"\";\n }\n\n private applySelectedIndex(index: number, emitChange: boolean): void {\n const selectedIndex = this.getSafeSelectedIndex(index);\n if (selectedIndex === undefined) {\n this.clearSelection();\n return;\n }\n\n const selectionChanged =\n this.selectedIndex !== selectedIndex ||\n this.selectedTabItem?.index !== selectedIndex;\n this.selectedIndex = selectedIndex;\n this.refreshSelection();\n if (emitChange && selectionChanged)\n this.selectedIndexChange.emit(selectedIndex);\n }\n\n private getSafeSelectedIndex(index: number): number | undefined {\n const selectableTabItems = this.getSelectableTabItems();\n const requestedTabItem = selectableTabItems.find(\n (tabItem): boolean => tabItem.index === index,\n );\n if (requestedTabItem && !requestedTabItem.disabled)\n return requestedTabItem.index;\n return selectableTabItems.find((tabItem): boolean => !tabItem.disabled)\n ?.index;\n }\n\n private refreshSelection(): void {\n this.tabItems = this.tabItems.map(\n (tabItem): SectionTabItem => ({\n ...tabItem,\n selected:\n this.isButtonTabItem(tabItem) && tabItem.index === this.selectedIndex,\n }),\n );\n this.selectedTabItem = this.tabItems.find(\n (tabItem): boolean => tabItem.selected,\n );\n this.activeTabItems = this.selectedTabItem ? [this.selectedTabItem] : [];\n }\n\n private clearSelection(): void {\n this.tabItems = this.tabItems.map(\n (tabItem): SectionTabItem => ({ ...tabItem, selected: false }),\n );\n this.selectedTabItem = undefined;\n this.activeTabItems = [];\n }\n\n private getSelectableTabItems(): SectionTabItem[] {\n return this.tabItems.filter((tabItem): boolean =>\n this.isButtonTabItem(tabItem),\n );\n }\n\n private isSelectableTabItem(tabItem: SectionTabItem): boolean {\n return this.isButtonTabItem(tabItem) && !tabItem.disabled;\n }\n\n private isButtonTabItem(tabItem: SectionTabItem): boolean {\n return tabItem.type === \"button\";\n }\n}\n","<!-- @format -->\n\n<div class=\"section-tabs\">\n <aside\n class=\"section-tabs__sidebar\"\n [attr.aria-label]=\"intl.messages.sections\"\n >\n <div class=\"section-tabs__sidebar-card\">\n @if (menuHeaderTemplate) {\n <div class=\"section-tabs__sidebar-title\">\n <ng-container *ngTemplateOutlet=\"menuHeaderTemplate\"></ng-container>\n </div>\n }\n\n <nav\n class=\"section-tabs__sidebar-list\"\n role=\"tablist\"\n aria-orientation=\"vertical\"\n >\n @for (tabItem of tabItems; track tabItem.tab) {\n @if (tabItem.type === \"separator\") {\n <div class=\"section-tabs__sidebar-separator\" role=\"presentation\">\n @if (tabItem.labelTemplate) {\n <ng-container\n *ngTemplateOutlet=\"tabItem.labelTemplate\"\n ></ng-container>\n }\n </div>\n } @else {\n <button\n type=\"button\"\n class=\"section-tabs__sidebar-item\"\n role=\"tab\"\n [id]=\"tabItem.buttonId\"\n [class.active]=\"tabItem.selected\"\n [disabled]=\"tabItem.disabled\"\n [attr.aria-selected]=\"tabItem.selected\"\n [attr.aria-controls]=\"tabItem.panelId\"\n (click)=\"selectTab(tabItem)\"\n >\n <div class=\"section-tabs__label-header\">\n <div class=\"section-tabs__label-title\">\n @if (tabItem.labelTemplate) {\n <ng-container\n *ngTemplateOutlet=\"tabItem.labelTemplate\"\n ></ng-container>\n }\n </div>\n\n @if (tabItem.statusDoneLabel) {\n <span\n class=\"section-tabs__mini-chip\"\n [style.color]=\"tabItem.tab.statusColor\"\n [style.--section-tab-done-color]=\"\n tabItem.tab.statusColorDone\n \"\n [style.--section-tab-total-color]=\"\n tabItem.tab.statusColorTotal\n \"\n >\n <span class=\"section-tabs__mini-chip-done\">{{\n tabItem.statusDoneLabel\n }}</span>\n @if (tabItem.statusTotalLabel) {\n <span class=\"section-tabs__mini-chip-total\">{{\n tabItem.statusTotalLabel\n }}</span>\n }\n </span>\n }\n </div>\n\n @if (tabItem.progress !== undefined) {\n <div class=\"section-tabs__progress\" aria-hidden=\"true\">\n <span [style.width.%]=\"tabItem.progress\"></span>\n </div>\n }\n </button>\n }\n }\n </nav>\n\n @if (footerTemplate) {\n <footer class=\"section-tabs__sidebar-footer\">\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n </footer>\n }\n </div>\n </aside>\n\n <div class=\"section-tabs__content\">\n <div\n class=\"section-tabs__content-viewport\"\n [@sectionTabsContentTransition]=\"selectedIndex\"\n >\n @for (tabItem of activeTabItems; track tabItem.tab) {\n <section\n class=\"section-tabs__content-panel\"\n role=\"tabpanel\"\n [id]=\"tabItem.panelId\"\n [attr.aria-labelledby]=\"tabItem.buttonId\"\n >\n @if (tabItem.contentTemplate) {\n <ng-container\n *ngTemplateOutlet=\"tabItem.contentTemplate\"\n ></ng-container>\n }\n </section>\n }\n </div>\n </div>\n</div>\n","/** @format */\n\nimport { AfterViewInit, Directive, ElementRef, Input, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';\nimport type { SectionTabsDisplayGrid } from '../section-tabs-display/section-tabs-display.types';\n\ninterface ResponsiveGridItem {\n element: HTMLElement;\n span: number;\n}\n\n@Directive({\n selector: '[appSectionTabsDisplayResponsiveGrid]',\n standalone: false,\n})\nexport class SectionTabsDisplayResponsiveGridDirective implements AfterViewInit, OnChanges, OnDestroy {\n @Input('appSectionTabsDisplayResponsiveGrid') grid?: SectionTabsDisplayGrid;\n @Input() sectionTabsDisplayResponsiveGridEnabled = true;\n\n private initialized = false;\n private resizeObserver?: ResizeObserver;\n private mutationObserver?: MutationObserver;\n\n constructor(private readonly elementRef: ElementRef<HTMLElement>) {}\n\n ngAfterViewInit(): void {\n this.initialized = true;\n this.refreshObserver();\n this.applyLayout();\n }\n\n ngOnChanges(_changes: SimpleChanges): void {\n if (!this.initialized) return;\n\n this.refreshObserver();\n this.applyLayout();\n }\n\n ngOnDestroy(): void {\n this.resizeObserver?.disconnect();\n this.mutationObserver?.disconnect();\n }\n\n private refreshObserver(): void {\n this.resizeObserver?.disconnect();\n this.mutationObserver?.disconnect();\n this.resizeObserver = undefined;\n this.mutationObserver = undefined;\n\n if (!this.sectionTabsDisplayResponsiveGridEnabled) return;\n\n if (typeof ResizeObserver !== 'undefined') {\n this.resizeObserver = new ResizeObserver((): void => this.applyLayout());\n this.resizeObserver.observe(this.elementRef.nativeElement);\n }\n\n if (typeof MutationObserver !== 'undefined') {\n this.mutationObserver = new MutationObserver((): void => this.applyLayout());\n this.observeMutations();\n }\n }\n\n private observeMutations(): void {\n this.mutationObserver?.observe(this.elementRef.nativeElement, { childList: true });\n }\n\n private applyLayout(): void {\n const element = this.elementRef.nativeElement;\n const configuredColumns = this.normalizePositiveInteger(this.grid?.columns, 1);\n\n if (!this.sectionTabsDisplayResponsiveGridEnabled) {\n element.style.removeProperty('--section-tabs-display-grid-effective-columns');\n this.restoreConfiguredSpans(configuredColumns);\n return;\n }\n\n const availableWidth = this.getContentWidth(element);\n if (availableWidth <= 0) return;\n\n const gap = this.getGap(element);\n const minColumnWidth = this.measureCssLength(this.grid?.minColumnWidth || '0px', element);\n const effectiveColumns = this.resolveEffectiveColumns(configuredColumns, availableWidth, gap, minColumnWidth);\n\n element.style.setProperty('--section-tabs-display-grid-effective-columns', `${effectiveColumns}`);\n this.applyResponsiveSpans(effectiveColumns);\n }\n\n private applyResponsiveSpans(columns: number): void {\n const rows: ResponsiveGridItem[][] = [];\n let currentRow: ResponsiveGridItem[] = [];\n let occupiedColumns = 0;\n\n const flushRow = (): void => {\n if (!currentRow.length) return;\n rows.push(currentRow);\n currentRow = [];\n occupiedColumns = 0;\n };\n\n for (const child of Array.from(this.elementRef.nativeElement.children)) {\n if (!(child instanceof HTMLElement)) continue;\n\n if (child.classList.contains('section-tabs-display__grid-break')) {\n flushRow();\n continue;\n }\n\n const originalSpan = this.readOriginalSpan(child, columns);\n const span = Math.min(originalSpan, columns);\n\n if (occupiedColumns > 0 && occupiedColumns + span > columns) {\n flushRow();\n rows.push([{ element: child, span: columns }]);\n continue;\n }\n\n currentRow.push({ element: child, span });\n occupiedColumns += span;\n if (occupiedColumns === columns) flushRow();\n }\n\n flushRow();\n\n for (const row of rows) {\n const singleItem = row.length === 1 ? row[0] : undefined;\n if (singleItem && singleItem.span < columns) singleItem.span = columns;\n row.forEach((item): void => item.element.style.setProperty('grid-column', `span ${item.span}`));\n }\n }\n\n private restoreConfiguredSpans(columns: number): void {\n for (const child of Array.from(this.elementRef.nativeElement.children)) {\n if (!(child instanceof HTMLElement) || child.classList.contains('section-tabs-display__grid-break')) continue;\n child.style.setProperty('grid-column', `span ${this.readOriginalSpan(child, columns)}`);\n }\n }\n\n private readOriginalSpan(element: HTMLElement, columns: number): number {\n const value = element.style.getPropertyValue('--section-tabs-display-item-col-span');\n return Math.min(this.normalizePositiveInteger(Number(value), 1), columns);\n }\n\n private resolveEffectiveColumns(\n configuredColumns: number,\n availableWidth: number,\n gap: number,\n minColumnWidth: number,\n ): number {\n if (configuredColumns <= 1 || minColumnWidth <= 0) return configuredColumns;\n\n const fittingColumns = Math.floor((availableWidth + gap) / (minColumnWidth + gap));\n return Math.max(1, Math.min(configuredColumns, fittingColumns));\n }\n\n private getContentWidth(element: HTMLElement): number {\n const styles = getComputedStyle(element);\n const horizontalPadding = this.parsePixelValue(styles.paddingLeft) + this.parsePixelValue(styles.paddingRight);\n return Math.max(0, element.clientWidth - horizontalPadding);\n }\n\n private getGap(element: HTMLElement): number {\n const styles = getComputedStyle(element);\n return this.parsePixelValue(styles.columnGap === 'normal' ? '0px' : styles.columnGap);\n }\n\n private measureCssLength(value: string, element: HTMLElement): number {\n if (!value || value === '0' || value === '0px') return 0;\n\n this.mutationObserver?.disconnect();\n\n const probe = element.ownerDocument.createElement('div');\n probe.style.position = 'absolute';\n probe.style.visibility = 'hidden';\n probe.style.pointerEvents = 'none';\n probe.style.width = value;\n probe.style.height = '0';\n element.appendChild(probe);\n const width = probe.getBoundingClientRect().width;\n probe.remove();\n\n this.observeMutations();\n return width;\n }\n\n private parsePixelValue(value: string): number {\n const parsed = Number.parseFloat(value);\n return Number.isFinite(parsed) ? parsed : 0;\n }\n\n private normalizePositiveInteger(value: number | null | undefined, fallback: number): number {\n if (!Number.isFinite(value) || Number(value) <= 0) return fallback;\n return Math.max(1, Math.floor(Number(value)));\n }\n}\n","/** @format */\n\nimport { formatDate } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport type { SafeHtml } from '@angular/platform-browser';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Inject,\n ChangeDetectorRef,\n DestroyRef,\n Input,\n LOCALE_ID,\n OnChanges,\n Output,\n Type,\n reflectComponentType,\n} from '@angular/core';\n\nimport { SectionTabsIntl } from '../section-tabs-intl';\nimport {\n SectionTabsDisplayCard, SectionTabsDisplayCardAction, SectionTabsDisplayCardComponentContext,\n SectionTabsDisplayCardKind, SectionTabsDisplayChipConfig, SectionTabsDisplayChipViewModel,\n SectionTabsDisplayCompletion, SectionTabsDisplayCounter, SectionTabsDisplayField,\n SectionTabsDisplayFieldComponentContext, SectionTabsDisplayFieldKind, SectionTabsDisplayFieldLabelAction,\n SectionTabsDisplayGrid, SectionTabsDisplayLayout, SectionTabsDisplayOptions,\n SectionTabsDisplaySection, SectionTabsDisplaySectionMode, SectionTabsDisplaySelectOption,\n} from './section-tabs-display.types';\n\ninterface SectionTabsDisplayCompletionState {\n enabled: boolean;\n done?: SectionTabsDisplayCounter;\n total?: SectionTabsDisplayCounter;\n label?: string;\n}\n\ninterface SectionTabsDisplayNumericCompletion {\n done: number;\n total: number;\n}\n\ninterface SectionTabsDisplayRenderBreak {\n id: string;\n type: 'break';\n}\n\ninterface SectionTabsDisplayRenderField {\n id: string;\n type: 'field';\n source: SectionTabsDisplayField;\n label: string;\n labelAction?: SectionTabsDisplayFieldLabelAction;\n kind: SectionTabsDisplayFieldKind;\n value: unknown;\n filled: boolean;\n displayValue: string | SafeHtml;\n chipsValue: SectionTabsDisplayChipViewModel[];\n color?: string;\n suffix?: string;\n component?: Type<unknown>;\n componentInputs?: Record<string, unknown>;\n styles: Record<string, string>;\n classes: Record<string, boolean>;\n onClick?: (value: any) => void;\n}\n\ntype SectionTabsDisplayFieldItem = SectionTabsDisplayRenderBreak | SectionTabsDisplayRenderField;\n\ninterface SectionTabsDisplayRenderCard {\n id: string;\n type: 'card';\n source: SectionTabsDisplayCard;\n responsiveGrid: boolean;\n label: string;\n icon?: string;\n tooltip?: string;\n kind: SectionTabsDisplayCardKind;\n component?: Type<unknown>;\n componentInputs?: Record<string, unknown>;\n gridStyles: Record<string, string>;\n styles: Record<string, string>;\n classes: Record<string, boolean>;\n items: SectionTabsDisplayFieldItem[];\n completion: SectionTabsDisplayCompletionState;\n actions?: SectionTabsDisplayCardAction[];\n}\n\ninterface SectionTabsDisplayRenderCardBreak {\n id: string;\n type: 'break';\n}\n\ntype SectionTabsDisplayCardItem = SectionTabsDisplayRenderCard | SectionTabsDisplayRenderCardBreak;\n\ninterface SectionTabsDisplayRenderSection {\n id: string;\n queryParamValue: string;\n source: SectionTabsDisplaySection;\n responsiveGrid: boolean;\n label: string;\n icon?: string;\n tooltip?: string;\n sectionMode: SectionTabsDisplaySectionMode;\n cardCount: number;\n gridStyles: Record<string, string>;\n items: SectionTabsDisplayCardItem[];\n done?: SectionTabsDisplayCounter;\n total?: SectionTabsDisplayCounter;\n}\n\ninterface SectionTabsDisplayCardBuildResult {\n items: SectionTabsDisplayCardItem[];\n cards: SectionTabsDisplayRenderCard[];\n}\n\ninterface SectionTabsDisplayViewModel {\n sections: SectionTabsDisplayRenderSection[];\n empty: boolean;\n}\n\n@Component({\n selector: 'app-section-tabs-display',\n templateUrl: './section-tabs-display.component.html',\n styleUrl: './section-tabs-display.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class SectionTabsDisplayComponent implements OnChanges {\n // section-tabs-declared-component-inputs-v9\n private readonly componentInputNamesByType = new WeakMap<Type<unknown>, ReadonlySet<string>>();\n\n private pickDeclaredComponentInputs<TComponent>(\n component: Type<TComponent> | undefined,\n inputs: Record<string, unknown> | undefined,\n ): Record<string, unknown> {\n if (!component || !inputs) return {};\n\n const declaredInputNames = this.getDeclaredComponentInputNames(component as Type<unknown>);\n if (!declaredInputNames.size) return {};\n\n return Object.entries(inputs).reduce<Record<string, unknown>>((filteredInputs, [name, value]) => {\n if (declaredInputNames.has(name)) filteredInputs[name] = value;\n return filteredInputs;\n }, {});\n }\n\n private getDeclaredComponentInputNames(component: Type<unknown>): ReadonlySet<string> {\n const cachedInputNames = this.componentInputNamesByType.get(component);\n if (cachedInputNames) return cachedInputNames;\n\n const componentMirror = reflectComponentType(component);\n const inputNames = new Set(componentMirror?.inputs.map(input => input.templateName) ?? []);\n this.componentInputNamesByType.set(component, inputNames);\n return inputNames;\n }\n\n @Input({ required: true }) options!: SectionTabsDisplayOptions;\n @Input() selectedIndex = 0;\n @Input() queryParamKey?: string;\n @Input() menuHeader?: string;\n @Input() showEmptyFields?: boolean;\n\n @Output() selectedIndexChange = new EventEmitter<number>();\n @Output() showEmptyFieldsChange = new EventEmitter<boolean>();\n\n viewModel: SectionTabsDisplayViewModel = { sections: [], empty: true };\n showEmptyFieldsState = false;\n showEmptyFieldsToggle = false;\n showEmptyFieldsLabel = \"\";\n\n private emptyFieldsStateInitialized = false;\n private lastOptionShowEmptyFields?: boolean;\n\n constructor(\n @Inject(LOCALE_ID) private readonly locale: string,\n public readonly intl: SectionTabsIntl,\n changeDetector: ChangeDetectorRef,\n destroyRef: DestroyRef,\n ) {\n this.intl.changes.pipe(takeUntilDestroyed(destroyRef)).subscribe(() => {\n this.syncEmptyFieldsLabel();\n changeDetector.markForCheck();\n });\n }\n\n ngOnChanges(): void {\n this.syncEmptyFieldsOptions();\n this.viewModel = this.buildViewModel();\n }\n\n onSelectedIndexChange(index: number): void {\n this.selectedIndex = index;\n this.selectedIndexChange.emit(index);\n }\n\n onShowEmptyFieldsChange(checked: boolean): void {\n this.showEmptyFieldsState = checked;\n this.showEmptyFieldsChange.emit(checked);\n this.viewModel = this.buildViewModel();\n }\n\n onClickFieldItem(fieldItem: SectionTabsDisplayRenderField) {\n if (typeof fieldItem.onClick === 'function') fieldItem.onClick(fieldItem.value);\n }\n\n private syncEmptyFieldsLabel(): void {\n this.showEmptyFieldsLabel = this.options?.showEmptyFieldsLabel ?? this.intl.messages.showEmptyFields;\n }\n\n private syncEmptyFieldsOptions(): void {\n this.syncEmptyFieldsLabel();\n this.showEmptyFieldsToggle = this.options?.showEmptyFieldsToggle ?? false;\n const optionShowEmptyFields = this.options?.showEmptyFields;\n if (this.showEmptyFields !== undefined) {\n this.showEmptyFieldsState = this.showEmptyFields;\n this.emptyFieldsStateInitialized = true;\n this.lastOptionShowEmptyFields = optionShowEmptyFields;\n return;\n }\n\n if (!this.emptyFieldsStateInitialized || optionShowEmptyFields !== this.lastOptionShowEmptyFields) {\n this.showEmptyFieldsState = optionShowEmptyFields ?? false;\n this.emptyFieldsStateInitialized = true;\n this.lastOptionShowEmptyFields = optionShowEmptyFields;\n }\n }\n\n private buildViewModel(): SectionTabsDisplayViewModel {\n const sections = this.options?.sections ?? [];\n const renderSections = sections\n .filter((section): boolean => this.isVisible(section.visible))\n .map((section): SectionTabsDisplayRenderSection => this.buildSection(section));\n return { sections: renderSections, empty: renderSections.length === 0 };\n }\n\n private buildSection(section: SectionTabsDisplaySection): SectionTabsDisplayRenderSection {\n const cardBuildResult = this.buildCardItems(section);\n const completion = this.resolveCompletion(section.completion, (): SectionTabsDisplayNumericCompletion => {\n return this.calculateSectionCompletion(cardBuildResult.cards);\n });\n const preserveRows = this.hasRowSpan(section.cards);\n\n return {\n id: section.id,\n queryParamValue: section.queryParamValue ?? section.id,\n source: section,\n responsiveGrid: !preserveRows,\n label: section.label,\n icon: section.icon,\n tooltip: section.tooltip,\n sectionMode: section.sectionMode ?? 'default',\n cardCount: cardBuildResult.cards.length,\n gridStyles: this.buildGridStyles(section.grid, preserveRows),\n items: cardBuildResult.items,\n done: completion.done,\n total: completion.total,\n };\n }\n\n private buildCardItems(section: SectionTabsDisplaySection): SectionTabsDisplayCardBuildResult {\n const cards: SectionTabsDisplayRenderCard[] = [];\n const items = (section.cards ?? []).flatMap((card, index): SectionTabsDisplayCardItem[] => {\n if (!this.isVisible(card.visible)) return [];\n\n const cardItems: SectionTabsDisplayCardItem[] = [];\n const renderCard = this.buildCard(card, section);\n cards.push(renderCard);\n if (card.layout?.breakBefore) cardItems.push({ id: `${card.id || index}-before`, type: 'break' });\n cardItems.push(renderCard);\n if (card.layout?.breakAfter) cardItems.push({ id: `${card.id || index}-after`, type: 'break' });\n return cardItems;\n });\n\n return { items, cards };\n }\n\n private buildCard(card: SectionTabsDisplayCard, section: SectionTabsDisplaySection): SectionTabsDisplayRenderCard {\n const kind = this.getCardKind(card);\n const renderFields = kind === 'fields' ? this.buildFields(section, card) : [];\n const completion = this.resolveCompletion(card.completion, (): SectionTabsDisplayNumericCompletion => {\n return this.calculateFieldsCompletion(renderFields);\n });\n const preserveRows = this.hasRowSpan(card.fields);\n\n return {\n actions: card.actions,\n id: card.id,\n type: 'card',\n source: card,\n responsiveGrid: !preserveRows,\n label: card.label,\n icon: card.icon,\n tooltip: card.tooltip,\n kind,\n component: card.component,\n componentInputs: this.pickDeclaredComponentInputs(\n card.component,\n kind === 'component' ? this.buildCardComponentInputs(section, card) : undefined,\n ),\n gridStyles: this.buildGridStyles(card.grid, preserveRows),\n styles: this.buildLayoutStyles(card.layout, section.grid),\n classes: this.buildLayoutClasses(card.layout),\n items: this.buildVisibleFieldItems(renderFields),\n completion,\n };\n }\n\n private buildFields(\n section: SectionTabsDisplaySection,\n card: SectionTabsDisplayCard,\n ): SectionTabsDisplayRenderField[] {\n return (card.fields ?? []).flatMap((field, index): SectionTabsDisplayRenderField[] => {\n if (!this.isVisible(field.visible)) return [];\n\n const fieldId = this.buildFieldId(card, field, index);\n return [this.buildField(fieldId, section, card, field)];\n });\n }\n\n private buildVisibleFieldItems(fields: SectionTabsDisplayRenderField[]): SectionTabsDisplayFieldItem[] {\n return fields.flatMap((field): SectionTabsDisplayFieldItem[] => {\n if (!this.shouldRenderField(field)) return [];\n\n const items: SectionTabsDisplayFieldItem[] = [];\n if (field.source.layout?.breakBefore) items.push({ id: `${field.id}-before`, type: 'break' });\n items.push(field);\n if (field.source.layout?.breakAfter) items.push({ id: `${field.id}-after`, type: 'break' });\n return items;\n });\n }\n\n private buildField(\n id: string,\n section: SectionTabsDisplaySection,\n card: SectionTabsDisplayCard,\n field: SectionTabsDisplayField,\n ): SectionTabsDisplayRenderField {\n const value = this.getPathValue(this.options?.data, field.path);\n const selectOption = field.kind === 'select' ? this.findSelectOption(value, field.options) : undefined;\n const color = field.color ?? selectOption?.color;\n const filled = this.isFilled(value);\n const displayValue = this.formatFieldValue(field, value, selectOption);\n const chipsValue = field.kind === 'chips' ? this.buildChipViewModels(field, value) : [];\n const componentInputs = this.pickDeclaredComponentInputs(\n field.component,\n this.buildFieldComponentInputs(section, card, field, value),\n );\n\n return {\n id,\n type: 'field',\n source: field,\n label: field.label,\n labelAction: field.labelAction,\n kind: field.kind,\n value,\n filled,\n displayValue,\n chipsValue,\n color,\n suffix: field.kind === 'text' ? field.suffix : undefined,\n component: field.component,\n componentInputs,\n styles: this.buildLayoutStyles(field.layout, card.grid),\n classes: {\n ...this.buildLayoutClasses(field.layout),\n 'section-tabs-display__field-cell--empty': !filled,\n },\n onClick: field.onClick,\n };\n }\n\n private buildFieldComponentInputs(\n section: SectionTabsDisplaySection,\n card: SectionTabsDisplayCard,\n field: SectionTabsDisplayField,\n value: unknown,\n ): Record<string, unknown> {\n const context: SectionTabsDisplayFieldComponentContext = {\n data: this.options?.data,\n value,\n field,\n card,\n section,\n options: this.options,\n };\n\n return {\n data: context.data,\n record: context.data,\n value: context.value,\n field: context.field,\n card: context.card,\n section: context.section,\n options: context.options,\n ...(field.componentInputs ?? {}),\n };\n }\n\n private buildCardComponentInputs(\n section: SectionTabsDisplaySection,\n card: SectionTabsDisplayCard,\n ): Record<string, unknown> {\n const value = this.getPathValue(this.options?.data, card.path ?? '');\n const context: SectionTabsDisplayCardComponentContext = {\n data: this.options?.data,\n value,\n card,\n section,\n options: this.options,\n };\n\n return {\n data: context.data,\n record: context.data,\n value: context.value,\n card: context.card,\n section: context.section,\n options: context.options,\n ...(card.componentInputs ?? {}),\n };\n }\n\n private buildFieldId(card: SectionTabsDisplayCard, field: SectionTabsDisplayField, index: number): string {\n return `${card.id}-${field.path || field.label || index}-${index}`;\n }\n\n private buildGridStyles(grid?: SectionTabsDisplayGrid, preserveRows = false): Record<string, string> {\n const columns = this.normalizePositiveInteger(grid?.columns, 1);\n const minColumnWidth = grid?.minColumnWidth || '0px';\n\n return {\n '--section-tabs-display-grid-columns': `${columns}`,\n '--section-tabs-display-grid-gap': grid?.gap || '12px',\n '--section-tabs-display-grid-min-column-width': minColumnWidth,\n '--section-tabs-display-grid-track-min-column-width': preserveRows ? minColumnWidth : '0px',\n };\n }\n\n private buildLayoutStyles(\n layout: SectionTabsDisplayLayout | undefined,\n grid?: SectionTabsDisplayGrid,\n ): Record<string, string> {\n const styles: Record<string, string> = { ...(layout?.styles ?? {}) };\n const columns = this.normalizePositiveInteger(grid?.columns, 1);\n const colSpan = Math.min(this.normalizePositiveInteger(layout?.colSpan, 1), columns);\n const rowSpan = this.normalizePositiveInteger(layout?.rowSpan);\n\n styles['--section-tabs-display-item-col-span'] = `${colSpan}`;\n styles['grid-column'] = `span ${colSpan}`;\n if (rowSpan) styles['grid-row'] = `span ${rowSpan}`;\n\n return styles;\n }\n\n private hasRowSpan(items?: Array<{ layout?: SectionTabsDisplayLayout }>): boolean {\n return (items ?? []).some(item => this.normalizePositiveInteger(item.layout?.rowSpan, 1) > 1);\n }\n\n private buildLayoutClasses(layout?: SectionTabsDisplayLayout): Record<string, boolean> {\n const classes: Record<string, boolean> = { 'section-tabs-display__item--break-before': !!layout?.breakBefore };\n if (layout?.classes) layout.classes.split(' ').forEach(c => (classes[c] = true));\n return classes;\n }\n\n private resolveCompletion(\n source: false | SectionTabsDisplayCompletion | undefined,\n fallbackFactory: () => SectionTabsDisplayNumericCompletion,\n ): SectionTabsDisplayCompletionState {\n if (source === false || source?.disabled) return { enabled: false };\n\n const fallback = fallbackFactory();\n const doneOverride = this.resolveExplicitCounter(source?.done, source?.donePath);\n const totalOverride = this.resolveExplicitCounter(source?.total, source?.totalPath);\n const hasOverride = this.hasCounterValue(doneOverride) || this.hasCounterValue(totalOverride);\n\n if (!hasOverride && fallback.total <= 0) return { enabled: false };\n\n const done = this.hasCounterValue(doneOverride) ? doneOverride : fallback.done;\n const total = this.hasCounterValue(totalOverride) ? totalOverride : fallback.total;\n const enabled = this.hasCounterValue(done) || this.hasCounterValue(total);\n\n return {\n enabled,\n done: enabled ? done : undefined,\n total: enabled ? total : undefined,\n label: enabled ? this.buildCompletionLabel(done, total) : undefined,\n };\n }\n\n private calculateFieldsCompletion(fields: SectionTabsDisplayRenderField[]): SectionTabsDisplayNumericCompletion {\n return fields.reduce(\n (completion, field): SectionTabsDisplayNumericCompletion => {\n completion.total += 1;\n if (field.filled) completion.done += 1;\n return completion;\n },\n { done: 0, total: 0 },\n );\n }\n\n private calculateSectionCompletion(cards: SectionTabsDisplayRenderCard[]): SectionTabsDisplayNumericCompletion {\n return cards.reduce(\n (completion, card): SectionTabsDisplayNumericCompletion => {\n if (!card.completion.enabled) return completion;\n if (typeof card.completion.done === 'number') completion.done += card.completion.done;\n if (typeof card.completion.total === 'number') completion.total += card.completion.total;\n return completion;\n },\n { done: 0, total: 0 },\n );\n }\n\n private resolveExplicitCounter(value?: SectionTabsDisplayCounter, path?: string): SectionTabsDisplayCounter {\n if (this.hasCounterValue(value)) return value;\n if (path) return this.getPathValue(this.options?.data, path) as SectionTabsDisplayCounter;\n return undefined;\n }\n\n private buildCompletionLabel(\n done?: SectionTabsDisplayCounter,\n total?: SectionTabsDisplayCounter,\n ): string | undefined {\n if (!this.hasCounterValue(done)) return undefined;\n if (!this.hasCounterValue(total)) return `${done}`;\n return `${done}/${total}`;\n }\n\n private hasCounterValue(value: SectionTabsDisplayCounter): boolean {\n return value !== null && value !== undefined && value !== '';\n }\n\n private isVisible(predicate?: (record: any) => boolean): boolean {\n return predicate ? predicate(this.options?.data) : true;\n }\n\n private shouldRenderField(field: SectionTabsDisplayRenderField): boolean {\n if (this.showEmptyFieldsState) return true;\n if (field.kind === 'component') return true;\n return field.filled;\n }\n\n private getCardKind(card: SectionTabsDisplayCard): SectionTabsDisplayCardKind {\n return card.kind ?? (card.component ? 'component' : 'fields');\n }\n\n private formatFieldValue(\n field: SectionTabsDisplayField,\n value: unknown,\n selectOption?: SectionTabsDisplaySelectOption,\n ): string | SafeHtml {\n if (!this.isFilled(value)) return '—';\n if (field.kind === 'text' && !field.suffix && this.isSafeHtmlValue(value)) return value;\n\n switch (field.kind) {\n case 'number':\n return this.formatNumberValue(value, field);\n case 'date':\n return this.formatDateValue(value, field.dateFormat);\n case 'select':\n return selectOption?.label ?? this.formatUnknownValue(value);\n default:\n return this.formatTextValue(value, field.suffix);\n }\n }\n\n private formatTextValue(value: unknown, suffix?: string): string {\n const displayValue = this.formatUnknownValue(value);\n return suffix ? `${displayValue}${suffix}` : displayValue;\n }\n\n private formatNumberValue(value: unknown, field: SectionTabsDisplayField): string {\n const numberValue = Number(value);\n if (!Number.isFinite(numberValue)) return this.formatUnknownValue(value);\n\n const formattedValue = new Intl.NumberFormat(this.locale, {\n minimumFractionDigits: field.decimal,\n maximumFractionDigits: field.decimal,\n }).format(numberValue);\n\n return field.unit ? `${formattedValue} ${field.unit}` : formattedValue;\n }\n\n private formatDateValue(value: unknown, dateFormat?: string): string {\n try {\n return formatDate(value as string | number | Date, dateFormat || 'dd/MM/yyyy', this.locale);\n } catch {\n return this.formatUnknownValue(value);\n }\n }\n\n private buildChipViewModels(field: SectionTabsDisplayField, value: unknown): SectionTabsDisplayChipViewModel[] {\n const items = this.normalizeChipItems(value);\n return items\n .map((item, index): SectionTabsDisplayChipViewModel => {\n return {\n label: this.resolveChipLabel(item, field.chips),\n trackValue: this.resolveChipTrackValue(item, field.chips, index),\n icon: field.chips?.icon,\n color: this.resolveChipColor(item, field.chips),\n };\n })\n .filter((chip): boolean => !!chip.label);\n }\n\n private normalizeChipItems(value: unknown): unknown[] {\n if (!this.isFilled(value)) return [];\n return Array.isArray(value) ? value : [value];\n }\n\n private resolveChipLabel(item: unknown, chips?: SectionTabsDisplayChipConfig): string {\n if (chips?.labelPath) return this.formatOptionalValue(this.getPathValue(item, chips.labelPath));\n if (this.isPrimitiveValue(item)) return this.formatOptionalValue(item);\n\n return this.formatOptionalValue(\n this.getPathValue(item, 'label') ??\n this.getPathValue(item, 'name') ??\n this.getPathValue(item, 'title') ??\n this.getPathValue(item, 'displayName') ??\n this.getPathValue(item, 'fullname') ??\n this.getPathValue(item, '_id') ??\n this.getPathValue(item, 'id'),\n );\n }\n\n private resolveChipTrackValue(\n item: unknown,\n chips: SectionTabsDisplayChipConfig | undefined,\n index: number,\n ): unknown {\n if (chips?.trackByPath) return this.getPathValue(item, chips.trackByPath) ?? index;\n if (this.isPrimitiveValue(item)) return item ?? index;\n return (\n this.getPathValue(item, '_id') ?? this.getPathValue(item, 'id') ?? this.resolveChipLabel(item, chips) ?? index\n );\n }\n\n private resolveChipColor(item: unknown, chips?: SectionTabsDisplayChipConfig): string | undefined {\n if (chips?.colorPath) return this.formatOptionalValue(this.getPathValue(item, chips.colorPath)) || undefined;\n return chips?.color;\n }\n\n private formatOptionalValue(value: unknown): string {\n if (value === null || value === undefined || value === '') return '';\n return `${value}`;\n }\n\n // Pass Angular SafeHtml through unchanged; the innerHTML binding still applies Angular's security handling.\n private isSafeHtmlValue(value: unknown): value is SafeHtml {\n return typeof value === 'object' && value !== null &&\n Object.prototype.hasOwnProperty.call(value, 'changingThisBreaksApplicationSecurity');\n }\n\n private formatUnknownValue(value: unknown): string {\n if (Array.isArray(value)) return value.map((item): string => this.formatUnknownValue(item)).join(', ');\n if (typeof value === 'object' && value !== null) return JSON.stringify(value);\n return `${value}`;\n }\n\n private findSelectOption(\n value: unknown,\n options?: SectionTabsDisplaySelectOption[],\n ): SectionTabsDisplaySelectOption | undefined {\n return options?.find((option): boolean => this.areValuesEqual(option.value, value));\n }\n\n private areValuesEqual(first: unknown, second: unknown): boolean {\n if (first === second) return true;\n if (this.isPrimitiveValue(first) || this.isPrimitiveValue(second)) return false;\n\n try {\n return JSON.stringify(first) === JSON.stringify(second);\n } catch {\n return false;\n }\n }\n\n private getPathValue(data: unknown, path: string): unknown {\n if (!path) return data;\n\n return this.parsePath(path).reduce((current: unknown, pathPart: string): unknown => {\n if (current === null || current === undefined) return undefined;\n return (current as Record<string, unknown>)[pathPart];\n }, data);\n }\n\n private parsePath(path: string): string[] {\n return path\n .replace(\n /\\[(\\d+|\"[^\"]+\"|'[^']+')\\]/g,\n (_match: string, value: string): string => `.${value.replace(/[\"']/g, '')}`,\n )\n .split('.')\n .filter((pathPart): boolean => !!pathPart);\n }\n\n private normalizePositiveInteger(value: unknown): number | undefined;\n private normalizePositiveInteger(value: unknown, fallback: number): number;\n private normalizePositiveInteger(value: unknown, fallback?: number): number | undefined {\n const numberValue = Number(value ?? fallback);\n if (!Number.isFinite(numberValue) || numberValue <= 0) return fallback;\n return Math.floor(numberValue);\n }\n\n private isFilled(value: unknown): boolean {\n if (value === null || value === undefined || value === '') return false;\n if (Array.isArray(value)) return value.length > 0;\n return true;\n }\n\n private isPrimitiveValue(value: unknown): boolean {\n return value === null || (typeof value !== 'object' && typeof value !== 'function');\n }\n}\n","<!-- @format -->\n\n@if (viewModel.empty) {\n <div class=\"section-tabs-display__empty\">\n <strong>{{ intl.messages.emptySections }}</strong>\n </div>\n} @else {\n <app-section-tabs\n class=\"section-tabs-display\"\n [selectedIndex]=\"selectedIndex\"\n [queryParamKey]=\"queryParamKey\"\n (selectedIndexChange)=\"onSelectedIndexChange($event)\">\n @if (menuHeader) {\n <ng-template appSectionTabsMenuHeader>\n <div class=\"section-tabs-display__menu-header\">\n <span>{{ menuHeader }}</span>\n </div>\n </ng-template>\n }\n\n @if (showEmptyFieldsToggle) {\n <ng-template appSectionTabsFooter>\n <mat-slide-toggle [checked]=\"showEmptyFieldsState\" (change)=\"onShowEmptyFieldsChange($event.checked)\">\n <span [innerHTML]=\"showEmptyFieldsLabel\"></span>\n </mat-slide-toggle>\n </ng-template>\n }\n\n @for (section of viewModel.sections; track section.id) {\n <app-section-tab [done]=\"section.done\" [total]=\"section.total\" [queryParamValue]=\"section.queryParamValue\">\n <ng-template appSectionTabLabel>\n @if (section.icon) {\n <mat-icon [attr.title]=\"section.tooltip\">{{ section.icon }}</mat-icon>\n }\n <span [attr.title]=\"section.tooltip\" [innerHTML]=\"section.label\"></span>\n </ng-template>\n\n <ng-template appSectionTabContent>\n <div\n class=\"section-tabs-display__section\"\n [class.section-tabs-display__section--single-card]=\"section.sectionMode === 'single-card'\"\n [class.section-tabs-display__section--single-card-only]=\"\n section.sectionMode === 'single-card' && section.cardCount === 1\n \"\n [class.section-tabs-display__section--single-card-multiple]=\"\n section.sectionMode === 'single-card' && section.cardCount > 1\n \"\n [ngStyle]=\"section.gridStyles\"\n [appSectionTabsDisplayResponsiveGrid]=\"section.source.grid\"\n [sectionTabsDisplayResponsiveGridEnabled]=\"section.responsiveGrid\">\n @for (cardItem of section.items; track cardItem.id) {\n @if (cardItem.type === 'break') {\n <div class=\"section-tabs-display__grid-break\" aria-hidden=\"true\"></div>\n } @else {\n <article\n class=\"section-tabs-display__card section-tabs-card\"\n [ngClass]=\"cardItem.classes\"\n [ngStyle]=\"cardItem.styles\">\n <header class=\"section-tabs-display__card-header card-header\">\n <div class=\"section-tabs-display__card-title\">\n @if (cardItem.icon) {\n <mat-icon [attr.title]=\"cardItem.tooltip\">{{ cardItem.icon }}</mat-icon>\n }\n <h3 [attr.title]=\"cardItem.tooltip\" [innerHTML]=\"cardItem.label\"></h3>\n </div>\n\n @if (cardItem.completion.label) {\n <span class=\"section-tabs-display__completion-chip mini-chip\">{{\n cardItem.completion.label\n }}</span>\n }\n\n @if (cardItem.actions?.length) {\n <div class=\"section-tabs-display__card-actions\">\n @for (action of cardItem.actions; track action.id || action.label || action.icon || $index) {\n @if (action.menuOptions?.length) {\n @if (action.type === 'button') {\n <button\n mat-button\n type=\"button\"\n class=\"section-tabs-display__card-action\"\n [style.--action-color]=\"action.color\"\n [disabled]=\"action.disabled\"\n [matTooltip]=\"action.tooltip || ''\"\n [attr.aria-label]=\"action.ariaLabel || action.label || action.icon\"\n [matMenuTriggerFor]=\"displayCardActionMenu\">\n @if (action.icon) {\n <mat-icon>{{ action.icon }}</mat-icon>\n }\n <span>{{ action.label }}</span>\n </button>\n } @else {\n <button\n mat-icon-button\n type=\"button\"\n class=\"section-tabs-display__card-action\"\n [style.--action-color]=\"action.color\"\n [disabled]=\"action.disabled\"\n [matTooltip]=\"action.tooltip || ''\"\n [attr.aria-label]=\"action.ariaLabel || action.label || action.icon\"\n [matMenuTriggerFor]=\"displayCardActionMenu\">\n <mat-icon>{{ action.icon || 'more_vert' }}</mat-icon>\n </button>\n }\n\n <mat-menu #displayCardActionMenu=\"matMenu\">\n @for (option of action.menuOptions; track option.id) {\n <button\n mat-menu-item\n type=\"button\"\n [disabled]=\"option.disabled\"\n [matTooltip]=\"option.tooltip || ''\"\n [attr.aria-label]=\"option.ariaLabel || option.label\"\n (click)=\"option.handle()\">\n @if (option.icon) {\n <mat-icon>{{ option.icon }}</mat-icon>\n }\n <span>{{ option.label }}</span>\n </button>\n }\n </mat-menu>\n } @else if (action.type === 'button') {\n <button\n mat-button\n type=\"button\"\n class=\"section-tabs-display__card-action\"\n [style.--action-color]=\"action.color\"\n [disabled]=\"action.disabled\"\n [matTooltip]=\"action.tooltip || ''\"\n [attr.aria-label]=\"action.ariaLabel || action.label || action.icon\"\n (click)=\"action.handle()\">\n @if (action.icon) {\n <mat-icon>{{ action.icon }}</mat-icon>\n }\n <span>{{ action.label }}</span>\n </button>\n } @else {\n <button\n mat-icon-button\n type=\"button\"\n class=\"section-tabs-display__card-action\"\n [style.--action-color]=\"action.color\"\n [disabled]=\"action.disabled\"\n [matTooltip]=\"action.tooltip || ''\"\n [attr.aria-label]=\"action.ariaLabel || action.label || action.icon\"\n (click)=\"action.handle()\">\n <mat-icon>{{ action.icon }}</mat-icon>\n </button>\n }\n }\n </div>\n }\n </header>\n\n @if (cardItem.kind === 'component') {\n <div class=\"section-tabs-display__component-card\">\n @if (cardItem.component) {\n <ng-container\n *ngComponentOutlet=\"cardItem.component; inputs: cardItem.componentInputs\"></ng-container>\n } @else {\n <div class=\"section-tabs-display__empty-state empty-state\">\n <mat-icon aria-hidden=\"true\">extension_off</mat-icon>\n <div>\n <strong>{{ intl.messages.emptyComponents }}</strong>\n </div>\n </div>\n }\n </div>\n } @else {\n <div\n class=\"section-tabs-display__field-grid\"\n [ngStyle]=\"cardItem.gridStyles\"\n [appSectionTabsDisplayResponsiveGrid]=\"cardItem.source.grid\"\n [sectionTabsDisplayResponsiveGridEnabled]=\"cardItem.responsiveGrid\">\n @for (fieldItem of cardItem.items; track fieldItem.id) {\n @if (fieldItem.type === 'break') {\n <div class=\"section-tabs-display__grid-break\" aria-hidden=\"true\"></div>\n } @else {\n <div\n class=\"section-tabs-display__field-cell field-cell\"\n [ngClass]=\"fieldItem.classes\"\n [ngStyle]=\"fieldItem.styles\"\n [class.has-click]=\"!!fieldItem.onClick\"\n matRipple\n [matRippleDisabled]=\"!fieldItem.onClick\"\n (click)=\"onClickFieldItem(fieldItem)\">\n @if (fieldItem.kind === 'component') {\n @if (fieldItem.component) {\n <ng-container\n *ngComponentOutlet=\"\n fieldItem.component;\n inputs: fieldItem.componentInputs\n \"></ng-container>\n }\n } @else {\n <span class=\"section-tabs-display__field-label-row\">\n <span\n class=\"section-tabs-display__field-label field-label\"\n [innerHTML]=\"fieldItem.label\"></span>\n @if (fieldItem.labelAction; as action) {\n <button\n type=\"button\"\n class=\"section-tabs-display__field-label-action\"\n data-field-label-action\n [disabled]=\"action.disabled\"\n [attr.aria-label]=\"action.ariaLabel\"\n [attr.aria-pressed]=\"action.active\"\n (click)=\"action.onClick(); $event.stopPropagation()\">\n {{ action.active ? '★' : '☆' }}\n </button>\n }\n </span>\n\n @if (fieldItem.kind === 'chips') {\n <div class=\"section-tabs-display__chips\">\n @for (chip of fieldItem.chipsValue; track chip.trackValue) {\n <span class=\"section-tabs-display__chip\" [style.color]=\"chip.color\">\n @if (chip.icon) {\n <mat-icon aria-hidden=\"true\">{{ chip.icon }}</mat-icon>\n }\n <span [innerHTML]=\"chip.label\"></span>\n </span>\n } @empty {\n <span class=\"section-tabs-display__field-value field-value\">—</span>\n }\n </div>\n } @else {\n <span\n class=\"section-tabs-display__field-value field-value\"\n [style.color]=\"fieldItem.color\"\n [innerHTML]=\"fieldItem.displayValue\">\n </span>\n }\n }\n </div>\n }\n <!-- } @empty {\n <div class=\"section-tabs-display__empty-state empty-state\">\n <mat-icon aria-hidden=\"true\">visibility_off</mat-icon>\n <div>\n <strong>{{ intl.messages.emptyFields }}</strong>\n <span>{{ intl.messages.emptyFieldsDescription }}</span>\n </div>\n </div> -->\n }\n </div>\n }\n </article>\n }\n }\n </div>\n </ng-template>\n </app-section-tab>\n }\n </app-section-tabs>\n}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { MatRippleModule } from \"@angular/material/core\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { MatMenuModule } from \"@angular/material/menu\";\nimport { MatSlideToggleModule } from \"@angular/material/slide-toggle\";\nimport { MatTooltipModule } from \"@angular/material/tooltip\";\nimport { SectionTabComponent } from \"./section-tab.component\";\nimport { SectionTabsComponent } from \"./section-tabs.component\";\nimport { SectionTabsDisplayComponent } from \"./section-tabs-display/section-tabs-display.component\";\nimport { SectionTabContentDirective } from \"./directives/section-tab-content.directive\";\nimport { SectionTabLabelDirective } from \"./directives/section-tab-label.directive\";\nimport { SectionTabsDisplayResponsiveGridDirective } from \"./directives/section-tabs-display-responsive-grid.directive\";\nimport { SectionTabsFooterDirective } from \"./directives/section-tabs-footer.directive\";\nimport { SectionTabsMenuHeaderDirective } from \"./directives/section-tabs-menu-header.directive\";\n\nconst declarations = [\n SectionTabsComponent,\n SectionTabComponent,\n SectionTabsDisplayComponent,\n SectionTabLabelDirective,\n SectionTabContentDirective,\n SectionTabsMenuHeaderDirective,\n SectionTabsFooterDirective,\n SectionTabsDisplayResponsiveGridDirective,\n];\n\n@NgModule({\n declarations,\n imports: [CommonModule, MatButtonModule, MatIconModule, MatMenuModule, MatRippleModule, MatSlideToggleModule, MatTooltipModule],\n exports: [\n SectionTabsComponent,\n SectionTabComponent,\n SectionTabsDisplayComponent,\n SectionTabLabelDirective,\n SectionTabContentDirective,\n SectionTabsMenuHeaderDirective,\n SectionTabsFooterDirective,\n ],\n})\nexport class SectionTabsModule {}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,37 @@
1
1
  {
2
2
  "name": "@eherve/angular-material-section-tabs",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "22.0.0",
4
+ "author": "Eric Herve <eric.herve.95@gmail.com>",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/eherve/angular-material-extended.git"
8
+ },
9
+ "private": false,
10
+ "publishConfig": {
11
+ "access": "public"
12
+ },
13
+ "peerDependencies": {
14
+ "@angular/animations": "^22.0.0",
15
+ "@angular/cdk": "^22.0.0",
16
+ "@angular/common": "^22.0.0",
17
+ "@angular/core": "^22.0.0",
18
+ "@angular/material": "^22.0.0",
19
+ "rxjs": "^7.8.0"
20
+ },
21
+ "dependencies": {
22
+ "tslib": "^2.3.0"
23
+ },
24
+ "sideEffects": false,
25
+ "module": "fesm2022/eherve-angular-material-section-tabs.mjs",
26
+ "typings": "types/eherve-angular-material-section-tabs.d.ts",
27
+ "exports": {
28
+ "./package.json": {
29
+ "default": "./package.json"
30
+ },
31
+ ".": {
32
+ "types": "./types/eherve-angular-material-section-tabs.d.ts",
33
+ "default": "./fesm2022/eherve-angular-material-section-tabs.mjs"
34
+ }
35
+ },
36
+ "type": "module"
6
37
  }