@radix-ng/primitives 1.0.6 → 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/aspect-ratio/README.md +1 -1
- package/fesm2022/radix-ng-primitives-accordion.mjs +6 -1
- package/fesm2022/radix-ng-primitives-accordion.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-aspect-ratio.mjs +9 -34
- package/fesm2022/radix-ng-primitives-aspect-ratio.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-autocomplete.mjs +43 -9
- package/fesm2022/radix-ng-primitives-autocomplete.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-avatar.mjs +69 -18
- package/fesm2022/radix-ng-primitives-avatar.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-checkbox.mjs +93 -16
- package/fesm2022/radix-ng-primitives-checkbox.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-collapsible.mjs +4 -3
- package/fesm2022/radix-ng-primitives-collapsible.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-combobox.mjs +43 -9
- package/fesm2022/radix-ng-primitives-combobox.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-core.mjs +208 -2
- package/fesm2022/radix-ng-primitives-core.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-date-field.mjs +50 -9
- package/fesm2022/radix-ng-primitives-date-field.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-editable.mjs +31 -5
- package/fesm2022/radix-ng-primitives-editable.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-field.mjs +276 -58
- package/fesm2022/radix-ng-primitives-field.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-form.mjs +111 -27
- package/fesm2022/radix-ng-primitives-form.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-input.mjs +16 -6
- package/fesm2022/radix-ng-primitives-input.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-label.mjs +5 -4
- package/fesm2022/radix-ng-primitives-label.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-number-field.mjs +39 -10
- package/fesm2022/radix-ng-primitives-number-field.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-progress.mjs +37 -22
- package/fesm2022/radix-ng-primitives-progress.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-radio.mjs +18 -9
- package/fesm2022/radix-ng-primitives-radio.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-scroll-area.mjs +4 -4
- package/fesm2022/radix-ng-primitives-scroll-area.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-select.mjs +26 -8
- package/fesm2022/radix-ng-primitives-select.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-separator.mjs +7 -13
- package/fesm2022/radix-ng-primitives-separator.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-signal-forms.mjs +184 -0
- package/fesm2022/radix-ng-primitives-signal-forms.mjs.map +1 -0
- package/fesm2022/radix-ng-primitives-slider.mjs +25 -10
- package/fesm2022/radix-ng-primitives-slider.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-switch.mjs +32 -8
- package/fesm2022/radix-ng-primitives-switch.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-tabs.mjs +4 -4
- package/fesm2022/radix-ng-primitives-tabs.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-time-field.mjs +49 -9
- package/fesm2022/radix-ng-primitives-time-field.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-toggle-group.mjs +33 -16
- package/fesm2022/radix-ng-primitives-toggle-group.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-toggle.mjs +24 -29
- package/fesm2022/radix-ng-primitives-toggle.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-toolbar.mjs +15 -2
- package/fesm2022/radix-ng-primitives-toolbar.mjs.map +1 -1
- package/package.json +11 -1
- package/types/radix-ng-primitives-accordion.d.ts +1 -0
- package/types/radix-ng-primitives-aspect-ratio.d.ts +10 -23
- package/types/radix-ng-primitives-autocomplete.d.ts +21 -2
- package/types/radix-ng-primitives-avatar.d.ts +51 -25
- package/types/radix-ng-primitives-checkbox.d.ts +78 -101
- package/types/radix-ng-primitives-combobox.d.ts +51 -2
- package/types/radix-ng-primitives-core.d.ts +206 -3
- package/types/radix-ng-primitives-date-field.d.ts +27 -2
- package/types/radix-ng-primitives-editable.d.ts +15 -2
- package/types/radix-ng-primitives-field.d.ts +165 -236
- package/types/radix-ng-primitives-form.d.ts +122 -37
- package/types/radix-ng-primitives-input.d.ts +8 -1
- package/types/radix-ng-primitives-label.d.ts +3 -2
- package/types/radix-ng-primitives-number-field.d.ts +15 -4
- package/types/radix-ng-primitives-progress.d.ts +59 -121
- package/types/radix-ng-primitives-radio.d.ts +7 -3
- package/types/radix-ng-primitives-select.d.ts +11 -3
- package/types/radix-ng-primitives-separator.d.ts +0 -7
- package/types/radix-ng-primitives-signal-forms.d.ts +97 -0
- package/types/radix-ng-primitives-slider.d.ts +9 -7
- package/types/radix-ng-primitives-switch.d.ts +15 -2
- package/types/radix-ng-primitives-time-field.d.ts +26 -2
- package/types/radix-ng-primitives-toggle-group.d.ts +13 -7
- package/types/radix-ng-primitives-toggle.d.ts +8 -8
- package/types/radix-ng-primitives-toolbar.d.ts +2 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { Directive, inject, computed, input, booleanAttribute, model, output, effect, NgModule } from '@angular/core';
|
|
3
3
|
import * as i1 from '@radix-ng/primitives/core';
|
|
4
|
-
import { createContext, injectControlValueAccessor, injectId, createCancelableChangeEventDetails, RdxControlValueAccessor } from '@radix-ng/primitives/core';
|
|
4
|
+
import { createContext, injectControlValueAccessor, RdxFormUiControlBase, injectId, createCancelableChangeEventDetails, RdxControlValueAccessor } from '@radix-ng/primitives/core';
|
|
5
5
|
|
|
6
6
|
const [injectSwitchContext, provideSwitchContext] = createContext('RdxSwitchContext', 'components/switch');
|
|
7
7
|
|
|
@@ -15,7 +15,7 @@ class RdxSwitchInput {
|
|
|
15
15
|
this.rootContext = injectSwitchContext();
|
|
16
16
|
}
|
|
17
17
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxSwitchInput, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
18
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.2", type: RdxSwitchInput, isStandalone: true, selector: "input[rdxSwitchInput]", host: { attributes: { "type": "checkbox", "tabindex": "-1", "aria-hidden": "true" }, listeners: { "blur": "rootContext.markAsTouched()" }, properties: { "attr.name": "rootContext.name()", "attr.value": "rootContext.value()", "checked": "rootContext.checked()", "disabled": "rootContext.disabled()", "attr.required": "rootContext.required() ? \"\" : undefined", "attr.aria-label": "rootContext.ariaLabel()", "attr.aria-labelledby": "rootContext.ariaLabelledBy()"
|
|
18
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.2", type: RdxSwitchInput, isStandalone: true, selector: "input[rdxSwitchInput]", host: { attributes: { "type": "checkbox", "tabindex": "-1", "aria-hidden": "true" }, listeners: { "blur": "rootContext.markAsTouched()" }, properties: { "attr.name": "rootContext.name()", "attr.value": "rootContext.value()", "checked": "rootContext.checked()", "disabled": "rootContext.disabled()", "attr.required": "rootContext.required() ? \"\" : undefined", "attr.aria-label": "rootContext.ariaLabel()", "attr.aria-labelledby": "rootContext.ariaLabelledBy()" }, styleAttribute: "transform: translateX(-100%); position: absolute; overflow: hidden; pointer-events: none; opacity: 0; margin: 0;" }, exportAs: ["rdxSwitchInput"], ngImport: i0 }); }
|
|
19
19
|
}
|
|
20
20
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxSwitchInput, decorators: [{
|
|
21
21
|
type: Directive,
|
|
@@ -33,8 +33,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
33
33
|
'[attr.required]': 'rootContext.required() ? "" : undefined',
|
|
34
34
|
'[attr.aria-label]': 'rootContext.ariaLabel()',
|
|
35
35
|
'[attr.aria-labelledby]': 'rootContext.ariaLabelledBy()',
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
// The hidden form input carries no `data-*` (Base UI parity) — state attributes live on the
|
|
37
|
+
// root button and thumb.
|
|
38
38
|
style: 'transform: translateX(-100%); position: absolute; overflow: hidden; pointer-events: none; opacity: 0; margin: 0;',
|
|
39
39
|
'(blur)': 'rootContext.markAsTouched()'
|
|
40
40
|
}
|
|
@@ -53,7 +53,7 @@ const context = () => {
|
|
|
53
53
|
value: root.submitValue,
|
|
54
54
|
ariaLabel: root.ariaLabel,
|
|
55
55
|
ariaLabelledBy: root.ariaLabelledBy,
|
|
56
|
-
markAsTouched: () =>
|
|
56
|
+
markAsTouched: () => root.markAsTouched()
|
|
57
57
|
};
|
|
58
58
|
};
|
|
59
59
|
/**
|
|
@@ -61,8 +61,9 @@ const context = () => {
|
|
|
61
61
|
*
|
|
62
62
|
* @see https://base-ui.com/react/components/switch
|
|
63
63
|
*/
|
|
64
|
-
class RdxSwitchRoot {
|
|
64
|
+
class RdxSwitchRoot extends RdxFormUiControlBase {
|
|
65
65
|
constructor() {
|
|
66
|
+
super();
|
|
66
67
|
/** @ignore */
|
|
67
68
|
this.cva = injectControlValueAccessor();
|
|
68
69
|
this.id = input(injectId('rdx-switch-'), /* @ts-ignore */
|
|
@@ -120,6 +121,12 @@ class RdxSwitchRoot {
|
|
|
120
121
|
/** @ignore */
|
|
121
122
|
this.isDisabled = computed(() => !!this.cva.disabled(), /* @ts-ignore */
|
|
122
123
|
...(ngDevMode ? [{ debugName: "isDisabled" }] : /* istanbul ignore next */ []));
|
|
124
|
+
/** @ignore */
|
|
125
|
+
this.invalidState = this.formUi.invalidState;
|
|
126
|
+
/** @ignore */
|
|
127
|
+
this.touchedState = this.formUi.touchedState;
|
|
128
|
+
/** @ignore */
|
|
129
|
+
this.dirtyState = this.formUi.dirtyState;
|
|
123
130
|
// Apply the uncontrolled `defaultChecked` once. `input()` values are not bound at field-init,
|
|
124
131
|
// so the on state must be seeded here — into both the `checked` model and the CVA value, which
|
|
125
132
|
// is the source of truth for `checkedState`/`aria-checked`/`data-checked`.
|
|
@@ -133,6 +140,17 @@ class RdxSwitchRoot {
|
|
|
133
140
|
}
|
|
134
141
|
});
|
|
135
142
|
}
|
|
143
|
+
/** @ignore Bridge the CVA into `markAsTouched` (dual). */
|
|
144
|
+
formUiTouchTarget() {
|
|
145
|
+
return injectControlValueAccessor();
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Mark the switch touched — CVA for Reactive forms, plus the `touched` model + `touch` output for
|
|
149
|
+
* Signal Forms. Called on blur of the root button or the hidden input.
|
|
150
|
+
*/
|
|
151
|
+
markAsTouched() {
|
|
152
|
+
this.formUi.markAsTouched();
|
|
153
|
+
}
|
|
136
154
|
/** @ignore Toggles the checked state unless disabled or read-only. */
|
|
137
155
|
toggle(event) {
|
|
138
156
|
if (this.isDisabled() || this.readonly()) {
|
|
@@ -147,9 +165,10 @@ class RdxSwitchRoot {
|
|
|
147
165
|
}
|
|
148
166
|
this.checked.set(next);
|
|
149
167
|
this.cva.setValue(next);
|
|
168
|
+
this.formUi.markDirty();
|
|
150
169
|
}
|
|
151
170
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxSwitchRoot, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
152
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: RdxSwitchRoot, isStandalone: true, selector: "button[rdxSwitchRoot]", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, defaultChecked: { classPropertyName: "defaultChecked", publicName: "defaultChecked", isSignal: true, isRequired: false, transformFunction: null }, checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, submitValue: { classPropertyName: "submitValue", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, ariaLabelledBy: { classPropertyName: "ariaLabelledBy", publicName: "aria-labelledby", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { checked: "checkedChange", onCheckedChange: "onCheckedChange" }, host: { attributes: { "role": "switch", "type": "button" }, listeners: { "click": "toggle($event)", "blur": "
|
|
171
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: RdxSwitchRoot, isStandalone: true, selector: "button[rdxSwitchRoot]", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, defaultChecked: { classPropertyName: "defaultChecked", publicName: "defaultChecked", isSignal: true, isRequired: false, transformFunction: null }, checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, submitValue: { classPropertyName: "submitValue", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, ariaLabelledBy: { classPropertyName: "ariaLabelledBy", publicName: "aria-labelledby", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { checked: "checkedChange", onCheckedChange: "onCheckedChange" }, host: { attributes: { "role": "switch", "type": "button" }, listeners: { "click": "toggle($event)", "blur": "markAsTouched()" }, properties: { "id": "id()", "attr.aria-checked": "checkedState()", "attr.aria-required": "required() ? \"true\" : undefined", "attr.aria-readonly": "readonly() ? \"true\" : undefined", "attr.aria-invalid": "displayValid() === false ? \"true\" : undefined", "attr.data-checked": "checkedState() ? \"\" : undefined", "attr.data-unchecked": "checkedState() ? undefined : \"\"", "attr.data-disabled": "isDisabled() ? \"\" : undefined", "attr.data-readonly": "readonly() ? \"\" : undefined", "attr.data-required": "required() ? \"\" : undefined", "attr.data-invalid": "displayValid() === false ? \"\" : undefined", "attr.data-valid": "displayValid() === true ? \"\" : undefined", "attr.data-touched": "touchedState() ? \"\" : undefined", "attr.data-dirty": "dirtyState() ? \"\" : undefined", "attr.disabled": "isDisabled() ? \"\" : undefined" } }, providers: [provideSwitchContext(context)], exportAs: ["rdxSwitchRoot"], usesInheritance: true, hostDirectives: [{ directive: i1.RdxControlValueAccessor, inputs: ["value", "checked", "disabled", "disabled"] }], ngImport: i0 }); }
|
|
153
172
|
}
|
|
154
173
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxSwitchRoot, decorators: [{
|
|
155
174
|
type: Directive,
|
|
@@ -170,16 +189,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
170
189
|
'[attr.aria-checked]': 'checkedState()',
|
|
171
190
|
'[attr.aria-required]': 'required() ? "true" : undefined',
|
|
172
191
|
'[attr.aria-readonly]': 'readonly() ? "true" : undefined',
|
|
192
|
+
'[attr.aria-invalid]': 'displayValid() === false ? "true" : undefined',
|
|
173
193
|
'[attr.data-checked]': 'checkedState() ? "" : undefined',
|
|
174
194
|
'[attr.data-unchecked]': 'checkedState() ? undefined : ""',
|
|
175
195
|
'[attr.data-disabled]': 'isDisabled() ? "" : undefined',
|
|
176
196
|
'[attr.data-readonly]': 'readonly() ? "" : undefined',
|
|
177
197
|
'[attr.data-required]': 'required() ? "" : undefined',
|
|
198
|
+
'[attr.data-invalid]': 'displayValid() === false ? "" : undefined',
|
|
199
|
+
'[attr.data-valid]': 'displayValid() === true ? "" : undefined',
|
|
200
|
+
'[attr.data-touched]': 'touchedState() ? "" : undefined',
|
|
201
|
+
'[attr.data-dirty]': 'dirtyState() ? "" : undefined',
|
|
178
202
|
// Native `<button rdxSwitchRoot>` → native `disabled` (Base UI's `nativeButton: true` path in
|
|
179
203
|
// `useFocusableWhenDisabled`). The hidden `[rdxSwitchInput]` is also disabled for form exclusion.
|
|
180
204
|
'[attr.disabled]': 'isDisabled() ? "" : undefined',
|
|
181
205
|
'(click)': 'toggle($event)',
|
|
182
|
-
'(blur)': '
|
|
206
|
+
'(blur)': 'markAsTouched()'
|
|
183
207
|
}
|
|
184
208
|
}]
|
|
185
209
|
}], ctorParameters: () => [], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], defaultChecked: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultChecked", required: false }] }], checked: [{ type: i0.Input, args: [{ isSignal: true, alias: "checked", required: false }] }, { type: i0.Output, args: ["checkedChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], submitValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], ariaLabelledBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-labelledby", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }], onCheckedChange: [{ type: i0.Output, args: ["onCheckedChange"] }] } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"radix-ng-primitives-switch.mjs","sources":["../../../packages/primitives/switch/src/switch-context.ts","../../../packages/primitives/switch/src/switch-input.ts","../../../packages/primitives/switch/src/switch-root.ts","../../../packages/primitives/switch/src/switch-thumb.ts","../../../packages/primitives/switch/index.ts","../../../packages/primitives/switch/radix-ng-primitives-switch.ts"],"sourcesContent":["import { Signal } from '@angular/core';\nimport { createContext } from '@radix-ng/primitives/core';\n\nexport interface RdxSwitchContext {\n /** Whether the switch is on. */\n readonly checked: Signal<boolean>;\n\n /** Whether the switch is disabled. */\n readonly disabled: Signal<boolean>;\n\n /** Whether the switch is read-only (focusable, but cannot be toggled). */\n readonly readonly: Signal<boolean>;\n\n /** Whether the switch must be on to submit the owning form. */\n readonly required: Signal<boolean>;\n\n /** Name of the hidden form input. */\n readonly name: Signal<string | undefined>;\n\n /** Value submitted with the form when the switch is on. */\n readonly value: Signal<string>;\n\n readonly ariaLabel: Signal<string | undefined>;\n readonly ariaLabelledBy: Signal<string | undefined>;\n\n markAsTouched(): void;\n}\n\nexport const [injectSwitchContext, provideSwitchContext] = createContext<RdxSwitchContext>(\n 'RdxSwitchContext',\n 'components/switch'\n);\n","import { Directive } from '@angular/core';\nimport { injectSwitchContext } from './switch-context';\n\n/**\n * The hidden native checkbox that mirrors the switch state for form submission and screen readers.\n *\n * @see https://base-ui.com/react/components/switch\n */\n@Directive({\n selector: 'input[rdxSwitchInput]',\n exportAs: 'rdxSwitchInput',\n host: {\n type: 'checkbox',\n tabindex: '-1',\n 'aria-hidden': 'true',\n '[attr.name]': 'rootContext.name()',\n '[attr.value]': 'rootContext.value()',\n '[checked]': 'rootContext.checked()',\n '[disabled]': 'rootContext.disabled()',\n '[attr.required]': 'rootContext.required() ? \"\" : undefined',\n '[attr.aria-label]': 'rootContext.ariaLabel()',\n '[attr.aria-labelledby]': 'rootContext.ariaLabelledBy()',\n '[attr.data-checked]': 'rootContext.checked() ? \"\" : undefined',\n '[attr.data-unchecked]': 'rootContext.checked() ? undefined : \"\"',\n style: 'transform: translateX(-100%); position: absolute; overflow: hidden; pointer-events: none; opacity: 0; margin: 0;',\n '(blur)': 'rootContext.markAsTouched()'\n }\n})\nexport class RdxSwitchInput {\n protected readonly rootContext = injectSwitchContext();\n}\n","import { booleanAttribute, computed, Directive, effect, inject, input, model, output } from '@angular/core';\nimport {\n BooleanInput,\n createCancelableChangeEventDetails,\n injectControlValueAccessor,\n injectId,\n RdxCancelableChangeEventDetails,\n RdxControlValueAccessor,\n RdxFormCheckboxControl\n} from '@radix-ng/primitives/core';\nimport { provideSwitchContext, RdxSwitchContext } from './switch-context';\n\nexport type RdxSwitchCheckedChangeReason = 'none';\nexport type RdxSwitchCheckedChangeEventDetails = RdxCancelableChangeEventDetails<RdxSwitchCheckedChangeReason>;\n\nexport interface RdxSwitchCheckedChangeEvent {\n checked: boolean;\n eventDetails: RdxSwitchCheckedChangeEventDetails;\n}\n\nconst context = (): RdxSwitchContext => {\n const root = inject(RdxSwitchRoot);\n const cva = injectControlValueAccessor<boolean | undefined>();\n\n return {\n checked: root.checkedState,\n disabled: computed(() => !!cva.disabled()),\n readonly: root.readonly,\n required: root.required,\n name: root.name,\n value: root.submitValue,\n ariaLabel: root.ariaLabel,\n ariaLabelledBy: root.ariaLabelledBy,\n markAsTouched: () => cva.markAsTouched()\n };\n};\n\n/**\n * A control that toggles between on and off.\n *\n * @see https://base-ui.com/react/components/switch\n */\n@Directive({\n selector: 'button[rdxSwitchRoot]',\n exportAs: 'rdxSwitchRoot',\n providers: [provideSwitchContext(context)],\n hostDirectives: [\n {\n directive: RdxControlValueAccessor,\n inputs: ['value: checked', 'disabled']\n }\n ],\n host: {\n role: 'switch',\n type: 'button',\n '[id]': 'id()',\n '[attr.aria-checked]': 'checkedState()',\n '[attr.aria-required]': 'required() ? \"true\" : undefined',\n '[attr.aria-readonly]': 'readonly() ? \"true\" : undefined',\n '[attr.data-checked]': 'checkedState() ? \"\" : undefined',\n '[attr.data-unchecked]': 'checkedState() ? undefined : \"\"',\n '[attr.data-disabled]': 'isDisabled() ? \"\" : undefined',\n '[attr.data-readonly]': 'readonly() ? \"\" : undefined',\n '[attr.data-required]': 'required() ? \"\" : undefined',\n // Native `<button rdxSwitchRoot>` → native `disabled` (Base UI's `nativeButton: true` path in\n // `useFocusableWhenDisabled`). The hidden `[rdxSwitchInput]` is also disabled for form exclusion.\n '[attr.disabled]': 'isDisabled() ? \"\" : undefined',\n '(click)': 'toggle($event)',\n '(blur)': 'cva.markAsTouched()'\n }\n})\nexport class RdxSwitchRoot implements RdxFormCheckboxControl {\n /** @ignore */\n protected readonly cva = injectControlValueAccessor<boolean | undefined>();\n\n readonly id = input<string>(injectId('rdx-switch-'));\n\n /**\n * The state of the switch when it is initially rendered. Use when you do not need to control its state.\n *\n * @default false\n */\n readonly defaultChecked = input<boolean | undefined, BooleanInput | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value))\n });\n\n /**\n * The controlled checked state. Use with `(onCheckedChange)` or two-way `[(checked)]`.\n */\n readonly checked = model<boolean>(false);\n\n /**\n * When `true`, prevents the user from interacting with the switch.\n *\n * @default false\n */\n readonly disabled = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /**\n * When `true`, the switch is focusable but cannot be toggled.\n *\n * @default false\n */\n readonly readonly = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /**\n * When `true`, the switch must be on before the owning form can be submitted.\n *\n * @default false\n */\n readonly required = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /** Name of the hidden form input rendered by `[rdxSwitchInput]`. */\n readonly name = input<string>();\n\n /**\n * Value submitted with the form when the switch is on.\n *\n * Bound publicly as `[value]`; the TS member is named `submitValue` so the\n * directive can satisfy `RdxFormCheckboxControl`, whose contract reserves a\n * `value` member for `RdxFormValueControl` and forbids it on checkbox-style\n * controls.\n *\n * @default 'on'\n */\n readonly submitValue = input<string>('on', { alias: 'value' });\n\n readonly ariaLabelledBy = input<string | undefined>(undefined, { alias: 'aria-labelledby' });\n readonly ariaLabel = input<string | undefined>(undefined, { alias: 'aria-label' });\n\n /** Event handler called when the checked state of the switch changes. */\n readonly onCheckedChange = output<RdxSwitchCheckedChangeEvent>();\n\n /** @ignore */\n readonly checkedState = computed(() => !!this.cva.value());\n /** @ignore */\n protected readonly isDisabled = computed(() => !!this.cva.disabled());\n\n constructor() {\n // Apply the uncontrolled `defaultChecked` once. `input()` values are not bound at field-init,\n // so the on state must be seeded here — into both the `checked` model and the CVA value, which\n // is the source of truth for `checkedState`/`aria-checked`/`data-checked`.\n let hasAppliedDefault = false;\n effect(() => {\n const defaultChecked = this.defaultChecked();\n if (!hasAppliedDefault && defaultChecked !== undefined) {\n hasAppliedDefault = true;\n this.checked.set(defaultChecked);\n this.cva.setValue(defaultChecked);\n }\n });\n }\n\n /** @ignore Toggles the checked state unless disabled or read-only. */\n toggle(event?: Event): void {\n if (this.isDisabled() || this.readonly()) {\n return;\n }\n\n const next = !this.cva.value();\n const trigger = event?.currentTarget instanceof HTMLElement ? event.currentTarget : undefined;\n const { eventDetails } = createCancelableChangeEventDetails(\n 'none',\n event ?? new Event('switch.checked-change'),\n trigger\n );\n this.onCheckedChange.emit({ checked: next, eventDetails });\n if (eventDetails.isCanceled()) {\n return;\n }\n\n this.checked.set(next);\n this.cva.setValue(next);\n }\n}\n","import { Directive } from '@angular/core';\nimport { injectSwitchContext } from './switch-context';\n\n/**\n * The moving part of the switch that indicates whether it is on or off.\n *\n * @see https://base-ui.com/react/components/switch\n */\n@Directive({\n selector: 'span[rdxSwitchThumb]',\n exportAs: 'rdxSwitchThumb',\n host: {\n '[attr.data-checked]': 'rootContext.checked() ? \"\" : undefined',\n '[attr.data-unchecked]': 'rootContext.checked() ? undefined : \"\"',\n '[attr.data-disabled]': 'rootContext.disabled() ? \"\" : undefined',\n '[attr.data-readonly]': 'rootContext.readonly() ? \"\" : undefined',\n '[attr.data-required]': 'rootContext.required() ? \"\" : undefined'\n }\n})\nexport class RdxSwitchThumb {\n protected readonly rootContext = injectSwitchContext();\n}\n","import { NgModule } from '@angular/core';\nimport { RdxSwitchInput } from './src/switch-input';\nimport { RdxSwitchRoot } from './src/switch-root';\nimport { RdxSwitchThumb } from './src/switch-thumb';\n\nexport * from './src/switch-context';\nexport * from './src/switch-input';\nexport * from './src/switch-root';\nexport * from './src/switch-thumb';\n\nexport const switchImports = [RdxSwitchRoot, RdxSwitchInput, RdxSwitchThumb];\n\n@NgModule({\n imports: [...switchImports],\n exports: [...switchImports]\n})\nexport class RdxSwitchModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;AA4BO,MAAM,CAAC,mBAAmB,EAAE,oBAAoB,CAAC,GAAG,aAAa,CACpE,kBAAkB,EAClB,mBAAmB;;AC3BvB;;;;AAIG;MAqBU,cAAc,CAAA;AApB3B,IAAA,WAAA,GAAA;QAqBuB,IAAA,CAAA,WAAW,GAAG,mBAAmB,EAAE;AACzD,IAAA;8GAFY,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,UAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,MAAA,EAAA,6BAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,2CAAA,EAAA,iBAAA,EAAA,yBAAA,EAAA,sBAAA,EAAA,8BAAA,EAAA,mBAAA,EAAA,0CAAA,EAAA,qBAAA,EAAA,0CAAA,EAAA,EAAA,cAAA,EAAA,kHAAA,EAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBApB1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,IAAI,EAAE;AACF,wBAAA,IAAI,EAAE,UAAU;AAChB,wBAAA,QAAQ,EAAE,IAAI;AACd,wBAAA,aAAa,EAAE,MAAM;AACrB,wBAAA,aAAa,EAAE,oBAAoB;AACnC,wBAAA,cAAc,EAAE,qBAAqB;AACrC,wBAAA,WAAW,EAAE,uBAAuB;AACpC,wBAAA,YAAY,EAAE,wBAAwB;AACtC,wBAAA,iBAAiB,EAAE,yCAAyC;AAC5D,wBAAA,mBAAmB,EAAE,yBAAyB;AAC9C,wBAAA,wBAAwB,EAAE,8BAA8B;AACxD,wBAAA,qBAAqB,EAAE,wCAAwC;AAC/D,wBAAA,uBAAuB,EAAE,wCAAwC;AACjE,wBAAA,KAAK,EAAE,kHAAkH;AACzH,wBAAA,QAAQ,EAAE;AACb;AACJ,iBAAA;;;ACPD,MAAM,OAAO,GAAG,MAAuB;AACnC,IAAA,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC;AAClC,IAAA,MAAM,GAAG,GAAG,0BAA0B,EAAuB;IAE7D,OAAO;QACH,OAAO,EAAE,IAAI,CAAC,YAAY;AAC1B,QAAA,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC1C,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,KAAK,EAAE,IAAI,CAAC,WAAW;QACvB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,cAAc,EAAE,IAAI,CAAC,cAAc;AACnC,QAAA,aAAa,EAAE,MAAM,GAAG,CAAC,aAAa;KACzC;AACL,CAAC;AAED;;;;AAIG;MA8BU,aAAa,CAAA;AAmEtB,IAAA,WAAA,GAAA;;QAjEmB,IAAA,CAAA,GAAG,GAAG,0BAA0B,EAAuB;AAEjE,QAAA,IAAA,CAAA,EAAE,GAAG,KAAK,CAAS,QAAQ,CAAC,aAAa,CAAC;+EAAC;AAEpD;;;;AAIG;AACM,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAAgD,SAAS,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,8BAAA,EAAA,CAAA,EACpF,SAAS,EAAE,CAAC,KAAK,MAAM,KAAK,KAAK,SAAS,GAAG,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,GACnF;AAEF;;AAEG;QACM,IAAA,CAAA,OAAO,GAAG,KAAK,CAAU,KAAK;oFAAC;AAExC;;;;AAIG;QACM,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAwB,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAExF;;;;AAIG;QACM,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAwB,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAExF;;;;AAIG;QACM,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAwB,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;AAG/E,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK;4FAAU;AAE/B;;;;;;;;;AASG;QACM,IAAA,CAAA,WAAW,GAAG,KAAK,CAAS,IAAI,mFAAI,KAAK,EAAE,OAAO,EAAA,CAAG;QAErD,IAAA,CAAA,cAAc,GAAG,KAAK,CAAqB,SAAS,sFAAI,KAAK,EAAE,iBAAiB,EAAA,CAAG;QACnF,IAAA,CAAA,SAAS,GAAG,KAAK,CAAqB,SAAS,iFAAI,KAAK,EAAE,YAAY,EAAA,CAAG;;QAGzE,IAAA,CAAA,eAAe,GAAG,MAAM,EAA+B;;AAGvD,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE;yFAAC;;AAEvC,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;uFAAC;;;;QAMjE,IAAI,iBAAiB,GAAG,KAAK;QAC7B,MAAM,CAAC,MAAK;AACR,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;AAC5C,YAAA,IAAI,CAAC,iBAAiB,IAAI,cAAc,KAAK,SAAS,EAAE;gBACpD,iBAAiB,GAAG,IAAI;AACxB,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;AAChC,gBAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC;YACrC;AACJ,QAAA,CAAC,CAAC;IACN;;AAGA,IAAA,MAAM,CAAC,KAAa,EAAA;QAChB,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACtC;QACJ;QAEA,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE;AAC9B,QAAA,MAAM,OAAO,GAAG,KAAK,EAAE,aAAa,YAAY,WAAW,GAAG,KAAK,CAAC,aAAa,GAAG,SAAS;AAC7F,QAAA,MAAM,EAAE,YAAY,EAAE,GAAG,kCAAkC,CACvD,MAAM,EACN,KAAK,IAAI,IAAI,KAAK,CAAC,uBAAuB,CAAC,EAC3C,OAAO,CACV;AACD,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;AAC1D,QAAA,IAAI,YAAY,CAAC,UAAU,EAAE,EAAE;YAC3B;QACJ;AAEA,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC3B;8GAtGS,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,mkEA1BX,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FA0BjC,aAAa,EAAA,UAAA,EAAA,CAAA;kBA7BzB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,SAAS,EAAE,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC1C,oBAAA,cAAc,EAAE;AACZ,wBAAA;AACI,4BAAA,SAAS,EAAE,uBAAuB;AAClC,4BAAA,MAAM,EAAE,CAAC,gBAAgB,EAAE,UAAU;AACxC;AACJ,qBAAA;AACD,oBAAA,IAAI,EAAE;AACF,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,MAAM,EAAE,MAAM;AACd,wBAAA,qBAAqB,EAAE,gBAAgB;AACvC,wBAAA,sBAAsB,EAAE,iCAAiC;AACzD,wBAAA,sBAAsB,EAAE,iCAAiC;AACzD,wBAAA,qBAAqB,EAAE,iCAAiC;AACxD,wBAAA,uBAAuB,EAAE,iCAAiC;AAC1D,wBAAA,sBAAsB,EAAE,+BAA+B;AACvD,wBAAA,sBAAsB,EAAE,6BAA6B;AACrD,wBAAA,sBAAsB,EAAE,6BAA6B;;;AAGrD,wBAAA,iBAAiB,EAAE,+BAA+B;AAClD,wBAAA,SAAS,EAAE,gBAAgB;AAC3B,wBAAA,QAAQ,EAAE;AACb;AACJ,iBAAA;;;ACnED;;;;AAIG;MAYU,cAAc,CAAA;AAX3B,IAAA,WAAA,GAAA;QAYuB,IAAA,CAAA,WAAW,GAAG,mBAAmB,EAAE;AACzD,IAAA;8GAFY,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,mBAAA,EAAA,0CAAA,EAAA,qBAAA,EAAA,0CAAA,EAAA,oBAAA,EAAA,2CAAA,EAAA,oBAAA,EAAA,2CAAA,EAAA,oBAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAX1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,IAAI,EAAE;AACF,wBAAA,qBAAqB,EAAE,wCAAwC;AAC/D,wBAAA,uBAAuB,EAAE,wCAAwC;AACjE,wBAAA,sBAAsB,EAAE,yCAAyC;AACjE,wBAAA,sBAAsB,EAAE,yCAAyC;AACjE,wBAAA,sBAAsB,EAAE;AAC3B;AACJ,iBAAA;;;ACRM,MAAM,aAAa,GAAG,CAAC,aAAa,EAAE,cAAc,EAAE,cAAc;MAM9D,eAAe,CAAA;8GAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAAf,eAAe,EAAA,OAAA,EAAA,CANE,aAAa,EAAE,cAAc,EAAE,cAAc,CAAA,EAAA,OAAA,EAAA,CAA7C,aAAa,EAAE,cAAc,EAAE,cAAc,CAAA,EAAA,CAAA,CAAA;+GAM9D,eAAe,EAAA,CAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAJ3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE,CAAC,GAAG,aAAa,CAAC;AAC3B,oBAAA,OAAO,EAAE,CAAC,GAAG,aAAa;AAC7B,iBAAA;;;ACfD;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"radix-ng-primitives-switch.mjs","sources":["../../../packages/primitives/switch/src/switch-context.ts","../../../packages/primitives/switch/src/switch-input.ts","../../../packages/primitives/switch/src/switch-root.ts","../../../packages/primitives/switch/src/switch-thumb.ts","../../../packages/primitives/switch/index.ts","../../../packages/primitives/switch/radix-ng-primitives-switch.ts"],"sourcesContent":["import { Signal } from '@angular/core';\nimport { createContext } from '@radix-ng/primitives/core';\n\nexport interface RdxSwitchContext {\n /** Whether the switch is on. */\n readonly checked: Signal<boolean>;\n\n /** Whether the switch is disabled. */\n readonly disabled: Signal<boolean>;\n\n /** Whether the switch is read-only (focusable, but cannot be toggled). */\n readonly readonly: Signal<boolean>;\n\n /** Whether the switch must be on to submit the owning form. */\n readonly required: Signal<boolean>;\n\n /** Name of the hidden form input. */\n readonly name: Signal<string | undefined>;\n\n /** Value submitted with the form when the switch is on. */\n readonly value: Signal<string>;\n\n readonly ariaLabel: Signal<string | undefined>;\n readonly ariaLabelledBy: Signal<string | undefined>;\n\n markAsTouched(): void;\n}\n\nexport const [injectSwitchContext, provideSwitchContext] = createContext<RdxSwitchContext>(\n 'RdxSwitchContext',\n 'components/switch'\n);\n","import { Directive } from '@angular/core';\nimport { injectSwitchContext } from './switch-context';\n\n/**\n * The hidden native checkbox that mirrors the switch state for form submission and screen readers.\n *\n * @see https://base-ui.com/react/components/switch\n */\n@Directive({\n selector: 'input[rdxSwitchInput]',\n exportAs: 'rdxSwitchInput',\n host: {\n type: 'checkbox',\n tabindex: '-1',\n 'aria-hidden': 'true',\n '[attr.name]': 'rootContext.name()',\n '[attr.value]': 'rootContext.value()',\n '[checked]': 'rootContext.checked()',\n '[disabled]': 'rootContext.disabled()',\n '[attr.required]': 'rootContext.required() ? \"\" : undefined',\n '[attr.aria-label]': 'rootContext.ariaLabel()',\n '[attr.aria-labelledby]': 'rootContext.ariaLabelledBy()',\n // The hidden form input carries no `data-*` (Base UI parity) — state attributes live on the\n // root button and thumb.\n style: 'transform: translateX(-100%); position: absolute; overflow: hidden; pointer-events: none; opacity: 0; margin: 0;',\n '(blur)': 'rootContext.markAsTouched()'\n }\n})\nexport class RdxSwitchInput {\n protected readonly rootContext = injectSwitchContext();\n}\n","import { booleanAttribute, computed, Directive, effect, inject, input, model, output } from '@angular/core';\nimport {\n BooleanInput,\n createCancelableChangeEventDetails,\n injectControlValueAccessor,\n injectId,\n RdxCancelableChangeEventDetails,\n RdxControlValueAccessor,\n RdxFormCheckboxControl,\n RdxFormUiControlBase,\n RdxFormUiTouchTarget\n} from '@radix-ng/primitives/core';\nimport { provideSwitchContext, RdxSwitchContext } from './switch-context';\n\nexport type RdxSwitchCheckedChangeReason = 'none';\nexport type RdxSwitchCheckedChangeEventDetails = RdxCancelableChangeEventDetails<RdxSwitchCheckedChangeReason>;\n\nexport interface RdxSwitchCheckedChangeEvent {\n checked: boolean;\n eventDetails: RdxSwitchCheckedChangeEventDetails;\n}\n\nconst context = (): RdxSwitchContext => {\n const root = inject(RdxSwitchRoot);\n const cva = injectControlValueAccessor<boolean | undefined>();\n\n return {\n checked: root.checkedState,\n disabled: computed(() => !!cva.disabled()),\n readonly: root.readonly,\n required: root.required,\n name: root.name,\n value: root.submitValue,\n ariaLabel: root.ariaLabel,\n ariaLabelledBy: root.ariaLabelledBy,\n markAsTouched: () => root.markAsTouched()\n };\n};\n\n/**\n * A control that toggles between on and off.\n *\n * @see https://base-ui.com/react/components/switch\n */\n@Directive({\n selector: 'button[rdxSwitchRoot]',\n exportAs: 'rdxSwitchRoot',\n providers: [provideSwitchContext(context)],\n hostDirectives: [\n {\n directive: RdxControlValueAccessor,\n inputs: ['value: checked', 'disabled']\n }\n ],\n host: {\n role: 'switch',\n type: 'button',\n '[id]': 'id()',\n '[attr.aria-checked]': 'checkedState()',\n '[attr.aria-required]': 'required() ? \"true\" : undefined',\n '[attr.aria-readonly]': 'readonly() ? \"true\" : undefined',\n '[attr.aria-invalid]': 'displayValid() === false ? \"true\" : undefined',\n '[attr.data-checked]': 'checkedState() ? \"\" : undefined',\n '[attr.data-unchecked]': 'checkedState() ? undefined : \"\"',\n '[attr.data-disabled]': 'isDisabled() ? \"\" : undefined',\n '[attr.data-readonly]': 'readonly() ? \"\" : undefined',\n '[attr.data-required]': 'required() ? \"\" : undefined',\n '[attr.data-invalid]': 'displayValid() === false ? \"\" : undefined',\n '[attr.data-valid]': 'displayValid() === true ? \"\" : undefined',\n '[attr.data-touched]': 'touchedState() ? \"\" : undefined',\n '[attr.data-dirty]': 'dirtyState() ? \"\" : undefined',\n // Native `<button rdxSwitchRoot>` → native `disabled` (Base UI's `nativeButton: true` path in\n // `useFocusableWhenDisabled`). The hidden `[rdxSwitchInput]` is also disabled for form exclusion.\n '[attr.disabled]': 'isDisabled() ? \"\" : undefined',\n '(click)': 'toggle($event)',\n '(blur)': 'markAsTouched()'\n }\n})\nexport class RdxSwitchRoot extends RdxFormUiControlBase implements RdxFormCheckboxControl {\n /** @ignore */\n protected readonly cva = injectControlValueAccessor<boolean | undefined>();\n\n readonly id = input<string>(injectId('rdx-switch-'));\n\n /**\n * The state of the switch when it is initially rendered. Use when you do not need to control its state.\n *\n * @default false\n */\n readonly defaultChecked = input<boolean | undefined, BooleanInput | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value))\n });\n\n /**\n * The controlled checked state. Use with `(onCheckedChange)` or two-way `[(checked)]`.\n */\n readonly checked = model<boolean>(false);\n\n /**\n * When `true`, prevents the user from interacting with the switch.\n *\n * @default false\n */\n readonly disabled = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /**\n * When `true`, the switch is focusable but cannot be toggled.\n *\n * @default false\n */\n readonly readonly = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /**\n * When `true`, the switch must be on before the owning form can be submitted.\n *\n * @default false\n */\n readonly required = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /** Name of the hidden form input rendered by `[rdxSwitchInput]`. */\n readonly name = input<string>();\n\n /**\n * Value submitted with the form when the switch is on.\n *\n * Bound publicly as `[value]`; the TS member is named `submitValue` so the\n * directive can satisfy `RdxFormCheckboxControl`, whose contract reserves a\n * `value` member for `RdxFormValueControl` and forbids it on checkbox-style\n * controls.\n *\n * @default 'on'\n */\n readonly submitValue = input<string>('on', { alias: 'value' });\n\n readonly ariaLabelledBy = input<string | undefined>(undefined, { alias: 'aria-labelledby' });\n readonly ariaLabel = input<string | undefined>(undefined, { alias: 'aria-label' });\n\n /** Event handler called when the checked state of the switch changes. */\n readonly onCheckedChange = output<RdxSwitchCheckedChangeEvent>();\n\n /** @ignore */\n readonly checkedState = computed(() => !!this.cva.value());\n /** @ignore */\n protected readonly isDisabled = computed(() => !!this.cva.disabled());\n\n /** @ignore */\n readonly invalidState = this.formUi.invalidState;\n /** @ignore */\n readonly touchedState = this.formUi.touchedState;\n /** @ignore */\n readonly dirtyState = this.formUi.dirtyState;\n\n constructor() {\n super();\n\n // Apply the uncontrolled `defaultChecked` once. `input()` values are not bound at field-init,\n // so the on state must be seeded here — into both the `checked` model and the CVA value, which\n // is the source of truth for `checkedState`/`aria-checked`/`data-checked`.\n let hasAppliedDefault = false;\n effect(() => {\n const defaultChecked = this.defaultChecked();\n if (!hasAppliedDefault && defaultChecked !== undefined) {\n hasAppliedDefault = true;\n this.checked.set(defaultChecked);\n this.cva.setValue(defaultChecked);\n }\n });\n }\n\n /** @ignore Bridge the CVA into `markAsTouched` (dual). */\n protected override formUiTouchTarget(): RdxFormUiTouchTarget {\n return injectControlValueAccessor<boolean | undefined>();\n }\n\n /**\n * Mark the switch touched — CVA for Reactive forms, plus the `touched` model + `touch` output for\n * Signal Forms. Called on blur of the root button or the hidden input.\n */\n markAsTouched(): void {\n this.formUi.markAsTouched();\n }\n\n /** @ignore Toggles the checked state unless disabled or read-only. */\n toggle(event?: Event): void {\n if (this.isDisabled() || this.readonly()) {\n return;\n }\n\n const next = !this.cva.value();\n const trigger = event?.currentTarget instanceof HTMLElement ? event.currentTarget : undefined;\n const { eventDetails } = createCancelableChangeEventDetails(\n 'none',\n event ?? new Event('switch.checked-change'),\n trigger\n );\n this.onCheckedChange.emit({ checked: next, eventDetails });\n if (eventDetails.isCanceled()) {\n return;\n }\n\n this.checked.set(next);\n this.cva.setValue(next);\n this.formUi.markDirty();\n }\n}\n","import { Directive } from '@angular/core';\nimport { injectSwitchContext } from './switch-context';\n\n/**\n * The moving part of the switch that indicates whether it is on or off.\n *\n * @see https://base-ui.com/react/components/switch\n */\n@Directive({\n selector: 'span[rdxSwitchThumb]',\n exportAs: 'rdxSwitchThumb',\n host: {\n '[attr.data-checked]': 'rootContext.checked() ? \"\" : undefined',\n '[attr.data-unchecked]': 'rootContext.checked() ? undefined : \"\"',\n '[attr.data-disabled]': 'rootContext.disabled() ? \"\" : undefined',\n '[attr.data-readonly]': 'rootContext.readonly() ? \"\" : undefined',\n '[attr.data-required]': 'rootContext.required() ? \"\" : undefined'\n }\n})\nexport class RdxSwitchThumb {\n protected readonly rootContext = injectSwitchContext();\n}\n","import { NgModule } from '@angular/core';\nimport { RdxSwitchInput } from './src/switch-input';\nimport { RdxSwitchRoot } from './src/switch-root';\nimport { RdxSwitchThumb } from './src/switch-thumb';\n\nexport * from './src/switch-context';\nexport * from './src/switch-input';\nexport * from './src/switch-root';\nexport * from './src/switch-thumb';\n\nexport const switchImports = [RdxSwitchRoot, RdxSwitchInput, RdxSwitchThumb];\n\n@NgModule({\n imports: [...switchImports],\n exports: [...switchImports]\n})\nexport class RdxSwitchModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -154,13 +154,13 @@ class RdxTabsList {
|
|
|
154
154
|
}, /* @ts-ignore */
|
|
155
155
|
...(ngDevMode ? [{ debugName: "activeIndex" }] : /* istanbul ignore next */ []));
|
|
156
156
|
this.rootContext.setTabListElement(this.elementRef.nativeElement);
|
|
157
|
+
// Constants — set once (not reactive). Disabled tabs stay in the roving sequence (APG: arrow
|
|
158
|
+
// keys can focus a disabled tab), so the composite has no disabled indices and Home/End are on.
|
|
159
|
+
this.compositeRoot.setEnableHomeAndEndKeys(true);
|
|
160
|
+
this.compositeRoot.setDisabledIndices([]);
|
|
157
161
|
effect(() => {
|
|
158
162
|
this.compositeRoot.setOrientation(this.rootContext.orientation());
|
|
159
163
|
this.compositeRoot.setLoopFocus(this.loopFocus());
|
|
160
|
-
this.compositeRoot.setEnableHomeAndEndKeys(true);
|
|
161
|
-
});
|
|
162
|
-
effect(() => {
|
|
163
|
-
this.compositeRoot.setDisabledIndices([]);
|
|
164
164
|
});
|
|
165
165
|
effect(() => {
|
|
166
166
|
this.rootContext.setTabMap(this.tabMap());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"radix-ng-primitives-tabs.mjs","sources":["../../../packages/primitives/tabs/src/tabs-root-context.ts","../../../packages/primitives/tabs/src/utils.ts","../../../packages/primitives/tabs/src/tabs-indicator.ts","../../../packages/primitives/tabs/src/tabs-list.ts","../../../packages/primitives/tabs/src/tabs-panel.ts","../../../packages/primitives/tabs/src/tabs-panel-presence.ts","../../../packages/primitives/tabs/src/tabs-root.ts","../../../packages/primitives/tabs/src/tabs-tab.ts","../../../packages/primitives/tabs/index.ts","../../../packages/primitives/tabs/radix-ng-primitives-tabs.ts"],"sourcesContent":["import { Signal } from '@angular/core';\nimport { RdxCompositeMetadata } from '@radix-ng/primitives/composite';\nimport { createContext, DataOrientation } from '@radix-ng/primitives/core';\nimport type { RdxTabsValueChangeReason } from './tabs-root';\nimport { RdxTabsActivationDirection, RdxTabsTabMetadata, RdxTabsValue } from './utils';\n\nexport interface RdxTabsRootContext {\n /** Stable id used to derive tab / panel ids. */\n readonly baseId: string;\n\n /** The value of the currently selected tab. */\n readonly value: Signal<RdxTabsValue | undefined>;\n\n /** The orientation of the tabs. */\n readonly orientation: Signal<DataOrientation>;\n\n /** Direction the selection moved relative to the previously active tab. */\n readonly activationDirection: Signal<RdxTabsActivationDirection>;\n\n /** Whether tabs are activated on focus (set by the list). */\n readonly activateOnFocus: Signal<boolean>;\n\n /** The `[rdxTabsList]` host element, used to resolve tab order and indicator geometry. */\n readonly tabListElement: Signal<HTMLElement | null>;\n\n /** Registered tabs in DOM order. */\n readonly tabMap: Signal<Map<HTMLElement, RdxCompositeMetadata<RdxTabsTabMetadata>>>;\n\n /** Select a tab by value. No-op when the value is unchanged. */\n setValue(value: RdxTabsValue, event?: Event, reason?: RdxTabsValueChangeReason): void;\n\n /** Mirror the list's `activateOnFocus` input onto the root context. */\n setActivateOnFocus(value: boolean): void;\n\n /** Register the list host element. */\n setTabListElement(element: HTMLElement | null): void;\n\n /** Register the tab composite map. */\n setTabMap(map: Map<HTMLElement, RdxCompositeMetadata<RdxTabsTabMetadata>>): void;\n}\n\nexport const [injectTabsRootContext, provideTabsRootContext] = createContext<RdxTabsRootContext>(\n 'RdxTabsRootContext',\n 'components/tabs'\n);\n","/**\n * The direction in which the active tab moved relative to the previously active tab.\n * Mirrors Base UI's `Tabs.Tab.ActivationDirection`.\n */\nexport type RdxTabsActivationDirection = 'left' | 'right' | 'up' | 'down' | 'none';\n\n/** A value that identifies a tab / panel pair. */\nexport type RdxTabsValue = string | number | null;\n\n/** Metadata registered for each tab in the composite list. */\nexport interface RdxTabsTabMetadata {\n [key: string]: unknown;\n disabled: boolean;\n id: string;\n value: RdxTabsValue;\n}\n\n/** Metadata registered for each panel in the composite list. */\nexport interface RdxTabsPanelMetadata {\n [key: string]: unknown;\n id: string;\n value: RdxTabsValue;\n}\n\nexport function makeTabId(baseId: string, value: RdxTabsValue): string {\n return `${baseId}-tab-${value}`;\n}\n\nexport function makePanelId(baseId: string, value: RdxTabsValue): string {\n return `${baseId}-panel-${value}`;\n}\n","import { afterNextRender, DestroyRef, Directive, effect, inject, signal, untracked } from '@angular/core';\nimport { injectTabsRootContext } from './tabs-root-context';\nimport { makeTabId } from './utils';\n\ninterface TabGeometry {\n top: number;\n right: number;\n bottom: number;\n left: number;\n width: number;\n height: number;\n}\n\n/**\n * A visual element that tracks the position and size of the active tab. Exposes the active tab\n * geometry as CSS variables (`--active-tab-{top,right,bottom,left,width,height}`) so it can be\n * animated with CSS.\n *\n * @see https://base-ui.com/react/components/tabs\n */\n@Directive({\n selector: '[rdxTabsIndicator]',\n exportAs: 'rdxTabsIndicator',\n host: {\n '[attr.data-orientation]': 'rootContext.orientation()',\n '[attr.data-activation-direction]': 'rootContext.activationDirection()',\n '[style.--active-tab-top.px]': 'geometry()?.top',\n '[style.--active-tab-right.px]': 'geometry()?.right',\n '[style.--active-tab-bottom.px]': 'geometry()?.bottom',\n '[style.--active-tab-left.px]': 'geometry()?.left',\n '[style.--active-tab-width.px]': 'geometry()?.width',\n '[style.--active-tab-height.px]': 'geometry()?.height'\n }\n})\nexport class RdxTabsIndicator {\n protected readonly rootContext = injectTabsRootContext();\n private readonly destroyRef = inject(DestroyRef);\n\n /** @ignore */\n protected readonly geometry = signal<TabGeometry | null>(null);\n\n constructor() {\n // Re-measure whenever the selection, orientation or the list element changes.\n effect(() => {\n this.rootContext.value();\n this.rootContext.orientation();\n this.rootContext.tabListElement();\n this.scheduleMeasure();\n });\n\n afterNextRender(() => {\n const list = untracked(this.rootContext.tabListElement);\n if (!list || typeof ResizeObserver === 'undefined') {\n this.measure();\n return;\n }\n\n const observer = new ResizeObserver(() => this.measure());\n observer.observe(list);\n this.destroyRef.onDestroy(() => observer.disconnect());\n this.measure();\n });\n }\n\n private scheduleMeasure(): void {\n if (typeof requestAnimationFrame === 'undefined') {\n this.measure();\n return;\n }\n requestAnimationFrame(() => this.measure());\n }\n\n private measure(): void {\n const list = untracked(this.rootContext.tabListElement);\n const value = untracked(this.rootContext.value);\n\n if (!list || value == null || typeof document === 'undefined') {\n this.geometry.set(null);\n return;\n }\n\n const tab = document.getElementById(makeTabId(this.rootContext.baseId, value));\n if (!tab) {\n this.geometry.set(null);\n return;\n }\n\n const listRect = list.getBoundingClientRect();\n const tabRect = tab.getBoundingClientRect();\n\n // Measure `left` / `top` relative to the list's scrollable content origin rather than its\n // visible edge. When the list is a scroll container (e.g. its tabs overflow inside a Scroll\n // Area), the indicator is an absolutely positioned child of that container and scrolls along\n // with the content, so these offsets must be content-relative to stay aligned with the tab.\n // For non-scrolling lists `scrollLeft` / `scrollTop` are `0`, leaving the geometry unchanged.\n // `right` / `bottom` stay visible-edge relative — there is no unambiguous content-relative\n // meaning for them inside a scroll container, and the moving indicator uses `left`/`top`.\n const scrollLeft = list.scrollLeft;\n const scrollTop = list.scrollTop;\n\n this.geometry.set({\n top: tabRect.top - listRect.top + scrollTop,\n right: listRect.right - tabRect.right,\n bottom: listRect.bottom - tabRect.bottom,\n left: tabRect.left - listRect.left + scrollLeft,\n width: tabRect.width,\n height: tabRect.height\n });\n }\n}\n","import { booleanAttribute, computed, Directive, effect, ElementRef, inject, input } from '@angular/core';\nimport { RdxCompositeMetadata, RdxCompositeRoot } from '@radix-ng/primitives/composite';\nimport { injectTabsRootContext } from './tabs-root-context';\nimport { RdxTabsTabMetadata } from './utils';\n\n/**\n * Groups the individual tab buttons and manages keyboard navigation.\n *\n * @see https://base-ui.com/react/components/tabs\n */\n@Directive({\n selector: '[rdxTabsList]',\n exportAs: 'rdxTabsList',\n hostDirectives: [RdxCompositeRoot],\n host: {\n role: 'tablist',\n '[attr.aria-orientation]': 'rootContext.orientation() === \"vertical\" ? \"vertical\" : undefined',\n '[attr.data-orientation]': 'rootContext.orientation()',\n '[attr.data-activation-direction]': 'rootContext.activationDirection()'\n }\n})\nexport class RdxTabsList {\n protected readonly rootContext = injectTabsRootContext();\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly compositeRoot = inject(RdxCompositeRoot, { self: true });\n\n /**\n * Whether a tab is activated when it receives focus (automatic activation).\n * When `false`, tabs are only activated on click or Enter/Space.\n *\n * @default false\n */\n readonly activateOnFocus = input(false, { transform: booleanAttribute });\n\n /**\n * Whether keyboard navigation should loop from the last tab back to the first.\n *\n * @default true\n */\n readonly loopFocus = input(true, { transform: booleanAttribute });\n\n private readonly tabMap = computed(() => {\n const map = new Map<HTMLElement, RdxCompositeMetadata<RdxTabsTabMetadata>>();\n\n this.compositeRoot.itemMap().forEach((metadata, element) => {\n if (isTabsTabMetadata(metadata)) {\n map.set(element, metadata);\n }\n });\n\n return map;\n });\n\n private readonly tabMetadata = computed(() => Array.from(this.tabMap().values()));\n\n private readonly disabledIndices = computed(() =>\n this.tabMetadata()\n .filter((metadata) => metadata.disabled)\n .map((metadata) => metadata.index)\n );\n\n private readonly activeIndex = computed(() => {\n const value = this.rootContext.value();\n const metadata = this.tabMetadata().find((tab) => tab.value === value);\n\n return metadata?.index ?? -1;\n });\n\n constructor() {\n this.rootContext.setTabListElement(this.elementRef.nativeElement);\n\n effect(() => {\n this.compositeRoot.setOrientation(this.rootContext.orientation());\n this.compositeRoot.setLoopFocus(this.loopFocus());\n this.compositeRoot.setEnableHomeAndEndKeys(true);\n });\n\n effect(() => {\n this.compositeRoot.setDisabledIndices([]);\n });\n\n effect(() => {\n this.rootContext.setTabMap(this.tabMap());\n });\n\n effect(() => {\n const activeIndex = this.activeIndex();\n\n if (activeIndex === -1) {\n return;\n }\n\n const list = this.elementRef.nativeElement;\n const activeElement = list.ownerDocument.activeElement;\n\n if (activeElement && list.contains(activeElement)) {\n return;\n }\n\n if (this.disabledIndices().includes(activeIndex)) {\n const firstEnabledIndex = this.tabMetadata().find((metadata) => !metadata.disabled)?.index;\n\n if (firstEnabledIndex !== undefined) {\n this.compositeRoot.setHighlightedIndex(firstEnabledIndex);\n }\n return;\n }\n\n this.compositeRoot.setHighlightedIndex(activeIndex);\n });\n\n effect(() => this.rootContext.setActivateOnFocus(this.activateOnFocus()));\n }\n}\n\nfunction isTabsTabMetadata(metadata: RdxCompositeMetadata): metadata is RdxCompositeMetadata<RdxTabsTabMetadata> {\n return (\n typeof metadata['disabled'] === 'boolean' &&\n typeof metadata['id'] === 'string' &&\n Object.prototype.hasOwnProperty.call(metadata, 'value')\n );\n}\n","import {\n booleanAttribute,\n computed,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n signal,\n untracked\n} from '@angular/core';\nimport { RdxCompositeListItem } from '@radix-ng/primitives/composite';\nimport { useTransitionStatus } from '@radix-ng/primitives/core';\nimport { provideRdxPresenceContext } from '@radix-ng/primitives/presence';\nimport { injectTabsRootContext } from './tabs-root-context';\nimport { makePanelId, makeTabId, RdxTabsValue } from './utils';\n\nconst panelPresenceContext = () => ({ present: inject(RdxTabsPanel).present });\n\n/**\n * A panel displayed when its corresponding tab is active.\n *\n * By default the panel stays in the DOM and is toggled with the `hidden` attribute. To unmount the\n * contents while inactive (Base UI's default `keepMounted: false`), nest a `*rdxTabsPanelPresence`\n * structural directive inside it; set `keepMounted` to keep the contents mounted regardless.\n *\n * @see https://base-ui.com/react/components/tabs\n */\n@Directive({\n selector: '[rdxTabsPanel]',\n exportAs: 'rdxTabsPanel',\n providers: [provideRdxPresenceContext(panelPresenceContext)],\n hostDirectives: [RdxCompositeListItem],\n host: {\n role: 'tabpanel',\n '[attr.id]': 'panelId()',\n '[attr.tabindex]': 'active() ? 0 : -1',\n '[attr.aria-labelledby]': 'tabId()',\n '[attr.data-orientation]': 'rootContext.orientation()',\n '[attr.data-activation-direction]': 'rootContext.activationDirection()',\n '[attr.data-index]': 'index()',\n '[attr.data-hidden]': 'active() ? undefined : \"\"',\n '[attr.data-starting-style]': 'transitionStatus() === \"starting\" ? \"\" : undefined',\n '[attr.data-ending-style]': 'transitionStatus() === \"ending\" ? \"\" : undefined',\n '[hidden]': 'hidden()'\n }\n})\nexport class RdxTabsPanel {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly listItem = inject(RdxCompositeListItem, { self: true });\n protected readonly rootContext = injectTabsRootContext();\n\n /**\n * A unique value that associates the panel with a tab.\n */\n readonly value = input.required<RdxTabsValue>();\n\n /**\n * Keep the panel contents mounted in the DOM while inactive (the contents are still hidden).\n * Only relevant together with `*rdxTabsPanelPresence`, which otherwise unmounts them.\n *\n * @default false\n */\n readonly keepMounted = input(false, { transform: booleanAttribute });\n\n private readonly transition = useTransitionStatus(() => {});\n\n /** Reactive enter/exit transition phase (`'starting'` | `'ending'` | `undefined`). */\n readonly transitionStatus = this.transition.status;\n\n /** @ignore */\n protected readonly panelId = computed(() => makePanelId(this.rootContext.baseId, this.value()));\n /** @ignore */\n protected readonly tabId = computed(() => {\n const value = this.value();\n\n for (const tabMetadata of this.rootContext.tabMap().values()) {\n if (tabMetadata.value === value) {\n return tabMetadata.id;\n }\n }\n\n return makeTabId(this.rootContext.baseId, value);\n });\n\n /** Whether this panel's tab is currently selected. */\n readonly active = computed(() => this.rootContext.value() === this.value());\n\n /** `true` once a `*rdxTabsPanelPresence` child takes over mounting. */\n private readonly hasPresence = signal(false);\n\n /**\n * Whether the contents should be present for `*rdxTabsPanelPresence`. Flips with `active` so the\n * presence directive owns the exit-animation timing (it keeps the node mounted until its exit\n * `@keyframes` finishes); `keepMounted` keeps them mounted regardless.\n */\n readonly present = computed(() => this.keepMounted() || this.active());\n\n /**\n * The `hidden` attribute value. The panel is shown while active or while its exit transition\n * runs. When a presence child unmounts the contents we no longer force `hidden` (the empty\n * element renders nothing), unless `keepMounted` keeps the inactive contents around.\n */\n protected readonly hidden = computed(\n () => !this.active() && this.transitionStatus() !== 'ending' && (!this.hasPresence() || this.keepMounted())\n );\n\n /** @ignore Index of the panel in DOM order. */\n protected readonly index = this.listItem.index;\n\n private previousActive = false;\n private isFirstRun = true;\n\n constructor() {\n const unregister = this.transition.registerElement(this.elementRef.nativeElement);\n inject(DestroyRef).onDestroy(unregister);\n\n effect(() => {\n this.listItem.setMetadata({\n id: this.panelId(),\n value: this.value()\n });\n });\n\n effect(() => {\n const active = this.active();\n\n // Settle the initial state without playing an enter transition.\n if (this.isFirstRun) {\n this.isFirstRun = false;\n this.previousActive = active;\n return;\n }\n\n if (active !== this.previousActive) {\n this.previousActive = active;\n untracked(() => this.transition.start(active));\n }\n });\n }\n\n /** @ignore Called by `RdxTabsPanelPresence` so the panel stops forcing `hidden`. */\n markHasPresence(): void {\n this.hasPresence.set(true);\n }\n}\n","import { Directive, inject } from '@angular/core';\nimport { RdxPresenceDirective } from '@radix-ng/primitives/presence';\nimport { RdxTabsPanel } from './tabs-panel';\n\n/**\n * Structural directive that mounts the tab panel contents only while the panel is active,\n * unmounting them once the exit animation finishes. Apply it inside an `[rdxTabsPanel]` to get\n * Base UI's default unmounting behavior; combine with `keepMounted` on the panel to keep the\n * contents mounted instead.\n *\n * The presence state is read from the parent panel through {@link RdxPresenceDirective}.\n */\n@Directive({\n selector: 'ng-template[rdxTabsPanelPresence]',\n hostDirectives: [RdxPresenceDirective]\n})\nexport class RdxTabsPanelPresence {\n constructor() {\n inject(RdxTabsPanel).markHasPresence();\n }\n}\n","import { Directive, effect, inject, input, model, output, signal, untracked } from '@angular/core';\nimport { RdxCompositeList, RdxCompositeMetadata } from '@radix-ng/primitives/composite';\nimport {\n createCancelableChangeEventDetails,\n DataOrientation,\n injectId,\n RdxCancelableChangeEventDetails\n} from '@radix-ng/primitives/core';\nimport { provideTabsRootContext, RdxTabsRootContext } from './tabs-root-context';\nimport { RdxTabsActivationDirection, RdxTabsTabMetadata, RdxTabsValue } from './utils';\n\nexport type RdxTabsValueChangeReason = 'none' | 'disabled' | 'missing' | 'initial';\nexport type RdxTabsValueChangeEventDetails = RdxCancelableChangeEventDetails<RdxTabsValueChangeReason> & {\n activationDirection: RdxTabsActivationDirection;\n};\n\nexport interface RdxTabsValueChangeEvent {\n value: RdxTabsValue;\n eventDetails: RdxTabsValueChangeEventDetails;\n}\n\nconst rootContext = (): RdxTabsRootContext => {\n const root = inject(RdxTabsRoot);\n\n return {\n baseId: root.baseId,\n value: root.value,\n orientation: root.orientation,\n activationDirection: root.activationDirection.asReadonly(),\n activateOnFocus: root.activateOnFocus.asReadonly(),\n tabListElement: root.tabListElement.asReadonly(),\n tabMap: root.tabMap.asReadonly(),\n setValue: (value, event, reason) => root.setValue(value, event, reason as RdxTabsValueChangeReason | undefined),\n setActivateOnFocus: (value) => root.activateOnFocus.set(value),\n setTabListElement: (element) => root.tabListElement.set(element),\n setTabMap: (map) => root.tabMap.set(map)\n };\n};\n\n/**\n * Groups the tabs and the corresponding panels.\n *\n * @see https://base-ui.com/react/components/tabs\n */\n@Directive({\n selector: '[rdxTabsRoot]',\n exportAs: 'rdxTabsRoot',\n providers: [provideTabsRootContext(rootContext)],\n hostDirectives: [RdxCompositeList],\n host: {\n '[attr.data-orientation]': 'orientation()',\n '[attr.data-activation-direction]': 'activationDirection()'\n }\n})\nexport class RdxTabsRoot {\n /** @ignore */\n readonly baseId = injectId('rdx-tabs-');\n\n /**\n * The value of the currently selected tab. Use together with `(onValueChange)` for controlled state.\n */\n readonly value = model<RdxTabsValue | undefined>();\n\n /**\n * The value of the tab that should be initially selected when uncontrolled.\n * When omitted, Base UI parity uses `0` as the implicit default and falls back to the first enabled tab.\n *\n * @default 0\n */\n readonly defaultValue = input<RdxTabsValue | undefined>(undefined);\n\n /**\n * The orientation the tabs are laid out. Controls arrow-key navigation\n * (left/right vs. up/down).\n *\n * @default 'horizontal'\n */\n readonly orientation = input<DataOrientation>('horizontal');\n\n /**\n * Event emitted when the selected tab changes.\n *\n * `eventDetails.reason` is `'none'` for user-initiated changes, `'initial'` for the first automatic\n * uncontrolled selection, `'disabled'` when an uncontrolled selection falls back from a disabled tab,\n * and `'missing'` when it falls back from a removed tab. Automatic changes are not cancelable.\n */\n readonly onValueChange = output<RdxTabsValueChangeEvent>();\n\n /** @ignore Set by `[rdxTabsList]`. */\n readonly activateOnFocus = signal(false);\n\n /** @ignore Set by `[rdxTabsList]`. */\n readonly tabListElement = signal<HTMLElement | null>(null);\n\n /** @ignore Set by `[rdxTabsList]`. */\n readonly tabMap = signal(new Map<HTMLElement, RdxCompositeMetadata<RdxTabsTabMetadata>>());\n\n /** @ignore */\n readonly activationDirection = signal<RdxTabsActivationDirection>('none');\n\n private readonly externallyControlled = signal(false);\n private hasObservedValue = false;\n private previousObservedValue: RdxTabsValue | undefined;\n private internalValueCommit = false;\n private hasAppliedDefaultValue = false;\n private initialDefaultValue: RdxTabsValue | undefined;\n private shouldNotifyInitialValueChange = true;\n private shouldHonorDisabledDefaultValue = false;\n private didRegisterTabs = false;\n private lastKnownTabElement: HTMLElement | undefined;\n\n constructor() {\n effect(() => {\n const currentValue = this.value();\n\n if (this.internalValueCommit) {\n this.internalValueCommit = false;\n this.hasObservedValue = true;\n this.previousObservedValue = currentValue;\n return;\n }\n\n if (!this.hasObservedValue) {\n this.hasObservedValue = true;\n this.previousObservedValue = currentValue;\n if (currentValue !== undefined) {\n this.externallyControlled.set(true);\n }\n return;\n }\n\n if (currentValue !== this.previousObservedValue) {\n this.externallyControlled.set(true);\n this.previousObservedValue = currentValue;\n }\n });\n\n effect(() => {\n if (this.hasAppliedDefaultValue || untracked(this.value) !== undefined) {\n return;\n }\n\n const defaultValue = this.defaultValue();\n const hasExplicitDefaultValue = defaultValue !== undefined;\n this.hasAppliedDefaultValue = true;\n this.initialDefaultValue = defaultValue ?? 0;\n this.shouldNotifyInitialValueChange = !hasExplicitDefaultValue;\n this.shouldHonorDisabledDefaultValue = hasExplicitDefaultValue;\n untracked(() => this.commitValue(this.initialDefaultValue!));\n });\n\n effect(() => {\n const tabMap = this.tabMap();\n const value = this.value();\n\n if (this.externallyControlled()) {\n return;\n }\n\n if (tabMap.size === 0) {\n if (this.didRegisterTabs && value !== null && !this.lastKnownTabElement?.isConnected) {\n untracked(() => this.commitAutomaticValueChange(null, 'missing'));\n }\n return;\n }\n\n this.didRegisterTabs = true;\n this.lastKnownTabElement = tabMap.keys().next().value;\n\n const selectedTabMetadata = getTabMetadataByValue(tabMap, value);\n const firstEnabledTabValue = getFirstEnabledTabValue(tabMap);\n const selectionIsDisabled = selectedTabMetadata?.disabled;\n const selectionIsMissing = selectedTabMetadata == null && value !== null;\n\n if (!selectionIsDisabled && value === this.initialDefaultValue) {\n this.shouldHonorDisabledDefaultValue = false;\n }\n\n if (this.shouldHonorDisabledDefaultValue && selectionIsDisabled && value === this.initialDefaultValue) {\n return;\n }\n\n const shouldNotifyInitialValueChange = this.shouldNotifyInitialValueChange;\n\n if (selectionIsDisabled || selectionIsMissing) {\n const fallbackValue = firstEnabledTabValue ?? null;\n\n if (value === fallbackValue) {\n this.shouldNotifyInitialValueChange = false;\n return;\n }\n\n let fallbackReason: RdxTabsValueChangeReason = 'missing';\n if (shouldNotifyInitialValueChange) {\n fallbackReason = 'initial';\n } else if (selectionIsDisabled) {\n fallbackReason = 'disabled';\n }\n\n untracked(() => this.commitAutomaticValueChange(fallbackValue, fallbackReason));\n return;\n }\n\n if (shouldNotifyInitialValueChange && selectedTabMetadata != null) {\n untracked(() => this.notifyAutomaticValueChange(value, 'initial'));\n this.shouldNotifyInitialValueChange = false;\n }\n });\n }\n\n /** @ignore */\n setValue(value: RdxTabsValue, event?: Event, reason: RdxTabsValueChangeReason = 'none'): void {\n const previous = this.value();\n if (previous === value) {\n return;\n }\n\n const trigger = event?.currentTarget instanceof HTMLElement ? event.currentTarget : undefined;\n const { eventDetails: baseEventDetails } = createCancelableChangeEventDetails(\n reason,\n event ?? new Event('tabs.value-change'),\n trigger\n );\n const eventDetails = baseEventDetails as RdxTabsValueChangeEventDetails;\n const activationDirection = computeActivationDirection(previous, value, this.orientation(), this.tabMap());\n eventDetails.activationDirection = activationDirection;\n\n this.onValueChange.emit({ value, eventDetails });\n if (eventDetails.isCanceled()) {\n return;\n }\n\n this.activationDirection.set(activationDirection);\n this.commitValue(value);\n }\n\n private commitValue(value: RdxTabsValue): void {\n this.internalValueCommit = true;\n this.value.set(value);\n }\n\n private commitAutomaticValueChange(value: RdxTabsValue, reason: RdxTabsValueChangeReason): void {\n this.activationDirection.set('none');\n this.commitValue(value);\n this.notifyAutomaticValueChange(value, reason);\n this.shouldNotifyInitialValueChange = false;\n }\n\n private notifyAutomaticValueChange(value: RdxTabsValue | undefined, reason: RdxTabsValueChangeReason): void {\n if (value === undefined) {\n return;\n }\n\n const { eventDetails: baseEventDetails } = createCancelableChangeEventDetails(\n reason,\n new Event('tabs.value-change')\n );\n const eventDetails = baseEventDetails as RdxTabsValueChangeEventDetails;\n eventDetails.activationDirection = 'none';\n this.onValueChange.emit({ value, eventDetails });\n }\n}\n\nfunction getTabMetadataByValue(\n tabMap: Map<HTMLElement, RdxCompositeMetadata<RdxTabsTabMetadata>>,\n value: RdxTabsValue | undefined\n): RdxCompositeMetadata<RdxTabsTabMetadata> | undefined {\n for (const tabMetadata of tabMap.values()) {\n if (tabMetadata.value === value) {\n return tabMetadata;\n }\n }\n\n return undefined;\n}\n\nfunction getFirstEnabledTabValue(\n tabMap: Map<HTMLElement, RdxCompositeMetadata<RdxTabsTabMetadata>>\n): RdxTabsValue | undefined {\n for (const tabMetadata of tabMap.values()) {\n if (!tabMetadata.disabled) {\n return tabMetadata.value;\n }\n }\n\n return undefined;\n}\n\nfunction computeActivationDirection(\n previous: RdxTabsValue | undefined,\n next: RdxTabsValue,\n orientation: DataOrientation,\n tabMap: Map<HTMLElement, RdxCompositeMetadata<RdxTabsTabMetadata>>\n): RdxTabsActivationDirection {\n if (previous == null || next == null) {\n return 'none';\n }\n\n let previousTab: HTMLElement | null = null;\n let nextTab: HTMLElement | null = null;\n let previousIndex = -1;\n let nextIndex = -1;\n\n for (const [tabElement, tabMetadata] of tabMap.entries()) {\n if (tabMetadata.value === previous) {\n previousTab = tabElement;\n previousIndex = tabMetadata.index;\n }\n if (tabMetadata.value === next) {\n nextTab = tabElement;\n nextIndex = tabMetadata.index;\n }\n if (previousTab && nextTab) {\n break;\n }\n }\n\n if (!previousTab || !nextTab || previousIndex === nextIndex) {\n return inferActivationDirectionFromValues(previous, next, orientation);\n }\n\n const previousRect = previousTab.getBoundingClientRect();\n const nextRect = nextTab.getBoundingClientRect();\n\n if (orientation === 'horizontal') {\n if (nextRect.left < previousRect.left) {\n return 'left';\n }\n if (nextRect.left > previousRect.left) {\n return 'right';\n }\n return nextIndex > previousIndex ? 'right' : 'left';\n }\n\n if (nextRect.top < previousRect.top) {\n return 'up';\n }\n if (nextRect.top > previousRect.top) {\n return 'down';\n }\n return nextIndex > previousIndex ? 'down' : 'up';\n}\n\nfunction inferActivationDirectionFromValues(\n previous: RdxTabsValue,\n next: RdxTabsValue,\n orientation: DataOrientation\n): RdxTabsActivationDirection {\n if (previous !== next && typeof previous === 'number' && typeof next === 'number') {\n if (orientation === 'horizontal') {\n return next > previous ? 'right' : 'left';\n }\n\n return next > previous ? 'down' : 'up';\n }\n\n if (previous !== next && typeof previous === 'string' && typeof next === 'string') {\n if (orientation === 'horizontal') {\n return next > previous ? 'right' : 'left';\n }\n\n return next > previous ? 'down' : 'up';\n }\n\n return 'none';\n}\n","import { booleanAttribute, computed, Directive, effect, inject, input } from '@angular/core';\nimport { RdxCompositeItem } from '@radix-ng/primitives/composite';\nimport { BooleanInput } from '@radix-ng/primitives/core';\nimport { injectTabsRootContext } from './tabs-root-context';\nimport { makePanelId, makeTabId, RdxTabsValue } from './utils';\n\n/**\n * An individual interactive tab button that activates its corresponding panel.\n *\n * @see https://base-ui.com/react/components/tabs\n */\n@Directive({\n selector: '[rdxTabsTab]',\n exportAs: 'rdxTabsTab',\n hostDirectives: [RdxCompositeItem],\n host: {\n '[attr.type]': 'nativeButton() ? \"button\" : undefined',\n role: 'tab',\n '[attr.id]': 'tabId()',\n '[attr.aria-selected]': 'active()',\n '[attr.aria-controls]': 'panelId()',\n '[attr.aria-disabled]': 'disabled() ? \"true\" : undefined',\n '[attr.disabled]': 'null',\n '[attr.data-composite-item-active]': 'active() ? \"\" : undefined',\n '[attr.data-orientation]': 'rootContext.orientation()',\n '[attr.data-activation-direction]': 'rootContext.activationDirection()',\n '[attr.data-active]': 'active() ? \"\" : undefined',\n '[attr.data-disabled]': 'disabled() ? \"\" : undefined',\n '(click)': 'onClick($event)',\n '(keydown)': 'onKeyDown($event)',\n '(pointerdown)': 'onPointerDown($event)',\n '(focus)': 'onFocus($event)'\n }\n})\nexport class RdxTabsTab {\n protected readonly rootContext = injectTabsRootContext();\n private readonly compositeItem = inject(RdxCompositeItem, { self: true });\n\n /**\n * A unique value that associates the tab with a panel.\n */\n readonly value = input.required<RdxTabsValue>();\n\n /**\n * When `true`, prevents the user from interacting with the tab.\n * Disabled tabs remain focusable during composite keyboard navigation, matching Base UI.\n */\n readonly disabled = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /**\n * Whether the host element is a native button. When `true`, `type=\"button\"` is applied.\n *\n * @default true\n */\n readonly nativeButton = input<boolean, BooleanInput>(true, { transform: booleanAttribute });\n\n /**\n * Optional id for the tab element. When omitted, an id is derived from the root id and tab value.\n */\n readonly id = input<string | undefined>(undefined);\n\n /** @ignore */\n protected readonly tabId = computed(() => this.id() ?? makeTabId(this.rootContext.baseId, this.value()));\n /** @ignore */\n protected readonly panelId = computed(() => makePanelId(this.rootContext.baseId, this.value()));\n\n /** @ignore */\n protected readonly active = computed(() => this.rootContext.value() === this.value());\n\n private isPressing = false;\n private isMainButton = false;\n\n constructor() {\n effect(() => {\n this.compositeItem.setMetadata({\n disabled: this.disabled(),\n id: this.tabId(),\n value: this.value()\n });\n });\n }\n\n /** @ignore */\n protected onClick(event: MouseEvent): void {\n if (this.active() || this.disabled()) {\n return;\n }\n\n this.rootContext.setValue(this.value(), event, 'none');\n }\n\n /** @ignore */\n protected onKeyDown(event: KeyboardEvent): void {\n if (!this.disabled() && (event.key === ' ' || event.key === 'Enter')) {\n this.rootContext.setValue(this.value(), event, 'none');\n }\n }\n\n /** @ignore */\n protected onPointerDown(event: PointerEvent): void {\n if (this.active() || this.disabled()) {\n return;\n }\n\n this.isPressing = true;\n this.isMainButton = event.button === 0;\n\n const ownerDocument = event.currentTarget instanceof HTMLElement ? event.currentTarget.ownerDocument : document;\n ownerDocument.addEventListener(\n 'pointerup',\n () => {\n this.isPressing = false;\n this.isMainButton = false;\n },\n { once: true }\n );\n ownerDocument.addEventListener(\n 'pointercancel',\n () => {\n this.isPressing = false;\n this.isMainButton = false;\n },\n { once: true }\n );\n ownerDocument.addEventListener(\n 'blur',\n () => {\n this.isPressing = false;\n this.isMainButton = false;\n },\n { once: true }\n );\n }\n\n /** @ignore */\n protected onFocus(event: FocusEvent): void {\n if (this.active() || this.disabled()) {\n return;\n }\n\n if (this.rootContext.activateOnFocus() && (!this.isPressing || this.isMainButton)) {\n this.rootContext.setValue(this.value(), event, 'none');\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { RdxTabsIndicator } from './src/tabs-indicator';\nimport { RdxTabsList } from './src/tabs-list';\nimport { RdxTabsPanel } from './src/tabs-panel';\nimport { RdxTabsPanelPresence } from './src/tabs-panel-presence';\nimport { RdxTabsRoot } from './src/tabs-root';\nimport { RdxTabsTab } from './src/tabs-tab';\n\nexport * from './src/tabs-indicator';\nexport * from './src/tabs-list';\nexport * from './src/tabs-panel';\nexport * from './src/tabs-panel-presence';\nexport * from './src/tabs-root';\nexport * from './src/tabs-root-context';\nexport * from './src/tabs-tab';\nexport type { RdxTabsActivationDirection, RdxTabsValue } from './src/utils';\n\nexport const tabsImports = [RdxTabsRoot, RdxTabsList, RdxTabsTab, RdxTabsPanel, RdxTabsPanelPresence, RdxTabsIndicator];\n\n@NgModule({\n imports: [...tabsImports],\n exports: [...tabsImports]\n})\nexport class RdxTabsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"radix-ng-primitives-tabs.mjs","sources":["../../../packages/primitives/tabs/src/tabs-root-context.ts","../../../packages/primitives/tabs/src/utils.ts","../../../packages/primitives/tabs/src/tabs-indicator.ts","../../../packages/primitives/tabs/src/tabs-list.ts","../../../packages/primitives/tabs/src/tabs-panel.ts","../../../packages/primitives/tabs/src/tabs-panel-presence.ts","../../../packages/primitives/tabs/src/tabs-root.ts","../../../packages/primitives/tabs/src/tabs-tab.ts","../../../packages/primitives/tabs/index.ts","../../../packages/primitives/tabs/radix-ng-primitives-tabs.ts"],"sourcesContent":["import { Signal } from '@angular/core';\nimport { RdxCompositeMetadata } from '@radix-ng/primitives/composite';\nimport { createContext, DataOrientation } from '@radix-ng/primitives/core';\nimport type { RdxTabsValueChangeReason } from './tabs-root';\nimport { RdxTabsActivationDirection, RdxTabsTabMetadata, RdxTabsValue } from './utils';\n\nexport interface RdxTabsRootContext {\n /** Stable id used to derive tab / panel ids. */\n readonly baseId: string;\n\n /** The value of the currently selected tab. */\n readonly value: Signal<RdxTabsValue | undefined>;\n\n /** The orientation of the tabs. */\n readonly orientation: Signal<DataOrientation>;\n\n /** Direction the selection moved relative to the previously active tab. */\n readonly activationDirection: Signal<RdxTabsActivationDirection>;\n\n /** Whether tabs are activated on focus (set by the list). */\n readonly activateOnFocus: Signal<boolean>;\n\n /** The `[rdxTabsList]` host element, used to resolve tab order and indicator geometry. */\n readonly tabListElement: Signal<HTMLElement | null>;\n\n /** Registered tabs in DOM order. */\n readonly tabMap: Signal<Map<HTMLElement, RdxCompositeMetadata<RdxTabsTabMetadata>>>;\n\n /** Select a tab by value. No-op when the value is unchanged. */\n setValue(value: RdxTabsValue, event?: Event, reason?: RdxTabsValueChangeReason): void;\n\n /** Mirror the list's `activateOnFocus` input onto the root context. */\n setActivateOnFocus(value: boolean): void;\n\n /** Register the list host element. */\n setTabListElement(element: HTMLElement | null): void;\n\n /** Register the tab composite map. */\n setTabMap(map: Map<HTMLElement, RdxCompositeMetadata<RdxTabsTabMetadata>>): void;\n}\n\nexport const [injectTabsRootContext, provideTabsRootContext] = createContext<RdxTabsRootContext>(\n 'RdxTabsRootContext',\n 'components/tabs'\n);\n","/**\n * The direction in which the active tab moved relative to the previously active tab.\n * Mirrors Base UI's `Tabs.Tab.ActivationDirection`.\n */\nexport type RdxTabsActivationDirection = 'left' | 'right' | 'up' | 'down' | 'none';\n\n/** A value that identifies a tab / panel pair. */\nexport type RdxTabsValue = string | number | null;\n\n/** Metadata registered for each tab in the composite list. */\nexport interface RdxTabsTabMetadata {\n [key: string]: unknown;\n disabled: boolean;\n id: string;\n value: RdxTabsValue;\n}\n\n/** Metadata registered for each panel in the composite list. */\nexport interface RdxTabsPanelMetadata {\n [key: string]: unknown;\n id: string;\n value: RdxTabsValue;\n}\n\nexport function makeTabId(baseId: string, value: RdxTabsValue): string {\n return `${baseId}-tab-${value}`;\n}\n\nexport function makePanelId(baseId: string, value: RdxTabsValue): string {\n return `${baseId}-panel-${value}`;\n}\n","import { afterNextRender, DestroyRef, Directive, effect, inject, signal, untracked } from '@angular/core';\nimport { injectTabsRootContext } from './tabs-root-context';\nimport { makeTabId } from './utils';\n\ninterface TabGeometry {\n top: number;\n right: number;\n bottom: number;\n left: number;\n width: number;\n height: number;\n}\n\n/**\n * A visual element that tracks the position and size of the active tab. Exposes the active tab\n * geometry as CSS variables (`--active-tab-{top,right,bottom,left,width,height}`) so it can be\n * animated with CSS.\n *\n * @see https://base-ui.com/react/components/tabs\n */\n@Directive({\n selector: '[rdxTabsIndicator]',\n exportAs: 'rdxTabsIndicator',\n host: {\n '[attr.data-orientation]': 'rootContext.orientation()',\n '[attr.data-activation-direction]': 'rootContext.activationDirection()',\n '[style.--active-tab-top.px]': 'geometry()?.top',\n '[style.--active-tab-right.px]': 'geometry()?.right',\n '[style.--active-tab-bottom.px]': 'geometry()?.bottom',\n '[style.--active-tab-left.px]': 'geometry()?.left',\n '[style.--active-tab-width.px]': 'geometry()?.width',\n '[style.--active-tab-height.px]': 'geometry()?.height'\n }\n})\nexport class RdxTabsIndicator {\n protected readonly rootContext = injectTabsRootContext();\n private readonly destroyRef = inject(DestroyRef);\n\n /** @ignore */\n protected readonly geometry = signal<TabGeometry | null>(null);\n\n constructor() {\n // Re-measure whenever the selection, orientation or the list element changes.\n effect(() => {\n this.rootContext.value();\n this.rootContext.orientation();\n this.rootContext.tabListElement();\n this.scheduleMeasure();\n });\n\n afterNextRender(() => {\n const list = untracked(this.rootContext.tabListElement);\n if (!list || typeof ResizeObserver === 'undefined') {\n this.measure();\n return;\n }\n\n const observer = new ResizeObserver(() => this.measure());\n observer.observe(list);\n this.destroyRef.onDestroy(() => observer.disconnect());\n this.measure();\n });\n }\n\n private scheduleMeasure(): void {\n if (typeof requestAnimationFrame === 'undefined') {\n this.measure();\n return;\n }\n requestAnimationFrame(() => this.measure());\n }\n\n private measure(): void {\n const list = untracked(this.rootContext.tabListElement);\n const value = untracked(this.rootContext.value);\n\n if (!list || value == null || typeof document === 'undefined') {\n this.geometry.set(null);\n return;\n }\n\n const tab = document.getElementById(makeTabId(this.rootContext.baseId, value));\n if (!tab) {\n this.geometry.set(null);\n return;\n }\n\n const listRect = list.getBoundingClientRect();\n const tabRect = tab.getBoundingClientRect();\n\n // Measure `left` / `top` relative to the list's scrollable content origin rather than its\n // visible edge. When the list is a scroll container (e.g. its tabs overflow inside a Scroll\n // Area), the indicator is an absolutely positioned child of that container and scrolls along\n // with the content, so these offsets must be content-relative to stay aligned with the tab.\n // For non-scrolling lists `scrollLeft` / `scrollTop` are `0`, leaving the geometry unchanged.\n // `right` / `bottom` stay visible-edge relative — there is no unambiguous content-relative\n // meaning for them inside a scroll container, and the moving indicator uses `left`/`top`.\n const scrollLeft = list.scrollLeft;\n const scrollTop = list.scrollTop;\n\n this.geometry.set({\n top: tabRect.top - listRect.top + scrollTop,\n right: listRect.right - tabRect.right,\n bottom: listRect.bottom - tabRect.bottom,\n left: tabRect.left - listRect.left + scrollLeft,\n width: tabRect.width,\n height: tabRect.height\n });\n }\n}\n","import { booleanAttribute, computed, Directive, effect, ElementRef, inject, input } from '@angular/core';\nimport { RdxCompositeMetadata, RdxCompositeRoot } from '@radix-ng/primitives/composite';\nimport { injectTabsRootContext } from './tabs-root-context';\nimport { RdxTabsTabMetadata } from './utils';\n\n/**\n * Groups the individual tab buttons and manages keyboard navigation.\n *\n * @see https://base-ui.com/react/components/tabs\n */\n@Directive({\n selector: '[rdxTabsList]',\n exportAs: 'rdxTabsList',\n hostDirectives: [RdxCompositeRoot],\n host: {\n role: 'tablist',\n '[attr.aria-orientation]': 'rootContext.orientation() === \"vertical\" ? \"vertical\" : undefined',\n '[attr.data-orientation]': 'rootContext.orientation()',\n '[attr.data-activation-direction]': 'rootContext.activationDirection()'\n }\n})\nexport class RdxTabsList {\n protected readonly rootContext = injectTabsRootContext();\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly compositeRoot = inject(RdxCompositeRoot, { self: true });\n\n /**\n * Whether a tab is activated when it receives focus (automatic activation).\n * When `false`, tabs are only activated on click or Enter/Space.\n *\n * @default false\n */\n readonly activateOnFocus = input(false, { transform: booleanAttribute });\n\n /**\n * Whether keyboard navigation should loop from the last tab back to the first.\n *\n * @default true\n */\n readonly loopFocus = input(true, { transform: booleanAttribute });\n\n private readonly tabMap = computed(() => {\n const map = new Map<HTMLElement, RdxCompositeMetadata<RdxTabsTabMetadata>>();\n\n this.compositeRoot.itemMap().forEach((metadata, element) => {\n if (isTabsTabMetadata(metadata)) {\n map.set(element, metadata);\n }\n });\n\n return map;\n });\n\n private readonly tabMetadata = computed(() => Array.from(this.tabMap().values()));\n\n private readonly disabledIndices = computed(() =>\n this.tabMetadata()\n .filter((metadata) => metadata.disabled)\n .map((metadata) => metadata.index)\n );\n\n private readonly activeIndex = computed(() => {\n const value = this.rootContext.value();\n const metadata = this.tabMetadata().find((tab) => tab.value === value);\n\n return metadata?.index ?? -1;\n });\n\n constructor() {\n this.rootContext.setTabListElement(this.elementRef.nativeElement);\n\n // Constants — set once (not reactive). Disabled tabs stay in the roving sequence (APG: arrow\n // keys can focus a disabled tab), so the composite has no disabled indices and Home/End are on.\n this.compositeRoot.setEnableHomeAndEndKeys(true);\n this.compositeRoot.setDisabledIndices([]);\n\n effect(() => {\n this.compositeRoot.setOrientation(this.rootContext.orientation());\n this.compositeRoot.setLoopFocus(this.loopFocus());\n });\n\n effect(() => {\n this.rootContext.setTabMap(this.tabMap());\n });\n\n effect(() => {\n const activeIndex = this.activeIndex();\n\n if (activeIndex === -1) {\n return;\n }\n\n const list = this.elementRef.nativeElement;\n const activeElement = list.ownerDocument.activeElement;\n\n if (activeElement && list.contains(activeElement)) {\n return;\n }\n\n if (this.disabledIndices().includes(activeIndex)) {\n const firstEnabledIndex = this.tabMetadata().find((metadata) => !metadata.disabled)?.index;\n\n if (firstEnabledIndex !== undefined) {\n this.compositeRoot.setHighlightedIndex(firstEnabledIndex);\n }\n return;\n }\n\n this.compositeRoot.setHighlightedIndex(activeIndex);\n });\n\n effect(() => this.rootContext.setActivateOnFocus(this.activateOnFocus()));\n }\n}\n\nfunction isTabsTabMetadata(metadata: RdxCompositeMetadata): metadata is RdxCompositeMetadata<RdxTabsTabMetadata> {\n return (\n typeof metadata['disabled'] === 'boolean' &&\n typeof metadata['id'] === 'string' &&\n Object.prototype.hasOwnProperty.call(metadata, 'value')\n );\n}\n","import {\n booleanAttribute,\n computed,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n signal,\n untracked\n} from '@angular/core';\nimport { RdxCompositeListItem } from '@radix-ng/primitives/composite';\nimport { useTransitionStatus } from '@radix-ng/primitives/core';\nimport { provideRdxPresenceContext } from '@radix-ng/primitives/presence';\nimport { injectTabsRootContext } from './tabs-root-context';\nimport { makePanelId, makeTabId, RdxTabsValue } from './utils';\n\nconst panelPresenceContext = () => ({ present: inject(RdxTabsPanel).present });\n\n/**\n * A panel displayed when its corresponding tab is active.\n *\n * By default the panel stays in the DOM and is toggled with the `hidden` attribute. To unmount the\n * contents while inactive (Base UI's default `keepMounted: false`), nest a `*rdxTabsPanelPresence`\n * structural directive inside it; set `keepMounted` to keep the contents mounted regardless.\n *\n * @see https://base-ui.com/react/components/tabs\n */\n@Directive({\n selector: '[rdxTabsPanel]',\n exportAs: 'rdxTabsPanel',\n providers: [provideRdxPresenceContext(panelPresenceContext)],\n hostDirectives: [RdxCompositeListItem],\n host: {\n role: 'tabpanel',\n '[attr.id]': 'panelId()',\n '[attr.tabindex]': 'active() ? 0 : -1',\n '[attr.aria-labelledby]': 'tabId()',\n '[attr.data-orientation]': 'rootContext.orientation()',\n '[attr.data-activation-direction]': 'rootContext.activationDirection()',\n '[attr.data-index]': 'index()',\n '[attr.data-hidden]': 'active() ? undefined : \"\"',\n '[attr.data-starting-style]': 'transitionStatus() === \"starting\" ? \"\" : undefined',\n '[attr.data-ending-style]': 'transitionStatus() === \"ending\" ? \"\" : undefined',\n '[hidden]': 'hidden()'\n }\n})\nexport class RdxTabsPanel {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly listItem = inject(RdxCompositeListItem, { self: true });\n protected readonly rootContext = injectTabsRootContext();\n\n /**\n * A unique value that associates the panel with a tab.\n */\n readonly value = input.required<RdxTabsValue>();\n\n /**\n * Keep the panel contents mounted in the DOM while inactive (the contents are still hidden).\n * Only relevant together with `*rdxTabsPanelPresence`, which otherwise unmounts them.\n *\n * @default false\n */\n readonly keepMounted = input(false, { transform: booleanAttribute });\n\n private readonly transition = useTransitionStatus(() => {});\n\n /** Reactive enter/exit transition phase (`'starting'` | `'ending'` | `undefined`). */\n readonly transitionStatus = this.transition.status;\n\n /** @ignore */\n protected readonly panelId = computed(() => makePanelId(this.rootContext.baseId, this.value()));\n /** @ignore */\n protected readonly tabId = computed(() => {\n const value = this.value();\n\n for (const tabMetadata of this.rootContext.tabMap().values()) {\n if (tabMetadata.value === value) {\n return tabMetadata.id;\n }\n }\n\n return makeTabId(this.rootContext.baseId, value);\n });\n\n /** Whether this panel's tab is currently selected. */\n readonly active = computed(() => this.rootContext.value() === this.value());\n\n /** `true` once a `*rdxTabsPanelPresence` child takes over mounting. */\n private readonly hasPresence = signal(false);\n\n /**\n * Whether the contents should be present for `*rdxTabsPanelPresence`. Flips with `active` so the\n * presence directive owns the exit-animation timing (it keeps the node mounted until its exit\n * `@keyframes` finishes); `keepMounted` keeps them mounted regardless.\n */\n readonly present = computed(() => this.keepMounted() || this.active());\n\n /**\n * The `hidden` attribute value. The panel is shown while active or while its exit transition\n * runs. When a presence child unmounts the contents we no longer force `hidden` (the empty\n * element renders nothing), unless `keepMounted` keeps the inactive contents around.\n */\n protected readonly hidden = computed(\n () => !this.active() && this.transitionStatus() !== 'ending' && (!this.hasPresence() || this.keepMounted())\n );\n\n /** @ignore Index of the panel in DOM order. */\n protected readonly index = this.listItem.index;\n\n private previousActive = false;\n private isFirstRun = true;\n\n constructor() {\n const unregister = this.transition.registerElement(this.elementRef.nativeElement);\n inject(DestroyRef).onDestroy(unregister);\n\n effect(() => {\n this.listItem.setMetadata({\n id: this.panelId(),\n value: this.value()\n });\n });\n\n effect(() => {\n const active = this.active();\n\n // Settle the initial state without playing an enter transition.\n if (this.isFirstRun) {\n this.isFirstRun = false;\n this.previousActive = active;\n return;\n }\n\n if (active !== this.previousActive) {\n this.previousActive = active;\n untracked(() => this.transition.start(active));\n }\n });\n }\n\n /** @ignore Called by `RdxTabsPanelPresence` so the panel stops forcing `hidden`. */\n markHasPresence(): void {\n this.hasPresence.set(true);\n }\n}\n","import { Directive, inject } from '@angular/core';\nimport { RdxPresenceDirective } from '@radix-ng/primitives/presence';\nimport { RdxTabsPanel } from './tabs-panel';\n\n/**\n * Structural directive that mounts the tab panel contents only while the panel is active,\n * unmounting them once the exit animation finishes. Apply it inside an `[rdxTabsPanel]` to get\n * Base UI's default unmounting behavior; combine with `keepMounted` on the panel to keep the\n * contents mounted instead.\n *\n * The presence state is read from the parent panel through {@link RdxPresenceDirective}.\n */\n@Directive({\n selector: 'ng-template[rdxTabsPanelPresence]',\n hostDirectives: [RdxPresenceDirective]\n})\nexport class RdxTabsPanelPresence {\n constructor() {\n inject(RdxTabsPanel).markHasPresence();\n }\n}\n","import { Directive, effect, inject, input, model, output, signal, untracked } from '@angular/core';\nimport { RdxCompositeList, RdxCompositeMetadata } from '@radix-ng/primitives/composite';\nimport {\n createCancelableChangeEventDetails,\n DataOrientation,\n injectId,\n RdxCancelableChangeEventDetails\n} from '@radix-ng/primitives/core';\nimport { provideTabsRootContext, RdxTabsRootContext } from './tabs-root-context';\nimport { RdxTabsActivationDirection, RdxTabsTabMetadata, RdxTabsValue } from './utils';\n\nexport type RdxTabsValueChangeReason = 'none' | 'disabled' | 'missing' | 'initial';\nexport type RdxTabsValueChangeEventDetails = RdxCancelableChangeEventDetails<RdxTabsValueChangeReason> & {\n activationDirection: RdxTabsActivationDirection;\n};\n\nexport interface RdxTabsValueChangeEvent {\n value: RdxTabsValue;\n eventDetails: RdxTabsValueChangeEventDetails;\n}\n\nconst rootContext = (): RdxTabsRootContext => {\n const root = inject(RdxTabsRoot);\n\n return {\n baseId: root.baseId,\n value: root.value,\n orientation: root.orientation,\n activationDirection: root.activationDirection.asReadonly(),\n activateOnFocus: root.activateOnFocus.asReadonly(),\n tabListElement: root.tabListElement.asReadonly(),\n tabMap: root.tabMap.asReadonly(),\n setValue: (value, event, reason) => root.setValue(value, event, reason as RdxTabsValueChangeReason | undefined),\n setActivateOnFocus: (value) => root.activateOnFocus.set(value),\n setTabListElement: (element) => root.tabListElement.set(element),\n setTabMap: (map) => root.tabMap.set(map)\n };\n};\n\n/**\n * Groups the tabs and the corresponding panels.\n *\n * @see https://base-ui.com/react/components/tabs\n */\n@Directive({\n selector: '[rdxTabsRoot]',\n exportAs: 'rdxTabsRoot',\n providers: [provideTabsRootContext(rootContext)],\n hostDirectives: [RdxCompositeList],\n host: {\n '[attr.data-orientation]': 'orientation()',\n '[attr.data-activation-direction]': 'activationDirection()'\n }\n})\nexport class RdxTabsRoot {\n /** @ignore */\n readonly baseId = injectId('rdx-tabs-');\n\n /**\n * The value of the currently selected tab. Use together with `(onValueChange)` for controlled state.\n */\n readonly value = model<RdxTabsValue | undefined>();\n\n /**\n * The value of the tab that should be initially selected when uncontrolled.\n * When omitted, Base UI parity uses `0` as the implicit default and falls back to the first enabled tab.\n *\n * @default 0\n */\n readonly defaultValue = input<RdxTabsValue | undefined>(undefined);\n\n /**\n * The orientation the tabs are laid out. Controls arrow-key navigation\n * (left/right vs. up/down).\n *\n * @default 'horizontal'\n */\n readonly orientation = input<DataOrientation>('horizontal');\n\n /**\n * Event emitted when the selected tab changes.\n *\n * `eventDetails.reason` is `'none'` for user-initiated changes, `'initial'` for the first automatic\n * uncontrolled selection, `'disabled'` when an uncontrolled selection falls back from a disabled tab,\n * and `'missing'` when it falls back from a removed tab. Automatic changes are not cancelable.\n */\n readonly onValueChange = output<RdxTabsValueChangeEvent>();\n\n /** @ignore Set by `[rdxTabsList]`. */\n readonly activateOnFocus = signal(false);\n\n /** @ignore Set by `[rdxTabsList]`. */\n readonly tabListElement = signal<HTMLElement | null>(null);\n\n /** @ignore Set by `[rdxTabsList]`. */\n readonly tabMap = signal(new Map<HTMLElement, RdxCompositeMetadata<RdxTabsTabMetadata>>());\n\n /** @ignore */\n readonly activationDirection = signal<RdxTabsActivationDirection>('none');\n\n private readonly externallyControlled = signal(false);\n private hasObservedValue = false;\n private previousObservedValue: RdxTabsValue | undefined;\n private internalValueCommit = false;\n private hasAppliedDefaultValue = false;\n private initialDefaultValue: RdxTabsValue | undefined;\n private shouldNotifyInitialValueChange = true;\n private shouldHonorDisabledDefaultValue = false;\n private didRegisterTabs = false;\n private lastKnownTabElement: HTMLElement | undefined;\n\n constructor() {\n effect(() => {\n const currentValue = this.value();\n\n if (this.internalValueCommit) {\n this.internalValueCommit = false;\n this.hasObservedValue = true;\n this.previousObservedValue = currentValue;\n return;\n }\n\n if (!this.hasObservedValue) {\n this.hasObservedValue = true;\n this.previousObservedValue = currentValue;\n if (currentValue !== undefined) {\n this.externallyControlled.set(true);\n }\n return;\n }\n\n if (currentValue !== this.previousObservedValue) {\n this.externallyControlled.set(true);\n this.previousObservedValue = currentValue;\n }\n });\n\n effect(() => {\n if (this.hasAppliedDefaultValue || untracked(this.value) !== undefined) {\n return;\n }\n\n const defaultValue = this.defaultValue();\n const hasExplicitDefaultValue = defaultValue !== undefined;\n this.hasAppliedDefaultValue = true;\n this.initialDefaultValue = defaultValue ?? 0;\n this.shouldNotifyInitialValueChange = !hasExplicitDefaultValue;\n this.shouldHonorDisabledDefaultValue = hasExplicitDefaultValue;\n untracked(() => this.commitValue(this.initialDefaultValue!));\n });\n\n effect(() => {\n const tabMap = this.tabMap();\n const value = this.value();\n\n if (this.externallyControlled()) {\n return;\n }\n\n if (tabMap.size === 0) {\n if (this.didRegisterTabs && value !== null && !this.lastKnownTabElement?.isConnected) {\n untracked(() => this.commitAutomaticValueChange(null, 'missing'));\n }\n return;\n }\n\n this.didRegisterTabs = true;\n this.lastKnownTabElement = tabMap.keys().next().value;\n\n const selectedTabMetadata = getTabMetadataByValue(tabMap, value);\n const firstEnabledTabValue = getFirstEnabledTabValue(tabMap);\n const selectionIsDisabled = selectedTabMetadata?.disabled;\n const selectionIsMissing = selectedTabMetadata == null && value !== null;\n\n if (!selectionIsDisabled && value === this.initialDefaultValue) {\n this.shouldHonorDisabledDefaultValue = false;\n }\n\n if (this.shouldHonorDisabledDefaultValue && selectionIsDisabled && value === this.initialDefaultValue) {\n return;\n }\n\n const shouldNotifyInitialValueChange = this.shouldNotifyInitialValueChange;\n\n if (selectionIsDisabled || selectionIsMissing) {\n const fallbackValue = firstEnabledTabValue ?? null;\n\n if (value === fallbackValue) {\n this.shouldNotifyInitialValueChange = false;\n return;\n }\n\n let fallbackReason: RdxTabsValueChangeReason = 'missing';\n if (shouldNotifyInitialValueChange) {\n fallbackReason = 'initial';\n } else if (selectionIsDisabled) {\n fallbackReason = 'disabled';\n }\n\n untracked(() => this.commitAutomaticValueChange(fallbackValue, fallbackReason));\n return;\n }\n\n if (shouldNotifyInitialValueChange && selectedTabMetadata != null) {\n untracked(() => this.notifyAutomaticValueChange(value, 'initial'));\n this.shouldNotifyInitialValueChange = false;\n }\n });\n }\n\n /** @ignore */\n setValue(value: RdxTabsValue, event?: Event, reason: RdxTabsValueChangeReason = 'none'): void {\n const previous = this.value();\n if (previous === value) {\n return;\n }\n\n const trigger = event?.currentTarget instanceof HTMLElement ? event.currentTarget : undefined;\n const { eventDetails: baseEventDetails } = createCancelableChangeEventDetails(\n reason,\n event ?? new Event('tabs.value-change'),\n trigger\n );\n const eventDetails = baseEventDetails as RdxTabsValueChangeEventDetails;\n const activationDirection = computeActivationDirection(previous, value, this.orientation(), this.tabMap());\n eventDetails.activationDirection = activationDirection;\n\n this.onValueChange.emit({ value, eventDetails });\n if (eventDetails.isCanceled()) {\n return;\n }\n\n this.activationDirection.set(activationDirection);\n this.commitValue(value);\n }\n\n private commitValue(value: RdxTabsValue): void {\n this.internalValueCommit = true;\n this.value.set(value);\n }\n\n private commitAutomaticValueChange(value: RdxTabsValue, reason: RdxTabsValueChangeReason): void {\n this.activationDirection.set('none');\n this.commitValue(value);\n this.notifyAutomaticValueChange(value, reason);\n this.shouldNotifyInitialValueChange = false;\n }\n\n private notifyAutomaticValueChange(value: RdxTabsValue | undefined, reason: RdxTabsValueChangeReason): void {\n if (value === undefined) {\n return;\n }\n\n const { eventDetails: baseEventDetails } = createCancelableChangeEventDetails(\n reason,\n new Event('tabs.value-change')\n );\n const eventDetails = baseEventDetails as RdxTabsValueChangeEventDetails;\n eventDetails.activationDirection = 'none';\n this.onValueChange.emit({ value, eventDetails });\n }\n}\n\nfunction getTabMetadataByValue(\n tabMap: Map<HTMLElement, RdxCompositeMetadata<RdxTabsTabMetadata>>,\n value: RdxTabsValue | undefined\n): RdxCompositeMetadata<RdxTabsTabMetadata> | undefined {\n for (const tabMetadata of tabMap.values()) {\n if (tabMetadata.value === value) {\n return tabMetadata;\n }\n }\n\n return undefined;\n}\n\nfunction getFirstEnabledTabValue(\n tabMap: Map<HTMLElement, RdxCompositeMetadata<RdxTabsTabMetadata>>\n): RdxTabsValue | undefined {\n for (const tabMetadata of tabMap.values()) {\n if (!tabMetadata.disabled) {\n return tabMetadata.value;\n }\n }\n\n return undefined;\n}\n\nfunction computeActivationDirection(\n previous: RdxTabsValue | undefined,\n next: RdxTabsValue,\n orientation: DataOrientation,\n tabMap: Map<HTMLElement, RdxCompositeMetadata<RdxTabsTabMetadata>>\n): RdxTabsActivationDirection {\n if (previous == null || next == null) {\n return 'none';\n }\n\n let previousTab: HTMLElement | null = null;\n let nextTab: HTMLElement | null = null;\n let previousIndex = -1;\n let nextIndex = -1;\n\n for (const [tabElement, tabMetadata] of tabMap.entries()) {\n if (tabMetadata.value === previous) {\n previousTab = tabElement;\n previousIndex = tabMetadata.index;\n }\n if (tabMetadata.value === next) {\n nextTab = tabElement;\n nextIndex = tabMetadata.index;\n }\n if (previousTab && nextTab) {\n break;\n }\n }\n\n if (!previousTab || !nextTab || previousIndex === nextIndex) {\n return inferActivationDirectionFromValues(previous, next, orientation);\n }\n\n const previousRect = previousTab.getBoundingClientRect();\n const nextRect = nextTab.getBoundingClientRect();\n\n if (orientation === 'horizontal') {\n if (nextRect.left < previousRect.left) {\n return 'left';\n }\n if (nextRect.left > previousRect.left) {\n return 'right';\n }\n return nextIndex > previousIndex ? 'right' : 'left';\n }\n\n if (nextRect.top < previousRect.top) {\n return 'up';\n }\n if (nextRect.top > previousRect.top) {\n return 'down';\n }\n return nextIndex > previousIndex ? 'down' : 'up';\n}\n\nfunction inferActivationDirectionFromValues(\n previous: RdxTabsValue,\n next: RdxTabsValue,\n orientation: DataOrientation\n): RdxTabsActivationDirection {\n if (previous !== next && typeof previous === 'number' && typeof next === 'number') {\n if (orientation === 'horizontal') {\n return next > previous ? 'right' : 'left';\n }\n\n return next > previous ? 'down' : 'up';\n }\n\n if (previous !== next && typeof previous === 'string' && typeof next === 'string') {\n if (orientation === 'horizontal') {\n return next > previous ? 'right' : 'left';\n }\n\n return next > previous ? 'down' : 'up';\n }\n\n return 'none';\n}\n","import { booleanAttribute, computed, Directive, effect, inject, input } from '@angular/core';\nimport { RdxCompositeItem } from '@radix-ng/primitives/composite';\nimport { BooleanInput } from '@radix-ng/primitives/core';\nimport { injectTabsRootContext } from './tabs-root-context';\nimport { makePanelId, makeTabId, RdxTabsValue } from './utils';\n\n/**\n * An individual interactive tab button that activates its corresponding panel.\n *\n * @see https://base-ui.com/react/components/tabs\n */\n@Directive({\n selector: '[rdxTabsTab]',\n exportAs: 'rdxTabsTab',\n hostDirectives: [RdxCompositeItem],\n host: {\n '[attr.type]': 'nativeButton() ? \"button\" : undefined',\n role: 'tab',\n '[attr.id]': 'tabId()',\n '[attr.aria-selected]': 'active()',\n '[attr.aria-controls]': 'panelId()',\n '[attr.aria-disabled]': 'disabled() ? \"true\" : undefined',\n '[attr.disabled]': 'null',\n '[attr.data-composite-item-active]': 'active() ? \"\" : undefined',\n '[attr.data-orientation]': 'rootContext.orientation()',\n '[attr.data-activation-direction]': 'rootContext.activationDirection()',\n '[attr.data-active]': 'active() ? \"\" : undefined',\n '[attr.data-disabled]': 'disabled() ? \"\" : undefined',\n '(click)': 'onClick($event)',\n '(keydown)': 'onKeyDown($event)',\n '(pointerdown)': 'onPointerDown($event)',\n '(focus)': 'onFocus($event)'\n }\n})\nexport class RdxTabsTab {\n protected readonly rootContext = injectTabsRootContext();\n private readonly compositeItem = inject(RdxCompositeItem, { self: true });\n\n /**\n * A unique value that associates the tab with a panel.\n */\n readonly value = input.required<RdxTabsValue>();\n\n /**\n * When `true`, prevents the user from interacting with the tab.\n * Disabled tabs remain focusable during composite keyboard navigation, matching Base UI.\n */\n readonly disabled = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /**\n * Whether the host element is a native button. When `true`, `type=\"button\"` is applied.\n *\n * @default true\n */\n readonly nativeButton = input<boolean, BooleanInput>(true, { transform: booleanAttribute });\n\n /**\n * Optional id for the tab element. When omitted, an id is derived from the root id and tab value.\n */\n readonly id = input<string | undefined>(undefined);\n\n /** @ignore */\n protected readonly tabId = computed(() => this.id() ?? makeTabId(this.rootContext.baseId, this.value()));\n /** @ignore */\n protected readonly panelId = computed(() => makePanelId(this.rootContext.baseId, this.value()));\n\n /** @ignore */\n protected readonly active = computed(() => this.rootContext.value() === this.value());\n\n private isPressing = false;\n private isMainButton = false;\n\n constructor() {\n effect(() => {\n this.compositeItem.setMetadata({\n disabled: this.disabled(),\n id: this.tabId(),\n value: this.value()\n });\n });\n }\n\n /** @ignore */\n protected onClick(event: MouseEvent): void {\n if (this.active() || this.disabled()) {\n return;\n }\n\n this.rootContext.setValue(this.value(), event, 'none');\n }\n\n /** @ignore */\n protected onKeyDown(event: KeyboardEvent): void {\n if (!this.disabled() && (event.key === ' ' || event.key === 'Enter')) {\n this.rootContext.setValue(this.value(), event, 'none');\n }\n }\n\n /** @ignore */\n protected onPointerDown(event: PointerEvent): void {\n if (this.active() || this.disabled()) {\n return;\n }\n\n this.isPressing = true;\n this.isMainButton = event.button === 0;\n\n const ownerDocument = event.currentTarget instanceof HTMLElement ? event.currentTarget.ownerDocument : document;\n ownerDocument.addEventListener(\n 'pointerup',\n () => {\n this.isPressing = false;\n this.isMainButton = false;\n },\n { once: true }\n );\n ownerDocument.addEventListener(\n 'pointercancel',\n () => {\n this.isPressing = false;\n this.isMainButton = false;\n },\n { once: true }\n );\n ownerDocument.addEventListener(\n 'blur',\n () => {\n this.isPressing = false;\n this.isMainButton = false;\n },\n { once: true }\n );\n }\n\n /** @ignore */\n protected onFocus(event: FocusEvent): void {\n if (this.active() || this.disabled()) {\n return;\n }\n\n if (this.rootContext.activateOnFocus() && (!this.isPressing || this.isMainButton)) {\n this.rootContext.setValue(this.value(), event, 'none');\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { RdxTabsIndicator } from './src/tabs-indicator';\nimport { RdxTabsList } from './src/tabs-list';\nimport { RdxTabsPanel } from './src/tabs-panel';\nimport { RdxTabsPanelPresence } from './src/tabs-panel-presence';\nimport { RdxTabsRoot } from './src/tabs-root';\nimport { RdxTabsTab } from './src/tabs-tab';\n\nexport * from './src/tabs-indicator';\nexport * from './src/tabs-list';\nexport * from './src/tabs-panel';\nexport * from './src/tabs-panel-presence';\nexport * from './src/tabs-root';\nexport * from './src/tabs-root-context';\nexport * from './src/tabs-tab';\nexport type { RdxTabsActivationDirection, RdxTabsValue } from './src/utils';\n\nexport const tabsImports = [RdxTabsRoot, RdxTabsList, RdxTabsTab, RdxTabsPanel, RdxTabsPanelPresence, RdxTabsIndicator];\n\n@NgModule({\n imports: [...tabsImports],\n exports: [...tabsImports]\n})\nexport class RdxTabsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}
|