@basis-ng/primitives 0.0.1-alpha.141 → 0.0.1-alpha.143

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.
@@ -3,7 +3,7 @@ import { input, output, Component, inject, ElementRef, signal, model, computed,
3
3
  import { NgIcon, provideIcons } from '@ng-icons/core';
4
4
  import { lucideX, lucideChevronRight, lucideChevronLeft, lucideLoaderCircle, lucideLoader, lucideGripVertical } from '@ng-icons/lucide';
5
5
  import { GridCellWidget, Grid, GridRow, GridCell } from '@angular/aria/grid';
6
- import { ActiveDescendantKeyManager, CdkTrapFocus } from '@angular/cdk/a11y';
6
+ import { ActiveDescendantKeyManager, CdkTrapFocus, FocusMonitor } from '@angular/cdk/a11y';
7
7
  import * as i1 from '@angular/cdk/listbox';
8
8
  import { CdkOption, CdkListbox } from '@angular/cdk/listbox';
9
9
  import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';
@@ -13,7 +13,9 @@ import * as i1$1 from '@angular/cdk/menu';
13
13
  import { CdkMenu, CdkMenuGroup, CdkMenuItem, CdkMenuItemCheckbox, CdkMenuItemRadio, CdkMenuTrigger } from '@angular/cdk/menu';
14
14
  import * as i1$2 from '@angular/cdk/overlay';
15
15
  import { CdkConnectedOverlay, ScrollStrategyOptions, CdkOverlayOrigin, Overlay as Overlay$1 } from '@angular/cdk/overlay';
16
- import * as i1$3 from '@angular/cdk/drag-drop';
16
+ import * as i1$3 from '@angular/aria/tabs';
17
+ import { TabList, Tabs as Tabs$1, Tab as Tab$1 } from '@angular/aria/tabs';
18
+ import * as i1$4 from '@angular/cdk/drag-drop';
17
19
  import { CdkDrag, CdkDragHandle, CdkDropList, CdkDropListGroup } from '@angular/cdk/drag-drop';
18
20
  import { HttpClient } from '@angular/common/http';
19
21
  import { isPlatformBrowser } from '@angular/common';
@@ -800,22 +802,14 @@ class Checkbox {
800
802
  */
801
803
  size = model('md', ...(ngDevMode ? [{ debugName: "size" }] : []));
802
804
  /**
803
- * Disabled flag coming from template bindings.
805
+ * Whether the checkbox is disabled. Automatically bound by Signal Forms.
804
806
  */
805
- disabledBinding = input(false, { ...(ngDevMode ? { debugName: "disabledBinding" } : {}), transform: booleanAttribute });
806
- /**
807
- * Disabled flag controlled by Angular forms APIs.
808
- */
809
- disabledFromControl = signal(false, ...(ngDevMode ? [{ debugName: "disabledFromControl" }] : []));
810
- /**
811
- * Combined disabled state exposed to the template bindings.
812
- */
813
- isDisabled = computed(() => this.disabledBinding() || this.disabledFromControl(), ...(ngDevMode ? [{ debugName: "isDisabled" }] : []));
807
+ disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : {}), transform: booleanAttribute });
814
808
  /**
815
809
  * Toggle the checkbox when the user clicks on it.
816
810
  */
