@unipin/angular-applet 21.0.1 → 21.1.2
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/README.md +334 -37
- package/common/assets/styles/theme.css +3 -0
- package/fesm2022/unipin-angular-applet-accordion.mjs +30 -30
- package/fesm2022/unipin-angular-applet-accordion.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-alert-dialog.mjs +92 -93
- package/fesm2022/unipin-angular-applet-alert-dialog.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-alert.mjs +16 -16
- package/fesm2022/unipin-angular-applet-alert.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-approval.mjs +129 -0
- package/fesm2022/unipin-angular-applet-approval.mjs.map +1 -0
- package/fesm2022/unipin-angular-applet-auth.mjs +45 -26
- package/fesm2022/unipin-angular-applet-auth.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-avatar.mjs +6 -6
- package/fesm2022/unipin-angular-applet-avatar.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-badge.mjs +6 -6
- package/fesm2022/unipin-angular-applet-badge.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-buttons.mjs +13 -17
- package/fesm2022/unipin-angular-applet-buttons.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-calendar.mjs +25 -25
- package/fesm2022/unipin-angular-applet-calendar.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-collapsible.mjs +17 -17
- package/fesm2022/unipin-angular-applet-collapsible.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-common.mjs +60 -23
- package/fesm2022/unipin-angular-applet-common.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-containers.mjs +22 -22
- package/fesm2022/unipin-angular-applet-containers.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-dialog.mjs +62 -73
- package/fesm2022/unipin-angular-applet-dialog.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-forms.mjs +394 -152
- package/fesm2022/unipin-angular-applet-forms.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-froala.mjs +10 -12
- package/fesm2022/unipin-angular-applet-froala.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-infinite-scroll.mjs +5 -5
- package/fesm2022/unipin-angular-applet-infinite-scroll.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-json-viewer.mjs +8 -8
- package/fesm2022/unipin-angular-applet-json-viewer.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-kbd.mjs +32 -0
- package/fesm2022/unipin-angular-applet-kbd.mjs.map +1 -0
- package/fesm2022/unipin-angular-applet-loading-dialog.mjs +8 -8
- package/fesm2022/unipin-angular-applet-loading-dialog.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-markdown.mjs +19 -21
- package/fesm2022/unipin-angular-applet-markdown.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-popover.mjs +21 -25
- package/fesm2022/unipin-angular-applet-popover.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-progress-bar.mjs +8 -8
- package/fesm2022/unipin-angular-applet-progress-bar.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-skeleton.mjs +5 -5
- package/fesm2022/unipin-angular-applet-skeleton.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-spinner.mjs +6 -6
- package/fesm2022/unipin-angular-applet-spinner.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-swipeable.mjs +26 -26
- package/fesm2022/unipin-angular-applet-swipeable.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-tabs.mjs +22 -22
- package/fesm2022/unipin-angular-applet-tabs.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-tooltip.mjs +5 -5
- package/fesm2022/unipin-angular-applet-tooltip.mjs.map +1 -1
- package/package.json +9 -1
- package/types/unipin-angular-applet-alert-dialog.d.ts +3 -1
- package/types/unipin-angular-applet-approval.d.ts +55 -0
- package/types/unipin-angular-applet-common.d.ts +12 -2
- package/types/unipin-angular-applet-dialog.d.ts +1 -2
- package/types/unipin-angular-applet-forms.d.ts +70 -2
- package/types/unipin-angular-applet-kbd.d.ts +11 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
import { GqlParser, CacheStrategy, QueryResult, MutationResult } from '@unipin/angular-gql';
|
|
3
|
+
import { ApprovalCriteria, PageableResponse, MutationApprovalMsApproveOrDeclineRequestArgs, Approval } from '@unipin/graphql-schema';
|
|
4
|
+
import * as _angular_core from '@angular/core';
|
|
5
|
+
|
|
6
|
+
declare class ApprovalService {
|
|
7
|
+
protected readonly gql: GqlParser;
|
|
8
|
+
constructor(gql: GqlParser);
|
|
9
|
+
query(input: ApprovalCriteria, extraAttr?: string, cacheStrategy?: CacheStrategy): Observable<QueryResult<{
|
|
10
|
+
approvalMsApprovals: PageableResponse;
|
|
11
|
+
}>>;
|
|
12
|
+
request(variables: MutationApprovalMsApproveOrDeclineRequestArgs): Observable<MutationResult<{
|
|
13
|
+
approvalMsApproveOrDeclineRequest: string;
|
|
14
|
+
}>>;
|
|
15
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ApprovalService, never>;
|
|
16
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<ApprovalService>;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
declare class UpApprovalFormComponent {
|
|
20
|
+
readonly approvalData: _angular_core.InputSignal<Approval[]>;
|
|
21
|
+
readonly isLoading: _angular_core.ModelSignal<boolean>;
|
|
22
|
+
readonly borderColors: _angular_core.WritableSignal<{
|
|
23
|
+
[key: number]: string;
|
|
24
|
+
}>;
|
|
25
|
+
readonly backgroundColors: _angular_core.WritableSignal<{
|
|
26
|
+
[key: number]: string;
|
|
27
|
+
}>;
|
|
28
|
+
protected readonly STATUS_COLOR_MAP: {
|
|
29
|
+
PENDING: {
|
|
30
|
+
bg: string;
|
|
31
|
+
border: string;
|
|
32
|
+
};
|
|
33
|
+
APPROVED: {
|
|
34
|
+
bg: string;
|
|
35
|
+
border: string;
|
|
36
|
+
};
|
|
37
|
+
DECLINED: {
|
|
38
|
+
bg: string;
|
|
39
|
+
border: string;
|
|
40
|
+
};
|
|
41
|
+
DEFAULT: {
|
|
42
|
+
bg: string;
|
|
43
|
+
border: string;
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
constructor();
|
|
47
|
+
protected getColors(status?: string | null): {
|
|
48
|
+
bg: string;
|
|
49
|
+
border: string;
|
|
50
|
+
};
|
|
51
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<UpApprovalFormComponent, never>;
|
|
52
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<UpApprovalFormComponent, "up-approval-form", never, { "approvalData": { "alias": "approvalData"; "required": true; "isSignal": true; }; "isLoading": { "alias": "isLoading"; "required": false; "isSignal": true; }; }, { "isLoading": "isLoadingChange"; }, never, never, true, never>;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export { ApprovalService, UpApprovalFormComponent };
|
|
@@ -4,7 +4,7 @@ import { PipeTransform, OnInit, ElementRef } from '@angular/core';
|
|
|
4
4
|
import { DomSanitizer, SafeHtml } from '@angular/platform-browser';
|
|
5
5
|
import { Observable } from 'rxjs';
|
|
6
6
|
import { GqlParser, QueryResult } from '@unipin/angular-gql';
|
|
7
|
-
import { CountryQueryCriteria, CountryResult, CurrencyQueryCriteria, CurrencyResult } from '@unipin/graphql-schema';
|
|
7
|
+
import { CountryQueryCriteria, CountryResult, CurrencyQueryCriteria, CurrencyResult, RateGroupCodeCriteria, RateGroupCodeRs } from '@unipin/graphql-schema';
|
|
8
8
|
|
|
9
9
|
declare function up(...inputs: ClassValue[]): string;
|
|
10
10
|
|
|
@@ -77,6 +77,16 @@ declare class CurrencyService {
|
|
|
77
77
|
static ɵprov: i0.ɵɵInjectableDeclaration<CurrencyService>;
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
+
declare class RateGroupCodeService {
|
|
81
|
+
protected readonly gql: GqlParser;
|
|
82
|
+
constructor(gql: GqlParser);
|
|
83
|
+
query(input?: RateGroupCodeCriteria): Observable<QueryResult<{
|
|
84
|
+
productMsSearchRateGroupCodes: RateGroupCodeRs;
|
|
85
|
+
}>>;
|
|
86
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RateGroupCodeService, never>;
|
|
87
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<RateGroupCodeService>;
|
|
88
|
+
}
|
|
89
|
+
|
|
80
90
|
declare class UpFileDragNDropDirective implements OnInit {
|
|
81
91
|
protected readonly el: ElementRef;
|
|
82
92
|
readonly draggedClass: i0.InputSignal<ClassValue>;
|
|
@@ -91,4 +101,4 @@ declare class UpFileDragNDropDirective implements OnInit {
|
|
|
91
101
|
static ɵdir: i0.ɵɵDirectiveDeclaration<UpFileDragNDropDirective, "[upFileDragNDrop]", ["upFileDragNDrop"], { "draggedClass": { "alias": "draggedClass"; "required": false; "isSignal": true; }; }, { "fileDropped": "fileDropped"; }, never, never, true, never>;
|
|
92
102
|
}
|
|
93
103
|
|
|
94
|
-
export { CountryService, CurrencyService, UpCapitalizaPipe, UpFileDragNDropDirective, UpInitialPipe, UpLinkifyPipe, UpPricePipe, compressImage, formatCapitalize, formatInitial, formatLinkify, formatPrice, generateContrastColor, up };
|
|
104
|
+
export { CountryService, CurrencyService, RateGroupCodeService, UpCapitalizaPipe, UpFileDragNDropDirective, UpInitialPipe, UpLinkifyPipe, UpPricePipe, compressImage, formatCapitalize, formatInitial, formatLinkify, formatPrice, generateContrastColor, up };
|
|
@@ -95,7 +95,6 @@ declare class UpDialog {
|
|
|
95
95
|
readonly disableClose: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
96
96
|
readonly closeDelay: _angular_core.InputSignalWithTransform<number, unknown>;
|
|
97
97
|
readonly closeOnOutsidePointerEvents: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
98
|
-
readonly closeOnBackdropClick: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
99
98
|
readonly closed: _angular_core.OutputEmitterRef<any>;
|
|
100
99
|
readonly stateChanged: _angular_core.OutputEmitterRef<"open" | "closed">;
|
|
101
100
|
readonly state: WritableSignal<boolean>;
|
|
@@ -119,7 +118,7 @@ declare class UpDialog {
|
|
|
119
118
|
setContext<T extends object>(context: T): void;
|
|
120
119
|
open<DialogContext>(): void;
|
|
121
120
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<UpDialog, never>;
|
|
122
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<UpDialog, "up-dialog", ["upDialog"], { "attachTo": { "alias": "attachTo"; "required": false; "isSignal": true; }; "role": { "alias": "role"; "required": false; "isSignal": true; }; "autoFocus": { "alias": "autoFocus"; "required": false; "isSignal": true; }; "restoreFocus": { "alias": "restoreFocus"; "required": false; "isSignal": true; }; "scrollStrategy": { "alias": "scrollStrategy"; "required": false; "isSignal": true; }; "attachPositions": { "alias": "attachPositions"; "required": false; "isSignal": true; }; "positionStrategy": { "alias": "positionStrategy"; "required": false; "isSignal": true; }; "hasBackdrop": { "alias": "hasBackdrop"; "required": false; "isSignal": true; }; "disableClose": { "alias": "disableClose"; "required": false; "isSignal": true; }; "closeDelay": { "alias": "closeDelay"; "required": false; "isSignal": true; }; "closeOnOutsidePointerEvents": { "alias": "closeOnOutsidePointerEvents"; "required": false; "isSignal": true; };
|
|
121
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<UpDialog, "up-dialog", ["upDialog"], { "attachTo": { "alias": "attachTo"; "required": false; "isSignal": true; }; "role": { "alias": "role"; "required": false; "isSignal": true; }; "autoFocus": { "alias": "autoFocus"; "required": false; "isSignal": true; }; "restoreFocus": { "alias": "restoreFocus"; "required": false; "isSignal": true; }; "scrollStrategy": { "alias": "scrollStrategy"; "required": false; "isSignal": true; }; "attachPositions": { "alias": "attachPositions"; "required": false; "isSignal": true; }; "positionStrategy": { "alias": "positionStrategy"; "required": false; "isSignal": true; }; "hasBackdrop": { "alias": "hasBackdrop"; "required": false; "isSignal": true; }; "disableClose": { "alias": "disableClose"; "required": false; "isSignal": true; }; "closeDelay": { "alias": "closeDelay"; "required": false; "isSignal": true; }; "closeOnOutsidePointerEvents": { "alias": "closeOnOutsidePointerEvents"; "required": false; "isSignal": true; }; }, { "closed": "closed"; "stateChanged": "stateChanged"; }, never, ["*"], true, never>;
|
|
123
122
|
}
|
|
124
123
|
|
|
125
124
|
declare class UpDialogCloseDirective {
|
|
@@ -4,7 +4,7 @@ import { ClassValue } from 'clsx';
|
|
|
4
4
|
import { NgControl, AbstractControl, NgForm, FormGroupDirective, ControlValueAccessor, FormGroup, ValidatorFn } from '@angular/forms';
|
|
5
5
|
import { Subscription, Observable, Subject } from 'rxjs';
|
|
6
6
|
import { Country, Currency } from '@unipin/graphql-schema';
|
|
7
|
-
import { CountryService, CurrencyService } from '@unipin/angular-applet/common';
|
|
7
|
+
import { CountryService, CurrencyService, RateGroupCodeService } from '@unipin/angular-applet/common';
|
|
8
8
|
import { SingleDate, RangeDate } from '@unipin/angular-applet/calendar';
|
|
9
9
|
|
|
10
10
|
declare abstract class UpFieldControl {
|
|
@@ -326,6 +326,43 @@ declare class UpSearchableSelectComponent extends UpFieldControlComponent implem
|
|
|
326
326
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<UpSearchableSelectComponent, "up-searchable-select", never, { "query": { "alias": "query"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "appendTo": { "alias": "appendTo"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "initialItems": { "alias": "initialItems"; "required": false; "isSignal": true; }; "bindLabel": { "alias": "bindLabel"; "required": false; "isSignal": true; }; "bindValue": { "alias": "bindValue"; "required": false; "isSignal": true; }; "inlineClass": { "alias": "class"; "required": false; "isSignal": true; }; "addTag": { "alias": "addTag"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "virtualScroll": { "alias": "virtualScroll"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "loading": "loadingChange"; "value": "valueChange"; "changed": "changed"; }, ["control"], never, true, never>;
|
|
327
327
|
}
|
|
328
328
|
|
|
329
|
+
declare class UpRateGroupCodeSelectComponent extends UpFieldControlComponent implements OnInit, OnDestroy, ControlValueAccessor {
|
|
330
|
+
protected readonly service: RateGroupCodeService;
|
|
331
|
+
readonly appendTo: InputSignal<string>;
|
|
332
|
+
readonly placeholder: InputSignal<string>;
|
|
333
|
+
readonly inlineClass: InputSignal<ClassValue>;
|
|
334
|
+
readonly disabled: InputSignal<boolean>;
|
|
335
|
+
readonly multiple: InputSignal<boolean>;
|
|
336
|
+
readonly clearable: InputSignal<boolean>;
|
|
337
|
+
readonly value: ModelSignal<string | null>;
|
|
338
|
+
readonly changed: OutputEmitterRef<string>;
|
|
339
|
+
readonly isLoading: WritableSignal<boolean>;
|
|
340
|
+
readonly _disabled: WritableSignal<boolean>;
|
|
341
|
+
readonly rateGroupCodes: WritableSignal<{
|
|
342
|
+
code: string;
|
|
343
|
+
name: string;
|
|
344
|
+
}[]>;
|
|
345
|
+
readonly queryFn: (keyword: string) => Observable<{
|
|
346
|
+
code: string;
|
|
347
|
+
name: string;
|
|
348
|
+
}[]>;
|
|
349
|
+
protected sub?: Subscription;
|
|
350
|
+
protected isTouched: boolean;
|
|
351
|
+
protected _onTouched: () => void;
|
|
352
|
+
protected _onChange: (_val: any) => void;
|
|
353
|
+
constructor(service: RateGroupCodeService);
|
|
354
|
+
ngOnInit(): void;
|
|
355
|
+
ngOnDestroy(): void;
|
|
356
|
+
registerOnChange(fn: any): void;
|
|
357
|
+
registerOnTouched(fn: any): void;
|
|
358
|
+
setDisabledState(isDisabled: boolean): void;
|
|
359
|
+
writeValue(value: any): void;
|
|
360
|
+
onTouched(): void;
|
|
361
|
+
change(value: any): void;
|
|
362
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<UpRateGroupCodeSelectComponent, never>;
|
|
363
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<UpRateGroupCodeSelectComponent, "up-rate-group-code-select", never, { "appendTo": { "alias": "appendTo"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "inlineClass": { "alias": "class"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "changed": "changed"; }, never, never, true, never>;
|
|
364
|
+
}
|
|
365
|
+
|
|
329
366
|
declare class UpDatepickerComponent extends UpFieldControlComponent implements ControlValueAccessor {
|
|
330
367
|
readonly placeholder: _angular_core.InputSignal<string>;
|
|
331
368
|
readonly minDate: _angular_core.InputSignal<SingleDate>;
|
|
@@ -409,4 +446,35 @@ declare function toggleFormControls(form: FormGroup, keys: string[], mode: 'enab
|
|
|
409
446
|
*/
|
|
410
447
|
declare function validRangeValidator(fromKey: string, toKey: string): ValidatorFn;
|
|
411
448
|
|
|
412
|
-
|
|
449
|
+
/**
|
|
450
|
+
* Validator that requires all specified form controls to have the same value.
|
|
451
|
+
*
|
|
452
|
+
* @param {string[]} controlNames - The names of the controls that must match
|
|
453
|
+
* @param {string} [message] - Optional custom error message
|
|
454
|
+
* @returns {ValidatorFn} A validator function producing an `isEqual` error if values do not match
|
|
455
|
+
*
|
|
456
|
+
* @example
|
|
457
|
+
* this.form = new FormGroup({
|
|
458
|
+
* password: new FormControl(''),
|
|
459
|
+
* confirmPassword: new FormControl(''),
|
|
460
|
+
* }, { validators: isEqualValidator(['password', 'confirmPassword']) });
|
|
461
|
+
*/
|
|
462
|
+
declare function isEqualValidator(controlNames: string[], message?: string): ValidatorFn;
|
|
463
|
+
|
|
464
|
+
/**
|
|
465
|
+
* Validator that requires all specified form controls to have different values.
|
|
466
|
+
*
|
|
467
|
+
* @param {string[]} controlNames - The names of the controls that must all be unique
|
|
468
|
+
* @param {string} [message] - Optional custom error message
|
|
469
|
+
* @returns {ValidatorFn} A validator function producing an `isNotEqual` error if duplicate values exist
|
|
470
|
+
*
|
|
471
|
+
* @example
|
|
472
|
+
* this.form = new FormGroup({
|
|
473
|
+
* primaryEmail: new FormControl(''),
|
|
474
|
+
* secondaryEmail: new FormControl(''),
|
|
475
|
+
* backupEmail: new FormControl(''),
|
|
476
|
+
* }, { validators: isNotEqualValidator(['primaryEmail', 'secondaryEmail', 'backupEmail']) });
|
|
477
|
+
*/
|
|
478
|
+
declare function isNotEqualValidator(controlNames: string[], message?: string): ValidatorFn;
|
|
479
|
+
|
|
480
|
+
export { UpCheckboxDirective, UpCountrySelectComponent, UpCurrencySelectComponent, UpDateRangePickerComponent, UpDatepickerComponent, UpFieldControl, UpFieldControlComponent, UpFormFieldComponent, UpInputDirective, UpNumberDirective, UpPasswordComponent, UpRateGroupCodeSelectComponent, UpSearchableSelectComponent, UpSelectComponent, UpSwitchComponent, isEqualValidator, isNotEqualValidator, setValidator, toggleFormControls, validRangeValidator };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { ClassValue } from 'clsx';
|
|
3
|
+
|
|
4
|
+
declare class UpKbdDirective {
|
|
5
|
+
readonly inlineClass: _angular_core.InputSignal<ClassValue>;
|
|
6
|
+
protected readonly _computedClass: _angular_core.Signal<string>;
|
|
7
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<UpKbdDirective, never>;
|
|
8
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UpKbdDirective, "[upKbd]", ["upKbd"], { "inlineClass": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export { UpKbdDirective };
|