@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.
- package/fesm2022/overlay-selection-list.mjs +114 -0
- package/fesm2022/overlay-selection-list.mjs.map +1 -0
- package/fesm2022/tokens.mjs +1040 -52
- package/fesm2022/tokens.mjs.map +1 -1
- package/material/chips/chips.scss +83 -0
- package/material/filters-group/filters-group.scss +14 -0
- package/material/overlay-selection-list/overlay-selection-list.scss +145 -0
- package/package.json +6 -1
- package/tokens/tokens.css +115 -31
- package/types/overlay-selection-list.d.ts +19 -0
|
@@ -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":";;;;;;MAqBa,gCAAgC,CAAA;AAExB,IAAA,OAAO;AAMP,IAAA,QAAQ;AAER,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE;AAC3C,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,QAAQ,EAAE;AACb,KAAA,CAAC;AAEe,IAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACxC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;AACrB,IAAA,cAAc,GAAG,IAAI,GAAG,EAA6B;IAE/D,kBAAkB,GAAA;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE;YAC1B;QACJ;QAEA,MAAM,mBAAmB,GAAG,MAAW;AACnC,YAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,IAAG;AAClC,gBAAA,OAAO,EAAE;AACb,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;YAE3B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,KAAI;gBACnC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;gBAExC,IAAI,CAAC,OAAO,EAAE;oBACV;gBACJ;AAEA,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CACnB,MAAM,EACN,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,CAC5D;AACL,YAAA,CAAC,CAAC;AACN,QAAA,CAAC;AAED,QAAA,mBAAmB,EAAE;QAErB,IAAI,CAAC,OAAO,CAAC;AACR,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aACxC,SAAS,CAAC,mBAAmB,CAAC;QAEnC,IAAI,CAAC,QAAQ,CAAC;AACT,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aACxC,SAAS,CAAC,mBAAmB,CAAC;AAEnC,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;AAC3B,YAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,IAAG;AAClC,gBAAA,OAAO,EAAE;AACb,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;AAC/B,QAAA,CAAC,CAAC;IACN;IAEQ,qBAAqB,CACzB,MAAqB,EACrB,OAAoB,EAAA;AAEpB,QAAA,MAAM,eAAe,GAAG,MACpB,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ;QAElD,MAAM,YAAY,GAAG,MAAW;AAC5B,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;gBACf,MAAM,CAAC,MAAM,EAAE;gBACf,IAAI,CAAC,eAAe,EAAE;AAC1B,YAAA,CAAC,CAAC;AACN,QAAA,CAAC;AAED,QAAA,MAAM,WAAW,GAAG,CAAC,KAAiB,KAAU;YAC5C,IAAI,eAAe,EAAE,EAAE;gBACnB;YACJ;YAEA,KAAK,CAAC,cAAc,EAAE;YACtB,KAAK,CAAC,wBAAwB,EAAE;AAChC,YAAA,YAAY,EAAE;AAClB,QAAA,CAAC;AAED,QAAA,MAAM,aAAa,GAAG,CAAC,KAAoB,KAAU;AACjD,YAAA,IACI,eAAe,EAAE;AACjB,gBAAA,KAAK,CAAC,MAAM;AACZ,iBAAC,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,EAC9C;gBACE;YACJ;YAEA,KAAK,CAAC,cAAc,EAAE;YACtB,KAAK,CAAC,wBAAwB,EAAE;AAChC,YAAA,YAAY,EAAE;AAClB,QAAA,CAAC;QAED,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC;QACpD,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,EAAE,IAAI,CAAC;AAExD,QAAA,OAAO,MAAW;YACd,OAAO,CAAC,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC;YACvD,OAAO,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,EAAE,IAAI,CAAC;AAC/D,QAAA,CAAC;IACL;IAEQ,eAAe,GAAA;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CACzD,CAAC,MAAM,KAAc,MAAM,CAAC,KAAK,CACpC;QAED,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC;AAExC,QAAA,IAAI,IAAI,CAAC,SAAS,YAAY,OAAO,EAAE;AACnC,YAAA,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,KAAK,CAAC;QAC3C;IACJ;uGAxHS,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gCAAgC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,SAAA,EACxB,aAAa,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,SAAA,EAGb,aAAa,2BAEpB,UAAU,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FANX,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAJ5C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,6CAA6C;AACvD,oBAAA,UAAU,EAAE;AACf,iBAAA;;sBAEI,eAAe;AAAC,gBAAA,IAAA,EAAA,CAAA,aAAa,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;;sBAGpD,eAAe;AAAC,gBAAA,IAAA,EAAA,CAAA,aAAa,EAAE;AAC5B,wBAAA,WAAW,EAAE,IAAI;AACjB,wBAAA,IAAI,EAAE;AACT,qBAAA;;;AC5BL;;AAEG;;;;"}
|