@unipin/angular-applet 21.6.0 → 21.6.5
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/unipin-angular-applet-accordion.mjs +29 -17
- package/fesm2022/unipin-angular-applet-accordion.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-alert-dialog.mjs +7 -7
- package/fesm2022/unipin-angular-applet-alert-dialog.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-alert.mjs +9 -9
- package/fesm2022/unipin-angular-applet-approval.mjs +10 -10
- package/fesm2022/unipin-angular-applet-approval.mjs.map +1 -1
- package/fesm2022/{unipin-angular-applet-audit-audit-modal.component-DNlMbUda.mjs → unipin-angular-applet-audit-audit-modal.component-Fhzj6tsh.mjs} +4 -4
- package/fesm2022/{unipin-angular-applet-audit-audit-modal.component-DNlMbUda.mjs.map → unipin-angular-applet-audit-audit-modal.component-Fhzj6tsh.mjs.map} +1 -1
- package/fesm2022/unipin-angular-applet-audit.mjs +11 -12
- package/fesm2022/unipin-angular-applet-audit.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-auth.mjs +51 -39
- package/fesm2022/unipin-angular-applet-auth.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-avatar.mjs +7 -10
- package/fesm2022/unipin-angular-applet-avatar.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-badge.mjs +6 -3
- package/fesm2022/unipin-angular-applet-badge.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-buttons.mjs +6 -6
- package/fesm2022/unipin-angular-applet-calendar.mjs +13 -13
- package/fesm2022/unipin-angular-applet-calendar.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-collapsible.mjs +9 -9
- package/fesm2022/unipin-angular-applet-common.mjs +40 -39
- package/fesm2022/unipin-angular-applet-common.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-containers.mjs +18 -18
- package/fesm2022/unipin-angular-applet-containers.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-dialog.mjs +22 -22
- package/fesm2022/unipin-angular-applet-dialog.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-forms.mjs +469 -374
- package/fesm2022/unipin-angular-applet-forms.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-froala.mjs +14 -15
- package/fesm2022/unipin-angular-applet-froala.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-grids.mjs +26 -24
- package/fesm2022/unipin-angular-applet-grids.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-infinite-scroll.mjs +3 -3
- package/fesm2022/unipin-angular-applet-json-viewer.mjs +3 -3
- package/fesm2022/unipin-angular-applet-kbd.mjs +3 -3
- package/fesm2022/unipin-angular-applet-loading-dialog.mjs +6 -6
- package/fesm2022/unipin-angular-applet-markdown.mjs +20 -22
- package/fesm2022/unipin-angular-applet-markdown.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-micro-frontend.mjs +3 -3
- package/fesm2022/unipin-angular-applet-micro-frontend.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-popover.mjs +19 -15
- package/fesm2022/unipin-angular-applet-popover.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-progress-bar.mjs +14 -4
- package/fesm2022/unipin-angular-applet-progress-bar.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-skeleton.mjs +3 -3
- package/fesm2022/unipin-angular-applet-spinner.mjs +16 -20
- package/fesm2022/unipin-angular-applet-spinner.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-stepper.mjs +17 -9
- package/fesm2022/unipin-angular-applet-stepper.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-swipeable.mjs +14 -13
- package/fesm2022/unipin-angular-applet-swipeable.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-tabs.mjs +9 -9
- package/fesm2022/unipin-angular-applet-tooltip.mjs +4 -4
- package/fesm2022/unipin-angular-applet-tooltip.mjs.map +1 -1
- package/package.json +1 -1
- package/types/unipin-angular-applet-accordion.d.ts +1 -0
- package/types/unipin-angular-applet-approval.d.ts +2 -2
- package/types/unipin-angular-applet-badge.d.ts +2 -2
- package/types/unipin-angular-applet-common.d.ts +4 -4
- package/types/unipin-angular-applet-forms.d.ts +47 -8
- package/types/unipin-angular-applet-grids.d.ts +1 -1
- package/types/unipin-angular-applet-markdown.d.ts +2 -2
- package/types/unipin-angular-applet-progress-bar.d.ts +2 -0
- package/types/unipin-angular-applet-spinner.d.ts +2 -2
- package/types/unipin-angular-applet-swipeable.d.ts +1 -1
|
@@ -108,10 +108,10 @@ class ProfileService {
|
|
|
108
108
|
`,
|
|
109
109
|
});
|
|
110
110
|
}
|
|
111
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
112
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
111
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: ProfileService, deps: [{ token: i1.GqlParser }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
112
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: ProfileService, providedIn: 'root' }); }
|
|
113
113
|
}
|
|
114
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
114
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: ProfileService, decorators: [{
|
|
115
115
|
type: Injectable,
|
|
116
116
|
args: [{
|
|
117
117
|
providedIn: 'root'
|
|
@@ -242,10 +242,10 @@ class AuthService {
|
|
|
242
242
|
localStorage.setItem('refreshToken', AuthService.refreshToken);
|
|
243
243
|
}));
|
|
244
244
|
}
|
|
245
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
246
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
245
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: AuthService, deps: [{ token: i1.GqlParser }, { token: ProfileService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
246
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: AuthService, providedIn: 'root' }); }
|
|
247
247
|
}
|
|
248
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
248
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: AuthService, decorators: [{
|
|
249
249
|
type: Injectable,
|
|
250
250
|
args: [{
|
|
251
251
|
providedIn: 'root'
|
|
@@ -298,7 +298,7 @@ class AuthResolver {
|
|
|
298
298
|
if (date === null) {
|
|
299
299
|
return false;
|
|
300
300
|
}
|
|
301
|
-
return
|
|
301
|
+
return date.valueOf() <= Date.now() + 0 * 1000;
|
|
302
302
|
}
|
|
303
303
|
/**
|
|
304
304
|
* Retrieves the expiration date of a token.
|
|
@@ -307,7 +307,7 @@ class AuthResolver {
|
|
|
307
307
|
*/
|
|
308
308
|
getTokenExpirationDate(token) {
|
|
309
309
|
const decoded = this.decodeToken(token);
|
|
310
|
-
if (!decoded
|
|
310
|
+
if (!decoded?.hasOwnProperty('exp')) {
|
|
311
311
|
return null;
|
|
312
312
|
}
|
|
313
313
|
const date = new Date(0);
|
|
@@ -339,7 +339,7 @@ class AuthResolver {
|
|
|
339
339
|
* @returns {string} - The decoded string.
|
|
340
340
|
*/
|
|
341
341
|
urlBase64Decode(str) {
|
|
342
|
-
let output = str.
|
|
342
|
+
let output = str.replaceAll('-', '+').replaceAll('_', '/');
|
|
343
343
|
switch (output.length % 4) {
|
|
344
344
|
case 0:
|
|
345
345
|
break;
|
|
@@ -360,7 +360,7 @@ class AuthResolver {
|
|
|
360
360
|
* @returns {string} - The decoded Unicode string.
|
|
361
361
|
*/
|
|
362
362
|
b64DecodeUnicode(str) {
|
|
363
|
-
return decodeURIComponent(Array.prototype.map.call(this.b64decode(str), (c) => '%' + ('00' + c.
|
|
363
|
+
return decodeURIComponent(Array.prototype.map.call(this.b64decode(str), (c) => '%' + ('00' + (c.codePointAt(0) ?? 0).toString(16)).slice(-2)).join(''));
|
|
364
364
|
}
|
|
365
365
|
/**
|
|
366
366
|
* Decodes a base64-encoded string.
|
|
@@ -370,18 +370,33 @@ class AuthResolver {
|
|
|
370
370
|
b64decode(str) {
|
|
371
371
|
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
|
|
372
372
|
let output = '';
|
|
373
|
-
|
|
373
|
+
while (str.length > 0 &&
|
|
374
|
+
str.at(-1) === '=') {
|
|
375
|
+
str = str.slice(0, -1);
|
|
376
|
+
}
|
|
374
377
|
if (str.length % 4 === 1) {
|
|
375
378
|
throw new Error(`'atob' failed: The string to be decoded is not correctly encoded.`);
|
|
376
379
|
}
|
|
377
|
-
|
|
380
|
+
let bc = 0, bs, buffer, idx = 0;
|
|
381
|
+
while (true) {
|
|
382
|
+
buffer = str.charAt(idx++);
|
|
383
|
+
if (!buffer) {
|
|
384
|
+
break;
|
|
385
|
+
}
|
|
378
386
|
buffer = chars.indexOf(buffer);
|
|
387
|
+
if (~buffer) {
|
|
388
|
+
bs = bc % 4 ? bs * 64 + buffer : buffer;
|
|
389
|
+
if (bc++ % 4) {
|
|
390
|
+
output += String.fromCodePoint(255 & (bs >> ((-2 * bc) & 6)));
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
}
|
|
379
394
|
return output;
|
|
380
395
|
}
|
|
381
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
382
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
396
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: AuthResolver, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
397
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: AuthResolver, providedIn: 'root' }); }
|
|
383
398
|
}
|
|
384
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
399
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: AuthResolver, decorators: [{
|
|
385
400
|
type: Injectable,
|
|
386
401
|
args: [{
|
|
387
402
|
providedIn: 'root'
|
|
@@ -456,10 +471,10 @@ class PermissionService {
|
|
|
456
471
|
`
|
|
457
472
|
});
|
|
458
473
|
}
|
|
459
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
460
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
474
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: PermissionService, deps: [{ token: i1.GqlParser }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
475
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: PermissionService, providedIn: 'root' }); }
|
|
461
476
|
}
|
|
462
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
477
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: PermissionService, decorators: [{
|
|
463
478
|
type: Injectable,
|
|
464
479
|
args: [{
|
|
465
480
|
providedIn: 'root'
|
|
@@ -472,29 +487,28 @@ const permissionGuard = (route) => {
|
|
|
472
487
|
const permissionService = inject(PermissionService);
|
|
473
488
|
const permissions = route.data['permissions'];
|
|
474
489
|
const aggregator = route.data['aggregator'] ?? 'OR';
|
|
475
|
-
if (!permissions
|
|
476
|
-
!permissions.length) {
|
|
490
|
+
if (!permissions?.length) {
|
|
477
491
|
console.error('Invalid config: permissions is a required parameter in route data for PermissionGuard');
|
|
478
492
|
return false;
|
|
479
493
|
}
|
|
480
494
|
if (!permissionService.isInitiated) {
|
|
481
495
|
router.navigate(['loading'], {
|
|
482
496
|
queryParams: {
|
|
483
|
-
url: `${location.path() +
|
|
497
|
+
url: `${location.path() + globalThis.location.hash}`
|
|
484
498
|
}
|
|
485
499
|
});
|
|
486
500
|
return false;
|
|
487
501
|
}
|
|
488
502
|
if (aggregator === 'OR') {
|
|
489
|
-
for (
|
|
490
|
-
if (permissionService.has(
|
|
503
|
+
for (const permission of permissions) {
|
|
504
|
+
if (permissionService.has(permission)) {
|
|
491
505
|
return true;
|
|
492
506
|
}
|
|
493
507
|
}
|
|
494
508
|
}
|
|
495
509
|
let hasPermission = true;
|
|
496
|
-
for (
|
|
497
|
-
if (!permissionService.has(
|
|
510
|
+
for (const permission of permissions) {
|
|
511
|
+
if (!permissionService.has(permission)) {
|
|
498
512
|
hasPermission = false;
|
|
499
513
|
break;
|
|
500
514
|
}
|
|
@@ -524,16 +538,14 @@ const refreshTokenInterceptor = (request, next) => {
|
|
|
524
538
|
return;
|
|
525
539
|
}
|
|
526
540
|
const { errors } = body;
|
|
527
|
-
if (!errors ||
|
|
528
|
-
!errors.length ||
|
|
541
|
+
if (!errors?.length ||
|
|
529
542
|
errors[0].extensions.code !== 'USER_INVALID_TOKEN') {
|
|
530
543
|
return;
|
|
531
544
|
}
|
|
532
545
|
throw body;
|
|
533
546
|
}), catchError((error) => {
|
|
534
547
|
const { errors } = error;
|
|
535
|
-
if (!errors
|
|
536
|
-
!errors.length) {
|
|
548
|
+
if (!errors?.length) {
|
|
537
549
|
return throwError(() => error);
|
|
538
550
|
}
|
|
539
551
|
if ((errors[0].message &&
|
|
@@ -582,10 +594,10 @@ class PermissionDirective {
|
|
|
582
594
|
}
|
|
583
595
|
this.viewContainer.clear();
|
|
584
596
|
}
|
|
585
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
586
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.
|
|
597
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: PermissionDirective, deps: [{ token: PermissionService }, { token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
598
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.18", type: PermissionDirective, isStandalone: true, selector: "[hasPermission]", inputs: { hasPermission: "hasPermission" }, exportAs: ["hasPermission"], ngImport: i0 }); }
|
|
587
599
|
}
|
|
588
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
600
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: PermissionDirective, decorators: [{
|
|
589
601
|
type: Directive,
|
|
590
602
|
args: [{
|
|
591
603
|
exportAs: 'hasPermission',
|
|
@@ -596,8 +608,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.10", ngImpo
|
|
|
596
608
|
}] } });
|
|
597
609
|
|
|
598
610
|
class UnauthorizedPage {
|
|
599
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
600
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.
|
|
611
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: UnauthorizedPage, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
612
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.18", type: UnauthorizedPage, isStandalone: true, selector: "up-unauthorized", host: { classAttribute: "flex flex-col items-center justify-center size-full gap-4 p-5 select-none" }, providers: [
|
|
601
613
|
provideIcons({
|
|
602
614
|
matLockRound
|
|
603
615
|
})
|
|
@@ -613,7 +625,7 @@ class UnauthorizedPage {
|
|
|
613
625
|
<p class="text-center">Please log in or re-check your permissions.</p>
|
|
614
626
|
`, isInline: true, dependencies: [{ kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
615
627
|
}
|
|
616
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
628
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: UnauthorizedPage, decorators: [{
|
|
617
629
|
type: Component,
|
|
618
630
|
args: [{
|
|
619
631
|
selector: 'up-unauthorized',
|
|
@@ -682,16 +694,16 @@ class LoadingPage {
|
|
|
682
694
|
ngOnDestroy() {
|
|
683
695
|
this.sub?.unsubscribe();
|
|
684
696
|
}
|
|
685
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
686
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.
|
|
697
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: LoadingPage, deps: [{ token: LOADING_CONFIG }, { token: i1$1.Router }, { token: i1$1.ActivatedRoute }, { token: PermissionService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
698
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.18", type: LoadingPage, isStandalone: true, selector: "up-loading", host: { classAttribute: "flex flex-col items-center gap-6 p-5 justify-center size-full select-none" }, ngImport: i0, template: `
|
|
687
699
|
<up-spinner class="size-10" />
|
|
688
700
|
|
|
689
701
|
<h3 class="text-center text-lg lg:text-2xl font-bold">
|
|
690
702
|
Please wait, we're preparing the applet. Drink water or coffee while waiting.
|
|
691
703
|
</h3>
|
|
692
|
-
`, isInline: true, dependencies: [{ kind: "component", type: UpSpinnerComponent, selector: "up-spinner", inputs: ["
|
|
704
|
+
`, isInline: true, dependencies: [{ kind: "component", type: UpSpinnerComponent, selector: "up-spinner", inputs: ["strokeWidth", "class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
693
705
|
}
|
|
694
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
706
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: LoadingPage, decorators: [{
|
|
695
707
|
type: Component,
|
|
696
708
|
args: [{
|
|
697
709
|
selector: 'up-loading',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unipin-angular-applet-auth.mjs","sources":["../../../projects/unipin-angular/auth/authorization/utils/provide-loading-config.util.ts","../../../projects/unipin-angular/auth/authentication/services/profile.service.ts","../../../projects/unipin-angular/auth/authentication/services/auth.service.ts","../../../projects/unipin-angular/auth/authentication/resolvers/auth.resolver.ts","../../../projects/unipin-angular/auth/authentication/guards/auth.guard.ts","../../../projects/unipin-angular/auth/authorization/services/permission.service.ts","../../../projects/unipin-angular/auth/authorization/guards/permission.guard.ts","../../../projects/unipin-angular/auth/authorization/interceptors/authorization.interceptor.ts","../../../projects/unipin-angular/auth/authentication/interceptors/refresh-token.interceptor.ts","../../../projects/unipin-angular/auth/authorization/directives/permission.directive.ts","../../../projects/unipin-angular/auth/authorization/pages/unauthorized.page.ts","../../../projects/unipin-angular/auth/authorization/pages/loading.page.ts","../../../projects/unipin-angular/auth/unipin-angular-applet-auth.ts"],"sourcesContent":["import { InjectionToken, Provider } from '@angular/core';\n\nexport const LOADING_CONFIG = new InjectionToken<LoadingConfig>('LOADING_CONFIG');\n\nexport type LoadingConfig = {\n permTypes: string[];\n permModules: string[];\n subjectGuidStorageKey?: string;\n}\n\nexport function provideLoadingConfig(config: LoadingConfig): Provider{\n return {\n provide: LOADING_CONFIG,\n useValue: config\n };\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { GqlParser, CacheStrategy, QueryResult } from '@unipin/angular-gql';\nimport type { AppLoginSubject, Maybe } from '@unipin/graphql-schema';\nimport { User } from '../types/user.type';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ProfileService {\n\n constructor(\n protected readonly gql: GqlParser\n ) { }\n\n public transformSubjetToUser(subject: AppLoginSubject): User{\n const user: User = { \n ...subject,\n email: '',\n photo: '/assets/imgs/profile.svg'\n };\n\n subject.appLoginExt?.forEach(\n ({ paramCode, file: { publicUrl }}: any) => {\n if (paramCode === 'USER_PROFILE_PHOTO') {\n user.photo = publicUrl;\n }\n }\n ); \n\n subject.appLoginPrincipal?.forEach(\n ({ principalId, principalType }: any) => {\n if (principalType === 'EMAIL_USERNAME') {\n user.email = principalId;\n }\n }\n );\n return user;\n }\n\n /**\n * A method to get the user profile information.\n * @param {string} extraAttr - Contain extra attribute to get the user profile information.\n * @param {CacheStrategy | undefined} cacheStrategy - Specifies how Apollo Client should handle data retrieval, determining whether it should make a network request to fetch fresh data from the server or use data from the local cache.\n * \n * @returns {Observable<QueryResult<{ authMsMyProfile: Maybe<AppLoginSubject> }>>} Contain user profile information.\n */\n public getMyProfile(extraAttr = '', cacheStrategy?: CacheStrategy): Observable<QueryResult<{ authMsMyProfile: Maybe<AppLoginSubject> }>>{\n return this.gql.query({\n cacheStrategy,\n operationName: 'getMyProfile',\n query: `\n query getMyProfile {\n authMsMyProfile {\n guid\n name\n status\n gender\n birthday\n category\n totpSecretGuid\n appLoginPrincipal {\n guid\n principalId\n principalType\n }\n appLoginExt {\n guid\n paramCode\n paramType\n file {\n publicUrl\n }\n }\n company {\n code\n guid\n isInternal\n name\n status\n }\n merchants {\n guid\n name\n status\n }\n roles {\n guid\n code\n name\n status\n isInternal\n }\n departments {\n isLead\n department {\n hierarchyCode\n hierarchyPath\n name\n guid\n status\n }\n }\n ${ extraAttr }\n }\n }\n `,\n });\n }\n}\n","import { Injectable, signal, WritableSignal } from '@angular/core';\nimport { Observable, tap } from 'rxjs';\nimport { GqlParser, MutationResult } from '@unipin/angular-gql';\nimport type { LoginResponse, LoginRq, MutationAuthMsRefreshAccessTokenArgs, Token } from '@unipin/graphql-schema';\nimport { User } from '../types/user.type';\nimport { ProfileService } from './profile.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AuthService {\n\n /**\n * Both `authToken` and `refreshToken` are public static variable to store the auth token and refresh token obtained form the login API.\n * They will be set as header param inside API calls.\n * @type {string}\n * \n * @default ''\n */\n public static authToken: string = '';\n public static refreshToken: string = '';\n\n /**\n * A public variable to store the logined user information.\n * @type {User} An interface contain user information.\n * @default {} as User\n */\n public user: WritableSignal<User> = signal({} as User);\n\n constructor(\n protected readonly gql: GqlParser,\n protected readonly profileService: ProfileService\n ) { }\n\n public static logout(): void{\n AuthService.authToken = '';\n AuthService.refreshToken = '';\n \n localStorage.removeItem('userGuid');\n localStorage.removeItem('authToken');\n localStorage.removeItem('refreshToken');\n }\n\n public logout(): void{\n this.user.set({} as User);\n AuthService.logout();\n }\n\n /**\n * This method is used by the `refreshTokenInterceptor`, to get the new token shortly before the auth token is expired.\n * @param {MutationAuthMsRefreshAccessTokenArgs} variables - Contain `refreshToken` attribute which is the current refresh token.\n * @returns {Observable<MutationResult<{ authMsRefreshAccessToken: Token }>>} Contain new `authToken` and `refreshToken`.\n */\n public refreshToken(variables: MutationAuthMsRefreshAccessTokenArgs): Observable<MutationResult<{ authMsRefreshAccessToken: Token }>>{\n return this.gql.mutate({\n variables,\n operationName: 'RefreshToken',\n headers: {\n 'operation-type': 'Mutation',\n 'operation-name': 'RefreshToken'\n },\n mutation: `\n mutation RefreshToken($refreshToken: String!) {\n authMsRefreshAccessToken(refreshToken: $refreshToken) {\n accessToken\n refreshToken\n }\n }\n `\n });\n } \n\n /**\n * A method to authenticate the user to get the session for applet or platform.\n * When successful it will set the user information to the `user` variable, `authToken` and `refreshToken`.\n * It will set the `authToken`, `refreshToken`, `userGuid` and `roles` to the localStorage also for API calls.\n * \n * @param {{ email: string, password: string, sourcePlatform: string }} input - Contain `email` which is registered user email, `password` which is registered user password and `sourcePlatform` it's value can be `ADMIN` to get the applet session or `CP_COMMERCE` to get the platform session.\n * \n * @returns {Observable<MutationResult<{ authMsLogin: LoginResponse }>>} Contain logined user information.\n */\n public login(input: LoginRq): Observable<MutationResult<{ authMsLogin: LoginResponse }>>{\n return this.gql.mutate<{ authMsLogin: LoginResponse }>({\n operationName: 'Login',\n variables: { \n input \n },\n mutation: `\n mutation Login($input: LoginRq!) {\n authMsLogin(input: $input) {\n accessToken\n refreshToken\n suggestedAction\n user {\n birthday\n category\n email\n gender\n guid\n mobileNumber\n name\n status\n departments {\n department {\n hierarchyCode\n hierarchyPath\n name\n guid\n status\n }\n isLead\n }\n }\n roles {\n guid\n code\n name\n isInternal\n status\n }\n }\n }\n `\n }).pipe(\n tap(({ data }) => {\n if (!data?.authMsLogin){\n return;\n }\n const { accessToken, user, refreshToken, suggestedAction, roles } = data.authMsLogin;\n\n this.user.set(\n {\n ...user as any,\n roles: roles as any,\n photo: '/assets/imgs/profile.svg'\n }\n );\n\n AuthService.authToken = accessToken ?? '';\n AuthService.refreshToken = refreshToken ?? '';\n\n if (suggestedAction !== 'CHANGE_PASSWORD') { \n localStorage.setItem('authToken', AuthService.authToken); \n }\n\n localStorage.setItem('userGuid', this.user().guid ?? '');\n localStorage.setItem('refreshToken', AuthService.refreshToken);\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { AuthService } from '../services/auth.service';\n\n/**\n * The `AuthResolver` service provides methods for handling authentication-related tasks,\n * such as checking user login status, retrieving authentication tokens, and managing token expiration.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class AuthResolver {\n\n /**\n * Checks if the user is logged in by verifying the presence of an authentication token.\n * @returns {boolean} - True if the user is logged in; otherwise, false.\n */\n public isUserLoggedIn(): boolean{ \n return AuthService.authToken !== ''; \n }\n\n /**\n * Retrieves the authentication token, resolving it if needed.\n * @returns {string | null} - The authentication token if the user is logged in; otherwise, null.\n */\n public getAuthToken(): string | null{\n this.resolveUserAuthToken();\n \n if (this.isUserLoggedIn()) {\n return AuthService.authToken;\n }\n return null;\n }\n\n /**\n * Resolves the user's authentication token by checking expiration and whether the user still logged in or not.\n */\n protected resolveUserAuthToken(): void{\n if (\n !this.isUserLoggedIn() || \n !this.isTokenExpired(AuthService.authToken)\n ) {\n return;\n }\n AuthService.logout();\n }\n\n /**\n * Checks if a given token is expired or not yet.\n * @param {string | null} token - The token to be checked for expiration.\n * @returns {boolean} - True if the token is expired; otherwise, false.\n */\n protected isTokenExpired(token: string | null): boolean{\n if (!token || token === '') {\n return true;\n }\n \n const date = this.getTokenExpirationDate(token);\n if (date === null) {\n return false;\n }\n return !(<number>date.valueOf() > new Date().valueOf() + 0 * 1000);\n }\n\n /**\n * Retrieves the expiration date of a token.\n * @param {string | null} token - The token for which to retrieve the expiration date.\n * @returns {Date | null} - The expiration date of the token if available; otherwise, null.\n */\n protected getTokenExpirationDate(token: string | null): Date | null{\n const decoded: any = this.decodeToken(token); \n if (!decoded || !decoded.hasOwnProperty('exp')) {\n return null;\n }\n \n const date = new Date(0);\n date.setUTCSeconds(decoded.exp);\n return date;\n }\n\n /**\n * Decodes a JWT token to extract payload information.\n * @param {string | null} token - The JWT token to be decoded.\n * @returns {string | null} - The decoded payload as a string if successful; otherwise, null.\n */\n protected decodeToken(token: string | null): string | null{\n if (!token || token === '') {\n return null;\n }\n\n const parts = token.split('.');\n if (parts.length !== 3) {\n throw new Error(`The inspected token doesn't appear to be a JWT. Check to make sure it has three parts and see https://jwt.io for more.`);\n }\n\n const decoded = this.urlBase64Decode(parts[1]);\n if (!decoded) {\n throw new Error('Cannot decode the token.');\n }\n return JSON.parse(decoded);\n }\n\n /**\n * Decodes a base64url-encoded string.\n * @param {string} str - The base64url-encoded string to be decoded.\n * @returns {string} - The decoded string.\n */\n protected urlBase64Decode(str: string): string{\n let output = str.replace(/-/g, '+').replace(/_/g, '/');\n switch (output.length % 4) {\n case 0:\n break;\n \n case 2: \n output += '==';\n break;\n\n case 3:\n output += '=';\n break;\n\n default: \n throw new Error('Illegal base64url string!');\n }\n return this.b64DecodeUnicode(output);\n }\n\n /**\n * Decodes a Unicode string from a base64-encoded string.\n * @param {string} str - The base64-encoded string to be decoded.\n * @returns {string} - The decoded Unicode string.\n */\n protected b64DecodeUnicode(str: string): string{\n return decodeURIComponent(\n Array.prototype.map.call(\n this.b64decode(str), \n (c: any) => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2)\n ).join('')\n );\n }\n\n /**\n * Decodes a base64-encoded string.\n * @param {string} str - The base64-encoded string to be decoded.\n * @returns {string} - The decoded string.\n */\n protected b64decode(str: string): string{\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n let output = '';\n\n str = String(str).replace(/=+$/, '');\n if (str.length % 4 === 1) {\n throw new Error(`'atob' failed: The string to be decoded is not correctly encoded.`);\n }\n\n for (\n let bc = 0, bs: any, buffer: any, idx = 0;\n (buffer = str.charAt(idx++));\n \n ~buffer && ((bs = bc % 4? bs * 64 + buffer : buffer), bc++ % 4)? (output += String.fromCharCode(255 & (bs >> ((-2 * bc) & 6)))) : 0\n ) buffer = chars.indexOf(buffer);\n\n return output;\n }\n}\n","import { inject } from '@angular/core';\nimport { CanActivateFn, Router } from '@angular/router';\nimport { AuthResolver } from '../resolvers/auth.resolver';\n\nexport const authGuard: CanActivateFn = (): boolean => {\n \n const router = inject(Router);\n const resolver = inject(AuthResolver);\n \n if (!resolver.isUserLoggedIn()) {\n router.navigateByUrl('/auth/login');\n return false;\n }\n return true;\n};\n","import { Injectable, signal } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { GqlParser, CacheStrategy, QueryResult } from '@unipin/angular-gql';\nimport type { AppPermDfn, PermissionFilter } from '@unipin/graphql-schema';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PermissionService {\n\n public readonly permissions = signal(new Map<string, boolean>());\n\n /**\n * A boolean value that tells the permission service is initiated (permissions list is retrieved from Backend) or not.\n * @default false\n */\n public isInitiated = false;\n\n constructor(\n protected readonly gql: GqlParser\n ) { }\n\n /**\n * A method that checking if the user has the permission or not based on the params value.\n * @param {string} permission - Permission code that wanted to be checked\n * \n * @returns {boolean} Contain boolean value that tells the user has the permission or not.\n */\n public has(permission: string): boolean{\n const permissions = this.permissions();\n const [ scope, module, type ] = permission.split('.');\n\n return (\n permissions.has(`${ scope }.${ module }.ADMIN`) ||\n permissions.has(`${ scope }.${ module }.${ type }`)\n );\n }\n\n /**\n * A method that set the permissions and permission modules.\n * @param {string[]} permCodes - Contain list of permission codes.\n */\n public setPermission(permCodes: string[]): void{\n this.permissions.update(\n (map) => {\n const newMap = new Map(map);\n \n for (const code of permCodes) {\n newMap.set(code, true);\n }\n return newMap;\n }\n );\n }\n\n /**\n * A method that get the query value with authMsPermission as the object.\n * @param {PermissionFilter} filter - Contain filter as a conditions for the query.\n * @returns {Observable<ApolloQueryResult<{ authMsPermission: { data: AppPermDfn[] }}>>} Contain query value.\n */\n public getPermissions(filter: PermissionFilter, cacheStrategy?: CacheStrategy): Observable<QueryResult<{ authMsPermission: { data: AppPermDfn[] }}>>{\n return this.gql.query({\n cacheStrategy,\n operationName: 'QueryPermission',\n variables: { \n filter \n },\n query: `\n query QueryPermission($filter: PermissionFilter!) {\n authMsPermission(filter: $filter) {\n data {\n permCode\n }\n }\n }\n `\n });\n }\n}\n","import { inject } from '@angular/core';\nimport { Location } from '@angular/common';\nimport { ActivatedRouteSnapshot, CanActivateFn, Router } from '@angular/router';\nimport { PermissionService } from '../services/permission.service';\n\nexport const permissionGuard: CanActivateFn = (route: ActivatedRouteSnapshot): boolean => {\n \n const router: Router = inject(Router);\n const location: Location = inject(Location);\n const permissionService: PermissionService = inject(PermissionService);\n\n const permissions: string[] = route.data['permissions'];\n const aggregator: 'AND' | 'OR' = route.data['aggregator']?? 'OR';\n\n if (\n !permissions ||\n !permissions.length\n ) {\n console.error('Invalid config: permissions is a required parameter in route data for PermissionGuard');\n return false;\n }\n\n if (!permissionService.isInitiated) {\n router.navigate(\n [ 'loading' ], \n { \n queryParams: { \n url: `${ location.path() + window.location.hash }` \n } \n }\n );\n return false;\n }\n \n if (aggregator === 'OR') {\n for (let i = 0; i < permissions.length; i++) {\n if (permissionService.has(permissions[i])) {\n return true;\n }\n }\n }\n\n let hasPermission = true;\n for (let i = 0; i < permissions.length; i++) {\n if (!permissionService.has(permissions[i])) {\n hasPermission = false;\n break;\n }\n }\n\n if (hasPermission) {\n return true;\n }\n router.navigateByUrl('/401');\n return false;\n};\n","import { HttpEvent, HttpHandlerFn, HttpInterceptorFn, HttpRequest } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { AuthService } from '../../authentication/services/auth.service';\n\nexport const authorizationInterceptor: HttpInterceptorFn = (\n request: HttpRequest<any>,\n next: HttpHandlerFn\n): Observable<HttpEvent<any>> => {\n \n return next(\n request.clone(\n {\n headers: request.headers,\n setHeaders: {\n authorization: AuthService.authToken,\n }\n }\n )\n );\n};\n","import { inject } from '@angular/core';\nimport { HttpEvent, HttpHandlerFn, HttpInterceptorFn, HttpRequest } from '@angular/common/http';\nimport { Router } from '@angular/router';\nimport { catchError, Observable, switchMap, tap, throwError } from 'rxjs';\nimport { AuthService } from '../services/auth.service';\n\n\nexport const refreshTokenInterceptor: HttpInterceptorFn = (\n request: HttpRequest<any>, \n next: HttpHandlerFn\n): Observable<HttpEvent<any>> => {\n \n const router = inject(Router);\n const authService = inject(AuthService);\n\n return next(request).pipe(\n tap(\n ({ type, body }: any) => {\n if (\n type === 0 ||\n !body\n ) {\n return;\n }\n \n const { errors } = body;\n if (\n !errors ||\n !errors.length ||\n errors[0].extensions.code !== 'USER_INVALID_TOKEN'\n ) {\n return;\n }\n throw body;\n }\n ),\n catchError(\n (error: any) => {\n const { errors } = error;\n if (\n !errors || \n !errors.length\n ) {\n return throwError(() => error);\n }\n \n if (\n (\n errors[0].message &&\n errors[0].extensions.code !== 'USER_INVALID_TOKEN'\n ) ||\n request.url.includes('RefreshToken')\n ) {\n return throwError(() => errors[0]);\n }\n \n return authService.refreshToken({ refreshToken: AuthService.refreshToken }).pipe(\n switchMap(\n ({ data }) => {\n const { accessToken, refreshToken } = data!.authMsRefreshAccessToken;\n\n AuthService.authToken = accessToken!;\n AuthService.refreshToken = refreshToken!;\n\n localStorage.setItem('authToken', accessToken!);\n localStorage.setItem('refreshToken', refreshToken!);\n\n return next(\n request.clone(\n {\n setHeaders: {\n authorization: accessToken!,\n },\n }\n )\n );\n }\n ),\n catchError(\n () => {\n authService.logout();\n location.href = `/auth/login?url=${ encodeURIComponent(router.url + location.hash) }`;\n return throwError(() => errors[0]);\n }\n )\n );\n }\n )\n );\n};\n","import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { PermissionService } from '../services/permission.service';\n\n\n/**\n * The `PermissionDirective` is a directive that conditionally renders content based on user permissions.\n * @selector '[hasPermission]'\n * \n * @example\n * ```html\n * <div *hasPermission=\"'MERCHANT.CONTRACT.READ'\"></div>\n * ```\n */\n@Directive({\n exportAs: 'hasPermission',\n selector: '[hasPermission]'\n})\nexport class PermissionDirective {\n\n constructor(\n protected readonly service: PermissionService,\n protected readonly templateRef: TemplateRef<any>,\n protected readonly viewContainer: ViewContainerRef,\n ) { }\n\n @Input()\n set hasPermission(permission: string) {\n if (this.service.has(permission)) {\n this.viewContainer.createEmbeddedView(\n this.templateRef\n );\n return;\n }\n this.viewContainer.clear();\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { NgIcon, provideIcons } from '@ng-icons/core';\nimport { matLockRound } from '@ng-icons/material-icons/round';\n\n\n@Component({\n selector: 'up-unauthorized',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'flex flex-col items-center justify-center size-full gap-4 p-5 select-none'\n },\n providers: [\n provideIcons(\n { \n matLockRound \n }\n )\n ],\n imports: [\n NgIcon\n ],\n template: `\n <ng-icon \n name=\"matLockRound\" \n class=\"text-3xl lg:text-5xl\" \n />\n \n <h3 class=\"text-center text-lg lg:text-2xl font-bold\">\n Oops! You're not authorized to access this page.\n </h3>\n <p class=\"text-center\">Please log in or re-check your permissions.</p>\n `,\n})\nexport class UnauthorizedPage {}\n","import { ChangeDetectionStrategy, Component, Inject, OnDestroy, OnInit } from '@angular/core';\nimport { Router, ActivatedRoute } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { UpSpinnerComponent } from '@unipin/angular-applet/spinner';\nimport { LOADING_CONFIG, LoadingConfig } from '../utils/provide-loading-config.util';\nimport { PermissionService } from '../services/permission.service';\n\n\n@Component({\n selector: 'up-loading',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'flex flex-col items-center gap-6 p-5 justify-center size-full select-none'\n },\n imports: [\n UpSpinnerComponent\n ],\n template: `\n <up-spinner class=\"size-10\" />\n \n <h3 class=\"text-center text-lg lg:text-2xl font-bold\">\n Please wait, we're preparing the applet. Drink water or coffee while waiting.\n </h3>\n `,\n})\nexport class LoadingPage implements OnInit, OnDestroy {\n\n protected sub?: Subscription;\n\n constructor(\n @Inject(LOADING_CONFIG) public readonly config: LoadingConfig,\n protected readonly router: Router,\n protected readonly route: ActivatedRoute,\n protected readonly permissionService: PermissionService\n ) { }\n\n public ngOnInit(): void{\n const subjectGuid = localStorage.getItem(this.config.subjectGuidStorageKey || 'userGuid');\n if (!subjectGuid) {\n this.router.navigate([ '401' ]);\n return;\n }\n\n const permCodeList: string[] = [];\n this.sub = this.permissionService.getPermissions(\n { \n subjectGuid, \n pageSize: 1000,\n permType: this.config.permTypes,\n permModule: this.config.permModules, \n }, \n 'no-cache'\n ).subscribe({\n error: () => {\n this.router.navigate([ '401' ]);\n },\n next: ({ data: { authMsPermission: { data }}}) => {\n data.forEach(\n ({ permCode }) => {\n if (!permCode) {\n return;\n }\n permCodeList.push(permCode);\n }\n );\n\n this.permissionService.isInitiated = true;\n this.permissionService.setPermission(permCodeList);\n this.router.navigateByUrl(this.route.snapshot.queryParamMap.get('url')?? '');\n }\n });\n }\n\n public ngOnDestroy(): void{\n this.sub?.unsubscribe();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.ProfileService","i1.PermissionService","i1","i2.PermissionService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"unipin-angular-applet-auth.mjs","sources":["../../../projects/unipin-angular/auth/authorization/utils/provide-loading-config.util.ts","../../../projects/unipin-angular/auth/authentication/services/profile.service.ts","../../../projects/unipin-angular/auth/authentication/services/auth.service.ts","../../../projects/unipin-angular/auth/authentication/resolvers/auth.resolver.ts","../../../projects/unipin-angular/auth/authentication/guards/auth.guard.ts","../../../projects/unipin-angular/auth/authorization/services/permission.service.ts","../../../projects/unipin-angular/auth/authorization/guards/permission.guard.ts","../../../projects/unipin-angular/auth/authorization/interceptors/authorization.interceptor.ts","../../../projects/unipin-angular/auth/authentication/interceptors/refresh-token.interceptor.ts","../../../projects/unipin-angular/auth/authorization/directives/permission.directive.ts","../../../projects/unipin-angular/auth/authorization/pages/unauthorized.page.ts","../../../projects/unipin-angular/auth/authorization/pages/loading.page.ts","../../../projects/unipin-angular/auth/unipin-angular-applet-auth.ts"],"sourcesContent":["import { InjectionToken, Provider } from '@angular/core';\n\nexport const LOADING_CONFIG = new InjectionToken<LoadingConfig>('LOADING_CONFIG');\n\nexport type LoadingConfig = {\n permTypes: string[];\n permModules: string[];\n subjectGuidStorageKey?: string;\n}\n\nexport function provideLoadingConfig(config: LoadingConfig): Provider{\n return {\n provide: LOADING_CONFIG,\n useValue: config\n };\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { GqlParser, CacheStrategy, QueryResult } from '@unipin/angular-gql';\nimport type { AppLoginSubject, Maybe } from '@unipin/graphql-schema';\nimport { User } from '../types/user.type';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ProfileService {\n\n constructor(\n protected readonly gql: GqlParser\n ) { }\n\n public transformSubjetToUser(subject: AppLoginSubject): User{\n const user: User = { \n ...subject,\n email: '',\n photo: '/assets/imgs/profile.svg'\n };\n\n subject.appLoginExt?.forEach(\n ({ paramCode, file: { publicUrl }}: any) => {\n if (paramCode === 'USER_PROFILE_PHOTO') {\n user.photo = publicUrl;\n }\n }\n ); \n\n subject.appLoginPrincipal?.forEach(\n ({ principalId, principalType }: any) => {\n if (principalType === 'EMAIL_USERNAME') {\n user.email = principalId;\n }\n }\n );\n return user;\n }\n\n /**\n * A method to get the user profile information.\n * @param {string} extraAttr - Contain extra attribute to get the user profile information.\n * @param {CacheStrategy | undefined} cacheStrategy - Specifies how Apollo Client should handle data retrieval, determining whether it should make a network request to fetch fresh data from the server or use data from the local cache.\n * \n * @returns {Observable<QueryResult<{ authMsMyProfile: Maybe<AppLoginSubject> }>>} Contain user profile information.\n */\n public getMyProfile(extraAttr = '', cacheStrategy?: CacheStrategy): Observable<QueryResult<{ authMsMyProfile: Maybe<AppLoginSubject> }>>{\n return this.gql.query({\n cacheStrategy,\n operationName: 'getMyProfile',\n query: `\n query getMyProfile {\n authMsMyProfile {\n guid\n name\n status\n gender\n birthday\n category\n totpSecretGuid\n appLoginPrincipal {\n guid\n principalId\n principalType\n }\n appLoginExt {\n guid\n paramCode\n paramType\n file {\n publicUrl\n }\n }\n company {\n code\n guid\n isInternal\n name\n status\n }\n merchants {\n guid\n name\n status\n }\n roles {\n guid\n code\n name\n status\n isInternal\n }\n departments {\n isLead\n department {\n hierarchyCode\n hierarchyPath\n name\n guid\n status\n }\n }\n ${ extraAttr }\n }\n }\n `,\n });\n }\n}\n","import { Injectable, signal, WritableSignal } from '@angular/core';\nimport { Observable, tap } from 'rxjs';\nimport { GqlParser, MutationResult } from '@unipin/angular-gql';\nimport type { LoginResponse, LoginRq, MutationAuthMsRefreshAccessTokenArgs, Token } from '@unipin/graphql-schema';\nimport { User } from '../types/user.type';\nimport { ProfileService } from './profile.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AuthService {\n\n /**\n * Both `authToken` and `refreshToken` are public static variable to store the auth token and refresh token obtained form the login API.\n * They will be set as header param inside API calls.\n * @type {string}\n * \n * @default ''\n */\n public static authToken: string = '';\n public static refreshToken: string = '';\n\n /**\n * A public variable to store the logined user information.\n * @type {User} An interface contain user information.\n * @default {} as User\n */\n public user: WritableSignal<User> = signal({} as User);\n\n constructor(\n protected readonly gql: GqlParser,\n protected readonly profileService: ProfileService\n ) { }\n\n public static logout(): void{\n AuthService.authToken = '';\n AuthService.refreshToken = '';\n \n localStorage.removeItem('userGuid');\n localStorage.removeItem('authToken');\n localStorage.removeItem('refreshToken');\n }\n\n public logout(): void{\n this.user.set({} as User);\n AuthService.logout();\n }\n\n /**\n * This method is used by the `refreshTokenInterceptor`, to get the new token shortly before the auth token is expired.\n * @param {MutationAuthMsRefreshAccessTokenArgs} variables - Contain `refreshToken` attribute which is the current refresh token.\n * @returns {Observable<MutationResult<{ authMsRefreshAccessToken: Token }>>} Contain new `authToken` and `refreshToken`.\n */\n public refreshToken(variables: MutationAuthMsRefreshAccessTokenArgs): Observable<MutationResult<{ authMsRefreshAccessToken: Token }>>{\n return this.gql.mutate({\n variables,\n operationName: 'RefreshToken',\n headers: {\n 'operation-type': 'Mutation',\n 'operation-name': 'RefreshToken'\n },\n mutation: `\n mutation RefreshToken($refreshToken: String!) {\n authMsRefreshAccessToken(refreshToken: $refreshToken) {\n accessToken\n refreshToken\n }\n }\n `\n });\n } \n\n /**\n * A method to authenticate the user to get the session for applet or platform.\n * When successful it will set the user information to the `user` variable, `authToken` and `refreshToken`.\n * It will set the `authToken`, `refreshToken`, `userGuid` and `roles` to the localStorage also for API calls.\n * \n * @param {{ email: string, password: string, sourcePlatform: string }} input - Contain `email` which is registered user email, `password` which is registered user password and `sourcePlatform` it's value can be `ADMIN` to get the applet session or `CP_COMMERCE` to get the platform session.\n * \n * @returns {Observable<MutationResult<{ authMsLogin: LoginResponse }>>} Contain logined user information.\n */\n public login(input: LoginRq): Observable<MutationResult<{ authMsLogin: LoginResponse }>>{\n return this.gql.mutate<{ authMsLogin: LoginResponse }>({\n operationName: 'Login',\n variables: { \n input \n },\n mutation: `\n mutation Login($input: LoginRq!) {\n authMsLogin(input: $input) {\n accessToken\n refreshToken\n suggestedAction\n user {\n birthday\n category\n email\n gender\n guid\n mobileNumber\n name\n status\n departments {\n department {\n hierarchyCode\n hierarchyPath\n name\n guid\n status\n }\n isLead\n }\n }\n roles {\n guid\n code\n name\n isInternal\n status\n }\n }\n }\n `\n }).pipe(\n tap(({ data }) => {\n if (!data?.authMsLogin){\n return;\n }\n const { accessToken, user, refreshToken, suggestedAction, roles } = data.authMsLogin;\n\n this.user.set(\n {\n ...user as any,\n roles: roles as any,\n photo: '/assets/imgs/profile.svg'\n }\n );\n\n AuthService.authToken = accessToken ?? '';\n AuthService.refreshToken = refreshToken ?? '';\n\n if (suggestedAction !== 'CHANGE_PASSWORD') { \n localStorage.setItem('authToken', AuthService.authToken); \n }\n\n localStorage.setItem('userGuid', this.user().guid ?? '');\n localStorage.setItem('refreshToken', AuthService.refreshToken);\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { AuthService } from '../services/auth.service';\n\n\n/**\n * The `AuthResolver` service provides methods for handling authentication-related tasks,\n * such as checking user login status, retrieving authentication tokens, and managing token expiration.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class AuthResolver {\n\n /**\n * Checks if the user is logged in by verifying the presence of an authentication token.\n * @returns {boolean} - True if the user is logged in; otherwise, false.\n */\n public isUserLoggedIn(): boolean{ \n return AuthService.authToken !== ''; \n }\n\n /**\n * Retrieves the authentication token, resolving it if needed.\n * @returns {string | null} - The authentication token if the user is logged in; otherwise, null.\n */\n public getAuthToken(): string | null{\n this.resolveUserAuthToken();\n \n if (this.isUserLoggedIn()) {\n return AuthService.authToken;\n }\n return null;\n }\n\n /**\n * Resolves the user's authentication token by checking expiration and whether the user still logged in or not.\n */\n protected resolveUserAuthToken(): void{\n if (\n !this.isUserLoggedIn() || \n !this.isTokenExpired(AuthService.authToken)\n ) {\n return;\n }\n AuthService.logout();\n }\n\n /**\n * Checks if a given token is expired or not yet.\n * @param {string | null} token - The token to be checked for expiration.\n * @returns {boolean} - True if the token is expired; otherwise, false.\n */\n protected isTokenExpired(token: string | null): boolean{\n if (!token || token === '') {\n return true;\n }\n \n const date = this.getTokenExpirationDate(token);\n if (date === null) {\n return false;\n }\n return date.valueOf() <= Date.now() + 0 * 1000;\n }\n\n /**\n * Retrieves the expiration date of a token.\n * @param {string | null} token - The token for which to retrieve the expiration date.\n * @returns {Date | null} - The expiration date of the token if available; otherwise, null.\n */\n protected getTokenExpirationDate(token: string | null): Date | null{\n const decoded: any = this.decodeToken(token); \n if (!decoded?.hasOwnProperty('exp')) {\n return null;\n }\n \n const date = new Date(0);\n date.setUTCSeconds(decoded.exp);\n return date;\n }\n\n /**\n * Decodes a JWT token to extract payload information.\n * @param {string | null} token - The JWT token to be decoded.\n * @returns {string | null} - The decoded payload as a string if successful; otherwise, null.\n */\n protected decodeToken(token: string | null): string | null{\n if (!token || token === '') {\n return null;\n }\n\n const parts = token.split('.');\n if (parts.length !== 3) {\n throw new Error(`The inspected token doesn't appear to be a JWT. Check to make sure it has three parts and see https://jwt.io for more.`);\n }\n\n const decoded = this.urlBase64Decode(parts[1]);\n if (!decoded) {\n throw new Error('Cannot decode the token.');\n }\n return JSON.parse(decoded);\n }\n\n /**\n * Decodes a base64url-encoded string.\n * @param {string} str - The base64url-encoded string to be decoded.\n * @returns {string} - The decoded string.\n */\n protected urlBase64Decode(str: string): string{\n let output = str.replaceAll('-', '+').replaceAll('_', '/');\n switch (output.length % 4) {\n case 0:\n break;\n \n case 2: \n output += '==';\n break;\n\n case 3:\n output += '=';\n break;\n\n default: \n throw new Error('Illegal base64url string!');\n }\n return this.b64DecodeUnicode(output);\n }\n\n /**\n * Decodes a Unicode string from a base64-encoded string.\n * @param {string} str - The base64-encoded string to be decoded.\n * @returns {string} - The decoded Unicode string.\n */\n protected b64DecodeUnicode(str: string): string{\n return decodeURIComponent(\n Array.prototype.map.call(\n this.b64decode(str), \n (c: any) => '%' + ('00' + (c.codePointAt(0) ?? 0).toString(16)).slice(-2)\n ).join('')\n );\n }\n\n /**\n * Decodes a base64-encoded string.\n * @param {string} str - The base64-encoded string to be decoded.\n * @returns {string} - The decoded string.\n */\n protected b64decode(str: string): string{\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n let output = '';\n\n while (\n str.length > 0 && \n str.at(-1) === '='\n ) {\n str = str.slice(0, -1);\n }\n \n if (str.length % 4 === 1) {\n throw new Error(`'atob' failed: The string to be decoded is not correctly encoded.`);\n }\n\n let bc = 0, bs: any, buffer: any, idx = 0;\n\n while (true) {\n buffer = str.charAt(idx++);\n \n if (!buffer) {\n break;\n }\n \n buffer = chars.indexOf(buffer);\n \n if (~buffer) {\n bs = bc % 4? bs * 64 + buffer : buffer;\n \n if (bc++ % 4) {\n output += String.fromCodePoint(255 & (bs >> ((-2 * bc) & 6)));\n }\n }\n }\n return output;\n }\n}\n","import { inject } from '@angular/core';\nimport { CanActivateFn, Router } from '@angular/router';\nimport { AuthResolver } from '../resolvers/auth.resolver';\n\nexport const authGuard: CanActivateFn = (): boolean => {\n \n const router = inject(Router);\n const resolver = inject(AuthResolver);\n \n if (!resolver.isUserLoggedIn()) {\n router.navigateByUrl('/auth/login');\n return false;\n }\n return true;\n};\n","import { Injectable, signal } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { GqlParser, CacheStrategy, QueryResult } from '@unipin/angular-gql';\nimport type { AppPermDfn, PermissionFilter } from '@unipin/graphql-schema';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PermissionService {\n\n public readonly permissions = signal(new Map<string, boolean>());\n\n /**\n * A boolean value that tells the permission service is initiated (permissions list is retrieved from Backend) or not.\n * @default false\n */\n public isInitiated = false;\n\n constructor(\n protected readonly gql: GqlParser\n ) { }\n\n /**\n * A method that checking if the user has the permission or not based on the params value.\n * @param {string} permission - Permission code that wanted to be checked\n * \n * @returns {boolean} Contain boolean value that tells the user has the permission or not.\n */\n public has(permission: string): boolean{\n const permissions = this.permissions();\n const [ scope, module, type ] = permission.split('.');\n\n return (\n permissions.has(`${ scope }.${ module }.ADMIN`) ||\n permissions.has(`${ scope }.${ module }.${ type }`)\n );\n }\n\n /**\n * A method that set the permissions and permission modules.\n * @param {string[]} permCodes - Contain list of permission codes.\n */\n public setPermission(permCodes: string[]): void{\n this.permissions.update(\n (map) => {\n const newMap = new Map(map);\n \n for (const code of permCodes) {\n newMap.set(code, true);\n }\n return newMap;\n }\n );\n }\n\n /**\n * A method that get the query value with authMsPermission as the object.\n * @param {PermissionFilter} filter - Contain filter as a conditions for the query.\n * @returns {Observable<ApolloQueryResult<{ authMsPermission: { data: AppPermDfn[] }}>>} Contain query value.\n */\n public getPermissions(filter: PermissionFilter, cacheStrategy?: CacheStrategy): Observable<QueryResult<{ authMsPermission: { data: AppPermDfn[] }}>>{\n return this.gql.query({\n cacheStrategy,\n operationName: 'QueryPermission',\n variables: { \n filter \n },\n query: `\n query QueryPermission($filter: PermissionFilter!) {\n authMsPermission(filter: $filter) {\n data {\n permCode\n }\n }\n }\n `\n });\n }\n}\n","import { inject } from '@angular/core';\nimport { Location } from '@angular/common';\nimport { ActivatedRouteSnapshot, CanActivateFn, Router } from '@angular/router';\nimport { PermissionService } from '../services/permission.service';\n\nexport const permissionGuard: CanActivateFn = (route: ActivatedRouteSnapshot): boolean => {\n \n const router: Router = inject(Router);\n const location: Location = inject(Location);\n const permissionService: PermissionService = inject(PermissionService);\n\n const permissions: string[] = route.data['permissions'];\n const aggregator: 'AND' | 'OR' = route.data['aggregator']?? 'OR';\n\n if (!permissions?.length) {\n console.error('Invalid config: permissions is a required parameter in route data for PermissionGuard');\n return false;\n }\n\n if (!permissionService.isInitiated) {\n router.navigate(\n [ 'loading' ], \n { \n queryParams: { \n url: `${ location.path() + globalThis.location.hash }` \n } \n }\n );\n return false;\n }\n \n if (aggregator === 'OR') {\n for (const permission of permissions) {\n if (permissionService.has(permission)) {\n return true;\n }\n }\n }\n\n let hasPermission = true;\n for (const permission of permissions) {\n if (!permissionService.has(permission)) {\n hasPermission = false;\n break;\n }\n }\n\n if (hasPermission) {\n return true;\n }\n router.navigateByUrl('/401');\n return false;\n};\n","import { HttpEvent, HttpHandlerFn, HttpInterceptorFn, HttpRequest } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { AuthService } from '../../authentication/services/auth.service';\n\nexport const authorizationInterceptor: HttpInterceptorFn = (\n request: HttpRequest<any>,\n next: HttpHandlerFn\n): Observable<HttpEvent<any>> => {\n \n return next(\n request.clone(\n {\n headers: request.headers,\n setHeaders: {\n authorization: AuthService.authToken,\n }\n }\n )\n );\n};\n","import { inject } from '@angular/core';\nimport { HttpEvent, HttpHandlerFn, HttpInterceptorFn, HttpRequest } from '@angular/common/http';\nimport { Router } from '@angular/router';\nimport { catchError, Observable, switchMap, tap, throwError } from 'rxjs';\nimport { AuthService } from '../services/auth.service';\n\n\nexport const refreshTokenInterceptor: HttpInterceptorFn = (\n request: HttpRequest<any>, \n next: HttpHandlerFn\n): Observable<HttpEvent<any>> => {\n \n const router = inject(Router);\n const authService = inject(AuthService);\n\n return next(request).pipe(\n tap(\n ({ type, body }: any) => {\n if (\n type === 0 ||\n !body\n ) {\n return;\n }\n \n const { errors } = body;\n if (\n !errors?.length ||\n errors[0].extensions.code !== 'USER_INVALID_TOKEN'\n ) {\n return;\n }\n throw body;\n }\n ),\n catchError(\n (error: any) => {\n const { errors } = error;\n if (!errors?.length) {\n return throwError(() => error);\n }\n \n if (\n (\n errors[0].message &&\n errors[0].extensions.code !== 'USER_INVALID_TOKEN'\n ) ||\n request.url.includes('RefreshToken')\n ) {\n return throwError(() => errors[0]);\n }\n \n return authService.refreshToken({ refreshToken: AuthService.refreshToken }).pipe(\n switchMap(\n ({ data }) => {\n const { accessToken, refreshToken } = data.authMsRefreshAccessToken;\n\n AuthService.authToken = accessToken!;\n AuthService.refreshToken = refreshToken!;\n\n localStorage.setItem('authToken', accessToken!);\n localStorage.setItem('refreshToken', refreshToken!);\n\n return next(\n request.clone(\n {\n setHeaders: {\n authorization: accessToken!,\n },\n }\n )\n );\n }\n ),\n catchError(\n () => {\n authService.logout();\n location.href = `/auth/login?url=${ encodeURIComponent(router.url + location.hash) }`;\n return throwError(() => errors[0]);\n }\n )\n );\n }\n )\n );\n};\n","import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { PermissionService } from '../services/permission.service';\n\n\n/**\n * The `PermissionDirective` is a directive that conditionally renders content based on user permissions.\n * @selector '[hasPermission]'\n * \n * @example\n * ```html\n * <div *hasPermission=\"'MERCHANT.CONTRACT.READ'\"></div>\n * ```\n */\n@Directive({\n exportAs: 'hasPermission',\n selector: '[hasPermission]'\n})\nexport class PermissionDirective {\n\n constructor(\n protected readonly service: PermissionService,\n protected readonly templateRef: TemplateRef<any>,\n protected readonly viewContainer: ViewContainerRef,\n ) { }\n\n @Input()\n set hasPermission(permission: string) {\n if (this.service.has(permission)) {\n this.viewContainer.createEmbeddedView(\n this.templateRef\n );\n return;\n }\n this.viewContainer.clear();\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { NgIcon, provideIcons } from '@ng-icons/core';\nimport { matLockRound } from '@ng-icons/material-icons/round';\n\n\n@Component({\n selector: 'up-unauthorized',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'flex flex-col items-center justify-center size-full gap-4 p-5 select-none'\n },\n providers: [\n provideIcons(\n { \n matLockRound \n }\n )\n ],\n imports: [\n NgIcon\n ],\n template: `\n <ng-icon \n name=\"matLockRound\" \n class=\"text-3xl lg:text-5xl\" \n />\n \n <h3 class=\"text-center text-lg lg:text-2xl font-bold\">\n Oops! You're not authorized to access this page.\n </h3>\n <p class=\"text-center\">Please log in or re-check your permissions.</p>\n `,\n})\nexport class UnauthorizedPage {}\n","import { ChangeDetectionStrategy, Component, Inject, OnDestroy, OnInit } from '@angular/core';\nimport { Router, ActivatedRoute } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { UpSpinnerComponent } from '@unipin/angular-applet/spinner';\nimport { LOADING_CONFIG, LoadingConfig } from '../utils/provide-loading-config.util';\nimport { PermissionService } from '../services/permission.service';\n\n\n@Component({\n selector: 'up-loading',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'flex flex-col items-center gap-6 p-5 justify-center size-full select-none'\n },\n imports: [\n UpSpinnerComponent\n ],\n template: `\n <up-spinner class=\"size-10\" />\n \n <h3 class=\"text-center text-lg lg:text-2xl font-bold\">\n Please wait, we're preparing the applet. Drink water or coffee while waiting.\n </h3>\n `,\n})\nexport class LoadingPage implements OnInit, OnDestroy {\n\n protected sub?: Subscription;\n\n constructor(\n @Inject(LOADING_CONFIG) public readonly config: LoadingConfig,\n protected readonly router: Router,\n protected readonly route: ActivatedRoute,\n protected readonly permissionService: PermissionService\n ) { }\n\n public ngOnInit(): void{\n const subjectGuid = localStorage.getItem(this.config.subjectGuidStorageKey || 'userGuid');\n if (!subjectGuid) {\n this.router.navigate([ '401' ]);\n return;\n }\n\n const permCodeList: string[] = [];\n this.sub = this.permissionService.getPermissions(\n { \n subjectGuid, \n pageSize: 1000,\n permType: this.config.permTypes,\n permModule: this.config.permModules, \n }, \n 'no-cache'\n ).subscribe({\n error: () => {\n this.router.navigate([ '401' ]);\n },\n next: ({ data: { authMsPermission: { data }}}) => {\n data.forEach(\n ({ permCode }) => {\n if (!permCode) {\n return;\n }\n permCodeList.push(permCode);\n }\n );\n\n this.permissionService.isInitiated = true;\n this.permissionService.setPermission(permCodeList);\n this.router.navigateByUrl(this.route.snapshot.queryParamMap.get('url')?? '');\n }\n });\n }\n\n public ngOnDestroy(): void{\n this.sub?.unsubscribe();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.ProfileService","i1.PermissionService","i1","i2.PermissionService"],"mappings":";;;;;;;;;;;AAEO,MAAM,cAAc,GAAG,IAAI,cAAc,CAAgB,gBAAgB,CAAC;AAQ3E,SAAU,oBAAoB,CAAC,MAAqB,EAAA;IACxD,OAAO;AACL,QAAA,OAAO,EAAE,cAAc;AACvB,QAAA,QAAQ,EAAE;KACX;AACH;;MCNa,cAAc,CAAA;AAEzB,IAAA,WAAA,CACqB,GAAc,EAAA;QAAd,IAAA,CAAA,GAAG,GAAH,GAAG;IACpB;AAEG,IAAA,qBAAqB,CAAC,OAAwB,EAAA;AACnD,QAAA,MAAM,IAAI,GAAS;AACjB,YAAA,GAAG,OAAO;AACV,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,KAAK,EAAE;SACR;AAED,QAAA,OAAO,CAAC,WAAW,EAAE,OAAO,CAC1B,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,EAAM,KAAI;AACzC,YAAA,IAAI,SAAS,KAAK,oBAAoB,EAAE;AACtC,gBAAA,IAAI,CAAC,KAAK,GAAG,SAAS;YACxB;AACF,QAAA,CAAC,CACF;AAED,QAAA,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAChC,CAAC,EAAE,WAAW,EAAE,aAAa,EAAO,KAAI;AACtC,YAAA,IAAI,aAAa,KAAK,gBAAgB,EAAE;AACtC,gBAAA,IAAI,CAAC,KAAK,GAAG,WAAW;YAC1B;AACF,QAAA,CAAC,CACF;AACD,QAAA,OAAO,IAAI;IACb;AAEA;;;;;;AAMG;AACI,IAAA,YAAY,CAAC,SAAS,GAAG,EAAE,EAAE,aAA6B,EAAA;AAC/D,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YACpB,aAAa;AACb,YAAA,aAAa,EAAE,cAAc;AAC7B,YAAA,KAAK,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAoDE,SAAU;;;AAGlB,MAAA,CAAA;AACF,SAAA,CAAC;IACJ;+GAnGW,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAd,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,cAAc,cAFb,MAAM,EAAA,CAAA,CAAA;;4FAEP,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCEY,WAAW,CAAA;AAEtB;;;;;;AAMG;aACW,IAAA,CAAA,SAAS,GAAW,EAAX,CAAc;aACvB,IAAA,CAAA,YAAY,GAAW,EAAX,CAAc;IASxC,WAAA,CACqB,GAAc,EACd,cAA8B,EAAA;QAD9B,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,cAAc,GAAd,cAAc;AATnC;;;;AAIG;AACI,QAAA,IAAA,CAAA,IAAI,GAAyB,MAAM,CAAC,EAAU,2EAAC;IAKlD;AAEG,IAAA,OAAO,MAAM,GAAA;AAClB,QAAA,WAAW,CAAC,SAAS,GAAG,EAAE;AAC1B,QAAA,WAAW,CAAC,YAAY,GAAG,EAAE;AAE7B,QAAA,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC;AACnC,QAAA,YAAY,CAAC,UAAU,CAAC,WAAW,CAAC;AACpC,QAAA,YAAY,CAAC,UAAU,CAAC,cAAc,CAAC;IACzC;IAEO,MAAM,GAAA;AACX,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAU,CAAC;QACzB,WAAW,CAAC,MAAM,EAAE;IACtB;AAEA;;;;AAIG;AACI,IAAA,YAAY,CAAC,SAA+C,EAAA;AACjE,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;YACrB,SAAS;AACT,YAAA,aAAa,EAAE,cAAc;AAC7B,YAAA,OAAO,EAAE;AACP,gBAAA,gBAAgB,EAAE,UAAU;AAC5B,gBAAA,gBAAgB,EAAE;AACnB,aAAA;AACD,YAAA,QAAQ,EAAE;;;;;;;AAOT,MAAA;AACF,SAAA,CAAC;IACJ;AAEA;;;;;;;;AAQG;AACI,IAAA,KAAK,CAAC,KAAc,EAAA;AACzB,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAiC;AACrD,YAAA,aAAa,EAAE,OAAO;AACtB,YAAA,SAAS,EAAE;gBACT;AACD,aAAA;AACD,YAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCT,MAAA;SACF,CAAC,CAAC,IAAI,CACL,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAI;AACf,YAAA,IAAI,CAAC,IAAI,EAAE,WAAW,EAAC;gBACrB;YACF;AACA,YAAA,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,eAAe,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,WAAW;AAEpF,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CACX;AACE,gBAAA,GAAG,IAAW;AACd,gBAAA,KAAK,EAAE,KAAY;AACnB,gBAAA,KAAK,EAAE;AACR,aAAA,CACF;AAED,YAAA,WAAW,CAAC,SAAS,GAAG,WAAW,IAAI,EAAE;AACzC,YAAA,WAAW,CAAC,YAAY,GAAG,YAAY,IAAI,EAAE;AAE7C,YAAA,IAAI,eAAe,KAAK,iBAAiB,EAAE;gBACzC,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC,SAAS,CAAC;YAC1D;AAEA,YAAA,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;YACxD,YAAY,CAAC,OAAO,CAAC,cAAc,EAAE,WAAW,CAAC,YAAY,CAAC;QAChE,CAAC,CAAC,CACH;IACH;+GA3IW,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAX,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,WAAW,cAFV,MAAM,EAAA,CAAA,CAAA;;4FAEP,WAAW,EAAA,UAAA,EAAA,CAAA;kBAHvB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACLD;;;AAGG;MAIU,YAAY,CAAA;AAEvB;;;AAGG;IACI,cAAc,GAAA;AACnB,QAAA,OAAO,WAAW,CAAC,SAAS,KAAK,EAAE;IACrC;AAEA;;;AAGG;IACI,YAAY,GAAA;QACjB,IAAI,CAAC,oBAAoB,EAAE;AAE3B,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;YACzB,OAAO,WAAW,CAAC,SAAS;QAC9B;AACA,QAAA,OAAO,IAAI;IACb;AAEA;;AAEG;IACO,oBAAoB,GAAA;AAC5B,QAAA,IACE,CAAC,IAAI,CAAC,cAAc,EAAE;YACtB,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,CAAC,EAC3C;YACA;QACF;QACA,WAAW,CAAC,MAAM,EAAE;IACtB;AAEA;;;;AAIG;AACO,IAAA,cAAc,CAAC,KAAoB,EAAA;AAC3C,QAAA,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,EAAE,EAAE;AAC1B,YAAA,OAAO,IAAI;QACb;QAEA,MAAM,IAAI,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;AAC/C,QAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACjB,YAAA,OAAO,KAAK;QACd;AACA,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI;IAChD;AAEA;;;;AAIG;AACO,IAAA,sBAAsB,CAAC,KAAoB,EAAA;QACnD,MAAM,OAAO,GAAQ,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;QAC5C,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE;AACnC,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC;AAC/B,QAAA,OAAO,IAAI;IACb;AAEA;;;;AAIG;AACO,IAAA,WAAW,CAAC,KAAoB,EAAA;AACxC,QAAA,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,EAAE,EAAE;AAC1B,YAAA,OAAO,IAAI;QACb;QAEA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;AAC9B,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,sHAAA,CAAwH,CAAC;QAC3I;QAEA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC;QAC7C;AACA,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;IAC5B;AAEA;;;;AAIG;AACO,IAAA,eAAe,CAAC,GAAW,EAAA;AACnC,QAAA,IAAI,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC;AAC1D,QAAA,QAAQ,MAAM,CAAC,MAAM,GAAG,CAAC;AACvB,YAAA,KAAK,CAAC;gBACJ;AAEF,YAAA,KAAK,CAAC;gBACJ,MAAM,IAAI,IAAI;gBACd;AAEF,YAAA,KAAK,CAAC;gBACJ,MAAM,IAAI,GAAG;gBACb;AAEF,YAAA;AACE,gBAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC;;AAEhD,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;IACtC;AAEA;;;;AAIG;AACO,IAAA,gBAAgB,CAAC,GAAW,EAAA;QACpC,OAAO,kBAAkB,CACvB,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CACtB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EACnB,CAAC,CAAM,KAAK,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAC1E,CAAC,IAAI,CAAC,EAAE,CAAC,CACX;IACH;AAEA;;;;AAIG;AACO,IAAA,SAAS,CAAC,GAAW,EAAA;QAC7B,MAAM,KAAK,GAAG,mEAAmE;QACjF,IAAI,MAAM,GAAG,EAAE;AAEf,QAAA,OACE,GAAG,CAAC,MAAM,GAAG,CAAC;YACd,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAClB;YACA,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxB;QAEA,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE;AACxB,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,iEAAA,CAAmE,CAAC;QACtF;QAEA,IAAI,EAAE,GAAG,CAAC,EAAE,EAAO,EAAE,MAAW,EAAE,GAAG,GAAG,CAAC;QAEzC,OAAO,IAAI,EAAE;YACX,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;YAE1B,IAAI,CAAC,MAAM,EAAE;gBACX;YACF;AAEA,YAAA,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAE9B,IAAI,CAAC,MAAM,EAAE;AACX,gBAAA,EAAE,GAAG,EAAE,GAAG,CAAC,GAAE,EAAE,GAAG,EAAE,GAAG,MAAM,GAAG,MAAM;AAEtC,gBAAA,IAAI,EAAE,EAAE,GAAG,CAAC,EAAE;oBACZ,MAAM,IAAI,MAAM,CAAC,aAAa,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC/D;YACF;QACF;AACA,QAAA,OAAO,MAAM;IACf;+GA1KW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAZ,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,YAAY,cAFX,MAAM,EAAA,CAAA,CAAA;;4FAEP,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACNM,MAAM,SAAS,GAAkB,MAAc;AAEpD,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAC7B,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC;AAErC,IAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,EAAE;AAC9B,QAAA,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC;AACnC,QAAA,OAAO,KAAK;IACd;AACA,IAAA,OAAO,IAAI;AACb;;MCNa,iBAAiB,CAAA;AAU5B,IAAA,WAAA,CACqB,GAAc,EAAA;QAAd,IAAA,CAAA,GAAG,GAAH,GAAG;AATR,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,IAAI,GAAG,EAAmB,kFAAC;AAEhE;;;AAGG;QACI,IAAA,CAAA,WAAW,GAAG,KAAK;IAItB;AAEJ;;;;;AAKG;AACI,IAAA,GAAG,CAAC,UAAkB,EAAA;AAC3B,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;AACtC,QAAA,MAAM,CAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAE,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;QAErD,QACE,WAAW,CAAC,GAAG,CAAC,GAAI,KAAM,CAAA,CAAA,EAAK,MAAO,CAAA,MAAA,CAAQ,CAAC;AAC/C,YAAA,WAAW,CAAC,GAAG,CAAC,CAAA,EAAI,KAAM,CAAA,CAAA,EAAK,MAAO,CAAA,CAAA,EAAK,IAAK,CAAA,CAAE,CAAC;IAEvD;AAEA;;;AAGG;AACI,IAAA,aAAa,CAAC,SAAmB,EAAA;QACtC,IAAI,CAAC,WAAW,CAAC,MAAM,CACrB,CAAC,GAAG,KAAI;AACN,YAAA,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC;AAE3B,YAAA,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE;AAC5B,gBAAA,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;YACxB;AACA,YAAA,OAAO,MAAM;AACf,QAAA,CAAC,CACF;IACH;AAEA;;;;AAIG;IACI,cAAc,CAAC,MAAwB,EAAE,aAA6B,EAAA;AAC3E,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YACpB,aAAa;AACb,YAAA,aAAa,EAAE,iBAAiB;AAChC,YAAA,SAAS,EAAE;gBACT;AACD,aAAA;AACD,YAAA,KAAK,EAAE;;;;;;;;AAQN,MAAA;AACF,SAAA,CAAC;IACJ;+GArEW,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAjB,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,iBAAiB,cAFhB,MAAM,EAAA,CAAA,CAAA;;4FAEP,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACFM,MAAM,eAAe,GAAkB,CAAC,KAA6B,KAAa;AAEvF,IAAA,MAAM,MAAM,GAAW,MAAM,CAAC,MAAM,CAAC;AACrC,IAAA,MAAM,QAAQ,GAAa,MAAM,CAAC,QAAQ,CAAC;AAC3C,IAAA,MAAM,iBAAiB,GAAsB,MAAM,CAAC,iBAAiB,CAAC;IAEtE,MAAM,WAAW,GAAa,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;IACvD,MAAM,UAAU,GAAiB,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,IAAG,IAAI;AAEhE,IAAA,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE;AACxB,QAAA,OAAO,CAAC,KAAK,CAAC,uFAAuF,CAAC;AACtG,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE;AAClC,QAAA,MAAM,CAAC,QAAQ,CACb,CAAE,SAAS,CAAE,EACb;AACE,YAAA,WAAW,EAAE;AACX,gBAAA,GAAG,EAAE,CAAA,EAAI,QAAQ,CAAC,IAAI,EAAE,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAK,CAAA;AACrD;AACF,SAAA,CACF;AACD,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,IAAI,UAAU,KAAK,IAAI,EAAE;AACvB,QAAA,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;AACpC,YAAA,IAAI,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AACrC,gBAAA,OAAO,IAAI;YACb;QACF;IACF;IAEA,IAAI,aAAa,GAAG,IAAI;AACxB,IAAA,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;QACpC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;YACtC,aAAa,GAAG,KAAK;YACrB;QACF;IACF;IAEA,IAAI,aAAa,EAAE;AACjB,QAAA,OAAO,IAAI;IACb;AACA,IAAA,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC;AAC5B,IAAA,OAAO,KAAK;AACd;;MChDa,wBAAwB,GAAsB,CACzD,OAAyB,EACzB,IAAmB,KACW;AAE9B,IAAA,OAAO,IAAI,CACT,OAAO,CAAC,KAAK,CACX;QACE,OAAO,EAAE,OAAO,CAAC,OAAO;AACxB,QAAA,UAAU,EAAE;YACV,aAAa,EAAE,WAAW,CAAC,SAAS;AACrC;AACF,KAAA,CACF,CACF;AACH;;MCZa,uBAAuB,GAAsB,CACxD,OAAyB,EACzB,IAAmB,KACW;AAE9B,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAC7B,IAAA,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AAEvC,IAAA,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CACvB,GAAG,CACD,CAAC,EAAE,IAAI,EAAE,IAAI,EAAO,KAAI;QACtB,IACE,IAAI,KAAK,CAAC;YACV,CAAC,IAAI,EACL;YACA;QACF;AAEA,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;QACvB,IACE,CAAC,MAAM,EAAE,MAAM;YACf,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,KAAK,oBAAoB,EAClD;YACA;QACF;AACA,QAAA,MAAM,IAAI;AACZ,IAAA,CAAC,CACF,EACD,UAAU,CACR,CAAC,KAAU,KAAI;AACb,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK;AACxB,QAAA,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE;AACnB,YAAA,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC;QAChC;AAEA,QAAA,IACE,CACE,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO;YACjB,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,KAAK,oBAAoB;YAEpD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,EACpC;YACA,OAAO,UAAU,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC;QACpC;QAEA,OAAO,WAAW,CAAC,YAAY,CAAC,EAAE,YAAY,EAAE,WAAW,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAC9E,SAAS,CACP,CAAC,EAAE,IAAI,EAAE,KAAI;YACX,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,wBAAwB;AAEnE,YAAA,WAAW,CAAC,SAAS,GAAG,WAAY;AACpC,YAAA,WAAW,CAAC,YAAY,GAAG,YAAa;AAExC,YAAA,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,WAAY,CAAC;AAC/C,YAAA,YAAY,CAAC,OAAO,CAAC,cAAc,EAAE,YAAa,CAAC;AAEnD,YAAA,OAAO,IAAI,CACT,OAAO,CAAC,KAAK,CACX;AACE,gBAAA,UAAU,EAAE;AACV,oBAAA,aAAa,EAAE,WAAY;AAC5B,iBAAA;AACF,aAAA,CACF,CACF;AACH,QAAA,CAAC,CACF,EACD,UAAU,CACR,MAAK;YACH,WAAW,CAAC,MAAM,EAAE;AACpB,YAAA,QAAQ,CAAC,IAAI,GAAG,CAAA,gBAAA,EAAoB,kBAAkB,CAAC,MAAM,CAAC,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAE,EAAE;YACrF,OAAO,UAAU,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC,CACF,CACF;IACH,CAAC,CACF,CACF;AACH;;ACjFA;;;;;;;;AAQG;MAKU,mBAAmB,CAAA;AAE9B,IAAA,WAAA,CACqB,OAA0B,EAC1B,WAA6B,EAC7B,aAA+B,EAAA;QAF/B,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,WAAW,GAAX,WAAW;QACX,IAAA,CAAA,aAAa,GAAb,aAAa;IAC9B;IAEJ,IACI,aAAa,CAAC,UAAkB,EAAA;QAClC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;YAChC,IAAI,CAAC,aAAa,CAAC,kBAAkB,CACnC,IAAI,CAAC,WAAW,CACjB;YACD;QACF;AACA,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;IAC5B;+GAjBW,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAJ/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,QAAQ,EAAE;AACX,iBAAA;;sBASE;;;MCQU,gBAAgB,CAAA;+GAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,2EAAA,EAAA,EAAA,SAAA,EAtBhB;AACT,YAAA,YAAY,CACV;gBACE;aACD;SAEJ,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAIS;;;;;;;;;;AAUT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAZC,MAAM,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,KAAA,EAAA,MAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAcG,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBA5B5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;oBAC3B,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE;AACR,qBAAA;AACD,oBAAA,SAAS,EAAE;AACT,wBAAA,YAAY,CACV;4BACE;yBACD;AAEJ,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP;AACD,qBAAA;AACD,oBAAA,QAAQ,EAAE;;;;;;;;;;AAUT,EAAA,CAAA;AACF,iBAAA;;;MCPY,WAAW,CAAA;AAItB,IAAA,WAAA,CAC0C,MAAqB,EAC1C,MAAc,EACd,KAAqB,EACrB,iBAAoC,EAAA;QAHf,IAAA,CAAA,MAAM,GAAN,MAAM;QAC3B,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;IAClC;IAEG,QAAQ,GAAA;AACb,QAAA,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,qBAAqB,IAAI,UAAU,CAAC;QACzF,IAAI,CAAC,WAAW,EAAE;YAChB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAE,KAAK,CAAE,CAAC;YAC/B;QACF;QAEA,MAAM,YAAY,GAAa,EAAE;QACjC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAC9C;YACE,WAAW;AACX,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;AAC/B,YAAA,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW;AACpC,SAAA,EACD,UAAU,CACX,CAAC,SAAS,CAAC;YACV,KAAK,EAAE,MAAK;gBACV,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAE,KAAK,CAAE,CAAC;YACjC,CAAC;AACD,YAAA,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,gBAAgB,EAAE,EAAE,IAAI,EAAE,EAAC,EAAC,KAAI;gBAC/C,IAAI,CAAC,OAAO,CACV,CAAC,EAAE,QAAQ,EAAE,KAAI;oBACf,IAAI,CAAC,QAAQ,EAAE;wBACb;oBACF;AACA,oBAAA,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,gBAAA,CAAC,CACF;AAED,gBAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,GAAG,IAAI;AACzC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,YAAY,CAAC;gBAClD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAG,EAAE,CAAC;YAC9E;AACD,SAAA,CAAC;IACJ;IAEO,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE;IACzB;AAlDW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,kBAKZ,cAAc,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AALb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,2EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EARZ;;;;;;AAMT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EARC,kBAAkB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAUT,WAAW,EAAA,UAAA,EAAA,CAAA;kBAjBvB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,YAAY;oBACtB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE;AACR,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP;AACD,qBAAA;AACD,oBAAA,QAAQ,EAAE;;;;;;AAMT,EAAA,CAAA;AACF,iBAAA;;0BAMI,MAAM;2BAAC,cAAc;;;AC9B1B;;AAEG;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { input, computed, effect,
|
|
2
|
+
import { input, computed, effect, Directive } from '@angular/core';
|
|
3
3
|
import { up, formatInitial } from '@unipin/angular-applet/common';
|
|
4
4
|
|
|
5
5
|
class UpAvatarDirective {
|
|
@@ -25,29 +25,26 @@ class UpAvatarDirective {
|
|
|
25
25
|
if (!parent) {
|
|
26
26
|
return;
|
|
27
27
|
}
|
|
28
|
-
const t = this.initialText;
|
|
29
28
|
const div = this.renderer.createElement('div');
|
|
30
29
|
this.renderer.setAttribute(div, 'class', el.className);
|
|
31
|
-
this.renderer.setProperty(div, 'textContent', formatInitial(
|
|
30
|
+
this.renderer.setProperty(div, 'textContent', formatInitial(this.initialText()));
|
|
32
31
|
this.renderer.insertBefore(parent, div, el);
|
|
33
32
|
this.renderer.removeChild(parent, el);
|
|
34
33
|
}
|
|
35
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
36
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.
|
|
34
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: UpAvatarDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
35
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.18", type: UpAvatarDirective, isStandalone: true, selector: "[upAvatar]", inputs: { initialText: { classPropertyName: "initialText", publicName: "initial", isSignal: true, isRequired: false, transformFunction: null }, inlineClass: { classPropertyName: "inlineClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "error": "setFallback()" }, properties: { "class": "_computedClass()" } }, exportAs: ["upAvatar"], ngImport: i0 }); }
|
|
37
36
|
}
|
|
38
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
37
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: UpAvatarDirective, decorators: [{
|
|
39
38
|
type: Directive,
|
|
40
39
|
args: [{
|
|
41
40
|
exportAs: 'upAvatar',
|
|
42
41
|
selector: '[upAvatar]',
|
|
43
42
|
host: {
|
|
44
43
|
'[class]': '_computedClass()',
|
|
44
|
+
'(error)': 'setFallback()',
|
|
45
45
|
},
|
|
46
46
|
}]
|
|
47
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { initialText: [{ type: i0.Input, args: [{ isSignal: true, alias: "initial", required: false }] }], inlineClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }]
|
|
48
|
-
type: HostListener,
|
|
49
|
-
args: ['error']
|
|
50
|
-
}] } });
|
|
47
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { initialText: [{ type: i0.Input, args: [{ isSignal: true, alias: "initial", required: false }] }], inlineClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
|
|
51
48
|
|
|
52
49
|
/**
|
|
53
50
|
* Generated bundle index. Do not edit.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unipin-angular-applet-avatar.mjs","sources":["../../../projects/unipin-angular/avatar/avatar.directive.ts","../../../projects/unipin-angular/avatar/unipin-angular-applet-avatar.ts"],"sourcesContent":["import { Directive, ElementRef, Renderer2, effect, computed, input
|
|
1
|
+
{"version":3,"file":"unipin-angular-applet-avatar.mjs","sources":["../../../projects/unipin-angular/avatar/avatar.directive.ts","../../../projects/unipin-angular/avatar/unipin-angular-applet-avatar.ts"],"sourcesContent":["import { Directive, ElementRef, Renderer2, effect, computed, input } from '@angular/core';\nimport { ClassValue } from 'clsx';\nimport { formatInitial, up } from '@unipin/angular-applet/common';\n\n\n@Directive({\n exportAs: 'upAvatar',\n selector: '[upAvatar]',\n host: {\n '[class]': '_computedClass()',\n '(error)': 'setFallback()',\n },\n})\nexport class UpAvatarDirective {\n\n public readonly initialText = input<string>('', { alias: 'initial' });\n public readonly inlineClass = input<ClassValue>('', { alias: 'class' });\n \n protected readonly _computedClass = computed(\n () => {\n return up(\n 'inline-flex items-center justify-center rounded-full overflow-hidden select-none size-16 relative',\n this.initialText()? 'bg-gray-400 text-white font-semibold text-3xl' : 'object-cover',\n this.inlineClass()\n );\n }\n );\n\n constructor(\n protected readonly el: ElementRef<HTMLElement>,\n protected readonly renderer: Renderer2\n ) {\n effect(\n () => {\n const el = this.el.nativeElement;\n \n if (\n this.initialText() &&\n !el.getAttribute('src')\n ) {\n this.renderer.setProperty(\n el, \n 'textContent', \n formatInitial(this.initialText())\n );\n }\n }\n );\n }\n\n public setFallback(): void{ \n const el = this.el.nativeElement;\n\n const parent = el.parentNode;\n if (!parent) {\n return;\n }\n\n const div = this.renderer.createElement('div');\n\n this.renderer.setAttribute(div, 'class', el.className);\n this.renderer.setProperty(div, 'textContent', formatInitial(this.initialText()));\n\n this.renderer.insertBefore(parent, div, el);\n this.renderer.removeChild(parent, el);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,9 @@ const badgeVariants = cva('inline-flex items-center justify-center rounded-md bo
|
|
|
9
9
|
default: 'border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90',
|
|
10
10
|
secondary: 'border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90',
|
|
11
11
|
destructive: 'border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60',
|
|
12
|
+
success: 'border-transparent bg-green-600 text-white [a&]:hover:bg-green-600/90 focus-visible:ring-green-600/20 dark:focus-visible:ring-green-600/40 dark:bg-green-600/60',
|
|
13
|
+
warning: 'border-transparent bg-yellow-500 text-white [a&]:hover:bg-yellow-500/90 focus-visible:ring-yellow-500/20 dark:focus-visible:ring-yellow-500/40 dark:bg-yellow-500/60',
|
|
14
|
+
info: 'border-transparent bg-blue-500 text-white [a&]:hover:bg-blue-500/90 focus-visible:ring-blue-500/20 dark:focus-visible:ring-blue-500/40 dark:bg-blue-500/60',
|
|
12
15
|
outline: 'text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground border-border',
|
|
13
16
|
},
|
|
14
17
|
},
|
|
@@ -27,10 +30,10 @@ class UpBadgeDirective {
|
|
|
27
30
|
}), this.inlineClass());
|
|
28
31
|
}, ...(ngDevMode ? [{ debugName: "_computedClass" }] : /* istanbul ignore next */ []));
|
|
29
32
|
}
|
|
30
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
31
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.
|
|
33
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: UpBadgeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
34
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.18", type: UpBadgeDirective, isStandalone: true, selector: "[upBadge]", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, inlineClass: { classPropertyName: "inlineClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "_computedClass()" } }, exportAs: ["upBadge"], ngImport: i0 }); }
|
|
32
35
|
}
|
|
33
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
36
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: UpBadgeDirective, decorators: [{
|
|
34
37
|
type: Directive,
|
|
35
38
|
args: [{
|
|
36
39
|
exportAs: 'upBadge',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unipin-angular-applet-badge.mjs","sources":["../../../projects/unipin-angular/badge/badge-variant.type.ts","../../../projects/unipin-angular/badge/badge.directive.ts","../../../projects/unipin-angular/badge/unipin-angular-applet-badge.ts"],"sourcesContent":["import { type VariantProps, cva } from 'class-variance-authority';\n\nexport const badgeVariants = cva(\n 'inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&_ng-icon]:size-3 gap-1 [&_ng-icon]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden',\n {\n variants: {\n variant: {\n default: 'border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90',\n secondary: 'border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90',\n destructive: 'border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60',\n outline: 'text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground border-border',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nexport type BadgeVariants = VariantProps<typeof badgeVariants>;\n","import { computed, Directive, input } from
|
|
1
|
+
{"version":3,"file":"unipin-angular-applet-badge.mjs","sources":["../../../projects/unipin-angular/badge/badge-variant.type.ts","../../../projects/unipin-angular/badge/badge.directive.ts","../../../projects/unipin-angular/badge/unipin-angular-applet-badge.ts"],"sourcesContent":["import { type VariantProps, cva } from 'class-variance-authority';\n\nexport const badgeVariants = cva(\n 'inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&_ng-icon]:size-3 gap-1 [&_ng-icon]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden',\n {\n variants: {\n variant: {\n default: 'border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90',\n secondary: 'border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90',\n destructive: 'border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60',\n success: 'border-transparent bg-green-600 text-white [a&]:hover:bg-green-600/90 focus-visible:ring-green-600/20 dark:focus-visible:ring-green-600/40 dark:bg-green-600/60',\n warning: 'border-transparent bg-yellow-500 text-white [a&]:hover:bg-yellow-500/90 focus-visible:ring-yellow-500/20 dark:focus-visible:ring-yellow-500/40 dark:bg-yellow-500/60',\n info: 'border-transparent bg-blue-500 text-white [a&]:hover:bg-blue-500/90 focus-visible:ring-blue-500/20 dark:focus-visible:ring-blue-500/40 dark:bg-blue-500/60',\n outline: 'text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground border-border',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nexport type BadgeVariants = VariantProps<typeof badgeVariants>;\n","import { computed, Directive, input } from '@angular/core';\nimport { ClassValue } from 'clsx';\nimport { up } from '@unipin/angular-applet/common';\nimport { BadgeVariants, badgeVariants } from './badge-variant.type';\n\n\n@Directive({\n exportAs: 'upBadge',\n selector: '[upBadge]',\n host: {\n '[class]': '_computedClass()',\n },\n})\nexport class UpBadgeDirective {\n\n public readonly variant = input<BadgeVariants['variant']>('default');\n public readonly inlineClass = input<ClassValue>('', { alias: 'class' });\n\n protected readonly _computedClass = computed(\n () => {\n return up(\n badgeVariants(\n {\n variant: this.variant()\n }\n ), \n this.inlineClass(),\n );\n }\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;AAEO,MAAM,aAAa,GAAG,GAAG,CAC9B,wZAAwZ,EACxZ;AACE,IAAA,QAAQ,EAAE;AACR,QAAA,OAAO,EAAE;AACP,YAAA,OAAO,EAAE,gFAAgF;AACzF,YAAA,SAAS,EAAE,sFAAsF;AACjG,YAAA,WAAW,EAAE,2KAA2K;AACxL,YAAA,OAAO,EAAE,iKAAiK;AAC1K,YAAA,OAAO,EAAE,sKAAsK;AAC/K,YAAA,IAAI,EAAE,4JAA4J;AAClK,YAAA,OAAO,EAAE,sFAAsF;AAChG,SAAA;AACF,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,OAAO,EAAE,SAAS;AACnB,KAAA;AACF,CAAA;;MCNU,gBAAgB,CAAA;AAP7B,IAAA,WAAA,GAAA;AASkB,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAA2B,SAAS,8EAAC;QACpD,IAAA,CAAA,WAAW,GAAG,KAAK,CAAa,EAAE,mFAAI,KAAK,EAAE,OAAO,EAAA,CAAG;AAEpD,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAC1C,MAAK;YACH,OAAO,EAAE,CACP,aAAa,CACX;AACE,gBAAA,OAAO,EAAE,IAAI,CAAC,OAAO;AACtB,aAAA,CACF,EACD,IAAI,CAAC,WAAW,EAAE,CACnB;AACH,QAAA,CAAC,qFACF;AACF,IAAA;+GAjBY,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAP5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,SAAS;AACnB,oBAAA,QAAQ,EAAE,WAAW;AACrB,oBAAA,IAAI,EAAE;AACJ,wBAAA,SAAS,EAAE,kBAAkB;AAC9B,qBAAA;AACF,iBAAA;;;ACZD;;AAEG;;;;"}
|
|
@@ -41,10 +41,10 @@ class UpButtonDirective {
|
|
|
41
41
|
}), this.inlineClass());
|
|
42
42
|
}, ...(ngDevMode ? [{ debugName: "_computedClass" }] : /* istanbul ignore next */ []));
|
|
43
43
|
}
|
|
44
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
45
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.
|
|
44
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: UpButtonDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
45
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.18", type: UpButtonDirective, isStandalone: true, selector: "[upButton]", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, inlineClass: { classPropertyName: "inlineClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "_computedClass()" } }, exportAs: ["upButton"], ngImport: i0 }); }
|
|
46
46
|
}
|
|
47
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
47
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: UpButtonDirective, decorators: [{
|
|
48
48
|
type: Directive,
|
|
49
49
|
args: [{
|
|
50
50
|
exportAs: 'upButton',
|
|
@@ -90,8 +90,8 @@ class UpSplitButtonComponent {
|
|
|
90
90
|
});
|
|
91
91
|
});
|
|
92
92
|
}
|
|
93
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
94
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
93
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: UpSplitButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
94
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.18", type: UpSplitButtonComponent, isStandalone: true, selector: "up-split-button", inputs: { activeIndex: { classPropertyName: "activeIndex", publicName: "activeIndex", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { activeIndex: "activeIndexChange" }, host: { classAttribute: "flex" }, providers: [
|
|
95
95
|
provideIcons({
|
|
96
96
|
matCheckRound,
|
|
97
97
|
matArrowDropDownRound
|
|
@@ -158,7 +158,7 @@ class UpSplitButtonComponent {
|
|
|
158
158
|
}
|
|
159
159
|
`, isInline: true, dependencies: [{ kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: UpButtonDirective, selector: "[upButton]", inputs: ["size", "variant", "class"], exportAs: ["upButton"] }, { kind: "component", type: UpPopoverComponent, selector: "up-popover", inputs: ["placement", "alignment", "placementOffset", "alignmentOffset"] }, { kind: "directive", type: UpPopoverCloseDirective, selector: "[upPopoverClose]", exportAs: ["upPopoverClose"] }, { kind: "directive", type: UpPopoverTriggerDirective, selector: "[upPopoverTrigger]", exportAs: ["upPopoverTrigger"] }, { kind: "directive", type: UpPopoverContentDirective, selector: "[upPopoverContent]", inputs: ["class"], exportAs: ["upPopoverContent"] }, { kind: "directive", type: UpPopoverContentRefDirective, selector: "[upPopoverContentRef]", exportAs: ["upPopoverContentRef"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
160
160
|
}
|
|
161
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
161
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: UpSplitButtonComponent, decorators: [{
|
|
162
162
|
type: Component,
|
|
163
163
|
args: [{
|
|
164
164
|
selector: 'up-split-button',
|