@hug/hospitality 1.0.0-alpha.45 → 1.0.0-alpha.46

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.
@@ -0,0 +1,114 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, DestroyRef, NgZone, ElementRef, ContentChildren, Directive } from '@angular/core';
3
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
+ import { NgControl, NgModel } from '@angular/forms';
5
+ import { MatSelectionList, MatListOption } from '@angular/material/list';
6
+
7
+ class HySingleSelectionToggleDirective {
8
+ options;
9
+ elements;
10
+ ngControl = inject(NgControl, {
11
+ self: true,
12
+ optional: true
13
+ });
14
+ selectionList = inject(MatSelectionList);
15
+ destroyRef = inject(DestroyRef);
16
+ zone = inject(NgZone);
17
+ optionCleanups = new Map();
18
+ ngAfterContentInit() {
19
+ if (!this.ngControl?.control) {
20
+ return;
21
+ }
22
+ const syncOptionListeners = () => {
23
+ this.optionCleanups.forEach(cleanup => {
24
+ cleanup();
25
+ });
26
+ this.optionCleanups.clear();
27
+ this.options.forEach((option, index) => {
28
+ const element = this.elements.get(index);
29
+ if (!element) {
30
+ return;
31
+ }
32
+ this.optionCleanups.set(option, this.attachOptionListeners(option, element.nativeElement));
33
+ });
34
+ };
35
+ syncOptionListeners();
36
+ this.options.changes
37
+ .pipe(takeUntilDestroyed(this.destroyRef))
38
+ .subscribe(syncOptionListeners);
39
+ this.elements.changes
40
+ .pipe(takeUntilDestroyed(this.destroyRef))
41
+ .subscribe(syncOptionListeners);
42
+ this.destroyRef.onDestroy(() => {
43
+ this.optionCleanups.forEach(cleanup => {
44
+ cleanup();
45
+ });
46
+ this.optionCleanups.clear();
47
+ });
48
+ }
49
+ attachOptionListeners(option, element) {
50
+ const isToggleBlocked = () => option.disabled || this.selectionList.multiple;
51
+ const toggleOption = () => {
52
+ this.zone.run(() => {
53
+ option.toggle();
54
+ this.updateFormValue();
55
+ });
56
+ };
57
+ const handleClick = (event) => {
58
+ if (isToggleBlocked()) {
59
+ return;
60
+ }
61
+ event.preventDefault();
62
+ event.stopImmediatePropagation();
63
+ toggleOption();
64
+ };
65
+ const handleKeydown = (event) => {
66
+ if (isToggleBlocked() ||
67
+ event.repeat ||
68
+ (event.key !== 'Enter' && event.key !== ' ')) {
69
+ return;
70
+ }
71
+ event.preventDefault();
72
+ event.stopImmediatePropagation();
73
+ toggleOption();
74
+ };
75
+ element.addEventListener('click', handleClick, true);
76
+ element.addEventListener('keydown', handleKeydown, true);
77
+ return () => {
78
+ element.removeEventListener('click', handleClick, true);
79
+ element.removeEventListener('keydown', handleKeydown, true);
80
+ };
81
+ }
82
+ updateFormValue() {
83
+ const value = this.selectionList.selectedOptions.selected.map((option) => option.value);
84
+ this.ngControl?.control?.setValue(value);
85
+ if (this.ngControl instanceof NgModel) {
86
+ this.ngControl.viewToModelUpdate(value);
87
+ }
88
+ }
89
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: HySingleSelectionToggleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
90
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.0", type: HySingleSelectionToggleDirective, isStandalone: true, selector: "mat-selection-list[hySingleSelectionToggle]", queries: [{ propertyName: "options", predicate: MatListOption, descendants: true }, { propertyName: "elements", predicate: MatListOption, descendants: true, read: ElementRef }], ngImport: i0 });
91
+ }
92
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: HySingleSelectionToggleDirective, decorators: [{
93
+ type: Directive,
94
+ args: [{
95
+ selector: 'mat-selection-list[hySingleSelectionToggle]',
96
+ standalone: true
97
+ }]
98
+ }], propDecorators: { options: [{
99
+ type: ContentChildren,
100
+ args: [MatListOption, { descendants: true }]
101
+ }], elements: [{
102
+ type: ContentChildren,
103
+ args: [MatListOption, {
104
+ descendants: true,
105
+ read: ElementRef
106
+ }]
107
+ }] } });
108
+
109
+ /**
110
+ * Generated bundle index. Do not edit.
111
+ */
112
+
113
+ export { HySingleSelectionToggleDirective };
114
+ //# sourceMappingURL=overlay-selection-list.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlay-selection-list.mjs","sources":["../../material/overlay-selection-list/single-selection-toggle.directive.ts","../../material/overlay-selection-list/overlay-selection-list.ts"],"sourcesContent":["import {\n type AfterContentInit,\n ContentChildren,\n DestroyRef,\n Directive,\n ElementRef,\n inject,\n NgZone,\n type QueryList\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NgControl, NgModel } from '@angular/forms';\nimport {\n MatListOption,\n MatSelectionList\n} from '@angular/material/list';\n\n@Directive({\n selector: 'mat-selection-list[hySingleSelectionToggle]',\n standalone: true\n})\nexport class HySingleSelectionToggleDirective implements AfterContentInit {\n @ContentChildren(MatListOption, { descendants: true })\n private readonly options!: QueryList<MatListOption>;\n\n @ContentChildren(MatListOption, {\n descendants: true,\n read: ElementRef\n })\n private readonly elements!: QueryList<ElementRef<HTMLElement>>;\n\n private readonly ngControl = inject(NgControl, {\n self: true,\n optional: true\n });\n\n private readonly selectionList = inject(MatSelectionList);\n private readonly destroyRef = inject(DestroyRef);\n private readonly zone = inject(NgZone);\n private readonly optionCleanups = new Map<MatListOption, () => void>();\n\n public ngAfterContentInit(): void {\n if (!this.ngControl?.control) {\n return;\n }\n\n const syncOptionListeners = (): void => {\n this.optionCleanups.forEach(cleanup => {\n cleanup();\n });\n this.optionCleanups.clear();\n\n this.options.forEach((option, index) => {\n const element = this.elements.get(index);\n\n if (!element) {\n return;\n }\n\n this.optionCleanups.set(\n option,\n this.attachOptionListeners(option, element.nativeElement)\n );\n });\n };\n\n syncOptionListeners();\n\n this.options.changes\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(syncOptionListeners);\n\n this.elements.changes\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(syncOptionListeners);\n\n this.destroyRef.onDestroy(() => {\n this.optionCleanups.forEach(cleanup => {\n cleanup();\n });\n this.optionCleanups.clear();\n });\n }\n\n private attachOptionListeners(\n option: MatListOption,\n element: HTMLElement\n ): () => void {\n const isToggleBlocked = (): boolean =>\n option.disabled || this.selectionList.multiple;\n\n const toggleOption = (): void => {\n this.zone.run(() => {\n option.toggle();\n this.updateFormValue();\n });\n };\n\n const handleClick = (event: MouseEvent): void => {\n if (isToggleBlocked()) {\n return;\n }\n\n event.preventDefault();\n event.stopImmediatePropagation();\n toggleOption();\n };\n\n const handleKeydown = (event: KeyboardEvent): void => {\n if (\n isToggleBlocked() ||\n event.repeat ||\n (event.key !== 'Enter' && event.key !== ' ')\n ) {\n return;\n }\n\n event.preventDefault();\n event.stopImmediatePropagation();\n toggleOption();\n };\n\n element.addEventListener('click', handleClick, true);\n element.addEventListener('keydown', handleKeydown, true);\n\n return (): void => {\n element.removeEventListener('click', handleClick, true);\n element.removeEventListener('keydown', handleKeydown, true);\n };\n }\n\n private updateFormValue(): void {\n const value = this.selectionList.selectedOptions.selected.map(\n (option): unknown => option.value\n );\n\n this.ngControl?.control?.setValue(value);\n\n if (this.ngControl instanceof NgModel) {\n this.ngControl.viewToModelUpdate(value);\n }\n }\n}\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}