igniteui-angular 22.2.0 → 22.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/checkbox/README.md +4 -0
  2. package/fesm2022/igniteui-angular-checkbox.mjs +18 -13
  3. package/fesm2022/igniteui-angular-checkbox.mjs.map +1 -1
  4. package/fesm2022/igniteui-angular-directives.mjs +19 -0
  5. package/fesm2022/igniteui-angular-directives.mjs.map +1 -1
  6. package/fesm2022/igniteui-angular-grids-core.mjs +4 -0
  7. package/fesm2022/igniteui-angular-grids-core.mjs.map +1 -1
  8. package/fesm2022/igniteui-angular-grids-hierarchical-grid.mjs +18 -41
  9. package/fesm2022/igniteui-angular-grids-hierarchical-grid.mjs.map +1 -1
  10. package/fesm2022/igniteui-angular-grids-pivot-grid.mjs +13 -15
  11. package/fesm2022/igniteui-angular-grids-pivot-grid.mjs.map +1 -1
  12. package/fesm2022/igniteui-angular-grids-tree-grid.mjs +43 -34
  13. package/fesm2022/igniteui-angular-grids-tree-grid.mjs.map +1 -1
  14. package/fesm2022/igniteui-angular-query-builder.mjs +4 -4
  15. package/fesm2022/igniteui-angular-query-builder.mjs.map +1 -1
  16. package/fesm2022/igniteui-angular-radio.mjs +32 -14
  17. package/fesm2022/igniteui-angular-radio.mjs.map +1 -1
  18. package/fesm2022/igniteui-angular-switch.mjs +18 -13
  19. package/fesm2022/igniteui-angular-switch.mjs.map +1 -1
  20. package/fesm2022/igniteui-angular-tabs.mjs +39 -9
  21. package/fesm2022/igniteui-angular-tabs.mjs.map +1 -1
  22. package/fesm2022/igniteui-angular-tree.mjs +2 -2
  23. package/fesm2022/igniteui-angular-tree.mjs.map +1 -1
  24. package/fesm2022/igniteui-angular-virtual-scroll.mjs +17 -0
  25. package/fesm2022/igniteui-angular-virtual-scroll.mjs.map +1 -1
  26. package/package.json +2 -2
  27. package/radio/README.md +4 -0
  28. package/skills/igniteui-angular-components/references/form-controls.md +1 -1
  29. package/skills/igniteui-angular-grids/references/types.md +1 -1
  30. package/styles/igniteui-angular-dark.css +1 -1
  31. package/styles/igniteui-angular.css +1 -1
  32. package/styles/igniteui-bootstrap-dark.css +1 -1
  33. package/styles/igniteui-bootstrap-light.css +1 -1
  34. package/styles/igniteui-dark-green.css +1 -1
  35. package/styles/igniteui-fluent-dark-excel.css +1 -1
  36. package/styles/igniteui-fluent-dark-word.css +1 -1
  37. package/styles/igniteui-fluent-dark.css +1 -1
  38. package/styles/igniteui-fluent-light-excel.css +1 -1
  39. package/styles/igniteui-fluent-light-word.css +1 -1
  40. package/styles/igniteui-fluent-light.css +1 -1
  41. package/styles/igniteui-indigo-dark.css +1 -1
  42. package/styles/igniteui-indigo-light.css +1 -1
  43. package/styles/maps/igniteui-angular-dark.css.map +1 -1
  44. package/styles/maps/igniteui-angular.css.map +1 -1
  45. package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
  46. package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
  47. package/styles/maps/igniteui-dark-green.css.map +1 -1
  48. package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
  49. package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
  50. package/styles/maps/igniteui-fluent-dark.css.map +1 -1
  51. package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
  52. package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
  53. package/styles/maps/igniteui-fluent-light.css.map +1 -1
  54. package/styles/maps/igniteui-indigo-dark.css.map +1 -1
  55. package/styles/maps/igniteui-indigo-light.css.map +1 -1
  56. package/switch/README.md +4 -0
  57. package/types/igniteui-angular-checkbox.d.ts +2 -1
  58. package/types/igniteui-angular-directives.d.ts +7 -1
  59. package/types/igniteui-angular-grids-hierarchical-grid.d.ts +7 -6
  60. package/types/igniteui-angular-grids-pivot-grid.d.ts +2 -4
  61. package/types/igniteui-angular-grids-tree-grid.d.ts +32 -14
  62. package/types/igniteui-angular-radio.d.ts +8 -1
  63. package/types/igniteui-angular-switch.d.ts +2 -1
  64. package/types/igniteui-angular-virtual-scroll.d.ts +5 -0
  65. package/virtual-scroll/README.md +1 -1
@@ -134,6 +134,10 @@ class IgxRadioGroupDirective {
134
134
  return this._invalid;
135
135
  }
136
136
  set invalid(value) {
137
+ // Signal Forms writes the field's raw validity here; show it only once touched or dirty.
138
+ if (this.control?.backend === 'signal' && !this.control.touchedOrDirty) {
139
+ value = false;
140
+ }
137
141
  this._invalid = value;
138
142
  this._setRadioButtonsInvalid();
139
143
  }
