@shival99/z-ui 2.6.7 → 2.6.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/shival99-z-ui-components-z-autocomplete.mjs +2 -3
- package/fesm2022/shival99-z-ui-components-z-autocomplete.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-button-group.mjs +1 -1
- package/fesm2022/shival99-z-ui-components-z-button-group.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-calendar.mjs +13 -13
- package/fesm2022/shival99-z-ui-components-z-calendar.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-drawer.mjs +4 -7
- package/fesm2022/shival99-z-ui-components-z-drawer.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-editor.mjs +1 -1
- package/fesm2022/shival99-z-ui-components-z-editor.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-modal.mjs +6 -7
- package/fesm2022/shival99-z-ui-components-z-modal.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-popover.mjs +2 -2
- package/fesm2022/shival99-z-ui-components-z-popover.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-qrcode.mjs +1 -1
- package/fesm2022/shival99-z-ui-components-z-qrcode.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-scrollarea.mjs +3 -9
- package/fesm2022/shival99-z-ui-components-z-scrollarea.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-show-more.mjs +9 -9
- package/fesm2022/shival99-z-ui-components-z-show-more.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-table.mjs +83 -149
- package/fesm2022/shival99-z-ui-components-z-table.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-tabs.mjs +2 -2
- package/fesm2022/shival99-z-ui-components-z-tabs.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-toast.mjs +4 -4
- package/fesm2022/shival99-z-ui-components-z-toast.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-tooltip.mjs +1 -1
- package/fesm2022/shival99-z-ui-components-z-tooltip.mjs.map +1 -1
- package/package.json +1 -1
- package/types/shival99-z-ui-components-z-autocomplete.d.ts +1 -1
- package/types/shival99-z-ui-components-z-button-group.d.ts +1 -1
- package/types/shival99-z-ui-components-z-drawer.d.ts +3 -6
- package/types/shival99-z-ui-components-z-scrollarea.d.ts +2 -0
- package/types/shival99-z-ui-components-z-table.d.ts +36 -64
- package/.npmignore +0 -58
|
@@ -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 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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"}
|
|
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 }); // Toggle the outer frame shadow.\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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"}
|
|
@@ -19,13 +19,10 @@ const zScrollAreaVariants = cva('z-scrollarea block overflow-hidden w-full', {
|
|
|
19
19
|
});
|
|
20
20
|
|
|
21
21
|
class ZScrollAreaComponent {
|
|
22
|
-
// Lấy reference đến ngx-scrollbar
|
|
23
22
|
scrollbarRef = viewChild('scrollbarRef', /* @ts-ignore */
|
|
24
23
|
...(ngDevMode ? [{ debugName: "scrollbarRef" }] : /* istanbul ignore next */ []));
|
|
25
|
-
// Lấy reference đến native viewport
|
|
26
24
|
nativeViewport = viewChild('nativeViewport', /* @ts-ignore */
|
|
27
25
|
...(ngDevMode ? [{ debugName: "nativeViewport" }] : /* istanbul ignore next */ []));
|
|
28
|
-
// Khai báo các inputs sử dụng Signals API
|
|
29
26
|
class = input('', /* @ts-ignore */
|
|
30
27
|
...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
|
|
31
28
|
zType = input('custom', /* @ts-ignore */
|
|
@@ -42,15 +39,12 @@ class ZScrollAreaComponent {
|
|
|
42
39
|
...(ngDevMode ? [{ debugName: "zSensorThrottleTime" }] : /* istanbul ignore next */ []));
|
|
43
40
|
zDisableSensor = input(false, /* @ts-ignore */
|
|
44
41
|
...(ngDevMode ? [{ debugName: "zDisableSensor" }] : /* istanbul ignore next */ []));
|
|
45
|
-
// Khai báo các outputs sử dụng Signals API
|
|
46
42
|
zScroll = output();
|
|
47
43
|
zScrollbarInit = output();
|
|
48
|
-
// Tính toán các class cho host element
|
|
49
44
|
hostClasses = computed(() => zMergeClasses(zScrollAreaVariants({
|
|
50
45
|
zSize: this.zSize(),
|
|
51
46
|
}), `z-scrollarea-${this.zOrientation()}`, `z-scrollarea-visibility-${this.zVisibility()}`, this.class()), /* @ts-ignore */
|
|
52
47
|
...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
|
|
53
|
-
// Tính toán các class cho native viewport
|
|
54
48
|
nativeClasses = computed(() => {
|
|
55
49
|
const orientation = this.zOrientation();
|
|
56
50
|
let overflowClass = 'overflow-auto';
|
|
@@ -70,11 +64,11 @@ class ZScrollAreaComponent {
|
|
|
70
64
|
}
|
|
71
65
|
this.zScrollbarInit.emit(scrollbar);
|
|
72
66
|
}
|
|
73
|
-
//
|
|
67
|
+
// Forward native and custom scrollbar scroll events.
|
|
74
68
|
onScroll(event) {
|
|
75
69
|
this.zScroll.emit(event);
|
|
76
70
|
}
|
|
77
|
-
|
|
71
|
+
/** Scroll the configured viewport programmatically. */
|
|
78
72
|
scrollTo(options) {
|
|
79
73
|
if (this.zType() === 'native') {
|
|
80
74
|
const nativeEl = this.nativeViewport()?.nativeElement;
|
|
@@ -89,7 +83,7 @@ class ZScrollAreaComponent {
|
|
|
89
83
|
}
|
|
90
84
|
void scrollbar.scrollTo(options);
|
|
91
85
|
}
|
|
92
|
-
|
|
86
|
+
/** Scroll the configured viewport to an element. */
|
|
93
87
|
scrollToElement(selectorOrElement, options) {
|
|
94
88
|
if (this.zType() === 'native') {
|
|
95
89
|
const nativeEl = this.nativeViewport()?.nativeElement;
|
|
@@ -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 public readonly scrollbarRef = viewChild<NgScrollbar>('scrollbarRef');\n public readonly nativeViewport = viewChild<ElementRef<HTMLElement>>('nativeViewport');\n\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 public readonly zScroll = output<Event>();\n public readonly zScrollbarInit = output<NgScrollbar>();\n\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 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 // Forward native and custom scrollbar scroll events.\n protected onScroll(event: Event): void {\n this.zScroll.emit(event);\n }\n\n /** Scroll the configured viewport programmatically. */\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 /** Scroll the configured viewport to an element. */\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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"}
|
|
@@ -57,7 +57,7 @@ class ZShowMoreComponent {
|
|
|
57
57
|
return typeof maxH === 'number' ? `${maxH}px` : maxH;
|
|
58
58
|
}, /* @ts-ignore */
|
|
59
59
|
...(ngDevMode ? [{ debugName: "computedMaxHeight" }] : /* istanbul ignore next */ []));
|
|
60
|
-
//
|
|
60
|
+
// Fade the content into the card or page background.
|
|
61
61
|
blurGradientStyle = computed(() => {
|
|
62
62
|
const bg = this.zBlurColor() || 'var(--card, var(--background, #fff))';
|
|
63
63
|
return {
|
|
@@ -72,7 +72,7 @@ class ZShowMoreComponent {
|
|
|
72
72
|
if (!innerEl) {
|
|
73
73
|
return;
|
|
74
74
|
}
|
|
75
|
-
//
|
|
75
|
+
// Compare the content height with the configured maximum.
|
|
76
76
|
const checkOverflow = () => {
|
|
77
77
|
const { scrollHeight } = innerEl;
|
|
78
78
|
this._scrollHeight.set(scrollHeight);
|
|
@@ -81,31 +81,31 @@ class ZShowMoreComponent {
|
|
|
81
81
|
this._isOverflowing.set(scrollHeight > maxH);
|
|
82
82
|
return;
|
|
83
83
|
}
|
|
84
|
-
//
|
|
84
|
+
// String values such as `100%` and `calc(100% - 40px)` need layout measurement.
|
|
85
85
|
const contentEl = this._contentContainer()?.nativeElement;
|
|
86
86
|
if (!contentEl) {
|
|
87
87
|
return;
|
|
88
88
|
}
|
|
89
|
-
//
|
|
89
|
+
// Disable transitions while measuring the collapsed height.
|
|
90
90
|
const originalTransition = contentEl.style.transition;
|
|
91
91
|
const originalMaxHeight = contentEl.style.maxHeight;
|
|
92
92
|
contentEl.style.transition = 'none';
|
|
93
93
|
contentEl.style.maxHeight = maxH;
|
|
94
|
-
// Force
|
|
94
|
+
// Force layout so the browser applies the temporary height.
|
|
95
95
|
const collapsedClientHeight = contentEl.clientHeight;
|
|
96
|
-
//
|
|
96
|
+
// Restore the original styles.
|
|
97
97
|
contentEl.style.maxHeight = originalMaxHeight;
|
|
98
|
-
// Force
|
|
98
|
+
// Force layout before restoring the transition to avoid a visual jump.
|
|
99
99
|
void contentEl.offsetHeight;
|
|
100
100
|
contentEl.style.transition = originalTransition;
|
|
101
|
-
//
|
|
101
|
+
// Ignore elements that are not currently laid out.
|
|
102
102
|
if (collapsedClientHeight === 0 && contentEl.offsetWidth === 0) {
|
|
103
103
|
return;
|
|
104
104
|
}
|
|
105
105
|
this._isOverflowing.set(scrollHeight > collapsedClientHeight);
|
|
106
106
|
};
|
|
107
107
|
checkOverflow();
|
|
108
|
-
//
|
|
108
|
+
// Recheck when the content size changes.
|
|
109
109
|
const resizeObserver = new ResizeObserver(() => {
|
|
110
110
|
checkOverflow();
|
|
111
111
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shival99-z-ui-components-z-show-more.mjs","sources":["../../../../libs/core-ui/components/z-show-more/z-show-more.component.ts","../../../../libs/core-ui/components/z-show-more/z-show-more.component.html","../../../../libs/core-ui/components/z-show-more/shival99-z-ui-components-z-show-more.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n inject,\n input,\n signal,\n viewChild,\n afterNextRender,\n ViewEncapsulation,\n output,\n} from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ZButtonComponent, type ZButtonVariants } from '@shival99/z-ui/components/z-button';\nimport { ZIconComponent } from '@shival99/z-ui/components/z-icon';\nimport { zMergeClasses, zTransform } from '@shival99/z-ui/utils';\nimport type { ClassValue } from 'clsx';\n\n@Component({\n selector: 'z-show-more',\n imports: [ZButtonComponent, ZIconComponent, TranslatePipe],\n standalone: true,\n templateUrl: './z-show-more.component.html',\n styleUrl: './z-show-more.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class]': 'zClasses()',\n },\n})\nexport class ZShowMoreComponent {\n private readonly _destroyRef = inject(DestroyRef);\n\n // Inputs\n public readonly class = input<ClassValue>('');\n public readonly zMaxHeight = input<number | string>(150);\n public readonly zShowMoreLabel = input<string | undefined>(undefined);\n public readonly zShowLessLabel = input<string | undefined>(undefined);\n public readonly zShowLessButton = input<boolean>(true);\n public readonly zButtonType = input<ZButtonVariants['zType']>('ghost-primary');\n public readonly zButtonSize = input<ZButtonVariants['zSize']>('sm');\n public readonly zWave = input(false, { transform: zTransform });\n public readonly zBlurHeight = input<number>(64);\n public readonly zBlurColor = input<string | undefined>(undefined);\n\n // Outputs\n public readonly zExpandChange = output<boolean>();\n\n // Queries\n private readonly _contentContainer = viewChild<ElementRef<HTMLElement>>('contentContainer');\n private readonly _contentInner = viewChild<ElementRef<HTMLElement>>('contentInner');\n\n // State\n private readonly _isExpanded = signal(false);\n private readonly _isOverflowing = signal(false);\n private readonly _scrollHeight = signal(0);\n\n // Readonly bindings for template\n protected readonly isExpanded = this._isExpanded.asReadonly();\n protected readonly isOverflowing = this._isOverflowing.asReadonly();\n\n protected readonly zClasses = computed(() => zMergeClasses('block w-full', this.class()));\n\n protected readonly computedMaxHeight = computed(() => {\n if (!this._isOverflowing()) {\n return 'none';\n }\n if (this._isExpanded()) {\n return `${this._scrollHeight()}px`;\n }\n const maxH = this.zMaxHeight();\n return typeof maxH === 'number' ? `${maxH}px` : maxH;\n });\n\n // Tạo linear gradient mờ dần xuống nền (card/page)\n protected readonly blurGradientStyle = computed(() => {\n const bg = this.zBlurColor() || 'var(--card, var(--background, #fff))';\n return {\n 'background-image': `linear-gradient(to top, ${bg} 0%, transparent 100%)`,\n height: `${this.zBlurHeight()}px`,\n };\n });\n\n constructor() {\n afterNextRender(() => {\n const innerEl = this._contentInner()?.nativeElement;\n if (!innerEl) {\n return;\n }\n\n // Kiểm tra chiều cao nội dung thực tế so với chiều cao tối đa giới hạn\n const checkOverflow = () => {\n const { scrollHeight } = innerEl;\n this._scrollHeight.set(scrollHeight);\n\n const maxH = this.zMaxHeight();\n if (typeof maxH === 'number') {\n this._isOverflowing.set(scrollHeight > maxH);\n return;\n }\n\n // Nếu zMaxHeight là string (ví dụ: '100%', 'calc(100% - 40px)')\n const contentEl = this._contentContainer()?.nativeElement;\n if (!contentEl) {\n return;\n }\n\n // Tạm thời tắt transition để đo chiều cao chính xác mà không bị ảnh hưởng bởi chuyển động\n const originalTransition = contentEl.style.transition;\n const originalMaxHeight = contentEl.style.maxHeight;\n\n contentEl.style.transition = 'none';\n contentEl.style.maxHeight = maxH;\n\n // Force reflow để trình duyệt tính toán lại layout\n const collapsedClientHeight = contentEl.clientHeight;\n\n // Khôi phục lại trạng thái ban đầu\n contentEl.style.maxHeight = originalMaxHeight;\n // Force reflow để tránh giật lag khi phục hồi transition\n void contentEl.offsetHeight;\n contentEl.style.transition = originalTransition;\n\n // Nếu phần tử đang ẩn (display: none) thì bỏ qua\n if (collapsedClientHeight === 0 && contentEl.offsetWidth === 0) {\n return;\n }\n\n this._isOverflowing.set(scrollHeight > collapsedClientHeight);\n };\n\n checkOverflow();\n\n // Sử dụng ResizeObserver để lắng nghe thay đổi kích thước của phần tử nội dung bên trong\n const resizeObserver = new ResizeObserver(() => {\n checkOverflow();\n });\n\n resizeObserver.observe(innerEl);\n\n this._destroyRef.onDestroy(() => {\n resizeObserver.disconnect();\n });\n });\n }\n\n protected toggle(): void {\n const nextState = !this._isExpanded();\n this._isExpanded.set(nextState);\n this.zExpandChange.emit(nextState);\n }\n}\n","<div class=\"z-show-more flex h-full min-h-0 w-full flex-col\">\n <div\n #contentContainer\n class=\"z-show-more-content relative min-h-0 flex-1 overflow-hidden transition-[max-height] duration-300 ease-out\"\n [style.max-height]=\"computedMaxHeight()\">\n <div #contentInner>\n <ng-content />\n </div>\n\n @if (!isExpanded() && isOverflowing()) {\n <div\n class=\"pointer-events-none absolute right-0 bottom-0 left-0 transition-opacity duration-300\"\n [style]=\"blurGradientStyle()\"></div>\n }\n </div>\n\n @if (isOverflowing() && (zShowLessButton() || !isExpanded())) {\n <div class=\"z-show-more-actions mt-2 flex justify-center\">\n <button z-button [zType]=\"zButtonType()\" [zSize]=\"zButtonSize()\" [zWave]=\"zWave()\" (click)=\"toggle()\">\n <span>\n {{\n isExpanded()\n ? zShowLessLabel() || ('i18n_z_ui_show_more_collapse' | translate)\n : zShowMoreLabel() || ('i18n_z_ui_show_more_expand' | translate)\n }}\n </span>\n <z-icon [zType]=\"isExpanded() ? 'lucideChevronUp' : 'lucideChevronDown'\" zSize=\"16\" class=\"ml-1\" />\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-show-more.mjs","sources":["../../../../libs/core-ui/components/z-show-more/z-show-more.component.ts","../../../../libs/core-ui/components/z-show-more/z-show-more.component.html","../../../../libs/core-ui/components/z-show-more/shival99-z-ui-components-z-show-more.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n inject,\n input,\n signal,\n viewChild,\n afterNextRender,\n ViewEncapsulation,\n output,\n} from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ZButtonComponent, type ZButtonVariants } from '@shival99/z-ui/components/z-button';\nimport { ZIconComponent } from '@shival99/z-ui/components/z-icon';\nimport { zMergeClasses, zTransform } from '@shival99/z-ui/utils';\nimport type { ClassValue } from 'clsx';\n\n@Component({\n selector: 'z-show-more',\n imports: [ZButtonComponent, ZIconComponent, TranslatePipe],\n standalone: true,\n templateUrl: './z-show-more.component.html',\n styleUrl: './z-show-more.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class]': 'zClasses()',\n },\n})\nexport class ZShowMoreComponent {\n private readonly _destroyRef = inject(DestroyRef);\n\n // Inputs\n public readonly class = input<ClassValue>('');\n public readonly zMaxHeight = input<number | string>(150);\n public readonly zShowMoreLabel = input<string | undefined>(undefined);\n public readonly zShowLessLabel = input<string | undefined>(undefined);\n public readonly zShowLessButton = input<boolean>(true);\n public readonly zButtonType = input<ZButtonVariants['zType']>('ghost-primary');\n public readonly zButtonSize = input<ZButtonVariants['zSize']>('sm');\n public readonly zWave = input(false, { transform: zTransform });\n public readonly zBlurHeight = input<number>(64);\n public readonly zBlurColor = input<string | undefined>(undefined);\n\n // Outputs\n public readonly zExpandChange = output<boolean>();\n\n // Queries\n private readonly _contentContainer = viewChild<ElementRef<HTMLElement>>('contentContainer');\n private readonly _contentInner = viewChild<ElementRef<HTMLElement>>('contentInner');\n\n // State\n private readonly _isExpanded = signal(false);\n private readonly _isOverflowing = signal(false);\n private readonly _scrollHeight = signal(0);\n\n // Readonly bindings for template\n protected readonly isExpanded = this._isExpanded.asReadonly();\n protected readonly isOverflowing = this._isOverflowing.asReadonly();\n\n protected readonly zClasses = computed(() => zMergeClasses('block w-full', this.class()));\n\n protected readonly computedMaxHeight = computed(() => {\n if (!this._isOverflowing()) {\n return 'none';\n }\n if (this._isExpanded()) {\n return `${this._scrollHeight()}px`;\n }\n const maxH = this.zMaxHeight();\n return typeof maxH === 'number' ? `${maxH}px` : maxH;\n });\n\n // Fade the content into the card or page background.\n protected readonly blurGradientStyle = computed(() => {\n const bg = this.zBlurColor() || 'var(--card, var(--background, #fff))';\n return {\n 'background-image': `linear-gradient(to top, ${bg} 0%, transparent 100%)`,\n height: `${this.zBlurHeight()}px`,\n };\n });\n\n constructor() {\n afterNextRender(() => {\n const innerEl = this._contentInner()?.nativeElement;\n if (!innerEl) {\n return;\n }\n\n // Compare the content height with the configured maximum.\n const checkOverflow = () => {\n const { scrollHeight } = innerEl;\n this._scrollHeight.set(scrollHeight);\n\n const maxH = this.zMaxHeight();\n if (typeof maxH === 'number') {\n this._isOverflowing.set(scrollHeight > maxH);\n return;\n }\n\n // String values such as `100%` and `calc(100% - 40px)` need layout measurement.\n const contentEl = this._contentContainer()?.nativeElement;\n if (!contentEl) {\n return;\n }\n\n // Disable transitions while measuring the collapsed height.\n const originalTransition = contentEl.style.transition;\n const originalMaxHeight = contentEl.style.maxHeight;\n\n contentEl.style.transition = 'none';\n contentEl.style.maxHeight = maxH;\n\n // Force layout so the browser applies the temporary height.\n const collapsedClientHeight = contentEl.clientHeight;\n\n // Restore the original styles.\n contentEl.style.maxHeight = originalMaxHeight;\n // Force layout before restoring the transition to avoid a visual jump.\n void contentEl.offsetHeight;\n contentEl.style.transition = originalTransition;\n\n // Ignore elements that are not currently laid out.\n if (collapsedClientHeight === 0 && contentEl.offsetWidth === 0) {\n return;\n }\n\n this._isOverflowing.set(scrollHeight > collapsedClientHeight);\n };\n\n checkOverflow();\n\n // Recheck when the content size changes.\n const resizeObserver = new ResizeObserver(() => {\n checkOverflow();\n });\n\n resizeObserver.observe(innerEl);\n\n this._destroyRef.onDestroy(() => {\n resizeObserver.disconnect();\n });\n });\n }\n\n protected toggle(): void {\n const nextState = !this._isExpanded();\n this._isExpanded.set(nextState);\n this.zExpandChange.emit(nextState);\n }\n}\n","<div class=\"z-show-more flex h-full min-h-0 w-full flex-col\">\n <div\n #contentContainer\n class=\"z-show-more-content relative min-h-0 flex-1 overflow-hidden transition-[max-height] duration-300 ease-out\"\n [style.max-height]=\"computedMaxHeight()\">\n <div #contentInner>\n <ng-content />\n </div>\n\n @if (!isExpanded() && isOverflowing()) {\n <div\n class=\"pointer-events-none absolute right-0 bottom-0 left-0 transition-opacity duration-300\"\n [style]=\"blurGradientStyle()\"></div>\n }\n </div>\n\n @if (isOverflowing() && (zShowLessButton() || !isExpanded())) {\n <div class=\"z-show-more-actions mt-2 flex justify-center\">\n <button z-button [zType]=\"zButtonType()\" [zSize]=\"zButtonSize()\" [zWave]=\"zWave()\" (click)=\"toggle()\">\n <span>\n {{\n isExpanded()\n ? zShowLessLabel() || ('i18n_z_ui_show_more_collapse' | translate)\n : zShowMoreLabel() || ('i18n_z_ui_show_more_expand' | translate)\n }}\n </span>\n <z-icon [zType]=\"isExpanded() ? 'lucideChevronUp' : 'lucideChevronDown'\" zSize=\"16\" class=\"ml-1\" />\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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"}
|