@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.
Files changed (66) hide show
  1. package/fesm2022/unipin-angular-applet-accordion.mjs +29 -17
  2. package/fesm2022/unipin-angular-applet-accordion.mjs.map +1 -1
  3. package/fesm2022/unipin-angular-applet-alert-dialog.mjs +7 -7
  4. package/fesm2022/unipin-angular-applet-alert-dialog.mjs.map +1 -1
  5. package/fesm2022/unipin-angular-applet-alert.mjs +9 -9
  6. package/fesm2022/unipin-angular-applet-approval.mjs +10 -10
  7. package/fesm2022/unipin-angular-applet-approval.mjs.map +1 -1
  8. package/fesm2022/{unipin-angular-applet-audit-audit-modal.component-DNlMbUda.mjs → unipin-angular-applet-audit-audit-modal.component-Fhzj6tsh.mjs} +4 -4
  9. package/fesm2022/{unipin-angular-applet-audit-audit-modal.component-DNlMbUda.mjs.map → unipin-angular-applet-audit-audit-modal.component-Fhzj6tsh.mjs.map} +1 -1
  10. package/fesm2022/unipin-angular-applet-audit.mjs +11 -12
  11. package/fesm2022/unipin-angular-applet-audit.mjs.map +1 -1
  12. package/fesm2022/unipin-angular-applet-auth.mjs +51 -39
  13. package/fesm2022/unipin-angular-applet-auth.mjs.map +1 -1
  14. package/fesm2022/unipin-angular-applet-avatar.mjs +7 -10
  15. package/fesm2022/unipin-angular-applet-avatar.mjs.map +1 -1
  16. package/fesm2022/unipin-angular-applet-badge.mjs +6 -3
  17. package/fesm2022/unipin-angular-applet-badge.mjs.map +1 -1
  18. package/fesm2022/unipin-angular-applet-buttons.mjs +6 -6
  19. package/fesm2022/unipin-angular-applet-calendar.mjs +13 -13
  20. package/fesm2022/unipin-angular-applet-calendar.mjs.map +1 -1
  21. package/fesm2022/unipin-angular-applet-collapsible.mjs +9 -9
  22. package/fesm2022/unipin-angular-applet-common.mjs +40 -39
  23. package/fesm2022/unipin-angular-applet-common.mjs.map +1 -1
  24. package/fesm2022/unipin-angular-applet-containers.mjs +18 -18
  25. package/fesm2022/unipin-angular-applet-containers.mjs.map +1 -1
  26. package/fesm2022/unipin-angular-applet-dialog.mjs +22 -22
  27. package/fesm2022/unipin-angular-applet-dialog.mjs.map +1 -1
  28. package/fesm2022/unipin-angular-applet-forms.mjs +469 -374
  29. package/fesm2022/unipin-angular-applet-forms.mjs.map +1 -1
  30. package/fesm2022/unipin-angular-applet-froala.mjs +14 -15
  31. package/fesm2022/unipin-angular-applet-froala.mjs.map +1 -1
  32. package/fesm2022/unipin-angular-applet-grids.mjs +26 -24
  33. package/fesm2022/unipin-angular-applet-grids.mjs.map +1 -1
  34. package/fesm2022/unipin-angular-applet-infinite-scroll.mjs +3 -3
  35. package/fesm2022/unipin-angular-applet-json-viewer.mjs +3 -3
  36. package/fesm2022/unipin-angular-applet-kbd.mjs +3 -3
  37. package/fesm2022/unipin-angular-applet-loading-dialog.mjs +6 -6
  38. package/fesm2022/unipin-angular-applet-markdown.mjs +20 -22
  39. package/fesm2022/unipin-angular-applet-markdown.mjs.map +1 -1
  40. package/fesm2022/unipin-angular-applet-micro-frontend.mjs +3 -3
  41. package/fesm2022/unipin-angular-applet-micro-frontend.mjs.map +1 -1
  42. package/fesm2022/unipin-angular-applet-popover.mjs +19 -15
  43. package/fesm2022/unipin-angular-applet-popover.mjs.map +1 -1
  44. package/fesm2022/unipin-angular-applet-progress-bar.mjs +14 -4
  45. package/fesm2022/unipin-angular-applet-progress-bar.mjs.map +1 -1
  46. package/fesm2022/unipin-angular-applet-skeleton.mjs +3 -3
  47. package/fesm2022/unipin-angular-applet-spinner.mjs +16 -20
  48. package/fesm2022/unipin-angular-applet-spinner.mjs.map +1 -1
  49. package/fesm2022/unipin-angular-applet-stepper.mjs +17 -9
  50. package/fesm2022/unipin-angular-applet-stepper.mjs.map +1 -1
  51. package/fesm2022/unipin-angular-applet-swipeable.mjs +14 -13
  52. package/fesm2022/unipin-angular-applet-swipeable.mjs.map +1 -1
  53. package/fesm2022/unipin-angular-applet-tabs.mjs +9 -9
  54. package/fesm2022/unipin-angular-applet-tooltip.mjs +4 -4
  55. package/fesm2022/unipin-angular-applet-tooltip.mjs.map +1 -1
  56. package/package.json +1 -1
  57. package/types/unipin-angular-applet-accordion.d.ts +1 -0
  58. package/types/unipin-angular-applet-approval.d.ts +2 -2
  59. package/types/unipin-angular-applet-badge.d.ts +2 -2
  60. package/types/unipin-angular-applet-common.d.ts +4 -4
  61. package/types/unipin-angular-applet-forms.d.ts +47 -8
  62. package/types/unipin-angular-applet-grids.d.ts +1 -1
  63. package/types/unipin-angular-applet-markdown.d.ts +2 -2
  64. package/types/unipin-angular-applet-progress-bar.d.ts +2 -0
  65. package/types/unipin-angular-applet-spinner.d.ts +2 -2
  66. 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.10", 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.10", ngImport: i0, type: ProfileService, providedIn: 'root' }); }
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.10", ngImport: i0, type: ProfileService, decorators: [{
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.10", 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.10", ngImport: i0, type: AuthService, providedIn: 'root' }); }
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.10", ngImport: i0, type: AuthService, decorators: [{
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 !(date.valueOf() > new Date().valueOf() + 0 * 1000);
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 || !decoded.hasOwnProperty('exp')) {
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.replace(/-/g, '+').replace(/_/g, '/');
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.charCodeAt(0).toString(16)).slice(-2)).join(''));
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
- str = String(str).replace(/=+$/, '');
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
- for (let bc = 0, bs, buffer, idx = 0; (buffer = str.charAt(idx++)); ~buffer && ((bs = bc % 4 ? bs * 64 + buffer : buffer), bc++ % 4) ? (output += String.fromCharCode(255 & (bs >> ((-2 * bc) & 6)))) : 0)
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.10", ngImport: i0, type: AuthResolver, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
382
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: AuthResolver, providedIn: 'root' }); }
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.10", ngImport: i0, type: AuthResolver, decorators: [{
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.10", ngImport: i0, type: PermissionService, deps: [{ token: i1.GqlParser }], target: i0.ɵɵFactoryTarget.Injectable }); }
460
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: PermissionService, providedIn: 'root' }); }
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.10", ngImport: i0, type: PermissionService, decorators: [{
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() + window.location.hash}`
497
+ url: `${location.path() + globalThis.location.hash}`
484
498
  }
485
499
  });
486
500
  return false;
487
501
  }
488
502
  if (aggregator === 'OR') {
489
- for (let i = 0; i < permissions.length; i++) {
490
- if (permissionService.has(permissions[i])) {
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 (let i = 0; i < permissions.length; i++) {
497
- if (!permissionService.has(permissions[i])) {
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.10", ngImport: i0, type: PermissionDirective, deps: [{ token: PermissionService }, { token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); }
586
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.10", type: PermissionDirective, isStandalone: true, selector: "[hasPermission]", inputs: { hasPermission: "hasPermission" }, exportAs: ["hasPermission"], ngImport: i0 }); }
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.10", ngImport: i0, type: PermissionDirective, decorators: [{
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.10", ngImport: i0, type: UnauthorizedPage, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
600
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.10", 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: [
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.10", ngImport: i0, type: UnauthorizedPage, decorators: [{
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.10", ngImport: i0, type: LoadingPage, deps: [{ token: LOADING_CONFIG }, { token: i1$1.Router }, { token: i1$1.ActivatedRoute }, { token: PermissionService }], target: i0.ɵɵFactoryTarget.Component }); }
686
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.10", 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: `
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: ["stokeWidth", "inlineClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
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.10", ngImport: i0, type: LoadingPage, decorators: [{
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":"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"}
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { input, computed, effect, HostListener, Directive } from '@angular/core';
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(t));
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.10", ngImport: i0, type: UpAvatarDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
36
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.10", 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 }); }
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.10", ngImport: i0, type: UpAvatarDirective, decorators: [{
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 }] }], setFallback: [{
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, HostListener } 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 },\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 @HostListener('error')\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 t: any = this.initialText;\n const div = this.renderer.createElement('div');\n\n this.renderer.setAttribute(div, 'class', el.className);\n this.renderer.setProperty(div, 'textContent', formatInitial(t));\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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"}
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.10", ngImport: i0, type: UpBadgeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
31
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.10", 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 }); }
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.10", ngImport: i0, type: UpBadgeDirective, decorators: [{
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 \"@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,sFAAsF;AAChG,SAAA;AACF,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,OAAO,EAAE,SAAS;AACnB,KAAA;AACF,CAAA;;MCHU,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;;;;"}
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.10", ngImport: i0, type: UpButtonDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
45
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.10", 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 }); }
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.10", ngImport: i0, type: UpButtonDirective, decorators: [{
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.10", ngImport: i0, type: UpSplitButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
94
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.10", 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: [
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.10", ngImport: i0, type: UpSplitButtonComponent, decorators: [{
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',