@radix-ng/primitives 0.18.1 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/avatar/index.d.ts +1 -2
- package/avatar/src/avatar-fallback.directive.d.ts +11 -23
- package/avatar/src/avatar-image.directive.d.ts +10 -14
- package/avatar/src/avatar-root.directive.d.ts +5 -15
- package/checkbox/index.d.ts +11 -0
- package/checkbox/src/checkbox-button.directive.d.ts +1 -1
- package/checkbox/src/checkbox-indicator.directive.d.ts +1 -1
- package/checkbox/src/checkbox-input.directive.d.ts +1 -1
- package/checkbox/src/checkbox.directive.d.ts +1 -1
- package/compodoc/documentation.json +4895 -2139
- package/core/index.d.ts +2 -0
- package/core/src/control-value-accessor/index.d.ts +75 -0
- package/core/src/create-inject-context/assert-injector.d.ts +51 -0
- package/core/src/create-inject-context/index.d.ts +68 -0
- package/core/src/types.d.ts +23 -0
- package/esm2022/avatar/index.mjs +1 -1
- package/esm2022/avatar/src/avatar-fallback.directive.mjs +38 -40
- package/esm2022/avatar/src/avatar-image.directive.mjs +25 -26
- package/esm2022/avatar/src/avatar-root.directive.mjs +13 -25
- package/esm2022/checkbox/index.mjs +31 -1
- package/esm2022/checkbox/src/checkbox-button.directive.mjs +3 -3
- package/esm2022/checkbox/src/checkbox-indicator.directive.mjs +3 -3
- package/esm2022/checkbox/src/checkbox-input.directive.mjs +3 -3
- package/esm2022/checkbox/src/checkbox.directive.mjs +3 -3
- package/esm2022/core/index.mjs +3 -1
- package/esm2022/core/src/control-value-accessor/index.mjs +103 -0
- package/esm2022/core/src/create-inject-context/assert-injector.mjs +15 -0
- package/esm2022/core/src/create-inject-context/index.mjs +116 -0
- package/esm2022/core/src/types.mjs +2 -0
- package/esm2022/radio/index.mjs +2 -1
- package/esm2022/radio/src/radio-item-input.directive.mjs +37 -0
- package/esm2022/radio/src/radio-item.directive.mjs +55 -36
- package/esm2022/radio/src/radio-root.directive.mjs +24 -110
- package/esm2022/radio/src/radio-tokens.mjs +1 -1
- package/esm2022/roving-focus/index.mjs +3 -0
- package/esm2022/roving-focus/radix-ng-primitives-roving-focus.mjs +5 -0
- package/esm2022/roving-focus/src/roving-focus-group.directive.mjs +138 -0
- package/esm2022/roving-focus/src/roving-focus-item.directive.mjs +133 -0
- package/esm2022/roving-focus/src/utils.mjs +47 -0
- package/esm2022/select/src/select-item.directive.mjs +8 -2
- package/esm2022/slider/src/slider-orientation-context.service.mjs +3 -4
- package/esm2022/slider/src/slider-root.component.mjs +5 -2
- package/esm2022/toggle/src/toggle-input.directive.mjs +4 -3
- package/fesm2022/radix-ng-primitives-avatar.mjs +70 -85
- package/fesm2022/radix-ng-primitives-avatar.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-checkbox.mjs +35 -10
- package/fesm2022/radix-ng-primitives-checkbox.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-core.mjs +230 -3
- package/fesm2022/radix-ng-primitives-core.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-radio.mjs +142 -176
- package/fesm2022/radix-ng-primitives-radio.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-roving-focus.mjs +320 -0
- package/fesm2022/radix-ng-primitives-roving-focus.mjs.map +1 -0
- package/fesm2022/radix-ng-primitives-select.mjs +7 -1
- package/fesm2022/radix-ng-primitives-select.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-slider.mjs +6 -4
- package/fesm2022/radix-ng-primitives-slider.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-toggle.mjs +3 -2
- package/fesm2022/radix-ng-primitives-toggle.mjs.map +1 -1
- package/package.json +7 -1
- package/radio/index.d.ts +1 -0
- package/radio/src/radio-item-input.directive.d.ts +12 -0
- package/radio/src/radio-item.directive.d.ts +23 -14
- package/radio/src/radio-root.directive.d.ts +15 -31
- package/radio/src/radio-tokens.d.ts +3 -3
- package/roving-focus/README.md +3 -0
- package/roving-focus/index.d.ts +3 -0
- package/roving-focus/src/roving-focus-group.directive.d.ts +50 -0
- package/roving-focus/src/roving-focus-item.directive.d.ts +50 -0
- package/roving-focus/src/utils.d.ts +19 -0
- package/select/src/select-item.directive.d.ts +7 -1
- package/slider/src/slider-root.component.d.ts +2 -0
- package/toggle/src/toggle-input.directive.d.ts +1 -1
@@ -0,0 +1,320 @@
|
|
1
|
+
import * as i0 from '@angular/core';
|
2
|
+
import { inject, NgZone, ElementRef, EventEmitter, signal, booleanAttribute, Directive, Input, Output, computed } from '@angular/core';
|
3
|
+
|
4
|
+
const ENTRY_FOCUS = 'rovingFocusGroup.onEntryFocus';
|
5
|
+
const EVENT_OPTIONS = { bubbles: false, cancelable: true };
|
6
|
+
const MAP_KEY_TO_FOCUS_INTENT = {
|
7
|
+
ArrowLeft: 'prev',
|
8
|
+
ArrowUp: 'prev',
|
9
|
+
ArrowRight: 'next',
|
10
|
+
ArrowDown: 'next',
|
11
|
+
PageUp: 'first',
|
12
|
+
Home: 'first',
|
13
|
+
PageDown: 'last',
|
14
|
+
End: 'last'
|
15
|
+
};
|
16
|
+
function getDirectionAwareKey(key, dir) {
|
17
|
+
if (dir !== 'rtl')
|
18
|
+
return key;
|
19
|
+
return key === 'ArrowLeft' ? 'ArrowRight' : key === 'ArrowRight' ? 'ArrowLeft' : key;
|
20
|
+
}
|
21
|
+
function getFocusIntent(event, orientation, dir) {
|
22
|
+
const key = getDirectionAwareKey(event.key, dir);
|
23
|
+
if (orientation === 'vertical' && ['ArrowLeft', 'ArrowRight'].includes(key))
|
24
|
+
return undefined;
|
25
|
+
if (orientation === 'horizontal' && ['ArrowUp', 'ArrowDown'].includes(key))
|
26
|
+
return undefined;
|
27
|
+
return MAP_KEY_TO_FOCUS_INTENT[key];
|
28
|
+
}
|
29
|
+
function focusFirst(candidates, preventScroll = false, rootNode) {
|
30
|
+
const PREVIOUSLY_FOCUSED_ELEMENT = rootNode?.activeElement ?? document.activeElement;
|
31
|
+
for (const candidate of candidates) {
|
32
|
+
// if focus is already where we want to go, we don't want to keep going through the candidates
|
33
|
+
if (candidate === PREVIOUSLY_FOCUSED_ELEMENT)
|
34
|
+
return;
|
35
|
+
candidate.focus({ preventScroll });
|
36
|
+
if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT)
|
37
|
+
return;
|
38
|
+
}
|
39
|
+
}
|
40
|
+
/**
|
41
|
+
* Wraps an array around itself at a given start index
|
42
|
+
* Example: `wrapArray(['a', 'b', 'c', 'd'], 2) === ['c', 'd', 'a', 'b']`
|
43
|
+
*/
|
44
|
+
function wrapArray(array, startIndex) {
|
45
|
+
return array.map((_, index) => array[(startIndex + index) % array.length]);
|
46
|
+
}
|
47
|
+
function generateId() {
|
48
|
+
return `rf-item-${Math.random().toString(36).slice(2, 11)}`;
|
49
|
+
}
|
50
|
+
|
51
|
+
class RdxRovingFocusGroupDirective {
|
52
|
+
constructor() {
|
53
|
+
this.ngZone = inject(NgZone);
|
54
|
+
this.elementRef = inject(ElementRef);
|
55
|
+
this.dir = 'ltr';
|
56
|
+
this.loop = true;
|
57
|
+
this.preventScrollOnEntryFocus = false;
|
58
|
+
this.entryFocus = new EventEmitter();
|
59
|
+
this.currentTabStopIdChange = new EventEmitter();
|
60
|
+
/** @ignore */
|
61
|
+
this.currentTabStopId = signal(null);
|
62
|
+
/** @ignore */
|
63
|
+
this.focusableItems = signal([]);
|
64
|
+
this.isClickFocus = signal(false);
|
65
|
+
this.isTabbingBackOut = signal(false);
|
66
|
+
this.focusableItemsCount = signal(0);
|
67
|
+
}
|
68
|
+
/** @ignore */
|
69
|
+
get dataOrientation() {
|
70
|
+
return this.orientation || 'horizontal';
|
71
|
+
}
|
72
|
+
/** @ignore */
|
73
|
+
get tabIndex() {
|
74
|
+
return this.isTabbingBackOut() || this.getFocusableItemsCount() === 0 ? -1 : 0;
|
75
|
+
}
|
76
|
+
/** @ignore */
|
77
|
+
handleBlur() {
|
78
|
+
this.isTabbingBackOut.set(false);
|
79
|
+
}
|
80
|
+
/** @ignore */
|
81
|
+
handleMouseUp() {
|
82
|
+
// reset `isClickFocus` after 1 tick because handleFocus might not triggered due to focused element
|
83
|
+
this.ngZone.runOutsideAngular(() => {
|
84
|
+
// eslint-disable-next-line promise/catch-or-return,promise/always-return
|
85
|
+
Promise.resolve().then(() => {
|
86
|
+
this.ngZone.run(() => {
|
87
|
+
this.isClickFocus.set(false);
|
88
|
+
});
|
89
|
+
});
|
90
|
+
});
|
91
|
+
}
|
92
|
+
/** @ignore */
|
93
|
+
handleFocus(event) {
|
94
|
+
// We normally wouldn't need this check, because we already check
|
95
|
+
// that the focus is on the current target and not bubbling to it.
|
96
|
+
// We do this because Safari doesn't focus buttons when clicked, and
|
97
|
+
// instead, the wrapper will get focused and not through a bubbling event.
|
98
|
+
const isKeyboardFocus = !this.isClickFocus();
|
99
|
+
if (event.currentTarget === this.elementRef.nativeElement &&
|
100
|
+
event.target === event.currentTarget &&
|
101
|
+
isKeyboardFocus &&
|
102
|
+
!this.isTabbingBackOut()) {
|
103
|
+
const entryFocusEvent = new CustomEvent(ENTRY_FOCUS, EVENT_OPTIONS);
|
104
|
+
this.elementRef.nativeElement.dispatchEvent(entryFocusEvent);
|
105
|
+
this.entryFocus.emit(entryFocusEvent);
|
106
|
+
if (!entryFocusEvent.defaultPrevented) {
|
107
|
+
const items = this.focusableItems().filter((item) => item.dataset['disabled'] !== '');
|
108
|
+
const activeItem = items.find((item) => item.getAttribute('data-active') === 'true');
|
109
|
+
const currentItem = items.find((item) => item.id === this.currentTabStopId());
|
110
|
+
const candidateItems = [activeItem, currentItem, ...items].filter(Boolean);
|
111
|
+
focusFirst(candidateItems, this.preventScrollOnEntryFocus);
|
112
|
+
}
|
113
|
+
}
|
114
|
+
this.isClickFocus.set(false);
|
115
|
+
}
|
116
|
+
/** @ignore */
|
117
|
+
handleMouseDown() {
|
118
|
+
this.isClickFocus.set(true);
|
119
|
+
}
|
120
|
+
/** @ignore */
|
121
|
+
onItemFocus(tabStopId) {
|
122
|
+
this.currentTabStopId.set(tabStopId);
|
123
|
+
this.currentTabStopIdChange.emit(tabStopId);
|
124
|
+
}
|
125
|
+
/** @ignore */
|
126
|
+
onItemShiftTab() {
|
127
|
+
this.isTabbingBackOut.set(true);
|
128
|
+
}
|
129
|
+
/** @ignore */
|
130
|
+
onFocusableItemAdd() {
|
131
|
+
this.focusableItemsCount.update((count) => count + 1);
|
132
|
+
}
|
133
|
+
/** @ignore */
|
134
|
+
onFocusableItemRemove() {
|
135
|
+
this.focusableItemsCount.update((count) => Math.max(0, count - 1));
|
136
|
+
}
|
137
|
+
/** @ignore */
|
138
|
+
registerItem(item) {
|
139
|
+
const currentItems = this.focusableItems();
|
140
|
+
this.focusableItems.set([...currentItems, item]);
|
141
|
+
}
|
142
|
+
/** @ignore */
|
143
|
+
unregisterItem(item) {
|
144
|
+
const currentItems = this.focusableItems();
|
145
|
+
this.focusableItems.set(currentItems.filter((el) => el !== item));
|
146
|
+
}
|
147
|
+
/** @ignore */
|
148
|
+
getFocusableItemsCount() {
|
149
|
+
return this.focusableItemsCount();
|
150
|
+
}
|
151
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxRovingFocusGroupDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
152
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.2.11", type: RdxRovingFocusGroupDirective, isStandalone: true, selector: "[rdxRovingFocusGroup]", inputs: { orientation: "orientation", dir: "dir", loop: ["loop", "loop", booleanAttribute], preventScrollOnEntryFocus: ["preventScrollOnEntryFocus", "preventScrollOnEntryFocus", booleanAttribute] }, outputs: { entryFocus: "entryFocus", currentTabStopIdChange: "currentTabStopIdChange" }, host: { listeners: { "focus": "handleFocus($event)", "blur": "handleBlur()", "mouseup": "handleMouseUp()", "mousedown": "handleMouseDown()" }, properties: { "attr.data-orientation": "dataOrientation", "attr.tabindex": "tabIndex", "attr.dir": "dir" }, styleAttribute: "outline: none;" }, ngImport: i0 }); }
|
153
|
+
}
|
154
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxRovingFocusGroupDirective, decorators: [{
|
155
|
+
type: Directive,
|
156
|
+
args: [{
|
157
|
+
selector: '[rdxRovingFocusGroup]',
|
158
|
+
standalone: true,
|
159
|
+
host: {
|
160
|
+
'[attr.data-orientation]': 'dataOrientation',
|
161
|
+
'[attr.tabindex]': 'tabIndex',
|
162
|
+
'[attr.dir]': 'dir',
|
163
|
+
'(focus)': 'handleFocus($event)',
|
164
|
+
'(blur)': 'handleBlur()',
|
165
|
+
'(mouseup)': 'handleMouseUp()',
|
166
|
+
'(mousedown)': 'handleMouseDown()',
|
167
|
+
style: 'outline: none;'
|
168
|
+
}
|
169
|
+
}]
|
170
|
+
}], propDecorators: { orientation: [{
|
171
|
+
type: Input
|
172
|
+
}], dir: [{
|
173
|
+
type: Input
|
174
|
+
}], loop: [{
|
175
|
+
type: Input,
|
176
|
+
args: [{ transform: booleanAttribute }]
|
177
|
+
}], preventScrollOnEntryFocus: [{
|
178
|
+
type: Input,
|
179
|
+
args: [{ transform: booleanAttribute }]
|
180
|
+
}], entryFocus: [{
|
181
|
+
type: Output
|
182
|
+
}], currentTabStopIdChange: [{
|
183
|
+
type: Output
|
184
|
+
}] } });
|
185
|
+
|
186
|
+
class RdxRovingFocusItemDirective {
|
187
|
+
constructor() {
|
188
|
+
this.elementRef = inject(ElementRef);
|
189
|
+
this.ngZone = inject(NgZone);
|
190
|
+
this.parent = inject(RdxRovingFocusGroupDirective);
|
191
|
+
this.focusable = true;
|
192
|
+
this.active = true;
|
193
|
+
this.allowShiftKey = false;
|
194
|
+
this.id = computed(() => this.tabStopId || generateId());
|
195
|
+
/** @ignore */
|
196
|
+
this.isCurrentTabStop = computed(() => this.parent.currentTabStopId() === this.id());
|
197
|
+
}
|
198
|
+
/**
|
199
|
+
* Lifecycle hook triggered on initialization.
|
200
|
+
* Registers the element with the parent roving focus group if it is focusable.
|
201
|
+
* @ignore
|
202
|
+
*/
|
203
|
+
ngOnInit() {
|
204
|
+
if (this.focusable) {
|
205
|
+
this.parent.registerItem(this.elementRef.nativeElement);
|
206
|
+
this.parent.onFocusableItemAdd();
|
207
|
+
}
|
208
|
+
}
|
209
|
+
/**
|
210
|
+
* Lifecycle hook triggered on destruction.
|
211
|
+
* Unregisters the element from the parent roving focus group if it is focusable.
|
212
|
+
* @ignore
|
213
|
+
*/
|
214
|
+
ngOnDestroy() {
|
215
|
+
if (this.focusable) {
|
216
|
+
this.parent.unregisterItem(this.elementRef.nativeElement);
|
217
|
+
this.parent.onFocusableItemRemove();
|
218
|
+
}
|
219
|
+
}
|
220
|
+
/**
|
221
|
+
* Determines the `tabIndex` of the element.
|
222
|
+
* Returns `0` if the element is the current tab stop; otherwise, returns `-1`.
|
223
|
+
* @ignore
|
224
|
+
*/
|
225
|
+
get tabIndex() {
|
226
|
+
return this.isCurrentTabStop() ? 0 : -1;
|
227
|
+
}
|
228
|
+
/** @ignore */
|
229
|
+
handleMouseDown(event) {
|
230
|
+
if (!this.focusable) {
|
231
|
+
// We prevent focusing non-focusable items on `mousedown`.
|
232
|
+
// Even though the item has tabIndex={-1}, that only means take it out of the tab order.
|
233
|
+
event.preventDefault();
|
234
|
+
}
|
235
|
+
else {
|
236
|
+
// Safari doesn't focus a button when clicked so we run our logic on mousedown also
|
237
|
+
this.parent.onItemFocus(this.id());
|
238
|
+
}
|
239
|
+
}
|
240
|
+
/** @ignore */
|
241
|
+
onFocus() {
|
242
|
+
this.parent.onItemFocus(this.id());
|
243
|
+
}
|
244
|
+
/**
|
245
|
+
* Handles the `keydown` event for keyboard navigation within the roving focus group.
|
246
|
+
* Supports navigation based on orientation and direction, and focuses appropriate elements.
|
247
|
+
*
|
248
|
+
* @param event The `KeyboardEvent` object.
|
249
|
+
* @ignore
|
250
|
+
*/
|
251
|
+
handleKeydown(event) {
|
252
|
+
if (event.key === 'Tab' && event.shiftKey) {
|
253
|
+
this.parent.onItemShiftTab();
|
254
|
+
return;
|
255
|
+
}
|
256
|
+
if (event.target !== this.elementRef.nativeElement)
|
257
|
+
return;
|
258
|
+
const focusIntent = getFocusIntent(event, this.parent.orientation, this.parent.dir);
|
259
|
+
if (focusIntent !== undefined) {
|
260
|
+
if (event.metaKey || event.ctrlKey || event.altKey || (this.allowShiftKey ? false : event.shiftKey)) {
|
261
|
+
return;
|
262
|
+
}
|
263
|
+
event.preventDefault();
|
264
|
+
let candidateNodes = this.parent.focusableItems().filter((item) => item.dataset['disabled'] !== '');
|
265
|
+
if (focusIntent === 'last') {
|
266
|
+
candidateNodes.reverse();
|
267
|
+
}
|
268
|
+
else if (focusIntent === 'prev' || focusIntent === 'next') {
|
269
|
+
if (focusIntent === 'prev')
|
270
|
+
candidateNodes.reverse();
|
271
|
+
const currentIndex = candidateNodes.indexOf(this.elementRef.nativeElement);
|
272
|
+
candidateNodes = this.parent.loop
|
273
|
+
? wrapArray(candidateNodes, currentIndex + 1)
|
274
|
+
: candidateNodes.slice(currentIndex + 1);
|
275
|
+
}
|
276
|
+
this.ngZone.runOutsideAngular(() => {
|
277
|
+
// eslint-disable-next-line promise/always-return,promise/catch-or-return
|
278
|
+
Promise.resolve().then(() => {
|
279
|
+
focusFirst(candidateNodes, false, this.elementRef.nativeElement);
|
280
|
+
});
|
281
|
+
});
|
282
|
+
}
|
283
|
+
}
|
284
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxRovingFocusItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
285
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.2.11", type: RdxRovingFocusItemDirective, isStandalone: true, selector: "[rdxRovingFocusItem]", inputs: { focusable: ["focusable", "focusable", booleanAttribute], active: ["active", "active", booleanAttribute], tabStopId: "tabStopId", allowShiftKey: ["allowShiftKey", "allowShiftKey", booleanAttribute] }, host: { listeners: { "mousedown": "handleMouseDown($event)", "keydown": "handleKeydown($event)", "focus": "onFocus()" }, properties: { "attr.tabindex": "tabIndex", "attr.data-orientation": "parent.orientation", "attr.data-active": "active", "attr.data-disabled": "!focusable ? \"\" : undefined" } }, ngImport: i0 }); }
|
286
|
+
}
|
287
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxRovingFocusItemDirective, decorators: [{
|
288
|
+
type: Directive,
|
289
|
+
args: [{
|
290
|
+
selector: '[rdxRovingFocusItem]',
|
291
|
+
standalone: true,
|
292
|
+
host: {
|
293
|
+
'[attr.tabindex]': 'tabIndex',
|
294
|
+
'[attr.data-orientation]': 'parent.orientation',
|
295
|
+
'[attr.data-active]': 'active',
|
296
|
+
'[attr.data-disabled]': '!focusable ? "" : undefined',
|
297
|
+
'(mousedown)': 'handleMouseDown($event)',
|
298
|
+
'(keydown)': 'handleKeydown($event)',
|
299
|
+
'(focus)': 'onFocus()'
|
300
|
+
}
|
301
|
+
}]
|
302
|
+
}], propDecorators: { focusable: [{
|
303
|
+
type: Input,
|
304
|
+
args: [{ transform: booleanAttribute }]
|
305
|
+
}], active: [{
|
306
|
+
type: Input,
|
307
|
+
args: [{ transform: booleanAttribute }]
|
308
|
+
}], tabStopId: [{
|
309
|
+
type: Input
|
310
|
+
}], allowShiftKey: [{
|
311
|
+
type: Input,
|
312
|
+
args: [{ transform: booleanAttribute }]
|
313
|
+
}] } });
|
314
|
+
|
315
|
+
/**
|
316
|
+
* Generated bundle index. Do not edit.
|
317
|
+
*/
|
318
|
+
|
319
|
+
export { RdxRovingFocusGroupDirective, RdxRovingFocusItemDirective };
|
320
|
+
//# sourceMappingURL=radix-ng-primitives-roving-focus.mjs.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"radix-ng-primitives-roving-focus.mjs","sources":["../../../packages/primitives/roving-focus/src/utils.ts","../../../packages/primitives/roving-focus/src/roving-focus-group.directive.ts","../../../packages/primitives/roving-focus/src/roving-focus-item.directive.ts","../../../packages/primitives/roving-focus/radix-ng-primitives-roving-focus.ts"],"sourcesContent":["export type Orientation = 'horizontal' | 'vertical';\nexport type Direction = 'ltr' | 'rtl';\n\nexport const ENTRY_FOCUS = 'rovingFocusGroup.onEntryFocus';\nexport const EVENT_OPTIONS = { bubbles: false, cancelable: true };\n\ntype FocusIntent = 'first' | 'last' | 'prev' | 'next';\n\nexport const MAP_KEY_TO_FOCUS_INTENT: Record<string, FocusIntent> = {\n ArrowLeft: 'prev',\n ArrowUp: 'prev',\n ArrowRight: 'next',\n ArrowDown: 'next',\n PageUp: 'first',\n Home: 'first',\n PageDown: 'last',\n End: 'last'\n};\n\nexport function getDirectionAwareKey(key: string, dir?: Direction) {\n if (dir !== 'rtl') return key;\n return key === 'ArrowLeft' ? 'ArrowRight' : key === 'ArrowRight' ? 'ArrowLeft' : key;\n}\n\nexport function getFocusIntent(event: KeyboardEvent, orientation?: Orientation, dir?: Direction) {\n const key = getDirectionAwareKey(event.key, dir);\n if (orientation === 'vertical' && ['ArrowLeft', 'ArrowRight'].includes(key)) return undefined;\n if (orientation === 'horizontal' && ['ArrowUp', 'ArrowDown'].includes(key)) return undefined;\n return MAP_KEY_TO_FOCUS_INTENT[key];\n}\n\nexport function focusFirst(candidates: HTMLElement[], preventScroll = false, rootNode?: Document | ShadowRoot) {\n const PREVIOUSLY_FOCUSED_ELEMENT = rootNode?.activeElement ?? document.activeElement;\n for (const candidate of candidates) {\n // if focus is already where we want to go, we don't want to keep going through the candidates\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate.focus({ preventScroll });\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n}\n\n/**\n * Wraps an array around itself at a given start index\n * Example: `wrapArray(['a', 'b', 'c', 'd'], 2) === ['c', 'd', 'a', 'b']`\n */\nexport function wrapArray<T>(array: T[], startIndex: number) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\n\nexport function generateId(): string {\n return `rf-item-${Math.random().toString(36).slice(2, 11)}`;\n}\n","import {\n booleanAttribute,\n Directive,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n NgZone,\n Output,\n signal\n} from '@angular/core';\nimport { Direction, ENTRY_FOCUS, EVENT_OPTIONS, focusFirst, Orientation } from './utils';\n\n@Directive({\n selector: '[rdxRovingFocusGroup]',\n standalone: true,\n host: {\n '[attr.data-orientation]': 'dataOrientation',\n '[attr.tabindex]': 'tabIndex',\n '[attr.dir]': 'dir',\n '(focus)': 'handleFocus($event)',\n '(blur)': 'handleBlur()',\n '(mouseup)': 'handleMouseUp()',\n '(mousedown)': 'handleMouseDown()',\n style: 'outline: none;'\n }\n})\nexport class RdxRovingFocusGroupDirective {\n private readonly ngZone = inject(NgZone);\n private readonly elementRef = inject(ElementRef);\n\n @Input() orientation: Orientation | undefined;\n @Input() dir: Direction = 'ltr';\n @Input({ transform: booleanAttribute }) loop: boolean = true;\n @Input({ transform: booleanAttribute }) preventScrollOnEntryFocus: boolean = false;\n\n @Output() entryFocus = new EventEmitter<Event>();\n @Output() currentTabStopIdChange = new EventEmitter<string | null>();\n\n /** @ignore */\n readonly currentTabStopId = signal<string | null>(null);\n\n /** @ignore */\n readonly focusableItems = signal<HTMLElement[]>([]);\n\n private readonly isClickFocus = signal(false);\n private readonly isTabbingBackOut = signal(false);\n private readonly focusableItemsCount = signal(0);\n\n /** @ignore */\n get dataOrientation() {\n return this.orientation || 'horizontal';\n }\n\n /** @ignore */\n get tabIndex() {\n return this.isTabbingBackOut() || this.getFocusableItemsCount() === 0 ? -1 : 0;\n }\n\n /** @ignore */\n handleBlur() {\n this.isTabbingBackOut.set(false);\n }\n\n /** @ignore */\n handleMouseUp() {\n // reset `isClickFocus` after 1 tick because handleFocus might not triggered due to focused element\n this.ngZone.runOutsideAngular(() => {\n // eslint-disable-next-line promise/catch-or-return,promise/always-return\n Promise.resolve().then(() => {\n this.ngZone.run(() => {\n this.isClickFocus.set(false);\n });\n });\n });\n }\n\n /** @ignore */\n handleFocus(event: FocusEvent) {\n // We normally wouldn't need this check, because we already check\n // that the focus is on the current target and not bubbling to it.\n // We do this because Safari doesn't focus buttons when clicked, and\n // instead, the wrapper will get focused and not through a bubbling event.\n const isKeyboardFocus = !this.isClickFocus();\n\n if (\n event.currentTarget === this.elementRef.nativeElement &&\n event.target === event.currentTarget &&\n isKeyboardFocus &&\n !this.isTabbingBackOut()\n ) {\n const entryFocusEvent = new CustomEvent(ENTRY_FOCUS, EVENT_OPTIONS);\n this.elementRef.nativeElement.dispatchEvent(entryFocusEvent);\n this.entryFocus.emit(entryFocusEvent);\n\n if (!entryFocusEvent.defaultPrevented) {\n const items = this.focusableItems().filter((item) => item.dataset['disabled'] !== '');\n const activeItem = items.find((item) => item.getAttribute('data-active') === 'true');\n const currentItem = items.find((item) => item.id === this.currentTabStopId());\n const candidateItems = [activeItem, currentItem, ...items].filter(Boolean) as HTMLElement[];\n\n focusFirst(candidateItems, this.preventScrollOnEntryFocus);\n }\n }\n this.isClickFocus.set(false);\n }\n\n /** @ignore */\n handleMouseDown() {\n this.isClickFocus.set(true);\n }\n\n /** @ignore */\n onItemFocus(tabStopId: string) {\n this.currentTabStopId.set(tabStopId);\n this.currentTabStopIdChange.emit(tabStopId);\n }\n\n /** @ignore */\n onItemShiftTab() {\n this.isTabbingBackOut.set(true);\n }\n\n /** @ignore */\n onFocusableItemAdd() {\n this.focusableItemsCount.update((count) => count + 1);\n }\n\n /** @ignore */\n onFocusableItemRemove() {\n this.focusableItemsCount.update((count) => Math.max(0, count - 1));\n }\n\n /** @ignore */\n registerItem(item: HTMLElement) {\n const currentItems = this.focusableItems();\n this.focusableItems.set([...currentItems, item]);\n }\n\n /** @ignore */\n unregisterItem(item: HTMLElement) {\n const currentItems = this.focusableItems();\n this.focusableItems.set(currentItems.filter((el) => el !== item));\n }\n\n /** @ignore */\n getFocusableItemsCount() {\n return this.focusableItemsCount();\n }\n}\n","import {\n booleanAttribute,\n computed,\n Directive,\n ElementRef,\n inject,\n Input,\n NgZone,\n OnDestroy,\n OnInit\n} from '@angular/core';\nimport { RdxRovingFocusGroupDirective } from './roving-focus-group.directive';\nimport { focusFirst, generateId, getFocusIntent, wrapArray } from './utils';\n\n@Directive({\n selector: '[rdxRovingFocusItem]',\n standalone: true,\n host: {\n '[attr.tabindex]': 'tabIndex',\n '[attr.data-orientation]': 'parent.orientation',\n '[attr.data-active]': 'active',\n '[attr.data-disabled]': '!focusable ? \"\" : undefined',\n '(mousedown)': 'handleMouseDown($event)',\n '(keydown)': 'handleKeydown($event)',\n '(focus)': 'onFocus()'\n }\n})\nexport class RdxRovingFocusItemDirective implements OnInit, OnDestroy {\n private readonly elementRef = inject(ElementRef);\n private readonly ngZone = inject(NgZone);\n protected readonly parent = inject(RdxRovingFocusGroupDirective);\n\n @Input({ transform: booleanAttribute }) focusable: boolean = true;\n @Input({ transform: booleanAttribute }) active: boolean = true;\n @Input() tabStopId: string;\n @Input({ transform: booleanAttribute }) allowShiftKey: boolean = false;\n\n private readonly id = computed(() => this.tabStopId || generateId());\n\n /** @ignore */\n readonly isCurrentTabStop = computed(() => this.parent.currentTabStopId() === this.id());\n\n /**\n * Lifecycle hook triggered on initialization.\n * Registers the element with the parent roving focus group if it is focusable.\n * @ignore\n */\n ngOnInit() {\n if (this.focusable) {\n this.parent.registerItem(this.elementRef.nativeElement);\n this.parent.onFocusableItemAdd();\n }\n }\n\n /**\n * Lifecycle hook triggered on destruction.\n * Unregisters the element from the parent roving focus group if it is focusable.\n * @ignore\n */\n ngOnDestroy() {\n if (this.focusable) {\n this.parent.unregisterItem(this.elementRef.nativeElement);\n this.parent.onFocusableItemRemove();\n }\n }\n\n /**\n * Determines the `tabIndex` of the element.\n * Returns `0` if the element is the current tab stop; otherwise, returns `-1`.\n * @ignore\n */\n get tabIndex() {\n return this.isCurrentTabStop() ? 0 : -1;\n }\n\n /** @ignore */\n handleMouseDown(event: MouseEvent) {\n if (!this.focusable) {\n // We prevent focusing non-focusable items on `mousedown`.\n // Even though the item has tabIndex={-1}, that only means take it out of the tab order.\n event.preventDefault();\n } else {\n // Safari doesn't focus a button when clicked so we run our logic on mousedown also\n this.parent.onItemFocus(this.id());\n }\n }\n\n /** @ignore */\n onFocus() {\n this.parent.onItemFocus(this.id());\n }\n\n /**\n * Handles the `keydown` event for keyboard navigation within the roving focus group.\n * Supports navigation based on orientation and direction, and focuses appropriate elements.\n *\n * @param event The `KeyboardEvent` object.\n * @ignore\n */\n handleKeydown(event: KeyboardEvent) {\n if (event.key === 'Tab' && event.shiftKey) {\n this.parent.onItemShiftTab();\n return;\n }\n\n if (event.target !== this.elementRef.nativeElement) return;\n\n const focusIntent = getFocusIntent(event, this.parent.orientation, this.parent.dir);\n\n if (focusIntent !== undefined) {\n if (event.metaKey || event.ctrlKey || event.altKey || (this.allowShiftKey ? false : event.shiftKey)) {\n return;\n }\n\n event.preventDefault();\n\n let candidateNodes = this.parent.focusableItems().filter((item) => item.dataset['disabled'] !== '');\n\n if (focusIntent === 'last') {\n candidateNodes.reverse();\n } else if (focusIntent === 'prev' || focusIntent === 'next') {\n if (focusIntent === 'prev') candidateNodes.reverse();\n const currentIndex = candidateNodes.indexOf(this.elementRef.nativeElement);\n\n candidateNodes = this.parent.loop\n ? wrapArray(candidateNodes, currentIndex + 1)\n : candidateNodes.slice(currentIndex + 1);\n }\n\n this.ngZone.runOutsideAngular(() => {\n // eslint-disable-next-line promise/always-return,promise/catch-or-return\n Promise.resolve().then(() => {\n focusFirst(candidateNodes, false, this.elementRef.nativeElement);\n });\n });\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
@@ -328,13 +328,16 @@ class RdxSelectItemDirective {
|
|
328
328
|
}
|
329
329
|
});
|
330
330
|
}
|
331
|
-
/** Gets the label to be used when determining whether the option should be focused.
|
331
|
+
/** Gets the label to be used when determining whether the option should be focused.
|
332
|
+
* @ignore
|
333
|
+
*/
|
332
334
|
getLabel() {
|
333
335
|
return this.viewValue;
|
334
336
|
}
|
335
337
|
/**
|
336
338
|
* `Selects the option while indicating the selection came from the user. Used to
|
337
339
|
* determine if the select's view -> model callback should be invoked.`
|
340
|
+
* @ignore
|
338
341
|
*/
|
339
342
|
selectViaInteraction() {
|
340
343
|
if (!this.disabled) {
|
@@ -342,6 +345,7 @@ class RdxSelectItemDirective {
|
|
342
345
|
this.onSelectionChange.emit(new RdxSelectItemChange(this));
|
343
346
|
}
|
344
347
|
}
|
348
|
+
/** @ignore */
|
345
349
|
handleKeydown(event) {
|
346
350
|
if (event.keyCode === ENTER || event.keyCode === SPACE) {
|
347
351
|
this.selectViaInteraction();
|
@@ -350,10 +354,12 @@ class RdxSelectItemDirective {
|
|
350
354
|
event.stopPropagation();
|
351
355
|
}
|
352
356
|
}
|
357
|
+
/** @ignore */
|
353
358
|
setActiveStyles() {
|
354
359
|
this.highlighted = true;
|
355
360
|
this.nativeElement.focus({ preventScroll: true });
|
356
361
|
}
|
362
|
+
/** @ignore */
|
357
363
|
setInactiveStyles() {
|
358
364
|
this.highlighted = false;
|
359
365
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"radix-ng-primitives-select.mjs","sources":["../../../packages/primitives/select/src/select-value.directive.ts","../../../packages/primitives/select/src/select-trigger.directive.ts","../../../packages/primitives/select/src/select.component.ts","../../../packages/primitives/select/src/select-item.directive.ts","../../../packages/primitives/select/src/select-content.directive.ts","../../../packages/primitives/select/src/select-group.directive.ts","../../../packages/primitives/select/src/select-icon.directive.ts","../../../packages/primitives/select/src/select-item-indicator.directive.ts","../../../packages/primitives/select/src/select-label.directive.ts","../../../packages/primitives/select/src/select-separator.directive.ts","../../../packages/primitives/select/index.ts","../../../packages/primitives/select/radix-ng-primitives-select.ts"],"sourcesContent":["import { Component, inject, Input } from '@angular/core';\nimport { RdxSelectComponent } from './select.component';\n\n@Component({\n selector: '[rdxSelectValue]',\n standalone: true,\n exportAs: 'rdxSelectValue',\n template: `\n {{ select.selectionModel.isEmpty() ? placeholder : select.selected }}\n `,\n styles: `\n /* we don't want events from the children to bubble through the item they came from */\n :host {\n pointer-events: none;\n }\n `\n})\nexport class RdxSelectValueDirective {\n select = inject(RdxSelectComponent);\n\n @Input() placeholder: string;\n}\n","import { ContentChild, Directive, ElementRef, inject } from '@angular/core';\nimport { RdxSelectValueDirective } from './select-value.directive';\nimport { RdxSelectComponent } from './select.component';\n\n@Directive({\n selector: '[rdxSelectTrigger]',\n standalone: true,\n host: {\n '[attr.type]': '\"button\"',\n '[attr.role]': '\"combobox\"',\n '[attr.aria-autocomplete]': '\"none\"',\n '[attr.dir]': 'select.dir.value',\n '[attr.aria-expanded]': 'select.open',\n '[attr.aria-required]': 'select.required',\n\n '[attr.disabled]': 'select.disabled ? \"\" : null',\n '[attr.data-disabled]': 'select.disabled ? \"\" : null',\n '[attr.data-state]': \"select.open ? 'open': 'closed'\",\n '[attr.data-placeholder]': 'value.placeholder || null'\n }\n})\nexport class RdxSelectTriggerDirective {\n protected nativeElement = inject(ElementRef).nativeElement;\n protected select = inject(RdxSelectComponent);\n\n @ContentChild(RdxSelectValueDirective) protected value: RdxSelectValueDirective;\n\n focus() {\n this.nativeElement.focus();\n }\n}\n","import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { CdkConnectedOverlay, ConnectedPosition, Overlay, OverlayModule } from '@angular/cdk/overlay';\nimport {\n AfterContentInit,\n booleanAttribute,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n DestroyRef,\n ElementRef,\n EventEmitter,\n forwardRef,\n inject,\n Input,\n NgZone,\n OnInit,\n Output,\n QueryList,\n ViewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { defer, delay, merge, Observable, Subscription, switchMap, take } from 'rxjs';\nimport { RdxSelectContentDirective } from './select-content.directive';\nimport { RdxSelectItemChange, RdxSelectItemDirective } from './select-item.directive';\nimport { RdxSelectTriggerDirective } from './select-trigger.directive';\n\nlet nextId = 0;\n\n@Component({\n standalone: true,\n selector: '[rdxSelect]',\n template: `\n <ng-content select=\"[rdxSelectTrigger]\" />\n\n <ng-template\n [cdkConnectedOverlayOpen]=\"open\"\n [cdkConnectedOverlayOrigin]=\"elementRef\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayScrollStrategy]=\"overlay.scrollStrategies.reposition()\"\n (attach)=\"onAttached()\"\n (backdropClick)=\"close()\"\n (detach)=\"onDetach()\"\n cdkConnectedOverlay\n >\n <ng-content select=\"[rdxSelectContent]\" />\n </ng-template>\n `,\n host: {\n '(click)': 'toggle()',\n '(keydown)': 'content.keyManager.onKeydown($event)'\n },\n imports: [\n OverlayModule\n ]\n})\nexport class RdxSelectComponent implements OnInit, AfterContentInit {\n protected overlay = inject(Overlay);\n protected elementRef = inject(ElementRef);\n protected changeDetectorRef = inject(ChangeDetectorRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly ngZone = inject(NgZone);\n\n @ContentChild(RdxSelectTriggerDirective) protected trigger: RdxSelectTriggerDirective;\n\n @ContentChild(forwardRef(() => RdxSelectContentDirective))\n protected content: RdxSelectContentDirective;\n\n @ContentChildren(forwardRef(() => RdxSelectItemDirective), { descendants: true })\n items: QueryList<RdxSelectItemDirective>;\n\n @ViewChild(CdkConnectedOverlay, { static: false }) overlayDir: CdkConnectedOverlay;\n\n /** Deals with the selection logic. */\n selectionModel: SelectionModel<RdxSelectItemDirective>;\n\n /**\n * This position config ensures that the top \"start\" corner of the overlay\n * is aligned with the top \"start\" of the origin by default (overlapping\n * the trigger completely). If the panel cannot fit below the trigger, it\n * will fall back to a position above the trigger.\n */\n positions: ConnectedPosition[] = [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top'\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom'\n }\n ];\n\n private closeSubscription = Subscription.EMPTY;\n\n /**\n * @ignore\n */\n readonly dir = inject(Directionality, { optional: true });\n\n /**\n * @ignore\n */\n protected keyManager: ActiveDescendantKeyManager<RdxSelectItemDirective>;\n\n /**\n * @ignore\n */\n readonly id: string = `rdx-select-${nextId++}`;\n\n @Input() defaultValue: string;\n @Input() name: string;\n\n @Input({ transform: booleanAttribute }) defaultOpen: boolean;\n\n @Input({ transform: booleanAttribute }) open: boolean = false;\n\n /** Whether the Select is disabled. */\n @Input({ transform: booleanAttribute }) disabled: boolean;\n\n @Input({ transform: booleanAttribute }) required: boolean;\n\n /**\n * The controlled value of the item to expand\n */\n @Input()\n set value(value: string) {\n if (this._value !== value) {\n this._value = value;\n\n this.selectValue(value);\n\n this.changeDetectorRef.markForCheck();\n }\n }\n\n get value(): string | null {\n return this._value ?? this.defaultValue;\n }\n\n private _value?: string;\n\n @Output() readonly onValueChange: EventEmitter<string> = new EventEmitter<string>();\n\n @Output() readonly onOpenChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n readonly optionSelectionChanges: Observable<RdxSelectItemChange> = defer(() => {\n if (this.content.options) {\n return merge(...this.content.options.map((option) => option.onSelectionChange));\n }\n\n return this.ngZone.onStable.asObservable().pipe(\n take(1),\n switchMap(() => this.optionSelectionChanges)\n );\n }) as Observable<RdxSelectItemChange>;\n\n get selected(): string | null {\n return this.selectionModel.selected[0].viewValue || null;\n }\n\n ngOnInit() {\n this.selectionModel = new SelectionModel<RdxSelectItemDirective>();\n\n this.selectionModel.changed.subscribe((changes) => {\n if (changes.added.length) {\n this.onValueChange.emit(this.selectionModel.selected[0].value);\n }\n\n if (changes.removed.length) {\n changes.removed.forEach((item) => (item.selected = false));\n }\n });\n }\n\n ngAfterContentInit() {\n this.selectDefaultValue();\n\n this.optionSelectionChanges.subscribe((event) => {\n this.selectionModel.clear();\n\n this.selectionModel.select(event.source);\n\n this.close();\n this.trigger.focus();\n });\n\n this.content.keyManager.tabOut.subscribe(() => {\n if (this.open) this.close();\n });\n\n if (this.defaultOpen) {\n this.openPanel();\n }\n }\n\n /**\n * Callback that is invoked when the overlay panel has been attached.\n */\n onAttached(): void {\n this.closeSubscription = this.closingActions()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .pipe(delay(0))\n .subscribe(() => this.close());\n }\n\n onDetach() {\n this.close();\n this.closeSubscription.unsubscribe();\n }\n\n /** Toggles the overlay panel open or closed. */\n toggle(): void {\n if (this.open) {\n this.close();\n } else {\n this.openPanel();\n }\n }\n\n openPanel() {\n this.open = true;\n\n this.onOpenChange.emit(this.open);\n }\n\n close() {\n this.open = false;\n\n this.onOpenChange.emit(this.open);\n }\n\n updateActiveItem(item: RdxSelectItemDirective) {\n this.content.keyManager.updateActiveItem(item);\n }\n\n private selectDefaultValue(): void {\n if (!this.defaultValue) return;\n\n this.selectValue(this.defaultValue);\n }\n\n private selectValue(value: string): void {\n const option = this.content?.options.find((option) => option.value === value);\n\n if (option) {\n option.selected = true;\n option.highlighted = true;\n\n this.selectionModel.select(option);\n this.updateActiveItem(option);\n }\n }\n\n private closingActions() {\n return merge(this.overlayDir.overlayRef!.outsidePointerEvents(), this.overlayDir.overlayRef!.detachments());\n }\n}\n","import { Highlightable } from '@angular/cdk/a11y';\nimport { ENTER, SPACE } from '@angular/cdk/keycodes';\nimport { booleanAttribute, Directive, ElementRef, EventEmitter, inject, Input } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { RdxSelectContentDirective } from './select-content.directive';\nimport { RdxSelectComponent } from './select.component';\n\nlet nextId = 0;\n\nexport class RdxSelectItemChange<T = RdxSelectItemDirective> {\n constructor(public source: T) {}\n}\n\n@Directive({\n selector: '[rdxSelectItem]',\n standalone: true,\n exportAs: 'rdxSelectItem',\n host: {\n '[attr.role]': '\"option\"',\n '[attr.data-state]': 'dataState',\n '[attr.aria-selected]': 'selected',\n '[attr.data-disabled]': 'disabled || null',\n '[attr.data-highlighted]': 'highlighted || null',\n '[attr.tabindex]': '-1',\n '(focus)': 'content.highlighted.next(this)',\n '(click)': 'selectViaInteraction()',\n '(keydown)': 'handleKeydown($event)',\n '(pointermove)': 'onPointerMove()'\n }\n})\nexport class RdxSelectItemDirective implements Highlightable {\n protected readonly select = inject(RdxSelectComponent);\n protected readonly content = inject(RdxSelectContentDirective);\n readonly onSelectionChange = new EventEmitter<RdxSelectItemChange>();\n protected readonly nativeElement = inject(ElementRef).nativeElement;\n\n highlighted: boolean = false;\n\n selected: boolean;\n\n get dataState(): string {\n return this.selected ? 'checked' : 'unchecked';\n }\n\n /**\n * The unique SelectItem id.\n * @ignore\n */\n readonly id: string = `rdx-select-item-${nextId++}`;\n\n @Input()\n set value(value: string) {\n this._value = value;\n }\n\n get value(): string {\n return this._value || this.id;\n }\n\n private _value?: string;\n\n @Input() textValue: string | null = null;\n\n /** Whether the SelectItem is disabled. */\n @Input({ transform: booleanAttribute })\n set disabled(value: boolean) {\n this._disabled = value;\n }\n\n get disabled(): boolean {\n return this._disabled;\n }\n\n private _disabled: boolean;\n\n get viewValue(): string {\n return this.textValue ?? this.nativeElement.textContent;\n }\n\n constructor() {\n this.content.highlighted.pipe(takeUntilDestroyed()).subscribe((value) => {\n if (value !== this) {\n this.highlighted = false;\n }\n });\n }\n\n /** Gets the label to be used when determining whether the option should be focused. */\n getLabel(): string {\n return this.viewValue;\n }\n\n /**\n * `Selects the option while indicating the selection came from the user. Used to\n * determine if the select's view -> model callback should be invoked.`\n */\n selectViaInteraction(): void {\n if (!this.disabled) {\n this.selected = true;\n\n this.onSelectionChange.emit(new RdxSelectItemChange(this));\n }\n }\n\n handleKeydown(event: KeyboardEvent): void {\n if (event.keyCode === ENTER || event.keyCode === SPACE) {\n this.selectViaInteraction();\n\n // Prevent the page from scrolling down and form submits.\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n setActiveStyles(): void {\n this.highlighted = true;\n this.nativeElement.focus({ preventScroll: true });\n }\n\n setInactiveStyles(): void {\n this.highlighted = false;\n }\n\n protected onPointerMove(): void {\n if (!this.highlighted) {\n this.nativeElement.focus({ preventScroll: true });\n this.select.updateActiveItem(this);\n }\n }\n}\n","import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { AfterContentInit, ContentChildren, DestroyRef, Directive, inject, QueryList } from '@angular/core';\nimport { pairwise, startWith, Subject } from 'rxjs';\nimport { RdxSelectItemDirective } from './select-item.directive';\nimport { RdxSelectComponent } from './select.component';\n\n@Directive({\n selector: '[rdxSelectContent]',\n standalone: true,\n exportAs: 'rdxSelectContent',\n host: {\n '[attr.role]': '\"listbox\"',\n '[attr.data-state]': \"select.open ? 'open': 'closed'\",\n '[attr.data-side]': 'true',\n '[attr.data-align]': 'true',\n '(keydown)': 'keyManager.onKeydown($event)'\n }\n})\nexport class RdxSelectContentDirective implements AfterContentInit {\n protected readonly destroyRef = inject(DestroyRef);\n protected readonly dir = inject(Directionality, { optional: true });\n protected select = inject(RdxSelectComponent);\n\n readonly highlighted = new Subject<RdxSelectItemDirective>();\n\n keyManager: ActiveDescendantKeyManager<RdxSelectItemDirective>;\n\n @ContentChildren(RdxSelectItemDirective, { descendants: true })\n options: QueryList<RdxSelectItemDirective>;\n\n constructor() {\n this.highlighted.pipe(startWith(null), pairwise()).subscribe(([prev, item]) => {\n if (prev) {\n prev.highlighted = false;\n }\n\n if (item) {\n item.highlighted = true;\n }\n });\n }\n\n initKeyManager() {\n return new ActiveDescendantKeyManager<RdxSelectItemDirective>(this.options)\n .withTypeAhead()\n .withVerticalOrientation()\n .withHorizontalOrientation(this.dir?.value ?? 'ltr');\n }\n\n ngAfterContentInit(): void {\n this.keyManager = this.initKeyManager();\n }\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[rdxSelectGroup]',\n standalone: true,\n exportAs: 'rdxSelectGroup',\n host: {\n '[attr.role]': '\"group\"'\n }\n})\nexport class RdxSelectGroupDirective {}\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[rdxSelectIcon]',\n standalone: true,\n exportAs: 'rdxSelectIcon',\n host: {\n '[attr.aria-hidden]': 'true'\n }\n})\nexport class RdxSelectIconDirective {}\n","import { Directive, inject } from '@angular/core';\nimport { RdxSelectItemDirective } from './select-item.directive';\n\n@Directive({\n selector: '[rdxSelectItemIndicator]',\n standalone: true,\n exportAs: 'rdxSelectItemIndicator',\n host: {\n '[attr.aria-hidden]': 'true',\n '[style.display]': 'item.selected ? \"\" : \"none\"'\n }\n})\nexport class RdxSelectItemIndicatorDirective {\n protected item = inject(RdxSelectItemDirective);\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[rdxSelectLabel]',\n standalone: true,\n exportAs: 'rdxSelectLabel'\n})\nexport class RdxSelectLabelDirective {}\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[rdxSelectSeparator]',\n standalone: true,\n exportAs: 'rdxSelectSeparator',\n host: {\n '[attr.aria-hidden]': 'true'\n }\n})\nexport class RdxSelectSeparatorDirective {}\n","import { NgModule } from '@angular/core';\nimport { RdxSelectContentDirective } from './src/select-content.directive';\nimport { RdxSelectGroupDirective } from './src/select-group.directive';\nimport { RdxSelectIconDirective } from './src/select-icon.directive';\nimport { RdxSelectItemIndicatorDirective } from './src/select-item-indicator.directive';\nimport { RdxSelectItemDirective } from './src/select-item.directive';\nimport { RdxSelectLabelDirective } from './src/select-label.directive';\nimport { RdxSelectSeparatorDirective } from './src/select-separator.directive';\nimport { RdxSelectTriggerDirective } from './src/select-trigger.directive';\nimport { RdxSelectValueDirective } from './src/select-value.directive';\nimport { RdxSelectComponent } from './src/select.component';\n\nexport * from './src/select-content.directive';\nexport * from './src/select-group.directive';\nexport * from './src/select-icon.directive';\nexport * from './src/select-item-indicator.directive';\nexport * from './src/select-item.directive';\nexport * from './src/select-label.directive';\nexport * from './src/select-separator.directive';\nexport * from './src/select-trigger.directive';\nexport * from './src/select-value.directive';\nexport * from './src/select.component';\n\nconst _imports = [\n RdxSelectContentDirective,\n RdxSelectGroupDirective,\n RdxSelectItemDirective,\n RdxSelectItemIndicatorDirective,\n RdxSelectLabelDirective,\n RdxSelectComponent,\n RdxSelectSeparatorDirective,\n RdxSelectTriggerDirective,\n RdxSelectValueDirective,\n RdxSelectIconDirective\n];\n\n@NgModule({\n imports: [..._imports],\n exports: [..._imports]\n})\nexport class RdxSelectModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["nextId"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"radix-ng-primitives-select.mjs","sources":["../../../packages/primitives/select/src/select-value.directive.ts","../../../packages/primitives/select/src/select-trigger.directive.ts","../../../packages/primitives/select/src/select.component.ts","../../../packages/primitives/select/src/select-item.directive.ts","../../../packages/primitives/select/src/select-content.directive.ts","../../../packages/primitives/select/src/select-group.directive.ts","../../../packages/primitives/select/src/select-icon.directive.ts","../../../packages/primitives/select/src/select-item-indicator.directive.ts","../../../packages/primitives/select/src/select-label.directive.ts","../../../packages/primitives/select/src/select-separator.directive.ts","../../../packages/primitives/select/index.ts","../../../packages/primitives/select/radix-ng-primitives-select.ts"],"sourcesContent":["import { Component, inject, Input } from '@angular/core';\nimport { RdxSelectComponent } from './select.component';\n\n@Component({\n selector: '[rdxSelectValue]',\n standalone: true,\n exportAs: 'rdxSelectValue',\n template: `\n {{ select.selectionModel.isEmpty() ? placeholder : select.selected }}\n `,\n styles: `\n /* we don't want events from the children to bubble through the item they came from */\n :host {\n pointer-events: none;\n }\n `\n})\nexport class RdxSelectValueDirective {\n select = inject(RdxSelectComponent);\n\n @Input() placeholder: string;\n}\n","import { ContentChild, Directive, ElementRef, inject } from '@angular/core';\nimport { RdxSelectValueDirective } from './select-value.directive';\nimport { RdxSelectComponent } from './select.component';\n\n@Directive({\n selector: '[rdxSelectTrigger]',\n standalone: true,\n host: {\n '[attr.type]': '\"button\"',\n '[attr.role]': '\"combobox\"',\n '[attr.aria-autocomplete]': '\"none\"',\n '[attr.dir]': 'select.dir.value',\n '[attr.aria-expanded]': 'select.open',\n '[attr.aria-required]': 'select.required',\n\n '[attr.disabled]': 'select.disabled ? \"\" : null',\n '[attr.data-disabled]': 'select.disabled ? \"\" : null',\n '[attr.data-state]': \"select.open ? 'open': 'closed'\",\n '[attr.data-placeholder]': 'value.placeholder || null'\n }\n})\nexport class RdxSelectTriggerDirective {\n protected nativeElement = inject(ElementRef).nativeElement;\n protected select = inject(RdxSelectComponent);\n\n @ContentChild(RdxSelectValueDirective) protected value: RdxSelectValueDirective;\n\n focus() {\n this.nativeElement.focus();\n }\n}\n","import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { CdkConnectedOverlay, ConnectedPosition, Overlay, OverlayModule } from '@angular/cdk/overlay';\nimport {\n AfterContentInit,\n booleanAttribute,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n DestroyRef,\n ElementRef,\n EventEmitter,\n forwardRef,\n inject,\n Input,\n NgZone,\n OnInit,\n Output,\n QueryList,\n ViewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { defer, delay, merge, Observable, Subscription, switchMap, take } from 'rxjs';\nimport { RdxSelectContentDirective } from './select-content.directive';\nimport { RdxSelectItemChange, RdxSelectItemDirective } from './select-item.directive';\nimport { RdxSelectTriggerDirective } from './select-trigger.directive';\n\nlet nextId = 0;\n\n@Component({\n standalone: true,\n selector: '[rdxSelect]',\n template: `\n <ng-content select=\"[rdxSelectTrigger]\" />\n\n <ng-template\n [cdkConnectedOverlayOpen]=\"open\"\n [cdkConnectedOverlayOrigin]=\"elementRef\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayScrollStrategy]=\"overlay.scrollStrategies.reposition()\"\n (attach)=\"onAttached()\"\n (backdropClick)=\"close()\"\n (detach)=\"onDetach()\"\n cdkConnectedOverlay\n >\n <ng-content select=\"[rdxSelectContent]\" />\n </ng-template>\n `,\n host: {\n '(click)': 'toggle()',\n '(keydown)': 'content.keyManager.onKeydown($event)'\n },\n imports: [\n OverlayModule\n ]\n})\nexport class RdxSelectComponent implements OnInit, AfterContentInit {\n protected overlay = inject(Overlay);\n protected elementRef = inject(ElementRef);\n protected changeDetectorRef = inject(ChangeDetectorRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly ngZone = inject(NgZone);\n\n @ContentChild(RdxSelectTriggerDirective) protected trigger: RdxSelectTriggerDirective;\n\n @ContentChild(forwardRef(() => RdxSelectContentDirective))\n protected content: RdxSelectContentDirective;\n\n @ContentChildren(forwardRef(() => RdxSelectItemDirective), { descendants: true })\n items: QueryList<RdxSelectItemDirective>;\n\n @ViewChild(CdkConnectedOverlay, { static: false }) overlayDir: CdkConnectedOverlay;\n\n /** Deals with the selection logic. */\n selectionModel: SelectionModel<RdxSelectItemDirective>;\n\n /**\n * This position config ensures that the top \"start\" corner of the overlay\n * is aligned with the top \"start\" of the origin by default (overlapping\n * the trigger completely). If the panel cannot fit below the trigger, it\n * will fall back to a position above the trigger.\n */\n positions: ConnectedPosition[] = [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top'\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom'\n }\n ];\n\n private closeSubscription = Subscription.EMPTY;\n\n /**\n * @ignore\n */\n readonly dir = inject(Directionality, { optional: true });\n\n /**\n * @ignore\n */\n protected keyManager: ActiveDescendantKeyManager<RdxSelectItemDirective>;\n\n /**\n * @ignore\n */\n readonly id: string = `rdx-select-${nextId++}`;\n\n @Input() defaultValue: string;\n @Input() name: string;\n\n @Input({ transform: booleanAttribute }) defaultOpen: boolean;\n\n @Input({ transform: booleanAttribute }) open: boolean = false;\n\n /** Whether the Select is disabled. */\n @Input({ transform: booleanAttribute }) disabled: boolean;\n\n @Input({ transform: booleanAttribute }) required: boolean;\n\n /**\n * The controlled value of the item to expand\n */\n @Input()\n set value(value: string) {\n if (this._value !== value) {\n this._value = value;\n\n this.selectValue(value);\n\n this.changeDetectorRef.markForCheck();\n }\n }\n\n get value(): string | null {\n return this._value ?? this.defaultValue;\n }\n\n private _value?: string;\n\n @Output() readonly onValueChange: EventEmitter<string> = new EventEmitter<string>();\n\n @Output() readonly onOpenChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n readonly optionSelectionChanges: Observable<RdxSelectItemChange> = defer(() => {\n if (this.content.options) {\n return merge(...this.content.options.map((option) => option.onSelectionChange));\n }\n\n return this.ngZone.onStable.asObservable().pipe(\n take(1),\n switchMap(() => this.optionSelectionChanges)\n );\n }) as Observable<RdxSelectItemChange>;\n\n get selected(): string | null {\n return this.selectionModel.selected[0].viewValue || null;\n }\n\n ngOnInit() {\n this.selectionModel = new SelectionModel<RdxSelectItemDirective>();\n\n this.selectionModel.changed.subscribe((changes) => {\n if (changes.added.length) {\n this.onValueChange.emit(this.selectionModel.selected[0].value);\n }\n\n if (changes.removed.length) {\n changes.removed.forEach((item) => (item.selected = false));\n }\n });\n }\n\n ngAfterContentInit() {\n this.selectDefaultValue();\n\n this.optionSelectionChanges.subscribe((event) => {\n this.selectionModel.clear();\n\n this.selectionModel.select(event.source);\n\n this.close();\n this.trigger.focus();\n });\n\n this.content.keyManager.tabOut.subscribe(() => {\n if (this.open) this.close();\n });\n\n if (this.defaultOpen) {\n this.openPanel();\n }\n }\n\n /**\n * Callback that is invoked when the overlay panel has been attached.\n */\n onAttached(): void {\n this.closeSubscription = this.closingActions()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .pipe(delay(0))\n .subscribe(() => this.close());\n }\n\n onDetach() {\n this.close();\n this.closeSubscription.unsubscribe();\n }\n\n /** Toggles the overlay panel open or closed. */\n toggle(): void {\n if (this.open) {\n this.close();\n } else {\n this.openPanel();\n }\n }\n\n openPanel() {\n this.open = true;\n\n this.onOpenChange.emit(this.open);\n }\n\n close() {\n this.open = false;\n\n this.onOpenChange.emit(this.open);\n }\n\n updateActiveItem(item: RdxSelectItemDirective) {\n this.content.keyManager.updateActiveItem(item);\n }\n\n private selectDefaultValue(): void {\n if (!this.defaultValue) return;\n\n this.selectValue(this.defaultValue);\n }\n\n private selectValue(value: string): void {\n const option = this.content?.options.find((option) => option.value === value);\n\n if (option) {\n option.selected = true;\n option.highlighted = true;\n\n this.selectionModel.select(option);\n this.updateActiveItem(option);\n }\n }\n\n private closingActions() {\n return merge(this.overlayDir.overlayRef!.outsidePointerEvents(), this.overlayDir.overlayRef!.detachments());\n }\n}\n","import { Highlightable } from '@angular/cdk/a11y';\nimport { ENTER, SPACE } from '@angular/cdk/keycodes';\nimport { booleanAttribute, Directive, ElementRef, EventEmitter, inject, Input } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { RdxSelectContentDirective } from './select-content.directive';\nimport { RdxSelectComponent } from './select.component';\n\nlet nextId = 0;\n\nexport class RdxSelectItemChange<T = RdxSelectItemDirective> {\n constructor(public source: T) {}\n}\n\n@Directive({\n selector: '[rdxSelectItem]',\n standalone: true,\n exportAs: 'rdxSelectItem',\n host: {\n '[attr.role]': '\"option\"',\n '[attr.data-state]': 'dataState',\n '[attr.aria-selected]': 'selected',\n '[attr.data-disabled]': 'disabled || null',\n '[attr.data-highlighted]': 'highlighted || null',\n '[attr.tabindex]': '-1',\n '(focus)': 'content.highlighted.next(this)',\n '(click)': 'selectViaInteraction()',\n '(keydown)': 'handleKeydown($event)',\n '(pointermove)': 'onPointerMove()'\n }\n})\nexport class RdxSelectItemDirective implements Highlightable {\n protected readonly select = inject(RdxSelectComponent);\n protected readonly content = inject(RdxSelectContentDirective);\n readonly onSelectionChange = new EventEmitter<RdxSelectItemChange>();\n protected readonly nativeElement = inject(ElementRef).nativeElement;\n\n highlighted: boolean = false;\n\n selected: boolean;\n\n get dataState(): string {\n return this.selected ? 'checked' : 'unchecked';\n }\n\n /**\n * The unique SelectItem id.\n * @ignore\n */\n readonly id: string = `rdx-select-item-${nextId++}`;\n\n @Input()\n set value(value: string) {\n this._value = value;\n }\n\n get value(): string {\n return this._value || this.id;\n }\n\n private _value?: string;\n\n @Input() textValue: string | null = null;\n\n /** Whether the SelectItem is disabled. */\n @Input({ transform: booleanAttribute })\n set disabled(value: boolean) {\n this._disabled = value;\n }\n\n get disabled(): boolean {\n return this._disabled;\n }\n\n private _disabled: boolean;\n\n get viewValue(): string {\n return this.textValue ?? this.nativeElement.textContent;\n }\n\n constructor() {\n this.content.highlighted.pipe(takeUntilDestroyed()).subscribe((value) => {\n if (value !== this) {\n this.highlighted = false;\n }\n });\n }\n\n /** Gets the label to be used when determining whether the option should be focused.\n * @ignore\n */\n getLabel(): string {\n return this.viewValue;\n }\n\n /**\n * `Selects the option while indicating the selection came from the user. Used to\n * determine if the select's view -> model callback should be invoked.`\n * @ignore\n */\n selectViaInteraction(): void {\n if (!this.disabled) {\n this.selected = true;\n\n this.onSelectionChange.emit(new RdxSelectItemChange(this));\n }\n }\n\n /** @ignore */\n handleKeydown(event: KeyboardEvent): void {\n if (event.keyCode === ENTER || event.keyCode === SPACE) {\n this.selectViaInteraction();\n\n // Prevent the page from scrolling down and form submits.\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n /** @ignore */\n setActiveStyles(): void {\n this.highlighted = true;\n this.nativeElement.focus({ preventScroll: true });\n }\n\n /** @ignore */\n setInactiveStyles(): void {\n this.highlighted = false;\n }\n\n protected onPointerMove(): void {\n if (!this.highlighted) {\n this.nativeElement.focus({ preventScroll: true });\n this.select.updateActiveItem(this);\n }\n }\n}\n","import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { AfterContentInit, ContentChildren, DestroyRef, Directive, inject, QueryList } from '@angular/core';\nimport { pairwise, startWith, Subject } from 'rxjs';\nimport { RdxSelectItemDirective } from './select-item.directive';\nimport { RdxSelectComponent } from './select.component';\n\n@Directive({\n selector: '[rdxSelectContent]',\n standalone: true,\n exportAs: 'rdxSelectContent',\n host: {\n '[attr.role]': '\"listbox\"',\n '[attr.data-state]': \"select.open ? 'open': 'closed'\",\n '[attr.data-side]': 'true',\n '[attr.data-align]': 'true',\n '(keydown)': 'keyManager.onKeydown($event)'\n }\n})\nexport class RdxSelectContentDirective implements AfterContentInit {\n protected readonly destroyRef = inject(DestroyRef);\n protected readonly dir = inject(Directionality, { optional: true });\n protected select = inject(RdxSelectComponent);\n\n readonly highlighted = new Subject<RdxSelectItemDirective>();\n\n keyManager: ActiveDescendantKeyManager<RdxSelectItemDirective>;\n\n @ContentChildren(RdxSelectItemDirective, { descendants: true })\n options: QueryList<RdxSelectItemDirective>;\n\n constructor() {\n this.highlighted.pipe(startWith(null), pairwise()).subscribe(([prev, item]) => {\n if (prev) {\n prev.highlighted = false;\n }\n\n if (item) {\n item.highlighted = true;\n }\n });\n }\n\n initKeyManager() {\n return new ActiveDescendantKeyManager<RdxSelectItemDirective>(this.options)\n .withTypeAhead()\n .withVerticalOrientation()\n .withHorizontalOrientation(this.dir?.value ?? 'ltr');\n }\n\n ngAfterContentInit(): void {\n this.keyManager = this.initKeyManager();\n }\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[rdxSelectGroup]',\n standalone: true,\n exportAs: 'rdxSelectGroup',\n host: {\n '[attr.role]': '\"group\"'\n }\n})\nexport class RdxSelectGroupDirective {}\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[rdxSelectIcon]',\n standalone: true,\n exportAs: 'rdxSelectIcon',\n host: {\n '[attr.aria-hidden]': 'true'\n }\n})\nexport class RdxSelectIconDirective {}\n","import { Directive, inject } from '@angular/core';\nimport { RdxSelectItemDirective } from './select-item.directive';\n\n@Directive({\n selector: '[rdxSelectItemIndicator]',\n standalone: true,\n exportAs: 'rdxSelectItemIndicator',\n host: {\n '[attr.aria-hidden]': 'true',\n '[style.display]': 'item.selected ? \"\" : \"none\"'\n }\n})\nexport class RdxSelectItemIndicatorDirective {\n protected item = inject(RdxSelectItemDirective);\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[rdxSelectLabel]',\n standalone: true,\n exportAs: 'rdxSelectLabel'\n})\nexport class RdxSelectLabelDirective {}\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[rdxSelectSeparator]',\n standalone: true,\n exportAs: 'rdxSelectSeparator',\n host: {\n '[attr.aria-hidden]': 'true'\n }\n})\nexport class RdxSelectSeparatorDirective {}\n","import { NgModule } from '@angular/core';\nimport { RdxSelectContentDirective } from './src/select-content.directive';\nimport { RdxSelectGroupDirective } from './src/select-group.directive';\nimport { RdxSelectIconDirective } from './src/select-icon.directive';\nimport { RdxSelectItemIndicatorDirective } from './src/select-item-indicator.directive';\nimport { RdxSelectItemDirective } from './src/select-item.directive';\nimport { RdxSelectLabelDirective } from './src/select-label.directive';\nimport { RdxSelectSeparatorDirective } from './src/select-separator.directive';\nimport { RdxSelectTriggerDirective } from './src/select-trigger.directive';\nimport { RdxSelectValueDirective } from './src/select-value.directive';\nimport { RdxSelectComponent } from './src/select.component';\n\nexport * from './src/select-content.directive';\nexport * from './src/select-group.directive';\nexport * from './src/select-icon.directive';\nexport * from './src/select-item-indicator.directive';\nexport * from './src/select-item.directive';\nexport * from './src/select-label.directive';\nexport * from './src/select-separator.directive';\nexport * from './src/select-trigger.directive';\nexport * from './src/select-value.directive';\nexport * from './src/select.component';\n\nconst _imports = [\n RdxSelectContentDirective,\n RdxSelectGroupDirective,\n RdxSelectItemDirective,\n RdxSelectItemIndicatorDirective,\n RdxSelectLabelDirective,\n RdxSelectComponent,\n RdxSelectSeparatorDirective,\n RdxSelectTriggerDirective,\n RdxSelectValueDirective,\n RdxSelectIconDirective\n];\n\n@NgModule({\n imports: [..._imports],\n exports: [..._imports]\n})\nexport class RdxSelectModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["nextId"],"mappings":"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"}
|