UNPKG

@sikka/hawa

Version:

Modern UI Kit made with Tailwind

1 lines • 18.5 kB
{"version":3,"sources":["../../elements/signature/Signature.tsx","../../util/index.ts","../../elements/label/Label.tsx","../../elements/tooltip/Tooltip.tsx"],"sourcesContent":["import React, { useRef, useEffect, FC } from \"react\";\n\nimport { cn } from \"@util/index\";\n// @ts-ignore\nimport SignaturePad, { SignaturePadOptions } from \"signature_pad\";\n// @ts-ignore\nimport trimCanvas from \"trim-canvas\";\n\nimport { Label, LabelProps } from \"@elements/label\";\n\nexport interface SignatureCanvasProps extends SignaturePadOptions {\n canvasProps?: React.CanvasHTMLAttributes<HTMLCanvasElement>;\n clearOnResize?: boolean;\n onGetImage?: any;\n helperText?: any;\n texts?: { clear?: string };\n labelProps?: LabelProps;\n label?: any;\n}\n\nexport const Signature: FC<SignatureCanvasProps> = ({\n canvasProps,\n clearOnResize = false,\n onGetImage,\n texts,\n label,\n labelProps,\n helperText,\n ...sigPadProps\n}) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const sigPadRef = useRef<SignaturePad | null>(null);\n\n const checkClearOnResize = () => {\n if (!clearOnResize) {\n return;\n }\n resizeCanvas();\n };\n\n const resizeCanvas = () => {\n const canvas = canvasRef.current;\n if (canvas && canvas.parentElement) {\n const ratio = Math.max(window.devicePixelRatio || 1, 1);\n if (typeof canvasProps?.width === \"undefined\") {\n // Full width of the parent element\n canvas.width = canvas.parentElement.offsetWidth * ratio;\n } else {\n // Use specified width\n canvas.width = Number(canvasProps.width) * ratio;\n }\n canvas.height = 150 * ratio;\n\n // if (typeof canvasProps?.height === \"undefined\") {\n // canvas.height = canvas.parentElement.offsetHeight * ratio;\n // } else {\n // canvas.height = Number(canvasProps.height) * ratio; // Ensure it's treated as a number\n // }\n\n canvas.getContext(\"2d\")?.scale(ratio, ratio);\n clear();\n }\n };\n const getTrimmedCanvas = (): HTMLCanvasElement => {\n const canvas = canvasRef.current;\n if (!canvas) {\n throw new Error(\"Canvas reference is null\");\n }\n const copy = document.createElement(\"canvas\");\n copy.width = canvas.width;\n copy.height = canvas.height;\n copy.getContext(\"2d\")?.drawImage(canvas, 0, 0);\n return trimCanvas(copy);\n };\n const getSignatureImage = () => {\n const trimmedCanvas = getTrimmedCanvas();\n return trimmedCanvas.toDataURL();\n };\n useEffect(() => {\n if (onGetImage) {\n onGetImage(getSignatureImage);\n }\n }, [onGetImage]);\n useEffect(() => {\n const canvas = canvasRef.current;\n if (canvas) {\n sigPadRef.current = new SignaturePad(canvas, sigPadProps);\n resizeCanvas();\n window.addEventListener(\"resize\", checkClearOnResize);\n }\n\n return () => {\n window.removeEventListener(\"resize\", checkClearOnResize);\n };\n }, [sigPadProps]);\n\n const clear = () => sigPadRef.current?.clear();\n const isEmpty = () => !!sigPadRef.current?.isEmpty();\n const fromDataURL = (dataURL: string, options?: any) =>\n sigPadRef.current?.fromDataURL(dataURL, options);\n const toDataURL = (type?: string, encoderOptions?: any) =>\n sigPadRef.current?.toDataURL(type, encoderOptions);\n const fromData = (pointGroups: any[]) =>\n sigPadRef.current?.fromData(pointGroups);\n const toData = () => sigPadRef.current?.toData();\n\n return (\n <div className=\"hawa-w-full\">\n {label && (\n <Label {...labelProps} className=\"hawa-mb-2\">\n {label || \"Signature\"}\n </Label>\n )}\n <canvas\n ref={canvasRef}\n {...canvasProps}\n className={cn(\n \"hawa-rounded hawa-border hawa-bg-[hsl(var(--constant-background))]\",\n canvasProps?.className,\n )}\n />\n\n <div className=\"hawa-flex hawa-flex-row hawa-justify-between\">\n {/* Regular helper text */}\n {/* {helperText && ( */}\n <p\n className={cn(\n \"hawa-my-0 hawa-text-start hawa-text-xs hawa-text-helper-color hawa-transition-all\",\n helperText\n ? \"hawa-h-4 hawa-opacity-100\"\n : \"hawa-h-0 hawa-opacity-0\",\n )}\n >\n {helperText}\n </p>\n {/* )} */}\n <div className=\"clickable-link hawa-w-fit\" onClick={() => clear()}>\n {texts?.clear || \"Clear\"}\n </div>\n </div>\n </div>\n );\n};\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\ntype Palette = {\n name: string;\n colors: {\n [key: number]: string;\n };\n};\ntype Rgb = {\n r: number;\n g: number;\n b: number;\n};\nfunction hexToRgb(hex: string): Rgb | null {\n const sanitizedHex = hex.replaceAll(\"##\", \"#\");\n const colorParts = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(\n sanitizedHex\n );\n\n if (!colorParts) {\n return null;\n }\n\n const [, r, g, b] = colorParts;\n\n return {\n r: parseInt(r, 16),\n g: parseInt(g, 16),\n b: parseInt(b, 16)\n } as Rgb;\n}\n\nfunction rgbToHex(r: number, g: number, b: number): string {\n const toHex = (c: number) => `0${c.toString(16)}`.slice(-2);\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n}\n\nexport function getTextColor(color: string): \"#FFF\" | \"#333\" {\n const rgbColor = hexToRgb(color);\n\n if (!rgbColor) {\n return \"#333\";\n }\n\n const { r, g, b } = rgbColor;\n const luma = 0.2126 * r + 0.7152 * g + 0.0722 * b;\n\n return luma < 120 ? \"#FFF\" : \"#333\";\n}\n\nfunction lighten(hex: string, intensity: number): string {\n const color = hexToRgb(`#${hex}`);\n\n if (!color) {\n return \"\";\n }\n\n const r = Math.round(color.r + (255 - color.r) * intensity);\n const g = Math.round(color.g + (255 - color.g) * intensity);\n const b = Math.round(color.b + (255 - color.b) * intensity);\n\n return rgbToHex(r, g, b);\n}\n\nfunction darken(hex: string, intensity: number): string {\n const color = hexToRgb(hex);\n\n if (!color) {\n return \"\";\n }\n\n const r = Math.round(color.r * intensity);\n const g = Math.round(color.g * intensity);\n const b = Math.round(color.b * intensity);\n\n return rgbToHex(r, g, b);\n}\nconst parseColor = (color: any) => {\n if (color.startsWith(\"#\")) {\n // Convert hex to RGB\n let r = parseInt(color.slice(1, 3), 16);\n let g = parseInt(color.slice(3, 5), 16);\n let b = parseInt(color.slice(5, 7), 16);\n return [r, g, b];\n } else if (color.startsWith(\"rgb\")) {\n // Extract RGB values from rgb() format\n return color.match(/\\d+/g).map(Number);\n }\n // Default to white if format is unrecognized\n return [255, 255, 255];\n};\nexport const calculateLuminance = (color: any) => {\n const [r, g, b] = parseColor(color)?.map((c: any) => {\n c /= 255;\n return c <= 0.03928 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;\n });\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n};\n\nfunction getPallette(baseColor: string): Palette {\n const name = baseColor;\n\n const response: Palette = {\n name,\n colors: {\n 500: `#${baseColor}`.replace(\"##\", \"#\")\n }\n };\n\n const intensityMap: {\n [key: number]: number;\n } = {\n 50: 0.95,\n 100: 0.9,\n 200: 0.75,\n 300: 0.6,\n 400: 0.3,\n 600: 0.9,\n 700: 0.75,\n 800: 0.6,\n 900: 0.49\n };\n\n [50, 100, 200, 300, 400].forEach((level) => {\n response.colors[level] = lighten(baseColor, intensityMap[level]);\n });\n [600, 700, 800, 900].forEach((level) => {\n response.colors[level] = darken(baseColor, intensityMap[level]);\n });\n\n return response as Palette;\n}\n\nexport { getPallette };\n\n// const hexToRgb = (hex) => {\n// let d = hex?.split(\"#\")[1];\n// var aRgbHex = d?.match(/.{1,2}/g);\n// var aRgb = [\n// parseInt(aRgbHex[0], 16),\n// parseInt(aRgbHex[1], 16),\n// parseInt(aRgbHex[2], 16)\n// ];\n// return aRgb;\n// };\n// const getTextColor = (backColor) => {\n// let rgbArray = hexToRgb(backColor);\n// if (rgbArray[0] * 0.299 + rgbArray[1] * 0.587 + rgbArray[2] * 0.114 > 186) {\n// return \"#000000\";\n// } else {\n// return \"#ffffff\";\n// }\n// };\n// const replaceAt = function (string, index, replacement) {\n// // if (replacement == \"\" || replacement == \" \") {\n// // return (\n// // string.substring(0, index) +\n// // string.substring(index + replacement.length )\n// // );\n// // }\n// const replaced = string.substring(0, index) + replacement + string.substring(index + 1)\n// return replaced\n// };\n\n// export { hexToRgb, getTextColor, replaceAt };\n","import * as React from \"react\";\n\nimport { cn } from \"@util/index\";\n\nimport { PositionType } from \"@_types/commonTypes\";\n\nimport { Tooltip } from \"../tooltip\";\n\nexport type LabelProps = {\n hint?: React.ReactNode;\n hintSide?: PositionType;\n htmlFor?: string;\n required?: boolean;\n};\n\nconst Label = React.forwardRef<\n HTMLLabelElement,\n React.LabelHTMLAttributes<HTMLLabelElement> & LabelProps\n>(({ className, hint, hintSide, required, children, ...props }, ref) => (\n <div className=\"hawa-flex hawa-flex-row hawa-items-center hawa-gap-1 hawa-transition-all\">\n <label\n ref={ref}\n className={cn(\n \"hawa-text-sm hawa-font-medium hawa-leading-none peer-disabled:hawa-cursor-not-allowed peer-disabled:hawa-opacity-70\",\n className,\n )}\n {...props}\n >\n {children}\n {required && <span className=\"hawa-mx-0.5 hawa-text-red-500\">*</span>}\n </label>\n {hint && (\n <Tooltip\n content={hint}\n side={hintSide}\n triggerProps={{\n tabIndex: -1,\n onClick: (event) => event.preventDefault(),\n }}\n >\n <div>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"hawa-h-[14px] hawa-w-[14px] hawa-cursor-help\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\" />\n <path d=\"M12 17h.01\" />\n </svg>\n </div>\n </Tooltip>\n )}\n </div>\n));\n\nLabel.displayName = \"Label\";\n\nexport { Label };\n","import React from \"react\";\n\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { cn } from \"@util/index\";\n\nimport { PositionType } from \"@_types/commonTypes\";\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content> & {\n size?: \"default\" | \"small\" | \"large\";\n }\n>(({ className, sideOffset = 4, size = \"default\", ...props }, ref) => (\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"hawa-z-50 hawa-overflow-hidden hawa-rounded-md hawa-border hawa-bg-popover hawa-px-3 hawa-py-1.5 hawa-text-sm hawa-text-popover-foreground hawa-shadow-md hawa-animate-in hawa-fade-in-0 hawa-zoom-in-95 data-[state=closed]:hawa-animate-out data-[state=closed]:hawa-fade-out-0 data-[state=closed]:hawa-zoom-out-95 data-[side=bottom]:hawa-slide-in-from-top-2 data-[side=left]:hawa-slide-in-from-right-2 data-[side=right]:hawa-slide-in-from-left-2 data-[side=top]:hawa-slide-in-from-bottom-2\",\n {\n \"hawa-text-xs\": size === \"small\",\n \"hawa-text-xl\": size === \"large\",\n },\n className,\n )}\n {...props}\n />\n));\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\n\nconst TooltipArrow = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Arrow>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Arrow>\n>(({ className, ...props }, ref) => (\n <TooltipPrimitive.Arrow ref={ref} className={cn(className)} {...props} />\n));\nTooltipArrow.displayName = TooltipPrimitive.Arrow.displayName;\n\ntype TooltipTypes = {\n /** Controls the open state of the tooltip. */\n open?: any;\n /** Specifies the side where the tooltip will appear. */\n side?: PositionType;\n /** Content to be displayed within the tooltip. */\n content?: any;\n /** Elements to which the tooltip is anchored. */\n children?: any;\n /** Sets the default open state of the tooltip. */\n defaultOpen?: any;\n /** Event handler for open state changes. */\n onOpenChange?: any;\n /** Duration of the delay before the tooltip appears. */\n delayDuration?: any;\n /** Size of the tooltip. */\n size?: \"default\" | \"small\" | \"large\";\n /** Disables the tooltip. */\n disabled?: boolean;\n triggerProps?: TooltipPrimitive.TooltipTriggerProps;\n contentProps?: TooltipPrimitive.TooltipContentProps;\n providerProps?: TooltipPrimitive.TooltipProps;\n};\n\nconst Tooltip: React.FunctionComponent<TooltipTypes> = ({\n side,\n size,\n open,\n content,\n children,\n disabled,\n defaultOpen,\n onOpenChange,\n triggerProps,\n contentProps,\n providerProps,\n delayDuration = 300,\n ...props\n}) => {\n return (\n <TooltipPrimitive.TooltipProvider\n delayDuration={delayDuration}\n {...providerProps}\n >\n <TooltipPrimitive.Root\n open={!disabled && open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n {...props}\n >\n <TooltipPrimitive.Trigger {...triggerProps}>\n {children}\n </TooltipPrimitive.Trigger>\n <TooltipContent\n size={size}\n side={side}\n align=\"center\"\n {...contentProps}\n style={{\n ...contentProps?.style,\n maxWidth: \"var(--radix-tooltip-content-available-width)\",\n maxHeight: \"var(--radix-tooltip-content-available-height)\",\n }}\n >\n {content}\n </TooltipContent>\n </TooltipPrimitive.Root>\n </TooltipPrimitive.TooltipProvider>\n );\n};\n\nexport { Tooltip };\n"],"mappings":"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","names":["React","React","React"]}