{"version":3,"file":"lucca-front-ng-segmented-control-tabs.mjs","sources":["../../../packages/ng/segmented-control-tabs/segmented-control-tabs.token.ts","../../../packages/ng/segmented-control-tabs/panel/panel.component.ts","../../../packages/ng/segmented-control-tabs/segmented-control-tabs.component.ts","../../../packages/ng/segmented-control-tabs/segmented-control-tabs.component.html","../../../packages/ng/segmented-control-tabs/lucca-front-ng-segmented-control-tabs.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { SegmentedControlTabsComponent } from './segmented-control-tabs.component';\n\nexport const LU_SEGMENTEDCONTROLTABS_INSTANCE = new InjectionToken<SegmentedControlTabsComponent>('LU_SEGMENTEDCONTROLTABS_INSTANCE');\n","import { ChangeDetectionStrategy, Component, inject, input, ViewEncapsulation } from '@angular/core';\nimport { PortalContent } from '@lucca-front/ng/core';\nimport { LU_SEGMENTEDCONTROLTABS_INSTANCE } from '../segmented-control-tabs.token';\n\nlet nextId = 0;\n\n@Component({\n\tselector: 'lu-segmented-control-tabs-panel',\n\ttemplate: '<ng-content />',\n\tencapsulation: ViewEncapsulation.None,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\thost: {\n\t\tclass: 'segmentedControl_panel',\n\t\trole: 'tabpanel',\n\t\t'[tabindex]': '0',\n\t\t'[class.is-active]': 'segmentedControlTabsRef.active() === value()',\n\t\t'[id]': 'panelId',\n\t\t'[attr.aria-labelledby]': 'labelId',\n\t},\n})\nexport class SegmentedControlTabsPanelComponent<T = unknown> {\n\tprotected segmentedControlTabsRef = inject(LU_SEGMENTEDCONTROLTABS_INSTANCE);\n\n\treadonly label = input<PortalContent>();\n\n\treadonly value = input.required<T>();\n\n\treadonly id = nextId++;\n\n\treadonly panelId = `panel${this.id}`;\n\treadonly labelId = `tab${this.id}`;\n}\n","import {\n\tAfterContentInit,\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tcontentChildren,\n\tElementRef,\n\tforwardRef,\n\tinput,\n\tmodel,\n\tviewChildren,\n\tViewEncapsulation,\n} from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { PortalDirective } from '@lucca-front/ng/core';\nimport { NoopValueAccessorDirective } from '@lucca-front/ng/forms';\nimport { SegmentedControlTabsPanelComponent } from './public-api';\nimport { LU_SEGMENTEDCONTROLTABS_INSTANCE } from './segmented-control-tabs.token';\n\nlet nextId = 0;\n\n@Component({\n\tselector: 'lu-segmented-control-tabs',\n\ttemplateUrl: './segmented-control-tabs.component.html',\n\tstyleUrl: './segmented-control-tabs.component.scss',\n\tencapsulation: ViewEncapsulation.None,\n\timports: [ReactiveFormsModule, PortalDirective],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\thostDirectives: [NoopValueAccessorDirective],\n\tproviders: [\n\t\t{\n\t\t\tprovide: LU_SEGMENTEDCONTROLTABS_INSTANCE,\n\t\t\tuseExisting: forwardRef(() => SegmentedControlTabsComponent),\n\t\t},\n\t],\n})\nexport class SegmentedControlTabsComponent<T = unknown> implements AfterContentInit {\n\t/**\n\t * Applies small size to segmented control tabs\n\t */\n\treadonly small = input(false, { transform: booleanAttribute });\n\n\t/**\n\t * Display segmented control tabs vertically\n\t */\n\treadonly vertical = input(false, { transform: booleanAttribute });\n\n\tactive = model<T>(null);\n\n\treadonly id = `segmentedControl${nextId++}`;\n\n\treadonly tabs = contentChildren<SegmentedControlTabsPanelComponent<T>>(SegmentedControlTabsPanelComponent);\n\treadonly tabButtons = viewChildren<ElementRef<HTMLButtonElement>>('tabButton');\n\n\treadonly currentIndex = computed(() => this.tabs().findIndex((tab) => tab.value() === this.active()));\n\n\tprevious() {\n\t\tlet newIndex = this.currentIndex() - 1;\n\t\tif (newIndex < 0) {\n\t\t\tnewIndex = this.tabs().length - 1;\n\t\t}\n\t\tthis.setActiveTab(newIndex);\n\t}\n\n\tnext() {\n\t\tlet newIndex = this.currentIndex() + 1;\n\t\tif (newIndex >= this.tabs().length) {\n\t\t\tnewIndex = 0;\n\t\t}\n\t\tthis.setActiveTab(newIndex);\n\t}\n\n\tsetActiveTab(index: number) {\n\t\tthis.active.set(this.tabs()[index].value());\n\t\tthis.tabButtons()[index].nativeElement.focus();\n\t}\n\n\tngAfterContentInit(): void {\n\t\tif (this.active() === null) {\n\t\t\tthis.active.set(this.tabs()[0].value());\n\t\t}\n\t}\n}\n","<ul class=\"segmentedControl\" role=\"tablist\" [class.mod-S]=\"small()\" [class.mod-vertical]=\"vertical()\">\n\t@for (panel of tabs(); track panel.id) {\n\t\t<li class=\"segmentedControl-item\" role=\"presentation\">\n\t\t\t<button\n\t\t\t\t#tabButton\n\t\t\t\tclass=\"segmentedControl-item-action\"\n\t\t\t\ttype=\"button\"\n\t\t\t\trole=\"tab\"\n\t\t\t\t[attr.id]=\"panel.labelId\"\n\t\t\t\t[attr.aria-controls]=\"panel.value()\"\n\t\t\t\t[attr.aria-selected]=\"active() === panel.value()\"\n\t\t\t\t[attr.tabindex]=\"active() !== panel.value() ? '-1' : null\"\n\t\t\t\t(click)=\"active.set(panel.value())\"\n\t\t\t\t(keydown.arrowleft)=\"$event.preventDefault(); previous()\"\n\t\t\t\t(keydown.arrowup)=\"$event.preventDefault(); previous()\"\n\t\t\t\t(keydown.arrowright)=\"$event.preventDefault(); next()\"\n\t\t\t\t(keydown.arrowdown)=\"$event.preventDefault(); next()\"\n\t\t\t>\n\t\t\t\t<ng-container *luPortal=\"panel.label()\" />\n\t\t\t</button>\n\t\t</li>\n\t}\n</ul>\n<ng-content />\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["nextId"],"mappings":"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"}