@@ -236,6 +240,7 @@ class IgxRadioGroupDirective {
236
240
  * @internal
237
241
  */
238
242
  updateValidityOnBlur() {
243
+ // Mark touched first, so the Signal Forms gate in `invalid` lets the state through.
239
244
  this._onTouchedCallback();
240
245
  this._radioButtons().forEach((button) => {
241
246
  button.focused = false;
@@ -586,7 +591,7 @@ class IgxRadioGroupDirective {
586
591
  _setRadioButtonsInvalid() {
587
592
  if (this._radioButtons) {
588
593
  this._radioButtons().forEach((button) => {
589
- button.invalid = this._invalid;
594
+ button.groupInvalid = this._invalid;
590
595
  });
591
596
  }
592
597
  }
@@ -666,19 +671,6 @@ class IgxRadioComponent extends CheckboxBaseDirective {
666
671
  * @memberof IgxRadioComponent
667
672
  */
668
673
  this.cssClass = 'igx-radio';
669
- /**
670
- * Sets/gets whether the radio button is invalid.
671
- * Default value is `false`.
672
- * ```html
673
- * <igx-radio invalid></igx-radio>
674
- * ```
675
- * ```typescript
676
- * let isInvalid = this.radio.invalid;
677
- * ```
678
- *
679
- * @memberof IgxRadioComponent
680
- */
681
- this.invalid = false;
682
674
  /**
683
675
  * Sets/gets whether the radio component is on focus.
684
676
  * Default value is `false`.
@@ -738,6 +730,32 @@ class IgxRadioComponent extends CheckboxBaseDirective {
738
730
  set groupDisabled(value) {
739
731
  this._groupDisabled = value;
740
732
  }
733
+ /**
734
+ * Invalid state of the parent group, applied to the button as is.
735
+ *
736
+ * @hidden @internal
737
+ */
738
+ set groupInvalid(value) {
739
+ this._invalid = value;
740
+ }
741
+ /**
742
+ * Sets/gets whether the radio button is invalid.
743
+ * Default value is `false`.
744
+ * ```html
745
+ * <igx-radio invalid></igx-radio>
746
+ * ```
747
+ * ```typescript
748
+ * let isInvalid = this.radio.invalid;
749
+ * ```
750
+ *
751
+ * @memberof IgxRadioComponent
752
+ */
753
+ get invalid() {
754
+ return super.invalid;
755
+ }
756
+ set invalid(value) {
757
+ super.invalid = value;
758
+ }
741
759
  /**
742
760
  * @hidden
743
761
  * @internal
@@ -1 +1 @@
1
- {"version":3,"file":"igniteui-angular-radio.mjs","sources":["../../../projects/igniteui-angular/radio/src/radio/radio-group/radio-group.directive.ts","../../../projects/igniteui-angular/radio/src/radio/radio.component.ts","../../../projects/igniteui-angular/radio/src/radio/radio.component.html","../../../projects/igniteui-angular/radio/src/radio/radio-group/public_api.ts","../../../projects/igniteui-angular/radio/src/radio/radio-group/radio-group.module.ts","../../../projects/igniteui-angular/radio/src/igniteui-angular-radio.ts"],"sourcesContent":["import {\n ChangeDetectorRef,\n Directive,\n DoCheck,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n OnDestroy,\n Output,\n QueryList,\n booleanAttribute,\n effect,\n signal,\n inject,\n ElementRef,\n Injector\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\nimport { fromEvent, noop, Subject, Subscription, takeUntil } from 'rxjs';\nimport { IgxRadioComponent } from '../radio.component';\nimport { isLeftToRight, NgControlAdapter } from 'igniteui-angular/core';\nimport { IChangeCheckboxEventArgs } from 'igniteui-angular/directives';\n/**\n * Determines the Radio Group alignment\n */\nexport const RadioGroupAlignment = {\n horizontal: 'horizontal',\n vertical: 'vertical'\n} as const;\nexport type RadioGroupAlignment = typeof RadioGroupAlignment[keyof typeof RadioGroupAlignment];\n\nlet nextId = 0;\n\n/**\n * Radio group directive renders set of radio buttons.\n *\n * @igxModule IgxRadioModule\n *\n * @igxTheme igx-radio-theme\n *\n * @igxKeywords radiogroup, radio, button, input\n *\n * @igxGroup Data Entry & Display\n *\n * @remarks\n * The Ignite UI Radio Group allows the user to select a single option from an available set of options that are listed side by side.\n *\n * @example:\n * ```html\n * <igx-radio-group name=\"radioGroup\">\n * <igx-radio *ngFor=\"let item of ['Foo', 'Bar', 'Baz']\" value=\"{{item}}\">\n * {{item}}\n * </igx-radio>\n * </igx-radio-group>\n * ```\n */\n@Directive({\n exportAs: 'igxRadioGroup',\n selector: '[igxRadioGroup],igx-radio-group',\n standalone: true\n})\nexport class IgxRadioGroupDirective implements ControlValueAccessor, OnDestroy, DoCheck {\n public ngControl = inject(NgControl, { optional: true, self: true });\n private control = NgControlAdapter.from(this.ngControl, inject(Injector));\n private _statusChanges$?: Subscription;\n private cdr = inject(ChangeDetectorRef);\n private readonly _element = inject<ElementRef<HTMLElement>>(ElementRef);\n\n private _radioButtons = signal<IgxRadioComponent[]>([]);\n private _radioButtonsList = new QueryList<IgxRadioComponent>();\n\n /**\n * Returns reference to the child radio buttons.\n *\n * @example\n * ```typescript\n * let radioButtons = this.radioGroup.radioButtons;\n * ```\n */\n public get radioButtons(): QueryList<IgxRadioComponent> {\n this._radioButtonsList.reset(this._radioButtons());\n return this._radioButtonsList;\n }\n\n /**\n * Sets/gets the value attribute.\n *\n * @example\n * ```html\n * <igx-radio-group [value]=\"'radioButtonValue'\"></igx-radio-group>\n * ```\n */\n @Input()\n public get value(): any {\n return this._value;\n }\n\n public set value(newValue: any) {\n if (this._value !== newValue) {\n this._value = newValue;\n this._selectRadioButton();\n }\n }\n\n /**\n * Sets/gets the `name` attribute of the radio group component. All child radio buttons inherits this name.\n *\n * @example\n * ```html\n * <igx-radio-group name = \"Radio1\"></igx-radio-group>\n * ```\n */\n @Input()\n public get name(): string {\n return this._name;\n }\n\n public set name(newValue: string) {\n if (this._name !== newValue) {\n this._name = newValue;\n this._setRadioButtonNames();\n }\n }\n\n /**\n * Sets/gets whether the radio group is required.\n *\n * @remarks\n * If not set, `required` will have value `false`.\n *\n * @example\n * ```html\n * <igx-radio-group [required] = \"true\"></igx-radio-group>\n * ```\n */\n @Input({ transform: booleanAttribute })\n public get required(): boolean {\n return this._required;\n }\n\n public set required(value: boolean) {\n this._required = value;\n this._setRadioButtonsRequired();\n }\n\n /**\n * Sets/gets the selected child radio button.\n *\n * @example\n * ```typescript\n * let selectedButton = this.radioGroup.selected;\n * this.radioGroup.selected = selectedButton;\n * ```\n */\n @Input()\n public get selected() {\n return this._selected;\n }\n\n public set selected(selected: IgxRadioComponent | null) {\n if (this._selected !== selected) {\n this._selected = selected;\n this.value = selected ? selected.value : null;\n }\n }\n\n /**\n * Sets/gets whether the radio group is invalid.\n *\n * @remarks\n * If not set, `invalid` will have value `false`.\n *\n * @example\n * ```html\n * <igx-radio-group [invalid] = \"true\"></igx-radio-group>\n * ```\n */\n @Input({ transform: booleanAttribute })\n public get invalid(): boolean {\n return this._invalid;\n }\n\n public set invalid(value: boolean) {\n this._invalid = value;\n this._setRadioButtonsInvalid();\n }\n\n /**\n * An event that is emitted after the radio group value is changed.\n *\n * @remarks\n * Provides references to the selected radio and the value property as event arguments.\n *\n * @example\n * ```html\n * <igx-radio-group (change)=\"handler($event)\"></igx-radio-group>\n * ```\n */\n // eslint-disable-next-line @angular-eslint/no-output-native\n @Output() public readonly change: EventEmitter<IChangeCheckboxEventArgs> = new EventEmitter<IChangeCheckboxEventArgs>();\n\n /**\n * The css class applied to the component.\n *\n * @hidden\n * @internal\n */\n @HostBinding('class.igx-radio-group')\n public cssClass = 'igx-radio-group';\n\n /**\n * @hidden\n * @internal\n * Sets vertical alignment to the radio group, if `alignment` is set to `vertical`.\n * By default the alignment is horizontal.\n *\n * @example\n * ```html\n * <igx-radio-group alignment=\"vertical\"></igx-radio-group>\n * ```\n */\n @HostBinding('class.igx-radio-group--vertical')\n protected vertical = false;\n\n /**\n * A css class applied to the component if any of the\n * child radio buttons labelPosition is set to `before`.\n *\n * @hidden\n * @internal\n */\n @HostBinding('class.igx-radio-group--before')\n protected get labelBefore() {\n return this._radioButtons().some((radio) => radio.labelPosition === 'before');\n }\n\n /**\n * A css class applied to the component if all\n * child radio buttons are disabled.\n *\n * @hidden\n * @internal\n */\n @HostBinding('class.igx-radio-group--disabled')\n protected get disabled() {\n return this._radioButtons().every((radio) => radio.disabled);\n }\n\n @HostListener('click', ['$event'])\n protected handleClick(event: MouseEvent) {\n event.stopPropagation();\n\n if (this.selected) {\n this.selected.nativeElement.focus();\n }\n }\n\n @HostListener('keydown', ['$event'])\n protected handleKeyDown(event: KeyboardEvent) {\n const { key } = event;\n const buttons = this._radioButtons().filter(radio => !radio.disabled);\n const checked = buttons.find((radio) => radio.checked);\n\n if (['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(key)) {\n let index = checked ? buttons.indexOf(checked) : -1;\n const ltr = isLeftToRight(this._element.nativeElement);\n\n switch (key) {\n case 'ArrowUp':\n index += -1;\n break;\n case 'ArrowLeft':\n index += ltr ? -1 : 1;\n break;\n case 'ArrowRight':\n index += ltr ? 1 : -1;\n break;\n default:\n index += 1;\n }\n\n if (index < 0) index = buttons.length - 1;\n if (index > buttons.length - 1) index = 0;\n\n buttons.forEach((radio) => {\n radio.deselect();\n radio.nativeElement.blur();\n });\n\n buttons[index].focused = true;\n buttons[index].nativeElement.focus();\n buttons[index].select();\n event.preventDefault();\n }\n\n if (event.key === \"Tab\") {\n buttons.forEach((radio) => {\n if (radio !== checked) {\n event.stopPropagation();\n }\n });\n }\n }\n\n /**\n * Returns the alignment of the `igx-radio-group`.\n * ```typescript\n * @ViewChild(\"MyRadioGroup\")\n * public radioGroup: IgxRadioGroupDirective;\n * ngAfterViewInit(){\n * let radioAlignment = this.radioGroup.alignment;\n * }\n * ```\n */\n @Input()\n public get alignment(): RadioGroupAlignment {\n return this.vertical ? RadioGroupAlignment.vertical : RadioGroupAlignment.horizontal;\n }\n /**\n * Allows you to set the radio group alignment.\n * Available options are `RadioGroupAlignment.horizontal` (default) and `RadioGroupAlignment.vertical`.\n * ```typescript\n * public alignment = RadioGroupAlignment.vertical;\n * //..\n * ```\n * ```html\n * <igx-radio-group [alignment]=\"alignment\"></igx-radio-group>\n * ```\n */\n public set alignment(value: RadioGroupAlignment) {\n this.vertical = value === RadioGroupAlignment.vertical;\n }\n\n /**\n * @hidden\n * @internal\n */\n private _onChangeCallback: (_: any) => void = noop;\n\n /**\n * @hidden\n * @internal\n */\n private _onTouchedCallback: () => void = noop;\n\n /**\n * @hidden\n * @internal\n */\n private _name = `igx-radio-group-${nextId++}`;\n\n /**\n * @hidden\n * @internal\n */\n private _value: any = null;\n\n /**\n * @hidden\n * @internal\n */\n private _selected: IgxRadioComponent | null = null;\n\n /**\n * @hidden\n * @internal\n */\n private _isInitialized = signal(false);\n\n /**\n * @hidden\n * @internal\n */\n private _required = false;\n private _disabled = false;\n\n /**\n * @hidden\n * @internal\n */\n private _invalid = false;\n\n /**\n * @hidden\n * @internal\n */\n private destroy$ = new Subject<boolean>();\n\n /**\n * @hidden\n * @internal\n */\n private queryChange$ = new Subject<void>();\n\n /**\n * @hidden\n * @internal\n */\n private updateValidityOnBlur() {\n this._onTouchedCallback();\n\n this._radioButtons().forEach((button) => {\n button.focused = false;\n\n if (button.invalid) {\n this.invalid = true;\n }\n });\n }\n\n /**\n * @hidden\n * @internal\n */\n private updateOnKeyUp(event: KeyboardEvent) {\n const checked = this._radioButtons().find(x => x.checked);\n\n if (event.key === \"Tab\") {\n this._radioButtons().forEach((radio) => {\n if (radio === checked) {\n checked.focused = true;\n }\n });\n }\n }\n\n public ngDoCheck(): void {\n this._updateTabIndex();\n }\n\n private _updateTabIndex() {\n // Needed so that the keyboard navigation of a radio group\n // placed inside a dialog works properly\n if (this._radioButtons) {\n const checked = this._radioButtons().find(x => x.checked);\n\n if (checked) {\n this._radioButtons().forEach((button) => {\n checked.nativeElement.tabIndex = 0;\n\n if (button !== checked) {\n button.nativeElement.tabIndex = -1;\n button.focused = false;\n }\n });\n }\n }\n }\n\n /**\n * Sets the \"checked\" property value on the radio input element.\n *\n * @remarks\n * Checks whether the provided value is consistent to the current radio button.\n * If it is, the checked attribute will have value `true` and selected property will contain the selected radio.\n *\n * @example\n * ```typescript\n * this.radioGroup.writeValue('radioButtonValue');\n * ```\n */\n public writeValue(value: any) {\n this.value = value;\n }\n\n /**\n * Registers a function called when the control value changes.\n *\n * @hidden\n * @internal\n */\n public registerOnChange(fn: (_: any) => void) {\n this._onChangeCallback = fn;\n }\n\n /**\n * Registers a function called when the control is touched.\n *\n * @hidden\n * @internal\n */\n public registerOnTouched(fn: () => void) {\n // Invoked on child blur, as forms register it before the child radio buttons exist.\n this._onTouchedCallback = fn;\n }\n\n /** @hidden @internal */\n public setDisabledState(isDisabled: boolean) {\n this._disabled = isDisabled;\n this._radioButtons().forEach((button) => button.groupDisabled = isDisabled);\n this.cdr.markForCheck();\n }\n\n /**\n * @hidden\n * @internal\n */\n public ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n\n constructor() {\n if (this.ngControl !== null) {\n this.ngControl.valueAccessor = this;\n }\n\n effect(() => {\n this.initialize();\n this.setRadioButtons();\n });\n }\n\n /**\n * @hidden\n * @internal\n */\n private initialize() {\n // The initial value can possibly be set by NgModel and it is possible that\n // the OnInit of the NgModel occurs after the OnInit of this class.\n this._isInitialized.set(true);\n\n const control = this.control;\n\n if (control) {\n // Runs inside an effect, so subscribe once.\n // Signal Forms also emit on touch, so re-evaluate rather than reset the state set on blur.\n this._statusChanges$ ??= control.statusChanges\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.invalid = !control.disabled && control.touchedOrDirty && control.invalid;\n });\n\n if (control.hasValidators) {\n this._required = control.required;\n }\n\n // Buttons registered after `setDisabledState` pick the state up here.\n if (this._disabled) {\n this._radioButtons().forEach((button) => button.groupDisabled = true);\n }\n }\n }\n\n /**\n * @hidden\n * @internal\n */\n private setRadioButtons() {\n this._radioButtons().forEach((button) => {\n Promise.resolve().then(() => {\n button.name = this._name;\n button.required = this._required;\n });\n\n if (button.value === this._value) {\n button.checked = true;\n this._selected = button;\n this.cdr.markForCheck();\n }\n });\n }\n\n /**\n * @hidden\n * @internal\n */\n private _setRadioButtonEvents(button: any) {\n button.change.pipe(\n takeUntil(button.destroy$),\n takeUntil(this.destroy$),\n takeUntil(this.queryChange$)\n ).subscribe((ev: IChangeCheckboxEventArgs) => this._selectedRadioButtonChanged(ev));\n\n button.blurRadio\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => this.updateValidityOnBlur());\n\n fromEvent<KeyboardEvent>(button.nativeElement, 'keyup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: KeyboardEvent) => this.updateOnKeyUp(event));\n }\n\n /**\n * @hidden\n * @internal\n */\n private _selectedRadioButtonChanged(args: IChangeCheckboxEventArgs) {\n this._radioButtons().forEach((button) => {\n button.checked = button.id === args.owner.id;\n if (button.checked && button.ngControl) {\n this.invalid = button.ngControl.invalid!;\n } else if (button.checked) {\n this.invalid = false;\n }\n });\n\n this._selected = args.owner;\n this._value = args.value;\n\n if (this._isInitialized()) {\n this.change.emit(args);\n this._onChangeCallback(this.value);\n }\n }\n\n /**\n * @hidden\n * @internal\n */\n private _setRadioButtonNames() {\n if (this._radioButtons) {\n this._radioButtons().forEach((button) => {\n button.name = this._name;\n });\n }\n }\n\n /**\n * @hidden\n * @internal\n */\n private _selectRadioButton() {\n if (this._radioButtons) {\n this._radioButtons().forEach((button) => {\n if (this._value === null) {\n // no value - uncheck all radio buttons\n if (button.checked) {\n button.checked = false;\n }\n } else {\n if (this._value === button.value) {\n // selected button\n if (this._selected !== button) {\n this._selected = button;\n }\n\n if (!button.checked) {\n button.checked = true;\n }\n } else {\n // non-selected button\n if (button.checked) {\n button.checked = false;\n }\n }\n }\n });\n }\n }\n\n /**\n * @hidden\n * @internal\n */\n private _setRadioButtonsRequired() {\n if (this._radioButtons) {\n this._radioButtons().forEach((button) => {\n button.required = this._required;\n });\n }\n }\n\n\n /**\n * Registers a radio button with this radio group.\n * This method is called by radio button components when they are created.\n * @hidden @internal\n */\n public _addRadioButton(radioButton: IgxRadioComponent): void {\n this._radioButtons.update(buttons => {\n if (!buttons.includes(radioButton)) {\n this._setRadioButtonEvents(radioButton);\n\n return [...buttons, radioButton];\n }\n return buttons;\n });\n }\n\n /**\n * Unregisters a radio button from this radio group.\n * This method is called by radio button components when they are destroyed.\n * @hidden @internal\n */\n public _removeRadioButton(radioButton: IgxRadioComponent): void {\n this._radioButtons.update(buttons =>\n buttons.filter(btn => btn !== radioButton)\n );\n }\n\n /**\n * @hidden\n * @internal\n */\n private _setRadioButtonsInvalid() {\n if (this._radioButtons) {\n this._radioButtons().forEach((button) => {\n button.invalid = this._invalid;\n });\n }\n }\n}\n","import {\n AfterViewInit,\n Component,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n booleanAttribute,\n OnDestroy,\n inject,\n ChangeDetectionStrategy,\n ViewEncapsulation\n} from '@angular/core';\nimport { ControlValueAccessor } from '@angular/forms';\nimport { EditorProvider, EDITOR_PROVIDER } from 'igniteui-angular/core';\nimport { CheckboxBaseDirective, IgxRippleDirective, IChangeCheckboxEventArgs } from 'igniteui-angular/directives';\nimport { IgxRadioGroupDirective } from './radio-group/radio-group.directive';\n\n/**\n * **Ignite UI for Angular Radio Button** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/radio_button.html)\n *\n * The Ignite UI Radio Button allows the user to select a single option from an available set of options that are listed side by side.\n *\n * Example:\n * ```html\n * <igx-radio>\n * Simple radio button\n * </igx-radio>\n * ```\n */\n@Component({\n selector: 'igx-radio',\n providers: [{\n provide: EDITOR_PROVIDER,\n useExisting: IgxRadioComponent,\n multi: true\n }],\n templateUrl: 'radio.component.html',\n styleUrl: 'radio.component.css',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [IgxRippleDirective]\n})\n\nexport class IgxRadioComponent\n extends CheckboxBaseDirective\n implements AfterViewInit, OnDestroy, ControlValueAccessor, EditorProvider {\n /** @hidden @internal */\n public blurRadio = new EventEmitter();\n\n private radioGroup = inject(IgxRadioGroupDirective, { optional: true, skipSelf: true });\n private _disabled = false;\n private _groupDisabled = false;\n\n /**\n * Returns the class of the radio component.\n * ```typescript\n * let radioClass = this.radio.cssClass;\n * ```\n *\n * @memberof IgxRadioComponent\n */\n @HostBinding('class.igx-radio')\n public override cssClass = 'igx-radio';\n\n /**\n * Sets/gets the `checked` attribute.\n * Default value is `false`.\n * ```html\n * <igx-radio [checked]=\"true\"></igx-radio>\n * ```\n * ```typescript\n * let isChecked = this.radio.checked;\n * ```\n *\n * @memberof IgxRadioComponent\n */\n @HostBinding('class.igx-radio--checked')\n @Input({ transform: booleanAttribute })\n public override set checked(value: boolean) {\n this._checked = value;\n }\n public override get checked() {\n return this._checked;\n }\n\n /**\n * Sets/gets the `disabled` attribute.\n * Default value is `false`.\n * ```html\n * <igx-radio disabled></igx-radio>\n * ```\n * ```typescript\n * let isDisabled = this.radio.disabled;\n * ```\n *\n * @memberof IgxRadioComponent\n */\n @HostBinding('class.igx-radio--disabled')\n @Input({ transform: booleanAttribute })\n public override get disabled(): boolean {\n return this._disabled || this._groupDisabled;\n }\n public override set disabled(value: boolean) {\n this._disabled = value;\n }\n\n /**\n * Disabled state of the group's form control. Kept apart from the\n * `disabled` input so `enable()` does not clear a template-disabled button.\n *\n * @hidden @internal\n */\n public set groupDisabled(value: boolean) {\n this._groupDisabled = value;\n }\n\n /**\n * Sets/gets whether the radio button is invalid.\n * Default value is `false`.\n * ```html\n * <igx-radio invalid></igx-radio>\n * ```\n * ```typescript\n * let isInvalid = this.radio.invalid;\n * ```\n *\n * @memberof IgxRadioComponent\n */\n @HostBinding('class.igx-radio--invalid')\n @Input({ transform: booleanAttribute })\n public override invalid = false;\n\n /**\n * Sets/gets whether the radio component is on focus.\n * Default value is `false`.\n * ```typescript\n * this.radio.focus = true;\n * ```\n * ```typescript\n * let isFocused = this.radio.focused;\n * ```\n *\n * @memberof IgxRadioComponent\n */\n @HostBinding('class.igx-radio--focused')\n public override focused = false;\n\n /**\n * @hidden\n * @internal\n */\n @HostListener('change', ['$event'])\n public _changed(event: IChangeCheckboxEventArgs) {\n if (event instanceof Event) {\n event.preventDefault();\n }\n }\n\n /**\n * @hidden\n */\n @HostListener('click')\n public override _onCheckboxClick() {\n this.select();\n }\n\n /**\n * Selects the current radio button.\n * ```typescript\n * this.radio.select();\n * ```\n *\n * @memberof IgxRadioComponent\n */\n public select() {\n if (!this.checked) {\n this.checked = true;\n this.change.emit({\n value: this.value,\n owner: this,\n checked: this.checked,\n });\n this._onChangeCallback(this.value);\n }\n }\n\n /**\n * Deselects the current radio button.\n * ```typescript\n * this.radio.deselect();\n * ```\n *\n * @memberof IgxRadioComponent\n */\n public deselect() {\n this.checked = false;\n this.focused = false;\n this.cdr.markForCheck();\n }\n\n /**\n * Checks whether the provided value is consistent to the current radio button.\n * If it is, the checked attribute will have value `true`;\n * ```typescript\n * this.radio.writeValue('radioButtonValue');\n * ```\n */\n public override writeValue(value: any) {\n this.value = this.value ?? value;\n\n if (value === this.value) {\n if (!this.checked) {\n this.checked = true;\n }\n } else {\n this.deselect();\n }\n }\n\n /**\n * @hidden\n */\n @HostListener('blur')\n public override onBlur() {\n super.onBlur();\n this.blurRadio.emit();\n }\n\n /**\n * @hidden\n * @internal\n */\n public override ngAfterViewInit(): void {\n super.ngAfterViewInit();\n\n // Register with parent radio group if it exists\n if (this.radioGroup) {\n this.radioGroup._addRadioButton(this);\n }\n }\n\n /**\n * @hidden\n * @internal\n */\n public ngOnDestroy(): void {\n // Unregister from parent radio group if it exists\n if (this.radioGroup) {\n this.radioGroup._removeRadioButton(this);\n }\n }\n}\n","<input #checkbox class=\"igx-radio__input\" type=\"radio\"\n [id]=\"inputId\"\n [name]=\"name\"\n [value]=\"value\"\n [tabindex]=\"tabindex\"\n [disabled]=\"disabled\"\n [checked]=\"checked\"\n [required]=\"required\"\n [attr.aria-required]=\"required\"\n [attr.aria-invalid]=\"invalid\"\n [attr.aria-checked]=\"checked\"\n [attr.aria-labelledby]=\"ariaLabel ? null : ariaLabelledBy\"\n [attr.aria-label]=\"ariaLabel\"\n (blur)=\"onBlur()\" />\n\n<span #label class=\"igx-radio__composite\" igxRipple\n igxRippleTarget=\".igx-radio__ripple\"\n [igxRippleDisabled]=\"disableRipple\"\n [igxRippleCentered]=\"true\"\n [igxRippleDuration]=\"300\">\n <div class=\"igx-radio__ripple\"></div>\n</span>\n\n<span #placeholderLabel\n [id]=\"labelId\"\n [class]=\"labelClass\">\n <ng-content></ng-content>\n</span>\n","import { IgxRadioComponent } from '../../radio/radio.component';\nimport { IgxRadioGroupDirective } from './radio-group.directive';\n\nexport * from './radio-group.directive';\n\n/* NOTE: Radio Group directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_RADIO_GROUP_DIRECTIVES = [\n IgxRadioGroupDirective,\n IgxRadioComponent\n] as const;\n","import { NgModule } from '@angular/core';\nimport { IgxRadioGroupDirective } from './radio-group.directive';\nimport { IgxRadioComponent } from '../radio.component';\n\n/**\n * @hidden\n * @deprecated\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n imports: [IgxRadioGroupDirective, IgxRadioComponent],\n exports: [IgxRadioGroupDirective, IgxRadioComponent]\n})\nexport class IgxRadioModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"igniteui-angular-radio.mjs","sources":["../../../projects/igniteui-angular/radio/src/radio/radio-group/radio-group.directive.ts","../../../projects/igniteui-angular/radio/src/radio/radio.component.ts","../../../projects/igniteui-angular/radio/src/radio/radio.component.html","../../../projects/igniteui-angular/radio/src/radio/radio-group/public_api.ts","../../../projects/igniteui-angular/radio/src/radio/radio-group/radio-group.module.ts","../../../projects/igniteui-angular/radio/src/igniteui-angular-radio.ts"],"sourcesContent":["import {\n ChangeDetectorRef,\n Directive,\n DoCheck,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n OnDestroy,\n Output,\n QueryList,\n booleanAttribute,\n effect,\n signal,\n inject,\n ElementRef,\n Injector\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\nimport { fromEvent, noop, Subject, Subscription, takeUntil } from 'rxjs';\nimport { IgxRadioComponent } from '../radio.component';\nimport { isLeftToRight, NgControlAdapter } from 'igniteui-angular/core';\nimport { IChangeCheckboxEventArgs } from 'igniteui-angular/directives';\n/**\n * Determines the Radio Group alignment\n */\nexport const RadioGroupAlignment = {\n horizontal: 'horizontal',\n vertical: 'vertical'\n} as const;\nexport type RadioGroupAlignment = typeof RadioGroupAlignment[keyof typeof RadioGroupAlignment];\n\nlet nextId = 0;\n\n/**\n * Radio group directive renders set of radio buttons.\n *\n * @igxModule IgxRadioModule\n *\n * @igxTheme igx-radio-theme\n *\n * @igxKeywords radiogroup, radio, button, input\n *\n * @igxGroup Data Entry & Display\n *\n * @remarks\n * The Ignite UI Radio Group allows the user to select a single option from an available set of options that are listed side by side.\n *\n * @example:\n * ```html\n * <igx-radio-group name=\"radioGroup\">\n * <igx-radio *ngFor=\"let item of ['Foo', 'Bar', 'Baz']\" value=\"{{item}}\">\n * {{item}}\n * </igx-radio>\n * </igx-radio-group>\n * ```\n */\n@Directive({\n exportAs: 'igxRadioGroup',\n selector: '[igxRadioGroup],igx-radio-group',\n standalone: true\n})\nexport class IgxRadioGroupDirective implements ControlValueAccessor, OnDestroy, DoCheck {\n public ngControl = inject(NgControl, { optional: true, self: true });\n private control = NgControlAdapter.from(this.ngControl, inject(Injector));\n private _statusChanges$?: Subscription;\n private cdr = inject(ChangeDetectorRef);\n private readonly _element = inject<ElementRef<HTMLElement>>(ElementRef);\n\n private _radioButtons = signal<IgxRadioComponent[]>([]);\n private _radioButtonsList = new QueryList<IgxRadioComponent>();\n\n /**\n * Returns reference to the child radio buttons.\n *\n * @example\n * ```typescript\n * let radioButtons = this.radioGroup.radioButtons;\n * ```\n */\n public get radioButtons(): QueryList<IgxRadioComponent> {\n this._radioButtonsList.reset(this._radioButtons());\n return this._radioButtonsList;\n }\n\n /**\n * Sets/gets the value attribute.\n *\n * @example\n * ```html\n * <igx-radio-group [value]=\"'radioButtonValue'\"></igx-radio-group>\n * ```\n */\n @Input()\n public get value(): any {\n return this._value;\n }\n\n public set value(newValue: any) {\n if (this._value !== newValue) {\n this._value = newValue;\n this._selectRadioButton();\n }\n }\n\n /**\n * Sets/gets the `name` attribute of the radio group component. All child radio buttons inherits this name.\n *\n * @example\n * ```html\n * <igx-radio-group name = \"Radio1\"></igx-radio-group>\n * ```\n */\n @Input()\n public get name(): string {\n return this._name;\n }\n\n public set name(newValue: string) {\n if (this._name !== newValue) {\n this._name = newValue;\n this._setRadioButtonNames();\n }\n }\n\n /**\n * Sets/gets whether the radio group is required.\n *\n * @remarks\n * If not set, `required` will have value `false`.\n *\n * @example\n * ```html\n * <igx-radio-group [required] = \"true\"></igx-radio-group>\n * ```\n */\n @Input({ transform: booleanAttribute })\n public get required(): boolean {\n return this._required;\n }\n\n public set required(value: boolean) {\n this._required = value;\n this._setRadioButtonsRequired();\n }\n\n /**\n * Sets/gets the selected child radio button.\n *\n * @example\n * ```typescript\n * let selectedButton = this.radioGroup.selected;\n * this.radioGroup.selected = selectedButton;\n * ```\n */\n @Input()\n public get selected() {\n return this._selected;\n }\n\n public set selected(selected: IgxRadioComponent | null) {\n if (this._selected !== selected) {\n this._selected = selected;\n this.value = selected ? selected.value : null;\n }\n }\n\n /**\n * Sets/gets whether the radio group is invalid.\n *\n * @remarks\n * If not set, `invalid` will have value `false`.\n *\n * @example\n * ```html\n * <igx-radio-group [invalid] = \"true\"></igx-radio-group>\n * ```\n */\n @Input({ transform: booleanAttribute })\n public get invalid(): boolean {\n return this._invalid;\n }\n\n public set invalid(value: boolean) {\n // Signal Forms writes the field's raw validity here; show it only once touched or dirty.\n if (this.control?.backend === 'signal' && !this.control.touchedOrDirty) {\n value = false;\n }\n\n this._invalid = value;\n this._setRadioButtonsInvalid();\n }\n\n /**\n * An event that is emitted after the radio group value is changed.\n *\n * @remarks\n * Provides references to the selected radio and the value property as event arguments.\n *\n * @example\n * ```html\n * <igx-radio-group (change)=\"handler($event)\"></igx-radio-group>\n * ```\n */\n // eslint-disable-next-line @angular-eslint/no-output-native\n @Output() public readonly change: EventEmitter<IChangeCheckboxEventArgs> = new EventEmitter<IChangeCheckboxEventArgs>();\n\n /**\n * The css class applied to the component.\n *\n * @hidden\n * @internal\n */\n @HostBinding('class.igx-radio-group')\n public cssClass = 'igx-radio-group';\n\n /**\n * @hidden\n * @internal\n * Sets vertical alignment to the radio group, if `alignment` is set to `vertical`.\n * By default the alignment is horizontal.\n *\n * @example\n * ```html\n * <igx-radio-group alignment=\"vertical\"></igx-radio-group>\n * ```\n */\n @HostBinding('class.igx-radio-group--vertical')\n protected vertical = false;\n\n /**\n * A css class applied to the component if any of the\n * child radio buttons labelPosition is set to `before`.\n *\n * @hidden\n * @internal\n */\n @HostBinding('class.igx-radio-group--before')\n protected get labelBefore() {\n return this._radioButtons().some((radio) => radio.labelPosition === 'before');\n }\n\n /**\n * A css class applied to the component if all\n * child radio buttons are disabled.\n *\n * @hidden\n * @internal\n */\n @HostBinding('class.igx-radio-group--disabled')\n protected get disabled() {\n return this._radioButtons().every((radio) => radio.disabled);\n }\n\n @HostListener('click', ['$event'])\n protected handleClick(event: MouseEvent) {\n event.stopPropagation();\n\n if (this.selected) {\n this.selected.nativeElement.focus();\n }\n }\n\n @HostListener('keydown', ['$event'])\n protected handleKeyDown(event: KeyboardEvent) {\n const { key } = event;\n const buttons = this._radioButtons().filter(radio => !radio.disabled);\n const checked = buttons.find((radio) => radio.checked);\n\n if (['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(key)) {\n let index = checked ? buttons.indexOf(checked) : -1;\n const ltr = isLeftToRight(this._element.nativeElement);\n\n switch (key) {\n case 'ArrowUp':\n index += -1;\n break;\n case 'ArrowLeft':\n index += ltr ? -1 : 1;\n break;\n case 'ArrowRight':\n index += ltr ? 1 : -1;\n break;\n default:\n index += 1;\n }\n\n if (index < 0) index = buttons.length - 1;\n if (index > buttons.length - 1) index = 0;\n\n buttons.forEach((radio) => {\n radio.deselect();\n radio.nativeElement.blur();\n });\n\n buttons[index].focused = true;\n buttons[index].nativeElement.focus();\n buttons[index].select();\n event.preventDefault();\n }\n\n if (event.key === \"Tab\") {\n buttons.forEach((radio) => {\n if (radio !== checked) {\n event.stopPropagation();\n }\n });\n }\n }\n\n /**\n * Returns the alignment of the `igx-radio-group`.\n * ```typescript\n * @ViewChild(\"MyRadioGroup\")\n * public radioGroup: IgxRadioGroupDirective;\n * ngAfterViewInit(){\n * let radioAlignment = this.radioGroup.alignment;\n * }\n * ```\n */\n @Input()\n public get alignment(): RadioGroupAlignment {\n return this.vertical ? RadioGroupAlignment.vertical : RadioGroupAlignment.horizontal;\n }\n /**\n * Allows you to set the radio group alignment.\n * Available options are `RadioGroupAlignment.horizontal` (default) and `RadioGroupAlignment.vertical`.\n * ```typescript\n * public alignment = RadioGroupAlignment.vertical;\n * //..\n * ```\n * ```html\n * <igx-radio-group [alignment]=\"alignment\"></igx-radio-group>\n * ```\n */\n public set alignment(value: RadioGroupAlignment) {\n this.vertical = value === RadioGroupAlignment.vertical;\n }\n\n /**\n * @hidden\n * @internal\n */\n private _onChangeCallback: (_: any) => void = noop;\n\n /**\n * @hidden\n * @internal\n */\n private _onTouchedCallback: () => void = noop;\n\n /**\n * @hidden\n * @internal\n */\n private _name = `igx-radio-group-${nextId++}`;\n\n /**\n * @hidden\n * @internal\n */\n private _value: any = null;\n\n /**\n * @hidden\n * @internal\n */\n private _selected: IgxRadioComponent | null = null;\n\n /**\n * @hidden\n * @internal\n */\n private _isInitialized = signal(false);\n\n /**\n * @hidden\n * @internal\n */\n private _required = false;\n private _disabled = false;\n\n /**\n * @hidden\n * @internal\n */\n private _invalid = false;\n\n /**\n * @hidden\n * @internal\n */\n private destroy$ = new Subject<boolean>();\n\n /**\n * @hidden\n * @internal\n */\n private queryChange$ = new Subject<void>();\n\n /**\n * @hidden\n * @internal\n */\n private updateValidityOnBlur() {\n // Mark touched first, so the Signal Forms gate in `invalid` lets the state through.\n this._onTouchedCallback();\n\n this._radioButtons().forEach((button) => {\n button.focused = false;\n\n if (button.invalid) {\n this.invalid = true;\n }\n });\n }\n\n /**\n * @hidden\n * @internal\n */\n private updateOnKeyUp(event: KeyboardEvent) {\n const checked = this._radioButtons().find(x => x.checked);\n\n if (event.key === \"Tab\") {\n this._radioButtons().forEach((radio) => {\n if (radio === checked) {\n checked.focused = true;\n }\n });\n }\n }\n\n public ngDoCheck(): void {\n this._updateTabIndex();\n }\n\n private _updateTabIndex() {\n // Needed so that the keyboard navigation of a radio group\n // placed inside a dialog works properly\n if (this._radioButtons) {\n const checked = this._radioButtons().find(x => x.checked);\n\n if (checked) {\n this._radioButtons().forEach((button) => {\n checked.nativeElement.tabIndex = 0;\n\n if (button !== checked) {\n button.nativeElement.tabIndex = -1;\n button.focused = false;\n }\n });\n }\n }\n }\n\n /**\n * Sets the \"checked\" property value on the radio input element.\n *\n * @remarks\n * Checks whether the provided value is consistent to the current radio button.\n * If it is, the checked attribute will have value `true` and selected property will contain the selected radio.\n *\n * @example\n * ```typescript\n * this.radioGroup.writeValue('radioButtonValue');\n * ```\n */\n public writeValue(value: any) {\n this.value = value;\n }\n\n /**\n * Registers a function called when the control value changes.\n *\n * @hidden\n * @internal\n */\n public registerOnChange(fn: (_: any) => void) {\n this._onChangeCallback = fn;\n }\n\n /**\n * Registers a function called when the control is touched.\n *\n * @hidden\n * @internal\n */\n public registerOnTouched(fn: () => void) {\n // Invoked on child blur, as forms register it before the child radio buttons exist.\n this._onTouchedCallback = fn;\n }\n\n /** @hidden @internal */\n public setDisabledState(isDisabled: boolean) {\n this._disabled = isDisabled;\n this._radioButtons().forEach((button) => button.groupDisabled = isDisabled);\n this.cdr.markForCheck();\n }\n\n /**\n * @hidden\n * @internal\n */\n public ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n\n constructor() {\n if (this.ngControl !== null) {\n this.ngControl.valueAccessor = this;\n }\n\n effect(() => {\n this.initialize();\n this.setRadioButtons();\n });\n }\n\n /**\n * @hidden\n * @internal\n */\n private initialize() {\n // The initial value can possibly be set by NgModel and it is possible that\n // the OnInit of the NgModel occurs after the OnInit of this class.\n this._isInitialized.set(true);\n\n const control = this.control;\n\n if (control) {\n // Runs inside an effect, so subscribe once.\n // Signal Forms also emit on touch, so re-evaluate rather than reset the state set on blur.\n this._statusChanges$ ??= control.statusChanges\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.invalid = !control.disabled && control.touchedOrDirty && control.invalid;\n });\n\n if (control.hasValidators) {\n this._required = control.required;\n }\n\n // Buttons registered after `setDisabledState` pick the state up here.\n if (this._disabled) {\n this._radioButtons().forEach((button) => button.groupDisabled = true);\n }\n }\n }\n\n /**\n * @hidden\n * @internal\n */\n private setRadioButtons() {\n this._radioButtons().forEach((button) => {\n Promise.resolve().then(() => {\n button.name = this._name;\n button.required = this._required;\n });\n\n if (button.value === this._value) {\n button.checked = true;\n this._selected = button;\n this.cdr.markForCheck();\n }\n });\n }\n\n /**\n * @hidden\n * @internal\n */\n private _setRadioButtonEvents(button: any) {\n button.change.pipe(\n takeUntil(button.destroy$),\n takeUntil(this.destroy$),\n takeUntil(this.queryChange$)\n ).subscribe((ev: IChangeCheckboxEventArgs) => this._selectedRadioButtonChanged(ev));\n\n button.blurRadio\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => this.updateValidityOnBlur());\n\n fromEvent<KeyboardEvent>(button.nativeElement, 'keyup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: KeyboardEvent) => this.updateOnKeyUp(event));\n }\n\n /**\n * @hidden\n * @internal\n */\n private _selectedRadioButtonChanged(args: IChangeCheckboxEventArgs) {\n this._radioButtons().forEach((button) => {\n button.checked = button.id === args.owner.id;\n if (button.checked && button.ngControl) {\n this.invalid = button.ngControl.invalid!;\n } else if (button.checked) {\n this.invalid = false;\n }\n });\n\n this._selected = args.owner;\n this._value = args.value;\n\n if (this._isInitialized()) {\n this.change.emit(args);\n this._onChangeCallback(this.value);\n }\n }\n\n /**\n * @hidden\n * @internal\n */\n private _setRadioButtonNames() {\n if (this._radioButtons) {\n this._radioButtons().forEach((button) => {\n button.name = this._name;\n });\n }\n }\n\n /**\n * @hidden\n * @internal\n */\n private _selectRadioButton() {\n if (this._radioButtons) {\n this._radioButtons().forEach((button) => {\n if (this._value === null) {\n // no value - uncheck all radio buttons\n if (button.checked) {\n button.checked = false;\n }\n } else {\n if (this._value === button.value) {\n // selected button\n if (this._selected !== button) {\n this._selected = button;\n }\n\n if (!button.checked) {\n button.checked = true;\n }\n } else {\n // non-selected button\n if (button.checked) {\n button.checked = false;\n }\n }\n }\n });\n }\n }\n\n /**\n * @hidden\n * @internal\n */\n private _setRadioButtonsRequired() {\n if (this._radioButtons) {\n this._radioButtons().forEach((button) => {\n button.required = this._required;\n });\n }\n }\n\n\n /**\n * Registers a radio button with this radio group.\n * This method is called by radio button components when they are created.\n * @hidden @internal\n */\n public _addRadioButton(radioButton: IgxRadioComponent): void {\n this._radioButtons.update(buttons => {\n if (!buttons.includes(radioButton)) {\n this._setRadioButtonEvents(radioButton);\n\n return [...buttons, radioButton];\n }\n return buttons;\n });\n }\n\n /**\n * Unregisters a radio button from this radio group.\n * This method is called by radio button components when they are destroyed.\n * @hidden @internal\n */\n public _removeRadioButton(radioButton: IgxRadioComponent): void {\n this._radioButtons.update(buttons =>\n buttons.filter(btn => btn !== radioButton)\n );\n }\n\n /**\n * @hidden\n * @internal\n */\n private _setRadioButtonsInvalid() {\n if (this._radioButtons) {\n this._radioButtons().forEach((button) => {\n button.groupInvalid = this._invalid;\n });\n }\n }\n}\n","import {\n AfterViewInit,\n Component,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n booleanAttribute,\n OnDestroy,\n inject,\n ChangeDetectionStrategy,\n ViewEncapsulation\n} from '@angular/core';\nimport { ControlValueAccessor } from '@angular/forms';\nimport { EditorProvider, EDITOR_PROVIDER } from 'igniteui-angular/core';\nimport { CheckboxBaseDirective, IgxRippleDirective, IChangeCheckboxEventArgs } from 'igniteui-angular/directives';\nimport { IgxRadioGroupDirective } from './radio-group/radio-group.directive';\n\n/**\n * **Ignite UI for Angular Radio Button** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/radio_button.html)\n *\n * The Ignite UI Radio Button allows the user to select a single option from an available set of options that are listed side by side.\n *\n * Example:\n * ```html\n * <igx-radio>\n * Simple radio button\n * </igx-radio>\n * ```\n */\n@Component({\n selector: 'igx-radio',\n providers: [{\n provide: EDITOR_PROVIDER,\n useExisting: IgxRadioComponent,\n multi: true\n }],\n templateUrl: 'radio.component.html',\n styleUrl: 'radio.component.css',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [IgxRippleDirective]\n})\n\nexport class IgxRadioComponent\n extends CheckboxBaseDirective\n implements AfterViewInit, OnDestroy, ControlValueAccessor, EditorProvider {\n /** @hidden @internal */\n public blurRadio = new EventEmitter();\n\n private radioGroup = inject(IgxRadioGroupDirective, { optional: true, skipSelf: true });\n private _disabled = false;\n private _groupDisabled = false;\n\n /**\n * Returns the class of the radio component.\n * ```typescript\n * let radioClass = this.radio.cssClass;\n * ```\n *\n * @memberof IgxRadioComponent\n */\n @HostBinding('class.igx-radio')\n public override cssClass = 'igx-radio';\n\n /**\n * Sets/gets the `checked` attribute.\n * Default value is `false`.\n * ```html\n * <igx-radio [checked]=\"true\"></igx-radio>\n * ```\n * ```typescript\n * let isChecked = this.radio.checked;\n * ```\n *\n * @memberof IgxRadioComponent\n */\n @HostBinding('class.igx-radio--checked')\n @Input({ transform: booleanAttribute })\n public override set checked(value: boolean) {\n this._checked = value;\n }\n public override get checked() {\n return this._checked;\n }\n\n /**\n * Sets/gets the `disabled` attribute.\n * Default value is `false`.\n * ```html\n * <igx-radio disabled></igx-radio>\n * ```\n * ```typescript\n * let isDisabled = this.radio.disabled;\n * ```\n *\n * @memberof IgxRadioComponent\n */\n @HostBinding('class.igx-radio--disabled')\n @Input({ transform: booleanAttribute })\n public override get disabled(): boolean {\n return this._disabled || this._groupDisabled;\n }\n public override set disabled(value: boolean) {\n this._disabled = value;\n }\n\n /**\n * Disabled state of the group's form control. Kept apart from the\n * `disabled` input so `enable()` does not clear a template-disabled button.\n *\n * @hidden @internal\n */\n public set groupDisabled(value: boolean) {\n this._groupDisabled = value;\n }\n\n /**\n * Invalid state of the parent group, applied to the button as is.\n *\n * @hidden @internal\n */\n public set groupInvalid(value: boolean) {\n this._invalid = value;\n }\n\n /**\n * Sets/gets whether the radio button is invalid.\n * Default value is `false`.\n * ```html\n * <igx-radio invalid></igx-radio>\n * ```\n * ```typescript\n * let isInvalid = this.radio.invalid;\n * ```\n *\n * @memberof IgxRadioComponent\n */\n @HostBinding('class.igx-radio--invalid')\n @Input({ transform: booleanAttribute })\n public override get invalid(): boolean {\n return super.invalid;\n }\n public override set invalid(value: boolean) {\n super.invalid = value;\n }\n\n /**\n * Sets/gets whether the radio component is on focus.\n * Default value is `false`.\n * ```typescript\n * this.radio.focus = true;\n * ```\n * ```typescript\n * let isFocused = this.radio.focused;\n * ```\n *\n * @memberof IgxRadioComponent\n */\n @HostBinding('class.igx-radio--focused')\n public override focused = false;\n\n /**\n * @hidden\n * @internal\n */\n @HostListener('change', ['$event'])\n public _changed(event: IChangeCheckboxEventArgs) {\n if (event instanceof Event) {\n event.preventDefault();\n }\n }\n\n /**\n * @hidden\n */\n @HostListener('click')\n public override _onCheckboxClick() {\n this.select();\n }\n\n /**\n * Selects the current radio button.\n * ```typescript\n * this.radio.select();\n * ```\n *\n * @memberof IgxRadioComponent\n */\n public select() {\n if (!this.checked) {\n this.checked = true;\n this.change.emit({\n value: this.value,\n owner: this,\n checked: this.checked,\n });\n this._onChangeCallback(this.value);\n }\n }\n\n /**\n * Deselects the current radio button.\n * ```typescript\n * this.radio.deselect();\n * ```\n *\n * @memberof IgxRadioComponent\n */\n public deselect() {\n this.checked = false;\n this.focused = false;\n this.cdr.markForCheck();\n }\n\n /**\n * Checks whether the provided value is consistent to the current radio button.\n * If it is, the checked attribute will have value `true`;\n * ```typescript\n * this.radio.writeValue('radioButtonValue');\n * ```\n */\n public override writeValue(value: any) {\n this.value = this.value ?? value;\n\n if (value === this.value) {\n if (!this.checked) {\n this.checked = true;\n }\n } else {\n this.deselect();\n }\n }\n\n /**\n * @hidden\n */\n @HostListener('blur')\n public override onBlur() {\n super.onBlur();\n this.blurRadio.emit();\n }\n\n /**\n * @hidden\n * @internal\n */\n public override ngAfterViewInit(): void {\n super.ngAfterViewInit();\n\n // Register with parent radio group if it exists\n if (this.radioGroup) {\n this.radioGroup._addRadioButton(this);\n }\n }\n\n /**\n * @hidden\n * @internal\n */\n public ngOnDestroy(): void {\n // Unregister from parent radio group if it exists\n if (this.radioGroup) {\n this.radioGroup._removeRadioButton(this);\n }\n }\n}\n","<input #checkbox class=\"igx-radio__input\" type=\"radio\"\n [id]=\"inputId\"\n [name]=\"name\"\n [value]=\"value\"\n [tabindex]=\"tabindex\"\n [disabled]=\"disabled\"\n [checked]=\"checked\"\n [required]=\"required\"\n [attr.aria-required]=\"required\"\n [attr.aria-invalid]=\"invalid\"\n [attr.aria-checked]=\"checked\"\n [attr.aria-labelledby]=\"ariaLabel ? null : ariaLabelledBy\"\n [attr.aria-label]=\"ariaLabel\"\n (blur)=\"onBlur()\" />\n\n<span #label class=\"igx-radio__composite\" igxRipple\n igxRippleTarget=\".igx-radio__ripple\"\n [igxRippleDisabled]=\"disableRipple\"\n [igxRippleCentered]=\"true\"\n [igxRippleDuration]=\"300\">\n <div class=\"igx-radio__ripple\"></div>\n</span>\n\n<span #placeholderLabel\n [id]=\"labelId\"\n [class]=\"labelClass\">\n <ng-content></ng-content>\n</span>\n","import { IgxRadioComponent } from '../../radio/radio.component';\nimport { IgxRadioGroupDirective } from './radio-group.directive';\n\nexport * from './radio-group.directive';\n\n/* NOTE: Radio Group directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_RADIO_GROUP_DIRECTIVES = [\n IgxRadioGroupDirective,\n IgxRadioComponent\n] as const;\n","import { NgModule } from '@angular/core';\nimport { IgxRadioGroupDirective } from './radio-group.directive';\nimport { IgxRadioComponent } from '../radio.component';\n\n/**\n * @hidden\n * @deprecated\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n imports: [IgxRadioGroupDirective, IgxRadioComponent],\n exports: [IgxRadioGroupDirective, IgxRadioComponent]\n})\nexport class IgxRadioModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
@@ -47,19 +47,6 @@ class IgxSwitchComponent extends CheckboxBaseDirective {
47
47
  * ```
48
48
  */
49
49
  this.disabled = false;
50
- /**
51
- * Sets/gets whether the switch component is invalid.
52
- * Default value is `false`.
53
- *
54
- * @example
55
- * ```html
56
- * <igx-switch invalid></igx-switch>
57
- * ```
58
- * ```typescript
59
- * let isInvalid = this.switch.invalid;
60
- * ```
61
- */
62
- this.invalid = false;
63
50
  /**
64
51
  * Sets/gets whether the switch component is on focus.
65
52
  * Default value is `false`.
@@ -86,6 +73,24 @@ class IgxSwitchComponent extends CheckboxBaseDirective {
86
73
  get checked() {
87
74
  return super.checked;
88
75
  }
76
+ /**
77
+ * Sets/gets whether the switch component is invalid.
78
+ * Default value is `false`.
79
+ *
80
+ * @example
81
+ * ```html
82
+ * <igx-switch invalid></igx-switch>
83
+ * ```
84
+ * ```typescript
85
+ * let isInvalid = this.switch.invalid;
86
+ * ```
87
+ */
88
+ get invalid() {
89
+ return super.invalid;
90
+ }
91
+ set invalid(value) {
92
+ super.invalid = value;
93
+ }
89
94
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxSwitchComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
90
95
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "22.2.0", type: IgxSwitchComponent, isStandalone: true, selector: "igx-switch", inputs: { checked: "checked", disabled: ["disabled", "disabled", booleanAttribute], invalid: ["invalid", "invalid", booleanAttribute] }, host: { properties: { "class.igx-switch": "this.cssClass", "class.igx-switch--checked": "this.checked", "class.igx-switch--disabled": "this.disabled", "class.igx-switch--invalid": "this.invalid", "class.igx-switch--focused": "this.focused" } }, providers: [{
91
96
  provide: EDITOR_PROVIDER,
@@ -1 +1 @@
1
- {"version":3,"file":"igniteui-angular-switch.mjs","sources":["../../../projects/igniteui-angular/switch/src/switch/switch.component.ts","../../../projects/igniteui-angular/switch/src/switch/switch.component.html","../../../projects/igniteui-angular/switch/src/switch/switch.module.ts","../../../projects/igniteui-angular/switch/src/igniteui-angular-switch.ts"],"sourcesContent":["import {\n Component,\n HostBinding,\n Input,\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ViewEncapsulation\n} from '@angular/core';\nimport { ControlValueAccessor } from '@angular/forms';\nimport { CheckboxBaseDirective, IgxRippleDirective } from 'igniteui-angular/directives';\nimport { EditorProvider, EDITOR_PROVIDER } from 'igniteui-angular/core';\n\n/**\n *\n * The Switch component is a binary choice selection component.\n *\n * @igxModule IgxSwitchModule\n *\n * @igxTheme igx-switch-theme, igx-tooltip-theme\n *\n * @igxKeywords switch, states, tooltip\n *\n * @igxGroup Data Entry & Display\n * @remarks\n *\n * The Ignite UI Switch lets the user toggle between on/off or true/false states.\n *\n * @example\n * ```html\n * <igx-switch [checked]=\"true\">\n * Simple switch\n * </igx-switch>\n * ```\n */\n@Component({\n providers: [{\n provide: EDITOR_PROVIDER,\n useExisting: IgxSwitchComponent,\n multi: true\n }],\n selector: 'igx-switch',\n templateUrl: 'switch.component.html',\n styleUrl: 'switch.component.css',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [IgxRippleDirective]\n})\nexport class IgxSwitchComponent\n extends CheckboxBaseDirective\n implements ControlValueAccessor, EditorProvider, AfterViewInit {\n /**\n * Returns the class of the switch component.\n *\n * @example\n * ```typescript\n * let switchClass = this.switch.cssClass;\n * ```\n */\n @HostBinding('class.igx-switch')\n public override cssClass = 'igx-switch';\n /**\n * Sets/gets whether the switch is on or off.\n * Default value is 'false'.\n *\n * @example\n * ```html\n * <igx-switch [checked]=\"true\"></igx-switch>\n * ```\n */\n @HostBinding('class.igx-switch--checked')\n @Input()\n public override set checked(value: boolean) {\n super.checked = value;\n }\n public override get checked() {\n return super.checked;\n }\n /**\n * Sets/gets the `disabled` attribute.\n * Default value is `false`.\n *\n * @example\n * ```html\n * <igx-switch disabled><igx-switch>\n * ```\n */\n @HostBinding('class.igx-switch--disabled')\n @Input({ transform: booleanAttribute })\n public override disabled = false;\n\n /**\n * Sets/gets whether the switch component is invalid.\n * Default value is `false`.\n *\n * @example\n * ```html\n * <igx-switch invalid></igx-switch>\n * ```\n * ```typescript\n * let isInvalid = this.switch.invalid;\n * ```\n */\n @HostBinding('class.igx-switch--invalid')\n @Input({ transform: booleanAttribute })\n public override invalid = false;\n\n /**\n * Sets/gets whether the switch component is on focus.\n * Default value is `false`.\n *\n * @example\n * ```typescript\n * this.switch.focused = true;\n * ```\n */\n @HostBinding('class.igx-switch--focused')\n public override focused = false;\n}\n","<input #checkbox class=\"igx-switch__input\" type=\"checkbox\"\n [id]=\"inputId\"\n [name]=\"name\"\n [value]=\"value\"\n [tabindex]=\"tabindex\"\n [disabled]=\"disabled\"\n [checked]=\"checked\"\n [required]=\"required\"\n [attr.aria-required]=\"required\"\n [attr.aria-invalid]=\"invalid\"\n [attr.aria-checked]=\"checked\"\n [attr.aria-labelledby]=\"ariaLabel ? null : ariaLabelledBy\"\n [attr.aria-label]=\"ariaLabel\"\n (change)=\"_onCheckboxChange($event)\"\n (blur)=\"onBlur()\" />\n\n<span #label class=\"igx-switch__composite\"\n igxRipple\n igxRippleTarget=\".igx-switch__ripple\"\n [igxRippleDisabled]=\"disableRipple\"\n [igxRippleCentered]=\"true\"\n [igxRippleDuration]=\"300\">\n <div class=\"igx-switch__composite-thumb\">\n <div class=\"igx-switch__ripple\"></div>\n <div class=\"igx-switch__thumb\"></div>\n </div>\n</span>\n\n<span #placeholderLabel\n [class]=\"labelClass\"\n [id]=\"labelId\">\n <ng-content></ng-content>\n</span>\n","import { NgModule } from '@angular/core';\nimport { IgxSwitchComponent } from './switch.component';\n\n/**\n * @hidden\n * @deprecated\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n imports: [\n IgxSwitchComponent\n ],\n exports: [\n IgxSwitchComponent\n ]\n})\nexport class IgxSwitchModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"igniteui-angular-switch.mjs","sources":["../../../projects/igniteui-angular/switch/src/switch/switch.component.ts","../../../projects/igniteui-angular/switch/src/switch/switch.component.html","../../../projects/igniteui-angular/switch/src/switch/switch.module.ts","../../../projects/igniteui-angular/switch/src/igniteui-angular-switch.ts"],"sourcesContent":["import {\n Component,\n HostBinding,\n Input,\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ViewEncapsulation\n} from '@angular/core';\nimport { ControlValueAccessor } from '@angular/forms';\nimport { CheckboxBaseDirective, IgxRippleDirective } from 'igniteui-angular/directives';\nimport { EditorProvider, EDITOR_PROVIDER } from 'igniteui-angular/core';\n\n/**\n *\n * The Switch component is a binary choice selection component.\n *\n * @igxModule IgxSwitchModule\n *\n * @igxTheme igx-switch-theme, igx-tooltip-theme\n *\n * @igxKeywords switch, states, tooltip\n *\n * @igxGroup Data Entry & Display\n * @remarks\n *\n * The Ignite UI Switch lets the user toggle between on/off or true/false states.\n *\n * @example\n * ```html\n * <igx-switch [checked]=\"true\">\n * Simple switch\n * </igx-switch>\n * ```\n */\n@Component({\n providers: [{\n provide: EDITOR_PROVIDER,\n useExisting: IgxSwitchComponent,\n multi: true\n }],\n selector: 'igx-switch',\n templateUrl: 'switch.component.html',\n styleUrl: 'switch.component.css',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [IgxRippleDirective]\n})\nexport class IgxSwitchComponent\n extends CheckboxBaseDirective\n implements ControlValueAccessor, EditorProvider, AfterViewInit {\n /**\n * Returns the class of the switch component.\n *\n * @example\n * ```typescript\n * let switchClass = this.switch.cssClass;\n * ```\n */\n @HostBinding('class.igx-switch')\n public override cssClass = 'igx-switch';\n /**\n * Sets/gets whether the switch is on or off.\n * Default value is 'false'.\n *\n * @example\n * ```html\n * <igx-switch [checked]=\"true\"></igx-switch>\n * ```\n */\n @HostBinding('class.igx-switch--checked')\n @Input()\n public override set checked(value: boolean) {\n super.checked = value;\n }\n public override get checked() {\n return super.checked;\n }\n /**\n * Sets/gets the `disabled` attribute.\n * Default value is `false`.\n *\n * @example\n * ```html\n * <igx-switch disabled><igx-switch>\n * ```\n */\n @HostBinding('class.igx-switch--disabled')\n @Input({ transform: booleanAttribute })\n public override disabled = false;\n\n /**\n * Sets/gets whether the switch component is invalid.\n * Default value is `false`.\n *\n * @example\n * ```html\n * <igx-switch invalid></igx-switch>\n * ```\n * ```typescript\n * let isInvalid = this.switch.invalid;\n * ```\n */\n @HostBinding('class.igx-switch--invalid')\n @Input({ transform: booleanAttribute })\n public override get invalid(): boolean {\n return super.invalid;\n }\n public override set invalid(value: boolean) {\n super.invalid = value;\n }\n\n /**\n * Sets/gets whether the switch component is on focus.\n * Default value is `false`.\n *\n * @example\n * ```typescript\n * this.switch.focused = true;\n * ```\n */\n @HostBinding('class.igx-switch--focused')\n public override focused = false;\n}\n","<input #checkbox class=\"igx-switch__input\" type=\"checkbox\"\n [id]=\"inputId\"\n [name]=\"name\"\n [value]=\"value\"\n [tabindex]=\"tabindex\"\n [disabled]=\"disabled\"\n [checked]=\"checked\"\n [required]=\"required\"\n [attr.aria-required]=\"required\"\n [attr.aria-invalid]=\"invalid\"\n [attr.aria-checked]=\"checked\"\n [attr.aria-labelledby]=\"ariaLabel ? null : ariaLabelledBy\"\n [attr.aria-label]=\"ariaLabel\"\n (change)=\"_onCheckboxChange($event)\"\n (blur)=\"onBlur()\" />\n\n<span #label class=\"igx-switch__composite\"\n igxRipple\n igxRippleTarget=\".igx-switch__ripple\"\n [igxRippleDisabled]=\"disableRipple\"\n [igxRippleCentered]=\"true\"\n [igxRippleDuration]=\"300\">\n <div class=\"igx-switch__composite-thumb\">\n <div class=\"igx-switch__ripple\"></div>\n <div class=\"igx-switch__thumb\"></div>\n </div>\n</span>\n\n<span #placeholderLabel\n [class]=\"labelClass\"\n [id]=\"labelId\">\n <ng-content></ng-content>\n</span>\n","import { NgModule } from '@angular/core';\nimport { IgxSwitchComponent } from './switch.component';\n\n/**\n * @hidden\n * @deprecated\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n imports: [\n IgxSwitchComponent\n ],\n exports: [\n IgxSwitchComponent\n ]\n})\nexport class IgxSwitchModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
@@ -384,6 +384,7 @@ class IgxTabsDirective extends IgxCarouselComponentBase {
384
384
  });
385
385
  }
386
386
  }
387
+ this.cdr.markForCheck();
387
388
  }
388
389
  triggerPanelAnimations(oldSelectedIndex) {
389
390
  const item = this.items.get(this._selectedIndex);
@@ -550,7 +551,7 @@ class IgxTabsComponent extends IgxTabsDirective {
550
551
  }
551
552
  /** @hidden */
552
553
  scrollTabHeaderIntoView() {
553
- if (this.selectedIndex >= 0) {
554
+ if (this.selectedIndex >= 0 && this.selectedIndex < this.items.length) {
554
555
  const tabItems = this.items.toArray();
555
556
  const tabHeaderNativeElement = tabItems[this.selectedIndex].headerComponent.nativeElement;
556
557
  // Scroll left if there is need
@@ -576,9 +577,20 @@ class IgxTabsComponent extends IgxTabsDirective {
576
577
  }
577
578
  /** @hidden */
578
579
  onItemChanges() {
580
+ // Taken before the selection settles, so that scroll buttons appearing or
581
+ // disappearing because of this change show up as a different width below.
582
+ const viewPortWidth = this.viewPort.nativeElement.offsetWidth;
579
583
  super.onItemChanges();
580
584
  Promise.resolve().then(() => {
581
585
  this.updateScrollButtons();
586
+ // The selected tab is scrolled into view against the viewport width it had
587
+ // when the selection settled. When the change made the header overflow, the
588
+ // buttons that appeared narrow the viewport, so the tab has to be brought
589
+ // back into view. Only then, so that adding or removing other tabs keeps a
590
+ // header the user scrolled away from the selected tab where it is.
591
+ if (this.viewPort.nativeElement.offsetWidth !== viewPortWidth) {
592
+ this.scrollTabHeaderIntoView();
593
+ }
582
594
  });
583
595
  }
584
596
  alignSelectedIndicator(element, duration = 0.3) {
@@ -602,16 +614,23 @@ class IgxTabsComponent extends IgxTabsDirective {
602
614
  if (scrollNext) {
603
615
  if (element.offsetWidth + this.getElementOffset(element) > this.viewPort.nativeElement.offsetWidth + this.offset) {
604
616
  this.scrollElement(element, scrollNext);
605
- break;
617
+ return;
606
618
  }
607
619
  }
608
620
  else {
609
621
  if (this.getElementOffset(element) >= this.offset) {
610
- this.scrollElement(tabsArray[index - 1].headerComponent.nativeElement, scrollNext);
611
- break;
622
+ if (index > 0) {
623
+ this.scrollElement(tabsArray[index - 1].headerComponent.nativeElement, scrollNext);
624
+ }
625
+ return;
612
626
  }
613
627
  }
614
628
  }
629
+ // Scrolling back from beyond the start of the last header, which happens when a
630
+ // header is wider than the viewport, brings that header's start into view.
631
+ if (!scrollNext && tabsArray.length > 0) {
632
+ this.scrollElement(tabsArray[tabsArray.length - 1].headerComponent.nativeElement, scrollNext);
633
+ }
615
634
  }
616
635
  scrollElement(element, scrollNext) {
617
636
  const viewPortWidth = this.viewPort.nativeElement.offsetWidth;
@@ -621,6 +640,17 @@ class IgxTabsComponent extends IgxTabsDirective {
621
640
  }
622
641
  updateScrollButtons() {
623
642
  const itemsContainerWidth = this.getTabItemsContainerWidth();
643
+ const headerContainerWidth = this.headerContainer.nativeElement.offsetWidth;
644
+ const viewPortWidth = this.viewPort.nativeElement.offsetWidth;
645
+ // The browser clamps the scroll position when the items shrink, e.g. after removing
646
+ // tabs, but a stale offset would keep the buttons displayed. Clamp it the same way,
647
+ // so the buttons state reflects the header as it is rendered.
648
+ if (itemsContainerWidth - headerContainerWidth <= 1) {
649
+ this.offset = 0;
650
+ }
651
+ else {
652
+ this.offset = Math.min(this.offset, Math.max(0, itemsContainerWidth - viewPortWidth));
653
+ }
624
654
  const scrollPrevButtonStyle = this.resolveLeftScrollButtonStyle(itemsContainerWidth);
625
655
  this.setScrollButtonStyle(this.scrollPrevButton.nativeElement, scrollPrevButtonStyle);
626
656
  const scrollNextButtonStyle = this.resolveRightScrollButtonStyle(itemsContainerWidth);
@@ -674,7 +704,7 @@ class IgxTabsComponent extends IgxTabsDirective {
674
704
  // because there is inconsistency in IE we cannot use offsetWidth or scrollOffset.
675
705
  const itemsContainerChildrenCount = this.itemsContainer.nativeElement.children.length;
676
706
  let itemsContainerWidth = 0;
677
- if (itemsContainerChildrenCount > 1) {
707
+ if (itemsContainerChildrenCount > 0) {
678
708
  const lastTab = this.itemsContainer.nativeElement.children[itemsContainerChildrenCount - 1];
679
709
  itemsContainerWidth = this.getElementOffset(lastTab) + lastTab.offsetWidth;
680
710
  }
@@ -688,11 +718,11 @@ class IgxTabsComponent extends IgxTabsDirective {
688
718
  return rtl ? this.itemsWrapper.nativeElement.offsetWidth - element.offsetLeft - element.offsetWidth : element.offsetLeft;
689
719
  }
690
720
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxTabsComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
691
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.2.0", type: IgxTabsComponent, isStandalone: true, selector: "igx-tabs", inputs: { tabAlignment: "tabAlignment", activation: "activation" }, host: { properties: { "class.igx-tabs": "this.defaultClass" } }, providers: [{ provide: IgxTabsBase, useExisting: IgxTabsComponent }], viewQueries: [{ propertyName: "headerContainer", first: true, predicate: ["headerContainer"], descendants: true, static: true }, { propertyName: "viewPort", first: true, predicate: ["viewPort"], descendants: true, static: true }, { propertyName: "itemsWrapper", first: true, predicate: ["itemsWrapper"], descendants: true, static: true }, { propertyName: "itemsContainer", first: true, predicate: ["itemsContainer"], descendants: true, static: true }, { propertyName: "selectedIndicator", first: true, predicate: ["selectedIndicator"], descendants: true }, { propertyName: "scrollPrevButton", first: true, predicate: ["scrollPrevButton"], descendants: true }, { propertyName: "scrollNextButton", first: true, predicate: ["scrollNextButton"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div #headerContainer class=\"igx-tabs-header\">\n <button #scrollPrevButton type=\"button\" igxIconButton=\"flat\" igxRipple tabindex=\"-1\" class=\"igx-tabs-header-button\" (click)=\"scrollPrev()\">\n <igx-icon family=\"default\" name=\"prev\"></igx-icon>\n </button>\n <div #viewPort class=\"igx-tabs-header__content\">\n <div #itemsWrapper class=\"igx-tabs-header__wrapper\" role=\"tablist\">\n <div #itemsContainer class=\"igx-tabs-header-scroll\" [ngClass]=\"resolveHeaderScrollClasses()\">\n @for (tab of items; track tab; let i = $index) {\n <ng-container *ngTemplateOutlet=\"tab.headerTemplate\"></ng-container>\n }\n </div>\n @if (items.length > 0) {\n <div #selectedIndicator class=\"igx-tabs-header__active-indicator\">\n </div>\n }\n </div>\n </div>\n <button #scrollNextButton type=\"button\" igxIconButton=\"flat\" igxRipple tabindex=\"-1\" class=\"igx-tabs-header-button\" (click)=\"scrollNext()\">\n <igx-icon family=\"default\" name=\"next\"></igx-icon>\n </button>\n</div>\n<div class=\"igx-tabs-content\">\n @for (tab of items; track tab; let i = $index) {\n <ng-container *ngTemplateOutlet=\"tab.panelTemplate\"></ng-container>\n }\n</div>\n", styles: ["@layer ig.base{.igx-tabs{--nav-btn-border-color: var(--border-color);display:flex;flex-direction:column;overflow:hidden}}\n"], dependencies: [{ kind: "directive", type: IgxRippleDirective, selector: "[igxRipple]", inputs: ["igxRippleTarget", "igxRipple", "igxRippleDuration", "igxRippleCentered", "igxRippleDisabled"] }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["ariaHidden", "family", "name", "active"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: IgxIconButtonDirective, selector: "[igxIconButton]", inputs: ["igxIconButton"] }], changeDetection: i0.ChangeDetectionStrategy.Eager, encapsulation: i0.ViewEncapsulation.None }); }
721
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.2.0", type: IgxTabsComponent, isStandalone: true, selector: "igx-tabs", inputs: { tabAlignment: "tabAlignment", activation: "activation" }, host: { properties: { "class.igx-tabs": "this.defaultClass" } }, providers: [{ provide: IgxTabsBase, useExisting: IgxTabsComponent }], viewQueries: [{ propertyName: "headerContainer", first: true, predicate: ["headerContainer"], descendants: true, static: true }, { propertyName: "viewPort", first: true, predicate: ["viewPort"], descendants: true, static: true }, { propertyName: "itemsWrapper", first: true, predicate: ["itemsWrapper"], descendants: true, static: true }, { propertyName: "itemsContainer", first: true, predicate: ["itemsContainer"], descendants: true, static: true }, { propertyName: "selectedIndicator", first: true, predicate: ["selectedIndicator"], descendants: true }, { propertyName: "scrollPrevButton", first: true, predicate: ["scrollPrevButton"], descendants: true }, { propertyName: "scrollNextButton", first: true, predicate: ["scrollNextButton"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div #headerContainer class=\"igx-tabs-header\">\n <button #scrollPrevButton type=\"button\" igxIconButton=\"flat\" igxRipple tabindex=\"-1\" class=\"igx-tabs-header-button\" (click)=\"scrollPrev()\">\n <igx-icon family=\"default\" name=\"prev\"></igx-icon>\n </button>\n <div #viewPort class=\"igx-tabs-header__content\">\n <div #itemsWrapper class=\"igx-tabs-header__wrapper\" role=\"tablist\">\n <div #itemsContainer class=\"igx-tabs-header-scroll\" [ngClass]=\"resolveHeaderScrollClasses()\">\n @for (tab of items; track tab; let i = $index) {\n <ng-container *ngTemplateOutlet=\"tab.headerTemplate\"></ng-container>\n }\n </div>\n @if (items.length > 0) {\n <div #selectedIndicator class=\"igx-tabs-header__active-indicator\">\n </div>\n }\n </div>\n </div>\n <button #scrollNextButton type=\"button\" igxIconButton=\"flat\" igxRipple tabindex=\"-1\" class=\"igx-tabs-header-button\" (click)=\"scrollNext()\">\n <igx-icon family=\"default\" name=\"next\"></igx-icon>\n </button>\n</div>\n<div class=\"igx-tabs-content\">\n @for (tab of items; track tab; let i = $index) {\n <ng-container *ngTemplateOutlet=\"tab.panelTemplate\"></ng-container>\n }\n</div>\n", styles: ["@layer ig.base{.igx-tabs{--nav-btn-border-color: var(--border-color);display:flex;flex-direction:column;overflow:hidden}.igx-tabs-header{display:flex;align-items:center;overflow:hidden;flex:0 0 auto;z-index:1;background:var(--header-background)}.igx-tabs-header__content{display:flex;align-items:center;flex:1 1 auto;overflow:hidden;scroll-behavior:smooth}.igx-tabs-header__wrapper{position:relative;flex-grow:1}.igx-tabs-header__active-indicator{position:absolute;bottom:0;left:0;transform:translate(0);height:.125rem;min-width:5.625rem;background:var(--indicator-color);transition:transform .3s cubic-bezier(.35,0,.25,1),width .2s cubic-bezier(.35,0,.25,1)}.igx-tabs-header-button{--ig-ripple-color: var(--button-ripple-color);display:flex;align-items:center;justify-content:center;z-index:1;border:none;padding:0;min-width:3rem;width:3rem;cursor:pointer;position:relative;background:var(--button-background);color:var(--button-color);outline:0;align-self:stretch;height:auto;transition:none;border-radius:clamp(0rem,calc(var(--ig-radius-factor, calc(NaN)) * 0),0)}.igx-tabs-header-button:hover{background:var(--button-hover-background);color:var(--button-hover-color)}.igx-tabs-header-button:focus{outline:0}.igx-tabs-header-button::-moz-focus-inner{border:0}.igx-tabs-header-button:disabled{color:var(--button-disabled-color);cursor:default;pointer-events:none}.igx-tabs-header-button--none{display:none}[dir=rtl] .igx-tabs-header-button{transform:scaleX(-1)}.igx-tabs-header-scroll{display:flex;height:100%}.igx-tabs-header-scroll--start{justify-content:flex-start}.igx-tabs-header-scroll--end{justify-content:flex-end;min-width:-moz-max-content;min-width:max-content}.igx-tabs-header-scroll--center{justify-content:center;min-width:-moz-max-content;min-width:max-content}}@layer ig.bootstrap{@container style(--ig-theme: bootstrap){.igx-tabs-header{--ig-icon-size: 1.5rem;min-height:3rem;position:relative}.igx-tabs-header:after{content:\"\";position:absolute;bottom:0;inset-inline-start:0;width:100%;height:.0625rem;background:var(--border-color);z-index:0}.igx-tabs-header__active-indicator{display:none}.igx-tabs-header-button igx-icon{--ig-icon-size: 1.5rem}.igx-tabs-header-button:focus{background:var(--button-hover-background)}}}@layer ig.indigo{@container style(--ig-theme: indigo){.igx-tabs-header{--ig-icon-size: 1rem;min-height:2.5rem}.igx-tabs-header__active-indicator{height:.1875rem}.igx-tabs-header-button igx-icon{--ig-icon-size: 1rem}.igx-tabs-header-button{min-width:2.5rem;width:2.5rem}.igx-tabs-header-button:after{content:\"\";position:absolute;pointer-events:none;width:100%;height:100%;border-bottom:.0625rem solid var(--nav-btn-border-color)}}}@layer ig.fluent{@container style(--ig-theme: fluent){.igx-tabs-header{--ig-icon-size: 1.5rem;min-height:2.75rem}.igx-tabs-header-button igx-icon{--ig-icon-size: 1.5rem}.igx-tabs-header-button:focus{background:var(--button-hover-background)}}}@layer ig.material{@container style(--ig-theme: material){.igx-tabs-header{--ig-icon-size: 1.5rem;min-height:3rem}.igx-tabs-header-button igx-icon{--ig-icon-size: 1.5rem}.igx-tabs-header-button:focus{background:var(--button-hover-background)}}}\n"], dependencies: [{ kind: "directive", type: IgxRippleDirective, selector: "[igxRipple]", inputs: ["igxRippleTarget", "igxRipple", "igxRippleDuration", "igxRippleCentered", "igxRippleDisabled"] }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["ariaHidden", "family", "name", "active"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: IgxIconButtonDirective, selector: "[igxIconButton]", inputs: ["igxIconButton"] }], changeDetection: i0.ChangeDetectionStrategy.Eager, encapsulation: i0.ViewEncapsulation.None }); }
692
722
  }
693
723
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxTabsComponent, decorators: [{
694
724
  type: Component,
695
- args: [{ selector: 'igx-tabs', encapsulation: ViewEncapsulation.None, providers: [{ provide: IgxTabsBase, useExisting: IgxTabsComponent }], changeDetection: ChangeDetectionStrategy.Eager, imports: [IgxRippleDirective, IgxIconComponent, NgClass, NgTemplateOutlet, IgxIconButtonDirective], template: "<div #headerContainer class=\"igx-tabs-header\">\n <button #scrollPrevButton type=\"button\" igxIconButton=\"flat\" igxRipple tabindex=\"-1\" class=\"igx-tabs-header-button\" (click)=\"scrollPrev()\">\n <igx-icon family=\"default\" name=\"prev\"></igx-icon>\n </button>\n <div #viewPort class=\"igx-tabs-header__content\">\n <div #itemsWrapper class=\"igx-tabs-header__wrapper\" role=\"tablist\">\n <div #itemsContainer class=\"igx-tabs-header-scroll\" [ngClass]=\"resolveHeaderScrollClasses()\">\n @for (tab of items; track tab; let i = $index) {\n <ng-container *ngTemplateOutlet=\"tab.headerTemplate\"></ng-container>\n }\n </div>\n @if (items.length > 0) {\n <div #selectedIndicator class=\"igx-tabs-header__active-indicator\">\n </div>\n }\n </div>\n </div>\n <button #scrollNextButton type=\"button\" igxIconButton=\"flat\" igxRipple tabindex=\"-1\" class=\"igx-tabs-header-button\" (click)=\"scrollNext()\">\n <igx-icon family=\"default\" name=\"next\"></igx-icon>\n </button>\n</div>\n<div class=\"igx-tabs-content\">\n @for (tab of items; track tab; let i = $index) {\n <ng-container *ngTemplateOutlet=\"tab.panelTemplate\"></ng-container>\n }\n</div>\n", styles: ["@layer ig.base{.igx-tabs{--nav-btn-border-color: var(--border-color);display:flex;flex-direction:column;overflow:hidden}}\n"] }]
725
+ args: [{ selector: 'igx-tabs', encapsulation: ViewEncapsulation.None, providers: [{ provide: IgxTabsBase, useExisting: IgxTabsComponent }], changeDetection: ChangeDetectionStrategy.Eager, imports: [IgxRippleDirective, IgxIconComponent, NgClass, NgTemplateOutlet, IgxIconButtonDirective], template: "<div #headerContainer class=\"igx-tabs-header\">\n <button #scrollPrevButton type=\"button\" igxIconButton=\"flat\" igxRipple tabindex=\"-1\" class=\"igx-tabs-header-button\" (click)=\"scrollPrev()\">\n <igx-icon family=\"default\" name=\"prev\"></igx-icon>\n </button>\n <div #viewPort class=\"igx-tabs-header__content\">\n <div #itemsWrapper class=\"igx-tabs-header__wrapper\" role=\"tablist\">\n <div #itemsContainer class=\"igx-tabs-header-scroll\" [ngClass]=\"resolveHeaderScrollClasses()\">\n @for (tab of items; track tab; let i = $index) {\n <ng-container *ngTemplateOutlet=\"tab.headerTemplate\"></ng-container>\n }\n </div>\n @if (items.length > 0) {\n <div #selectedIndicator class=\"igx-tabs-header__active-indicator\">\n </div>\n }\n </div>\n </div>\n <button #scrollNextButton type=\"button\" igxIconButton=\"flat\" igxRipple tabindex=\"-1\" class=\"igx-tabs-header-button\" (click)=\"scrollNext()\">\n <igx-icon family=\"default\" name=\"next\"></igx-icon>\n </button>\n</div>\n<div class=\"igx-tabs-content\">\n @for (tab of items; track tab; let i = $index) {\n <ng-container *ngTemplateOutlet=\"tab.panelTemplate\"></ng-container>\n }\n</div>\n", styles: ["@layer ig.base{.igx-tabs{--nav-btn-border-color: var(--border-color);display:flex;flex-direction:column;overflow:hidden}.igx-tabs-header{display:flex;align-items:center;overflow:hidden;flex:0 0 auto;z-index:1;background:var(--header-background)}.igx-tabs-header__content{display:flex;align-items:center;flex:1 1 auto;overflow:hidden;scroll-behavior:smooth}.igx-tabs-header__wrapper{position:relative;flex-grow:1}.igx-tabs-header__active-indicator{position:absolute;bottom:0;left:0;transform:translate(0);height:.125rem;min-width:5.625rem;background:var(--indicator-color);transition:transform .3s cubic-bezier(.35,0,.25,1),width .2s cubic-bezier(.35,0,.25,1)}.igx-tabs-header-button{--ig-ripple-color: var(--button-ripple-color);display:flex;align-items:center;justify-content:center;z-index:1;border:none;padding:0;min-width:3rem;width:3rem;cursor:pointer;position:relative;background:var(--button-background);color:var(--button-color);outline:0;align-self:stretch;height:auto;transition:none;border-radius:clamp(0rem,calc(var(--ig-radius-factor, calc(NaN)) * 0),0)}.igx-tabs-header-button:hover{background:var(--button-hover-background);color:var(--button-hover-color)}.igx-tabs-header-button:focus{outline:0}.igx-tabs-header-button::-moz-focus-inner{border:0}.igx-tabs-header-button:disabled{color:var(--button-disabled-color);cursor:default;pointer-events:none}.igx-tabs-header-button--none{display:none}[dir=rtl] .igx-tabs-header-button{transform:scaleX(-1)}.igx-tabs-header-scroll{display:flex;height:100%}.igx-tabs-header-scroll--start{justify-content:flex-start}.igx-tabs-header-scroll--end{justify-content:flex-end;min-width:-moz-max-content;min-width:max-content}.igx-tabs-header-scroll--center{justify-content:center;min-width:-moz-max-content;min-width:max-content}}@layer ig.bootstrap{@container style(--ig-theme: bootstrap){.igx-tabs-header{--ig-icon-size: 1.5rem;min-height:3rem;position:relative}.igx-tabs-header:after{content:\"\";position:absolute;bottom:0;inset-inline-start:0;width:100%;height:.0625rem;background:var(--border-color);z-index:0}.igx-tabs-header__active-indicator{display:none}.igx-tabs-header-button igx-icon{--ig-icon-size: 1.5rem}.igx-tabs-header-button:focus{background:var(--button-hover-background)}}}@layer ig.indigo{@container style(--ig-theme: indigo){.igx-tabs-header{--ig-icon-size: 1rem;min-height:2.5rem}.igx-tabs-header__active-indicator{height:.1875rem}.igx-tabs-header-button igx-icon{--ig-icon-size: 1rem}.igx-tabs-header-button{min-width:2.5rem;width:2.5rem}.igx-tabs-header-button:after{content:\"\";position:absolute;pointer-events:none;width:100%;height:100%;border-bottom:.0625rem solid var(--nav-btn-border-color)}}}@layer ig.fluent{@container style(--ig-theme: fluent){.igx-tabs-header{--ig-icon-size: 1.5rem;min-height:2.75rem}.igx-tabs-header-button igx-icon{--ig-icon-size: 1.5rem}.igx-tabs-header-button:focus{background:var(--button-hover-background)}}}@layer ig.material{@container style(--ig-theme: material){.igx-tabs-header{--ig-icon-size: 1.5rem;min-height:3rem}.igx-tabs-header-button igx-icon{--ig-icon-size: 1.5rem}.igx-tabs-header-button:focus{background:var(--button-hover-background)}}}\n"] }]
696
726
  }], propDecorators: { tabAlignment: [{
697
727
  type: Input
698
728
  }], activation: [{
@@ -848,11 +878,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImpor
848
878
 
849
879
  class IgxTabItemComponent extends IgxTabItemDirective {
850
880
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxTabItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
851
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.2.0", type: IgxTabItemComponent, isStandalone: true, selector: "igx-tab-item", providers: [{ provide: IgxTabItemDirective, useExisting: IgxTabItemComponent }], usesInheritance: true, ngImport: i0, template: "<ng-template #headerTemplate>\n <ng-content select=\"igx-tab-header\"></ng-content>\n</ng-template>\n<ng-template #panelTemplate>\n <ng-content select=\"igx-tab-content\"></ng-content>\n</ng-template>\n", styles: ["@layer ig.base{.igx-tabs-header{display:flex;align-items:center;overflow:hidden;flex:0 0 auto;z-index:1}.igx-tabs-header__content{display:flex;align-items:center;flex:1 1 auto;overflow:hidden;scroll-behavior:smooth}.igx-tabs-header__wrapper{position:relative;flex-grow:1}.igx-tabs-header__active-indicator{position:absolute;bottom:0;left:0;transform:translate(0);height:.125rem;min-width:5.625rem;background:var(--indicator-color);transition:transform .3s cubic-bezier(.35,0,.25,1),width .2s cubic-bezier(.35,0,.25,1)}.igx-tabs-header-button{--ig-ripple-color: var(--button-ripple-color);display:flex;align-items:center;justify-content:center;z-index:1;border:none;padding:0;min-width:3rem;width:3rem;cursor:pointer;position:relative;background:var(--button-background);color:var(--button-color);outline:0;align-self:stretch;height:auto;transition:none;border-radius:clamp(0rem,calc(var(--ig-radius-factor, calc(NaN)) * 0),0)}.igx-tabs-header-button:hover{background:var(--button-hover-background);color:var(--button-hover-color)}.igx-tabs-header-button:focus{outline:0}.igx-tabs-header-button::-moz-focus-inner{border:0}.igx-tabs-header-button:disabled{color:var(--button-disabled-color);cursor:default;pointer-events:none}.igx-tabs-header-button--none{display:none}[dir=rtl] .igx-tabs-header-button{transform:scaleX(-1)}.igx-tabs-header-scroll{display:flex;height:100%}.igx-tabs-header-scroll--start{justify-content:flex-start}.igx-tabs-header-scroll--end{justify-content:flex-end;min-width:-moz-max-content;min-width:max-content}.igx-tabs-header-scroll--center{justify-content:center;min-width:-moz-max-content;min-width:max-content}}@layer ig.bootstrap{@container style(--ig-theme: bootstrap){.igx-tabs-header{--ig-icon-size: 1.5rem;position:relative;background:var(--item-background)}.igx-tabs-header:after{content:\"\";position:absolute;bottom:0;inset-inline-start:0;width:100%;height:.0625rem;background:var(--border-color);z-index:0}.igx-tabs-header__active-indicator{display:none}.igx-tabs-header-button:focus{background:var(--button-hover-background)}}}@layer ig.indigo{@container style(--ig-theme: indigo){.igx-tabs-header{--ig-icon-size: 1rem}.igx-tabs-header__active-indicator{height:.1875rem}.igx-tabs-header-button{min-width:2.5rem;width:2.5rem}.igx-tabs-header-button:after{content:\"\";position:absolute;pointer-events:none;width:100%;height:100%;border-bottom:.0625rem solid var(--nav-btn-border-color)}}}@layer ig.fluent{@container style(--ig-theme: fluent){.igx-tabs-header{--ig-icon-size: 1.5rem}.igx-tabs-header-button:focus{background:var(--button-hover-background)}}}@layer ig.material{@container style(--ig-theme: material){.igx-tabs-header{--ig-icon-size: 1.5rem;background:var(--item-background)}.igx-tabs-header-button:focus{background:var(--button-hover-background)}}}\n"], changeDetection: i0.ChangeDetectionStrategy.Eager, encapsulation: i0.ViewEncapsulation.None }); }
881
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.2.0", type: IgxTabItemComponent, isStandalone: true, selector: "igx-tab-item", providers: [{ provide: IgxTabItemDirective, useExisting: IgxTabItemComponent }], usesInheritance: true, ngImport: i0, template: "<ng-template #headerTemplate>\n <ng-content select=\"igx-tab-header\"></ng-content>\n</ng-template>\n<ng-template #panelTemplate>\n <ng-content select=\"igx-tab-content\"></ng-content>\n</ng-template>\n", changeDetection: i0.ChangeDetectionStrategy.Eager, encapsulation: i0.ViewEncapsulation.None }); }
852
882
  }
853
883
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxTabItemComponent, decorators: [{
854
884
  type: Component,
855
- args: [{ selector: 'igx-tab-item', encapsulation: ViewEncapsulation.None, providers: [{ provide: IgxTabItemDirective, useExisting: IgxTabItemComponent }], changeDetection: ChangeDetectionStrategy.Eager, standalone: true, template: "<ng-template #headerTemplate>\n <ng-content select=\"igx-tab-header\"></ng-content>\n</ng-template>\n<ng-template #panelTemplate>\n <ng-content select=\"igx-tab-content\"></ng-content>\n</ng-template>\n", styles: ["@layer ig.base{.igx-tabs-header{display:flex;align-items:center;overflow:hidden;flex:0 0 auto;z-index:1}.igx-tabs-header__content{display:flex;align-items:center;flex:1 1 auto;overflow:hidden;scroll-behavior:smooth}.igx-tabs-header__wrapper{position:relative;flex-grow:1}.igx-tabs-header__active-indicator{position:absolute;bottom:0;left:0;transform:translate(0);height:.125rem;min-width:5.625rem;background:var(--indicator-color);transition:transform .3s cubic-bezier(.35,0,.25,1),width .2s cubic-bezier(.35,0,.25,1)}.igx-tabs-header-button{--ig-ripple-color: var(--button-ripple-color);display:flex;align-items:center;justify-content:center;z-index:1;border:none;padding:0;min-width:3rem;width:3rem;cursor:pointer;position:relative;background:var(--button-background);color:var(--button-color);outline:0;align-self:stretch;height:auto;transition:none;border-radius:clamp(0rem,calc(var(--ig-radius-factor, calc(NaN)) * 0),0)}.igx-tabs-header-button:hover{background:var(--button-hover-background);color:var(--button-hover-color)}.igx-tabs-header-button:focus{outline:0}.igx-tabs-header-button::-moz-focus-inner{border:0}.igx-tabs-header-button:disabled{color:var(--button-disabled-color);cursor:default;pointer-events:none}.igx-tabs-header-button--none{display:none}[dir=rtl] .igx-tabs-header-button{transform:scaleX(-1)}.igx-tabs-header-scroll{display:flex;height:100%}.igx-tabs-header-scroll--start{justify-content:flex-start}.igx-tabs-header-scroll--end{justify-content:flex-end;min-width:-moz-max-content;min-width:max-content}.igx-tabs-header-scroll--center{justify-content:center;min-width:-moz-max-content;min-width:max-content}}@layer ig.bootstrap{@container style(--ig-theme: bootstrap){.igx-tabs-header{--ig-icon-size: 1.5rem;position:relative;background:var(--item-background)}.igx-tabs-header:after{content:\"\";position:absolute;bottom:0;inset-inline-start:0;width:100%;height:.0625rem;background:var(--border-color);z-index:0}.igx-tabs-header__active-indicator{display:none}.igx-tabs-header-button:focus{background:var(--button-hover-background)}}}@layer ig.indigo{@container style(--ig-theme: indigo){.igx-tabs-header{--ig-icon-size: 1rem}.igx-tabs-header__active-indicator{height:.1875rem}.igx-tabs-header-button{min-width:2.5rem;width:2.5rem}.igx-tabs-header-button:after{content:\"\";position:absolute;pointer-events:none;width:100%;height:100%;border-bottom:.0625rem solid var(--nav-btn-border-color)}}}@layer ig.fluent{@container style(--ig-theme: fluent){.igx-tabs-header{--ig-icon-size: 1.5rem}.igx-tabs-header-button:focus{background:var(--button-hover-background)}}}@layer ig.material{@container style(--ig-theme: material){.igx-tabs-header{--ig-icon-size: 1.5rem;background:var(--item-background)}.igx-tabs-header-button:focus{background:var(--button-hover-background)}}}\n"] }]
885
+ args: [{ selector: 'igx-tab-item', encapsulation: ViewEncapsulation.None, providers: [{ provide: IgxTabItemDirective, useExisting: IgxTabItemComponent }], changeDetection: ChangeDetectionStrategy.Eager, standalone: true, template: "<ng-template #headerTemplate>\n <ng-content select=\"igx-tab-header\"></ng-content>\n</ng-template>\n<ng-template #panelTemplate>\n <ng-content select=\"igx-tab-content\"></ng-content>\n</ng-template>\n" }]
856
886
  }] });
857
887
 
858
888
  class IgxTabHeaderLabelDirective {