@ndwnu/design-system 1.0.4 → 1.1.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.
Files changed (66) hide show
  1. package/components/card/card-content/card-content.component.d.ts +5 -0
  2. package/components/card/card-content/index.d.ts +1 -0
  3. package/components/card/card-footer/card-footer.component.d.ts +6 -0
  4. package/components/card/card-footer/index.d.ts +1 -0
  5. package/components/card/card-header/card-header.component.d.ts +8 -0
  6. package/components/card/card-header/index.d.ts +1 -0
  7. package/components/card/card.component.d.ts +8 -2
  8. package/components/card/index.d.ts +3 -0
  9. package/components/dropdown/dropdown.component.d.ts +10 -3
  10. package/components/dropdown/index.d.ts +0 -1
  11. package/components/form-field/checkbox-group/checkbox-group.component.d.ts +3 -1
  12. package/components/form-field/form-field.component.d.ts +3 -3
  13. package/components/index.d.ts +3 -0
  14. package/components/modal/index.d.ts +1 -0
  15. package/components/modal/modal-trigger.directive.d.ts +8 -12
  16. package/components/modal/modal.service.d.ts +16 -0
  17. package/components/multi-select/checkbox-data.interface.d.ts +5 -0
  18. package/components/multi-select/index.d.ts +3 -0
  19. package/components/multi-select/multi-select.component.d.ts +27 -0
  20. package/components/multi-select/select-all-text.interface.d.ts +4 -0
  21. package/components/popover/index.d.ts +1 -0
  22. package/components/popover/popover-trigger.directive.d.ts +27 -0
  23. package/components/removable-pill/index.d.ts +1 -0
  24. package/components/removable-pill/removable-pill.component.d.ts +7 -0
  25. package/components/tooltip/tooltip.directive.d.ts +3 -2
  26. package/core/styles/ndw-styles.scss +33 -21
  27. package/core/styles/nwb-styles.scss +33 -21
  28. package/esm2022/components/alert/alert.component.mjs +3 -3
  29. package/esm2022/components/badge/badge.component.mjs +2 -2
  30. package/esm2022/components/breadcrumb-group/breadcrumb-group.component.mjs +3 -3
  31. package/esm2022/components/card/card-content/card-content.component.mjs +11 -0
  32. package/esm2022/components/card/card-content/index.mjs +2 -0
  33. package/esm2022/components/card/card-footer/card-footer.component.mjs +14 -0
  34. package/esm2022/components/card/card-footer/index.mjs +2 -0
  35. package/esm2022/components/card/card-header/card-header.component.mjs +20 -0
  36. package/esm2022/components/card/card-header/index.mjs +2 -0
  37. package/esm2022/components/card/card.component.mjs +22 -5
  38. package/esm2022/components/card/index.mjs +4 -1
  39. package/esm2022/components/collapsible/collapsible.animation.mjs +3 -3
  40. package/esm2022/components/collapsible/collapsible.component.mjs +3 -3
  41. package/esm2022/components/dropdown/dropdown.component.mjs +26 -6
  42. package/esm2022/components/dropdown/index.mjs +1 -2
  43. package/esm2022/components/form-field/checkbox/checkbox.component.mjs +3 -3
  44. package/esm2022/components/form-field/checkbox-group/checkbox-group.component.mjs +7 -3
  45. package/esm2022/components/form-field/form-field.component.mjs +7 -7
  46. package/esm2022/components/form-field/radio-button/radio-button.component.mjs +3 -3
  47. package/esm2022/components/icon/icon.component.mjs +5 -3
  48. package/esm2022/components/index.mjs +4 -1
  49. package/esm2022/components/modal/index.mjs +2 -1
  50. package/esm2022/components/modal/modal-trigger.directive.mjs +23 -54
  51. package/esm2022/components/modal/modal.service.mjs +57 -0
  52. package/esm2022/components/multi-select/checkbox-data.interface.mjs +2 -0
  53. package/esm2022/components/multi-select/index.mjs +4 -0
  54. package/esm2022/components/multi-select/multi-select.component.mjs +76 -0
  55. package/esm2022/components/multi-select/select-all-text.interface.mjs +2 -0
  56. package/esm2022/components/popover/index.mjs +2 -0
  57. package/esm2022/components/popover/popover-trigger.directive.mjs +183 -0
  58. package/esm2022/components/removable-pill/index.mjs +2 -0
  59. package/esm2022/components/removable-pill/removable-pill.component.mjs +21 -0
  60. package/esm2022/components/tooltip/tooltip.component.mjs +2 -2
  61. package/esm2022/components/tooltip/tooltip.directive.mjs +4 -3
  62. package/fesm2022/ndwnu-design-system.mjs +399 -125
  63. package/fesm2022/ndwnu-design-system.mjs.map +1 -1
  64. package/package.json +1 -1
  65. package/components/dropdown/dropdown-trigger.directive.d.ts +0 -23
  66. package/esm2022/components/dropdown/dropdown-trigger.directive.mjs +0 -95
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ndwnu/design-system",
3
- "version": "1.0.4",
3
+ "version": "1.1.0",
4
4
  "peerDependencies": {
5
5
  "@angular/cdk": "^18.0.1",
6
6
  "@angular/common": "^18.0.1",
@@ -1,23 +0,0 @@
1
- import { OnDestroy, TemplateRef } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export declare class DropdownTriggerDirective implements OnDestroy {
4
- dropdownContent: import("@angular/core").InputSignal<TemplateRef<unknown>>;
5
- toggleOnClick: import("@angular/core").InputSignal<boolean>;
6
- isOpen: import("@angular/core").ModelSignal<boolean>;
7
- toggle(): void;
8
- private destroyRef;
9
- private elementRef;
10
- private overlay;
11
- private viewContainerRef;
12
- private focusTrapFactory;
13
- private overlayRef?;
14
- constructor();
15
- ngOnDestroy(): void;
16
- private open;
17
- private trapFocus;
18
- private closeOverlayOnEscapeKey;
19
- private closeOverlayOnBackdropClick;
20
- private close;
21
- static ɵfac: i0.ɵɵFactoryDeclaration<DropdownTriggerDirective, never>;
22
- static ɵdir: i0.ɵɵDirectiveDeclaration<DropdownTriggerDirective, "[ndwDropdownTrigger]", never, { "dropdownContent": { "alias": "ndwDropdownTrigger"; "required": true; "isSignal": true; }; "toggleOnClick": { "alias": "toggleOnClick"; "required": false; "isSignal": true; }; "isOpen": { "alias": "isOpen"; "required": false; "isSignal": true; }; }, { "isOpen": "isOpenChange"; }, never, never, true, never>;
23
- }
@@ -1,95 +0,0 @@
1
- import { ConfigurableFocusTrapFactory } from '@angular/cdk/a11y';
2
- import { Overlay } from '@angular/cdk/overlay';
3
- import { TemplatePortal } from '@angular/cdk/portal';
4
- import { DestroyRef, Directive, ElementRef, HostListener, ViewContainerRef, effect, inject, input, model, } from '@angular/core';
5
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
6
- import { take } from 'rxjs';
7
- import * as i0 from "@angular/core";
8
- export class DropdownTriggerDirective {
9
- toggle() {
10
- if (!this.toggleOnClick()) {
11
- return;
12
- }
13
- this.isOpen.set(!this.isOpen());
14
- }
15
- constructor() {
16
- this.dropdownContent = input.required({ alias: 'ndwDropdownTrigger' });
17
- this.toggleOnClick = input(true);
18
- this.isOpen = model(false);
19
- this.destroyRef = inject(DestroyRef);
20
- this.elementRef = inject((ElementRef));
21
- this.overlay = inject(Overlay);
22
- this.viewContainerRef = inject(ViewContainerRef);
23
- this.focusTrapFactory = inject(ConfigurableFocusTrapFactory);
24
- effect(() => {
25
- if (this.isOpen()) {
26
- this.open();
27
- }
28
- else {
29
- this.close();
30
- }
31
- });
32
- }
33
- ngOnDestroy() {
34
- this.isOpen.set(false);
35
- }
36
- open() {
37
- const position = {
38
- originX: 'start',
39
- originY: 'bottom',
40
- overlayX: 'start',
41
- overlayY: 'top',
42
- offsetY: 4,
43
- panelClass: 'ndw-dropdown-panel',
44
- };
45
- const templatePortal = new TemplatePortal(this.dropdownContent(), this.viewContainerRef);
46
- this.overlayRef = this.overlay.create({
47
- hasBackdrop: true,
48
- backdropClass: 'cdk-overlay-transparent-backdrop',
49
- scrollStrategy: this.overlay.scrollStrategies.reposition(),
50
- positionStrategy: this.overlay
51
- .position()
52
- .flexibleConnectedTo(this.elementRef)
53
- .withPositions([position]),
54
- });
55
- this.overlayRef.attach(templatePortal);
56
- this.trapFocus(this.overlayRef);
57
- this.closeOverlayOnEscapeKey(this.overlayRef);
58
- this.closeOverlayOnBackdropClick(this.overlayRef);
59
- }
60
- trapFocus(overlayRef) {
61
- this.focusTrapFactory.create(overlayRef.overlayElement);
62
- }
63
- closeOverlayOnEscapeKey(overlayRef) {
64
- overlayRef.overlayElement.onkeydown = (event) => {
65
- if (event.key === 'Escape') {
66
- this.isOpen.set(false);
67
- }
68
- };
69
- }
70
- closeOverlayOnBackdropClick(overlayRef) {
71
- overlayRef
72
- .backdropClick()
73
- .pipe(takeUntilDestroyed(this.destroyRef), take(1))
74
- .subscribe(() => {
75
- this.isOpen.set(false);
76
- });
77
- }
78
- close() {
79
- this.overlayRef?.dispose();
80
- this.elementRef.nativeElement.focus();
81
- }
82
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: DropdownTriggerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
83
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.0.3", type: DropdownTriggerDirective, isStandalone: true, selector: "[ndwDropdownTrigger]", inputs: { dropdownContent: { classPropertyName: "dropdownContent", publicName: "ndwDropdownTrigger", isSignal: true, isRequired: true, transformFunction: null }, toggleOnClick: { classPropertyName: "toggleOnClick", publicName: "toggleOnClick", isSignal: true, isRequired: false, transformFunction: null }, isOpen: { classPropertyName: "isOpen", publicName: "isOpen", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { isOpen: "isOpenChange" }, host: { listeners: { "click": "toggle()" } }, ngImport: i0 }); }
84
- }
85
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: DropdownTriggerDirective, decorators: [{
86
- type: Directive,
87
- args: [{
88
- selector: '[ndwDropdownTrigger]',
89
- standalone: true,
90
- }]
91
- }], ctorParameters: () => [], propDecorators: { toggle: [{
92
- type: HostListener,
93
- args: ['click']
94
- }] } });
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tdHJpZ2dlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZHcvc3JjL2NvbXBvbmVudHMvZHJvcGRvd24vZHJvcGRvd24tdHJpZ2dlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakUsT0FBTyxFQUFxQixPQUFPLEVBQWMsTUFBTSxzQkFBc0IsQ0FBQztBQUM5RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUNMLFVBQVUsRUFDVixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFHWixnQkFBZ0IsRUFDaEIsTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsS0FBSyxHQUNOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBTTVCLE1BQU0sT0FBTyx3QkFBd0I7SUFNNUIsTUFBTTtRQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztZQUMxQixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQVVEO1FBckJPLG9CQUFlLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBdUIsRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1FBQ3hGLGtCQUFhLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLFdBQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFXckIsZUFBVSxHQUFHLE1BQU0sQ0FBQyxV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QUFVLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDeEMsQ0FBQzs4R0F2RlUsd0JBQXdCO2tHQUF4Qix3QkFBd0I7OzJGQUF4Qix3QkFBd0I7a0JBSnBDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHNCQUFzQjtvQkFDaEMsVUFBVSxFQUFFLElBQUk7aUJBQ2pCO3dEQU9RLE1BQU07c0JBRFosWUFBWTt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uZmlndXJhYmxlRm9jdXNUcmFwRmFjdG9yeSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IENvbm5lY3RlZFBvc2l0aW9uLCBPdmVybGF5LCBPdmVybGF5UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgVGVtcGxhdGVQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7XG4gIERlc3Ryb3lSZWYsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBPbkRlc3Ryb3ksXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG1vZGVsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW25kd0Ryb3Bkb3duVHJpZ2dlcl0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBEcm9wZG93blRyaWdnZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwdWJsaWMgZHJvcGRvd25Db250ZW50ID0gaW5wdXQucmVxdWlyZWQ8VGVtcGxhdGVSZWY8dW5rbm93bj4+KHsgYWxpYXM6ICduZHdEcm9wZG93blRyaWdnZXInIH0pO1xuICBwdWJsaWMgdG9nZ2xlT25DbGljayA9IGlucHV0KHRydWUpO1xuICBwdWJsaWMgaXNPcGVuID0gbW9kZWwoZmFsc2UpO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJylcbiAgcHVibGljIHRvZ2dsZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudG9nZ2xlT25DbGljaygpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5pc09wZW4uc2V0KCF0aGlzLmlzT3BlbigpKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgcHJpdmF0ZSBlbGVtZW50UmVmID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmPEhUTUxFbGVtZW50Pik7XG4gIHByaXZhdGUgb3ZlcmxheSA9IGluamVjdChPdmVybGF5KTtcbiAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xuICBwcml2YXRlIGZvY3VzVHJhcEZhY3RvcnkgPSBpbmplY3QoQ29uZmlndXJhYmxlRm9jdXNUcmFwRmFjdG9yeSk7XG5cbiAgcHJpdmF0ZSBvdmVybGF5UmVmPzogT3ZlcmxheVJlZjtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzT3BlbigpKSB7XG4gICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuaXNPcGVuLnNldChmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIG9wZW4oKTogdm9pZCB7XG4gICAgY29uc3QgcG9zaXRpb246IENvbm5lY3RlZFBvc2l0aW9uID0ge1xuICAgICAgb3JpZ2luWDogJ3N0YXJ0JyxcbiAgICAgIG9yaWdpblk6ICdib3R0b20nLFxuICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICBvdmVybGF5WTogJ3RvcCcsXG4gICAgICBvZmZzZXRZOiA0LFxuICAgICAgcGFuZWxDbGFzczogJ25kdy1kcm9wZG93bi1wYW5lbCcsXG4gICAgfTtcbiAgICBjb25zdCB0ZW1wbGF0ZVBvcnRhbCA9IG5ldyBUZW1wbGF0ZVBvcnRhbCh0aGlzLmRyb3Bkb3duQ29udGVudCgpLCB0aGlzLnZpZXdDb250YWluZXJSZWYpO1xuXG4gICAgdGhpcy5vdmVybGF5UmVmID0gdGhpcy5vdmVybGF5LmNyZWF0ZSh7XG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcbiAgICAgIGJhY2tkcm9wQ2xhc3M6ICdjZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcCcsXG4gICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpLFxuICAgICAgcG9zaXRpb25TdHJhdGVneTogdGhpcy5vdmVybGF5XG4gICAgICAgIC5wb3NpdGlvbigpXG4gICAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKHRoaXMuZWxlbWVudFJlZilcbiAgICAgICAgLndpdGhQb3NpdGlvbnMoW3Bvc2l0aW9uXSksXG4gICAgfSk7XG4gICAgdGhpcy5vdmVybGF5UmVmLmF0dGFjaCh0ZW1wbGF0ZVBvcnRhbCk7XG5cbiAgICB0aGlzLnRyYXBGb2N1cyh0aGlzLm92ZXJsYXlSZWYpO1xuICAgIHRoaXMuY2xvc2VPdmVybGF5T25Fc2NhcGVLZXkodGhpcy5vdmVybGF5UmVmKTtcbiAgICB0aGlzLmNsb3NlT3ZlcmxheU9uQmFja2Ryb3BDbGljayh0aGlzLm92ZXJsYXlSZWYpO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmFwRm9jdXMob3ZlcmxheVJlZjogT3ZlcmxheVJlZik6IHZvaWQge1xuICAgIHRoaXMuZm9jdXNUcmFwRmFjdG9yeS5jcmVhdGUob3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIGNsb3NlT3ZlcmxheU9uRXNjYXBlS2V5KG92ZXJsYXlSZWY6IE92ZXJsYXlSZWYpOiB2b2lkIHtcbiAgICBvdmVybGF5UmVmLm92ZXJsYXlFbGVtZW50Lm9ua2V5ZG93biA9IChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgdGhpcy5pc09wZW4uc2V0KGZhbHNlKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZU92ZXJsYXlPbkJhY2tkcm9wQ2xpY2sob3ZlcmxheVJlZjogT3ZlcmxheVJlZik6IHZvaWQge1xuICAgIG92ZXJsYXlSZWZcbiAgICAgIC5iYWNrZHJvcENsaWNrKClcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpLCB0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNPcGVuLnNldChmYWxzZSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5vdmVybGF5UmVmPy5kaXNwb3NlKCk7XG4gICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxufVxuIl19