@shival99/z-ui 2.4.3 → 2.4.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 (143) hide show
  1. package/README.md +1 -1
  2. package/assets/css/base.css +2 -1
  3. package/assets/css/global.css +23 -2
  4. package/assets/css/tailwind.css +7 -4
  5. package/assets/css/themes/gray.css +1 -1
  6. package/assets/css/themes/green.css +1 -1
  7. package/assets/css/themes/hospital.css +1 -1
  8. package/assets/css/themes/neutral.css +1 -1
  9. package/assets/css/themes/orange.css +1 -1
  10. package/assets/css/themes/slate.css +1 -1
  11. package/assets/css/themes/stone.css +1 -1
  12. package/assets/css/themes/violet.css +1 -1
  13. package/assets/css/themes/zinc.css +1 -1
  14. package/fesm2022/shival99-z-ui-components-z-accordion.mjs +6 -6
  15. package/fesm2022/shival99-z-ui-components-z-accordion.mjs.map +1 -1
  16. package/fesm2022/shival99-z-ui-components-z-audio-player.mjs +3 -3
  17. package/fesm2022/shival99-z-ui-components-z-audio-player.mjs.map +1 -1
  18. package/fesm2022/shival99-z-ui-components-z-autocomplete.mjs +27 -12
  19. package/fesm2022/shival99-z-ui-components-z-autocomplete.mjs.map +1 -1
  20. package/fesm2022/shival99-z-ui-components-z-avatar.mjs +6 -6
  21. package/fesm2022/shival99-z-ui-components-z-avatar.mjs.map +1 -1
  22. package/fesm2022/shival99-z-ui-components-z-breadcrumb.mjs +3 -3
  23. package/fesm2022/shival99-z-ui-components-z-breadcrumb.mjs.map +1 -1
  24. package/fesm2022/shival99-z-ui-components-z-button-group.mjs +12 -12
  25. package/fesm2022/shival99-z-ui-components-z-button-group.mjs.map +1 -1
  26. package/fesm2022/shival99-z-ui-components-z-button.mjs +3 -3
  27. package/fesm2022/shival99-z-ui-components-z-button.mjs.map +1 -1
  28. package/fesm2022/shival99-z-ui-components-z-calendar.mjs +40 -40
  29. package/fesm2022/shival99-z-ui-components-z-calendar.mjs.map +1 -1
  30. package/fesm2022/shival99-z-ui-components-z-card.mjs +7 -7
  31. package/fesm2022/shival99-z-ui-components-z-card.mjs.map +1 -1
  32. package/fesm2022/shival99-z-ui-components-z-chat.mjs +4 -4
  33. package/fesm2022/shival99-z-ui-components-z-chat.mjs.map +1 -1
  34. package/fesm2022/shival99-z-ui-components-z-checkbox.mjs +3 -3
  35. package/fesm2022/shival99-z-ui-components-z-checkbox.mjs.map +1 -1
  36. package/fesm2022/shival99-z-ui-components-z-code.mjs +58 -19
  37. package/fesm2022/shival99-z-ui-components-z-code.mjs.map +1 -1
  38. package/fesm2022/shival99-z-ui-components-z-command.mjs +6 -5
  39. package/fesm2022/shival99-z-ui-components-z-command.mjs.map +1 -1
  40. package/fesm2022/shival99-z-ui-components-z-drawer.mjs +17 -17
  41. package/fesm2022/shival99-z-ui-components-z-drawer.mjs.map +1 -1
  42. package/fesm2022/shival99-z-ui-components-z-dropdown-menu.mjs +12 -4
  43. package/fesm2022/shival99-z-ui-components-z-dropdown-menu.mjs.map +1 -1
  44. package/fesm2022/shival99-z-ui-components-z-editor.mjs +6 -6
  45. package/fesm2022/shival99-z-ui-components-z-editor.mjs.map +1 -1
  46. package/fesm2022/shival99-z-ui-components-z-empty.mjs +3 -3
  47. package/fesm2022/shival99-z-ui-components-z-empty.mjs.map +1 -1
  48. package/fesm2022/shival99-z-ui-components-z-filter.mjs +27 -27
  49. package/fesm2022/shival99-z-ui-components-z-filter.mjs.map +1 -1
  50. package/fesm2022/shival99-z-ui-components-z-gallery.mjs +42 -34
  51. package/fesm2022/shival99-z-ui-components-z-gallery.mjs.map +1 -1
  52. package/fesm2022/shival99-z-ui-components-z-hover-glide.mjs +221 -0
  53. package/fesm2022/shival99-z-ui-components-z-hover-glide.mjs.map +1 -0
  54. package/fesm2022/shival99-z-ui-components-z-icon.mjs +3 -3
  55. package/fesm2022/shival99-z-ui-components-z-icon.mjs.map +1 -1
  56. package/fesm2022/shival99-z-ui-components-z-input.mjs +5 -5
  57. package/fesm2022/shival99-z-ui-components-z-input.mjs.map +1 -1
  58. package/fesm2022/shival99-z-ui-components-z-kanban.mjs +4 -4
  59. package/fesm2022/shival99-z-ui-components-z-kanban.mjs.map +1 -1
  60. package/fesm2022/shival99-z-ui-components-z-loading.mjs +18 -4
  61. package/fesm2022/shival99-z-ui-components-z-loading.mjs.map +1 -1
  62. package/fesm2022/shival99-z-ui-components-z-marquee.mjs +3 -3
  63. package/fesm2022/shival99-z-ui-components-z-marquee.mjs.map +1 -1
  64. package/fesm2022/shival99-z-ui-components-z-media-player.mjs +346 -956
  65. package/fesm2022/shival99-z-ui-components-z-media-player.mjs.map +1 -1
  66. package/fesm2022/shival99-z-ui-components-z-menu.mjs +8 -8
  67. package/fesm2022/shival99-z-ui-components-z-menu.mjs.map +1 -1
  68. package/fesm2022/shival99-z-ui-components-z-metric-card.mjs +5 -5
  69. package/fesm2022/shival99-z-ui-components-z-metric-card.mjs.map +1 -1
  70. package/fesm2022/shival99-z-ui-components-z-modal.mjs +17 -17
  71. package/fesm2022/shival99-z-ui-components-z-modal.mjs.map +1 -1
  72. package/fesm2022/shival99-z-ui-components-z-number-ticker.mjs +352 -0
  73. package/fesm2022/shival99-z-ui-components-z-number-ticker.mjs.map +1 -0
  74. package/fesm2022/shival99-z-ui-components-z-overlay.mjs +9 -9
  75. package/fesm2022/shival99-z-ui-components-z-overlay.mjs.map +1 -1
  76. package/fesm2022/shival99-z-ui-components-z-pagination.mjs +4 -4
  77. package/fesm2022/shival99-z-ui-components-z-pagination.mjs.map +1 -1
  78. package/fesm2022/shival99-z-ui-components-z-popover.mjs +14 -14
  79. package/fesm2022/shival99-z-ui-components-z-popover.mjs.map +1 -1
  80. package/fesm2022/shival99-z-ui-components-z-qrcode.mjs +32 -8
  81. package/fesm2022/shival99-z-ui-components-z-qrcode.mjs.map +1 -1
  82. package/fesm2022/shival99-z-ui-components-z-radio.mjs +3 -3
  83. package/fesm2022/shival99-z-ui-components-z-radio.mjs.map +1 -1
  84. package/fesm2022/shival99-z-ui-components-z-scrollarea.mjs +3 -3
  85. package/fesm2022/shival99-z-ui-components-z-scrollarea.mjs.map +1 -1
  86. package/fesm2022/shival99-z-ui-components-z-select.mjs +181 -26
  87. package/fesm2022/shival99-z-ui-components-z-select.mjs.map +1 -1
  88. package/fesm2022/shival99-z-ui-components-z-show-more.mjs +3 -3
  89. package/fesm2022/shival99-z-ui-components-z-show-more.mjs.map +1 -1
  90. package/fesm2022/shival99-z-ui-components-z-skeleton-auto.mjs +4 -4
  91. package/fesm2022/shival99-z-ui-components-z-skeleton-auto.mjs.map +1 -1
  92. package/fesm2022/shival99-z-ui-components-z-skeleton.mjs +5 -5
  93. package/fesm2022/shival99-z-ui-components-z-skeleton.mjs.map +1 -1
  94. package/fesm2022/shival99-z-ui-components-z-steps.mjs +4 -4
  95. package/fesm2022/shival99-z-ui-components-z-steps.mjs.map +1 -1
  96. package/fesm2022/shival99-z-ui-components-z-switch.mjs +5 -5
  97. package/fesm2022/shival99-z-ui-components-z-switch.mjs.map +1 -1
  98. package/fesm2022/shival99-z-ui-components-z-table.mjs +107 -105
  99. package/fesm2022/shival99-z-ui-components-z-table.mjs.map +1 -1
  100. package/fesm2022/shival99-z-ui-components-z-tabs.mjs +327 -31
  101. package/fesm2022/shival99-z-ui-components-z-tabs.mjs.map +1 -1
  102. package/fesm2022/shival99-z-ui-components-z-tags.mjs +15 -15
  103. package/fesm2022/shival99-z-ui-components-z-tags.mjs.map +1 -1
  104. package/fesm2022/shival99-z-ui-components-z-timeline.mjs +4 -4
  105. package/fesm2022/shival99-z-ui-components-z-timeline.mjs.map +1 -1
  106. package/fesm2022/shival99-z-ui-components-z-toast.mjs +10 -9
  107. package/fesm2022/shival99-z-ui-components-z-toast.mjs.map +1 -1
  108. package/fesm2022/shival99-z-ui-components-z-tooltip.mjs +11 -11
  109. package/fesm2022/shival99-z-ui-components-z-tooltip.mjs.map +1 -1
  110. package/fesm2022/shival99-z-ui-components-z-upload.mjs +3 -3
  111. package/fesm2022/shival99-z-ui-components-z-upload.mjs.map +1 -1
  112. package/fesm2022/shival99-z-ui-i18n.mjs +6 -26
  113. package/fesm2022/shival99-z-ui-i18n.mjs.map +1 -1
  114. package/fesm2022/shival99-z-ui-pipes.mjs +18 -18
  115. package/fesm2022/shival99-z-ui-pipes.mjs.map +1 -1
  116. package/fesm2022/shival99-z-ui-services.mjs +31 -31
  117. package/fesm2022/shival99-z-ui-services.mjs.map +1 -1
  118. package/package.json +21 -1
  119. package/types/shival99-z-ui-components-z-autocomplete.d.ts +6 -2
  120. package/types/shival99-z-ui-components-z-calendar.d.ts +4 -4
  121. package/types/shival99-z-ui-components-z-card.d.ts +21 -21
  122. package/types/shival99-z-ui-components-z-code.d.ts +16 -3
  123. package/types/shival99-z-ui-components-z-drawer.d.ts +1 -1
  124. package/types/shival99-z-ui-components-z-editor.d.ts +8 -8
  125. package/types/shival99-z-ui-components-z-gallery.d.ts +4 -1
  126. package/types/shival99-z-ui-components-z-hover-glide.d.ts +48 -0
  127. package/types/shival99-z-ui-components-z-icon.d.ts +1 -1
  128. package/types/shival99-z-ui-components-z-loading.d.ts +9 -2
  129. package/types/shival99-z-ui-components-z-media-player.d.ts +102 -172
  130. package/types/shival99-z-ui-components-z-metric-card.d.ts +19 -19
  131. package/types/shival99-z-ui-components-z-modal.d.ts +2 -2
  132. package/types/shival99-z-ui-components-z-number-ticker.d.ts +110 -0
  133. package/types/shival99-z-ui-components-z-overlay.d.ts +3 -3
  134. package/types/shival99-z-ui-components-z-popover.d.ts +11 -8
  135. package/types/shival99-z-ui-components-z-qrcode.d.ts +5 -2
  136. package/types/shival99-z-ui-components-z-select.d.ts +45 -7
  137. package/types/shival99-z-ui-components-z-switch.d.ts +22 -21
  138. package/types/shival99-z-ui-components-z-table.d.ts +1 -1
  139. package/types/shival99-z-ui-components-z-tabs.d.ts +59 -7
  140. package/types/shival99-z-ui-components-z-toast.d.ts +1 -1
  141. package/types/shival99-z-ui-components-z-tooltip.d.ts +2 -2
  142. package/types/shival99-z-ui-components-z-upload.d.ts +3 -3
  143. package/types/shival99-z-ui-services.d.ts +10 -10
@@ -1,6 +1,6 @@
1
1
  import { isPlatformBrowser } from '@angular/common';
2
2
  import * as i0 from '@angular/core';
