ng-primitives 0.90.0 → 0.91.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/a11y/index.d.ts +38 -46
- package/accordion/index.d.ts +252 -104
- package/ai/index.d.ts +1 -1
- package/autofill/index.d.ts +49 -9
- package/avatar/index.d.ts +96 -61
- package/breadcrumbs/index.d.ts +156 -16
- package/button/index.d.ts +23 -28
- package/checkbox/index.d.ts +93 -14
- package/combobox/index.d.ts +1 -1
- package/date-picker/index.d.ts +12 -11
- package/fesm2022/ng-primitives-a11y.mjs +36 -52
- package/fesm2022/ng-primitives-a11y.mjs.map +1 -1
- package/fesm2022/ng-primitives-accordion.mjs +210 -189
- package/fesm2022/ng-primitives-accordion.mjs.map +1 -1
- package/fesm2022/ng-primitives-ai.mjs +4 -4
- package/fesm2022/ng-primitives-ai.mjs.map +1 -1
- package/fesm2022/ng-primitives-autofill.mjs +53 -36
- package/fesm2022/ng-primitives-autofill.mjs.map +1 -1
- package/fesm2022/ng-primitives-avatar.mjs +97 -138
- package/fesm2022/ng-primitives-avatar.mjs.map +1 -1
- package/fesm2022/ng-primitives-breadcrumbs.mjs +92 -35
- package/fesm2022/ng-primitives-breadcrumbs.mjs.map +1 -1
- package/fesm2022/ng-primitives-button.mjs +14 -36
- package/fesm2022/ng-primitives-button.mjs.map +1 -1
- package/fesm2022/ng-primitives-checkbox.mjs +87 -65
- package/fesm2022/ng-primitives-checkbox.mjs.map +1 -1
- package/fesm2022/ng-primitives-combobox.mjs +9 -9
- package/fesm2022/ng-primitives-combobox.mjs.map +1 -1
- package/fesm2022/ng-primitives-date-picker.mjs +5 -4
- package/fesm2022/ng-primitives-date-picker.mjs.map +1 -1
- package/fesm2022/ng-primitives-form-field.mjs +48 -16
- package/fesm2022/ng-primitives-form-field.mjs.map +1 -1
- package/fesm2022/ng-primitives-input.mjs +32 -48
- package/fesm2022/ng-primitives-input.mjs.map +1 -1
- package/fesm2022/ng-primitives-interactions.mjs +4 -4
- package/fesm2022/ng-primitives-interactions.mjs.map +1 -1
- package/fesm2022/ng-primitives-listbox.mjs.map +1 -1
- package/fesm2022/ng-primitives-menu.mjs +13 -6
- package/fesm2022/ng-primitives-menu.mjs.map +1 -1
- package/fesm2022/ng-primitives-pagination.mjs +6 -6
- package/fesm2022/ng-primitives-pagination.mjs.map +1 -1
- package/fesm2022/ng-primitives-progress.mjs +2 -2
- package/fesm2022/ng-primitives-progress.mjs.map +1 -1
- package/fesm2022/ng-primitives-radio.mjs +3 -3
- package/fesm2022/ng-primitives-radio.mjs.map +1 -1
- package/fesm2022/ng-primitives-roving-focus.mjs +259 -236
- package/fesm2022/ng-primitives-roving-focus.mjs.map +1 -1
- package/fesm2022/ng-primitives-search.mjs.map +1 -1
- package/fesm2022/ng-primitives-select.mjs +8 -8
- package/fesm2022/ng-primitives-select.mjs.map +1 -1
- package/fesm2022/ng-primitives-slider.mjs +195 -172
- package/fesm2022/ng-primitives-slider.mjs.map +1 -1
- package/fesm2022/ng-primitives-state.mjs +172 -2
- package/fesm2022/ng-primitives-state.mjs.map +1 -1
- package/fesm2022/ng-primitives-switch.mjs +90 -88
- package/fesm2022/ng-primitives-switch.mjs.map +1 -1
- package/fesm2022/ng-primitives-tabs.mjs +4 -1
- package/fesm2022/ng-primitives-tabs.mjs.map +1 -1
- package/fesm2022/ng-primitives-textarea.mjs +27 -35
- package/fesm2022/ng-primitives-textarea.mjs.map +1 -1
- package/fesm2022/ng-primitives-toggle-group.mjs +134 -136
- package/fesm2022/ng-primitives-toggle-group.mjs.map +1 -1
- package/fesm2022/ng-primitives-toggle.mjs +69 -58
- package/fesm2022/ng-primitives-toggle.mjs.map +1 -1
- package/fesm2022/ng-primitives-toolbar.mjs +26 -35
- package/fesm2022/ng-primitives-toolbar.mjs.map +1 -1
- package/fesm2022/ng-primitives-utils.mjs +48 -35
- package/fesm2022/ng-primitives-utils.mjs.map +1 -1
- package/form-field/index.d.ts +7 -3
- package/input/index.d.ts +61 -24
- package/interactions/index.d.ts +5 -5
- package/listbox/index.d.ts +1 -1
- package/menu/index.d.ts +3 -2
- package/package.json +1 -1
- package/pagination/index.d.ts +7 -7
- package/roving-focus/index.d.ts +77 -101
- package/schematics/ng-add/schema.d.ts +0 -1
- package/schematics/ng-generate/templates/checkbox/checkbox.__fileSuffix@dasherize__.ts.template +2 -2
- package/schematics/ng-generate/templates/slider/slider.__fileSuffix@dasherize__.ts.template +6 -3
- package/schematics/ng-generate/templates/switch/switch.__fileSuffix@dasherize__.ts.template +2 -2
- package/schematics/ng-generate/templates/toggle/toggle.__fileSuffix@dasherize__.ts.template +2 -2
- package/schematics/ng-generate/templates/toggle-group/toggle-group.__fileSuffix@dasherize__.ts.template +2 -2
- package/schematics/ng-generate/templates/toolbar/toolbar.__fileSuffix@dasherize__.ts.template +1 -1
- package/search/index.d.ts +1 -1
- package/select/index.d.ts +2 -2
- package/slider/index.d.ts +195 -56
- package/state/index.d.ts +57 -3
- package/switch/index.d.ts +103 -28
- package/textarea/index.d.ts +63 -8
- package/toggle/index.d.ts +65 -24
- package/toggle-group/index.d.ts +79 -54
- package/toolbar/index.d.ts +27 -17
- package/utils/index.d.ts +1 -0
package/date-picker/index.d.ts
CHANGED
|
@@ -152,8 +152,9 @@ declare class NgpDatePickerDateButton<T> implements OnDestroy {
|
|
|
152
152
|
protected readonly focused: _angular_core.Signal<boolean>;
|
|
153
153
|
/**
|
|
154
154
|
* Determine if this is the selected date.
|
|
155
|
+
* @internal
|
|
155
156
|
*/
|
|
156
|
-
|
|
157
|
+
readonly selected: _angular_core.Signal<boolean>;
|
|
157
158
|
/**
|
|
158
159
|
* Determine if this is the start date of the range.
|
|
159
160
|
*/
|
|
@@ -188,7 +189,7 @@ declare class NgpDatePickerDateButton<T> implements OnDestroy {
|
|
|
188
189
|
/**
|
|
189
190
|
* When the button is clicked, select the date.
|
|
190
191
|
*/
|
|
191
|
-
protected select(event?:
|
|
192
|
+
protected select(event?: Event): void;
|
|
192
193
|
/**
|
|
193
194
|
* Focus if this is the current focused date.
|
|
194
195
|
* @internal
|
|
@@ -197,35 +198,35 @@ declare class NgpDatePickerDateButton<T> implements OnDestroy {
|
|
|
197
198
|
/**
|
|
198
199
|
* Focus the previous cell.
|
|
199
200
|
*/
|
|
200
|
-
protected focusPrevious(event:
|
|
201
|
+
protected focusPrevious(event: Event): void;
|
|
201
202
|
/**
|
|
202
203
|
* Focus the next cell.
|
|
203
204
|
*/
|
|
204
|
-
protected focusNext(event:
|
|
205
|
+
protected focusNext(event: Event): void;
|
|
205
206
|
/**
|
|
206
207
|
* Focus the above cell.
|
|
207
208
|
*/
|
|
208
|
-
protected focusAbove(event:
|
|
209
|
+
protected focusAbove(event: Event): void;
|
|
209
210
|
/**
|
|
210
211
|
* Focus the below cell.
|
|
211
212
|
*/
|
|
212
|
-
protected focusBelow(event:
|
|
213
|
+
protected focusBelow(event: Event): void;
|
|
213
214
|
/**
|
|
214
215
|
* Focus the first date of the month.
|
|
215
216
|
*/
|
|
216
|
-
protected focusFirst(event:
|
|
217
|
+
protected focusFirst(event: Event): void;
|
|
217
218
|
/**
|
|
218
219
|
* Focus the last date of the month.
|
|
219
220
|
*/
|
|
220
|
-
protected focusLast(event:
|
|
221
|
+
protected focusLast(event: Event): void;
|
|
221
222
|
/**
|
|
222
223
|
* Focus the same date in the previous month.
|
|
223
224
|
*/
|
|
224
|
-
protected focusPreviousMonth(event:
|
|
225
|
+
protected focusPreviousMonth(event: Event): void;
|
|
225
226
|
/**
|
|
226
227
|
* Focus the same date in the next month.
|
|
227
228
|
*/
|
|
228
|
-
protected focusNextMonth(event:
|
|
229
|
+
protected focusNextMonth(event: Event): void;
|
|
229
230
|
private focusDate;
|
|
230
231
|
/**
|
|
231
232
|
* Get the direction of the element.
|
|
@@ -621,7 +622,7 @@ declare class NgpDateRangePicker<T> {
|
|
|
621
622
|
/**
|
|
622
623
|
* The date range picker state.
|
|
623
624
|
*/
|
|
624
|
-
|
|
625
|
+
protected readonly state: ng_primitives_state.CreatedState<NgpDateRangePicker<T>>;
|
|
625
626
|
/**
|
|
626
627
|
* Set the focused date.
|
|
627
628
|
* @param date The date to focus.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { signal, computed, inject, ChangeDetectorRef, Directive } from '@angular/core';
|
|
3
|
-
import { explicitEffect } from 'ng-primitives/internal';
|
|
4
|
-
import {
|
|
3
|
+
import { explicitEffect, injectElementRef } from 'ng-primitives/internal';
|
|
4
|
+
import { createPrimitive, controlled, styleBinding } from 'ng-primitives/state';
|
|
5
5
|
|
|
6
6
|
function activeDescendantManager(options) {
|
|
7
7
|
const sortedOptions = () => options
|
|
@@ -123,66 +123,53 @@ function activeDescendantManager(options) {
|
|
|
123
123
|
};
|
|
124
124
|
}
|
|
125
125
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
const
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
126
|
+
const [NgpVisuallyHiddenStateToken, ngpVisuallyHidden, injectVisuallyHiddenState, provideVisuallyHiddenState,] = createPrimitive('NgpVisuallyHidden', ({ hidden: _hidden = signal(true) }) => {
|
|
127
|
+
const element = injectElementRef();
|
|
128
|
+
const hidden = controlled(_hidden);
|
|
129
|
+
const changeDetector = inject(ChangeDetectorRef);
|
|
130
|
+
// Apply styles to visually hide the element
|
|
131
|
+
styleBinding(element, 'position', () => (hidden() ? 'absolute' : null));
|
|
132
|
+
styleBinding(element, 'width', () => (hidden() ? '1px' : null));
|
|
133
|
+
styleBinding(element, 'height', () => (hidden() ? '1px' : null));
|
|
134
|
+
styleBinding(element, 'margin', () => (hidden() ? '-1px' : null));
|
|
135
|
+
styleBinding(element, 'padding', () => (hidden() ? '0' : null));
|
|
136
|
+
styleBinding(element, 'overflow', () => (hidden() ? 'hidden' : null));
|
|
137
|
+
styleBinding(element, 'clip', () => (hidden() ? 'rect(0, 0, 0, 0)' : null));
|
|
138
|
+
styleBinding(element, 'white-space', () => (hidden() ? 'nowrap' : null));
|
|
139
|
+
styleBinding(element, 'border', () => (hidden() ? '0' : null));
|
|
140
|
+
styleBinding(element, 'word-wrap', () => (hidden() ? 'normal' : null));
|
|
141
|
+
styleBinding(element, 'outline', () => (hidden() ? '0' : null));
|
|
142
|
+
styleBinding(element, '-webkit-appearance', () => (hidden() ? 'none' : null));
|
|
143
|
+
styleBinding(element, '-moz-appearance', () => (hidden() ? 'none' : null));
|
|
144
|
+
styleBinding(element, 'inset-inline-start', () => (hidden() ? '0' : null));
|
|
145
|
+
function setVisibility(visible) {
|
|
146
|
+
hidden.set(!visible);
|
|
147
|
+
// If a change-detection cycle might be running, schedule detection asynchronously and exit
|
|
148
|
+
// to avoid re-entrancy. Otherwise fall through to call detectChanges synchronously.
|
|
149
|
+
Promise.resolve().then(() => changeDetector.detectChanges());
|
|
150
|
+
}
|
|
151
|
+
return {
|
|
152
|
+
hidden: hidden.asReadonly(),
|
|
153
|
+
setVisibility,
|
|
154
|
+
};
|
|
155
|
+
});
|
|
142
156
|
|
|
143
157
|
/**
|
|
144
158
|
* Hide an element visually while keeping it present in the DOM.
|
|
145
159
|
*/
|
|
146
160
|
class NgpVisuallyHidden {
|
|
147
161
|
constructor() {
|
|
148
|
-
this.
|
|
149
|
-
/**
|
|
150
|
-
* Whether the element is hidden.
|
|
151
|
-
*/
|
|
152
|
-
this.hidden = signal(true, ...(ngDevMode ? [{ debugName: "hidden" }] : []));
|
|
153
|
-
this.style = computed(() => {
|
|
154
|
-
if (!this.hidden()) {
|
|
155
|
-
return {};
|
|
156
|
-
}
|
|
157
|
-
return {
|
|
158
|
-
position: 'absolute',
|
|
159
|
-
width: '1px',
|
|
160
|
-
height: '1px',
|
|
161
|
-
margin: '-1px',
|
|
162
|
-
padding: '0',
|
|
163
|
-
overflow: 'hidden',
|
|
164
|
-
clip: 'rect(0, 0, 0, 0)',
|
|
165
|
-
whiteSpace: 'nowrap',
|
|
166
|
-
border: '0',
|
|
167
|
-
wordWrap: 'normal',
|
|
168
|
-
outline: '0',
|
|
169
|
-
'-webkit-appearance': 'none',
|
|
170
|
-
'-moz-appearance': 'none',
|
|
171
|
-
'inset-inline-start': '0',
|
|
172
|
-
};
|
|
173
|
-
}, ...(ngDevMode ? [{ debugName: "style" }] : []));
|
|
174
|
-
this.state = visuallyHiddenState(this);
|
|
162
|
+
this.state = ngpVisuallyHidden({});
|
|
175
163
|
}
|
|
176
164
|
/**
|
|
177
165
|
* Set the element visibility.
|
|
178
166
|
* @param visible
|
|
179
167
|
*/
|
|
180
168
|
setVisibility(visible) {
|
|
181
|
-
this.
|
|
182
|
-
this.changeDetector.detectChanges();
|
|
169
|
+
this.state.setVisibility(visible);
|
|
183
170
|
}
|
|
184
171
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpVisuallyHidden, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
185
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.9", type: NgpVisuallyHidden, isStandalone: true, selector: "[ngpVisuallyHidden]",
|
|
172
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.9", type: NgpVisuallyHidden, isStandalone: true, selector: "[ngpVisuallyHidden]", providers: [provideVisuallyHiddenState()], exportAs: ["ngpVisuallyHidden"], ngImport: i0 }); }
|
|
186
173
|
}
|
|
187
174
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpVisuallyHidden, decorators: [{
|
|
188
175
|
type: Directive,
|
|
@@ -190,9 +177,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImpor
|
|
|
190
177
|
selector: '[ngpVisuallyHidden]',
|
|
191
178
|
exportAs: 'ngpVisuallyHidden',
|
|
192
179
|
providers: [provideVisuallyHiddenState()],
|
|
193
|
-
host: {
|
|
194
|
-
'[style]': 'style()',
|
|
195
|
-
},
|
|
196
180
|
}]
|
|
197
181
|
}] });
|
|
198
182
|
|
|
@@ -200,5 +184,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImpor
|
|
|
200
184
|
* Generated bundle index. Do not edit.
|
|
201
185
|
*/
|
|
202
186
|
|
|
203
|
-
export { NgpVisuallyHidden, activeDescendantManager, injectVisuallyHiddenState, provideVisuallyHiddenState };
|
|
187
|
+
export { NgpVisuallyHidden, NgpVisuallyHiddenStateToken, activeDescendantManager, injectVisuallyHiddenState, ngpVisuallyHidden, provideVisuallyHiddenState };
|
|
204
188
|
//# sourceMappingURL=ng-primitives-a11y.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-primitives-a11y.mjs","sources":["../../../../packages/ng-primitives/a11y/src/active-descendant/active-descendant.ts","../../../../packages/ng-primitives/a11y/src/visually-hidden/visually-hidden-state.ts","../../../../packages/ng-primitives/a11y/src/visually-hidden/visually-hidden.ts","../../../../packages/ng-primitives/a11y/src/ng-primitives-a11y.ts"],"sourcesContent":["import { computed, ElementRef, Signal, signal } from '@angular/core';\nimport { explicitEffect } from 'ng-primitives/internal';\n\ninterface ActiveDescendantManagerOptions<T extends NgpActivatable> {\n /**\n * The disabled state of the active descendant group.\n * @default false\n */\n disabled?: Signal<boolean>;\n /**\n * The items in the active descendant group.\n */\n items: Signal<T[]>;\n /**\n * Whether active descendant should wrap around.\n * @default false\n */\n wrap?: Signal<boolean>;\n}\n\nexport interface NgpActivatable {\n /**\n * The id of the item.\n */\n id: Signal<string>;\n /**\n * Whether the item is disabled.\n */\n disabled?: Signal<boolean>;\n /**\n * The element that represents the item.\n */\n elementRef: ElementRef<HTMLElement>;\n}\n\nexport function activeDescendantManager<T extends NgpActivatable>(\n options: ActiveDescendantManagerOptions<T>,\n) {\n const sortedOptions = () =>\n options\n .items()\n .slice()\n .sort((a, b) => {\n const aElement = a.elementRef.nativeElement;\n const bElement = b.elementRef.nativeElement;\n return aElement.compareDocumentPosition(bElement) & Node.DOCUMENT_POSITION_FOLLOWING\n ? -1\n : 1;\n });\n\n const activeIndex = signal<number>(0);\n const activeItem = computed<T | undefined>(() => sortedOptions()?.[activeIndex()]);\n const disabled = computed(\n () => options.disabled?.() || options.items().every(item => item.disabled?.()),\n );\n\n // any time the item list changes, check if the active index is still valid\n explicitEffect([sortedOptions], ([items]) => {\n if (activeIndex() >= items.length || activeIndex() < 0) {\n activeIndex.set(items.findIndex(item => !item.disabled?.()));\n }\n if (activeIndex() === -1 && items.length > 0) {\n activeIndex.set(0);\n }\n if (disabled() || items.length === 0) {\n activeIndex.set(-1);\n }\n });\n\n const activeDescendant = computed(() => {\n const item = activeItem();\n\n if (disabled() || !item) {\n return undefined;\n }\n\n return item.id();\n });\n\n /**\n * Activate an item in the active descendant group.\n * @param item The item to activate.\n */\n const activate = (item: T | undefined) => {\n if (item === undefined) {\n activeIndex.set(-1);\n return;\n }\n\n if (disabled() || item.disabled?.()) {\n return;\n }\n\n activeIndex.set(sortedOptions().indexOf(item));\n };\n\n /**\n * Activate the first enabled item in the active descendant group.\n */\n const first = () => {\n const item = sortedOptions().findIndex(item => !item.disabled?.());\n\n if (item !== -1) {\n activeIndex.set(item);\n }\n };\n\n /**\n * Activate the last enabled item in the active descendant group.\n */\n const last = () => {\n const item = sortedOptions()\n .reverse()\n .findIndex(item => !item.disabled?.());\n\n if (item !== -1) {\n activeIndex.set(sortedOptions().length - 1 - item);\n }\n };\n\n const findNextIndex = (\n items: NgpActivatable[],\n currentIndex: number,\n direction: 1 | -1,\n wrap: boolean,\n ): number | undefined => {\n let index = (currentIndex + direction + items.length) % items.length;\n\n while (index !== currentIndex) {\n const item = items[index];\n if (item && !item.disabled?.()) {\n return index;\n }\n index = (index + direction + items.length) % items.length;\n\n if (\n !wrap &&\n ((direction === 1 && index === 0) || (direction === -1 && index === items.length - 1))\n ) {\n break;\n }\n }\n\n return undefined;\n };\n\n /**\n * Activate the next enabled item in the active descendant group.\n */\n const next = () => {\n const items = sortedOptions();\n const nextIndex = findNextIndex(items, activeIndex(), 1, options.wrap?.() ?? false);\n\n if (nextIndex !== undefined) {\n activeIndex.set(nextIndex);\n }\n };\n\n /**\n * Activate the previous enabled item in the active descendant group.\n */\n const previous = () => {\n const items = sortedOptions();\n const prevIndex = findNextIndex(items, activeIndex(), -1, options.wrap?.() ?? false);\n\n if (prevIndex !== undefined) {\n activeIndex.set(prevIndex);\n }\n };\n\n /**\n * Reset the active descendant group, clearing the active index.\n */\n const reset = () => {\n activeIndex.set(-1);\n };\n\n return {\n activeDescendant,\n activeItem,\n activate,\n first,\n last,\n next,\n previous,\n reset,\n };\n}\n","import {\n createState,\n createStateInjector,\n createStateProvider,\n createStateToken,\n} from 'ng-primitives/state';\nimport type { NgpVisuallyHidden } from './visually-hidden';\n\n/**\n * The state token for the VisuallyHidden primitive.\n */\nexport const NgpVisuallyHiddenStateToken = createStateToken<NgpVisuallyHidden>('VisuallyHidden');\n\n/**\n * Provides the VisuallyHidden state.\n */\nexport const provideVisuallyHiddenState = createStateProvider(NgpVisuallyHiddenStateToken);\n\n/**\n * Injects the VisuallyHidden state.\n */\nexport const injectVisuallyHiddenState = createStateInjector<NgpVisuallyHidden>(\n NgpVisuallyHiddenStateToken,\n);\n\n/**\n * The VisuallyHidden state registration function.\n */\nexport const visuallyHiddenState = createState(NgpVisuallyHiddenStateToken);\n","import { ChangeDetectorRef, Directive, computed, inject, signal } from '@angular/core';\nimport { provideVisuallyHiddenState, visuallyHiddenState } from './visually-hidden-state';\n\n/**\n * Hide an element visually while keeping it present in the DOM.\n */\n@Directive({\n selector: '[ngpVisuallyHidden]',\n exportAs: 'ngpVisuallyHidden',\n providers: [provideVisuallyHiddenState()],\n host: {\n '[style]': 'style()',\n },\n})\nexport class NgpVisuallyHidden {\n private readonly changeDetector = inject(ChangeDetectorRef);\n\n /**\n * Whether the element is hidden.\n */\n protected readonly hidden = signal<boolean>(true);\n\n protected readonly style = computed(() => {\n if (!this.hidden()) {\n return {};\n }\n\n return {\n position: 'absolute',\n width: '1px',\n height: '1px',\n margin: '-1px',\n padding: '0',\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n border: '0',\n wordWrap: 'normal',\n outline: '0',\n '-webkit-appearance': 'none',\n '-moz-appearance': 'none',\n 'inset-inline-start': '0',\n };\n });\n\n protected readonly state = visuallyHiddenState<NgpVisuallyHidden>(this);\n\n /**\n * Set the element visibility.\n * @param visible\n */\n setVisibility(visible: boolean): void {\n this.hidden.set(!visible);\n this.changeDetector.detectChanges();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ng-primitives-a11y.mjs","sources":["../../../../packages/ng-primitives/a11y/src/active-descendant/active-descendant.ts","../../../../packages/ng-primitives/a11y/src/visually-hidden/visually-hidden-state.ts","../../../../packages/ng-primitives/a11y/src/visually-hidden/visually-hidden.ts","../../../../packages/ng-primitives/a11y/src/ng-primitives-a11y.ts"],"sourcesContent":["import { computed, ElementRef, Signal, signal } from '@angular/core';\nimport { explicitEffect } from 'ng-primitives/internal';\n\ninterface ActiveDescendantManagerOptions<T extends NgpActivatable> {\n /**\n * The disabled state of the active descendant group.\n * @default false\n */\n disabled?: Signal<boolean>;\n /**\n * The items in the active descendant group.\n */\n items: Signal<T[]>;\n /**\n * Whether active descendant should wrap around.\n * @default false\n */\n wrap?: Signal<boolean>;\n}\n\nexport interface NgpActivatable {\n /**\n * The id of the item.\n */\n id: Signal<string>;\n /**\n * Whether the item is disabled.\n */\n disabled?: Signal<boolean>;\n /**\n * The element that represents the item.\n */\n elementRef: ElementRef<HTMLElement>;\n}\n\nexport function activeDescendantManager<T extends NgpActivatable>(\n options: ActiveDescendantManagerOptions<T>,\n) {\n const sortedOptions = () =>\n options\n .items()\n .slice()\n .sort((a, b) => {\n const aElement = a.elementRef.nativeElement;\n const bElement = b.elementRef.nativeElement;\n return aElement.compareDocumentPosition(bElement) & Node.DOCUMENT_POSITION_FOLLOWING\n ? -1\n : 1;\n });\n\n const activeIndex = signal<number>(0);\n const activeItem = computed<T | undefined>(() => sortedOptions()?.[activeIndex()]);\n const disabled = computed(\n () => options.disabled?.() || options.items().every(item => item.disabled?.()),\n );\n\n // any time the item list changes, check if the active index is still valid\n explicitEffect([sortedOptions], ([items]) => {\n if (activeIndex() >= items.length || activeIndex() < 0) {\n activeIndex.set(items.findIndex(item => !item.disabled?.()));\n }\n if (activeIndex() === -1 && items.length > 0) {\n activeIndex.set(0);\n }\n if (disabled() || items.length === 0) {\n activeIndex.set(-1);\n }\n });\n\n const activeDescendant = computed(() => {\n const item = activeItem();\n\n if (disabled() || !item) {\n return undefined;\n }\n\n return item.id();\n });\n\n /**\n * Activate an item in the active descendant group.\n * @param item The item to activate.\n */\n const activate = (item: T | undefined) => {\n if (item === undefined) {\n activeIndex.set(-1);\n return;\n }\n\n if (disabled() || item.disabled?.()) {\n return;\n }\n\n activeIndex.set(sortedOptions().indexOf(item));\n };\n\n /**\n * Activate the first enabled item in the active descendant group.\n */\n const first = () => {\n const item = sortedOptions().findIndex(item => !item.disabled?.());\n\n if (item !== -1) {\n activeIndex.set(item);\n }\n };\n\n /**\n * Activate the last enabled item in the active descendant group.\n */\n const last = () => {\n const item = sortedOptions()\n .reverse()\n .findIndex(item => !item.disabled?.());\n\n if (item !== -1) {\n activeIndex.set(sortedOptions().length - 1 - item);\n }\n };\n\n const findNextIndex = (\n items: NgpActivatable[],\n currentIndex: number,\n direction: 1 | -1,\n wrap: boolean,\n ): number | undefined => {\n let index = (currentIndex + direction + items.length) % items.length;\n\n while (index !== currentIndex) {\n const item = items[index];\n if (item && !item.disabled?.()) {\n return index;\n }\n index = (index + direction + items.length) % items.length;\n\n if (\n !wrap &&\n ((direction === 1 && index === 0) || (direction === -1 && index === items.length - 1))\n ) {\n break;\n }\n }\n\n return undefined;\n };\n\n /**\n * Activate the next enabled item in the active descendant group.\n */\n const next = () => {\n const items = sortedOptions();\n const nextIndex = findNextIndex(items, activeIndex(), 1, options.wrap?.() ?? false);\n\n if (nextIndex !== undefined) {\n activeIndex.set(nextIndex);\n }\n };\n\n /**\n * Activate the previous enabled item in the active descendant group.\n */\n const previous = () => {\n const items = sortedOptions();\n const prevIndex = findNextIndex(items, activeIndex(), -1, options.wrap?.() ?? false);\n\n if (prevIndex !== undefined) {\n activeIndex.set(prevIndex);\n }\n };\n\n /**\n * Reset the active descendant group, clearing the active index.\n */\n const reset = () => {\n activeIndex.set(-1);\n };\n\n return {\n activeDescendant,\n activeItem,\n activate,\n first,\n last,\n next,\n previous,\n reset,\n };\n}\n","import { ChangeDetectorRef, inject, Signal, signal } from '@angular/core';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { controlled, createPrimitive, styleBinding } from 'ng-primitives/state';\n\n/**\n * The state interface for the VisuallyHidden pattern.\n */\nexport interface NgpVisuallyHiddenState {\n /**\n * Whether the element is hidden.\n */\n readonly hidden: Signal<boolean>;\n\n /**\n * Set the element visibility.\n * @param visible\n */\n setVisibility(visible: boolean): void;\n}\n\n/**\n * The props interface for the VisuallyHidden pattern.\n */\nexport interface NgpVisuallyHiddenProps {\n /**\n * Whether the element is hidden. Default is true.\n */\n readonly hidden?: Signal<boolean>;\n}\n\nexport const [\n NgpVisuallyHiddenStateToken,\n ngpVisuallyHidden,\n injectVisuallyHiddenState,\n provideVisuallyHiddenState,\n] = createPrimitive(\n 'NgpVisuallyHidden',\n ({ hidden: _hidden = signal(true) }: NgpVisuallyHiddenProps): NgpVisuallyHiddenState => {\n const element = injectElementRef();\n const hidden = controlled(_hidden);\n const changeDetector = inject(ChangeDetectorRef);\n\n // Apply styles to visually hide the element\n styleBinding(element, 'position', () => (hidden() ? 'absolute' : null));\n styleBinding(element, 'width', () => (hidden() ? '1px' : null));\n styleBinding(element, 'height', () => (hidden() ? '1px' : null));\n styleBinding(element, 'margin', () => (hidden() ? '-1px' : null));\n styleBinding(element, 'padding', () => (hidden() ? '0' : null));\n styleBinding(element, 'overflow', () => (hidden() ? 'hidden' : null));\n styleBinding(element, 'clip', () => (hidden() ? 'rect(0, 0, 0, 0)' : null));\n styleBinding(element, 'white-space', () => (hidden() ? 'nowrap' : null));\n styleBinding(element, 'border', () => (hidden() ? '0' : null));\n styleBinding(element, 'word-wrap', () => (hidden() ? 'normal' : null));\n styleBinding(element, 'outline', () => (hidden() ? '0' : null));\n styleBinding(element, '-webkit-appearance', () => (hidden() ? 'none' : null));\n styleBinding(element, '-moz-appearance', () => (hidden() ? 'none' : null));\n styleBinding(element, 'inset-inline-start', () => (hidden() ? '0' : null));\n\n function setVisibility(visible: boolean): void {\n hidden.set(!visible);\n // If a change-detection cycle might be running, schedule detection asynchronously and exit\n // to avoid re-entrancy. Otherwise fall through to call detectChanges synchronously.\n Promise.resolve().then(() => changeDetector.detectChanges());\n }\n\n return {\n hidden: hidden.asReadonly(),\n setVisibility,\n };\n },\n);\n","import { Directive } from '@angular/core';\nimport { ngpVisuallyHidden, provideVisuallyHiddenState } from './visually-hidden-state';\n\n/**\n * Hide an element visually while keeping it present in the DOM.\n */\n@Directive({\n selector: '[ngpVisuallyHidden]',\n exportAs: 'ngpVisuallyHidden',\n providers: [provideVisuallyHiddenState()],\n})\nexport class NgpVisuallyHidden {\n protected readonly state = ngpVisuallyHidden({});\n\n /**\n * Set the element visibility.\n * @param visible\n */\n setVisibility(visible: boolean): void {\n this.state.setVisibility(visible);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|