817
811
  onToggle() {
818
- if (this.isDisabled()) {
812
+ if (this.disabled()) {
819
813
  return;
820
814
  }
821
815
  const newValue = !this.value();
@@ -826,17 +820,10 @@ class Checkbox {
826
820
  * Prevent the page from scrolling when pressing the space key.
827
821
  */
828
822
  suppressSpace(event) {
829
- if (!this.isDisabled()) {
823
+ if (!this.disabled()) {
830
824
  event.preventDefault();
831
825
  }
832
826
  }
833
- /**
834
- * Toggle disabled state on the checkbox.
835
- * @param isDisabled - Whether the control is disabled.
836
- */
837
- setDisabledState(isDisabled) {
838
- this.disabledFromControl.set(isDisabled);
839
- }
840
827
  /**
841
828
  * Update the current value (FormValueControl API).
842
829
  * @param value - New boolean value to apply.
@@ -846,7 +833,7 @@ class Checkbox {
846
833
  this.valueChange.emit(value);
847
834
  }
848
835
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: Checkbox, deps: [], target: i0.ɵɵFactoryTarget.Component });
849
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: Checkbox, isStandalone: true, selector: "button[b-checkbox]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, disabledBinding: { classPropertyName: "disabledBinding", publicName: "disabledBinding", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", valueChange: "valueChange", size: "sizeChange" }, host: { attributes: { "type": "\"button\"" }, listeners: { "click": "onToggle()", "keydown.space": "suppressSpace($event)" }, properties: { "attr.role": "\"checkbox\"", "attr.aria-checked": "value()", "attr.data-state": "value() ? \"checked\" : \"unchecked\"", "attr.aria-disabled": "isDisabled()", "disabled": "isDisabled()", "attr.data-disabled": "isDisabled() ? \"\" : null", "class.b-size-sm": "size() === \"sm\"", "class.b-size-md": "size() === \"md\"", "class.b-size-lg": "size() === \"lg\"" } }, ngImport: i0, template: `
836
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: Checkbox, isStandalone: true, selector: "button[b-checkbox]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", valueChange: "valueChange", size: "sizeChange" }, host: { attributes: { "type": "\"button\"" }, listeners: { "click": "onToggle()", "keydown.space": "suppressSpace($event)" }, properties: { "attr.role": "\"checkbox\"", "attr.aria-checked": "value()", "attr.data-state": "value() ? \"checked\" : \"unchecked\"", "attr.aria-disabled": "disabled()", "disabled": "disabled()", "attr.data-disabled": "disabled() ? \"\" : null", "class.b-size-sm": "size() === \"sm\"", "class.b-size-md": "size() === \"md\"", "class.b-size-lg": "size() === \"lg\"" } }, ngImport: i0, template: `
850
837
  <span class="b-checkbox-indicator" aria-hidden="true">
851
838
  @if (value()) {
852
839
  <svg
@@ -894,9 +881,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImpor
894
881
  '[attr.role]': '"checkbox"',
895
882
  '[attr.aria-checked]': 'value()',
896
883
  '[attr.data-state]': 'value() ? "checked" : "unchecked"',
897
- '[attr.aria-disabled]': 'isDisabled()',
898
- '[disabled]': 'isDisabled()',
899
- '[attr.data-disabled]': 'isDisabled() ? "" : null',
884
+ '[attr.aria-disabled]': 'disabled()',
885
+ '[disabled]': 'disabled()',
886
+ '[attr.data-disabled]': 'disabled() ? "" : null',
900
887
  '[class.b-size-sm]': 'size() === "sm"',
901
888
  '[class.b-size-md]': 'size() === "md"',
902
889
  '[class.b-size-lg]': 'size() === "lg"',
@@ -905,7 +892,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImpor
905
892
  },
906
893
  changeDetection: ChangeDetectionStrategy.OnPush,
907
894
  }]
908
- }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }, { type: i0.Output, args: ["sizeChange"] }], disabledBinding: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabledBinding", required: false }] }] } });
895
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }, { type: i0.Output, args: ["sizeChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }] } });
909
896
 
910
897
  /**
911
898
  * Presents a list of selectable command options and manages keyboard navigation.
@@ -2933,6 +2920,8 @@ class Select {
2933
2920
  selectContent = contentChild(SelectContent, ...(ngDevMode ? [{ debugName: "selectContent" }] : []));
2934
2921
  /** Function to display the selected value(s). */
2935
2922
  displayWith = input.required(...(ngDevMode ? [{ debugName: "displayWith" }] : []));
2923
+ /** Whether the select is disabled. Automatically bound by Signal Forms. */
2924
+ disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : {}), transform: booleanAttribute });
2936
2925
  /** Current value array for the select. */
2937
2926
  value = model([], ...(ngDevMode ? [{ debugName: "value" }] : []));
2938
2927
  /** Emitted when the value changes. */
@@ -2940,6 +2929,7 @@ class Select {
2940
2929
  constructor() {
2941
2930
  effect(() => this.updateDisplayedValue());
2942
2931
  effect(() => this.handleContentValueChanges());
2932
+ effect(() => this.selectTrigger()?.disabled.set(this.disabled()));
2943
2933
  }
2944
2934
  ngOnInit() {
2945
2935
  this.setupTriggerEvents();
@@ -3014,13 +3004,6 @@ class Select {
3014
3004
  overlay.closeOverlay();
3015
3005
  });
3016
3006
  }
3017
- /**
3018
- * Toggle disabled state on the select trigger.
3019
- * @param isDisabled - Whether the control is disabled.
3020
- */
3021
- setDisabledState(isDisabled) {
3022
- this.selectTrigger()?.disabled.set(isDisabled);
3023
- }
3024
3007
  /**
3025
3008
  * Update the current value.
3026
3009
  * @param value - New value array to apply.
@@ -3030,7 +3013,7 @@ class Select {
3030
3013
  this.valueChange.emit(value);
3031
3014
  }
3032
3015
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: Select, deps: [], target: i0.ɵɵFactoryTarget.Component });
3033
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.0.8", type: Select, isStandalone: true, selector: "b-select", inputs: { displayWith: { classPropertyName: "displayWith", publicName: "displayWith", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", valueChange: "valueChange" }, queries: [{ propertyName: "overlay", first: true, predicate: ConnectedOverlay, descendants: true, isSignal: true }, { propertyName: "selectTrigger", first: true, predicate: SelectTrigger, descendants: true, isSignal: true }, { propertyName: "selectValue", first: true, predicate: SelectValue, descendants: true, isSignal: true }, { propertyName: "selectContent", first: true, predicate: SelectContent, descendants: true, isSignal: true }], ngImport: i0, template: ` <ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
3016
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.0.8", type: Select, isStandalone: true, selector: "b-select", inputs: { displayWith: { classPropertyName: "displayWith", publicName: "displayWith", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", valueChange: "valueChange" }, queries: [{ propertyName: "overlay", first: true, predicate: ConnectedOverlay, descendants: true, isSignal: true }, { propertyName: "selectTrigger", first: true, predicate: SelectTrigger, descendants: true, isSignal: true }, { propertyName: "selectValue", first: true, predicate: SelectValue, descendants: true, isSignal: true }, { propertyName: "selectContent", first: true, predicate: SelectContent, descendants: true, isSignal: true }], ngImport: i0, template: ` <ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
3034
3017
  }
3035
3018
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: Select, decorators: [{
3036
3019
  type: Component,
@@ -3039,7 +3022,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImpor
3039
3022
  template: ` <ng-content />`,
3040
3023
  changeDetection: ChangeDetectionStrategy.OnPush,
3041
3024
  }]
3042
- }], ctorParameters: () => [], propDecorators: { overlay: [{ type: i0.ContentChild, args: [i0.forwardRef(() => ConnectedOverlay), { isSignal: true }] }], selectTrigger: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SelectTrigger), { isSignal: true }] }], selectValue: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SelectValue), { isSignal: true }] }], selectContent: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SelectContent), { isSignal: true }] }], displayWith: [{ type: i0.Input, args: [{ isSignal: true, alias: "displayWith", required: true }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }] } });
3025
+ }], ctorParameters: () => [], propDecorators: { overlay: [{ type: i0.ContentChild, args: [i0.forwardRef(() => ConnectedOverlay), { isSignal: true }] }], selectTrigger: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SelectTrigger), { isSignal: true }] }], selectValue: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SelectValue), { isSignal: true }] }], selectContent: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SelectContent), { isSignal: true }] }], displayWith: [{ type: i0.Input, args: [{ isSignal: true, alias: "displayWith", required: true }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }] } });
3043
3026
 
3044
3027
  /**
3045
3028
  * Directive to automatically focus the select filter input when it is initialized.
@@ -3272,43 +3255,32 @@ class Tabs {
3272
3255
  * Query list of Tab child components.
3273
3256
  */
3274
3257
  tabs = contentChildren(Tab, ...(ngDevMode ? [{ debugName: "tabs" }] : []));
3275
- /**
3276
- * Computed index of currently active tab.
3277
- */
3278
- activeIndex = computed(() => {
3279
- const currentValue = this.value()[0];
3280
- return this.tabs().findIndex((tab) => tab.value() === currentValue);
3281
- }, ...(ngDevMode ? [{ debugName: "activeIndex" }] : []));
3258
+ tabList = inject(TabList);
3282
3259
  constructor() {
3283
- // Sync tab selection with child tabs
3260
+ // Sync external model selection changes back to the underlying aria TabList
3284
3261
  effect(() => {
3285
3262
  const selectedValues = this.value();
3286
- this.tabs().forEach((tab) => {
3287
- tab.setSelected(selectedValues.includes(tab.value()));
3288
- });
3263
+ if (selectedValues.length > 0) {
3264
+ this.tabList.selectedTab.set(selectedValues[0]);
3265
+ }
3266
+ else {
3267
+ this.tabList.selectedTab.set(undefined);
3268
+ }
3289
3269
  });
3290
3270
  }
3291
- /**
3292
- * Move highlight to the previous tab.
3293
- */
3294
- previousTab() {
3295
- const currentIndex = this.activeIndex();
3296
- const tabs = this.tabs();
3297
- if (tabs.length === 0)
3298
- return;
3299
- const newIndex = currentIndex <= 0 ? tabs.length - 1 : currentIndex - 1;
3300
- this.selectTab(tabs[newIndex].value());
3301
- }
3302
- /**
3303
- * Move highlight to the next tab.
3304
- */
3305
- nextTab() {
3306
- const currentIndex = this.activeIndex();
3307
- const tabs = this.tabs();
3308
- if (tabs.length === 0)
3309
- return;
3310
- const newIndex = currentIndex >= tabs.length - 1 ? 0 : currentIndex + 1;
3311
- this.selectTab(tabs[newIndex].value());
3271
+ onSelectionChange(selectedValue) {
3272
+ if (selectedValue !== undefined) {
3273
+ if (this.value()[0] !== selectedValue) {
3274
+ this.value.set([selectedValue]);
3275
+ this.valueChange.emit([selectedValue]);
3276
+ // If a tab is selected via keyboard logic in "follow" mode, trigger an actual click
3277
+ // so that potential bindings like [routerLink] embedded in the tabs still activate naturally.
3278
+ const tab = this.tabs().find((t) => t.value() === selectedValue);
3279
+ if (tab?.el.nativeElement) {
3280
+ tab.el.nativeElement.click();
3281
+ }
3282
+ }
3283
+ }
3312
3284
  }
3313
3285
  /**
3314
3286
  * Select a tab by its value.
@@ -3318,18 +3290,27 @@ class Tabs {
3318
3290
  this.valueChange.emit([tabValue]);
3319
3291
  }
3320
3292
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: Tabs, deps: [], target: i0.ɵɵFactoryTarget.Component });
3321
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.0.8", type: Tabs, isStandalone: true, selector: "b-tabs", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", valueChange: "valueChange" }, host: { listeners: { "keydown.arrowLeft": "previousTab()", "keydown.arrowRight": "nextTab()" }, properties: { "attr.role": "\"tablist\"" } }, queries: [{ propertyName: "tabs", predicate: Tab, isSignal: true }], ngImport: i0, template: ` <ng-content /> `, isInline: true });
3293
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.0.8", type: Tabs, isStandalone: true, selector: "b-tabs", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", valueChange: "valueChange" }, host: { attributes: { "selectionMode": "follow" }, listeners: { "selectedTabChange": "onSelectionChange($event)" } }, queries: [{ propertyName: "tabs", predicate: Tab, isSignal: true }], hostDirectives: [{ directive: i1$3.Tabs }, { directive: i1$3.TabList, inputs: ["selectionMode", "selectionMode", "selectedTab", "selectedTab"], outputs: ["selectedTabChange", "selectedTabChange"] }], ngImport: i0, template: ` <ng-content /> `, isInline: true });
3322
3294
  }
3323
3295
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: Tabs, decorators: [{
3324
3296
  type: Component,
3325
3297
  args: [{
3326
3298
  selector: 'b-tabs',
3327
3299
  imports: [],
3300
+ hostDirectives: [
3301
+ {
3302
+ directive: Tabs$1,
3303
+ },
3304
+ {
3305
+ directive: TabList,
3306
+ inputs: ['selectionMode', 'selectedTab'],
3307
+ outputs: ['selectedTabChange'],
3308
+ },
3309
+ ],
3328
3310
  template: ` <ng-content /> `,
3329
3311
  host: {
3330
- '[attr.role]': '"tablist"',
3331
- '(keydown.arrowLeft)': 'previousTab()',
3332
- '(keydown.arrowRight)': 'nextTab()',
3312
+ selectionMode: 'follow',
3313
+ '(selectedTabChange)': 'onSelectionChange($event)',
3333
3314
  },
3334
3315
  }]
3335
3316
  }], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }], tabs: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => Tab), { isSignal: true }] }] } });
@@ -3341,7 +3322,7 @@ class Tab {
3341
3322
  /**
3342
3323
  * Parent tabs container.
3343
3324
  */
3344
- tabs = inject(Tabs);
3325
+ tabsContainer = inject(Tabs);
3345
3326
  /**
3346
3327
  * Host element reference.
3347
3328
  */
@@ -3350,47 +3331,39 @@ class Tab {
3350
3331
  * Unique value identifying this tab.
3351
3332
  */
3352
3333
  value = input.required(...(ngDevMode ? [{ debugName: "value" }] : []));
3353
- /**
3354
- * Internal signal tracking selection state.
3355
- */
3356
- selected = signal(false, ...(ngDevMode ? [{ debugName: "selected" }] : []));
3357
- /**
3358
- * Whether this tab is currently selected.
3359
- */
3360
- isSelected = computed(() => this.selected(), ...(ngDevMode ? [{ debugName: "isSelected" }] : []));
3334
+ focusMonitor = inject(FocusMonitor);
3361
3335
  constructor() {
3362
- // Focus this tab when it becomes selected
3363
- effect(() => {
3364
- if (this.isSelected()) {
3365
- this.el.nativeElement.focus();
3366
- }
3367
- });
3336
+ this.focusMonitor.monitor(this.el);
3337
+ }
3338
+ ngOnDestroy() {
3339
+ this.focusMonitor.stopMonitoring(this.el);
3368
3340
  }
3369
3341
  /**
3370
- * Set the selected state of this tab.
3342
+ * Whether this tab is currently selected.
3371
3343
  */
3372
- setSelected(selected) {
3373
- this.selected.set(selected);
3374
- }
3344
+ isSelected = computed(() => this.value() === this.tabsContainer.value()[0], ...(ngDevMode ? [{ debugName: "isSelected" }] : []));
3375
3345
  /**
3376
3346
  * Handle click events to select this tab.
3377
3347
  */
3378
3348
  onClick() {
3379
- this.tabs.selectTab(this.value());
3349
+ this.tabsContainer.selectTab(this.value());
3380
3350
  }
3381
3351
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: Tab, deps: [], target: i0.ɵɵFactoryTarget.Component });
3382
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.0.8", type: Tab, isStandalone: true, selector: "b-tab", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "click": "onClick()" }, properties: { "attr.role": "\"tab\"", "attr.aria-selected": "isSelected()", "attr.tabindex": "isSelected() ? 0 : -1" } }, ngImport: i0, template: ` <ng-content /> `, isInline: true });
3352
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.0.8", type: Tab, isStandalone: true, selector: "b-tab", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "click": "onClick()" } }, hostDirectives: [{ directive: i1$3.Tab, inputs: ["value", "value"] }], ngImport: i0, template: ` <ng-content /> `, isInline: true });
3383
3353
  }