3
- import { input, viewChild, inject, PLATFORM_ID, signal, effect, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
3
+ import { input, viewChild, inject, PLATFORM_ID, signal, computed, effect, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
4
4
  import { TranslatePipe } from '@ngx-translate/core';
5
5
  import { ZButtonComponent } from '@shival99/z-ui/components/z-button';
6
6
  import { zTransform } from '@shival99/z-ui/utils';
@@ -46,8 +46,9 @@ class ZQrCodeComponent {
46
46
  ...(ngDevMode ? [{ debugName: "zFrameColor" }] : /* istanbul ignore next */ []));
47
47
  zFramePadding = input(12, /* @ts-ignore */
48
48
  ...(ngDevMode ? [{ debugName: "zFramePadding" }] : /* istanbul ignore next */ [])); // padding around QR inside frame
49
- zFrameBorderRadius = input(12, /* @ts-ignore */
50
- ...(ngDevMode ? [{ debugName: "zFrameBorderRadius" }] : /* istanbul ignore next */ [])); // border radius of the frame
49
+ // Border radius of the frame; falls back to the theme's --radius-lg when unset
50
+ zFrameBorderRadius = input(undefined, /* @ts-ignore */
51
+ ...(ngDevMode ? [{ debugName: "zFrameBorderRadius" }] : /* istanbul ignore next */ []));
51
52
  zDownloadable = input(false, { ...(ngDevMode ? { debugName: "zDownloadable" } : /* istanbul ignore next */ {}), transform: zTransform }); // toggles hover overlay button
52
53
  zDownloadButton = input(false, { ...(ngDevMode ? { debugName: "zDownloadButton" } : /* istanbul ignore next */ {}), transform: zTransform }); // toggles standalone button below
53
54
  zShadow = input(true, { ...(ngDevMode ? { debugName: "zShadow" } : /* istanbul ignore next */ {}), transform: zTransform }); // Bật/tắt đổ bóng khung ngoài
@@ -59,6 +60,29 @@ class ZQrCodeComponent {
59
60
  // States
60
61
  downloadText = signal('i18n_z_ui_qrcode_download', /* @ts-ignore */
61
62
  ...(ngDevMode ? [{ debugName: "downloadText" }] : /* istanbul ignore next */ []));
63
+ frameBorderRadiusStyle = computed(() => {
64
+ if (this.zFrame() === 'none' && !this.zShadow()) {
65
+ return '0px';
66
+ }
67
+ const explicit = this.zFrameBorderRadius();
68
+ return explicit !== undefined ? `${explicit}px` : 'var(--radius-lg)';
69
+ }, /* @ts-ignore */
70
+ ...(ngDevMode ? [{ debugName: "frameBorderRadiusStyle" }] : /* istanbul ignore next */ []));
71
+ /** Resolves the frame radius to a px number for canvas drawing, reading the theme's --radius-lg when unset. */
72
+ _resolveFrameBorderRadiusPx() {
73
+ const explicit = this.zFrameBorderRadius();
74
+ if (explicit !== undefined) {
75
+ return explicit;
76
+ }
77
+ const wrapper = this._canvasRef()?.nativeElement.parentElement;
78
+ if (wrapper && isPlatformBrowser(this._platformId)) {
79
+ const resolved = parseFloat(getComputedStyle(wrapper).borderRadius);
80
+ if (!Number.isNaN(resolved)) {
81
+ return resolved;
82
+ }
83
+ }
84
+ return 12;
85
+ }
62
86
  constructor() {
63
87
  // Re-render when any signal inputs change
64
88
  effect(() => {
@@ -87,7 +111,7 @@ class ZQrCodeComponent {
87
111
  const frame = this.zFrame();
88
112
  const dpr = isPlatformBrowser(this._platformId) ? window.devicePixelRatio || 1 : 1;
89
113
  const framePadding = frame !== 'none' ? this.zFramePadding() : 0;
90
- const frameBorderRadius = this.zFrameBorderRadius();
114
+ const frameBorderRadius = this._resolveFrameBorderRadiusPx();
91
115
  const bannerHeight = frame === 'text-bottom' || frame === 'text-top' ? 50 : 0;
92
116
  const cssWidth = size + framePadding * 2;
93
117
  const cssHeight = size + framePadding * 2 + bannerHeight;
@@ -389,12 +413,12 @@ class ZQrCodeComponent {
389
413
  link.click();
390
414
  document.body.removeChild(link);
391
415
  }
392
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: ZQrCodeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
393
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.2", type: ZQrCodeComponent, isStandalone: true, selector: "z-qrcode", inputs: { zValue: { classPropertyName: "zValue", publicName: "zValue", isSignal: true, isRequired: true, transformFunction: null }, zSize: { classPropertyName: "zSize", publicName: "zSize", isSignal: true, isRequired: false, transformFunction: null }, zLevel: { classPropertyName: "zLevel", publicName: "zLevel", isSignal: true, isRequired: false, transformFunction: null }, zLogo: { classPropertyName: "zLogo", publicName: "zLogo", isSignal: true, isRequired: false, transformFunction: null }, zLogoSize: { classPropertyName: "zLogoSize", publicName: "zLogoSize", isSignal: true, isRequired: false, transformFunction: null }, zLogoBgColor: { classPropertyName: "zLogoBgColor", publicName: "zLogoBgColor", isSignal: true, isRequired: false, transformFunction: null }, zLogoBgShape: { classPropertyName: "zLogoBgShape", publicName: "zLogoBgShape", isSignal: true, isRequired: false, transformFunction: null }, zLogoPadding: { classPropertyName: "zLogoPadding", publicName: "zLogoPadding", isSignal: true, isRequired: false, transformFunction: null }, zFgColor: { classPropertyName: "zFgColor", publicName: "zFgColor", isSignal: true, isRequired: false, transformFunction: null }, zBgColor: { classPropertyName: "zBgColor", publicName: "zBgColor", isSignal: true, isRequired: false, transformFunction: null }, zDotStyle: { classPropertyName: "zDotStyle", publicName: "zDotStyle", isSignal: true, isRequired: false, transformFunction: null }, zEyeStyle: { classPropertyName: "zEyeStyle", publicName: "zEyeStyle", isSignal: true, isRequired: false, transformFunction: null }, zEyeColor: { classPropertyName: "zEyeColor", publicName: "zEyeColor", isSignal: true, isRequired: false, transformFunction: null }, zMargin: { classPropertyName: "zMargin", publicName: "zMargin", isSignal: true, isRequired: false, transformFunction: null }, zFgGradient: { classPropertyName: "zFgGradient", publicName: "zFgGradient", isSignal: true, isRequired: false, transformFunction: null }, zFrame: { classPropertyName: "zFrame", publicName: "zFrame", isSignal: true, isRequired: false, transformFunction: null }, zFrameText: { classPropertyName: "zFrameText", publicName: "zFrameText", isSignal: true, isRequired: false, transformFunction: null }, zFrameColor: { classPropertyName: "zFrameColor", publicName: "zFrameColor", isSignal: true, isRequired: false, transformFunction: null }, zFramePadding: { classPropertyName: "zFramePadding", publicName: "zFramePadding", isSignal: true, isRequired: false, transformFunction: null }, zFrameBorderRadius: { classPropertyName: "zFrameBorderRadius", publicName: "zFrameBorderRadius", isSignal: true, isRequired: false, transformFunction: null }, zDownloadable: { classPropertyName: "zDownloadable", publicName: "zDownloadable", isSignal: true, isRequired: false, transformFunction: null }, zDownloadButton: { classPropertyName: "zDownloadButton", publicName: "zDownloadButton", isSignal: true, isRequired: false, transformFunction: null }, zShadow: { classPropertyName: "zShadow", publicName: "zShadow", isSignal: true, isRequired: false, transformFunction: null }, zLoading: { classPropertyName: "zLoading", publicName: "zLoading", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "_canvasRef", first: true, predicate: ["qrCanvas"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"z-qrcode-container relative flex flex-col items-center\">\n <div\n class=\"z-qrcode-canvas-wrapper relative transition-all duration-200\"\n [class.shadow-md]=\"zShadow()\"\n [style.border-radius.px]=\"zFrame() !== 'none' || zShadow() ? zFrameBorderRadius() : 0\"\n [style.overflow]=\"zFrame() !== 'none' || zShadow() ? 'hidden' : 'visible'\">\n <canvas\n #qrCanvas\n class=\"block\"\n [style.width.px]=\"zFrame() !== 'none' ? zSize() + zFramePadding() * 2 : zSize()\"\n [style.height.px]=\"\n zFrame() !== 'none'\n ? zSize() + zFramePadding() * 2 + (zFrame() === 'text-bottom' || zFrame() === 'text-top' ? 50 : 0)\n : zSize()\n \"></canvas>\n\n @if (zLoading()) {\n <div class=\"absolute inset-0 z-10 flex items-center justify-center bg-white/80 transition-opacity\">\n <svg\n class=\"h-8 w-8 animate-spin text-slate-800\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\">\n <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\" />\n <path\n class=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\" />\n </svg>\n </div>\n }\n\n @if (zDownloadable() && !zLoading()) {\n <div\n class=\"absolute inset-0 z-10 flex items-center justify-center rounded-md bg-black/45 opacity-0 transition-all duration-200 hover:opacity-100\">\n <button\n z-button\n [zWave]=\"false\"\n zSize=\"sm\"\n (click)=\"downloadQr()\"\n class=\"flex cursor-pointer items-center gap-2 font-semibold select-none\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"h-4 w-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\">\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4\" />\n </svg>\n {{ downloadText() | translate }}\n </button>\n </div>\n }\n </div>\n\n @if (zDownloadButton() && !zLoading()) {\n <div class=\"mt-4\">\n <button\n z-button\n [zWave]=\"false\"\n (click)=\"downloadQr()\"\n class=\"flex cursor-pointer items-center gap-2 font-semibold select-none\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"h-4 w-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\">\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4\" />\n </svg>\n {{ downloadText() | translate }}\n </button>\n </div>\n }\n</div>\n", styles: ["z-qrcode{display:inline-block;line-height:0}z-qrcode .z-qrcode-container{position:relative;display:inline-flex;flex-direction:column;align-items:center;border-radius:inherit}z-qrcode .z-qrcode-canvas-wrapper{position:relative;overflow:hidden;border-radius:inherit}\n"], dependencies: [{ kind: "component", type: ZButtonComponent, selector: "z-button, button[z-button], a[z-button]", inputs: ["class", "zType", "zSize", "zShape", "zLabel", "zLoading", "zDisabled", "zTypeIcon", "zAnimatedTypeIcon", "zAnimateIcon", "zAnimationTriggerIcon", "zSizeIcon", "zStrokeWidthIcon", "zWave"], exportAs: ["zButton"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
416
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: ZQrCodeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
417
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: ZQrCodeComponent, isStandalone: true, selector: "z-qrcode", inputs: { zValue: { classPropertyName: "zValue", publicName: "zValue", isSignal: true, isRequired: true, transformFunction: null }, zSize: { classPropertyName: "zSize", publicName: "zSize", isSignal: true, isRequired: false, transformFunction: null }, zLevel: { classPropertyName: "zLevel", publicName: "zLevel", isSignal: true, isRequired: false, transformFunction: null }, zLogo: { classPropertyName: "zLogo", publicName: "zLogo", isSignal: true, isRequired: false, transformFunction: null }, zLogoSize: { classPropertyName: "zLogoSize", publicName: "zLogoSize", isSignal: true, isRequired: false, transformFunction: null }, zLogoBgColor: { classPropertyName: "zLogoBgColor", publicName: "zLogoBgColor", isSignal: true, isRequired: false, transformFunction: null }, zLogoBgShape: { classPropertyName: "zLogoBgShape", publicName: "zLogoBgShape", isSignal: true, isRequired: false, transformFunction: null }, zLogoPadding: { classPropertyName: "zLogoPadding", publicName: "zLogoPadding", isSignal: true, isRequired: false, transformFunction: null }, zFgColor: { classPropertyName: "zFgColor", publicName: "zFgColor", isSignal: true, isRequired: false, transformFunction: null }, zBgColor: { classPropertyName: "zBgColor", publicName: "zBgColor", isSignal: true, isRequired: false, transformFunction: null }, zDotStyle: { classPropertyName: "zDotStyle", publicName: "zDotStyle", isSignal: true, isRequired: false, transformFunction: null }, zEyeStyle: { classPropertyName: "zEyeStyle", publicName: "zEyeStyle", isSignal: true, isRequired: false, transformFunction: null }, zEyeColor: { classPropertyName: "zEyeColor", publicName: "zEyeColor", isSignal: true, isRequired: false, transformFunction: null }, zMargin: { classPropertyName: "zMargin", publicName: "zMargin", isSignal: true, isRequired: false, transformFunction: null }, zFgGradient: { classPropertyName: "zFgGradient", publicName: "zFgGradient", isSignal: true, isRequired: false, transformFunction: null }, zFrame: { classPropertyName: "zFrame", publicName: "zFrame", isSignal: true, isRequired: false, transformFunction: null }, zFrameText: { classPropertyName: "zFrameText", publicName: "zFrameText", isSignal: true, isRequired: false, transformFunction: null }, zFrameColor: { classPropertyName: "zFrameColor", publicName: "zFrameColor", isSignal: true, isRequired: false, transformFunction: null }, zFramePadding: { classPropertyName: "zFramePadding", publicName: "zFramePadding", isSignal: true, isRequired: false, transformFunction: null }, zFrameBorderRadius: { classPropertyName: "zFrameBorderRadius", publicName: "zFrameBorderRadius", isSignal: true, isRequired: false, transformFunction: null }, zDownloadable: { classPropertyName: "zDownloadable", publicName: "zDownloadable", isSignal: true, isRequired: false, transformFunction: null }, zDownloadButton: { classPropertyName: "zDownloadButton", publicName: "zDownloadButton", isSignal: true, isRequired: false, transformFunction: null }, zShadow: { classPropertyName: "zShadow", publicName: "zShadow", isSignal: true, isRequired: false, transformFunction: null }, zLoading: { classPropertyName: "zLoading", publicName: "zLoading", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "_canvasRef", first: true, predicate: ["qrCanvas"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"z-qrcode-container relative flex flex-col items-center\">\n <div\n class=\"z-qrcode-canvas-wrapper relative transition-all duration-200\"\n [class.shadow-md]=\"zShadow()\"\n [style.border-radius]=\"frameBorderRadiusStyle()\"\n [style.overflow]=\"zFrame() !== 'none' || zShadow() ? 'hidden' : 'visible'\">\n <canvas\n #qrCanvas\n class=\"block\"\n [style.width.px]=\"zFrame() !== 'none' ? zSize() + zFramePadding() * 2 : zSize()\"\n [style.height.px]=\"\n zFrame() !== 'none'\n ? zSize() + zFramePadding() * 2 + (zFrame() === 'text-bottom' || zFrame() === 'text-top' ? 50 : 0)\n : zSize()\n \"></canvas>\n\n @if (zLoading()) {\n <div class=\"absolute inset-0 z-10 flex items-center justify-center bg-white/80 transition-opacity\">\n <svg\n class=\"h-8 w-8 animate-spin text-slate-800\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\">\n <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\" />\n <path\n class=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\" />\n </svg>\n </div>\n }\n\n @if (zDownloadable() && !zLoading()) {\n <div\n class=\"absolute inset-0 z-10 flex items-center justify-center rounded-md bg-black/45 opacity-0 transition-all duration-200 hover:opacity-100\">\n <button\n z-button\n [zWave]=\"false\"\n zSize=\"sm\"\n (click)=\"downloadQr()\"\n class=\"flex cursor-pointer items-center gap-2 font-semibold select-none\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"h-4 w-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\">\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4\" />\n </svg>\n {{ downloadText() | translate }}\n </button>\n </div>\n }\n </div>\n\n @if (zDownloadButton() && !zLoading()) {\n <div class=\"mt-4\">\n <button\n z-button\n [zWave]=\"false\"\n (click)=\"downloadQr()\"\n class=\"flex cursor-pointer items-center gap-2 font-semibold select-none\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"h-4 w-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\">\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4\" />\n </svg>\n {{ downloadText() | translate }}\n </button>\n </div>\n }\n</div>\n", styles: ["z-qrcode{display:inline-block;line-height:0}z-qrcode .z-qrcode-container{position:relative;display:inline-flex;flex-direction:column;align-items:center;border-radius:inherit}z-qrcode .z-qrcode-canvas-wrapper{position:relative;overflow:hidden;border-radius:inherit}\n"], dependencies: [{ kind: "component", type: ZButtonComponent, selector: "z-button, button[z-button], a[z-button]", inputs: ["class", "zType", "zSize", "zShape", "zLabel", "zLoading", "zDisabled", "zTypeIcon", "zAnimatedTypeIcon", "zAnimateIcon", "zAnimationTriggerIcon", "zSizeIcon", "zStrokeWidthIcon", "zWave"], exportAs: ["zButton"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
394
418
  }
395
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: ZQrCodeComponent, decorators: [{
419
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: ZQrCodeComponent, decorators: [{
396
420
  type: Component,
397
- args: [{ selector: 'z-qrcode', imports: [TranslatePipe, ZButtonComponent], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div class=\"z-qrcode-container relative flex flex-col items-center\">\n <div\n class=\"z-qrcode-canvas-wrapper relative transition-all duration-200\"\n [class.shadow-md]=\"zShadow()\"\n [style.border-radius.px]=\"zFrame() !== 'none' || zShadow() ? zFrameBorderRadius() : 0\"\n [style.overflow]=\"zFrame() !== 'none' || zShadow() ? 'hidden' : 'visible'\">\n <canvas\n #qrCanvas\n class=\"block\"\n [style.width.px]=\"zFrame() !== 'none' ? zSize() + zFramePadding() * 2 : zSize()\"\n [style.height.px]=\"\n zFrame() !== 'none'\n ? zSize() + zFramePadding() * 2 + (zFrame() === 'text-bottom' || zFrame() === 'text-top' ? 50 : 0)\n : zSize()\n \"></canvas>\n\n @if (zLoading()) {\n <div class=\"absolute inset-0 z-10 flex items-center justify-center bg-white/80 transition-opacity\">\n <svg\n class=\"h-8 w-8 animate-spin text-slate-800\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\">\n <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\" />\n <path\n class=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\" />\n </svg>\n </div>\n }\n\n @if (zDownloadable() && !zLoading()) {\n <div\n class=\"absolute inset-0 z-10 flex items-center justify-center rounded-md bg-black/45 opacity-0 transition-all duration-200 hover:opacity-100\">\n <button\n z-button\n [zWave]=\"false\"\n zSize=\"sm\"\n (click)=\"downloadQr()\"\n class=\"flex cursor-pointer items-center gap-2 font-semibold select-none\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"h-4 w-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\">\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4\" />\n </svg>\n {{ downloadText() | translate }}\n </button>\n </div>\n }\n </div>\n\n @if (zDownloadButton() && !zLoading()) {\n <div class=\"mt-4\">\n <button\n z-button\n [zWave]=\"false\"\n (click)=\"downloadQr()\"\n class=\"flex cursor-pointer items-center gap-2 font-semibold select-none\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"h-4 w-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\">\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4\" />\n </svg>\n {{ downloadText() | translate }}\n </button>\n </div>\n }\n</div>\n", styles: ["z-qrcode{display:inline-block;line-height:0}z-qrcode .z-qrcode-container{position:relative;display:inline-flex;flex-direction:column;align-items:center;border-radius:inherit}z-qrcode .z-qrcode-canvas-wrapper{position:relative;overflow:hidden;border-radius:inherit}\n"] }]
421
+ args: [{ selector: 'z-qrcode', imports: [TranslatePipe, ZButtonComponent], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div class=\"z-qrcode-container relative flex flex-col items-center\">\n <div\n class=\"z-qrcode-canvas-wrapper relative transition-all duration-200\"\n [class.shadow-md]=\"zShadow()\"\n [style.border-radius]=\"frameBorderRadiusStyle()\"\n [style.overflow]=\"zFrame() !== 'none' || zShadow() ? 'hidden' : 'visible'\">\n <canvas\n #qrCanvas\n class=\"block\"\n [style.width.px]=\"zFrame() !== 'none' ? zSize() + zFramePadding() * 2 : zSize()\"\n [style.height.px]=\"\n zFrame() !== 'none'\n ? zSize() + zFramePadding() * 2 + (zFrame() === 'text-bottom' || zFrame() === 'text-top' ? 50 : 0)\n : zSize()\n \"></canvas>\n\n @if (zLoading()) {\n <div class=\"absolute inset-0 z-10 flex items-center justify-center bg-white/80 transition-opacity\">\n <svg\n class=\"h-8 w-8 animate-spin text-slate-800\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\">\n <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\" />\n <path\n class=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\" />\n </svg>\n </div>\n }\n\n @if (zDownloadable() && !zLoading()) {\n <div\n class=\"absolute inset-0 z-10 flex items-center justify-center rounded-md bg-black/45 opacity-0 transition-all duration-200 hover:opacity-100\">\n <button\n z-button\n [zWave]=\"false\"\n zSize=\"sm\"\n (click)=\"downloadQr()\"\n class=\"flex cursor-pointer items-center gap-2 font-semibold select-none\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"h-4 w-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\">\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4\" />\n </svg>\n {{ downloadText() | translate }}\n </button>\n </div>\n }\n </div>\n\n @if (zDownloadButton() && !zLoading()) {\n <div class=\"mt-4\">\n <button\n z-button\n [zWave]=\"false\"\n (click)=\"downloadQr()\"\n class=\"flex cursor-pointer items-center gap-2 font-semibold select-none\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"h-4 w-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\">\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4\" />\n </svg>\n {{ downloadText() | translate }}\n </button>\n </div>\n }\n</div>\n", styles: ["z-qrcode{display:inline-block;line-height:0}z-qrcode .z-qrcode-container{position:relative;display:inline-flex;flex-direction:column;align-items:center;border-radius:inherit}z-qrcode .z-qrcode-canvas-wrapper{position:relative;overflow:hidden;border-radius:inherit}\n"] }]
398
422
  }], ctorParameters: () => [], propDecorators: { zValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "zValue", required: true }] }], zSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "zSize", required: false }] }], zLevel: [{ type: i0.Input, args: [{ isSignal: true, alias: "zLevel", required: false }] }], zLogo: [{ type: i0.Input, args: [{ isSignal: true, alias: "zLogo", required: false }] }], zLogoSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "zLogoSize", required: false }] }], zLogoBgColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "zLogoBgColor", required: false }] }], zLogoBgShape: [{ type: i0.Input, args: [{ isSignal: true, alias: "zLogoBgShape", required: false }] }], zLogoPadding: [{ type: i0.Input, args: [{ isSignal: true, alias: "zLogoPadding", required: false }] }], zFgColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "zFgColor", required: false }] }], zBgColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "zBgColor", required: false }] }], zDotStyle: [{ type: i0.Input, args: [{ isSignal: true, alias: "zDotStyle", required: false }] }], zEyeStyle: [{ type: i0.Input, args: [{ isSignal: true, alias: "zEyeStyle", required: false }] }], zEyeColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "zEyeColor", required: false }] }], zMargin: [{ type: i0.Input, args: [{ isSignal: true, alias: "zMargin", required: false }] }], zFgGradient: [{ type: i0.Input, args: [{ isSignal: true, alias: "zFgGradient", required: false }] }], zFrame: [{ type: i0.Input, args: [{ isSignal: true, alias: "zFrame", required: false }] }], zFrameText: [{ type: i0.Input, args: [{ isSignal: true, alias: "zFrameText", required: false }] }], zFrameColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "zFrameColor", required: false }] }], zFramePadding: [{ type: i0.Input, args: [{ isSignal: true, alias: "zFramePadding", required: false }] }], zFrameBorderRadius: [{ type: i0.Input, args: [{ isSignal: true, alias: "zFrameBorderRadius", required: false }] }], zDownloadable: [{ type: i0.Input, args: [{ isSignal: true, alias: "zDownloadable", required: false }] }], zDownloadButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "zDownloadButton", required: false }] }], zShadow: [{ type: i0.Input, args: [{ isSignal: true, alias: "zShadow", required: false }] }], zLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "zLoading", required: false }] }], _canvasRef: [{ type: i0.ViewChild, args: ['qrCanvas', { isSignal: true }] }] } });
