ng-primitives 0.17.0 → 0.18.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/esm2022/internal/interactions/focus-visible.mjs +2 -2
- package/esm2022/menu/menu-trigger/menu-trigger.directive.mjs +12 -4
- package/fesm2022/ng-primitives-internal.mjs +1 -1
- package/fesm2022/ng-primitives-internal.mjs.map +1 -1
- package/fesm2022/ng-primitives-menu.mjs +11 -3
- package/fesm2022/ng-primitives-menu.mjs.map +1 -1
- package/menu/menu-trigger/menu-trigger.directive.d.ts +7 -2
- package/package.json +19 -19
|
@@ -45,7 +45,7 @@ export function setupFocusVisible({ focusChange, disabled = signal(false), }) {
|
|
|
45
45
|
return;
|
|
46
46
|
}
|
|
47
47
|
// if the focus origin is keyboard or program(focused programmatically), then the focus is visible
|
|
48
|
-
if (origin === 'keyboard'
|
|
48
|
+
if (origin === 'keyboard') {
|
|
49
49
|
focus(true);
|
|
50
50
|
return;
|
|
51
51
|
}
|
|
@@ -98,4 +98,4 @@ export function setupFocusVisible({ focusChange, disabled = signal(false), }) {
|
|
|
98
98
|
isFocused,
|
|
99
99
|
};
|
|
100
100
|
}
|
|
101
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9jdXMtdmlzaWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLXByaW1pdGl2ZXMvaW50ZXJuYWwvc3JjL2ludGVyYWN0aW9ucy9mb2N1cy12aXNpYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUNILE9BQU8sRUFBRSxZQUFZLEVBQWUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQVd0RCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsRUFDaEMsV0FBVyxFQUNYLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQ0Q7SUFDdkI7O09BRUc7SUFDSCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQTBCLFVBQVUsQ0FBQyxDQUFDO0lBRS9EOztPQUVHO0lBQ0gsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRTFDOztPQUVHO0lBQ0gsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBRXpDLHFCQUFxQjtJQUNyQixZQUFZO1NBQ1QsT0FBTyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUM7U0FDakMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7U0FDMUIsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0lBQ2xCLHlDQUF5QztJQUN6QyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUM3QyxDQUFDO0lBRUosc0VBQXNFO0lBQ3RFLGVBQWUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFFOUMsa0VBQWtFO0lBQ2xFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FDVixTQUFTLEVBQUU7UUFDVCxDQUFDLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxDQUFDO1FBQ2pFLENBQUMsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUNuRSxDQUFDO0lBRUYsU0FBUyxPQUFPLENBQUMsTUFBbUI7UUFDbEMsSUFBSSxRQUFRLEVBQUUsSUFBSSxTQUFTLEVBQUUsRUFBRSxDQUFDO1lBQzlCLE9BQU87UUFDVCxDQUFDO1FBRUQsMEVBQTBFO1FBQzFFLElBQUksZUFBZSxFQUFFLEVBQUUsQ0FBQztZQUN0QixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDWixPQUFPO1FBQ1QsQ0FBQztRQUVELGtHQUFrRztRQUNsRyxJQUFJLE1BQU0sS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUMxQixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDWixPQUFPO1FBQ1QsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTLE1BQU07UUFDYixJQUFJLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztZQUMvQixPQUFPO1FBQ1QsQ0FBQztRQUVELEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNmLENBQUM7SUFFRDs7T0FFRztJQUNILFNBQVMsS0FBSyxDQUFDLEtBQWM7UUFDM0IsSUFBSSxTQUFTLEVBQUUsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUMxQixPQUFPO1FBQ1QsQ0FBQztRQUVELFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckIsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVELFNBQVMsZUFBZTtRQUN0QixNQUFNLGlCQUFpQixHQUFHO1lBQ3hCLFVBQVU7WUFDVixPQUFPO1lBQ1AsT0FBTztZQUNQLE9BQU87WUFDUCxNQUFNO1lBQ04sT0FBTztZQUNQLFFBQVE7WUFDUixRQUFRO1lBQ1IsT0FBTztTQUNSLENBQUM7UUFFRixxREFBcUQ7UUFDckQsSUFDRSxVQUFVLENBQUMsYUFBYSxZQUFZLGdCQUFnQjtZQUNwRCxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUMxRCxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsd0JBQXdCO1FBQ3hCLElBQUksVUFBVSxDQUFDLGFBQWEsWUFBWSxtQkFBbUIsRUFBRSxDQUFDO1lBQzVELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELDZDQUE2QztRQUM3QyxJQUNFLFVBQVUsQ0FBQyxhQUFhLENBQUMsaUJBQWlCO1lBQzFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLEVBQ3hELENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxPQUFPO1FBQ0wsU0FBUztLQUNWLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgwqkgMjAyNCBBbmd1bGFyIFByaW1pdGl2ZXMuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbmctcHJpbWl0aXZlcy9uZy1wcmltaXRpdmVzXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIDIuMCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5pbXBvcnQgeyBGb2N1c01vbml0b3IsIEZvY3VzT3JpZ2luIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgZWZmZWN0LCBFbGVtZW50UmVmLCBpbmplY3QsIFNpZ25hbCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBvbkJvb2xlYW5DaGFuZ2UgfSBmcm9tICduZy1wcmltaXRpdmVzL3V0aWxzJztcblxuZXhwb3J0IGludGVyZmFjZSBOZ3BGb2N1c1Zpc2libGVPcHRpb25zIHtcbiAgZGlzYWJsZWQ/OiBTaWduYWw8Ym9vbGVhbj47XG4gIGZvY3VzQ2hhbmdlPzogKHZhbHVlOiBib29sZWFuKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ncEZvY3VzVmlzaWJsZVN0YXRlIHtcbiAgaXNGb2N1c2VkOiBTaWduYWw8Ym9vbGVhbj47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cEZvY3VzVmlzaWJsZSh7XG4gIGZvY3VzQ2hhbmdlLFxuICBkaXNhYmxlZCA9IHNpZ25hbChmYWxzZSksXG59OiBOZ3BGb2N1c1Zpc2libGVPcHRpb25zKTogTmdwRm9jdXNWaXNpYmxlU3RhdGUge1xuICAvKipcbiAgICogQWNjZXNzIHRoZSBlbGVtZW50IHRoYXQgdGhlIGRpcmVjdGl2ZSBpcyBhcHBsaWVkIHRvLlxuICAgKi9cbiAgY29uc3QgZWxlbWVudFJlZiA9IGluamVjdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oRWxlbWVudFJlZik7XG5cbiAgLyoqXG4gICAqIEFjY2VzcyB0aGUgZm9jdXMgbW9uaXRvci5cbiAgICovXG4gIGNvbnN0IGZvY3VzTW9uaXRvciA9IGluamVjdChGb2N1c01vbml0b3IpO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBlbGVtZW50IGlzIGN1cnJlbnRseSBmb2N1c2VkLlxuICAgKi9cbiAgY29uc3QgaXNGb2N1c2VkID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcblxuICAvLyBoYW5kbGUgZm9jdXMgc3RhdGVcbiAgZm9jdXNNb25pdG9yXG4gICAgLm1vbml0b3IoZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KVxuICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKVxuICAgIC5zdWJzY3JpYmUob3JpZ2luID0+XG4gICAgICAvLyBudWxsIGluZGljYXRlcyB0aGUgZWxlbWVudCB3YXMgYmx1cnJlZFxuICAgICAgb3JpZ2luID09PSBudWxsID8gb25CbHVyKCkgOiBvbkZvY3VzKG9yaWdpbiksXG4gICAgKTtcblxuICAvLyBpZiB0aGUgY29tcG9uZW50IGJlY29tZXMgZGlzYWJsZWQgYW5kIGl0IGlzIGZvY3VzZWQsIGhpZGUgdGhlIGZvY3VzXG4gIG9uQm9vbGVhbkNoYW5nZShkaXNhYmxlZCwgKCkgPT4gZm9jdXMoZmFsc2UpKTtcblxuICAvLyBhbnl0aW1lIHRoZSBmb2N1cyBzdGF0ZSBjaGFuZ2VzIHdlIHdhbnQgdG8gdXBkYXRlIHRoZSBhdHRyaWJ1dGVcbiAgZWZmZWN0KCgpID0+XG4gICAgaXNGb2N1c2VkKClcbiAgICAgID8gZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1mb2N1cy12aXNpYmxlJywgJycpXG4gICAgICA6IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtZm9jdXMtdmlzaWJsZScpLFxuICApO1xuXG4gIGZ1bmN0aW9uIG9uRm9jdXMob3JpZ2luOiBGb2N1c09yaWdpbik6IHZvaWQge1xuICAgIGlmIChkaXNhYmxlZCgpIHx8IGlzRm9jdXNlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZm9yIHNvbWUgZWxlbWVudHMgdGhlIGZvY3VzIHZpc2libGUgc3RhdGUgc2hvdWxkIGFsd2F5cyBhcHBlYXIgb24gZm9jdXNcbiAgICBpZiAoYWx3YXlzU2hvd0ZvY3VzKCkpIHtcbiAgICAgIGZvY3VzKHRydWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSBmb2N1cyBvcmlnaW4gaXMga2V5Ym9hcmQgb3IgcHJvZ3JhbShmb2N1c2VkIHByb2dyYW1tYXRpY2FsbHkpLCB0aGVuIHRoZSBmb2N1cyBpcyB2aXNpYmxlXG4gICAgaWYgKG9yaWdpbiA9PT0gJ2tleWJvYXJkJykge1xuICAgICAgZm9jdXModHJ1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb25CbHVyKCk6IHZvaWQge1xuICAgIGlmIChkaXNhYmxlZCgpIHx8ICFpc0ZvY3VzZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvY3VzKGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VyIHRoZSBmb2N1cyBzaWduYWwgYWxvbmcgd2l0aCB0aGUgZm9jdXNDaGFuZ2UgZXZlbnQuXG4gICAqL1xuICBmdW5jdGlvbiBmb2N1cyh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmIChpc0ZvY3VzZWQoKSA9PT0gdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpc0ZvY3VzZWQuc2V0KHZhbHVlKTtcbiAgICBmb2N1c0NoYW5nZT8uKHZhbHVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFsd2F5c1Nob3dGb2N1cygpOiBib29sZWFuIHtcbiAgICBjb25zdCBub25UZXh0SW5wdXRUeXBlcyA9IFtcbiAgICAgICdjaGVja2JveCcsXG4gICAgICAncmFkaW8nLFxuICAgICAgJ3JhbmdlJyxcbiAgICAgICdjb2xvcicsXG4gICAgICAnZmlsZScsXG4gICAgICAnaW1hZ2UnLFxuICAgICAgJ2J1dHRvbicsXG4gICAgICAnc3VibWl0JyxcbiAgICAgICdyZXNldCcsXG4gICAgXTtcblxuICAgIC8vIGlmIHRoaXMgaXMgYW4gaW5wdXQgZWxlbWVudCBhbmQgaXQgaXMgYSB0ZXh0IGlucHV0XG4gICAgaWYgKFxuICAgICAgZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJlxuICAgICAgIW5vblRleHRJbnB1dFR5cGVzLmluY2x1ZGVzKGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC50eXBlKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhpcyBpcyBhIHRleHRhcmVhXG4gICAgaWYgKGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxUZXh0QXJlYUVsZW1lbnQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIGlmIHRoaXMgaXMgYW4gZWxlbWVudCB3aXRoIGNvbnRlbnRlZGl0YWJsZVxuICAgIGlmIChcbiAgICAgIGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5pc0NvbnRlbnRFZGl0YWJsZSB8fFxuICAgICAgZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lmhhc0F0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJylcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaXNGb2N1c2VkLFxuICB9O1xufVxuIl19
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* LICENSE file in the root directory of this source tree.
|
|
7
7
|
*/
|
|
8
8
|
import { CdkMenuTrigger } from '@angular/cdk/menu';
|
|
9
|
-
import { Directive, inject, signal } from '@angular/core';
|
|
9
|
+
import { Directive, effect, inject, input, signal } from '@angular/core';
|
|
10
10
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
11
11
|
import { NgpMenuTriggerToken } from './menu-trigger.token';
|
|
12
12
|
import * as i0 from "@angular/core";
|
|
@@ -17,15 +17,23 @@ export class NgpMenuTrigger {
|
|
|
17
17
|
* Access to the underlying `CdkMenuTrigger`.
|
|
18
18
|
*/
|
|
19
19
|
this.cdkMenuTrigger = inject(CdkMenuTrigger);
|
|
20
|
+
/**
|
|
21
|
+
* Template reference variable to the menu this trigger opens
|
|
22
|
+
*/
|
|
23
|
+
this.menu = input.required({
|
|
24
|
+
alias: 'ngpMenuTrigger',
|
|
25
|
+
});
|
|
20
26
|
/**
|
|
21
27
|
* Store the open state of the menu.
|
|
22
28
|
*/
|
|
23
29
|
this.open = signal(false);
|
|
24
30
|
this.cdkMenuTrigger.opened.pipe(takeUntilDestroyed()).subscribe(() => this.open.set(true));
|
|
25
31
|
this.cdkMenuTrigger.closed.pipe(takeUntilDestroyed()).subscribe(() => this.open.set(false));
|
|
32
|
+
// forward the template ref to the host directive anytime it changes
|
|
33
|
+
effect(() => (this.cdkMenuTrigger.menuTemplateRef = this.menu()));
|
|
26
34
|
}
|
|
27
35
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NgpMenuTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
28
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "
|
|
36
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.13", type: NgpMenuTrigger, isStandalone: true, selector: "[ngpMenuTrigger]", inputs: { menu: { classPropertyName: "menu", publicName: "ngpMenuTrigger", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "attr.data-open": "open() ? \"\" : null" } }, providers: [{ provide: NgpMenuTriggerToken, useExisting: NgpMenuTrigger }], exportAs: ["ngpMenuTrigger"], hostDirectives: [{ directive: i1.CdkMenuTrigger }], ngImport: i0 }); }
|
|
29
37
|
}
|
|
30
38
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NgpMenuTrigger, decorators: [{
|
|
31
39
|
type: Directive,
|
|
@@ -34,10 +42,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
34
42
|
selector: '[ngpMenuTrigger]',
|
|
35
43
|
exportAs: 'ngpMenuTrigger',
|
|
36
44
|
providers: [{ provide: NgpMenuTriggerToken, useExisting: NgpMenuTrigger }],
|
|
37
|
-
hostDirectives: [{ directive: CdkMenuTrigger
|
|
45
|
+
hostDirectives: [{ directive: CdkMenuTrigger }],
|
|
38
46
|
host: {
|
|
39
47
|
'[attr.data-open]': 'open() ? "" : null',
|
|
40
48
|
},
|
|
41
49
|
}]
|
|
42
50
|
}], ctorParameters: () => [] });
|
|
43
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS10cmlnZ2VyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLXByaW1pdGl2ZXMvbWVudS9zcmMvbWVudS10cmlnZ2VyL21lbnUtdHJpZ2dlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBQ0gsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7QUFZM0QsTUFBTSxPQUFPLGNBQWM7SUFrQnpCO1FBakJBOztXQUVHO1FBQ2MsbUJBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFekQ7O1dBRUc7UUFDYSxTQUFJLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBdUI7WUFDMUQsS0FBSyxFQUFFLGdCQUFnQjtTQUN4QixDQUFDLENBQUM7UUFFSDs7V0FFRztRQUNnQixTQUFJLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBRy9DLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDM0YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUU1RixvRUFBb0U7UUFDcEUsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwRSxDQUFDOytHQXhCVSxjQUFjO21HQUFkLGNBQWMsNlFBTmQsQ0FBQyxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLENBQUM7OzRGQU0vRCxjQUFjO2tCQVYxQixTQUFTO21CQUFDO29CQUNULFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxXQUFXLGdCQUFnQixFQUFFLENBQUM7b0JBQzFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxDQUFDO29CQUMvQyxJQUFJLEVBQUU7d0JBQ0osa0JBQWtCLEVBQUUsb0JBQW9CO3FCQUN6QztpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IMKpIDIwMjQgQW5ndWxhciBQcmltaXRpdmVzLlxuICogaHR0cHM6Ly9naXRodWIuY29tL25nLXByaW1pdGl2ZXMvbmctcHJpbWl0aXZlc1xuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSAyLjAgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuaW1wb3J0IHsgQ2RrTWVudVRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvbWVudSc7XG5pbXBvcnQgeyBEaXJlY3RpdmUsIGVmZmVjdCwgaW5qZWN0LCBpbnB1dCwgc2lnbmFsLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgTmdwTWVudVRyaWdnZXJUb2tlbiB9IGZyb20gJy4vbWVudS10cmlnZ2VyLnRva2VuJztcblxuQERpcmVjdGl2ZSh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnW25ncE1lbnVUcmlnZ2VyXScsXG4gIGV4cG9ydEFzOiAnbmdwTWVudVRyaWdnZXInLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IE5ncE1lbnVUcmlnZ2VyVG9rZW4sIHVzZUV4aXN0aW5nOiBOZ3BNZW51VHJpZ2dlciB9XSxcbiAgaG9zdERpcmVjdGl2ZXM6IFt7IGRpcmVjdGl2ZTogQ2RrTWVudVRyaWdnZXIgfV0sXG4gIGhvc3Q6IHtcbiAgICAnW2F0dHIuZGF0YS1vcGVuXSc6ICdvcGVuKCkgPyBcIlwiIDogbnVsbCcsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIE5ncE1lbnVUcmlnZ2VyIHtcbiAgLyoqXG4gICAqIEFjY2VzcyB0byB0aGUgdW5kZXJseWluZyBgQ2RrTWVudVRyaWdnZXJgLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBjZGtNZW51VHJpZ2dlciA9IGluamVjdChDZGtNZW51VHJpZ2dlcik7XG5cbiAgLyoqXG4gICAqIFRlbXBsYXRlIHJlZmVyZW5jZSB2YXJpYWJsZSB0byB0aGUgbWVudSB0aGlzIHRyaWdnZXIgb3BlbnNcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBtZW51ID0gaW5wdXQucmVxdWlyZWQ8VGVtcGxhdGVSZWY8dW5rbm93bj4+KHtcbiAgICBhbGlhczogJ25ncE1lbnVUcmlnZ2VyJyxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFN0b3JlIHRoZSBvcGVuIHN0YXRlIG9mIHRoZSBtZW51LlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG9wZW4gPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY2RrTWVudVRyaWdnZXIub3BlbmVkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9wZW4uc2V0KHRydWUpKTtcbiAgICB0aGlzLmNka01lbnVUcmlnZ2VyLmNsb3NlZC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vcGVuLnNldChmYWxzZSkpO1xuXG4gICAgLy8gZm9yd2FyZCB0aGUgdGVtcGxhdGUgcmVmIHRvIHRoZSBob3N0IGRpcmVjdGl2ZSBhbnl0aW1lIGl0IGNoYW5nZXNcbiAgICBlZmZlY3QoKCkgPT4gKHRoaXMuY2RrTWVudVRyaWdnZXIubWVudVRlbXBsYXRlUmVmID0gdGhpcy5tZW51KCkpKTtcbiAgfVxufVxuIl19
|
|
@@ -66,7 +66,7 @@ function setupFocusVisible({ focusChange, disabled = signal(false), }) {
|
|
|
66
66
|
return;
|
|
67
67
|
}
|
|
68
68
|
// if the focus origin is keyboard or program(focused programmatically), then the focus is visible
|
|
69
|
-
if (origin === 'keyboard'
|
|
69
|
+
if (origin === 'keyboard') {
|
|
70
70
|
focus(true);
|
|
71
71
|
return;
|
|
72
72
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-primitives-internal.mjs","sources":["../../../../packages/ng-primitives/internal/src/disabled/disabled.ts","../../../../packages/ng-primitives/internal/src/interactions/focus-visible.ts","../../../../packages/ng-primitives/internal/src/interactions/hover.ts","../../../../packages/ng-primitives/internal/src/interactions/press.ts","../../../../packages/ng-primitives/internal/src/interactions/button.ts","../../../../packages/ng-primitives/internal/src/interactions/focus.ts","../../../../packages/ng-primitives/internal/src/interactions/index.ts","../../../../packages/ng-primitives/internal/src/orientation/orientation.ts","../../../../packages/ng-primitives/internal/src/style-injector/style-injector.ts","../../../../packages/ng-primitives/internal/src/index.ts","../../../../packages/ng-primitives/internal/src/ng-primitives-internal.ts"],"sourcesContent":["/**\n * Copyright © 2024 Angular Primitives.\n * https://github.com/ng-primitives/ng-primitives\n *\n * This source code is licensed under the Apache 2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { computed, inject, InjectionToken, signal, Signal } from '@angular/core';\n\nexport const NgpDisabledToken = new InjectionToken<NgpCanDisable>('NgpDisabledToken');\n\nexport interface NgpCanDisable {\n /**\n * Whether the element is disabled.\n */\n readonly disabled: Signal<boolean>;\n}\n\n/**\n * Determine if we are in a disabled context.\n * @param disabled The disabled signal for the local context.\n * @returns The disabled signal.\n */\nexport function injectDisabled(\n disabled: Signal<boolean> = signal<boolean>(false),\n): Signal<boolean> {\n const provider = inject(NgpDisabledToken, { optional: true, self: true });\n\n return computed(() => provider?.disabled() || disabled());\n}\n","/**\n * Copyright © 2024 Angular Primitives.\n * https://github.com/ng-primitives/ng-primitives\n *\n * This source code is licensed under the Apache 2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { effect, ElementRef, inject, Signal, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { onBooleanChange } from 'ng-primitives/utils';\n\nexport interface NgpFocusVisibleOptions {\n disabled?: Signal<boolean>;\n focusChange?: (value: boolean) => void;\n}\n\nexport interface NgpFocusVisibleState {\n isFocused: Signal<boolean>;\n}\n\nexport function setupFocusVisible({\n focusChange,\n disabled = signal(false),\n}: NgpFocusVisibleOptions): NgpFocusVisibleState {\n /**\n * Access the element that the directive is applied to.\n */\n const elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /**\n * Access the focus monitor.\n */\n const focusMonitor = inject(FocusMonitor);\n\n /**\n * Whether the element is currently focused.\n */\n const isFocused = signal<boolean>(false);\n\n // handle focus state\n focusMonitor\n .monitor(elementRef.nativeElement)\n .pipe(takeUntilDestroyed())\n .subscribe(origin =>\n // null indicates the element was blurred\n origin === null ? onBlur() : onFocus(origin),\n );\n\n // if the component becomes disabled and it is focused, hide the focus\n onBooleanChange(disabled, () => focus(false));\n\n // anytime the focus state changes we want to update the attribute\n effect(() =>\n isFocused()\n ? elementRef.nativeElement.setAttribute('data-focus-visible', '')\n : elementRef.nativeElement.removeAttribute('data-focus-visible'),\n );\n\n function onFocus(origin: FocusOrigin): void {\n if (disabled() || isFocused()) {\n return;\n }\n\n // for some elements the focus visible state should always appear on focus\n if (alwaysShowFocus()) {\n focus(true);\n return;\n }\n\n // if the focus origin is keyboard or program(focused programmatically), then the focus is visible\n if (origin === 'keyboard' || origin === 'program') {\n focus(true);\n return;\n }\n }\n\n function onBlur(): void {\n if (disabled() || !isFocused()) {\n return;\n }\n\n focus(false);\n }\n\n /**\n * Trigger the focus signal along with the focusChange event.\n */\n function focus(value: boolean) {\n if (isFocused() === value) {\n return;\n }\n\n isFocused.set(value);\n focusChange?.(value);\n }\n\n function alwaysShowFocus(): boolean {\n const nonTextInputTypes = [\n 'checkbox',\n 'radio',\n 'range',\n 'color',\n 'file',\n 'image',\n 'button',\n 'submit',\n 'reset',\n ];\n\n // if this is an input element and it is a text input\n if (\n elementRef.nativeElement instanceof HTMLInputElement &&\n !nonTextInputTypes.includes(elementRef.nativeElement.type)\n ) {\n return true;\n }\n\n // if this is a textarea\n if (elementRef.nativeElement instanceof HTMLTextAreaElement) {\n return true;\n }\n\n // if this is an element with contenteditable\n if (\n elementRef.nativeElement.isContentEditable ||\n elementRef.nativeElement.hasAttribute('contenteditable')\n ) {\n return true;\n }\n\n return false;\n }\n\n return {\n isFocused,\n };\n}\n","/**\n * Copyright © 2024 Angular Primitives.\n * https://github.com/ng-primitives/ng-primitives\n *\n * This source code is licensed under the Apache 2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { effect, ElementRef, inject, Injectable, PLATFORM_ID, Signal, signal } from '@angular/core';\nimport { injectDisposables, onBooleanChange } from 'ng-primitives/utils';\n\n/**\n * We use a service here as this value is a singleton\n * and allows us to register the dom events once.\n */\n@Injectable({\n providedIn: 'root',\n})\nclass GlobalPointerEvents {\n /**\n * Whether global mouse events should be ignored.\n */\n ignoreEmulatedMouseEvents: boolean = false;\n\n /**\n * Access the document.\n */\n private readonly document = inject(DOCUMENT);\n\n /**\n * Determine the platform id.\n */\n private readonly platformId = inject(PLATFORM_ID);\n\n constructor() {\n // we only want to setup events on the client\n if (isPlatformBrowser(this.platformId)) {\n this.setupGlobalTouchEvents();\n }\n }\n\n private setupGlobalTouchEvents(): void {\n this.document.addEventListener('pointerup', this.handleGlobalPointerEvent.bind(this));\n this.document.addEventListener('touchend', this.setGlobalIgnoreEmulatedMouseEvents.bind(this));\n }\n\n private setGlobalIgnoreEmulatedMouseEvents(): void {\n this.ignoreEmulatedMouseEvents = true;\n // Clear globalIgnoreEmulatedMouseEvents after a short timeout. iOS fires onPointerEnter\n // with pointerType=\"mouse\" immediately after onPointerUp and before onFocus. On other\n // devices that don't have this quirk, we don't want to ignore a mouse hover sometime in\n // the distant future because a user previously touched the element.\n setTimeout(() => (this.ignoreEmulatedMouseEvents = false), 50);\n }\n\n private handleGlobalPointerEvent(event: PointerEvent): void {\n if (event.pointerType === 'touch') {\n this.setGlobalIgnoreEmulatedMouseEvents();\n }\n }\n}\n\ninterface NgpHoverOptions {\n disabled?: Signal<boolean>;\n hoverStart?: () => void;\n hoverEnd?: () => void;\n}\n\nexport interface NgpHoverState {\n hovered: Signal<boolean>;\n}\n\n/**\n * Programatically add the hover functionality to an element.\n * This is useful in cases where we can't necessarily use a HostDirective,\n * because there is a chance the directive has already been used.\n */\nexport function setupHover({\n hoverStart,\n hoverEnd,\n disabled = signal(false),\n}: NgpHoverOptions): NgpHoverState {\n /**\n * Access the element.\n */\n const elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /**\n * Access the global pointer events handler.\n */\n const globalPointerEvents = inject(GlobalPointerEvents);\n\n /**\n * Access the disposable helper.\n */\n const disposables = injectDisposables();\n\n /**\n * Store the current hover state.\n */\n const hovered = signal<boolean>(false);\n\n /**\n * Whether this element should ignore emulated mouse events.\n */\n let ignoreEmulatedMouseEvents: boolean = false;\n\n /**\n * Setup event listeners.\n */\n disposables.addEventListener(elementRef.nativeElement, 'pointerenter', onPointerEnter);\n disposables.addEventListener(elementRef.nativeElement, 'pointerleave', onPointerLeave);\n disposables.addEventListener(elementRef.nativeElement, 'touchstart', onTouchStart);\n disposables.addEventListener(elementRef.nativeElement, 'mouseenter', onMouseEnter);\n disposables.addEventListener(elementRef.nativeElement, 'mouseleave', onMouseLeave);\n\n // anytime the disabled state changes to true, we must reset the hover state\n if (disabled) {\n onBooleanChange(disabled, reset);\n }\n\n // anytime the hover state changes we want to update the attribute\n effect(() =>\n hovered()\n ? elementRef.nativeElement.setAttribute('data-hover', '')\n : elementRef.nativeElement.removeAttribute('data-hover'),\n );\n\n /**\n * Reset the hover state.\n */\n function reset(): void {\n onHoverEnd('mouse');\n }\n\n /**\n * Trigger the hover start events.\n * @param event\n * @param pointerType\n */\n function onHoverStart(event: Event, pointerType: string): void {\n if (\n disabled() ||\n pointerType === 'touch' ||\n hovered() ||\n !(event.currentTarget as Element)?.contains(event.target as Element)\n ) {\n return;\n }\n\n hovered.set(true);\n hoverStart?.();\n }\n\n /**\n * Trigger the hover end events.\n * @param pointerType\n */\n function onHoverEnd(pointerType: string): void {\n if (pointerType === 'touch' || !hovered()) {\n return;\n }\n\n hovered.set(false);\n hoverEnd?.();\n }\n\n function onPointerEnter(event: PointerEvent): void {\n if (globalPointerEvents.ignoreEmulatedMouseEvents && event.pointerType === 'mouse') {\n return;\n }\n\n onHoverStart(event, event.pointerType);\n }\n\n function onPointerLeave(event: PointerEvent): void {\n if (!disabled() && (event.currentTarget as Element)?.contains(event.target as Element)) {\n onHoverEnd(event.pointerType);\n }\n }\n\n function onTouchStart(): void {\n ignoreEmulatedMouseEvents = true;\n }\n\n function onMouseEnter(event: MouseEvent): void {\n if (!ignoreEmulatedMouseEvents && !globalPointerEvents.ignoreEmulatedMouseEvents) {\n onHoverStart(event, 'mouse');\n }\n\n ignoreEmulatedMouseEvents = false;\n }\n\n function onMouseLeave(event: MouseEvent): void {\n if (!disabled() && (event.currentTarget as Element)?.contains(event.target as Element)) {\n onHoverEnd('mouse');\n }\n }\n\n return { hovered };\n}\n","/**\n * Copyright © 2024 Angular Primitives.\n * https://github.com/ng-primitives/ng-primitives\n *\n * This source code is licensed under the Apache 2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { ElementRef, Signal, effect, inject, signal } from '@angular/core';\nimport { injectDisposables } from 'ng-primitives/utils';\n\ninterface NgpPressState {\n pressed: Signal<boolean>;\n}\n\ninterface NgpPressOptions {\n disabled?: Signal<boolean>;\n pressStart?: () => void;\n pressEnd?: () => void;\n}\n\nexport function setupPress({\n pressStart,\n pressEnd,\n disabled = signal(false),\n}: NgpPressOptions): NgpPressState {\n /**\n * Access the element reference.\n */\n const elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /**\n * Access the disposables helper.\n */\n const disposables = injectDisposables();\n\n /**\n * Whether the element is currently pressed.\n */\n const pressed = signal<boolean>(false);\n\n // setup event listeners\n disposables.addEventListener(elementRef.nativeElement, 'pointerdown', onPointerDown);\n\n // anytime the press state changes we want to update the attribute\n effect(() =>\n pressed() && !disabled()\n ? elementRef.nativeElement.setAttribute('data-press', '')\n : elementRef.nativeElement.removeAttribute('data-press'),\n );\n\n /**\n * Reset the press state.\n */\n function reset(): void {\n // if we are not pressing, then do nothing\n if (!pressed()) {\n return;\n }\n\n // clear any existing disposables\n disposableListeners.forEach(dispose => dispose());\n pressed.set(false);\n pressEnd?.();\n }\n\n /**\n * Store the list of disposables.\n */\n let disposableListeners: (() => void)[] = [];\n\n function onPointerDown(): void {\n if (disabled()) {\n return;\n }\n\n // clear any existing disposables\n disposableListeners.forEach(dispose => dispose());\n\n // update the press state\n pressed.set(true);\n pressStart?.();\n\n // setup global event listeners to catch events on elements outside the directive\n const ownerDocument = elementRef.nativeElement.ownerDocument ?? document;\n\n // if the pointer up event happens on any elements, then we are no longer pressing on this element\n const pointerUp = disposables.addEventListener(\n ownerDocument,\n 'pointerup',\n () => reset(),\n false,\n );\n\n // Instead of relying on the `pointerleave` event, which is not consistently called on iOS Safari,\n // we use the `pointermove` event to determine if we are still \"pressing\".\n // By checking if the target is still within the element, we can determine if the press is ongoing.\n const pointerMove = disposables.addEventListener(\n ownerDocument,\n 'pointermove',\n () => onPointerMove as EventListener,\n false,\n );\n\n // if the pointer is cancelled, then we are no longer pressing on this element\n const pointerCancel = disposables.addEventListener(\n ownerDocument,\n 'pointercancel',\n () => reset(),\n false,\n );\n\n disposableListeners = [pointerUp, pointerMove, pointerCancel];\n }\n\n function onPointerMove(event: PointerEvent): void {\n if (\n elementRef.nativeElement !== event.target &&\n !elementRef.nativeElement.contains(event.target as Node)\n ) {\n reset();\n }\n }\n\n return { pressed };\n}\n","/**\n * Copyright © 2024 Angular Primitives.\n * https://github.com/ng-primitives/ng-primitives\n *\n * This source code is licensed under the Apache 2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { signal, Signal } from '@angular/core';\nimport { setupFocusVisible } from './focus-visible';\nimport { setupHover } from './hover';\nimport { setupPress } from './press';\n\nexport interface NgpButtonOptions {\n disabled?: Signal<boolean>;\n}\n\n/**\n * Setup the button interactions without relying on HostDirectives.\n */\nexport function setupButton({ disabled = signal(false) }: NgpButtonOptions): void {\n setupHover({ disabled });\n setupPress({ disabled });\n setupFocusVisible({ disabled });\n}\n","/**\n * Copyright © 2024 Angular Primitives.\n * https://github.com/ng-primitives/ng-primitives\n *\n * This source code is licensed under the Apache 2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { ElementRef, Signal, effect, inject, signal } from '@angular/core';\nimport { injectDisposables } from 'ng-primitives/utils';\n\nexport interface NgpFocusOptions {\n disabled?: Signal<boolean>;\n focus?: () => void;\n blur?: () => void;\n}\n\nexport interface NgpFocusState {\n isFocused: Signal<boolean>;\n}\n\nexport function setupFocus({\n focus,\n blur,\n disabled = signal(false),\n}: NgpFocusOptions): NgpFocusState {\n /**\n * Access the element reference.\n */\n const elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /**\n * Access the disposables helper.\n */\n const disposables = injectDisposables();\n\n /**\n * Whether the element is currently focused.\n */\n const isFocused = signal<boolean>(false);\n\n // setup event listeners\n disposables.addEventListener(elementRef.nativeElement, 'focus', onFocus);\n disposables.addEventListener(elementRef.nativeElement, 'blur', onBlur);\n\n // anytime the focus state changes we want to update the attribute\n effect(() =>\n isFocused()\n ? elementRef.nativeElement.setAttribute('data-focus', '')\n : elementRef.nativeElement.removeAttribute('data-focus'),\n );\n\n /**\n * Listen for focus events.\n * @param event\n */\n function onFocus(event: FocusEvent): void {\n if (disabled()) {\n return;\n }\n\n const ownerDocument = (event.target as HTMLElement)?.ownerDocument ?? document;\n\n // ensure this element is still focused\n if (ownerDocument.activeElement === event.target && event.currentTarget === event.target) {\n focus?.();\n isFocused.set(true);\n }\n }\n\n /**\n * Listen for blur events.\n * @param event\n */\n function onBlur(event: FocusEvent): void {\n if (disabled()) {\n return;\n }\n\n if (event.currentTarget === event.target) {\n blur?.();\n isFocused.set(false);\n }\n }\n\n return {\n isFocused,\n };\n}\n","/**\n * Copyright © 2024 Angular Primitives.\n * https://github.com/ng-primitives/ng-primitives\n *\n * This source code is licensed under the Apache 2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nexport * from './button';\nexport * from './focus';\nexport * from './focus-visible';\nexport * from './hover';\nexport * from './press';\n","/**\n * Copyright © 2024 Angular Primitives.\n * https://github.com/ng-primitives/ng-primitives\n *\n * This source code is licensed under the Apache 2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { inject, InjectionToken, signal, Signal } from '@angular/core';\n\nexport const NgpOrientationToken = new InjectionToken<NgpCanOrientate>('NgpOrientationToken');\n\nexport interface NgpCanOrientate {\n /**\n * The desired orientation.\n */\n readonly orientation: Signal<NgpOrientation>;\n}\n\n/**\n * Determine if we are in a orientation context.\n * @param orientation The orientation signal for the local context.\n * @returns The orientation signal.\n */\nexport function injectOrientation(\n orientation: Signal<NgpOrientation> = signal<NgpOrientation>('horizontal'),\n): Signal<NgpOrientation> {\n const provider = inject(NgpOrientationToken, { optional: true });\n\n return provider ? provider.orientation : orientation;\n}\n\nexport type NgpOrientation = 'horizontal' | 'vertical';\n","/**\n * Copyright © 2024 Angular Primitives.\n * https://github.com/ng-primitives/ng-primitives\n *\n * This source code is licensed under the Apache 2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { inject, Injectable, PLATFORM_ID } from '@angular/core';\n\n/**\n * A utility service for injecting styles into the document.\n * Angular doesn't allow directives to specify styles, only components.\n * As we ship directives, occasionally we need to associate styles with them.\n * This service allows us to programmatically inject styles into the document.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class StyleInjector {\n /**\n * Access the document.\n */\n private readonly document = inject(DOCUMENT);\n\n /**\n * Detect the platform.\n */\n private readonly platformId = inject(PLATFORM_ID);\n\n /**\n * Store the map of style elements with their unique identifiers.\n */\n private readonly styleElements = new Map<string, HTMLStyleElement>();\n\n constructor() {\n if (isPlatformBrowser(this.platformId)) {\n this.collectServerStyles();\n }\n }\n\n /**\n * Inject a style into the document.\n * @param id The unique identifier for the style.\n * @param style The style to inject.\n */\n add(id: string, style: string): void {\n if (this.styleElements.has(id)) {\n return;\n }\n\n const styleElement = this.document.createElement('style');\n styleElement.setAttribute('data-ngp-style', id);\n styleElement.textContent = style;\n\n this.document.head.appendChild(styleElement);\n this.styleElements.set(id, styleElement);\n }\n\n /**\n * Remove a style from the document.\n * @param id The unique identifier for the style.\n */\n remove(id: string): void {\n const styleElement = this.styleElements.get(id);\n\n if (styleElement) {\n this.document.head.removeChild(styleElement);\n this.styleElements.delete(id);\n }\n }\n\n /**\n * Collect any styles that were rendered by the server.\n */\n private collectServerStyles(): void {\n const styleElements = this.document.querySelectorAll<HTMLStyleElement>('style[data-ngp-style]');\n\n styleElements.forEach(styleElement => {\n const id = styleElement.getAttribute('data-ngp-style');\n\n if (id) {\n this.styleElements.set(id, styleElement);\n }\n });\n }\n}\n\nexport function injectStyleInjector(): StyleInjector {\n return inject(StyleInjector);\n}\n","/**\n * Copyright © 2024 Angular Primitives.\n * https://github.com/ng-primitives/ng-primitives\n *\n * This source code is licensed under the Apache 2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nexport * from './disabled/disabled';\nexport * from './interactions/index';\nexport * from './orientation/orientation';\nexport * from './style-injector/style-injector';\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-internal.mjs","sources":["../../../../packages/ng-primitives/internal/src/disabled/disabled.ts","../../../../packages/ng-primitives/internal/src/interactions/focus-visible.ts","../../../../packages/ng-primitives/internal/src/interactions/hover.ts","../../../../packages/ng-primitives/internal/src/interactions/press.ts","../../../../packages/ng-primitives/internal/src/interactions/button.ts","../../../../packages/ng-primitives/internal/src/interactions/focus.ts","../../../../packages/ng-primitives/internal/src/interactions/index.ts","../../../../packages/ng-primitives/internal/src/orientation/orientation.ts","../../../../packages/ng-primitives/internal/src/style-injector/style-injector.ts","../../../../packages/ng-primitives/internal/src/index.ts","../../../../packages/ng-primitives/internal/src/ng-primitives-internal.ts"],"sourcesContent":["/**\n * Copyright © 2024 Angular Primitives.\n * https://github.com/ng-primitives/ng-primitives\n *\n * This source code is licensed under the Apache 2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { computed, inject, InjectionToken, signal, Signal } from '@angular/core';\n\nexport const NgpDisabledToken = new InjectionToken<NgpCanDisable>('NgpDisabledToken');\n\nexport interface NgpCanDisable {\n /**\n * Whether the element is disabled.\n */\n readonly disabled: Signal<boolean>;\n}\n\n/**\n * Determine if we are in a disabled context.\n * @param disabled The disabled signal for the local context.\n * @returns The disabled signal.\n */\nexport function injectDisabled(\n disabled: Signal<boolean> = signal<boolean>(false),\n): Signal<boolean> {\n const provider = inject(NgpDisabledToken, { optional: true, self: true });\n\n return computed(() => provider?.disabled() || disabled());\n}\n","/**\n * Copyright © 2024 Angular Primitives.\n * https://github.com/ng-primitives/ng-primitives\n *\n * This source code is licensed under the Apache 2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { effect, ElementRef, inject, Signal, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { onBooleanChange } from 'ng-primitives/utils';\n\nexport interface NgpFocusVisibleOptions {\n disabled?: Signal<boolean>;\n focusChange?: (value: boolean) => void;\n}\n\nexport interface NgpFocusVisibleState {\n isFocused: Signal<boolean>;\n}\n\nexport function setupFocusVisible({\n focusChange,\n disabled = signal(false),\n}: NgpFocusVisibleOptions): NgpFocusVisibleState {\n /**\n * Access the element that the directive is applied to.\n */\n const elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /**\n * Access the focus monitor.\n */\n const focusMonitor = inject(FocusMonitor);\n\n /**\n * Whether the element is currently focused.\n */\n const isFocused = signal<boolean>(false);\n\n // handle focus state\n focusMonitor\n .monitor(elementRef.nativeElement)\n .pipe(takeUntilDestroyed())\n .subscribe(origin =>\n // null indicates the element was blurred\n origin === null ? onBlur() : onFocus(origin),\n );\n\n // if the component becomes disabled and it is focused, hide the focus\n onBooleanChange(disabled, () => focus(false));\n\n // anytime the focus state changes we want to update the attribute\n effect(() =>\n isFocused()\n ? elementRef.nativeElement.setAttribute('data-focus-visible', '')\n : elementRef.nativeElement.removeAttribute('data-focus-visible'),\n );\n\n function onFocus(origin: FocusOrigin): void {\n if (disabled() || isFocused()) {\n return;\n }\n\n // for some elements the focus visible state should always appear on focus\n if (alwaysShowFocus()) {\n focus(true);\n return;\n }\n\n // if the focus origin is keyboard or program(focused programmatically), then the focus is visible\n if (origin === 'keyboard') {\n focus(true);\n return;\n }\n }\n\n function onBlur(): void {\n if (disabled() || !isFocused()) {\n return;\n }\n\n focus(false);\n }\n\n /**\n * Trigger the focus signal along with the focusChange event.\n */\n function focus(value: boolean) {\n if (isFocused() === value) {\n return;\n }\n\n isFocused.set(value);\n focusChange?.(value);\n }\n\n function alwaysShowFocus(): boolean {\n const nonTextInputTypes = [\n 'checkbox',\n 'radio',\n 'range',\n 'color',\n 'file',\n 'image',\n 'button',\n 'submit',\n 'reset',\n ];\n\n // if this is an input element and it is a text input\n if (\n elementRef.nativeElement instanceof HTMLInputElement &&\n !nonTextInputTypes.includes(elementRef.nativeElement.type)\n ) {\n return true;\n }\n\n // if this is a textarea\n if (elementRef.nativeElement instanceof HTMLTextAreaElement) {\n return true;\n }\n\n // if this is an element with contenteditable\n if (\n elementRef.nativeElement.isContentEditable ||\n elementRef.nativeElement.hasAttribute('contenteditable')\n ) {\n return true;\n }\n\n return false;\n }\n\n return {\n isFocused,\n };\n}\n","/**\n * Copyright © 2024 Angular Primitives.\n * https://github.com/ng-primitives/ng-primitives\n *\n * This source code is licensed under the Apache 2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { effect, ElementRef, inject, Injectable, PLATFORM_ID, Signal, signal } from '@angular/core';\nimport { injectDisposables, onBooleanChange } from 'ng-primitives/utils';\n\n/**\n * We use a service here as this value is a singleton\n * and allows us to register the dom events once.\n */\n@Injectable({\n providedIn: 'root',\n})\nclass GlobalPointerEvents {\n /**\n * Whether global mouse events should be ignored.\n */\n ignoreEmulatedMouseEvents: boolean = false;\n\n /**\n * Access the document.\n */\n private readonly document = inject(DOCUMENT);\n\n /**\n * Determine the platform id.\n */\n private readonly platformId = inject(PLATFORM_ID);\n\n constructor() {\n // we only want to setup events on the client\n if (isPlatformBrowser(this.platformId)) {\n this.setupGlobalTouchEvents();\n }\n }\n\n private setupGlobalTouchEvents(): void {\n this.document.addEventListener('pointerup', this.handleGlobalPointerEvent.bind(this));\n this.document.addEventListener('touchend', this.setGlobalIgnoreEmulatedMouseEvents.bind(this));\n }\n\n private setGlobalIgnoreEmulatedMouseEvents(): void {\n this.ignoreEmulatedMouseEvents = true;\n // Clear globalIgnoreEmulatedMouseEvents after a short timeout. iOS fires onPointerEnter\n // with pointerType=\"mouse\" immediately after onPointerUp and before onFocus. On other\n // devices that don't have this quirk, we don't want to ignore a mouse hover sometime in\n // the distant future because a user previously touched the element.\n setTimeout(() => (this.ignoreEmulatedMouseEvents = false), 50);\n }\n\n private handleGlobalPointerEvent(event: PointerEvent): void {\n if (event.pointerType === 'touch') {\n this.setGlobalIgnoreEmulatedMouseEvents();\n }\n }\n}\n\ninterface NgpHoverOptions {\n disabled?: Signal<boolean>;\n hoverStart?: () => void;\n hoverEnd?: () => void;\n}\n\nexport interface NgpHoverState {\n hovered: Signal<boolean>;\n}\n\n/**\n * Programatically add the hover functionality to an element.\n * This is useful in cases where we can't necessarily use a HostDirective,\n * because there is a chance the directive has already been used.\n */\nexport function setupHover({\n hoverStart,\n hoverEnd,\n disabled = signal(false),\n}: NgpHoverOptions): NgpHoverState {\n /**\n * Access the element.\n */\n const elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /**\n * Access the global pointer events handler.\n */\n const globalPointerEvents = inject(GlobalPointerEvents);\n\n /**\n * Access the disposable helper.\n */\n const disposables = injectDisposables();\n\n /**\n * Store the current hover state.\n */\n const hovered = signal<boolean>(false);\n\n /**\n * Whether this element should ignore emulated mouse events.\n */\n let ignoreEmulatedMouseEvents: boolean = false;\n\n /**\n * Setup event listeners.\n */\n disposables.addEventListener(elementRef.nativeElement, 'pointerenter', onPointerEnter);\n disposables.addEventListener(elementRef.nativeElement, 'pointerleave', onPointerLeave);\n disposables.addEventListener(elementRef.nativeElement, 'touchstart', onTouchStart);\n disposables.addEventListener(elementRef.nativeElement, 'mouseenter', onMouseEnter);\n disposables.addEventListener(elementRef.nativeElement, 'mouseleave', onMouseLeave);\n\n // anytime the disabled state changes to true, we must reset the hover state\n if (disabled) {\n onBooleanChange(disabled, reset);\n }\n\n // anytime the hover state changes we want to update the attribute\n effect(() =>\n hovered()\n ? elementRef.nativeElement.setAttribute('data-hover', '')\n : elementRef.nativeElement.removeAttribute('data-hover'),\n );\n\n /**\n * Reset the hover state.\n */\n function reset(): void {\n onHoverEnd('mouse');\n }\n\n /**\n * Trigger the hover start events.\n * @param event\n * @param pointerType\n */\n function onHoverStart(event: Event, pointerType: string): void {\n if (\n disabled() ||\n pointerType === 'touch' ||\n hovered() ||\n !(event.currentTarget as Element)?.contains(event.target as Element)\n ) {\n return;\n }\n\n hovered.set(true);\n hoverStart?.();\n }\n\n /**\n * Trigger the hover end events.\n * @param pointerType\n */\n function onHoverEnd(pointerType: string): void {\n if (pointerType === 'touch' || !hovered()) {\n return;\n }\n\n hovered.set(false);\n hoverEnd?.();\n }\n\n function onPointerEnter(event: PointerEvent): void {\n if (globalPointerEvents.ignoreEmulatedMouseEvents && event.pointerType === 'mouse') {\n return;\n }\n\n onHoverStart(event, event.pointerType);\n }\n\n function onPointerLeave(event: PointerEvent): void {\n if (!disabled() && (event.currentTarget as Element)?.contains(event.target as Element)) {\n onHoverEnd(event.pointerType);\n }\n }\n\n function onTouchStart(): void {\n ignoreEmulatedMouseEvents = true;\n }\n\n function onMouseEnter(event: MouseEvent): void {\n if (!ignoreEmulatedMouseEvents && !globalPointerEvents.ignoreEmulatedMouseEvents) {\n onHoverStart(event, 'mouse');\n }\n\n ignoreEmulatedMouseEvents = false;\n }\n\n function onMouseLeave(event: MouseEvent): void {\n if (!disabled() && (event.currentTarget as Element)?.contains(event.target as Element)) {\n onHoverEnd('mouse');\n }\n }\n\n return { hovered };\n}\n","/**\n * Copyright © 2024 Angular Primitives.\n * https://github.com/ng-primitives/ng-primitives\n *\n * This source code is licensed under the Apache 2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { ElementRef, Signal, effect, inject, signal } from '@angular/core';\nimport { injectDisposables } from 'ng-primitives/utils';\n\ninterface NgpPressState {\n pressed: Signal<boolean>;\n}\n\ninterface NgpPressOptions {\n disabled?: Signal<boolean>;\n pressStart?: () => void;\n pressEnd?: () => void;\n}\n\nexport function setupPress({\n pressStart,\n pressEnd,\n disabled = signal(false),\n}: NgpPressOptions): NgpPressState {\n /**\n * Access the element reference.\n */\n const elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /**\n * Access the disposables helper.\n */\n const disposables = injectDisposables();\n\n /**\n * Whether the element is currently pressed.\n */\n const pressed = signal<boolean>(false);\n\n // setup event listeners\n disposables.addEventListener(elementRef.nativeElement, 'pointerdown', onPointerDown);\n\n // anytime the press state changes we want to update the attribute\n effect(() =>\n pressed() && !disabled()\n ? elementRef.nativeElement.setAttribute('data-press', '')\n : elementRef.nativeElement.removeAttribute('data-press'),\n );\n\n /**\n * Reset the press state.\n */\n function reset(): void {\n // if we are not pressing, then do nothing\n if (!pressed()) {\n return;\n }\n\n // clear any existing disposables\n disposableListeners.forEach(dispose => dispose());\n pressed.set(false);\n pressEnd?.();\n }\n\n /**\n * Store the list of disposables.\n */\n let disposableListeners: (() => void)[] = [];\n\n function onPointerDown(): void {\n if (disabled()) {\n return;\n }\n\n // clear any existing disposables\n disposableListeners.forEach(dispose => dispose());\n\n // update the press state\n pressed.set(true);\n pressStart?.();\n\n // setup global event listeners to catch events on elements outside the directive\n const ownerDocument = elementRef.nativeElement.ownerDocument ?? document;\n\n // if the pointer up event happens on any elements, then we are no longer pressing on this element\n const pointerUp = disposables.addEventListener(\n ownerDocument,\n 'pointerup',\n () => reset(),\n false,\n );\n\n // Instead of relying on the `pointerleave` event, which is not consistently called on iOS Safari,\n // we use the `pointermove` event to determine if we are still \"pressing\".\n // By checking if the target is still within the element, we can determine if the press is ongoing.\n const pointerMove = disposables.addEventListener(\n ownerDocument,\n 'pointermove',\n () => onPointerMove as EventListener,\n false,\n );\n\n // if the pointer is cancelled, then we are no longer pressing on this element\n const pointerCancel = disposables.addEventListener(\n ownerDocument,\n 'pointercancel',\n () => reset(),\n false,\n );\n\n disposableListeners = [pointerUp, pointerMove, pointerCancel];\n }\n\n function onPointerMove(event: PointerEvent): void {\n if (\n elementRef.nativeElement !== event.target &&\n !elementRef.nativeElement.contains(event.target as Node)\n ) {\n reset();\n }\n }\n\n return { pressed };\n}\n","/**\n * Copyright © 2024 Angular Primitives.\n * https://github.com/ng-primitives/ng-primitives\n *\n * This source code is licensed under the Apache 2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { signal, Signal } from '@angular/core';\nimport { setupFocusVisible } from './focus-visible';\nimport { setupHover } from './hover';\nimport { setupPress } from './press';\n\nexport interface NgpButtonOptions {\n disabled?: Signal<boolean>;\n}\n\n/**\n * Setup the button interactions without relying on HostDirectives.\n */\nexport function setupButton({ disabled = signal(false) }: NgpButtonOptions): void {\n setupHover({ disabled });\n setupPress({ disabled });\n setupFocusVisible({ disabled });\n}\n","/**\n * Copyright © 2024 Angular Primitives.\n * https://github.com/ng-primitives/ng-primitives\n *\n * This source code is licensed under the Apache 2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { ElementRef, Signal, effect, inject, signal } from '@angular/core';\nimport { injectDisposables } from 'ng-primitives/utils';\n\nexport interface NgpFocusOptions {\n disabled?: Signal<boolean>;\n focus?: () => void;\n blur?: () => void;\n}\n\nexport interface NgpFocusState {\n isFocused: Signal<boolean>;\n}\n\nexport function setupFocus({\n focus,\n blur,\n disabled = signal(false),\n}: NgpFocusOptions): NgpFocusState {\n /**\n * Access the element reference.\n */\n const elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /**\n * Access the disposables helper.\n */\n const disposables = injectDisposables();\n\n /**\n * Whether the element is currently focused.\n */\n const isFocused = signal<boolean>(false);\n\n // setup event listeners\n disposables.addEventListener(elementRef.nativeElement, 'focus', onFocus);\n disposables.addEventListener(elementRef.nativeElement, 'blur', onBlur);\n\n // anytime the focus state changes we want to update the attribute\n effect(() =>\n isFocused()\n ? elementRef.nativeElement.setAttribute('data-focus', '')\n : elementRef.nativeElement.removeAttribute('data-focus'),\n );\n\n /**\n * Listen for focus events.\n * @param event\n */\n function onFocus(event: FocusEvent): void {\n if (disabled()) {\n return;\n }\n\n const ownerDocument = (event.target as HTMLElement)?.ownerDocument ?? document;\n\n // ensure this element is still focused\n if (ownerDocument.activeElement === event.target && event.currentTarget === event.target) {\n focus?.();\n isFocused.set(true);\n }\n }\n\n /**\n * Listen for blur events.\n * @param event\n */\n function onBlur(event: FocusEvent): void {\n if (disabled()) {\n return;\n }\n\n if (event.currentTarget === event.target) {\n blur?.();\n isFocused.set(false);\n }\n }\n\n return {\n isFocused,\n };\n}\n","/**\n * Copyright © 2024 Angular Primitives.\n * https://github.com/ng-primitives/ng-primitives\n *\n * This source code is licensed under the Apache 2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nexport * from './button';\nexport * from './focus';\nexport * from './focus-visible';\nexport * from './hover';\nexport * from './press';\n","/**\n * Copyright © 2024 Angular Primitives.\n * https://github.com/ng-primitives/ng-primitives\n *\n * This source code is licensed under the Apache 2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { inject, InjectionToken, signal, Signal } from '@angular/core';\n\nexport const NgpOrientationToken = new InjectionToken<NgpCanOrientate>('NgpOrientationToken');\n\nexport interface NgpCanOrientate {\n /**\n * The desired orientation.\n */\n readonly orientation: Signal<NgpOrientation>;\n}\n\n/**\n * Determine if we are in a orientation context.\n * @param orientation The orientation signal for the local context.\n * @returns The orientation signal.\n */\nexport function injectOrientation(\n orientation: Signal<NgpOrientation> = signal<NgpOrientation>('horizontal'),\n): Signal<NgpOrientation> {\n const provider = inject(NgpOrientationToken, { optional: true });\n\n return provider ? provider.orientation : orientation;\n}\n\nexport type NgpOrientation = 'horizontal' | 'vertical';\n","/**\n * Copyright © 2024 Angular Primitives.\n * https://github.com/ng-primitives/ng-primitives\n *\n * This source code is licensed under the Apache 2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { inject, Injectable, PLATFORM_ID } from '@angular/core';\n\n/**\n * A utility service for injecting styles into the document.\n * Angular doesn't allow directives to specify styles, only components.\n * As we ship directives, occasionally we need to associate styles with them.\n * This service allows us to programmatically inject styles into the document.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class StyleInjector {\n /**\n * Access the document.\n */\n private readonly document = inject(DOCUMENT);\n\n /**\n * Detect the platform.\n */\n private readonly platformId = inject(PLATFORM_ID);\n\n /**\n * Store the map of style elements with their unique identifiers.\n */\n private readonly styleElements = new Map<string, HTMLStyleElement>();\n\n constructor() {\n if (isPlatformBrowser(this.platformId)) {\n this.collectServerStyles();\n }\n }\n\n /**\n * Inject a style into the document.\n * @param id The unique identifier for the style.\n * @param style The style to inject.\n */\n add(id: string, style: string): void {\n if (this.styleElements.has(id)) {\n return;\n }\n\n const styleElement = this.document.createElement('style');\n styleElement.setAttribute('data-ngp-style', id);\n styleElement.textContent = style;\n\n this.document.head.appendChild(styleElement);\n this.styleElements.set(id, styleElement);\n }\n\n /**\n * Remove a style from the document.\n * @param id The unique identifier for the style.\n */\n remove(id: string): void {\n const styleElement = this.styleElements.get(id);\n\n if (styleElement) {\n this.document.head.removeChild(styleElement);\n this.styleElements.delete(id);\n }\n }\n\n /**\n * Collect any styles that were rendered by the server.\n */\n private collectServerStyles(): void {\n const styleElements = this.document.querySelectorAll<HTMLStyleElement>('style[data-ngp-style]');\n\n styleElements.forEach(styleElement => {\n const id = styleElement.getAttribute('data-ngp-style');\n\n if (id) {\n this.styleElements.set(id, styleElement);\n }\n });\n }\n}\n\nexport function injectStyleInjector(): StyleInjector {\n return inject(StyleInjector);\n}\n","/**\n * Copyright © 2024 Angular Primitives.\n * https://github.com/ng-primitives/ng-primitives\n *\n * This source code is licensed under the Apache 2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nexport * from './disabled/disabled';\nexport * from './interactions/index';\nexport * from './orientation/orientation';\nexport * from './style-injector/style-injector';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;AAAA;;;;;;AAMG;MAGU,gBAAgB,GAAG,IAAI,cAAc,CAAgB,kBAAkB,EAAE;AAStF;;;;AAIG;SACa,cAAc,CAC5B,WAA4B,MAAM,CAAU,KAAK,CAAC,EAAA;AAElD,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAE1E,IAAA,OAAO,QAAQ,CAAC,MAAM,QAAQ,EAAE,QAAQ,EAAE,IAAI,QAAQ,EAAE,CAAC,CAAC;AAC5D;;AC7BA;;;;;;AAMG;AAea,SAAA,iBAAiB,CAAC,EAChC,WAAW,EACX,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,GACD,EAAA;AACvB;;AAEG;AACH,IAAA,MAAM,UAAU,GAAG,MAAM,CAA0B,UAAU,CAAC,CAAC;AAE/D;;AAEG;AACH,IAAA,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AAE1C;;AAEG;AACH,IAAA,MAAM,SAAS,GAAG,MAAM,CAAU,KAAK,CAAC,CAAC;;IAGzC,YAAY;AACT,SAAA,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC;SACjC,IAAI,CAAC,kBAAkB,EAAE,CAAC;SAC1B,SAAS,CAAC,MAAM;;AAEf,IAAA,MAAM,KAAK,IAAI,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAC7C,CAAC;;IAGJ,eAAe,CAAC,QAAQ,EAAE,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;;AAG9C,IAAA,MAAM,CAAC,MACL,SAAS,EAAE;UACP,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC,oBAAoB,EAAE,EAAE,CAAC;UAC/D,UAAU,CAAC,aAAa,CAAC,eAAe,CAAC,oBAAoB,CAAC,CACnE,CAAC;IAEF,SAAS,OAAO,CAAC,MAAmB,EAAA;AAClC,QAAA,IAAI,QAAQ,EAAE,IAAI,SAAS,EAAE,EAAE;YAC7B,OAAO;SACR;;QAGD,IAAI,eAAe,EAAE,EAAE;YACrB,KAAK,CAAC,IAAI,CAAC,CAAC;YACZ,OAAO;SACR;;AAGD,QAAA,IAAI,MAAM,KAAK,UAAU,EAAE;YACzB,KAAK,CAAC,IAAI,CAAC,CAAC;YACZ,OAAO;SACR;KACF;AAED,IAAA,SAAS,MAAM,GAAA;AACb,QAAA,IAAI,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE;YAC9B,OAAO;SACR;QAED,KAAK,CAAC,KAAK,CAAC,CAAC;KACd;AAED;;AAEG;IACH,SAAS,KAAK,CAAC,KAAc,EAAA;AAC3B,QAAA,IAAI,SAAS,EAAE,KAAK,KAAK,EAAE;YACzB,OAAO;SACR;AAED,QAAA,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACrB,QAAA,WAAW,GAAG,KAAK,CAAC,CAAC;KACtB;AAED,IAAA,SAAS,eAAe,GAAA;AACtB,QAAA,MAAM,iBAAiB,GAAG;YACxB,UAAU;YACV,OAAO;YACP,OAAO;YACP,OAAO;YACP,MAAM;YACN,OAAO;YACP,QAAQ;YACR,QAAQ;YACR,OAAO;SACR,CAAC;;AAGF,QAAA,IACE,UAAU,CAAC,aAAa,YAAY,gBAAgB;YACpD,CAAC,iBAAiB,CAAC,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,EAC1D;AACA,YAAA,OAAO,IAAI,CAAC;SACb;;AAGD,QAAA,IAAI,UAAU,CAAC,aAAa,YAAY,mBAAmB,EAAE;AAC3D,YAAA,OAAO,IAAI,CAAC;SACb;;AAGD,QAAA,IACE,UAAU,CAAC,aAAa,CAAC,iBAAiB;YAC1C,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC,iBAAiB,CAAC,EACxD;AACA,YAAA,OAAO,IAAI,CAAC;SACb;AAED,QAAA,OAAO,KAAK,CAAC;KACd;IAED,OAAO;QACL,SAAS;KACV,CAAC;AACJ;;ACzIA;;;;;;AAMG;AAKH;;;AAGG;AACH,MAGM,mBAAmB,CAAA;AAgBvB,IAAA,WAAA,GAAA;AAfA;;AAEG;QACH,IAAyB,CAAA,yBAAA,GAAY,KAAK,CAAC;AAE3C;;AAEG;AACc,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AAE7C;;AAEG;AACc,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;;AAIhD,QAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACtC,IAAI,CAAC,sBAAsB,EAAE,CAAC;SAC/B;KACF;IAEO,sBAAsB,GAAA;AAC5B,QAAA,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACtF,QAAA,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;KAChG;IAEO,kCAAkC,GAAA;AACxC,QAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;;;;;AAKtC,QAAA,UAAU,CAAC,OAAO,IAAI,CAAC,yBAAyB,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;KAChE;AAEO,IAAA,wBAAwB,CAAC,KAAmB,EAAA;AAClD,QAAA,IAAI,KAAK,CAAC,WAAW,KAAK,OAAO,EAAE;YACjC,IAAI,CAAC,kCAAkC,EAAE,CAAC;SAC3C;KACF;+GAzCG,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFX,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEd,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAHxB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;AAuDD;;;;AAIG;AACa,SAAA,UAAU,CAAC,EACzB,UAAU,EACV,QAAQ,EACR,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,GACR,EAAA;AAChB;;AAEG;AACH,IAAA,MAAM,UAAU,GAAG,MAAM,CAA0B,UAAU,CAAC,CAAC;AAE/D;;AAEG;AACH,IAAA,MAAM,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAExD;;AAEG;AACH,IAAA,MAAM,WAAW,GAAG,iBAAiB,EAAE,CAAC;AAExC;;AAEG;AACH,IAAA,MAAM,OAAO,GAAG,MAAM,CAAU,KAAK,CAAC,CAAC;AAEvC;;AAEG;IACH,IAAI,yBAAyB,GAAY,KAAK,CAAC;AAE/C;;AAEG;IACH,WAAW,CAAC,gBAAgB,CAAC,UAAU,CAAC,aAAa,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;IACvF,WAAW,CAAC,gBAAgB,CAAC,UAAU,CAAC,aAAa,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;IACvF,WAAW,CAAC,gBAAgB,CAAC,UAAU,CAAC,aAAa,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;IACnF,WAAW,CAAC,gBAAgB,CAAC,UAAU,CAAC,aAAa,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;IACnF,WAAW,CAAC,gBAAgB,CAAC,UAAU,CAAC,aAAa,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;;IAGnF,IAAI,QAAQ,EAAE;AACZ,QAAA,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;KAClC;;AAGD,IAAA,MAAM,CAAC,MACL,OAAO,EAAE;UACL,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC,YAAY,EAAE,EAAE,CAAC;UACvD,UAAU,CAAC,aAAa,CAAC,eAAe,CAAC,YAAY,CAAC,CAC3D,CAAC;AAEF;;AAEG;AACH,IAAA,SAAS,KAAK,GAAA;QACZ,UAAU,CAAC,OAAO,CAAC,CAAC;KACrB;AAED;;;;AAIG;AACH,IAAA,SAAS,YAAY,CAAC,KAAY,EAAE,WAAmB,EAAA;AACrD,QAAA,IACE,QAAQ,EAAE;AACV,YAAA,WAAW,KAAK,OAAO;AACvB,YAAA,OAAO,EAAE;YACT,CAAE,KAAK,CAAC,aAAyB,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAiB,CAAC,EACpE;YACA,OAAO;SACR;AAED,QAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,UAAU,IAAI,CAAC;KAChB;AAED;;;AAGG;IACH,SAAS,UAAU,CAAC,WAAmB,EAAA;QACrC,IAAI,WAAW,KAAK,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE;YACzC,OAAO;SACR;AAED,QAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnB,QAAQ,IAAI,CAAC;KACd;IAED,SAAS,cAAc,CAAC,KAAmB,EAAA;QACzC,IAAI,mBAAmB,CAAC,yBAAyB,IAAI,KAAK,CAAC,WAAW,KAAK,OAAO,EAAE;YAClF,OAAO;SACR;AAED,QAAA,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;KACxC;IAED,SAAS,cAAc,CAAC,KAAmB,EAAA;AACzC,QAAA,IAAI,CAAC,QAAQ,EAAE,IAAK,KAAK,CAAC,aAAyB,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAiB,CAAC,EAAE;AACtF,YAAA,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;SAC/B;KACF;AAED,IAAA,SAAS,YAAY,GAAA;QACnB,yBAAyB,GAAG,IAAI,CAAC;KAClC;IAED,SAAS,YAAY,CAAC,KAAiB,EAAA;QACrC,IAAI,CAAC,yBAAyB,IAAI,CAAC,mBAAmB,CAAC,yBAAyB,EAAE;AAChF,YAAA,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;SAC9B;QAED,yBAAyB,GAAG,KAAK,CAAC;KACnC;IAED,SAAS,YAAY,CAAC,KAAiB,EAAA;AACrC,QAAA,IAAI,CAAC,QAAQ,EAAE,IAAK,KAAK,CAAC,aAAyB,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAiB,CAAC,EAAE;YACtF,UAAU,CAAC,OAAO,CAAC,CAAC;SACrB;KACF;IAED,OAAO,EAAE,OAAO,EAAE,CAAC;AACrB;;ACxMA;;;;;;AAMG;AAca,SAAA,UAAU,CAAC,EACzB,UAAU,EACV,QAAQ,EACR,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,GACR,EAAA;AAChB;;AAEG;AACH,IAAA,MAAM,UAAU,GAAG,MAAM,CAA0B,UAAU,CAAC,CAAC;AAE/D;;AAEG;AACH,IAAA,MAAM,WAAW,GAAG,iBAAiB,EAAE,CAAC;AAExC;;AAEG;AACH,IAAA,MAAM,OAAO,GAAG,MAAM,CAAU,KAAK,CAAC,CAAC;;IAGvC,WAAW,CAAC,gBAAgB,CAAC,UAAU,CAAC,aAAa,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;;IAGrF,MAAM,CAAC,MACL,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE;UACpB,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC,YAAY,EAAE,EAAE,CAAC;UACvD,UAAU,CAAC,aAAa,CAAC,eAAe,CAAC,YAAY,CAAC,CAC3D,CAAC;AAEF;;AAEG;AACH,IAAA,SAAS,KAAK,GAAA;;AAEZ,QAAA,IAAI,CAAC,OAAO,EAAE,EAAE;YACd,OAAO;SACR;;QAGD,mBAAmB,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,EAAE,CAAC,CAAC;AAClD,QAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnB,QAAQ,IAAI,CAAC;KACd;AAED;;AAEG;IACH,IAAI,mBAAmB,GAAmB,EAAE,CAAC;AAE7C,IAAA,SAAS,aAAa,GAAA;QACpB,IAAI,QAAQ,EAAE,EAAE;YACd,OAAO;SACR;;QAGD,mBAAmB,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,EAAE,CAAC,CAAC;;AAGlD,QAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,UAAU,IAAI,CAAC;;QAGf,MAAM,aAAa,GAAG,UAAU,CAAC,aAAa,CAAC,aAAa,IAAI,QAAQ,CAAC;;AAGzE,QAAA,MAAM,SAAS,GAAG,WAAW,CAAC,gBAAgB,CAC5C,aAAa,EACb,WAAW,EACX,MAAM,KAAK,EAAE,EACb,KAAK,CACN,CAAC;;;;AAKF,QAAA,MAAM,WAAW,GAAG,WAAW,CAAC,gBAAgB,CAC9C,aAAa,EACb,aAAa,EACb,MAAM,aAA8B,EACpC,KAAK,CACN,CAAC;;AAGF,QAAA,MAAM,aAAa,GAAG,WAAW,CAAC,gBAAgB,CAChD,aAAa,EACb,eAAe,EACf,MAAM,KAAK,EAAE,EACb,KAAK,CACN,CAAC;QAEF,mBAAmB,GAAG,CAAC,SAAS,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;KAC/D;IAED,SAAS,aAAa,CAAC,KAAmB,EAAA;AACxC,QAAA,IACE,UAAU,CAAC,aAAa,KAAK,KAAK,CAAC,MAAM;YACzC,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC,EACxD;AACA,YAAA,KAAK,EAAE,CAAC;SACT;KACF;IAED,OAAO,EAAE,OAAO,EAAE,CAAC;AACrB;;AC5HA;;;;;;AAMG;AAUH;;AAEG;AACG,SAAU,WAAW,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,EAAoB,EAAA;AACxE,IAAA,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACzB,IAAA,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACzB,IAAA,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AAClC;;ACvBA;;;;;;AAMG;AAca,SAAA,UAAU,CAAC,EACzB,KAAK,EACL,IAAI,EACJ,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,GACR,EAAA;AAChB;;AAEG;AACH,IAAA,MAAM,UAAU,GAAG,MAAM,CAA0B,UAAU,CAAC,CAAC;AAE/D;;AAEG;AACH,IAAA,MAAM,WAAW,GAAG,iBAAiB,EAAE,CAAC;AAExC;;AAEG;AACH,IAAA,MAAM,SAAS,GAAG,MAAM,CAAU,KAAK,CAAC,CAAC;;IAGzC,WAAW,CAAC,gBAAgB,CAAC,UAAU,CAAC,aAAa,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACzE,WAAW,CAAC,gBAAgB,CAAC,UAAU,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;;AAGvE,IAAA,MAAM,CAAC,MACL,SAAS,EAAE;UACP,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC,YAAY,EAAE,EAAE,CAAC;UACvD,UAAU,CAAC,aAAa,CAAC,eAAe,CAAC,YAAY,CAAC,CAC3D,CAAC;AAEF;;;AAGG;IACH,SAAS,OAAO,CAAC,KAAiB,EAAA;QAChC,IAAI,QAAQ,EAAE,EAAE;YACd,OAAO;SACR;QAED,MAAM,aAAa,GAAI,KAAK,CAAC,MAAsB,EAAE,aAAa,IAAI,QAAQ,CAAC;;AAG/E,QAAA,IAAI,aAAa,CAAC,aAAa,KAAK,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,aAAa,KAAK,KAAK,CAAC,MAAM,EAAE;YACxF,KAAK,IAAI,CAAC;AACV,YAAA,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SACrB;KACF;AAED;;;AAGG;IACH,SAAS,MAAM,CAAC,KAAiB,EAAA;QAC/B,IAAI,QAAQ,EAAE,EAAE;YACd,OAAO;SACR;QAED,IAAI,KAAK,CAAC,aAAa,KAAK,KAAK,CAAC,MAAM,EAAE;YACxC,IAAI,IAAI,CAAC;AACT,YAAA,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;SACtB;KACF;IAED,OAAO;QACL,SAAS;KACV,CAAC;AACJ;;ACvFA;;;;;;AAMG;;ACNH;;;;;;AAMG;MAGU,mBAAmB,GAAG,IAAI,cAAc,CAAkB,qBAAqB,EAAE;AAS9F;;;;AAIG;SACa,iBAAiB,CAC/B,cAAsC,MAAM,CAAiB,YAAY,CAAC,EAAA;AAE1E,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAEjE,OAAO,QAAQ,GAAG,QAAQ,CAAC,WAAW,GAAG,WAAW,CAAC;AACvD;;AC7BA;;;;;;AAMG;AAIH;;;;;AAKG;MAIU,aAAa,CAAA;AAgBxB,IAAA,WAAA,GAAA;AAfA;;AAEG;AACc,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AAE7C;;AAEG;AACc,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAElD;;AAEG;AACc,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,GAAG,EAA4B,CAAC;AAGnE,QAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACtC,IAAI,CAAC,mBAAmB,EAAE,CAAC;SAC5B;KACF;AAED;;;;AAIG;IACH,GAAG,CAAC,EAAU,EAAE,KAAa,EAAA;QAC3B,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAC9B,OAAO;SACR;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAC1D,QAAA,YAAY,CAAC,YAAY,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;AAChD,QAAA,YAAY,CAAC,WAAW,GAAG,KAAK,CAAC;QAEjC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QAC7C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;KAC1C;AAED;;;AAGG;AACH,IAAA,MAAM,CAAC,EAAU,EAAA;QACf,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhD,IAAI,YAAY,EAAE;YAChB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;AAC7C,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SAC/B;KACF;AAED;;AAEG;IACK,mBAAmB,GAAA;QACzB,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAmB,uBAAuB,CAAC,CAAC;AAEhG,QAAA,aAAa,CAAC,OAAO,CAAC,YAAY,IAAG;YACnC,MAAM,EAAE,GAAG,YAAY,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;YAEvD,IAAI,EAAE,EAAE;gBACN,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;aAC1C;AACH,SAAC,CAAC,CAAC;KACJ;+GAlEU,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAb,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFZ,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;SAsEe,mBAAmB,GAAA;AACjC,IAAA,OAAO,MAAM,CAAC,aAAa,CAAC,CAAC;AAC/B;;AC1FA;;;;;;AAMG;;ACNH;;AAEG;;;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i1 from '@angular/cdk/menu';
|
|
2
2
|
import { CdkMenu, CdkMenuTrigger, CdkMenuItem } from '@angular/cdk/menu';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
|
-
import { InjectionToken, inject, Directive, signal,
|
|
4
|
+
import { InjectionToken, inject, Directive, input, signal, effect, booleanAttribute } from '@angular/core';
|
|
5
5
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
6
6
|
import * as i2 from 'ng-primitives/interactions';
|
|
7
7
|
import { NgpFocusVisible, NgpHover, NgpPress } from 'ng-primitives/interactions';
|
|
@@ -71,15 +71,23 @@ class NgpMenuTrigger {
|
|
|
71
71
|
* Access to the underlying `CdkMenuTrigger`.
|
|
72
72
|
*/
|
|
73
73
|
this.cdkMenuTrigger = inject(CdkMenuTrigger);
|
|
74
|
+
/**
|
|
75
|
+
* Template reference variable to the menu this trigger opens
|
|
76
|
+
*/
|
|
77
|
+
this.menu = input.required({
|
|
78
|
+
alias: 'ngpMenuTrigger',
|
|
79
|
+
});
|
|
74
80
|
/**
|
|
75
81
|
* Store the open state of the menu.
|
|
76
82
|
*/
|
|
77
83
|
this.open = signal(false);
|
|
78
84
|
this.cdkMenuTrigger.opened.pipe(takeUntilDestroyed()).subscribe(() => this.open.set(true));
|
|
79
85
|
this.cdkMenuTrigger.closed.pipe(takeUntilDestroyed()).subscribe(() => this.open.set(false));
|
|
86
|
+
// forward the template ref to the host directive anytime it changes
|
|
87
|
+
effect(() => (this.cdkMenuTrigger.menuTemplateRef = this.menu()));
|
|
80
88
|
}
|
|
81
89
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NgpMenuTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
82
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "
|
|
90
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.13", type: NgpMenuTrigger, isStandalone: true, selector: "[ngpMenuTrigger]", inputs: { menu: { classPropertyName: "menu", publicName: "ngpMenuTrigger", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "attr.data-open": "open() ? \"\" : null" } }, providers: [{ provide: NgpMenuTriggerToken, useExisting: NgpMenuTrigger }], exportAs: ["ngpMenuTrigger"], hostDirectives: [{ directive: i1.CdkMenuTrigger }], ngImport: i0 }); }
|
|
83
91
|
}
|
|
84
92
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NgpMenuTrigger, decorators: [{
|
|
85
93
|
type: Directive,
|
|
@@ -88,7 +96,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
88
96
|
selector: '[ngpMenuTrigger]',
|
|
89
97
|
exportAs: 'ngpMenuTrigger',
|
|
90
98
|
providers: [{ provide: NgpMenuTriggerToken, useExisting: NgpMenuTrigger }],
|
|
91
|
-
hostDirectives: [{ directive: CdkMenuTrigger
|
|
99
|
+
hostDirectives: [{ directive: CdkMenuTrigger }],
|
|
92
100
|
host: {
|
|
93
101
|
'[attr.data-open]': 'open() ? "" : null',
|
|
94
102
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-primitives-menu.mjs","sources":["../../../../packages/ng-primitives/menu/src/menu/menu.token.ts","../../../../packages/ng-primitives/menu/src/menu/menu.directive.ts","../../../../packages/ng-primitives/menu/src/menu-trigger/menu-trigger.token.ts","../../../../packages/ng-primitives/menu/src/menu-trigger/menu-trigger.directive.ts","../../../../packages/ng-primitives/menu/src/menu-item/menu-item.token.ts","../../../../packages/ng-primitives/menu/src/menu-item/menu-item.directive.ts","../../../../packages/ng-primitives/menu/src/index.ts","../../../../packages/ng-primitives/menu/src/ng-primitives-menu.ts"],"sourcesContent":["/**\n * Copyright © 2024 Angular Primitives.\n * https://github.com/ng-primitives/ng-primitives\n *\n * This source code is licensed under the Apache 2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { InjectionToken, inject } from '@angular/core';\nimport type { NgpMenu } from './menu.directive';\n\nexport const NgpMenuToken = new InjectionToken<NgpMenu>('NgpMenuToken');\n\n/**\n * Inject the Menu directive instance\n */\nexport function injectMenu(): NgpMenu {\n return inject(NgpMenuToken);\n}\n","/**\n * Copyright © 2024 Angular Primitives.\n * https://github.com/ng-primitives/ng-primitives\n *\n * This source code is licensed under the Apache 2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { CdkMenu } from '@angular/cdk/menu';\nimport { Directive } from '@angular/core';\nimport { NgpMenuToken } from './menu.token';\n\n@Directive({\n standalone: true,\n selector: '[ngpMenu]',\n exportAs: 'ngpMenu',\n providers: [{ provide: NgpMenuToken, useExisting: NgpMenu }],\n hostDirectives: [CdkMenu],\n})\nexport class NgpMenu {}\n","/**\n * Copyright © 2024 Angular Primitives.\n * https://github.com/ng-primitives/ng-primitives\n *\n * This source code is licensed under the Apache 2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { InjectionToken, inject } from '@angular/core';\nimport type { NgpMenuTrigger } from './menu-trigger.directive';\n\nexport const NgpMenuTriggerToken = new InjectionToken<NgpMenuTrigger>('NgpMenuTriggerToken');\n\n/**\n * Inject the MenuTrigger directive instance\n */\nexport function injectMenuTrigger(): NgpMenuTrigger {\n return inject(NgpMenuTriggerToken);\n}\n","/**\n * Copyright © 2024 Angular Primitives.\n * https://github.com/ng-primitives/ng-primitives\n *\n * This source code is licensed under the Apache 2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { CdkMenuTrigger } from '@angular/cdk/menu';\nimport { Directive, inject, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NgpMenuTriggerToken } from './menu-trigger.token';\n\n@Directive({\n standalone: true,\n selector: '[ngpMenuTrigger]',\n exportAs: 'ngpMenuTrigger',\n providers: [{ provide: NgpMenuTriggerToken, useExisting: NgpMenuTrigger }],\n hostDirectives: [{ directive: CdkMenuTrigger, inputs: ['cdkMenuTriggerFor: ngpMenuTrigger'] }],\n host: {\n '[attr.data-open]': 'open() ? \"\" : null',\n },\n})\nexport class NgpMenuTrigger {\n /**\n * Access to the underlying `CdkMenuTrigger`.\n */\n private readonly cdkMenuTrigger = inject(CdkMenuTrigger);\n\n /**\n * Store the open state of the menu.\n */\n protected open = signal<boolean>(false);\n\n constructor() {\n this.cdkMenuTrigger.opened.pipe(takeUntilDestroyed()).subscribe(() => this.open.set(true));\n this.cdkMenuTrigger.closed.pipe(takeUntilDestroyed()).subscribe(() => this.open.set(false));\n }\n}\n","/**\n * Copyright © 2024 Angular Primitives.\n * https://github.com/ng-primitives/ng-primitives\n *\n * This source code is licensed under the Apache 2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { InjectionToken, inject } from '@angular/core';\nimport type { NgpMenuItem } from './menu-item.directive';\n\nexport const NgpMenuItemToken = new InjectionToken<NgpMenuItem>('NgpMenuItemToken');\n\n/**\n * Inject the MenuItem directive instance\n */\nexport function injectMenuItem(): NgpMenuItem {\n return inject(NgpMenuItemToken);\n}\n","/**\n * Copyright © 2024 Angular Primitives.\n * https://github.com/ng-primitives/ng-primitives\n *\n * This source code is licensed under the Apache 2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { BooleanInput } from '@angular/cdk/coercion';\nimport { CdkMenuItem } from '@angular/cdk/menu';\nimport { booleanAttribute, Directive, input } from '@angular/core';\nimport { NgpFocusVisible, NgpHover, NgpPress } from 'ng-primitives/interactions';\nimport { NgpMenuItemToken } from './menu-item.token';\n\n@Directive({\n standalone: true,\n selector: '[ngpMenuItem]',\n exportAs: 'ngpMenuItem',\n providers: [{ provide: NgpMenuItemToken, useExisting: NgpMenuItem }],\n hostDirectives: [\n { directive: CdkMenuItem, inputs: ['cdkMenuItemDisabled:ngpMenuItemDisabled'] },\n NgpFocusVisible,\n NgpHover,\n NgpPress,\n ],\n host: {\n '[attr.data-disabled]': 'disabled() ? \"\" : null',\n },\n})\nexport class NgpMenuItem {\n /**\n * Whether the menu item is disabled.\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpMenuItemDisabled',\n transform: booleanAttribute,\n });\n}\n","/**\n * Copyright © 2024 Angular Primitives.\n * https://github.com/ng-primitives/ng-primitives\n *\n * This source code is licensed under the Apache 2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nexport { NgpMenu } from './menu/menu.directive';\nexport { NgpMenuToken, injectMenu } from './menu/menu.token';\nexport { NgpMenuTrigger } from './menu-trigger/menu-trigger.directive';\nexport { NgpMenuTriggerToken, injectMenuTrigger } from './menu-trigger/menu-trigger.token';\nexport { NgpMenuItem } from './menu-item/menu-item.directive';\nexport { NgpMenuItemToken, injectMenuItem } from './menu-item/menu-item.token';\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-menu.mjs","sources":["../../../../packages/ng-primitives/menu/src/menu/menu.token.ts","../../../../packages/ng-primitives/menu/src/menu/menu.directive.ts","../../../../packages/ng-primitives/menu/src/menu-trigger/menu-trigger.token.ts","../../../../packages/ng-primitives/menu/src/menu-trigger/menu-trigger.directive.ts","../../../../packages/ng-primitives/menu/src/menu-item/menu-item.token.ts","../../../../packages/ng-primitives/menu/src/menu-item/menu-item.directive.ts","../../../../packages/ng-primitives/menu/src/index.ts","../../../../packages/ng-primitives/menu/src/ng-primitives-menu.ts"],"sourcesContent":["/**\n * Copyright © 2024 Angular Primitives.\n * https://github.com/ng-primitives/ng-primitives\n *\n * This source code is licensed under the Apache 2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { InjectionToken, inject } from '@angular/core';\nimport type { NgpMenu } from './menu.directive';\n\nexport const NgpMenuToken = new InjectionToken<NgpMenu>('NgpMenuToken');\n\n/**\n * Inject the Menu directive instance\n */\nexport function injectMenu(): NgpMenu {\n return inject(NgpMenuToken);\n}\n","/**\n * Copyright © 2024 Angular Primitives.\n * https://github.com/ng-primitives/ng-primitives\n *\n * This source code is licensed under the Apache 2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { CdkMenu } from '@angular/cdk/menu';\nimport { Directive } from '@angular/core';\nimport { NgpMenuToken } from './menu.token';\n\n@Directive({\n standalone: true,\n selector: '[ngpMenu]',\n exportAs: 'ngpMenu',\n providers: [{ provide: NgpMenuToken, useExisting: NgpMenu }],\n hostDirectives: [CdkMenu],\n})\nexport class NgpMenu {}\n","/**\n * Copyright © 2024 Angular Primitives.\n * https://github.com/ng-primitives/ng-primitives\n *\n * This source code is licensed under the Apache 2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { InjectionToken, inject } from '@angular/core';\nimport type { NgpMenuTrigger } from './menu-trigger.directive';\n\nexport const NgpMenuTriggerToken = new InjectionToken<NgpMenuTrigger>('NgpMenuTriggerToken');\n\n/**\n * Inject the MenuTrigger directive instance\n */\nexport function injectMenuTrigger(): NgpMenuTrigger {\n return inject(NgpMenuTriggerToken);\n}\n","/**\n * Copyright © 2024 Angular Primitives.\n * https://github.com/ng-primitives/ng-primitives\n *\n * This source code is licensed under the Apache 2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { CdkMenuTrigger } from '@angular/cdk/menu';\nimport { Directive, effect, inject, input, signal, TemplateRef } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NgpMenuTriggerToken } from './menu-trigger.token';\n\n@Directive({\n standalone: true,\n selector: '[ngpMenuTrigger]',\n exportAs: 'ngpMenuTrigger',\n providers: [{ provide: NgpMenuTriggerToken, useExisting: NgpMenuTrigger }],\n hostDirectives: [{ directive: CdkMenuTrigger }],\n host: {\n '[attr.data-open]': 'open() ? \"\" : null',\n },\n})\nexport class NgpMenuTrigger {\n /**\n * Access to the underlying `CdkMenuTrigger`.\n */\n private readonly cdkMenuTrigger = inject(CdkMenuTrigger);\n\n /**\n * Template reference variable to the menu this trigger opens\n */\n public readonly menu = input.required<TemplateRef<unknown>>({\n alias: 'ngpMenuTrigger',\n });\n\n /**\n * Store the open state of the menu.\n */\n protected readonly open = signal<boolean>(false);\n\n constructor() {\n this.cdkMenuTrigger.opened.pipe(takeUntilDestroyed()).subscribe(() => this.open.set(true));\n this.cdkMenuTrigger.closed.pipe(takeUntilDestroyed()).subscribe(() => this.open.set(false));\n\n // forward the template ref to the host directive anytime it changes\n effect(() => (this.cdkMenuTrigger.menuTemplateRef = this.menu()));\n }\n}\n","/**\n * Copyright © 2024 Angular Primitives.\n * https://github.com/ng-primitives/ng-primitives\n *\n * This source code is licensed under the Apache 2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { InjectionToken, inject } from '@angular/core';\nimport type { NgpMenuItem } from './menu-item.directive';\n\nexport const NgpMenuItemToken = new InjectionToken<NgpMenuItem>('NgpMenuItemToken');\n\n/**\n * Inject the MenuItem directive instance\n */\nexport function injectMenuItem(): NgpMenuItem {\n return inject(NgpMenuItemToken);\n}\n","/**\n * Copyright © 2024 Angular Primitives.\n * https://github.com/ng-primitives/ng-primitives\n *\n * This source code is licensed under the Apache 2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { BooleanInput } from '@angular/cdk/coercion';\nimport { CdkMenuItem } from '@angular/cdk/menu';\nimport { booleanAttribute, Directive, input } from '@angular/core';\nimport { NgpFocusVisible, NgpHover, NgpPress } from 'ng-primitives/interactions';\nimport { NgpMenuItemToken } from './menu-item.token';\n\n@Directive({\n standalone: true,\n selector: '[ngpMenuItem]',\n exportAs: 'ngpMenuItem',\n providers: [{ provide: NgpMenuItemToken, useExisting: NgpMenuItem }],\n hostDirectives: [\n { directive: CdkMenuItem, inputs: ['cdkMenuItemDisabled:ngpMenuItemDisabled'] },\n NgpFocusVisible,\n NgpHover,\n NgpPress,\n ],\n host: {\n '[attr.data-disabled]': 'disabled() ? \"\" : null',\n },\n})\nexport class NgpMenuItem {\n /**\n * Whether the menu item is disabled.\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpMenuItemDisabled',\n transform: booleanAttribute,\n });\n}\n","/**\n * Copyright © 2024 Angular Primitives.\n * https://github.com/ng-primitives/ng-primitives\n *\n * This source code is licensed under the Apache 2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nexport { NgpMenu } from './menu/menu.directive';\nexport { NgpMenuToken, injectMenu } from './menu/menu.token';\nexport { NgpMenuTrigger } from './menu-trigger/menu-trigger.directive';\nexport { NgpMenuTriggerToken, injectMenuTrigger } from './menu-trigger/menu-trigger.token';\nexport { NgpMenuItem } from './menu-item/menu-item.directive';\nexport { NgpMenuItemToken, injectMenuItem } from './menu-item/menu-item.token';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;AAAA;;;;;;AAMG;MAIU,YAAY,GAAG,IAAI,cAAc,CAAU,cAAc,EAAE;AAExE;;AAEG;SACa,UAAU,GAAA;AACxB,IAAA,OAAO,MAAM,CAAC,YAAY,CAAC,CAAC;AAC9B;;ACjBA;;;;;;AAMG;MAYU,OAAO,CAAA;+GAAP,OAAO,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAP,OAAO,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,SAAA,EAHP,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,OAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAGjD,OAAO,EAAA,UAAA,EAAA,CAAA;kBAPnB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,WAAW;AACrB,oBAAA,QAAQ,EAAE,SAAS;oBACnB,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAS,OAAA,EAAE,CAAC;oBAC5D,cAAc,EAAE,CAAC,OAAO,CAAC;AAC1B,iBAAA,CAAA;;;ACjBD;;;;;;AAMG;MAIU,mBAAmB,GAAG,IAAI,cAAc,CAAiB,qBAAqB,EAAE;AAE7F;;AAEG;SACa,iBAAiB,GAAA;AAC/B,IAAA,OAAO,MAAM,CAAC,mBAAmB,CAAC,CAAC;AACrC;;ACjBA;;;;;;AAMG;MAgBU,cAAc,CAAA;AAkBzB,IAAA,WAAA,GAAA;AAjBA;;AAEG;AACc,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AAEzD;;AAEG;AACa,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAuB;AAC1D,YAAA,KAAK,EAAE,gBAAgB;AACxB,SAAA,CAAC,CAAC;AAEH;;AAEG;AACgB,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAU,KAAK,CAAC,CAAC;QAG/C,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3F,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;;AAG5F,QAAA,MAAM,CAAC,OAAO,IAAI,CAAC,cAAc,CAAC,eAAe,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;KACnE;+GAxBU,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,SAAA,EANd,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAM/D,cAAc,EAAA,UAAA,EAAA,CAAA;kBAV1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,QAAQ,EAAE,gBAAgB;oBAC1B,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAgB,cAAA,EAAE,CAAC;AAC1E,oBAAA,cAAc,EAAE,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC;AAC/C,oBAAA,IAAI,EAAE;AACJ,wBAAA,kBAAkB,EAAE,oBAAoB;AACzC,qBAAA;AACF,iBAAA,CAAA;;;ACrBD;;;;;;AAMG;MAIU,gBAAgB,GAAG,IAAI,cAAc,CAAc,kBAAkB,EAAE;AAEpF;;AAEG;SACa,cAAc,GAAA;AAC5B,IAAA,OAAO,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAClC;;MCWa,WAAW,CAAA;AAfxB,IAAA,WAAA,GAAA;AAgBE;;AAEG;AACM,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAwB,KAAK,EAAE;AACtD,YAAA,KAAK,EAAE,qBAAqB;AAC5B,YAAA,SAAS,EAAE,gBAAgB;AAC5B,SAAA,CAAC,CAAC;AACJ,KAAA;+GARY,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAX,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,0BAAA,EAAA,EAAA,EAAA,SAAA,EAXX,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,WAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,SAAA,EAAA,EAAA,CAAA,eAAA,EAAA,EAAA,EAAA,SAAA,EAAA,EAAA,CAAA,QAAA,EAAA,EAAA,EAAA,SAAA,EAAA,EAAA,CAAA,QAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAWzD,WAAW,EAAA,UAAA,EAAA,CAAA;kBAfvB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,QAAQ,EAAE,aAAa;oBACvB,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAa,WAAA,EAAE,CAAC;AACpE,oBAAA,cAAc,EAAE;wBACd,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,yCAAyC,CAAC,EAAE;wBAC/E,eAAe;wBACf,QAAQ;wBACR,QAAQ;AACT,qBAAA;AACD,oBAAA,IAAI,EAAE;AACJ,wBAAA,sBAAsB,EAAE,wBAAwB;AACjD,qBAAA;AACF,iBAAA,CAAA;;;AC3BD;;;;;;AAMG;;ACNH;;AAEG;;;;"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { TemplateRef } from '@angular/core';
|
|
1
2
|
import * as i0 from "@angular/core";
|
|
2
3
|
import * as i1 from "@angular/cdk/menu";
|
|
3
4
|
export declare class NgpMenuTrigger {
|
|
@@ -5,11 +6,15 @@ export declare class NgpMenuTrigger {
|
|
|
5
6
|
* Access to the underlying `CdkMenuTrigger`.
|
|
6
7
|
*/
|
|
7
8
|
private readonly cdkMenuTrigger;
|
|
9
|
+
/**
|
|
10
|
+
* Template reference variable to the menu this trigger opens
|
|
11
|
+
*/
|
|
12
|
+
readonly menu: import("@angular/core").InputSignal<TemplateRef<unknown>>;
|
|
8
13
|
/**
|
|
9
14
|
* Store the open state of the menu.
|
|
10
15
|
*/
|
|
11
|
-
protected open: import("@angular/core").WritableSignal<boolean>;
|
|
16
|
+
protected readonly open: import("@angular/core").WritableSignal<boolean>;
|
|
12
17
|
constructor();
|
|
13
18
|
static ɵfac: i0.ɵɵFactoryDeclaration<NgpMenuTrigger, never>;
|
|
14
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<NgpMenuTrigger, "[ngpMenuTrigger]", ["ngpMenuTrigger"], {}, {}, never, never, true, [{ directive: typeof i1.CdkMenuTrigger; inputs: {
|
|
19
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<NgpMenuTrigger, "[ngpMenuTrigger]", ["ngpMenuTrigger"], { "menu": { "alias": "ngpMenuTrigger"; "required": true; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1.CdkMenuTrigger; inputs: {}; outputs: {}; }]>;
|
|
15
20
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ng-primitives",
|
|
3
3
|
"license": "Apache-2.0",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.18.0",
|
|
5
5
|
"peerDependencies": {
|
|
6
6
|
"@angular/core": ">=18.0.0",
|
|
7
7
|
"@angular/cdk": ">=18.0.0",
|
|
@@ -50,12 +50,6 @@
|
|
|
50
50
|
"esm": "./esm2022/accordion/ng-primitives-accordion.mjs",
|
|
51
51
|
"default": "./fesm2022/ng-primitives-accordion.mjs"
|
|
52
52
|
},
|
|
53
|
-
"./button": {
|
|
54
|
-
"types": "./button/index.d.ts",
|
|
55
|
-
"esm2022": "./esm2022/button/ng-primitives-button.mjs",
|
|
56
|
-
"esm": "./esm2022/button/ng-primitives-button.mjs",
|
|
57
|
-
"default": "./fesm2022/ng-primitives-button.mjs"
|
|
58
|
-
},
|
|
59
53
|
"./autofill": {
|
|
60
54
|
"types": "./autofill/index.d.ts",
|
|
61
55
|
"esm2022": "./esm2022/autofill/ng-primitives-autofill.mjs",
|
|
@@ -74,6 +68,12 @@
|
|
|
74
68
|
"esm": "./esm2022/checkbox/ng-primitives-checkbox.mjs",
|
|
75
69
|
"default": "./fesm2022/ng-primitives-checkbox.mjs"
|
|
76
70
|
},
|
|
71
|
+
"./button": {
|
|
72
|
+
"types": "./button/index.d.ts",
|
|
73
|
+
"esm2022": "./esm2022/button/ng-primitives-button.mjs",
|
|
74
|
+
"esm": "./esm2022/button/ng-primitives-button.mjs",
|
|
75
|
+
"default": "./fesm2022/ng-primitives-button.mjs"
|
|
76
|
+
},
|
|
77
77
|
"./date-picker": {
|
|
78
78
|
"types": "./date-picker/index.d.ts",
|
|
79
79
|
"esm2022": "./esm2022/date-picker/ng-primitives-date-picker.mjs",
|
|
@@ -152,18 +152,18 @@
|
|
|
152
152
|
"esm": "./esm2022/progress/ng-primitives-progress.mjs",
|
|
153
153
|
"default": "./fesm2022/ng-primitives-progress.mjs"
|
|
154
154
|
},
|
|
155
|
-
"./radio": {
|
|
156
|
-
"types": "./radio/index.d.ts",
|
|
157
|
-
"esm2022": "./esm2022/radio/ng-primitives-radio.mjs",
|
|
158
|
-
"esm": "./esm2022/radio/ng-primitives-radio.mjs",
|
|
159
|
-
"default": "./fesm2022/ng-primitives-radio.mjs"
|
|
160
|
-
},
|
|
161
155
|
"./resize": {
|
|
162
156
|
"types": "./resize/index.d.ts",
|
|
163
157
|
"esm2022": "./esm2022/resize/ng-primitives-resize.mjs",
|
|
164
158
|
"esm": "./esm2022/resize/ng-primitives-resize.mjs",
|
|
165
159
|
"default": "./fesm2022/ng-primitives-resize.mjs"
|
|
166
160
|
},
|
|
161
|
+
"./radio": {
|
|
162
|
+
"types": "./radio/index.d.ts",
|
|
163
|
+
"esm2022": "./esm2022/radio/ng-primitives-radio.mjs",
|
|
164
|
+
"esm": "./esm2022/radio/ng-primitives-radio.mjs",
|
|
165
|
+
"default": "./fesm2022/ng-primitives-radio.mjs"
|
|
166
|
+
},
|
|
167
167
|
"./roving-focus": {
|
|
168
168
|
"types": "./roving-focus/index.d.ts",
|
|
169
169
|
"esm2022": "./esm2022/roving-focus/ng-primitives-roving-focus.mjs",
|
|
@@ -212,18 +212,18 @@
|
|
|
212
212
|
"esm": "./esm2022/toast/ng-primitives-toast.mjs",
|
|
213
213
|
"default": "./fesm2022/ng-primitives-toast.mjs"
|
|
214
214
|
},
|
|
215
|
-
"./toggle": {
|
|
216
|
-
"types": "./toggle/index.d.ts",
|
|
217
|
-
"esm2022": "./esm2022/toggle/ng-primitives-toggle.mjs",
|
|
218
|
-
"esm": "./esm2022/toggle/ng-primitives-toggle.mjs",
|
|
219
|
-
"default": "./fesm2022/ng-primitives-toggle.mjs"
|
|
220
|
-
},
|
|
221
215
|
"./tooltip": {
|
|
222
216
|
"types": "./tooltip/index.d.ts",
|
|
223
217
|
"esm2022": "./esm2022/tooltip/ng-primitives-tooltip.mjs",
|
|
224
218
|
"esm": "./esm2022/tooltip/ng-primitives-tooltip.mjs",
|
|
225
219
|
"default": "./fesm2022/ng-primitives-tooltip.mjs"
|
|
226
220
|
},
|
|
221
|
+
"./toggle": {
|
|
222
|
+
"types": "./toggle/index.d.ts",
|
|
223
|
+
"esm2022": "./esm2022/toggle/ng-primitives-toggle.mjs",
|
|
224
|
+
"esm": "./esm2022/toggle/ng-primitives-toggle.mjs",
|
|
225
|
+
"default": "./fesm2022/ng-primitives-toggle.mjs"
|
|
226
|
+
},
|
|
227
227
|
"./utils": {
|
|
228
228
|
"types": "./utils/index.d.ts",
|
|
229
229
|
"esm2022": "./esm2022/utils/ng-primitives-utils.mjs",
|