3384
3354
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: Tab, decorators: [{
3385
3355
  type: Component,
3386
3356
  args: [{
3387
3357
  selector: 'b-tab',
3388
3358
  imports: [],
3359
+ hostDirectives: [
3360
+ {
3361
+ directive: Tab$1,
3362
+ inputs: ['value'],
3363
+ },
3364
+ ],
3389
3365
  template: ` <ng-content /> `,
3390
3366
  host: {
3391
- '[attr.role]': '"tab"',
3392
- '[attr.aria-selected]': 'isSelected()',
3393
- '[attr.tabindex]': 'isSelected() ? 0 : -1',
3394
3367
  '(click)': 'onClick()',
3395
3368
  },
3396
3369
  }]
@@ -3626,7 +3599,7 @@ class TreeNode {
3626
3599
  provideIcons({
3627
3600
  lucideGripVertical,
3628
3601
  }),
3629
- ], queries: [{ propertyName: "nestedTree", first: true, predicate: Tree, descendants: true, isSignal: true }], hostDirectives: [{ directive: i1$3.CdkDrag, inputs: ["cdkDragDisabled", "disabled"] }], ngImport: i0, template: `
3602
+ ], queries: [{ propertyName: "nestedTree", first: true, predicate: Tree, descendants: true, isSignal: true }], hostDirectives: [{ directive: i1$4.CdkDrag, inputs: ["cdkDragDisabled", "disabled"] }], ngImport: i0, template: `
3630
3603
  <section>
3631
3604
  @if (!isNodeDisabled() && !shouldHideDragHandle()) {
3632
3605
  <ng-icon name="lucideGripVertical" size="16" color="currentColor" cdkDragHandle />
@@ -3811,7 +3784,7 @@ class Tree {
3811
3784
  });
3812
3785
  }
3813
3786
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: Tree, deps: [], target: i0.ɵɵFactoryTarget.Component });
3814
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.0.8", type: Tree, isStandalone: true, selector: "b-tree", inputs: { draggable: { classPropertyName: "draggable", publicName: "draggable", isSignal: true, isRequired: false, transformFunction: null }, closeRecursively: { classPropertyName: "closeRecursively", publicName: "closeRecursively", isSignal: true, isRequired: false, transformFunction: null }, dragOnlyWhenCollapsed: { classPropertyName: "dragOnlyWhenCollapsed", publicName: "dragOnlyWhenCollapsed", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dropEmitter: "dropEmitter" }, host: { listeners: { "cdkDropListDropped": "dropEmitter.emit($event)" } }, queries: [{ propertyName: "nestedNodes", predicate: TreeNode, isSignal: true }], hostDirectives: [{ directive: i1$3.CdkDropList, inputs: ["id", "id", "cdkDropListConnectedTo", "connectedTo"], outputs: ["cdkDropListDropped", "cdkDropListDropped"] }, { directive: i1$3.CdkDropListGroup }], ngImport: i0, template: ` <ng-content /> `, isInline: true });
3787
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.0.8", type: Tree, isStandalone: true, selector: "b-tree", inputs: { draggable: { classPropertyName: "draggable", publicName: "draggable", isSignal: true, isRequired: false, transformFunction: null }, closeRecursively: { classPropertyName: "closeRecursively", publicName: "closeRecursively", isSignal: true, isRequired: false, transformFunction: null }, dragOnlyWhenCollapsed: { classPropertyName: "dragOnlyWhenCollapsed", publicName: "dragOnlyWhenCollapsed", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dropEmitter: "dropEmitter" }, host: { listeners: { "cdkDropListDropped": "dropEmitter.emit($event)" } }, queries: [{ propertyName: "nestedNodes", predicate: TreeNode, isSignal: true }], hostDirectives: [{ directive: i1$4.CdkDropList, inputs: ["id", "id", "cdkDropListConnectedTo", "connectedTo"], outputs: ["cdkDropListDropped", "cdkDropListDropped"] }, { directive: i1$4.CdkDropListGroup }], ngImport: i0, template: ` <ng-content /> `, isInline: true });
3815
3788
  }
3816
3789
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: Tree, decorators: [{
3817
3790
  type: Component,