399
423
 
400
424
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"shival99-z-ui-components-z-qrcode.mjs","sources":["../../../../libs/core-ui/components/z-qrcode/z-qrcode.component.ts","../../../../libs/core-ui/components/z-qrcode/z-qrcode.component.html","../../../../libs/core-ui/components/z-qrcode/shival99-z-ui-components-z-qrcode.ts"],"sourcesContent":["import { isPlatformBrowser } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n input,\n PLATFORM_ID,\n signal,\n viewChild,\n effect,\n ViewEncapsulation,\n} from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ZButtonComponent } from '@shival99/z-ui/components/z-button';\nimport { zTransform } from '@shival99/z-ui/utils';\nimport * as QRCode from 'qrcode';\nimport {\n ZQrCodeDotStyle,\n ZQrCodeErrorCorrectionLevel,\n ZQrCodeEyeStyle,\n ZQrCodeFrame,\n ZQrCodeGradient,\n} from './z-qrcode.types';\n\n@Component({\n selector: 'z-qrcode',\n imports: [TranslatePipe, ZButtonComponent],\n standalone: true,\n templateUrl: './z-qrcode.component.html',\n styleUrl: './z-qrcode.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class ZQrCodeComponent {\n // Inputs\n public readonly zValue = input.required<string>();\n public readonly zSize = input<number>(256);\n public readonly zLevel = input<ZQrCodeErrorCorrectionLevel>('H');\n public readonly zLogo = input<string>('');\n public readonly zLogoSize = input<number>(0.2); // 20% of QR size\n public readonly zLogoBgColor = input<string>('#ffffff');\n public readonly zLogoBgShape = input<'circle' | 'square' | 'none'>('circle');\n public readonly zLogoPadding = input<number>(4);\n public readonly zFgColor = input<string>('#000000');\n public readonly zBgColor = input<string>('#ffffff');\n public readonly zDotStyle = input<ZQrCodeDotStyle>('square');\n public readonly zEyeStyle = input<ZQrCodeEyeStyle>('square');\n public readonly zEyeColor = input<string>(''); // if empty, falls back to zFgColor\n public readonly zMargin = input<number>(4); // margin in modules\n public readonly zFgGradient = input<ZQrCodeGradient>();\n public readonly zFrame = input<ZQrCodeFrame>('none');\n public readonly zFrameText = input<string>('SCAN ME');\n public readonly zFrameColor = input<string>('#0f172a');\n public readonly zFramePadding = input<number>(12); // padding around QR inside frame\n public readonly zFrameBorderRadius = input<number>(12); // border radius of the frame\n public readonly zDownloadable = input(false, { transform: zTransform }); // toggles hover overlay button\n public readonly zDownloadButton = input(false, { transform: zTransform }); // toggles standalone button below\n public readonly zShadow = input(true, { transform: zTransform }); // Bật/tắt đổ bóng khung ngoài\n public readonly zLoading = input(false, { transform: zTransform });\n\n // DOM references\n private readonly _canvasRef = viewChild<ElementRef<HTMLCanvasElement>>('qrCanvas');\n private readonly _platformId = inject(PLATFORM_ID);\n\n // States\n protected readonly downloadText = signal('i18n_z_ui_qrcode_download');\n\n constructor() {\n // Re-render when any signal inputs change\n effect(() => {\n if (isPlatformBrowser(this._platformId)) {\n void this.renderQrCode();\n }\n });\n }\n\n /**\n * Renders the stylized QR code onto the canvas element\n */\n public async renderQrCode(): Promise<void> {\n const canvas = this._canvasRef()?.nativeElement;\n if (!canvas) {\n return;\n }\n\n const value = this.zValue();\n const size = this.zSize();\n const level = this.zLevel();\n const fgColor = this.zFgColor();\n const bgColor = this.zBgColor();\n const dotStyle = this.zDotStyle();\n const eyeStyle = this.zEyeStyle();\n const eyeColorInput = this.zEyeColor();\n const logoUrl = this.zLogo();\n const frame = this.zFrame();\n const dpr = isPlatformBrowser(this._platformId) ? window.devicePixelRatio || 1 : 1;\n const framePadding = frame !== 'none' ? this.zFramePadding() : 0;\n const frameBorderRadius = this.zFrameBorderRadius();\n\n const bannerHeight = frame === 'text-bottom' || frame === 'text-top' ? 50 : 0;\n const cssWidth = size + framePadding * 2;\n const cssHeight = size + framePadding * 2 + bannerHeight;\n canvas.width = cssWidth * dpr;\n canvas.height = cssHeight * dpr;\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n return;\n }\n\n ctx.scale(dpr, dpr);\n\n // Clear background\n ctx.fillStyle = bgColor;\n ctx.fillRect(0, 0, cssWidth, cssHeight);\n\n if (frame !== 'none') {\n // Draw rounded frame container\n ctx.fillStyle = bgColor;\n ctx.beginPath();\n this._drawRoundedRectPath(ctx, 0, 0, cssWidth, cssHeight, frameBorderRadius);\n ctx.fill();\n\n // Draw border outline\n ctx.strokeStyle = this.zFrameColor();\n ctx.lineWidth = 1.5;\n ctx.beginPath();\n this._drawRoundedRectPath(ctx, 0.75, 0.75, cssWidth - 1.5, cssHeight - 1.5, frameBorderRadius);\n ctx.stroke();\n }\n\n try {\n // Create raw QR code matrix\n const qr = QRCode.create(value, { errorCorrectionLevel: level });\n const moduleCount = qr.modules.size;\n const marginModules = this.zMargin();\n const drawSize = size;\n\n // Calculate module size\n const moduleSize = drawSize / (moduleCount + 2 * marginModules);\n const marginOffset = marginModules * moduleSize;\n\n // Draw offsets\n let xOffset = 0;\n let yOffset = 0;\n if (frame !== 'none') {\n xOffset = framePadding;\n yOffset = frame === 'text-top' ? framePadding + bannerHeight : framePadding;\n }\n\n // 1. Prepare foreground style (solid or gradient)\n let fillStyle: string | CanvasGradient = fgColor;\n const gradientOpt = this.zFgGradient();\n if (gradientOpt && gradientOpt.colors && gradientOpt.colors.length > 0) {\n fillStyle = this._getGradientStyle(ctx, gradientOpt, drawSize, xOffset, yOffset, marginOffset);\n }\n\n const eyeColor = eyeColorInput || fillStyle;\n\n // 2. Draw normal modules (skip eyes and central logo)\n ctx.fillStyle = fillStyle;\n\n // Calculate logo skip boundary\n const hasLogo = !!logoUrl;\n const logoModules = Math.ceil(moduleCount * this.zLogoSize());\n const logoStart = Math.floor((moduleCount - logoModules) / 2);\n const logoEnd = logoStart + logoModules;\n\n for (let r = 0; r < moduleCount; r++) {\n for (let c = 0; c < moduleCount; c++) {\n // Check if it's top-left, top-right, or bottom-left eye\n const isTopLeftEye = r < 7 && c < 7;\n const isTopRightEye = r < 7 && c >= moduleCount - 7;\n const isBottomLeftEye = r >= moduleCount - 7 && c < 7;\n\n if (isTopLeftEye || isTopRightEye || isBottomLeftEye) {\n continue;\n }\n\n // Check if overlapping logo area\n if (hasLogo && r >= logoStart && r < logoEnd && c >= logoStart && c < logoEnd) {\n continue;\n }\n\n const isDark = qr.modules.get(r, c) === 1; // standard raw check\n if (!isDark) {\n continue;\n }\n\n const x = xOffset + marginOffset + c * moduleSize;\n const y = yOffset + marginOffset + r * moduleSize;\n\n this._drawDot(ctx, x, y, moduleSize, dotStyle);\n }\n }\n\n // 3. Draw Eyes\n const eyeCoords = [\n { x: xOffset + marginOffset, y: yOffset + marginOffset }, // Top Left\n { x: xOffset + marginOffset + (moduleCount - 7) * moduleSize, y: yOffset + marginOffset }, // Top Right\n { x: xOffset + marginOffset, y: yOffset + marginOffset + (moduleCount - 7) * moduleSize }, // Bottom Left\n ];\n\n eyeCoords.forEach(coord => {\n this._drawEye(ctx, coord.x, coord.y, moduleSize, eyeStyle, eyeColor);\n });\n\n // 4. Draw central logo if specified\n if (hasLogo) {\n await this._drawLogo(ctx, xOffset + marginOffset, yOffset, drawSize, logoUrl);\n }\n\n // 5. Draw Frame details\n if (frame === 'text-bottom' || frame === 'text-top') {\n const bannerY = frame === 'text-bottom' ? framePadding + size : framePadding;\n this._drawFrame(ctx, cssWidth, bannerY, bannerHeight, this.zFrameText(), this.zFrameColor());\n }\n } catch (err) {\n console.error('Error generating QR code:', err);\n }\n }\n\n /**\n * Helper function to get gradient style fill (no else branches)\n */\n private _getGradientStyle(\n ctx: CanvasRenderingContext2D,\n gradientOpt: ZQrCodeGradient,\n drawSize: number,\n xOffset: number,\n yOffset: number,\n marginOffset: number\n ): CanvasGradient {\n if (gradientOpt.type === 'radial') {\n const cx = drawSize / 2 + xOffset;\n const cy = drawSize / 2 + yOffset;\n const r = (drawSize / 2) * 1.2;\n const grad = ctx.createRadialGradient(cx, cy, 0, cx, cy, r);\n gradientOpt.colors.forEach((c, idx) => {\n grad.addColorStop(idx / (gradientOpt.colors.length - 1), c);\n });\n return grad;\n }\n\n // Default to linear\n const angle = gradientOpt.angle ?? 45;\n const rad = (angle * Math.PI) / 180;\n const x1 = Math.cos(rad) * 0;\n const y1 = Math.sin(rad) * 0;\n const x2 = Math.cos(rad) * drawSize + x1;\n const y2 = Math.sin(rad) * drawSize + y1;\n const grad = ctx.createLinearGradient(\n x1 + xOffset + marginOffset,\n y1 + yOffset + marginOffset,\n x2 + xOffset + marginOffset,\n y2 + yOffset + marginOffset\n );\n gradientOpt.colors.forEach((c, idx) => {\n grad.addColorStop(idx / (gradientOpt.colors.length - 1), c);\n });\n return grad;\n }\n\n /**\n * Helper function to draw dynamic dot module style (no else branches)\n */\n private _drawDot(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n moduleSize: number,\n dotStyle: ZQrCodeDotStyle\n ): void {\n ctx.beginPath();\n if (dotStyle === 'dots') {\n ctx.arc(x + moduleSize / 2, y + moduleSize / 2, (moduleSize / 2) * 0.95, 0, Math.PI * 2);\n ctx.fill();\n return;\n }\n\n if (dotStyle === 'rounded') {\n this._drawRoundedRectPath(\n ctx,\n x + moduleSize * 0.05,\n y + moduleSize * 0.05,\n moduleSize * 0.9,\n moduleSize * 0.9,\n moduleSize * 0.3\n );\n ctx.fill();\n return;\n }\n\n // Default to square\n ctx.fillRect(x, y, moduleSize, moduleSize);\n }\n\n /**\n * Helper path function for rounded corners (no else branches)\n */\n private _drawRoundedRectPath(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n w: number,\n h: number,\n r: number,\n counterClockwise = false\n ): void {\n if (r > w / 2) {\n r = w / 2;\n }\n if (r > h / 2) {\n r = h / 2;\n }\n\n ctx.moveTo(x + r, y);\n if (counterClockwise) {\n ctx.lineTo(x + r, y);\n ctx.arcTo(x, y, x, y + r, r);\n ctx.lineTo(x, y + h - r);\n ctx.arcTo(x, x + h, x + r, y + h, r);\n ctx.lineTo(x + w - r, y + h);\n ctx.arcTo(x + w, y + h, x + w, y + h - r, r);\n ctx.lineTo(x + w, y + r);\n ctx.arcTo(x + w, y, x + w - r, y, r);\n ctx.closePath();\n return;\n }\n\n ctx.lineTo(x + w - r, y);\n ctx.arcTo(x + w, y, x + w, y + r, r);\n ctx.lineTo(x + w, y + h - r);\n ctx.arcTo(x + w, y + h, x + w - r, y + h, r);\n ctx.lineTo(x + r, y + h);\n ctx.arcTo(x, y + h, x, y + h - r, r);\n ctx.lineTo(x, y + r);\n ctx.arcTo(x, y, x + r, y, r);\n ctx.closePath();\n }\n\n /**\n * Draw eye pattern (no else branches)\n */\n private _drawEye(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n moduleSize: number,\n style: ZQrCodeEyeStyle,\n color: string | CanvasGradient\n ): void {\n ctx.save();\n ctx.fillStyle = color;\n\n const outerSize = 7 * moduleSize;\n const innerSize = 3 * moduleSize;\n const innerOffset = 2 * moduleSize;\n\n if (style === 'circle') {\n ctx.beginPath();\n ctx.arc(x + outerSize / 2, y + outerSize / 2, outerSize / 2, 0, Math.PI * 2);\n ctx.arc(x + outerSize / 2, y + outerSize / 2, outerSize / 2 - moduleSize, 0, Math.PI * 2, true);\n ctx.fill();\n\n ctx.beginPath();\n ctx.arc(x + outerSize / 2, y + outerSize / 2, innerSize / 2, 0, Math.PI * 2);\n ctx.fill();\n ctx.restore();\n return;\n }\n\n if (style === 'rounded') {\n const outerRadius = 2 * moduleSize;\n const innerRadius = moduleSize;\n\n ctx.beginPath();\n this._drawRoundedRectPath(ctx, x, y, outerSize, outerSize, outerRadius);\n this._drawRoundedRectPath(\n ctx,\n x + moduleSize,\n y + moduleSize,\n outerSize - 2 * moduleSize,\n outerSize - 2 * moduleSize,\n outerRadius - moduleSize,\n true\n );\n ctx.fill();\n\n ctx.beginPath();\n this._drawRoundedRectPath(ctx, x + innerOffset, y + innerOffset, innerSize, innerSize, innerRadius);\n ctx.fill();\n ctx.restore();\n return;\n }\n\n // Default to square\n ctx.fillRect(x, y, outerSize, outerSize);\n ctx.clearRect(x + moduleSize, y + moduleSize, outerSize - 2 * moduleSize, outerSize - 2 * moduleSize);\n ctx.fillRect(x + innerOffset, y + innerOffset, innerSize, innerSize);\n ctx.restore();\n }\n\n /**\n * Load and render the central logo on canvas (no else branches)\n */\n private _drawLogo(\n ctx: CanvasRenderingContext2D,\n marginOffset: number,\n yOffset: number,\n drawSize: number,\n logoUrl: string\n ): Promise<void> {\n return new Promise(resolve => {\n const img = new Image();\n img.crossOrigin = 'anonymous'; // prevent tainted canvas\n img.src = logoUrl;\n\n img.onload = () => {\n const logoBoxSize = drawSize * this.zLogoSize();\n const logoBoxX = marginOffset + (drawSize - 2 * marginOffset - logoBoxSize) / 2;\n const logoBoxY = marginOffset + (drawSize - 2 * marginOffset - logoBoxSize) / 2 + yOffset;\n\n ctx.save();\n\n // 1. Draw logo mask background (circle or square)\n const bgShape = this.zLogoBgShape();\n if (bgShape === 'circle') {\n ctx.fillStyle = this.zLogoBgColor();\n ctx.beginPath();\n ctx.arc(logoBoxX + logoBoxSize / 2, logoBoxY + logoBoxSize / 2, logoBoxSize / 2, 0, Math.PI * 2);\n ctx.fill();\n }\n if (bgShape === 'square') {\n ctx.fillStyle = this.zLogoBgColor();\n ctx.beginPath();\n this._drawRoundedRectPath(ctx, logoBoxX, logoBoxY, logoBoxSize, logoBoxSize, logoBoxSize * 0.2);\n ctx.fill();\n }\n\n // 2. Draw logo image centered\n const padding = this.zLogoPadding();\n const logoImgSize = logoBoxSize - padding * 2;\n const logoImgX = logoBoxX + padding;\n const logoImgY = logoBoxY + padding;\n\n if (bgShape === 'circle') {\n // Clip to circle so non-circle logos look neat\n ctx.beginPath();\n ctx.arc(logoBoxX + logoBoxSize / 2, logoBoxY + logoBoxSize / 2, logoImgSize / 2, 0, Math.PI * 2);\n ctx.clip();\n }\n\n ctx.drawImage(img, logoImgX, logoImgY, logoImgSize, logoImgSize);\n ctx.restore();\n resolve();\n };\n\n img.onerror = () => {\n console.warn('Failed to load QR code logo from URL:', logoUrl);\n resolve(); // resolve anyway to avoid blocking execution\n };\n });\n }\n\n private _drawFrame(\n ctx: CanvasRenderingContext2D,\n width: number,\n bannerY: number,\n bannerHeight: number,\n text: string,\n frameColor: string\n ): void {\n ctx.save();\n\n // Draw pill badge for standard frame aesthetic\n ctx.fillStyle = frameColor;\n const pillWidth = width * 0.75;\n const pillHeight = 28;\n const pillX = (width - pillWidth) / 2;\n const pillY = bannerY + (bannerHeight - pillHeight) / 2;\n\n ctx.beginPath();\n this._drawRoundedRectPath(ctx, pillX, pillY, pillWidth, pillHeight, pillHeight / 2);\n ctx.fill();\n\n // Render banner text\n ctx.fillStyle = '#ffffff';\n ctx.font = 'bold 12px var(--font-sans, system-ui, sans-serif)';\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n ctx.fillText(text, width / 2, pillY + pillHeight / 2);\n\n ctx.restore();\n }\n\n /**\n * Download the generated canvas QR Code as a PNG image file\n */\n protected downloadQr(): void {\n const canvas = this._canvasRef()?.nativeElement;\n if (!canvas) {\n return;\n }\n\n const dataUrl = canvas.toDataURL('image/png');\n const link = document.createElement('a');\n link.href = dataUrl;\n link.download = `qrcode_${Date.now()}.png`;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n}\n","<div class=\"z-qrcode-container relative flex flex-col items-center\">\n <div\n class=\"z-qrcode-canvas-wrapper relative transition-all duration-200\"\n [class.shadow-md]=\"zShadow()\"\n [style.border-radius.px]=\"zFrame() !== 'none' || zShadow() ? zFrameBorderRadius() : 0\"\n [style.overflow]=\"zFrame() !== 'none' || zShadow() ? 'hidden' : 'visible'\">\n <canvas\n #qrCanvas\n class=\"block\"\n [style.width.px]=\"zFrame() !== 'none' ? zSize() + zFramePadding() * 2 : zSize()\"\n [style.height.px]=\"\n zFrame() !== 'none'\n ? zSize() + zFramePadding() * 2 + (zFrame() === 'text-bottom' || zFrame() === 'text-top' ? 50 : 0)\n : zSize()\n \"></canvas>\n\n @if (zLoading()) {\n <div class=\"absolute inset-0 z-10 flex items-center justify-center bg-white/80 transition-opacity\">\n <svg\n class=\"h-8 w-8 animate-spin text-slate-800\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\">\n <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\" />\n <path\n class=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\" />\n </svg>\n </div>\n }\n\n @if (zDownloadable() && !zLoading()) {\n <div\n class=\"absolute inset-0 z-10 flex items-center justify-center rounded-md bg-black/45 opacity-0 transition-all duration-200 hover:opacity-100\">\n <button\n z-button\n [zWave]=\"false\"\n zSize=\"sm\"\n (click)=\"downloadQr()\"\n class=\"flex cursor-pointer items-center gap-2 font-semibold select-none\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"h-4 w-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\">\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4\" />\n </svg>\n {{ downloadText() | translate }}\n </button>\n </div>\n }\n </div>\n\n @if (zDownloadButton() && !zLoading()) {\n <div class=\"mt-4\">\n <button\n z-button\n [zWave]=\"false\"\n (click)=\"downloadQr()\"\n class=\"flex cursor-pointer items-center gap-2 font-semibold select-none\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"h-4 w-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\">\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4\" />\n </svg>\n {{ downloadText() | translate }}\n </button>\n </div>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shival99-z-ui-components-z-qrcode.mjs","sources":["../../../../libs/core-ui/components/z-qrcode/z-qrcode.component.ts","../../../../libs/core-ui/components/z-qrcode/z-qrcode.component.html","../../../../libs/core-ui/components/z-qrcode/shival99-z-ui-components-z-qrcode.ts"],"sourcesContent":["import { isPlatformBrowser } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n PLATFORM_ID,\n signal,\n viewChild,\n effect,\n ViewEncapsulation,\n} from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ZButtonComponent } from '@shival99/z-ui/components/z-button';\nimport { zTransform } from '@shival99/z-ui/utils';\nimport * as QRCode from 'qrcode';\nimport {\n ZQrCodeDotStyle,\n ZQrCodeErrorCorrectionLevel,\n ZQrCodeEyeStyle,\n ZQrCodeFrame,\n ZQrCodeGradient,\n} from './z-qrcode.types';\n\n@Component({\n selector: 'z-qrcode',\n imports: [TranslatePipe, ZButtonComponent],\n standalone: true,\n templateUrl: './z-qrcode.component.html',\n styleUrl: './z-qrcode.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class ZQrCodeComponent {\n // Inputs\n public readonly zValue = input.required<string>();\n public readonly zSize = input<number>(256);\n public readonly zLevel = input<ZQrCodeErrorCorrectionLevel>('H');\n public readonly zLogo = input<string>('');\n public readonly zLogoSize = input<number>(0.2); // 20% of QR size\n public readonly zLogoBgColor = input<string>('#ffffff');\n public readonly zLogoBgShape = input<'circle' | 'square' | 'none'>('circle');\n public readonly zLogoPadding = input<number>(4);\n public readonly zFgColor = input<string>('#000000');\n public readonly zBgColor = input<string>('#ffffff');\n public readonly zDotStyle = input<ZQrCodeDotStyle>('square');\n public readonly zEyeStyle = input<ZQrCodeEyeStyle>('square');\n public readonly zEyeColor = input<string>(''); // if empty, falls back to zFgColor\n public readonly zMargin = input<number>(4); // margin in modules\n public readonly zFgGradient = input<ZQrCodeGradient>();\n public readonly zFrame = input<ZQrCodeFrame>('none');\n public readonly zFrameText = input<string>('SCAN ME');\n public readonly zFrameColor = input<string>('#0f172a');\n public readonly zFramePadding = input<number>(12); // padding around QR inside frame\n // Border radius of the frame; falls back to the theme's --radius-lg when unset\n public readonly zFrameBorderRadius = input<number | undefined>(undefined);\n public readonly zDownloadable = input(false, { transform: zTransform }); // toggles hover overlay button\n public readonly zDownloadButton = input(false, { transform: zTransform }); // toggles standalone button below\n public readonly zShadow = input(true, { transform: zTransform }); // Bật/tắt đổ bóng khung ngoài\n public readonly zLoading = input(false, { transform: zTransform });\n\n // DOM references\n private readonly _canvasRef = viewChild<ElementRef<HTMLCanvasElement>>('qrCanvas');\n private readonly _platformId = inject(PLATFORM_ID);\n\n // States\n protected readonly downloadText = signal('i18n_z_ui_qrcode_download');\n\n protected readonly frameBorderRadiusStyle = computed(() => {\n if (this.zFrame() === 'none' && !this.zShadow()) {\n return '0px';\n }\n const explicit = this.zFrameBorderRadius();\n return explicit !== undefined ? `${explicit}px` : 'var(--radius-lg)';\n });\n\n /** Resolves the frame radius to a px number for canvas drawing, reading the theme's --radius-lg when unset. */\n private _resolveFrameBorderRadiusPx(): number {\n const explicit = this.zFrameBorderRadius();\n if (explicit !== undefined) {\n return explicit;\n }\n\n const wrapper = this._canvasRef()?.nativeElement.parentElement;\n if (wrapper && isPlatformBrowser(this._platformId)) {\n const resolved = parseFloat(getComputedStyle(wrapper).borderRadius);\n if (!Number.isNaN(resolved)) {\n return resolved;\n }\n }\n\n return 12;\n }\n\n constructor() {\n // Re-render when any signal inputs change\n effect(() => {\n if (isPlatformBrowser(this._platformId)) {\n void this.renderQrCode();\n }\n });\n }\n\n /**\n * Renders the stylized QR code onto the canvas element\n */\n public async renderQrCode(): Promise<void> {\n const canvas = this._canvasRef()?.nativeElement;\n if (!canvas) {\n return;\n }\n\n const value = this.zValue();\n const size = this.zSize();\n const level = this.zLevel();\n const fgColor = this.zFgColor();\n const bgColor = this.zBgColor();\n const dotStyle = this.zDotStyle();\n const eyeStyle = this.zEyeStyle();\n const eyeColorInput = this.zEyeColor();\n const logoUrl = this.zLogo();\n const frame = this.zFrame();\n const dpr = isPlatformBrowser(this._platformId) ? window.devicePixelRatio || 1 : 1;\n const framePadding = frame !== 'none' ? this.zFramePadding() : 0;\n const frameBorderRadius = this._resolveFrameBorderRadiusPx();\n\n const bannerHeight = frame === 'text-bottom' || frame === 'text-top' ? 50 : 0;\n const cssWidth = size + framePadding * 2;\n const cssHeight = size + framePadding * 2 + bannerHeight;\n canvas.width = cssWidth * dpr;\n canvas.height = cssHeight * dpr;\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n return;\n }\n\n ctx.scale(dpr, dpr);\n\n // Clear background\n ctx.fillStyle = bgColor;\n ctx.fillRect(0, 0, cssWidth, cssHeight);\n\n if (frame !== 'none') {\n // Draw rounded frame container\n ctx.fillStyle = bgColor;\n ctx.beginPath();\n this._drawRoundedRectPath(ctx, 0, 0, cssWidth, cssHeight, frameBorderRadius);\n ctx.fill();\n\n // Draw border outline\n ctx.strokeStyle = this.zFrameColor();\n ctx.lineWidth = 1.5;\n ctx.beginPath();\n this._drawRoundedRectPath(ctx, 0.75, 0.75, cssWidth - 1.5, cssHeight - 1.5, frameBorderRadius);\n ctx.stroke();\n }\n\n try {\n // Create raw QR code matrix\n const qr = QRCode.create(value, { errorCorrectionLevel: level });\n const moduleCount = qr.modules.size;\n const marginModules = this.zMargin();\n const drawSize = size;\n\n // Calculate module size\n const moduleSize = drawSize / (moduleCount + 2 * marginModules);\n const marginOffset = marginModules * moduleSize;\n\n // Draw offsets\n let xOffset = 0;\n let yOffset = 0;\n if (frame !== 'none') {\n xOffset = framePadding;\n yOffset = frame === 'text-top' ? framePadding + bannerHeight : framePadding;\n }\n\n // 1. Prepare foreground style (solid or gradient)\n let fillStyle: string | CanvasGradient = fgColor;\n const gradientOpt = this.zFgGradient();\n if (gradientOpt && gradientOpt.colors && gradientOpt.colors.length > 0) {\n fillStyle = this._getGradientStyle(ctx, gradientOpt, drawSize, xOffset, yOffset, marginOffset);\n }\n\n const eyeColor = eyeColorInput || fillStyle;\n\n // 2. Draw normal modules (skip eyes and central logo)\n ctx.fillStyle = fillStyle;\n\n // Calculate logo skip boundary\n const hasLogo = !!logoUrl;\n const logoModules = Math.ceil(moduleCount * this.zLogoSize());\n const logoStart = Math.floor((moduleCount - logoModules) / 2);\n const logoEnd = logoStart + logoModules;\n\n for (let r = 0; r < moduleCount; r++) {\n for (let c = 0; c < moduleCount; c++) {\n // Check if it's top-left, top-right, or bottom-left eye\n const isTopLeftEye = r < 7 && c < 7;\n const isTopRightEye = r < 7 && c >= moduleCount - 7;\n const isBottomLeftEye = r >= moduleCount - 7 && c < 7;\n\n if (isTopLeftEye || isTopRightEye || isBottomLeftEye) {\n continue;\n }\n\n // Check if overlapping logo area\n if (hasLogo && r >= logoStart && r < logoEnd && c >= logoStart && c < logoEnd) {\n continue;\n }\n\n const isDark = qr.modules.get(r, c) === 1; // standard raw check\n if (!isDark) {\n continue;\n }\n\n const x = xOffset + marginOffset + c * moduleSize;\n const y = yOffset + marginOffset + r * moduleSize;\n\n this._drawDot(ctx, x, y, moduleSize, dotStyle);\n }\n }\n\n // 3. Draw Eyes\n const eyeCoords = [\n { x: xOffset + marginOffset, y: yOffset + marginOffset }, // Top Left\n { x: xOffset + marginOffset + (moduleCount - 7) * moduleSize, y: yOffset + marginOffset }, // Top Right\n { x: xOffset + marginOffset, y: yOffset + marginOffset + (moduleCount - 7) * moduleSize }, // Bottom Left\n ];\n\n eyeCoords.forEach(coord => {\n this._drawEye(ctx, coord.x, coord.y, moduleSize, eyeStyle, eyeColor);\n });\n\n // 4. Draw central logo if specified\n if (hasLogo) {\n await this._drawLogo(ctx, xOffset + marginOffset, yOffset, drawSize, logoUrl);\n }\n\n // 5. Draw Frame details\n if (frame === 'text-bottom' || frame === 'text-top') {\n const bannerY = frame === 'text-bottom' ? framePadding + size : framePadding;\n this._drawFrame(ctx, cssWidth, bannerY, bannerHeight, this.zFrameText(), this.zFrameColor());\n }\n } catch (err) {\n console.error('Error generating QR code:', err);\n }\n }\n\n /**\n * Helper function to get gradient style fill (no else branches)\n */\n private _getGradientStyle(\n ctx: CanvasRenderingContext2D,\n gradientOpt: ZQrCodeGradient,\n drawSize: number,\n xOffset: number,\n yOffset: number,\n marginOffset: number\n ): CanvasGradient {\n if (gradientOpt.type === 'radial') {\n const cx = drawSize / 2 + xOffset;\n const cy = drawSize / 2 + yOffset;\n const r = (drawSize / 2) * 1.2;\n const grad = ctx.createRadialGradient(cx, cy, 0, cx, cy, r);\n gradientOpt.colors.forEach((c, idx) => {\n grad.addColorStop(idx / (gradientOpt.colors.length - 1), c);\n });\n return grad;\n }\n\n // Default to linear\n const angle = gradientOpt.angle ?? 45;\n const rad = (angle * Math.PI) / 180;\n const x1 = Math.cos(rad) * 0;\n const y1 = Math.sin(rad) * 0;\n const x2 = Math.cos(rad) * drawSize + x1;\n const y2 = Math.sin(rad) * drawSize + y1;\n const grad = ctx.createLinearGradient(\n x1 + xOffset + marginOffset,\n y1 + yOffset + marginOffset,\n x2 + xOffset + marginOffset,\n y2 + yOffset + marginOffset\n );\n gradientOpt.colors.forEach((c, idx) => {\n grad.addColorStop(idx / (gradientOpt.colors.length - 1), c);\n });\n return grad;\n }\n\n /**\n * Helper function to draw dynamic dot module style (no else branches)\n */\n private _drawDot(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n moduleSize: number,\n dotStyle: ZQrCodeDotStyle\n ): void {\n ctx.beginPath();\n if (dotStyle === 'dots') {\n ctx.arc(x + moduleSize / 2, y + moduleSize / 2, (moduleSize / 2) * 0.95, 0, Math.PI * 2);\n ctx.fill();\n return;\n }\n\n if (dotStyle === 'rounded') {\n this._drawRoundedRectPath(\n ctx,\n x + moduleSize * 0.05,\n y + moduleSize * 0.05,\n moduleSize * 0.9,\n moduleSize * 0.9,\n moduleSize * 0.3\n );\n ctx.fill();\n return;\n }\n\n // Default to square\n ctx.fillRect(x, y, moduleSize, moduleSize);\n }\n\n /**\n * Helper path function for rounded corners (no else branches)\n */\n private _drawRoundedRectPath(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n w: number,\n h: number,\n r: number,\n counterClockwise = false\n ): void {\n if (r > w / 2) {\n r = w / 2;\n }\n if (r > h / 2) {\n r = h / 2;\n }\n\n ctx.moveTo(x + r, y);\n if (counterClockwise) {\n ctx.lineTo(x + r, y);\n ctx.arcTo(x, y, x, y + r, r);\n ctx.lineTo(x, y + h - r);\n ctx.arcTo(x, x + h, x + r, y + h, r);\n ctx.lineTo(x + w - r, y + h);\n ctx.arcTo(x + w, y + h, x + w, y + h - r, r);\n ctx.lineTo(x + w, y + r);\n ctx.arcTo(x + w, y, x + w - r, y, r);\n ctx.closePath();\n return;\n }\n\n ctx.lineTo(x + w - r, y);\n ctx.arcTo(x + w, y, x + w, y + r, r);\n ctx.lineTo(x + w, y + h - r);\n ctx.arcTo(x + w, y + h, x + w - r, y + h, r);\n ctx.lineTo(x + r, y + h);\n ctx.arcTo(x, y + h, x, y + h - r, r);\n ctx.lineTo(x, y + r);\n ctx.arcTo(x, y, x + r, y, r);\n ctx.closePath();\n }\n\n /**\n * Draw eye pattern (no else branches)\n */\n private _drawEye(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n moduleSize: number,\n style: ZQrCodeEyeStyle,\n color: string | CanvasGradient\n ): void {\n ctx.save();\n ctx.fillStyle = color;\n\n const outerSize = 7 * moduleSize;\n const innerSize = 3 * moduleSize;\n const innerOffset = 2 * moduleSize;\n\n if (style === 'circle') {\n ctx.beginPath();\n ctx.arc(x + outerSize / 2, y + outerSize / 2, outerSize / 2, 0, Math.PI * 2);\n ctx.arc(x + outerSize / 2, y + outerSize / 2, outerSize / 2 - moduleSize, 0, Math.PI * 2, true);\n ctx.fill();\n\n ctx.beginPath();\n ctx.arc(x + outerSize / 2, y + outerSize / 2, innerSize / 2, 0, Math.PI * 2);\n ctx.fill();\n ctx.restore();\n return;\n }\n\n if (style === 'rounded') {\n const outerRadius = 2 * moduleSize;\n const innerRadius = moduleSize;\n\n ctx.beginPath();\n this._drawRoundedRectPath(ctx, x, y, outerSize, outerSize, outerRadius);\n this._drawRoundedRectPath(\n ctx,\n x + moduleSize,\n y + moduleSize,\n outerSize - 2 * moduleSize,\n outerSize - 2 * moduleSize,\n outerRadius - moduleSize,\n true\n );\n ctx.fill();\n\n ctx.beginPath();\n this._drawRoundedRectPath(ctx, x + innerOffset, y + innerOffset, innerSize, innerSize, innerRadius);\n ctx.fill();\n ctx.restore();\n return;\n }\n\n // Default to square\n ctx.fillRect(x, y, outerSize, outerSize);\n ctx.clearRect(x + moduleSize, y + moduleSize, outerSize - 2 * moduleSize, outerSize - 2 * moduleSize);\n ctx.fillRect(x + innerOffset, y + innerOffset, innerSize, innerSize);\n ctx.restore();\n }\n\n /**\n * Load and render the central logo on canvas (no else branches)\n */\n private _drawLogo(\n ctx: CanvasRenderingContext2D,\n marginOffset: number,\n yOffset: number,\n drawSize: number,\n logoUrl: string\n ): Promise<void> {\n return new Promise(resolve => {\n const img = new Image();\n img.crossOrigin = 'anonymous'; // prevent tainted canvas\n img.src = logoUrl;\n\n img.onload = () => {\n const logoBoxSize = drawSize * this.zLogoSize();\n const logoBoxX = marginOffset + (drawSize - 2 * marginOffset - logoBoxSize) / 2;\n const logoBoxY = marginOffset + (drawSize - 2 * marginOffset - logoBoxSize) / 2 + yOffset;\n\n ctx.save();\n\n // 1. Draw logo mask background (circle or square)\n const bgShape = this.zLogoBgShape();\n if (bgShape === 'circle') {\n ctx.fillStyle = this.zLogoBgColor();\n ctx.beginPath();\n ctx.arc(logoBoxX + logoBoxSize / 2, logoBoxY + logoBoxSize / 2, logoBoxSize / 2, 0, Math.PI * 2);\n ctx.fill();\n }\n if (bgShape === 'square') {\n ctx.fillStyle = this.zLogoBgColor();\n ctx.beginPath();\n this._drawRoundedRectPath(ctx, logoBoxX, logoBoxY, logoBoxSize, logoBoxSize, logoBoxSize * 0.2);\n ctx.fill();\n }\n\n // 2. Draw logo image centered\n const padding = this.zLogoPadding();\n const logoImgSize = logoBoxSize - padding * 2;\n const logoImgX = logoBoxX + padding;\n const logoImgY = logoBoxY + padding;\n\n if (bgShape === 'circle') {\n // Clip to circle so non-circle logos look neat\n ctx.beginPath();\n ctx.arc(logoBoxX + logoBoxSize / 2, logoBoxY + logoBoxSize / 2, logoImgSize / 2, 0, Math.PI * 2);\n ctx.clip();\n }\n\n ctx.drawImage(img, logoImgX, logoImgY, logoImgSize, logoImgSize);\n ctx.restore();\n resolve();\n };\n\n img.onerror = () => {\n console.warn('Failed to load QR code logo from URL:', logoUrl);\n resolve(); // resolve anyway to avoid blocking execution\n };\n });\n }\n\n private _drawFrame(\n ctx: CanvasRenderingContext2D,\n width: number,\n bannerY: number,\n bannerHeight: number,\n text: string,\n frameColor: string\n ): void {\n ctx.save();\n\n // Draw pill badge for standard frame aesthetic\n ctx.fillStyle = frameColor;\n const pillWidth = width * 0.75;\n const pillHeight = 28;\n const pillX = (width - pillWidth) / 2;\n const pillY = bannerY + (bannerHeight - pillHeight) / 2;\n\n ctx.beginPath();\n this._drawRoundedRectPath(ctx, pillX, pillY, pillWidth, pillHeight, pillHeight / 2);\n ctx.fill();\n\n // Render banner text\n ctx.fillStyle = '#ffffff';\n ctx.font = 'bold 12px var(--font-sans, system-ui, sans-serif)';\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n ctx.fillText(text, width / 2, pillY + pillHeight / 2);\n\n ctx.restore();\n }\n\n /**\n * Download the generated canvas QR Code as a PNG image file\n */\n protected downloadQr(): void {\n const canvas = this._canvasRef()?.nativeElement;\n if (!canvas) {\n return;\n }\n\n const dataUrl = canvas.toDataURL('image/png');\n const link = document.createElement('a');\n link.href = dataUrl;\n link.download = `qrcode_${Date.now()}.png`;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n}\n","<div class=\"z-qrcode-container relative flex flex-col items-center\">\n <div\n class=\"z-qrcode-canvas-wrapper relative transition-all duration-200\"\n [class.shadow-md]=\"zShadow()\"\n [style.border-radius]=\"frameBorderRadiusStyle()\"\n [style.overflow]=\"zFrame() !== 'none' || zShadow() ? 'hidden' : 'visible'\">\n <canvas\n #qrCanvas\n class=\"block\"\n [style.width.px]=\"zFrame() !== 'none' ? zSize() + zFramePadding() * 2 : zSize()\"\n [style.height.px]=\"\n zFrame() !== 'none'\n ? zSize() + zFramePadding() * 2 + (zFrame() === 'text-bottom' || zFrame() === 'text-top' ? 50 : 0)\n : zSize()\n \"></canvas>\n\n @if (zLoading()) {\n <div class=\"absolute inset-0 z-10 flex items-center justify-center bg-white/80 transition-opacity\">\n <svg\n class=\"h-8 w-8 animate-spin text-slate-800\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\">\n <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\" />\n <path\n class=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\" />\n </svg>\n </div>\n }\n\n @if (zDownloadable() && !zLoading()) {\n <div\n class=\"absolute inset-0 z-10 flex items-center justify-center rounded-md bg-black/45 opacity-0 transition-all duration-200 hover:opacity-100\">\n <button\n z-button\n [zWave]=\"false\"\n zSize=\"sm\"\n (click)=\"downloadQr()\"\n class=\"flex cursor-pointer items-center gap-2 font-semibold select-none\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"h-4 w-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\">\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4\" />\n </svg>\n {{ downloadText() | translate }}\n </button>\n </div>\n }\n </div>\n\n @if (zDownloadButton() && !zLoading()) {\n <div class=\"mt-4\">\n <button\n z-button\n [zWave]=\"false\"\n (click)=\"downloadQr()\"\n class=\"flex cursor-pointer items-center gap-2 font-semibold select-none\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"h-4 w-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\">\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4\" />\n </svg>\n {{ downloadText() | translate }}\n </button>\n </div>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -153,8 +153,8 @@ class ZRadioComponent {
153
153
  getOptionState(option) {
154
154
  return this.isOptionChecked(option) ? 'checked' : 'unchecked';
155
155
  }
156
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: ZRadioComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
157
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.2", type: ZRadioComponent, isStandalone: true, selector: "z-radio", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, zType: { classPropertyName: "zType", publicName: "zType", isSignal: true, isRequired: false, transformFunction: null }, zSize: { classPropertyName: "zSize", publicName: "zSize", isSignal: true, isRequired: false, transformFunction: null }, zLabel: { classPropertyName: "zLabel", publicName: "zLabel", isSignal: true, isRequired: false, transformFunction: null }, zText: { classPropertyName: "zText", publicName: "zText", isSignal: true, isRequired: false, transformFunction: null }, zDisabled: { classPropertyName: "zDisabled", publicName: "zDisabled", isSignal: true, isRequired: false, transformFunction: null }, zValue: { classPropertyName: "zValue", publicName: "zValue", isSignal: true, isRequired: false, transformFunction: null }, zOptions: { classPropertyName: "zOptions", publicName: "zOptions", isSignal: true, isRequired: false, transformFunction: null }, zOrientation: { classPropertyName: "zOrientation", publicName: "zOrientation", isSignal: true, isRequired: false, transformFunction: null }, zSelectedValue: { classPropertyName: "zSelectedValue", publicName: "zSelectedValue", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { zChange: "zChange", zOnBlur: "zOnBlur", zOnFocus: "zOnFocus", zEvent: "zEvent", zSelectedValue: "zSelectedValueChange" }, host: { properties: { "class": "hostClasses()" } }, providers: [
156
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: ZRadioComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
157
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: ZRadioComponent, isStandalone: true, selector: "z-radio", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, zType: { classPropertyName: "zType", publicName: "zType", isSignal: true, isRequired: false, transformFunction: null }, zSize: { classPropertyName: "zSize", publicName: "zSize", isSignal: true, isRequired: false, transformFunction: null }, zLabel: { classPropertyName: "zLabel", publicName: "zLabel", isSignal: true, isRequired: false, transformFunction: null }, zText: { classPropertyName: "zText", publicName: "zText", isSignal: true, isRequired: false, transformFunction: null }, zDisabled: { classPropertyName: "zDisabled", publicName: "zDisabled", isSignal: true, isRequired: false, transformFunction: null }, zValue: { classPropertyName: "zValue", publicName: "zValue", isSignal: true, isRequired: false, transformFunction: null }, zOptions: { classPropertyName: "zOptions", publicName: "zOptions", isSignal: true, isRequired: false, transformFunction: null }, zOrientation: { classPropertyName: "zOrientation", publicName: "zOrientation", isSignal: true, isRequired: false, transformFunction: null }, zSelectedValue: { classPropertyName: "zSelectedValue", publicName: "zSelectedValue", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { zChange: "zChange", zOnBlur: "zOnBlur", zOnFocus: "zOnFocus", zEvent: "zEvent", zSelectedValue: "zSelectedValueChange" }, host: { properties: { "class": "hostClasses()" } }, providers: [
158
158
  {
159
159
  provide: NG_VALUE_ACCESSOR,
160
160
  useExisting: forwardRef(() => ZRadioComponent),
@@ -162,7 +162,7 @@ class ZRadioComponent {
162
162
  },
163
163
  ], ngImport: i0, template: "<!-- Group Mode -->\n@if (zType() === 'group') {\n <!-- Label above group -->\n @if (zLabel()) {\n <label class=\"text-xs leading-none font-medium\">{{ zLabel() }}</label>\n }\n\n <div [class]=\"groupClasses()\">\n @for (option of zOptions(); track option.value) {\n <label\n class=\"inline-flex cursor-pointer items-center gap-2 align-middle\"\n [class.opacity-40]=\"option.disabled || isDisabled()\"\n [class.dark:opacity-50]=\"option.disabled || isDisabled()\"\n [class.cursor-not-allowed]=\"option.disabled || isDisabled()\">\n <button\n type=\"button\"\n role=\"radio\"\n [class]=\"radioClasses()\"\n [attr.aria-checked]=\"isOptionChecked(option)\"\n [attr.data-state]=\"getOptionState(option)\"\n [disabled]=\"isDisabled() || option.disabled\"\n (click)=\"onOptionClick(option)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\">\n <span\n [class]=\"indicatorClasses()\"\n [class.opacity-0]=\"!isOptionChecked(option)\"\n [class.scale-75]=\"!isOptionChecked(option)\"></span>\n </button>\n <span [class]=\"labelClasses()\" [class.text-muted-foreground]=\"option.disabled\">{{ option.label }}</span>\n </label>\n }\n </div>\n}\n\n<!-- Default Mode (single radio) -->\n@if (zType() === 'default') {\n <!-- Label above -->\n @if (zLabel()) {\n <label class=\"text-xs leading-none font-medium\">{{ zLabel() }}</label>\n }\n\n <div class=\"inline-flex items-center gap-2 align-middle\">\n <button\n type=\"button\"\n role=\"radio\"\n [class]=\"radioClasses()\"\n [attr.aria-checked]=\"isChecked()\"\n [attr.data-state]=\"getRadioState()\"\n [disabled]=\"isDisabled()\"\n (click)=\"onRadioClick()\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\">\n <span [class]=\"indicatorClasses()\" [class.opacity-0]=\"!isChecked()\" [class.scale-75]=\"!isChecked()\"></span>\n </button>\n @if (zText()) {\n <label [class]=\"labelClasses()\" (click)=\"onRadioClick()\">{{ zText() }}</label>\n }\n </div>\n}\n", changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
164
164
  }
165
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: ZRadioComponent, decorators: [{
165
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: ZRadioComponent, decorators: [{
166
166
  type: Component,
167
167
  args: [{ selector: 'z-radio', imports: [], standalone: true, providers: [
168
168
  {
@@ -1 +1 @@
1
- {"version":3,"file":"shival99-z-ui-components-z-radio.mjs","sources":["../../../../libs/core-ui/components/z-radio/z-radio.variants.ts","../../../../libs/core-ui/components/z-radio/z-radio.component.ts","../../../../libs/core-ui/components/z-radio/z-radio.component.html","../../../../libs/core-ui/components/z-radio/shival99-z-ui-components-z-radio.ts"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\n\nexport const zRadioVariants = cva(\n [\n 'relative inline-flex items-center justify-center shrink-0 cursor-pointer align-middle leading-none',\n 'rounded-full border border-input bg-background dark:border-border dark:bg-input/25',\n 'transition-colors duration-150',\n 'hover:border-primary/70 hover:bg-primary/5 dark:hover:bg-primary/15',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:hover:bg-primary/90',\n ],\n {\n variants: {\n zSize: {\n sm: 'size-4',\n default: 'size-5',\n lg: 'size-6',\n },\n },\n defaultVariants: {\n zSize: 'default',\n },\n }\n);\n\nexport const zRadioIndicatorVariants = cva(\n 'rounded-full bg-primary-foreground transition-[opacity,transform] duration-150',\n {\n variants: {\n zSize: {\n sm: 'size-2',\n default: 'size-2.5',\n lg: 'size-3',\n },\n },\n defaultVariants: {\n zSize: 'default',\n },\n }\n);\n\nexport const zRadioLabelVariants = cva(\n 'select-none cursor-pointer leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70',\n {\n variants: {\n zSize: {\n sm: 'text-xs',\n default: 'text-sm',\n lg: 'text-base',\n },\n },\n defaultVariants: {\n zSize: 'default',\n },\n }\n);\n\nexport type ZRadioVariants = VariantProps<typeof zRadioVariants>;\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n model,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { zMergeClasses, zTransform, zCreateEvent, type ZEvent } from '@shival99/z-ui/utils';\nimport type { ClassValue } from 'clsx';\nimport type { ZRadioOption, ZRadioOrientation, ZRadioSize, ZRadioType } from './z-radio.types';\nimport { zRadioIndicatorVariants, zRadioLabelVariants, zRadioVariants } from './z-radio.variants';\n\n@Component({\n selector: 'z-radio',\n imports: [],\n standalone: true,\n templateUrl: './z-radio.component.html',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ZRadioComponent),\n multi: true,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class]': 'hostClasses()',\n },\n})\nexport class ZRadioComponent implements ControlValueAccessor {\n public readonly zChange = output<string | number | null>();\n public readonly zOnBlur = output<FocusEvent>();\n public readonly zOnFocus = output<FocusEvent>();\n public readonly zEvent = output<ZEvent>();\n\n public readonly class = input<ClassValue>('');\n public readonly zType = input<ZRadioType>('default');\n public readonly zSize = input<ZRadioSize>('default');\n public readonly zLabel = input<string>('');\n public readonly zText = input<string>('');\n public readonly zDisabled = input(false, { transform: zTransform });\n public readonly zValue = input<string | number>('');\n public readonly zOptions = input<ZRadioOption[]>([]);\n public readonly zOrientation = input<ZRadioOrientation>('vertical');\n\n public readonly zSelectedValue = model<string | number | null>(null);\n\n private readonly _disabled = signal(false);\n\n protected readonly isDisabled = computed(() => this.zDisabled() || this._disabled());\n\n protected readonly hostClasses = computed(() => {\n const hasLabel = !!this.zLabel();\n if (this.zType() === 'group') {\n return zMergeClasses('flex flex-col gap-2', this.class());\n }\n if (hasLabel) {\n return zMergeClasses('flex flex-col gap-2', this.class());\n }\n return zMergeClasses('inline-flex items-center gap-2', this.class());\n });\n\n protected readonly groupClasses = computed(() => {\n const orientation = this.zOrientation() === 'horizontal' ? 'flex-row flex-wrap' : 'flex-col';\n return `flex ${orientation} gap-2`;\n });\n\n protected readonly radioClasses = computed(() => zRadioVariants({ zSize: this.zSize() }));\n\n protected readonly indicatorClasses = computed(() => zRadioIndicatorVariants({ zSize: this.zSize() }));\n\n protected readonly labelClasses = computed(() => zRadioLabelVariants({ zSize: this.zSize() }));\n\n private _onChange: (value: string | number | null) => void = () => {};\n private _onTouched: () => void = () => {};\n\n public writeValue(value: string | number | null): void {\n this.zSelectedValue.set(value);\n }\n\n public registerOnChange(fn: (value: string | number | null) => void): void {\n this._onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this._disabled.set(isDisabled);\n }\n\n protected onFocus(event: FocusEvent): void {\n this.zOnFocus.emit(event);\n this.zEvent.emit(zCreateEvent('focus', event));\n }\n\n protected onBlur(event: FocusEvent): void {\n this.zOnBlur.emit(event);\n this.zEvent.emit(zCreateEvent('blur', event));\n this._onTouched();\n }\n\n protected onRadioClick(): void {\n if (this.isDisabled()) {\n return;\n }\n\n const value = this.zValue();\n this.zSelectedValue.set(value);\n this.zChange.emit(value);\n this._onChange(value);\n this._onTouched();\n }\n\n protected onOptionClick(option: ZRadioOption): void {\n if (this.isDisabled() || option.disabled) {\n return;\n }\n\n this.zSelectedValue.set(option.value);\n this.zChange.emit(option.value);\n this._onChange(option.value);\n this._onTouched();\n }\n\n protected isOptionChecked(option: ZRadioOption): boolean {\n return this.zSelectedValue() === option.value;\n }\n\n protected isChecked(): boolean {\n return this.zSelectedValue() === this.zValue();\n }\n\n protected getRadioState(): string {\n return this.isChecked() ? 'checked' : 'unchecked';\n }\n\n protected getOptionState(option: ZRadioOption): string {\n return this.isOptionChecked(option) ? 'checked' : 'unchecked';\n }\n}\n","<!-- Group Mode -->\n@if (zType() === 'group') {\n <!-- Label above group -->\n @if (zLabel()) {\n <label class=\"text-xs leading-none font-medium\">{{ zLabel() }}</label>\n }\n\n <div [class]=\"groupClasses()\">\n @for (option of zOptions(); track option.value) {\n <label\n class=\"inline-flex cursor-pointer items-center gap-2 align-middle\"\n [class.opacity-40]=\"option.disabled || isDisabled()\"\n [class.dark:opacity-50]=\"option.disabled || isDisabled()\"\n [class.cursor-not-allowed]=\"option.disabled || isDisabled()\">\n <button\n type=\"button\"\n role=\"radio\"\n [class]=\"radioClasses()\"\n [attr.aria-checked]=\"isOptionChecked(option)\"\n [attr.data-state]=\"getOptionState(option)\"\n [disabled]=\"isDisabled() || option.disabled\"\n (click)=\"onOptionClick(option)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\">\n <span\n [class]=\"indicatorClasses()\"\n [class.opacity-0]=\"!isOptionChecked(option)\"\n [class.scale-75]=\"!isOptionChecked(option)\"></span>\n </button>\n <span [class]=\"labelClasses()\" [class.text-muted-foreground]=\"option.disabled\">{{ option.label }}</span>\n </label>\n }\n </div>\n}\n\n<!-- Default Mode (single radio) -->\n@if (zType() === 'default') {\n <!-- Label above -->\n @if (zLabel()) {\n <label class=\"text-xs leading-none font-medium\">{{ zLabel() }}</label>\n }\n\n <div class=\"inline-flex items-center gap-2 align-middle\">\n <button\n type=\"button\"\n role=\"radio\"\n [class]=\"radioClasses()\"\n [attr.aria-checked]=\"isChecked()\"\n [attr.data-state]=\"getRadioState()\"\n [disabled]=\"isDisabled()\"\n (click)=\"onRadioClick()\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\">\n <span [class]=\"indicatorClasses()\" [class.opacity-0]=\"!isChecked()\" [class.scale-75]=\"!isChecked()\"></span>\n </button>\n @if (zText()) {\n <label [class]=\"labelClasses()\" (click)=\"onRadioClick()\">{{ zText() }}</label>\n }\n </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shival99-z-ui-components-z-radio.mjs","sources":["../../../../libs/core-ui/components/z-radio/z-radio.variants.ts","../../../../libs/core-ui/components/z-radio/z-radio.component.ts","../../../../libs/core-ui/components/z-radio/z-radio.component.html","../../../../libs/core-ui/components/z-radio/shival99-z-ui-components-z-radio.ts"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\n\nexport const zRadioVariants = cva(\n [\n 'relative inline-flex items-center justify-center shrink-0 cursor-pointer align-middle leading-none',\n 'rounded-full border border-input bg-background dark:border-border dark:bg-input/25',\n 'transition-colors duration-150',\n 'hover:border-primary/70 hover:bg-primary/5 dark:hover:bg-primary/15',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:hover:bg-primary/90',\n ],\n {\n variants: {\n zSize: {\n sm: 'size-4',\n default: 'size-5',\n lg: 'size-6',\n },\n },\n defaultVariants: {\n zSize: 'default',\n },\n }\n);\n\nexport const zRadioIndicatorVariants = cva(\n 'rounded-full bg-primary-foreground transition-[opacity,transform] duration-150',\n {\n variants: {\n zSize: {\n sm: 'size-2',\n default: 'size-2.5',\n lg: 'size-3',\n },\n },\n defaultVariants: {\n zSize: 'default',\n },\n }\n);\n\nexport const zRadioLabelVariants = cva(\n 'select-none cursor-pointer leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70',\n {\n variants: {\n zSize: {\n sm: 'text-xs',\n default: 'text-sm',\n lg: 'text-base',\n },\n },\n defaultVariants: {\n zSize: 'default',\n },\n }\n);\n\nexport type ZRadioVariants = VariantProps<typeof zRadioVariants>;\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n model,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { zMergeClasses, zTransform, zCreateEvent, type ZEvent } from '@shival99/z-ui/utils';\nimport type { ClassValue } from 'clsx';\nimport type { ZRadioOption, ZRadioOrientation, ZRadioSize, ZRadioType } from './z-radio.types';\nimport { zRadioIndicatorVariants, zRadioLabelVariants, zRadioVariants } from './z-radio.variants';\n\n@Component({\n selector: 'z-radio',\n imports: [],\n standalone: true,\n templateUrl: './z-radio.component.html',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ZRadioComponent),\n multi: true,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class]': 'hostClasses()',\n },\n})\nexport class ZRadioComponent implements ControlValueAccessor {\n public readonly zChange = output<string | number | null>();\n public readonly zOnBlur = output<FocusEvent>();\n public readonly zOnFocus = output<FocusEvent>();\n public readonly zEvent = output<ZEvent>();\n\n public readonly class = input<ClassValue>('');\n public readonly zType = input<ZRadioType>('default');\n public readonly zSize = input<ZRadioSize>('default');\n public readonly zLabel = input<string>('');\n public readonly zText = input<string>('');\n public readonly zDisabled = input(false, { transform: zTransform });\n public readonly zValue = input<string | number>('');\n public readonly zOptions = input<ZRadioOption[]>([]);\n public readonly zOrientation = input<ZRadioOrientation>('vertical');\n\n public readonly zSelectedValue = model<string | number | null>(null);\n\n private readonly _disabled = signal(false);\n\n protected readonly isDisabled = computed(() => this.zDisabled() || this._disabled());\n\n protected readonly hostClasses = computed(() => {\n const hasLabel = !!this.zLabel();\n if (this.zType() === 'group') {\n return zMergeClasses('flex flex-col gap-2', this.class());\n }\n if (hasLabel) {\n return zMergeClasses('flex flex-col gap-2', this.class());\n }\n return zMergeClasses('inline-flex items-center gap-2', this.class());\n });\n\n protected readonly groupClasses = computed(() => {\n const orientation = this.zOrientation() === 'horizontal' ? 'flex-row flex-wrap' : 'flex-col';\n return `flex ${orientation} gap-2`;\n });\n\n protected readonly radioClasses = computed(() => zRadioVariants({ zSize: this.zSize() }));\n\n protected readonly indicatorClasses = computed(() => zRadioIndicatorVariants({ zSize: this.zSize() }));\n\n protected readonly labelClasses = computed(() => zRadioLabelVariants({ zSize: this.zSize() }));\n\n private _onChange: (value: string | number | null) => void = () => {};\n private _onTouched: () => void = () => {};\n\n public writeValue(value: string | number | null): void {\n this.zSelectedValue.set(value);\n }\n\n public registerOnChange(fn: (value: string | number | null) => void): void {\n this._onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this._disabled.set(isDisabled);\n }\n\n protected onFocus(event: FocusEvent): void {\n this.zOnFocus.emit(event);\n this.zEvent.emit(zCreateEvent('focus', event));\n }\n\n protected onBlur(event: FocusEvent): void {\n this.zOnBlur.emit(event);\n this.zEvent.emit(zCreateEvent('blur', event));\n this._onTouched();\n }\n\n protected onRadioClick(): void {\n if (this.isDisabled()) {\n return;\n }\n\n const value = this.zValue();\n this.zSelectedValue.set(value);\n this.zChange.emit(value);\n this._onChange(value);\n this._onTouched();\n }\n\n protected onOptionClick(option: ZRadioOption): void {\n if (this.isDisabled() || option.disabled) {\n return;\n }\n\n this.zSelectedValue.set(option.value);\n this.zChange.emit(option.value);\n this._onChange(option.value);\n this._onTouched();\n }\n\n protected isOptionChecked(option: ZRadioOption): boolean {\n return this.zSelectedValue() === option.value;\n }\n\n protected isChecked(): boolean {\n return this.zSelectedValue() === this.zValue();\n }\n\n protected getRadioState(): string {\n return this.isChecked() ? 'checked' : 'unchecked';\n }\n\n protected getOptionState(option: ZRadioOption): string {\n return this.isOptionChecked(option) ? 'checked' : 'unchecked';\n }\n}\n","<!-- Group Mode -->\n@if (zType() === 'group') {\n <!-- Label above group -->\n @if (zLabel()) {\n <label class=\"text-xs leading-none font-medium\">{{ zLabel() }}</label>\n }\n\n <div [class]=\"groupClasses()\">\n @for (option of zOptions(); track option.value) {\n <label\n class=\"inline-flex cursor-pointer items-center gap-2 align-middle\"\n [class.opacity-40]=\"option.disabled || isDisabled()\"\n [class.dark:opacity-50]=\"option.disabled || isDisabled()\"\n [class.cursor-not-allowed]=\"option.disabled || isDisabled()\">\n <button\n type=\"button\"\n role=\"radio\"\n [class]=\"radioClasses()\"\n [attr.aria-checked]=\"isOptionChecked(option)\"\n [attr.data-state]=\"getOptionState(option)\"\n [disabled]=\"isDisabled() || option.disabled\"\n (click)=\"onOptionClick(option)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\">\n <span\n [class]=\"indicatorClasses()\"\n [class.opacity-0]=\"!isOptionChecked(option)\"\n [class.scale-75]=\"!isOptionChecked(option)\"></span>\n </button>\n <span [class]=\"labelClasses()\" [class.text-muted-foreground]=\"option.disabled\">{{ option.label }}</span>\n </label>\n }\n </div>\n}\n\n<!-- Default Mode (single radio) -->\n@if (zType() === 'default') {\n <!-- Label above -->\n @if (zLabel()) {\n <label class=\"text-xs leading-none font-medium\">{{ zLabel() }}</label>\n }\n\n <div class=\"inline-flex items-center gap-2 align-middle\">\n <button\n type=\"button\"\n role=\"radio\"\n [class]=\"radioClasses()\"\n [attr.aria-checked]=\"isChecked()\"\n [attr.data-state]=\"getRadioState()\"\n [disabled]=\"isDisabled()\"\n (click)=\"onRadioClick()\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\">\n <span [class]=\"indicatorClasses()\" [class.opacity-0]=\"!isChecked()\" [class.scale-75]=\"!isChecked()\"></span>\n </button>\n @if (zText()) {\n <label [class]=\"labelClasses()\" (click)=\"onRadioClick()\">{{ zText() }}</label>\n }\n </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -125,10 +125,10 @@ class ZScrollAreaComponent {
125
125
  }
126
126
  void scrollbar.scrollToElement(targetEl, options);
127
127
  }
128
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: ZScrollAreaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
129
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.2", type: ZScrollAreaComponent, isStandalone: true, selector: "z-scrollarea", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, zType: { classPropertyName: "zType", publicName: "zType", isSignal: true, isRequired: false, transformFunction: null }, zOrientation: { classPropertyName: "zOrientation", publicName: "zOrientation", isSignal: true, isRequired: false, transformFunction: null }, zVisibility: { classPropertyName: "zVisibility", publicName: "zVisibility", isSignal: true, isRequired: false, transformFunction: null }, zSize: { classPropertyName: "zSize", publicName: "zSize", isSignal: true, isRequired: false, transformFunction: null }, zDisableInteraction: { classPropertyName: "zDisableInteraction", publicName: "zDisableInteraction", isSignal: true, isRequired: false, transformFunction: null }, zSensorThrottleTime: { classPropertyName: "zSensorThrottleTime", publicName: "zSensorThrottleTime", isSignal: true, isRequired: false, transformFunction: null }, zDisableSensor: { classPropertyName: "zDisableSensor", publicName: "zDisableSensor", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { zScroll: "zScroll", zScrollbarInit: "zScrollbarInit" }, host: { properties: { "class": "hostClasses()" } }, viewQueries: [{ propertyName: "scrollbarRef", first: true, predicate: ["scrollbarRef"], descendants: true, isSignal: true }, { propertyName: "nativeViewport", first: true, predicate: ["nativeViewport"], descendants: true, isSignal: true }], ngImport: i0, template: "<ng-template #contentTpl>\n <ng-content />\n</ng-template>\n\n@if (zType() === 'custom') {\n <ng-scrollbar\n #scrollbarRef\n class=\"block h-full w-full\"\n [visibility]=\"zVisibility()\"\n [orientation]=\"zOrientation()\"\n [disableInteraction]=\"zDisableInteraction()\"\n [sensorThrottleTime]=\"zSensorThrottleTime()\"\n [disableSensor]=\"zDisableSensor()\"\n (scroll)=\"onScroll($event)\">\n <ng-container *ngTemplateOutlet=\"contentTpl\" />\n </ng-scrollbar>\n} @else {\n <div #nativeViewport [class]=\"nativeClasses()\" (scroll)=\"onScroll($event)\">\n <ng-container *ngTemplateOutlet=\"contentTpl\" />\n </div>\n}\n", styles: [":host{display:block;position:relative}.z-scrollarea{display:block}.z-scrollarea ng-scrollbar{width:100%;height:inherit;--scrollbar-track-thickness: var(--scrollbar-size);--scrollbar-track-hover-thickness: var(--scrollbar-size);--scrollbar-track-active-thickness: var(--scrollbar-size);--scrollbar-container-offset: 0px;--scrollbar-track-offset: 0px;--scrollbar-track-color: inherit;--scrollbar-thumb-color: inherit;--scrollbar-thumb-hover-color: inherit;--scrollbar-border-radius: inherit;--scrollbar-track-border-radius: inherit;--scrollbar-thumb-transition: inherit}.z-scrollarea .z-scrollarea-native{width:100%;height:inherit}.z-scrollarea{--scrollbar-track-color: transparent;--scrollbar-thumb-color: color-mix(in oklab, var(--muted-foreground) 30%, transparent);--scrollbar-thumb-hover-color: color-mix(in oklab, var(--muted-foreground) 50%, transparent);--scrollbar-border-radius: var(--radius-sm, 6px);--scrollbar-track-border-radius: var(--radius-sm, 6px);--scrollbar-thumb-transition: background-color .2s ease, opacity .2s ease}.z-scrollarea.z-scrollarea-size-sm{--scrollbar-size: 4px;--scrollbar-padding: 2px}.z-scrollarea.z-scrollarea-size-default{--scrollbar-size: 6px;--scrollbar-padding: 4px}.z-scrollarea.z-scrollarea-size-lg{--scrollbar-size: 8px;--scrollbar-padding: 6px}.z-scrollarea .ng-scroll-viewport{width:100%;height:100%;max-width:100%;max-height:100%;box-sizing:border-box}.z-scrollarea .ng-scroll-content{box-sizing:border-box;display:block;width:100%}.z-scrollarea.z-scrollarea-horizontal .ng-scroll-content,.z-scrollarea.z-scrollarea-auto .ng-scroll-content{width:max-content;min-width:100%}.z-scrollarea-visibility-visible .z-scrollarea-native,.z-scrollarea-visibility-hover .z-scrollarea-native{scrollbar-width:thin;scrollbar-color:var(--scrollbar-thumb-color, color-mix(in oklab, var(--muted-foreground) 30%, transparent)) var(--scrollbar-track-color, transparent)}.z-scrollarea-visibility-visible .z-scrollarea-native::-webkit-scrollbar,.z-scrollarea-visibility-hover .z-scrollarea-native::-webkit-scrollbar{width:var(--scrollbar-size, 6px);height:var(--scrollbar-size, 6px)}.z-scrollarea-visibility-visible .z-scrollarea-native::-webkit-scrollbar-track,.z-scrollarea-visibility-hover .z-scrollarea-native::-webkit-scrollbar-track{background:var(--scrollbar-track-color, transparent)}.z-scrollarea-visibility-visible .z-scrollarea-native::-webkit-scrollbar-thumb,.z-scrollarea-visibility-hover .z-scrollarea-native::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-color, color-mix(in oklab, var(--muted-foreground) 30%, transparent));border-radius:var(--scrollbar-border-radius, var(--radius-sm, 6px));transition:var(--scrollbar-thumb-transition, background-color .2s ease)}.z-scrollarea-visibility-visible .z-scrollarea-native::-webkit-scrollbar-thumb:hover,.z-scrollarea-visibility-hover .z-scrollarea-native::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-thumb-hover-color, color-mix(in oklab, var(--muted-foreground) 50%, transparent))}.z-scrollarea-visibility-hover .z-scrollarea-native{scrollbar-color:transparent transparent}.z-scrollarea-visibility-hover .z-scrollarea-native::-webkit-scrollbar-thumb{background:transparent}.z-scrollarea-visibility-hover:hover .z-scrollarea-visibility-hover .z-scrollarea-native,.z-scrollarea-visibility-hover:active .z-scrollarea-visibility-hover .z-scrollarea-native,.z-scrollarea-visibility-hover:focus-within .z-scrollarea-visibility-hover .z-scrollarea-native,.z-scrollarea-visibility-hover .z-scrollarea-native:hover,.z-scrollarea-visibility-hover .z-scrollarea-native:active{scrollbar-color:var(--scrollbar-thumb-color, color-mix(in oklab, var(--muted-foreground) 30%, transparent)) var(--scrollbar-track-color, transparent)}.z-scrollarea-visibility-hover:hover .z-scrollarea-visibility-hover .z-scrollarea-native::-webkit-scrollbar-thumb,.z-scrollarea-visibility-hover:active .z-scrollarea-visibility-hover .z-scrollarea-native::-webkit-scrollbar-thumb,.z-scrollarea-visibility-hover:focus-within .z-scrollarea-visibility-hover .z-scrollarea-native::-webkit-scrollbar-thumb,.z-scrollarea-visibility-hover .z-scrollarea-native:hover::-webkit-scrollbar-thumb,.z-scrollarea-visibility-hover .z-scrollarea-native:active::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-color, color-mix(in oklab, var(--muted-foreground) 30%, transparent))}\n"], dependencies: [{ kind: "component", type: NgScrollbar, selector: "ng-scrollbar:not([externalViewport]), [ngScrollbar]", exportAs: ["ngScrollbar"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
128
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: ZScrollAreaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
129
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: ZScrollAreaComponent, isStandalone: true, selector: "z-scrollarea", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, zType: { classPropertyName: "zType", publicName: "zType", isSignal: true, isRequired: false, transformFunction: null }, zOrientation: { classPropertyName: "zOrientation", publicName: "zOrientation", isSignal: true, isRequired: false, transformFunction: null }, zVisibility: { classPropertyName: "zVisibility", publicName: "zVisibility", isSignal: true, isRequired: false, transformFunction: null }, zSize: { classPropertyName: "zSize", publicName: "zSize", isSignal: true, isRequired: false, transformFunction: null }, zDisableInteraction: { classPropertyName: "zDisableInteraction", publicName: "zDisableInteraction", isSignal: true, isRequired: false, transformFunction: null }, zSensorThrottleTime: { classPropertyName: "zSensorThrottleTime", publicName: "zSensorThrottleTime", isSignal: true, isRequired: false, transformFunction: null }, zDisableSensor: { classPropertyName: "zDisableSensor", publicName: "zDisableSensor", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { zScroll: "zScroll", zScrollbarInit: "zScrollbarInit" }, host: { properties: { "class": "hostClasses()" } }, viewQueries: [{ propertyName: "scrollbarRef", first: true, predicate: ["scrollbarRef"], descendants: true, isSignal: true }, { propertyName: "nativeViewport", first: true, predicate: ["nativeViewport"], descendants: true, isSignal: true }], ngImport: i0, template: "<ng-template #contentTpl>\n <ng-content />\n</ng-template>\n\n@if (zType() === 'custom') {\n <ng-scrollbar\n #scrollbarRef\n class=\"block h-full w-full\"\n [visibility]=\"zVisibility()\"\n [orientation]=\"zOrientation()\"\n [disableInteraction]=\"zDisableInteraction()\"\n [sensorThrottleTime]=\"zSensorThrottleTime()\"\n [disableSensor]=\"zDisableSensor()\"\n (scroll)=\"onScroll($event)\">\n <ng-container *ngTemplateOutlet=\"contentTpl\" />\n </ng-scrollbar>\n} @else {\n <div #nativeViewport [class]=\"nativeClasses()\" (scroll)=\"onScroll($event)\">\n <ng-container *ngTemplateOutlet=\"contentTpl\" />\n </div>\n}\n", styles: [":host{display:block;position:relative}.z-scrollarea{display:block}.z-scrollarea ng-scrollbar{width:100%;height:inherit;--scrollbar-track-thickness: var(--scrollbar-size);--scrollbar-track-hover-thickness: var(--scrollbar-size);--scrollbar-track-active-thickness: var(--scrollbar-size);--scrollbar-container-offset: 0px;--scrollbar-track-offset: 0px;--scrollbar-track-color: inherit;--scrollbar-thumb-color: inherit;--scrollbar-thumb-hover-color: inherit;--scrollbar-border-radius: inherit;--scrollbar-track-border-radius: inherit;--scrollbar-thumb-transition: inherit}.z-scrollarea .z-scrollarea-native{width:100%;height:inherit}.z-scrollarea{--scrollbar-track-color: transparent;--scrollbar-thumb-color: color-mix(in oklab, var(--muted-foreground) 30%, transparent);--scrollbar-thumb-hover-color: color-mix(in oklab, var(--muted-foreground) 50%, transparent);--scrollbar-border-radius: var(--radius-sm, 6px);--scrollbar-track-border-radius: var(--radius-sm, 6px);--scrollbar-thumb-transition: background-color .2s ease, opacity .2s ease}.z-scrollarea.z-scrollarea-size-sm{--scrollbar-size: 4px;--scrollbar-padding: 2px}.z-scrollarea.z-scrollarea-size-default{--scrollbar-size: 6px;--scrollbar-padding: 4px}.z-scrollarea.z-scrollarea-size-lg{--scrollbar-size: 8px;--scrollbar-padding: 6px}.z-scrollarea .ng-scroll-viewport{width:100%;height:100%;max-width:100%;max-height:100%;box-sizing:border-box}.z-scrollarea .ng-scroll-content{box-sizing:border-box;display:block;width:100%}.z-scrollarea.z-scrollarea-horizontal .ng-scroll-content,.z-scrollarea.z-scrollarea-auto .ng-scroll-content{width:max-content;min-width:100%}.z-scrollarea-visibility-visible .z-scrollarea-native,.z-scrollarea-visibility-hover .z-scrollarea-native{scrollbar-width:thin;scrollbar-color:var(--scrollbar-thumb-color, color-mix(in oklab, var(--muted-foreground) 30%, transparent)) var(--scrollbar-track-color, transparent)}.z-scrollarea-visibility-visible .z-scrollarea-native::-webkit-scrollbar,.z-scrollarea-visibility-hover .z-scrollarea-native::-webkit-scrollbar{width:var(--scrollbar-size, 6px);height:var(--scrollbar-size, 6px)}.z-scrollarea-visibility-visible .z-scrollarea-native::-webkit-scrollbar-track,.z-scrollarea-visibility-hover .z-scrollarea-native::-webkit-scrollbar-track{background:var(--scrollbar-track-color, transparent)}.z-scrollarea-visibility-visible .z-scrollarea-native::-webkit-scrollbar-thumb,.z-scrollarea-visibility-hover .z-scrollarea-native::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-color, color-mix(in oklab, var(--muted-foreground) 30%, transparent));border-radius:var(--scrollbar-border-radius, var(--radius-sm, 6px));transition:var(--scrollbar-thumb-transition, background-color .2s ease)}.z-scrollarea-visibility-visible .z-scrollarea-native::-webkit-scrollbar-thumb:hover,.z-scrollarea-visibility-hover .z-scrollarea-native::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-thumb-hover-color, color-mix(in oklab, var(--muted-foreground) 50%, transparent))}.z-scrollarea-visibility-hover .z-scrollarea-native{scrollbar-color:transparent transparent}.z-scrollarea-visibility-hover .z-scrollarea-native::-webkit-scrollbar-thumb{background:transparent}.z-scrollarea-visibility-hover:hover .z-scrollarea-visibility-hover .z-scrollarea-native,.z-scrollarea-visibility-hover:active .z-scrollarea-visibility-hover .z-scrollarea-native,.z-scrollarea-visibility-hover:focus-within .z-scrollarea-visibility-hover .z-scrollarea-native,.z-scrollarea-visibility-hover .z-scrollarea-native:hover,.z-scrollarea-visibility-hover .z-scrollarea-native:active{scrollbar-color:var(--scrollbar-thumb-color, color-mix(in oklab, var(--muted-foreground) 30%, transparent)) var(--scrollbar-track-color, transparent)}.z-scrollarea-visibility-hover:hover .z-scrollarea-visibility-hover .z-scrollarea-native::-webkit-scrollbar-thumb,.z-scrollarea-visibility-hover:active .z-scrollarea-visibility-hover .z-scrollarea-native::-webkit-scrollbar-thumb,.z-scrollarea-visibility-hover:focus-within .z-scrollarea-visibility-hover .z-scrollarea-native::-webkit-scrollbar-thumb,.z-scrollarea-visibility-hover .z-scrollarea-native:hover::-webkit-scrollbar-thumb,.z-scrollarea-visibility-hover .z-scrollarea-native:active::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-color, color-mix(in oklab, var(--muted-foreground) 30%, transparent))}\n"], dependencies: [{ kind: "component", type: NgScrollbar, selector: "ng-scrollbar:not([externalViewport]), [ngScrollbar]", exportAs: ["ngScrollbar"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
130
130
  }
131
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: ZScrollAreaComponent, decorators: [{
131
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: ZScrollAreaComponent, decorators: [{
132
132
  type: Component,
133
133
  args: [{ selector: 'z-scrollarea', imports: [NgScrollbar, NgTemplateOutlet], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
134
134
  '[class]': 'hostClasses()',
@@ -1 +1 @@
1
- {"version":3,"file":"shival99-z-ui-components-z-scrollarea.mjs","sources":["../../../../libs/core-ui/components/z-scrollarea/z-scrollarea.variants.ts","../../../../libs/core-ui/components/z-scrollarea/z-scrollarea.component.ts","../../../../libs/core-ui/components/z-scrollarea/z-scrollarea.component.html","../../../../libs/core-ui/components/z-scrollarea/shival99-z-ui-components-z-scrollarea.ts"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\n\nexport const zScrollAreaVariants = cva('z-scrollarea block overflow-hidden w-full', {\n variants: {\n zSize: {\n sm: 'z-scrollarea-size-sm',\n default: 'z-scrollarea-size-default',\n lg: 'z-scrollarea-size-lg',\n },\n },\n defaultVariants: {\n zSize: 'default',\n },\n});\n\nexport type ZScrollAreaVariants = VariantProps<typeof zScrollAreaVariants>;\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n input,\n output,\n viewChild,\n ViewEncapsulation,\n type AfterViewInit,\n} from '@angular/core';\nimport { zMergeClasses } from '@shival99/z-ui/utils';\nimport type { ClassValue } from 'clsx';\nimport { NgScrollbar } from 'ngx-scrollbar';\nimport type {\n ZScrollAreaOrientation,\n ZScrollAreaVisibility,\n ZScrollAreaSize,\n ZScrollAreaType,\n} from './z-scrollarea.types';\nimport { zScrollAreaVariants } from './z-scrollarea.variants';\n\n@Component({\n selector: 'z-scrollarea',\n imports: [NgScrollbar, NgTemplateOutlet],\n standalone: true,\n templateUrl: './z-scrollarea.component.html',\n styleUrl: './z-scrollarea.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class]': 'hostClasses()',\n },\n})\nexport class ZScrollAreaComponent implements AfterViewInit {\n // Lấy reference đến ngx-scrollbar\n public readonly scrollbarRef = viewChild<NgScrollbar>('scrollbarRef');\n // Lấy reference đến native viewport\n public readonly nativeViewport = viewChild<ElementRef<HTMLElement>>('nativeViewport');\n\n // Khai báo các inputs sử dụng Signals API\n public readonly class = input<ClassValue>('');\n public readonly zType = input<ZScrollAreaType>('custom');\n public readonly zOrientation = input<ZScrollAreaOrientation>('vertical');\n public readonly zVisibility = input<ZScrollAreaVisibility>('hover');\n public readonly zSize = input<ZScrollAreaSize>('default');\n public readonly zDisableInteraction = input<boolean>(false);\n public readonly zSensorThrottleTime = input<number>(200);\n public readonly zDisableSensor = input<boolean>(false);\n\n // Khai báo các outputs sử dụng Signals API\n public readonly zScroll = output<Event>();\n public readonly zScrollbarInit = output<NgScrollbar>();\n\n // Tính toán các class cho host element\n protected readonly hostClasses = computed(() =>\n zMergeClasses(\n zScrollAreaVariants({\n zSize: this.zSize(),\n }),\n `z-scrollarea-${this.zOrientation()}`,\n `z-scrollarea-visibility-${this.zVisibility()}`,\n this.class()\n )\n );\n\n // Tính toán các class cho native viewport\n protected readonly nativeClasses = computed(() => {\n const orientation = this.zOrientation();\n let overflowClass = 'overflow-auto';\n if (orientation === 'vertical') {\n overflowClass = 'overflow-y-auto overflow-x-hidden';\n }\n if (orientation === 'horizontal') {\n overflowClass = 'overflow-x-auto overflow-y-hidden';\n }\n return zMergeClasses('z-scrollarea-native w-full h-full block', overflowClass);\n });\n\n public ngAfterViewInit(): void {\n const scrollbar = this.scrollbarRef();\n if (!scrollbar) {\n return;\n }\n this.zScrollbarInit.emit(scrollbar);\n }\n\n // Chuyển tiếp sự kiện scroll\n protected onScroll(event: Event): void {\n this.zScroll.emit(event);\n }\n\n // API helper để scroll chương trình\n public scrollTo(options: ScrollToOptions): void {\n if (this.zType() === 'native') {\n const nativeEl = this.nativeViewport()?.nativeElement;\n if (nativeEl) {\n nativeEl.scrollTo(options);\n }\n return;\n }\n\n const scrollbar = this.scrollbarRef();\n if (!scrollbar) {\n return;\n }\n void scrollbar.scrollTo(options);\n }\n\n // API helper để scroll đến phần tử cụ thể\n public scrollToElement(\n selectorOrElement: string | HTMLElement,\n options?: { top?: number; left?: number; duration?: number }\n ): void {\n if (this.zType() === 'native') {\n const nativeEl = this.nativeViewport()?.nativeElement;\n if (!nativeEl) {\n return;\n }\n\n let targetEl: HTMLElement | null = null;\n if (typeof selectorOrElement === 'string') {\n targetEl = nativeEl.querySelector(selectorOrElement);\n }\n if (selectorOrElement instanceof HTMLElement) {\n targetEl = selectorOrElement;\n }\n\n if (targetEl) {\n const behavior = options?.duration && options.duration > 0 ? 'smooth' : 'auto';\n targetEl.scrollIntoView({ behavior, block: 'nearest', inline: 'nearest' });\n }\n return;\n }\n\n const scrollbar = this.scrollbarRef();\n if (!scrollbar) {\n return;\n }\n\n let targetEl: HTMLElement | null = null;\n if (typeof selectorOrElement === 'string') {\n targetEl = scrollbar.nativeElement.querySelector(selectorOrElement);\n }\n if (selectorOrElement instanceof HTMLElement) {\n targetEl = selectorOrElement;\n }\n\n if (!targetEl) {\n return;\n }\n\n void scrollbar.scrollToElement(targetEl, options);\n }\n}\n","<ng-template #contentTpl>\n <ng-content />\n</ng-template>\n\n@if (zType() === 'custom') {\n <ng-scrollbar\n #scrollbarRef\n class=\"block h-full w-full\"\n [visibility]=\"zVisibility()\"\n [orientation]=\"zOrientation()\"\n [disableInteraction]=\"zDisableInteraction()\"\n [sensorThrottleTime]=\"zSensorThrottleTime()\"\n [disableSensor]=\"zDisableSensor()\"\n (scroll)=\"onScroll($event)\">\n <ng-container *ngTemplateOutlet=\"contentTpl\" />\n </ng-scrollbar>\n} @else {\n <div #nativeViewport [class]=\"nativeClasses()\" (scroll)=\"onScroll($event)\">\n <ng-container *ngTemplateOutlet=\"contentTpl\" />\n </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shival99-z-ui-components-z-scrollarea.mjs","sources":["../../../../libs/core-ui/components/z-scrollarea/z-scrollarea.variants.ts","../../../../libs/core-ui/components/z-scrollarea/z-scrollarea.component.ts","../../../../libs/core-ui/components/z-scrollarea/z-scrollarea.component.html","../../../../libs/core-ui/components/z-scrollarea/shival99-z-ui-components-z-scrollarea.ts"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\n\nexport const zScrollAreaVariants = cva('z-scrollarea block overflow-hidden w-full', {\n variants: {\n zSize: {\n sm: 'z-scrollarea-size-sm',\n default: 'z-scrollarea-size-default',\n lg: 'z-scrollarea-size-lg',\n },\n },\n defaultVariants: {\n zSize: 'default',\n },\n});\n\nexport type ZScrollAreaVariants = VariantProps<typeof zScrollAreaVariants>;\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n input,\n output,\n viewChild,\n ViewEncapsulation,\n type AfterViewInit,\n} from '@angular/core';\nimport { zMergeClasses } from '@shival99/z-ui/utils';\nimport type { ClassValue } from 'clsx';\nimport { NgScrollbar } from 'ngx-scrollbar';\nimport type {\n ZScrollAreaOrientation,\n ZScrollAreaVisibility,\n ZScrollAreaSize,\n ZScrollAreaType,\n} from './z-scrollarea.types';\nimport { zScrollAreaVariants } from './z-scrollarea.variants';\n\n@Component({\n selector: 'z-scrollarea',\n imports: [NgScrollbar, NgTemplateOutlet],\n standalone: true,\n templateUrl: './z-scrollarea.component.html',\n styleUrl: './z-scrollarea.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class]': 'hostClasses()',\n },\n})\nexport class ZScrollAreaComponent implements AfterViewInit {\n // Lấy reference đến ngx-scrollbar\n public readonly scrollbarRef = viewChild<NgScrollbar>('scrollbarRef');\n // Lấy reference đến native viewport\n public readonly nativeViewport = viewChild<ElementRef<HTMLElement>>('nativeViewport');\n\n // Khai báo các inputs sử dụng Signals API\n public readonly class = input<ClassValue>('');\n public readonly zType = input<ZScrollAreaType>('custom');\n public readonly zOrientation = input<ZScrollAreaOrientation>('vertical');\n public readonly zVisibility = input<ZScrollAreaVisibility>('hover');\n public readonly zSize = input<ZScrollAreaSize>('default');\n public readonly zDisableInteraction = input<boolean>(false);\n public readonly zSensorThrottleTime = input<number>(200);\n public readonly zDisableSensor = input<boolean>(false);\n\n // Khai báo các outputs sử dụng Signals API\n public readonly zScroll = output<Event>();\n public readonly zScrollbarInit = output<NgScrollbar>();\n\n // Tính toán các class cho host element\n protected readonly hostClasses = computed(() =>\n zMergeClasses(\n zScrollAreaVariants({\n zSize: this.zSize(),\n }),\n `z-scrollarea-${this.zOrientation()}`,\n `z-scrollarea-visibility-${this.zVisibility()}`,\n this.class()\n )\n );\n\n // Tính toán các class cho native viewport\n protected readonly nativeClasses = computed(() => {\n const orientation = this.zOrientation();\n let overflowClass = 'overflow-auto';\n if (orientation === 'vertical') {\n overflowClass = 'overflow-y-auto overflow-x-hidden';\n }\n if (orientation === 'horizontal') {\n overflowClass = 'overflow-x-auto overflow-y-hidden';\n }\n return zMergeClasses('z-scrollarea-native w-full h-full block', overflowClass);\n });\n\n public ngAfterViewInit(): void {\n const scrollbar = this.scrollbarRef();\n if (!scrollbar) {\n return;\n }\n this.zScrollbarInit.emit(scrollbar);\n }\n\n // Chuyển tiếp sự kiện scroll\n protected onScroll(event: Event): void {\n this.zScroll.emit(event);\n }\n\n // API helper để scroll chương trình\n public scrollTo(options: ScrollToOptions): void {\n if (this.zType() === 'native') {\n const nativeEl = this.nativeViewport()?.nativeElement;\n if (nativeEl) {\n nativeEl.scrollTo(options);\n }\n return;\n }\n\n const scrollbar = this.scrollbarRef();\n if (!scrollbar) {\n return;\n }\n void scrollbar.scrollTo(options);\n }\n\n // API helper để scroll đến phần tử cụ thể\n public scrollToElement(\n selectorOrElement: string | HTMLElement,\n options?: { top?: number; left?: number; duration?: number }\n ): void {\n if (this.zType() === 'native') {\n const nativeEl = this.nativeViewport()?.nativeElement;\n if (!nativeEl) {\n return;\n }\n\n let targetEl: HTMLElement | null = null;\n if (typeof selectorOrElement === 'string') {\n targetEl = nativeEl.querySelector(selectorOrElement);\n }\n if (selectorOrElement instanceof HTMLElement) {\n targetEl = selectorOrElement;\n }\n\n if (targetEl) {\n const behavior = options?.duration && options.duration > 0 ? 'smooth' : 'auto';\n targetEl.scrollIntoView({ behavior, block: 'nearest', inline: 'nearest' });\n }\n return;\n }\n\n const scrollbar = this.scrollbarRef();\n if (!scrollbar) {\n return;\n }\n\n let targetEl: HTMLElement | null = null;\n if (typeof selectorOrElement === 'string') {\n targetEl = scrollbar.nativeElement.querySelector(selectorOrElement);\n }\n if (selectorOrElement instanceof HTMLElement) {\n targetEl = selectorOrElement;\n }\n\n if (!targetEl) {\n return;\n }\n\n void scrollbar.scrollToElement(targetEl, options);\n }\n}\n","<ng-template #contentTpl>\n <ng-content />\n</ng-template>\n\n@if (zType() === 'custom') {\n <ng-scrollbar\n #scrollbarRef\n class=\"block h-full w-full\"\n [visibility]=\"zVisibility()\"\n [orientation]=\"zOrientation()\"\n [disableInteraction]=\"zDisableInteraction()\"\n [sensorThrottleTime]=\"zSensorThrottleTime()\"\n [disableSensor]=\"zDisableSensor()\"\n (scroll)=\"onScroll($event)\">\n <ng-container *ngTemplateOutlet=\"contentTpl\" />\n </ng-scrollbar>\n} @else {\n <div #nativeViewport [class]=\"nativeClasses()\" (scroll)=\"onScroll($event)\">\n <ng-container *ngTemplateOutlet=\"contentTpl\" />\n </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}