cr-ui-lib 1.0.2 → 1.0.4
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/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/components/button/PlainButton.tsx","../src/components/button/CollapseButton.tsx","../src/components/button/Button.tsx","../src/components/cards/GraphedCard.tsx","../src/components/cards/components/ErrorGraphContet.tsx","../src/components/assets/RefreshIcon.tsx","../src/components/cards/components/LineChart.tsx","../src/components/cards/components/LoaderGraphContent.tsx","../src/components/cards/SimpleCard.tsx","../src/components/cards/components/ErrorContent.tsx","../src/components/cards/components/LoaderContent.tsx","../src/components/common/Label.tsx","../src/components/graph/MultiLineGraph.tsx","../src/components/graph/SingleLineGraph.tsx","../src/components/inputs/CommonInput.tsx","../src/components/inputs/DateRange.tsx","../src/utility/daterange.tsx","../src/components/inputs/MultipleAutoSuggestionInput.tsx","../src/components/inputs/SingleListInput.tsx","../src/components/inputs/SingleSelectDropdown.tsx","../src/components/inputs/SelectionButton.tsx","../src/components/inputs/SingleDateInput.tsx","../src/components/inputs/TimeInput.tsx","../src/components/table/Pagination.tsx","../src/components/table/TableHeader.tsx","../src/components/table/DynamicTable.tsx","../src/components/table/DynamicTableV2.tsx","../src/components/toast/ErrorToast.tsx","../src/components/toast/SuccessToast.tsx","../src/components/wrappers/NavBar.tsx","../src/components/wrappers/Modal.tsx","../src/components/wrappers/PopupWrapper.tsx","../src/components/wrappers/SideNav.tsx","../src/components/wrappers/Box.tsx","../src/components/wrappers/BoxHeaders.tsx","../src/components/wrappers/BoxBody.tsx"],"sourcesContent":["export * from \"./components/button\";\nexport * from \"./components/cards\";\nexport * from \"./components/common\";\nexport * from \"./components/graph\";\nexport * from \"./components/inputs\";\nexport * from \"./components/table\";\nexport * from \"./components/toast\";\nexport * from \"./components/wrappers\";\nexport * from \"./utility\";\n","import { twMerge } from \"tailwind-merge\";\n\ninterface PlainButtonProps extends React.HTMLAttributes<HTMLDivElement> {\n className?: string;\n children?: React.ReactNode;\n}\nconst PlainButton = ({ className, children, ...rest }: PlainButtonProps) => {\n return (\n <div\n {...rest}\n className={twMerge(\n \"min-h-[26px] w-[50px] bg-white text-center rounded-[4px] flex items-center justify-center border border-[#E2E2E2] text-black cursor-pointer\",\n className\n )}\n >\n {children}\n </div>\n );\n};\n\nexport default PlainButton;\n","import { twMerge } from \"tailwind-merge\";\n\ninterface Props extends React.HTMLAttributes<HTMLDivElement> {\n isOpen: boolean;\n mainClass?: string;\n paragraphClass?: string;\n paragraphContent: string;\n title: string;\n titleClass?: string;\n}\nconst CollapseButton = ({\n isOpen,\n mainClass,\n paragraphClass,\n paragraphContent,\n title,\n titleClass,\n ...rest\n}: Props) => {\n return (\n <div\n className={twMerge(\n \"min-h-[40px] w-full px-[16px] py-[8px] bg-white border border-[#E2E2E2] rounded-[4px]\",\n mainClass\n )}\n >\n {/* Header */}\n <div\n {...rest}\n className=\"flex justify-between items-center cursor-pointer\"\n >\n <p\n className={twMerge(\n \"font-semibold text-[14px] transition-colors duration-300\",\n isOpen ? \"text-[#4062E5]\" : \"text-[#000]\",\n titleClass\n )}\n >\n {title}\n </p>\n <svg\n className={twMerge(\n \"transition-transform duration-300\",\n !isOpen && \"rotate-180\"\n )}\n width=\"10\"\n height=\"5\"\n viewBox=\"0 0 10 5\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M0 5L5 0L10 5H0Z\" fill=\"#757575\" />\n </svg>\n </div>\n\n <div\n className={twMerge(\n `overflow-hidden transition-all duration-300 ease-in-out`,\n isOpen ? \"max-h-40 opacity-100 mt-1\" : \"max-h-0 opacity-0 mt-0\"\n )}\n >\n <p className={twMerge(\"font-normal text-[14px]\", paragraphClass)}>\n {paragraphContent}\n </p>\n </div>\n </div>\n );\n};\n\nexport default CollapseButton;\n","import { twMerge } from \"tailwind-merge\";\n\ninterface ButtonProps extends React.HTMLAttributes<HTMLDivElement> {\n className?: string;\n children?: React.ReactNode;\n}\nconst Button = ({ className, children, ...rest }: ButtonProps) => {\n return (\n <div\n {...rest}\n className={twMerge(\n \"min-h-[26px] w-[50px] bg-[#4683B4] text-center flex items-center justify-center rounded-[4px] text-white cursor-pointer\",\n className\n )}\n >\n {children}\n </div>\n );\n};\n\nexport default Button;\n","import { twMerge } from \"tailwind-merge\";\nimport InfoIcon from \"../assets/info.svg\";\nimport ErrorGraphContent from \"./components/ErrorGraphContet\";\nimport LineChart from \"./components/LineChart\";\nimport LoaderGraphContent from \"./components/LoaderGraphContent\";\ninterface GraphedCardProps {\n className?: string;\n title: string;\n tooltip_text: string;\n subText?: string;\n value: string;\n unit?: string;\n image?: React.ReactNode;\n lineData: number[];\n lineLabel: string[];\n gradientColor0?: string;\n gradientColor1?: string;\n pointLabelColor?: string;\n labelPopupTitle?: string;\n isCustomTitle?: boolean;\n customTitle?: React.ReactNode;\n lineColor?: string;\n isLoading: boolean;\n isError: boolean;\n handleRefresh?: () => void;\n}\n\nconst GraphedCard = ({\n className,\n title,\n value,\n subText = \"\",\n unit = \"\",\n tooltip_text,\n image,\n gradientColor0,\n gradientColor1,\n pointLabelColor,\n labelPopupTitle,\n lineData,\n lineLabel,\n isCustomTitle = false,\n customTitle,\n lineColor,\n isLoading,\n isError,\n handleRefresh,\n}: GraphedCardProps) => {\n if (isLoading) {\n return <LoaderGraphContent className={className} />;\n }\n\n if (isError) {\n return (\n <ErrorGraphContent\n handleRefresh={handleRefresh}\n image={image}\n tooltip_text={tooltip_text}\n title={title}\n className={className}\n />\n );\n }\n return (\n <div\n className={twMerge(\n \"bg-white rounded-[6px] px-[8px] py-[9px] pl-[12px] w-full flex h-[180px] min-w-[210px] justify-between border border-1\",\n className\n )}\n style={{\n borderColor: \"#E2E2E2\",\n boxShadow: \"0px 12px 26px 0px #101E730F\",\n }}\n >\n <div className=\"flex-1 flex flex-col justify-between\">\n <div className=\"flex justify-between relative\">\n <div className={`flex-1 flex flex-col justify-between gap-1`}>\n <div className=\"flex items-center relative\">\n <h3\n className=\"text-content-2 font-semibold flex\"\n style={{ fontSize: \"12px\" }}\n >\n {isCustomTitle ? (\n customTitle\n ) : (\n <span\n className=\"font-medium\"\n style={{ letterSpacing: \"0.5px\" }}\n >\n {title}\n </span>\n )}\n <span\n className=\"cursor-pointer text-gray-400 relative group\"\n style={{ top: \"0.5px\", left: \"2px\" }}\n >\n <img\n src={InfoIcon}\n alt=\"Info\"\n width={12}\n height={12}\n className=\"pt-[1px]\"\n />\n <div\n className=\"absolute top-6 left-1/2 transform -translate-x-1/2 z-10 hidden rounded-md bg-black text-white text-xs p-2 shadow-md group-hover:block text-center\"\n style={{ width: \"170px\" }}\n >\n {tooltip_text}\n <div className=\"absolute left-1/2 -top-1 transform -translate-x-1/2 w-3 h-3 bg-black rotate-45\"></div>\n </div>\n </span>\n </h3>\n </div>\n <div className={`flex-grow items-center`}>\n <span className=\"text-[24px] font-semibold text-gray-900\">\n {subText == \"$\" ? \"$\" : \"\"}\n {value.trim()}\n {subText == \"$\" ? \"\" : subText}\n </span>\n <span className=\"text-gray-500 ml-2\">{unit}</span>\n </div>\n </div>\n\n <div className=\"ml-4\">{image}</div>\n <div className=\"absolute w-full h-full top-16\">\n <LineChart\n data={lineData}\n label={lineLabel}\n lineColor={lineColor}\n gradientColor0={gradientColor0}\n gradientColor1={gradientColor1}\n pointLabelColor={pointLabelColor}\n labelPopupTitle={labelPopupTitle}\n />\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default GraphedCard;\n","import { twMerge } from \"tailwind-merge\";\nimport InfoIcon from \"../../assets/info.svg\";\nimport RefreshIcon from \"../../assets/RefreshIcon\";\ninterface Props {\n title: string;\n tooltip_text: string;\n image?: React.ReactNode;\n handleRefresh?: () => void;\n className?: string;\n}\nconst ErrorGraphContent = ({\n className,\n title,\n tooltip_text,\n image,\n handleRefresh,\n}: Props) => {\n return (\n <div\n className={twMerge(\n \"bg-white rounded-[6px] px-[8px] py-[9px] pl-[12px] h-[180px] w-full border border-1\",\n className\n )}\n style={{ borderColor: \"#E2E2E2\" }}\n >\n <div className=\"flex justify-between relative\">\n <div className=\"flex-1 flex flex-col justify-between\">\n <div className=\"flex items-center relative\">\n <h3\n className=\"text-content-2 font-semibold flex\"\n style={{ fontSize: \"12px\" }}\n >\n <span className=\"font-medium\" style={{ letterSpacing: \"0.5px\" }}>\n {title}\n </span>\n\n <span\n className=\"cursor-pointer text-gray-400 relative group\"\n style={{ top: \"0.5px\", left: \"2px\" }}\n >\n <img\n src={InfoIcon}\n alt=\"Info\"\n width={12}\n height={12}\n className=\"pt-[1px]\"\n />\n <div\n className=\"absolute top-6 left-1/2 transform -translate-x-1/2 z-10 hidden rounded-md bg-black text-white text-xs p-2 shadow-md group-hover:block text-center\"\n style={{ width: \"170px\" }}\n >\n {tooltip_text}\n <div className=\"absolute left-1/2 -top-1 transform -translate-x-1/2 w-3 h-3 bg-black rotate-45\"></div>\n </div>\n </span>\n </h3>\n </div>\n <div\n className=\"flex justify-center mt-3 w-[53px] h-[16px] cursor-pointer\"\n onClick={handleRefresh}\n >\n <div className=\"flex gap-1 items-center\">\n <RefreshIcon height=\"16px\" width=\"16px\" color=\"#4062E5\" />\n <p className=\"text-[#4062E5] text-[10px]\">Refresh</p>\n </div>\n </div>\n </div>\n\n <div className=\"ml-4\">{image}</div>\n <div className=\"absolute w-full h-full top-[70px]\">\n <div className=\"h-[90px] bg-gray-300 rounded w-full animate-pulse\"></div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default ErrorGraphContent;\n","const RefreshIcon = ({ height = \"24px\", width = \"24px\", color = \"#000\" }) => (\n <svg\n fill={color}\n width={width}\n height={height}\n viewBox=\"0 0 32 32\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M27.1 14.313V5.396L24.158 8.34c-2.33-2.325-5.033-3.503-8.11-3.503C9.902 4.837 4.901 9.847 4.899 16c.001 6.152 5.003 11.158 11.15 11.16 4.276 0 9.369-2.227 10.836-8.478l.028-.122h-3.23l-.022.068c-1.078 3.242-4.138 5.421-7.613 5.421a8 8 0 0 1-5.691-2.359A7.993 7.993 0 0 1 8 16.001c0-4.438 3.611-8.049 8.05-8.049 2.069 0 3.638.58 5.924 2.573l-3.792 3.789H27.1z\" />\n </svg>\n);\n\nexport default RefreshIcon;\n","import {\n CategoryScale,\n Chart as ChartJS,\n Filler,\n Legend,\n LinearScale,\n LineElement,\n PointElement,\n Title,\n Tooltip,\n} from \"chart.js\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { Line } from \"react-chartjs-2\";\n\ninterface LineChartProps {\n data: number[];\n label: string[];\n gradientColor0?: string;\n gradientColor1?: string;\n pointLabelColor?: string;\n labelPopupTitle?: string;\n lineColor?: string;\n}\nChartJS.register(\n CategoryScale,\n LinearScale,\n PointElement,\n LineElement,\n Title,\n Tooltip,\n Filler,\n Legend\n);\n\nconst LineChart = ({\n data,\n label,\n lineColor = \"#17CA43\",\n gradientColor1 = \"rgba(23, 202, 67, 0.5)\",\n gradientColor0 = \"rgba(23, 202, 67, 0)\",\n pointLabelColor = \"#4062E5\",\n labelPopupTitle = \"Requests Completed\",\n}: LineChartProps) => {\n const chartRef = useRef(null);\n const [chartKey, setChartKey] = useState(`chart-${Date.now()}`);\n\n // Force chart to re-render when window resizes\n useEffect(() => {\n const handleResize = () => {\n setChartKey(`chart-${Date.now()}`);\n };\n\n window.addEventListener(\"resize\", handleResize);\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n };\n }, []);\n\n const months = label;\n\n const values = data;\n\n const options = useMemo(\n () => ({\n responsive: true,\n maintainAspectRatio: false,\n animation: {\n duration: 100,\n easing: \"easeOutQuad\" as const,\n },\n layout: {\n padding: {},\n },\n scales: {\n x: {\n display: false,\n grid: {\n drawBorder: false,\n drawTicks: false,\n drawOnChartArea: false,\n },\n },\n y: {\n display: false,\n grid: {\n drawBorder: false,\n drawTicks: false,\n drawOnChartArea: false,\n },\n },\n },\n\n plugins: {\n legend: { display: false },\n tooltip: {\n enabled: false,\n external: function (context: any) {\n let tooltipEl = document.getElementById(\"chartjs-tooltip\");\n if (!tooltipEl) {\n tooltipEl = document.createElement(\"div\");\n tooltipEl.id = \"chartjs-tooltip\";\n tooltipEl.innerHTML = \"<div></div>\";\n document.body.appendChild(tooltipEl);\n }\n\n const tooltipModel = context.tooltip;\n context.chart.canvas.style.cursor =\n tooltipModel.opacity === 0 ? \"default\" : \"pointer\";\n if (tooltipModel.opacity === 0) {\n tooltipEl.style.opacity = \"0\";\n return;\n }\n\n const dataPoint = tooltipModel.dataPoints?.[0];\n const value = dataPoint?.parsed.y;\n const label = dataPoint?.label;\n const arrowSize = 8;\n const position = context.chart.canvas.getBoundingClientRect();\n tooltipEl.style.position = \"absolute\";\n tooltipEl.style.left = \"0px\";\n tooltipEl.style.top = \"0px\";\n tooltipEl.style.opacity = \"1\";\n tooltipEl.style.pointerEvents = \"none\";\n tooltipEl.innerHTML = `\n <div style=\"position: relative;height: 57px; background:white; border:1px solid rgba(16, 30, 115, 0.1); padding:10px; border-radius:4px; font-size:12px; color:#333; display:flex; align-items:center; gap:10px;\">\n <div>\n <p style=\"color:#757575;\"><strong>${label}</strong></p>\n <span style=\"display: inline-flex; align-items: center; font-weight: bold; color: #757575;\">\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 9 10\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M0.416687 3.36663H2.16669V9.08329H0.416687V3.36663ZM3.68335 0.916626H5.31669V9.08329H3.68335V0.916626ZM6.95002 5.58329H8.58335V9.08329H6.95002V5.58329Z\" fill=\"#4683B4\"/>\n </svg> \n ${labelPopupTitle}: <span style=\"color:#757575;\"> ${value}</span>\n </span> \n </div>\n </div>\n `;\n\n const tooltipWidth = tooltipEl.offsetWidth;\n const tooltipHeight = tooltipEl.offsetHeight;\n const pointX =\n position.left + window.pageXOffset + tooltipModel.caretX;\n const pointY =\n position.top + window.pageYOffset + tooltipModel.caretY;\n const windowWidth = window.innerWidth;\n const tooltipLeftEdge = pointX - tooltipWidth / 2;\n const tooltipRightEdge = pointX + tooltipWidth / 2;\n let arrowLeftPercent = 50;\n let xAdjustment = 0;\n if (tooltipLeftEdge < 10) {\n xAdjustment = 10 - tooltipLeftEdge;\n } else if (tooltipRightEdge > windowWidth - 10) {\n xAdjustment = windowWidth - 10 - tooltipRightEdge;\n }\n\n const xPosition = tooltipLeftEdge + xAdjustment;\n const yPosition = pointY - tooltipHeight - arrowSize - 5;\n arrowLeftPercent = ((pointX - xPosition) / tooltipWidth) * 100;\n arrowLeftPercent = Math.max(10, Math.min(90, arrowLeftPercent));\n\n const outerArrowSize = 6;\n const innerArrowSize = 5;\n\n const innerHtml = `\n <div style=\"position: relative; background: white; border: 1px solid rgba(16, 30, 115, 0.1); padding: 10px; border-radius: 4px; font-size: 12px; color: #333; display: flex; align-items: center; gap: 10px;\">\n\n <!-- Outer arrow (border color) -->\n <div style=\"\n position: absolute;\n top: 100%;\n left: ${arrowLeftPercent}%;\n transform: translateX(-50%);\n width: 0;\n height: 0;\n border-left: ${outerArrowSize}px solid transparent;\n border-right: ${outerArrowSize}px solid transparent;\n border-top: ${outerArrowSize}px solid rgba(16, 30, 115, 0.1);\n \"></div>\n\n <!-- Inner arrow (white background) -->\n <div style=\"\n position: absolute;\n top: 100%;\n left: ${arrowLeftPercent}%;\n transform: translateX(-50%) translateY(-1px);\n width: 0;\n height: 0;\n border-left: ${innerArrowSize}px solid transparent;\n border-right: ${innerArrowSize}px solid transparent;\n border-top: ${innerArrowSize}px solid white;\n \"></div>\n\n <div>\n <p style=\"color:#757575;\"><strong>${label}</strong></p>\n <span style=\"display: inline-flex; align-items: center; font-weight: bold; color: #757575;\">\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 9 10\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M0.416687 3.36663H2.16669V9.08329H0.416687V3.36663ZM3.68335 0.916626H5.31669V9.08329H3.68335V0.916626ZM6.95002 5.58329H8.58335V9.08329H6.95002V5.58329Z\" fill=\"#4683B4\"/>\n </svg> \n ${labelPopupTitle}: <span style=\"color:#131414;\"> ${value}</span>\n </span> \n </div>\n </div>\n `;\n\n tooltipEl.innerHTML = innerHtml;\n tooltipEl.style.left = xPosition + \"px\";\n tooltipEl.style.top = yPosition + \"px\";\n },\n },\n },\n interaction: {\n intersect: false,\n mode: \"index\" as const,\n },\n elements: {\n line: { tension: 0.5 },\n point: {\n radius: 0,\n hoverRadius: 6,\n backgroundColor: \"#17CA43\",\n borderColor: \"white\",\n borderWidth: 2,\n pointHoverBorderWidth: 3,\n pointHoverRadius: 5,\n },\n },\n }),\n []\n );\n\n const verticalHoverLine = useMemo(\n () => ({\n id: \"verticalLine\",\n afterDraw: (chart: any) => {\n const tooltip = chart.tooltip;\n if (tooltip?._active?.length) {\n const activePoint = chart.tooltip._active[0];\n const ctx = chart.ctx;\n const x = activePoint.element.x;\n const topY = chart.scales.y.top;\n const bottomY = chart.scales.y.bottom;\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(x, topY);\n ctx.lineTo(x, bottomY);\n ctx.lineWidth = 0.5;\n ctx.strokeStyle = \"#4062E5\";\n ctx.setLineDash([5, 5]);\n ctx.stroke();\n ctx.restore();\n }\n },\n }),\n []\n );\n\n const lineData = useMemo(\n () => ({\n labels: months,\n datasets: [\n {\n label: labelPopupTitle,\n data: values,\n borderColor: lineColor,\n backgroundColor: (context: any) => {\n if (!context.chart.chartArea) return \"rgba(23, 202, 67, 0.5)\";\n const { ctx, chartArea } = context.chart;\n const gradient = ctx.createLinearGradient(\n 0,\n chartArea.bottom,\n 0,\n chartArea.top\n );\n gradient.addColorStop(0, gradientColor0);\n gradient.addColorStop(1, gradientColor1);\n return gradient;\n },\n fill: true,\n pointBackgroundColor: \"#ffffff\",\n pointBorderColor: pointLabelColor,\n },\n ],\n }),\n [months, values]\n );\n\n return (\n <div style={{ width: \"100%\", height: \"100px\" }}>\n <Line\n ref={chartRef}\n key={chartKey}\n options={options}\n data={lineData}\n plugins={[verticalHoverLine]}\n />\n </div>\n );\n};\nexport default LineChart;\n","import { twMerge } from \"tailwind-merge\";\n\ninterface Props {\n className?: string;\n}\nconst LoaderGraphContent = ({ className }: Props) => {\n return (\n <div\n className={twMerge(\n \"bg-white rounded-[6px] px-[8px] py-[9px] pl-[12px] h-[180px] w-full border border-1\",\n className\n )}\n style={{ borderColor: \"#E2E2E2\" }}\n >\n <div className=\"flex justify-between relative\">\n <div className=\"flex-1 flex flex-col justify-between relative\">\n <div className=\"flex items-center relative\">\n <div className=\"h-4 bg-gray-300 rounded w-1/2 animate-pulse\"></div>\n <div className=\"ml-1 mt-1 h-3 w-3 bg-gray-300 rounded-full animate-pulse\"></div>\n </div>\n <div className=\"mt-3 flex items-baseline\">\n <div className=\"h-6 bg-gray-300 rounded w-1/4 animate-pulse\"></div>\n </div>\n </div>\n\n <div className=\"ml-4 h-10 w-10 bg-gray-300 rounded-full animate-pulse\"></div>\n <div className=\"absolute w-full h-full top-[70px]\">\n <div className=\"h-[90px] bg-gray-300 rounded w-full animate-pulse\"></div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default LoaderGraphContent;\n","\"use client\";\n\nimport React from \"react\";\nimport { twMerge } from \"tailwind-merge\";\nimport InfoIcon from \"../assets/info.svg\";\nimport ErrorContent from \"./components/ErrorContent\";\nimport LoaderComponent from \"./components/LoaderContent\";\n\ninterface SimpleCardProps {\n title: string;\n value: string;\n unit?: string;\n tooltip_text: string;\n subText?: string;\n footerText?: string;\n hasDaysOption?: boolean;\n hasTillDateDayOption?: boolean;\n onDayChange?: (days: string) => void;\n image?: React.ReactNode;\n hasfooterDesign?: boolean;\n footerDesign?: React.ReactNode;\n className?: string;\n isLoading: boolean;\n isError: boolean;\n handleRefresh?: () => void;\n isCustomTitle?: boolean;\n customTitle?: React.ReactNode;\n}\n\nconst SimpleCard = ({\n title,\n value,\n image,\n unit = \"\",\n tooltip_text,\n subText = \"\",\n footerText = \"\",\n hasfooterDesign = false,\n footerDesign,\n hasDaysOption = false,\n hasTillDateDayOption = false,\n onDayChange,\n className,\n handleRefresh,\n isLoading,\n isError,\n isCustomTitle = false,\n customTitle,\n}: SimpleCardProps) => {\n const [selectedDay, setSelectedDay] = React.useState<string>(\"90\");\n const handleDayClick = (label: string) => {\n setSelectedDay(label);\n if (onDayChange) onDayChange(label);\n };\n\n const options = React.useMemo(() => {\n const baseOptions = [\"90\", \"30\", \"7\"];\n if (hasTillDateDayOption) {\n return [...baseOptions, \"till date\"];\n }\n return baseOptions;\n }, [hasTillDateDayOption]);\n\n if (isLoading) {\n return <LoaderComponent className={className} />;\n }\n\n if (isError) {\n return (\n <ErrorContent\n handleRefresh={handleRefresh}\n image={image}\n tooltip_text={tooltip_text}\n title={title}\n className={className}\n />\n );\n }\n\n const renderDayOption = (label: string) => {\n const isSelected = selectedDay === label;\n return (\n <span\n key={label}\n className={`cursor-pointer ${\n isSelected\n ? \"text-[#4683B4] font-semibold\"\n : \"text-[#757575] font-normal\"\n }`}\n style={{ letterSpacing: \"0.5px\", lineHeight: 1 }}\n onClick={() => handleDayClick(label)}\n >\n {label} {label !== \"till date\" && \"days\"}\n </span>\n );\n };\n\n return (\n <div\n className={twMerge(\n \"bg-white rounded-[6px] px-[8px] py-[9px] pl-[12px] w-full flex min-h-[100px] min-w-[210px] justify-between border border-1\",\n className\n )}\n style={{\n borderColor: \"#E2E2E2\",\n boxShadow: \"0px 12px 26px 0px #101E730F\",\n }}\n >\n <div className=\"flex-1 flex flex-col justify-between\">\n <div className=\"flex justify-between\">\n <div className={`flex-1 flex flex-col justify-between gap-1`}>\n <div className=\"flex items-center relative\">\n <h3\n className=\"text-content-2 font-semibold flex\"\n style={{ fontSize: \"12px\" }}\n >\n {isCustomTitle ? (\n customTitle\n ) : (\n <span\n className=\"font-medium\"\n style={{ letterSpacing: \"0.5px\" }}\n >\n {title}\n </span>\n )}\n <span\n className=\"cursor-pointer text-gray-400 relative group\"\n style={{ top: \"0.5px\", left: \"2px\" }}\n >\n <img\n src={InfoIcon}\n alt=\"Info\"\n width={12}\n height={12}\n className=\"pt-[1px]\"\n />\n <div\n className=\"absolute top-6 left-1/2 transform -translate-x-1/2 z-10 hidden rounded-md bg-black text-white text-xs p-2 shadow-md group-hover:block text-center\"\n style={{ width: \"170px\" }}\n >\n {tooltip_text}\n <div className=\"absolute left-1/2 -top-1 transform -translate-x-1/2 w-3 h-3 bg-black rotate-45\"></div>\n </div>\n </span>\n </h3>\n </div>\n <div className={`flex-grow items-center`}>\n <span className=\"text-[24px] font-semibold text-gray-900\">\n {subText == \"$\" ? \"$\" : \"\"}\n {value.trim()}\n {subText == \"$\" ? \"\" : subText}\n </span>\n <span className=\"text-gray-500 ml-2\">{unit}</span>\n </div>\n </div>\n <div className=\"ml-4\">{image}</div>\n </div>\n <div className=\"flex items-center gap-2\">\n {hasfooterDesign && footerDesign}\n {!hasDaysOption && (\n <span\n className=\"text-[12px] font-normal\"\n style={{\n color: \"#757575\",\n letterSpacing: \"0.5px\",\n lineHeight: 1,\n }}\n >\n {footerText}\n </span>\n )}\n </div>\n {hasDaysOption && (\n <div className=\"flex gap-[4px] text-[12px] font-normal text-center items-center\">\n {options.map((label, index, array) => (\n <React.Fragment key={label}>\n {renderDayOption(label)}\n {index < array.length - 1 && (\n <p className=\"text-[#757575]\">|</p>\n )}\n </React.Fragment>\n ))}\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default SimpleCard;\n","import React from \"react\";\nimport { twMerge } from \"tailwind-merge\";\nimport RefreshIcon from \"../../assets/RefreshIcon\";\nimport InfoIcon from \"../../assets/info.svg\";\ninterface ErrorContentProps {\n title: string;\n tooltip_text: string;\n image?: React.ReactNode;\n handleRefresh?: () => void;\n className?: string;\n}\nconst ErrorContent = ({\n title,\n tooltip_text,\n image,\n handleRefresh,\n className,\n}: ErrorContentProps) => {\n return (\n <div\n className={twMerge(\n \"bg-white rounded-[6px] px-[8px] py-[9px] min-h-[100px] w-full flex justify-between border border-1\",\n className\n )}\n style={{ borderColor: \"#E2E2E2\" }}\n >\n <div className=\"flex-1 flex flex-col justify-between\">\n <div className=\"flex items-center relative\">\n <div className=\"flex items-center relative\">\n <h3\n className=\"text-content-2 font-semibold flex\"\n style={{ fontSize: \"12px\" }}\n >\n <span className=\"font-medium\" style={{ letterSpacing: \"0.5px\" }}>\n {title}\n </span>\n\n <span\n className=\"cursor-pointer text-gray-400 relative group\"\n style={{ top: \"0.5px\", left: \"2px\" }}\n >\n <img\n src={InfoIcon}\n alt=\"Info\"\n width={12}\n height={12}\n className=\"pt-[1px]\"\n />\n <div\n className=\"absolute top-6 left-1/2 transform -translate-x-1/2 z-10 hidden rounded-md bg-black text-white text-xs p-2 shadow-md group-hover:block text-center\"\n style={{ width: \"170px\" }}\n >\n {tooltip_text}\n <div className=\"absolute left-1/2 -top-1 transform -translate-x-1/2 w-3 h-3 bg-black rotate-45\"></div>\n </div>\n </span>\n </h3>\n </div>\n </div>\n <div className=\"mt-2 flex items-baseline\">\n <div className=\"flex items-center px-2 py-1 rounded-md bg-[#F2F2F2] w-[190px] h-[28px] animate-pulse\"></div>\n </div>\n <div className=\"flex items-center\">\n <div className=\"flex items-center px-2 py-1 rounded-md bg-[#F2F2F2] w-[40px] h-[20px] animate-pulse\"></div>\n <div\n className=\"flex justify-center ml-2 w-[53px] h-[16px] cursor-pointer\"\n onClick={handleRefresh}\n >\n <div className=\"flex gap-1 items-center\">\n <RefreshIcon height=\"16px\" width=\"16px\" color=\"#4062E5\" />\n <p className=\"text-[#4062E5] text-[10px]\">Refresh</p>\n </div>\n </div>\n </div>\n </div>\n <div className=\"ml-4\">{image}</div>\n </div>\n );\n};\n\nexport default ErrorContent;\n","import { twMerge } from \"tailwind-merge\";\n\ninterface Props {\n className?: string;\n}\nconst LoaderComponent = ({ className }: Props) => {\n return (\n <div\n className={twMerge(\n \"bg-white rounded-[6px] px-[8px] py-[9px] min-h-[100px] w-full flex justify-between border border-1\",\n className\n )}\n style={{ borderColor: \"#E2E2E2\" }}\n >\n <div className=\"flex-1 flex flex-col justify-between\">\n <div className=\"flex items-center relative\">\n <div className=\"h-4 bg-gray-300 rounded w-1/2 animate-pulse\"></div>\n <div className=\"ml-1 mt-1 h-3 w-3 bg-gray-300 rounded-full animate-pulse\"></div>\n </div>\n <div className=\"mt-2 flex items-baseline\">\n <div className=\"h-6 bg-gray-300 rounded w-1/4 animate-pulse\"></div>\n </div>\n <div className=\"mt-2 flex items-center\">\n <div className=\"flex items-center px-2 py-1 rounded-md bg-gray-200 w-24 animate-pulse\">\n <div className=\"h-3 w-3 bg-gray-300 rounded-full mr-2\"></div>\n <div className=\"h-3 bg-gray-300 rounded w-12\"></div>\n </div>\n <div className=\"text-gray-500 text-xs ml-2 h-3 bg-gray-300 rounded w-16 animate-pulse\"></div>\n </div>\n </div>\n <div className=\"ml-4 h-10 w-10 bg-gray-300 rounded-full animate-pulse\"></div>\n </div>\n );\n};\n\nexport default LoaderComponent;\n","import { twMerge } from \"tailwind-merge\";\ninterface Props {\n title: string;\n classNames?: string;\n}\nconst Label = ({ title, classNames }: Props) => {\n return (\n <p className={twMerge(\"text-[14px] font-semibold \", classNames)}>{title}</p>\n );\n};\n\nexport default Label;\n","import {\n CategoryScale,\n Chart as ChartJS,\n Filler,\n Legend,\n LinearScale,\n LineElement,\n PointElement,\n Title,\n Tooltip,\n} from \"chart.js\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { Line } from \"react-chartjs-2\";\nimport { twMerge } from \"tailwind-merge\";\n\ninterface DataSet {\n data: number[];\n label: string;\n lineColor?: string;\n pointLabelColor?: string;\n}\n\ninterface MultiLineGraphProps {\n datasets: DataSet[];\n xAxisLabels: string[];\n className?: string;\n}\n\nChartJS.register(\n CategoryScale,\n LinearScale,\n PointElement,\n LineElement,\n Title,\n Tooltip,\n Filler,\n Legend\n);\n\nconst MultiLineGraph = ({\n datasets,\n xAxisLabels,\n className = \"\",\n}: MultiLineGraphProps) => {\n const chartRef = useRef(null);\n const [chartKey, setChartKey] = useState(`chart-${Date.now()}`);\n\n // Default colors for multiple lines\n const defaultColors = [\n { line: \"#17CA43\", point: \"#17CA43\" },\n { line: \"#FF6B6B\", point: \"#FF4757\" },\n { line: \"#4ECDC4\", point: \"#26D0CE\" },\n { line: \"#45B7D1\", point: \"#3742FA\" },\n { line: \"#FFA726\", point: \"#FF6F00\" },\n { line: \"#AB47BC\", point: \"#8E24AA\" },\n ];\n\n // Force chart to re-render when window resizes\n useEffect(() => {\n const handleResize = () => {\n setChartKey(`chart-${Date.now()}`);\n };\n\n window.addEventListener(\"resize\", handleResize);\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n };\n }, []);\n\n const options = useMemo(\n () => ({\n responsive: true,\n maintainAspectRatio: false,\n animation: {\n duration: 100,\n easing: \"easeOutQuad\" as const,\n },\n layout: {\n padding: {},\n },\n scales: {\n x: {\n display: true,\n\n grid: {\n drawBorder: true,\n drawTicks: true,\n drawOnChartArea: false,\n },\n },\n y: {\n display: true,\n border: {\n display: false,\n },\n grid: {\n drawBorder: false,\n drawTicks: false,\n drawOnChartArea: false,\n },\n ticks: {\n display: true, // 👈 Add this to hide the number labels\n },\n },\n },\n plugins: {\n legend: { display: false },\n tooltip: {\n enabled: false,\n external: function (context: any) {\n let tooltipEl = document.getElementById(\"chartjs-tooltip\");\n if (!tooltipEl) {\n tooltipEl = document.createElement(\"div\");\n tooltipEl.id = \"chartjs-tooltip\";\n tooltipEl.innerHTML = \"<div></div>\";\n document.body.appendChild(tooltipEl);\n }\n\n const tooltipModel = context.tooltip;\n context.chart.canvas.style.cursor =\n tooltipModel.opacity === 0 ? \"default\" : \"pointer\";\n if (tooltipModel.opacity === 0) {\n tooltipEl.style.opacity = \"0\";\n return;\n }\n\n const dataPoints = tooltipModel.dataPoints || [];\n // With 'nearest' mode, dataPoints will usually have only one item.\n const label = dataPoints[0]?.label;\n const arrowSize = 8;\n const position = context.chart.canvas.getBoundingClientRect();\n\n tooltipEl.style.position = \"absolute\";\n tooltipEl.style.left = \"0px\";\n tooltipEl.style.top = \"0px\";\n tooltipEl.style.opacity = \"1\";\n tooltipEl.style.pointerEvents = \"none\";\n\n const dataPointsHtml = dataPoints\n .map(\n (point: any, index: number) => `\n <div style=\"display: flex; align-items: center; gap: 8px; margin: ${\n index > 0 ? \"4px\" : \"0\"\n } 0;\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10.0833 0.75H1.91667C1.275 0.75 0.755833 1.275 0.755833 1.91667L0.75 10.0833C0.75 10.725 1.275 11.25 1.91667 11.25H10.0833C10.725 11.25 11.25 10.725 11.25 10.0833V1.91667C11.25 1.275 10.725 0.75 10.0833 0.75ZM10.0833 10.0833H1.91667V1.91667H10.0833V10.0833ZM5.125 8.91667H6.875V6.875H8.91667V5.125H6.875V3.08333H5.125V5.125H3.08333V6.875H5.125V8.91667Z\" fill=\"#4683B4\"/>\n </svg>\n <span style=\"font-weight: bold; color: #757575; margin-top: 1px;\">\n ${\n point.dataset.label\n }: <span style=\"color:#131414; padding-top: 1px;\">${\n point.parsed.y\n }</span>\n </span>\n </div>\n `\n )\n .join(\"\");\n\n const tooltipWidth = tooltipEl.offsetWidth;\n const tooltipHeight = tooltipEl.offsetHeight;\n const pointX =\n position.left + window.pageXOffset + tooltipModel.caretX;\n const pointY =\n position.top + window.pageYOffset + tooltipModel.caretY;\n const windowWidth = window.innerWidth;\n const tooltipLeftEdge = pointX - tooltipWidth / 2;\n const tooltipRightEdge = pointX + tooltipWidth / 2;\n\n let arrowLeftPercent = 50;\n let xAdjustment = 0;\n if (tooltipLeftEdge < 10) {\n xAdjustment = 10 - tooltipLeftEdge;\n } else if (tooltipRightEdge > windowWidth - 10) {\n xAdjustment = windowWidth - 10 - tooltipRightEdge;\n }\n\n const xPosition = tooltipLeftEdge + xAdjustment;\n const yPosition = pointY - tooltipHeight - arrowSize - 5;\n arrowLeftPercent = ((pointX - xPosition) / tooltipWidth) * 100;\n arrowLeftPercent = Math.max(10, Math.min(90, arrowLeftPercent));\n\n const outerArrowSize = 6;\n const innerArrowSize = 5;\n\n const innerHtml = `\n <div style=\"position: relative; background: white; border: 1px solid rgba(16, 30, 115, 0.1); padding: 10px; border-radius: 4px; font-size: 12px; color: #333; min-width: 120px;\">\n <div style=\"\n position: absolute;\n top: 100%;\n left: ${arrowLeftPercent}%;\n transform: translateX(-50%);\n width: 0;\n height: 0;\n border-left: ${outerArrowSize}px solid transparent;\n border-right: ${outerArrowSize}px solid transparent;\n border-top: ${outerArrowSize}px solid rgba(16, 30, 115, 0.1);\n \"></div>\n\n <div style=\"\n position: absolute;\n top: 100%;\n left: ${arrowLeftPercent}%;\n transform: translateX(-50%) translateY(-1px);\n width: 0;\n height: 0;\n border-left: ${innerArrowSize}px solid transparent;\n border-right: ${innerArrowSize}px solid transparent;\n border-top: ${innerArrowSize}px solid white;\n \"></div>\n\n <div>\n <p style=\"color:#757575; margin: 0 0 8px 0;\"><strong>${label}</strong></p>\n ${dataPointsHtml}\n </div>\n </div>\n `;\n\n tooltipEl.innerHTML = innerHtml;\n tooltipEl.style.left = xPosition + \"px\";\n tooltipEl.style.top = yPosition + \"px\";\n },\n },\n },\n interaction: {\n intersect: false,\n // 👇 CHANGE THIS LINE\n mode: \"nearest\" as const,\n },\n elements: {\n line: { tension: 0.5 },\n point: {\n radius: 0,\n hoverRadius: 6,\n backgroundColor: \"#ffffff\",\n borderWidth: 2,\n pointHoverBorderWidth: 3,\n pointHoverRadius: 5,\n },\n },\n }),\n []\n );\n\n const verticalHoverLine = useMemo(\n () => ({\n id: \"verticalLine\",\n afterDraw: (chart: any) => {\n const tooltip = chart.tooltip;\n if (tooltip?._active?.length) {\n const activePoint = chart.tooltip._active[0];\n const ctx = chart.ctx;\n const x = activePoint.element.x;\n const topY = chart.scales.y.top;\n const bottomY = chart.scales.y.bottom;\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(x, topY);\n ctx.lineTo(x, bottomY);\n ctx.lineWidth = 0.5;\n ctx.strokeStyle = \"#4062E5\";\n ctx.setLineDash([5, 5]);\n ctx.stroke();\n ctx.restore();\n }\n },\n }),\n []\n );\n\n const lineData = useMemo(\n () => ({\n labels: xAxisLabels,\n datasets: datasets.map((dataset, index) => {\n const colors = defaultColors[index % defaultColors.length];\n return {\n label: dataset.label,\n data: dataset.data,\n borderColor: dataset.lineColor || colors.line,\n backgroundColor: \"transparent\",\n fill: false,\n pointBackgroundColor: \"#ffffff\",\n pointBorderColor: dataset.pointLabelColor || colors.point,\n tension: 0.5,\n // 👇 ADD THESE TWO LINES to make the line thicker on hover\n borderWidth: 2,\n hoverBorderWidth: 3.5,\n };\n }),\n }),\n [datasets, xAxisLabels]\n );\n\n const dashedGridPlugin = useMemo(\n () => ({\n id: \"customGridAndLabels\",\n afterDatasetsDraw: (chart: any) => {\n const ctx = chart.ctx;\n const yAxis = chart.scales.y;\n const xAxis = chart.scales.x;\n\n if (!yAxis || !xAxis) return;\n\n ctx.save();\n\n ctx.beginPath();\n ctx.setLineDash([4, 4]);\n ctx.strokeStyle = \"rgba(0, 0, 0, 0.1)\";\n ctx.lineWidth = 1;\n\n yAxis.getTicks().forEach((tick: any, index: number) => {\n // ✅ MODIFIED LINE: Only skip the bottom-most line\n if (index === 0) {\n return;\n }\n const yPosition = yAxis.getPixelForValue(tick.value);\n ctx.moveTo(xAxis.left, yPosition);\n ctx.lineTo(xAxis.right, yPosition);\n });\n\n ctx.stroke();\n ctx.restore();\n },\n }),\n []\n );\n\n return (\n <div className={twMerge(\" w-full h-full\", className)}>\n <Line\n ref={chartRef}\n key={chartKey}\n options={options}\n data={lineData}\n plugins={[verticalHoverLine, dashedGridPlugin]}\n />\n </div>\n );\n};\n\nexport default MultiLineGraph;\n","import {\n CategoryScale,\n Chart as ChartJS,\n Filler,\n Legend,\n LinearScale,\n LineElement,\n PointElement,\n Title,\n Tooltip,\n} from \"chart.js\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { Line } from \"react-chartjs-2\";\nimport { twMerge } from \"tailwind-merge\";\n\ninterface SingleLineGraphProps {\n data: number[];\n label: string[];\n gradientColor0?: string;\n gradientColor1?: string;\n pointLabelColor?: string;\n labelPopupTitle?: string;\n lineColor?: string;\n className?: string;\n}\nChartJS.register(\n CategoryScale,\n LinearScale,\n PointElement,\n LineElement,\n Title,\n Tooltip,\n Filler,\n Legend\n);\n\nconst SingleLineGraph = ({\n data,\n label,\n lineColor = \"#17CA43\",\n gradientColor1 = \"rgba(23, 202, 67, 0.5)\",\n gradientColor0 = \"rgba(23, 202, 67, 0)\",\n pointLabelColor = \"#4062E5\",\n labelPopupTitle = \"Requests Completed\",\n className = \"\",\n}: SingleLineGraphProps) => {\n const chartRef = useRef(null);\n const [chartKey, setChartKey] = useState(`chart-${Date.now()}`);\n\n // Force chart to re-render when window resizes\n useEffect(() => {\n const handleResize = () => {\n setChartKey(`chart-${Date.now()}`);\n };\n\n window.addEventListener(\"resize\", handleResize);\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n };\n }, []);\n\n const months = label;\n\n const values = data;\n\n const options = useMemo(\n () => ({\n responsive: true,\n maintainAspectRatio: false,\n animation: {\n duration: 100,\n easing: \"easeOutQuad\" as const,\n },\n layout: {\n padding: {},\n },\n scales: {\n x: {\n display: true,\n\n grid: {\n drawBorder: true,\n drawTicks: true,\n drawOnChartArea: false,\n },\n },\n y: {\n display: true,\n border: {\n display: false,\n },\n grid: {\n drawBorder: false,\n drawTicks: false,\n drawOnChartArea: false,\n },\n ticks: {\n display: true, // 👈 Add this to hide the number labels\n },\n },\n },\n plugins: {\n legend: { display: false },\n tooltip: {\n enabled: false,\n external: function (context: any) {\n let tooltipEl = document.getElementById(\"chartjs-tooltip\");\n if (!tooltipEl) {\n tooltipEl = document.createElement(\"div\");\n tooltipEl.id = \"chartjs-tooltip\";\n tooltipEl.innerHTML = \"<div></div>\";\n document.body.appendChild(tooltipEl);\n }\n\n const tooltipModel = context.tooltip;\n context.chart.canvas.style.cursor =\n tooltipModel.opacity === 0 ? \"default\" : \"pointer\";\n if (tooltipModel.opacity === 0) {\n tooltipEl.style.opacity = \"0\";\n return;\n }\n\n const dataPoint = tooltipModel.dataPoints?.[0];\n const value = dataPoint?.parsed.y;\n const label = dataPoint?.label;\n const arrowSize = 8;\n const position = context.chart.canvas.getBoundingClientRect();\n tooltipEl.style.position = \"absolute\";\n tooltipEl.style.left = \"0px\";\n tooltipEl.style.top = \"0px\";\n tooltipEl.style.opacity = \"1\";\n tooltipEl.style.pointerEvents = \"none\";\n tooltipEl.innerHTML = `\n <div style=\"position: relative;height: 57px; background:white; border:1px solid rgba(16, 30, 115, 0.1); padding:10px; border-radius:4px; font-size:12px; color:#333; display:flex; align-items:center; gap:10px;\">\n <div>\n <p style=\"color:#757575;\"><strong>${label}</strong></p>\n <span style=\"display: inline-flex; align-items: center; font-weight: bold; color: #757575;\">\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 9 10\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M0.416687 3.36663H2.16669V9.08329H0.416687V3.36663ZM3.68335 0.916626H5.31669V9.08329H3.68335V0.916626ZM6.95002 5.58329H8.58335V9.08329H6.95002V5.58329Z\" fill=\"#4683B4\"/>\n </svg> \n ${labelPopupTitle}: <span style=\"color:#757575;\"> ${value}</span>\n </span> \n </div>\n </div>\n `;\n\n const tooltipWidth = tooltipEl.offsetWidth;\n const tooltipHeight = tooltipEl.offsetHeight;\n const pointX =\n position.left + window.pageXOffset + tooltipModel.caretX;\n const pointY =\n position.top + window.pageYOffset + tooltipModel.caretY;\n const windowWidth = window.innerWidth;\n const tooltipLeftEdge = pointX - tooltipWidth / 2;\n const tooltipRightEdge = pointX + tooltipWidth / 2;\n let arrowLeftPercent = 50;\n let xAdjustment = 0;\n if (tooltipLeftEdge < 10) {\n xAdjustment = 10 - tooltipLeftEdge;\n } else if (tooltipRightEdge > windowWidth - 10) {\n xAdjustment = windowWidth - 10 - tooltipRightEdge;\n }\n\n const xPosition = tooltipLeftEdge + xAdjustment;\n const yPosition = pointY - tooltipHeight - arrowSize - 5;\n arrowLeftPercent = ((pointX - xPosition) / tooltipWidth) * 100;\n arrowLeftPercent = Math.max(10, Math.min(90, arrowLeftPercent));\n\n const outerArrowSize = 6;\n const innerArrowSize = 5;\n\n const innerHtml = `\n <div style=\"position: relative; background: white; border: 1px solid rgba(16, 30, 115, 0.1); padding: 10px; border-radius: 4px; font-size: 12px; color: #333; display: flex; align-items: center; gap: 10px;\">\n\n <!-- Outer arrow (border color) -->\n <div style=\"\n position: absolute;\n top: 100%;\n left: ${arrowLeftPercent}%;\n transform: translateX(-50%);\n width: 0;\n height: 0;\n border-left: ${outerArrowSize}px solid transparent;\n border-right: ${outerArrowSize}px solid transparent;\n border-top: ${outerArrowSize}px solid rgba(16, 30, 115, 0.1);\n \"></div>\n\n <!-- Inner arrow (white background) -->\n <div style=\"\n position: absolute;\n top: 100%;\n left: ${arrowLeftPercent}%;\n transform: translateX(-50%) translateY(-1px);\n width: 0;\n height: 0;\n border-left: ${innerArrowSize}px solid transparent;\n border-right: ${innerArrowSize}px solid transparent;\n border-top: ${innerArrowSize}px solid white;\n \"></div>\n\n <div>\n <p style=\"color:#757575;\"><strong>${label}</strong></p>\n <span style=\"display: inline-flex; align-items: center; font-weight: bold; color: #757575;\">\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 9 10\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M0.416687 3.36663H2.16669V9.08329H0.416687V3.36663ZM3.68335 0.916626H5.31669V9.08329H3.68335V0.916626ZM6.95002 5.58329H8.58335V9.08329H6.95002V5.58329Z\" fill=\"#4683B4\"/>\n </svg> \n ${labelPopupTitle}: <span style=\"color:#131414;\"> ${value}</span>\n </span> \n </div>\n </div>\n `;\n\n tooltipEl.innerHTML = innerHtml;\n tooltipEl.style.left = xPosition + \"px\";\n tooltipEl.style.top = yPosition + \"px\";\n },\n },\n },\n interaction: {\n intersect: false,\n mode: \"index\" as const,\n },\n elements: {\n line: { tension: 0.5 },\n point: {\n radius: 0,\n hoverRadius: 6,\n backgroundColor: \"#17CA43\",\n borderColor: \"white\",\n borderWidth: 2,\n pointHoverBorderWidth: 3,\n pointHoverRadius: 5,\n },\n },\n }),\n []\n );\n\n const verticalHoverLine = useMemo(\n () => ({\n id: \"verticalLine\",\n afterDraw: (chart: any) => {\n const tooltip = chart.tooltip;\n if (tooltip?._active?.length) {\n const activePoint = chart.tooltip._active[0];\n const ctx = chart.ctx;\n const x = activePoint.element.x;\n const topY = chart.scales.y.top;\n const bottomY = chart.scales.y.bottom;\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(x, topY);\n ctx.lineTo(x, bottomY);\n ctx.lineWidth = 0.5;\n ctx.strokeStyle = \"#4062E5\";\n ctx.setLineDash([5, 5]);\n ctx.stroke();\n ctx.restore();\n }\n },\n }),\n []\n );\n\n const lineData = useMemo(\n () => ({\n labels: months,\n datasets: [\n {\n label: labelPopupTitle,\n data: values,\n borderColor: lineColor,\n backgroundColor: (context: any) => {\n if (!context.chart.chartArea) return \"rgba(23, 202, 67, 0.5)\";\n const { ctx, chartArea } = context.chart;\n const gradient = ctx.createLinearGradient(\n 0,\n chartArea.bottom,\n 0,\n chartArea.top\n );\n gradient.addColorStop(0, gradientColor0);\n gradient.addColorStop(1, gradientColor1);\n return gradient;\n },\n fill: true,\n pointBackgroundColor: \"#ffffff\",\n pointBorderColor: pointLabelColor,\n },\n ],\n }),\n [months, values]\n );\n\n const dashedGridPlugin = useMemo(\n () => ({\n id: \"customGridAndLabels\",\n afterDatasetsDraw: (chart: any) => {\n const ctx = chart.ctx;\n const yAxis = chart.scales.y;\n const xAxis = chart.scales.x;\n\n if (!yAxis || !xAxis) return;\n\n ctx.save();\n\n ctx.beginPath();\n ctx.setLineDash([4, 4]);\n ctx.strokeStyle = \"rgba(0, 0, 0, 0.1)\";\n ctx.lineWidth = 1;\n\n yAxis.getTicks().forEach((tick: any, index: number) => {\n // ✅ MODIFIED LINE: Only skip the bottom-most line\n if (index === 0) {\n return;\n }\n const yPosition = yAxis.getPixelForValue(tick.value);\n ctx.moveTo(xAxis.left, yPosition);\n ctx.lineTo(xAxis.right, yPosition);\n });\n\n ctx.stroke();\n ctx.restore();\n },\n }),\n []\n );\n\n return (\n <div className={twMerge(\"w-full h-full\", className)}>\n <Line\n ref={chartRef}\n key={chartKey}\n options={options}\n data={lineData}\n plugins={[verticalHoverLine, dashedGridPlugin]}\n />\n </div>\n );\n};\nexport default SingleLineGraph;\n","import React from \"react\";\nimport { twMerge } from \"tailwind-merge\";\n\ninterface CommonInputProps\n extends React.HTMLAttributes<HTMLInputElement | HTMLTextAreaElement> {\n label?: string;\n hasDollar?: boolean;\n value: string;\n onChange: (\n e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>\n ) => void;\n placeholder?: string;\n type?: string;\n height?: string;\n isTextarea?: boolean;\n className?: string;\n maxLength?: number;\n hasIcon?: boolean;\n icon?: React.ReactNode;\n labelColor?: string;\n borderWeight?: string;\n error?: string;\n dollarClass?: string;\n}\n\nconst CommonInput: React.FC<CommonInputProps> = ({\n label,\n hasDollar = false,\n dollarClass = \"\",\n value,\n onChange,\n placeholder = \"\",\n type = \"text\",\n height = \"h-[48px]\",\n isTextarea = false,\n className = \"\",\n maxLength,\n hasIcon = false,\n icon,\n labelColor = \"text-[#131414]\",\n borderWeight = \"border-[2px]\",\n error,\n ...rest\n}) => {\n const inputClasses = twMerge(\n height,\n \"px-3 py-2\",\n borderWeight,\n \"rounded-[8px] text-[14px] text-[#131414] placeholder-[#757575] font-hairline w-full focus:border-[#3C6E97] focus:outline-none resize-none\",\n error ? \"border-red-500 bg-red-100\" : \"border-[#E2E2E2]\",\n hasDollar && !isTextarea && \"pl-7\",\n isTextarea && \"pt-3 align-top\",\n className\n );\n\n return (\n <div className=\"w-full\">\n {/* Label */}\n {label && (\n <p className={twMerge(labelColor, \"text-[14px] font-semibold mb-1\")}>\n {label}\n </p>\n )}\n\n <div className=\"relative\">\n {/* Dollar sign */}\n {hasDollar && !isTextarea && (\n <span\n className={twMerge(\n \"absolute top-1/2 left-3 -translate-y-1/2 text-[#131414] text-[14px] font-medium\",\n dollarClass\n )}\n >\n $\n </span>\n )}\n {hasIcon && icon}\n {/* Input / Textarea */}\n {isTextarea ? (\n <textarea\n value={value}\n onChange={onChange}\n placeholder={placeholder}\n className={inputClasses}\n rows={4}\n maxLength={maxLength}\n {...rest}\n />\n ) : (\n <input\n type={type}\n value={value}\n onChange={onChange}\n placeholder={placeholder}\n className={inputClasses}\n maxLength={maxLength}\n {...rest}\n />\n )}\n </div>\n\n {/* Error */}\n {error && <span className=\"text-[12px] text-red-500\">{error}</span>}\n </div>\n );\n};\n\nexport default CommonInput;\n","import { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { twMerge } from \"tailwind-merge\";\nimport {\n isSameDateMDY,\n validateAndFormatInput,\n validateDate,\n} from \"../../utility/daterange\";\n\ninterface PresetRange {\n label: string;\n getValue: () => { start: Date; end: Date };\n}\n\ninterface DateRangePickerProps {\n bgColor?: string;\n dateFunc: (startDate: string, endDate: string) => void;\n start_date?: string;\n end_date?: string;\n yearsBack?: number;\n title?: string;\n titleClass?: string;\n autoOpen?: boolean;\n isDateRangeOnly?: boolean;\n dateRangeClass?: string;\n setIsShowDateRange?: () => void;\n datePopupOnly?: boolean;\n handleExport?: (start_date: string, end_date: string) => Promise<void>;\n setIsExporting?: (value: boolean) => void;\n isExporting?: boolean;\n className?: string;\n}\n\ntype CalendarView = \"day\" | \"month\" | \"year\";\n\nconst DateRangePicker: React.FC<DateRangePickerProps> = ({\n bgColor = \"bg-[#F8F8F8]\",\n dateFunc,\n start_date = \"\",\n end_date = \"\",\n yearsBack = 1,\n title = \"\",\n titleClass = \"\",\n autoOpen = false,\n isDateRangeOnly = false,\n dateRangeClass = \"\",\n setIsShowDateRange,\n datePopupOnly = false,\n handleExport,\n setIsExporting,\n isExporting = false,\n className = \"\",\n}) => {\n const [isOpen, setIsOpen] = useState<boolean>(autoOpen);\n const [isApply, setIsApply] = useState<boolean>(false);\n const originalStartDateRef = useRef<Date | null>(null);\n const originalEndDateRef = useRef<Date | null>(null);\n\n // New state for calendar views\n const [leftCalendarView, setLeftCalendarView] = useState<CalendarView>(\"day\");\n const [rightCalendarView, setRightCalendarView] =\n useState<CalendarView>(\"day\");\n\n const getInitialStartDate = () => {\n if (start_date) {\n const [month, day, year] = start_date\n .split(\"/\")\n .map((num) => parseInt(num, 10));\n return new Date(year, month - 1, day);\n }\n return null;\n };\n\n const getInitialEndDate = () => {\n if (end_date) {\n const [month, day, year] = end_date\n .split(\"/\")\n .map((num) => parseInt(num, 10));\n return new Date(year, month - 1, day);\n }\n return null;\n };\n\n const [startDate, setStartDate] = useState<Date | null>(\n getInitialStartDate()\n );\n const [endDate, setEndDate] = useState<Date | null>(getInitialEndDate());\n const [leftMonth, setLeftMonth] = useState<Date>(new Date());\n const [rightMonth, setRightMonth] = useState<Date>(new Date());\n const [hoveredDate, setHoveredDate] = useState<Date | null>(null);\n const [selectingStart, setSelectingStart] = useState<boolean>(true);\n const [label, setLabel] = useState(\"\");\n const dropdownRef = useRef<HTMLDivElement>(null);\n const [isCustomEditing, setIsCustomEditing] = useState(false);\n const previousLabelRef = useRef(\"\");\n const isCustomEditingRef = useRef(false);\n const rightMonthRef = useRef<Date>(new Date());\n const months = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n ];\n\n const monthsShort = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ];\n\n const presetRanges: PresetRange[] = [\n {\n label: \"Today\",\n getValue: () => ({ start: new Date(), end: new Date() }),\n },\n {\n label: \"Last Week\",\n getValue: () => {\n const end = new Date();\n const start = new Date(end.getTime() - 7 * 24 * 60 * 60 * 1000);\n return { start, end };\n },\n },\n {\n label: \"This Month\",\n getValue: () => {\n const now = new Date();\n const start = new Date(now.getFullYear(), now.getMonth(), 1);\n const end = new Date();\n return { start, end };\n },\n },\n {\n label: \"Last Month\",\n getValue: () => {\n const now = new Date();\n const start = new Date(now.getFullYear(), now.getMonth() - 1, 1);\n const end = new Date(now.getFullYear(), now.getMonth(), 0);\n return { start, end };\n },\n },\n {\n label: \"Last 3 Months\",\n getValue: () => {\n const end = new Date();\n const start = new Date(\n end.getFullYear(),\n end.getMonth() - 3,\n end.getDate()\n );\n return { start, end };\n },\n },\n {\n label: \"Last 6 Months\",\n getValue: () => {\n const end = new Date();\n const start = new Date(\n end.getFullYear(),\n end.getMonth() - 6,\n end.getDate()\n );\n return { start, end };\n },\n },\n {\n label: `Last 1 Year`,\n getValue: () => {\n const end = new Date();\n const start = new Date(\n end.getFullYear() - 1,\n end.getMonth(),\n end.getDate()\n );\n return { start, end };\n },\n },\n ];\n\n useEffect(() => {\n if (\n previousLabelRef.current === \"\" &&\n end_date !== \"\" &&\n start_date !== \"\"\n ) {\n setLeftMonth(new Date(start_date));\n setRightMonth(new Date(end_date));\n setStartDate(new Date(start_date));\n setEndDate(new Date(end_date));\n if (new Date(end_date) < new Date() && previousLabelRef.current !== \"\") {\n setLabel(\"Custom Range\");\n }\n }\n }, [end_date, start_date]);\n\n useEffect(() => {\n if (autoOpen || datePopupOnly) {\n setIsOpen(true);\n }\n }, [autoOpen, datePopupOnly]);\n\n useEffect(() => {\n if (autoOpen || datePopupOnly) {\n setIsOpen(true);\n }\n }, [autoOpen, datePopupOnly]);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n const isEditing = isCustomEditing;\n const isValid =\n validateCustomInput(startInput, true) &&\n validateCustomInput(endInput, false);\n\n if (isEditing && !isValid) {\n handleCancel();\n return;\n }\n if (!isApply && start_date === \"\" && end_date === \"\") {\n handleCancel();\n return;\n }\n\n if (isApply) {\n setRightMonth(rightMonthRef.current);\n setLeftMonth(new Date(start_date));\n setEndDate(new Date(end_date));\n setStartDate(new Date(start_date));\n setLabel(previousLabelRef.current);\n if (isCustomEditingRef.current)\n setIsCustomEditing(isCustomEditingRef.current);\n return;\n }\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, [end_date, isApply, isCustomEditing, start_date]);\n\n const formatDate = (date: Date): string => {\n return `${(date.getMonth() + 1).toString().padStart(2, \"0\")}/${date\n .getDate()\n .toString()\n .padStart(2, \"0\")}/${date.getFullYear()}`;\n };\n\n const isSameDay = (date1: Date, date2: Date): boolean => {\n return (\n date1.getDate() === date2.getDate() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getFullYear() === date2.getFullYear()\n );\n };\n\n const isSameMonth = (date1: Date, date2: Date): boolean => {\n return (\n date1.getMonth() === date2.getMonth() &&\n date1.getFullYear() === date2.getFullYear()\n );\n };\n\n const isInRange = (date: Date, start: Date, end: Date): boolean => {\n return date >= start && date <= end;\n };\n\n const isInHoverRange = (date: Date): boolean => {\n if (!hoveredDate || !startDate) return false;\n const start = startDate;\n const end = hoveredDate;\n return (\n date >= new Date(Math.min(start.getTime(), end.getTime())) &&\n date <= new Date(Math.max(start.getTime(), end.getTime()))\n );\n };\n\n const isDisabledDate = (date: Date): boolean => {\n if (new Date() < date) return true;\n\n if ((label === \"Custom Range\" || endDate === null) && startDate !== null) {\n const baseDate = new Date(startDate);\n\n baseDate.setHours(23, 59, 59, 999);\n\n if (date < baseDate) return true;\n\n const earliestDate = new Date(startDate);\n\n earliestDate.setFullYear(earliestDate.getFullYear() + yearsBack);\n earliestDate.setHours(0, 0, 0, 0);\n\n if (date > earliestDate) return true;\n return false;\n }\n\n if (startDate === null) return false;\n\n if (startDate !== null) {\n const baseDate = new Date(startDate);\n baseDate.setHours(23, 59, 59, 999);\n\n if (date < baseDate) return true;\n\n const earliestDate = new Date(startDate);\n\n earliestDate.setFullYear(earliestDate.getFullYear() + yearsBack);\n earliestDate.setHours(0, 0, 0, 0);\n\n if (date > earliestDate) return true;\n\n return false;\n }\n\n const today = new Date();\n today.setHours(23, 59, 59, 999);\n\n if (date > today) return true;\n\n const earliestDate = new Date();\n earliestDate.setFullYear(earliestDate.getFullYear() - yearsBack);\n earliestDate.setHours(0, 0, 0, 0);\n\n if (date < earliestDate) return true;\n\n return false;\n };\n\n const isDisabledMonth = (year: number, month: number): boolean => {\n const today = new Date();\n const currentYear = today.getFullYear();\n const currentMonth = today.getMonth();\n\n // Disable future months\n if (year > currentYear || (year === currentYear && month > currentMonth)) {\n return true;\n }\n\n // Disable months that are too far back\n const earliestDate = new Date();\n earliestDate.setFullYear(earliestDate.getFullYear() - 50);\n const earliestYear = earliestDate.getFullYear();\n const earliestMonth = earliestDate.getMonth();\n\n if (\n year < earliestYear ||\n (year === earliestYear && month < earliestMonth)\n ) {\n return true;\n }\n\n return false;\n };\n\n const isDisabledYear = (year: number): boolean => {\n const today = new Date();\n const currentYear = today.getFullYear();\n\n // Disable future years\n if (year > currentYear) {\n return true;\n }\n\n // Disable years that are too far back\n const earliestYear = currentYear - 50;\n if (year < earliestYear) {\n return true;\n }\n\n return false;\n };\n\n const navigateMonth = (direction: number, isLeft: boolean): void => {\n if (isLeft) {\n setLeftMonth(\n (prev) => new Date(prev.getFullYear(), prev.getMonth() + direction, 1)\n );\n } else {\n setRightMonth(\n (prev) => new Date(prev.getFullYear(), prev.getMonth() + direction, 1)\n );\n }\n };\n\n const navigateYear = (direction: number, isLeft: boolean): void => {\n if (isLeft) {\n setLeftMonth(\n (prev) => new Date(prev.getFullYear() + direction, prev.getMonth(), 1)\n );\n } else {\n setRightMonth(\n (prev) => new Date(prev.getFullYear() + direction, prev.getMonth(), 1)\n );\n }\n };\n\n const navigateDecade = (direction: number, isLeft: boolean): void => {\n if (isLeft) {\n setLeftMonth(\n (prev) =>\n new Date(prev.getFullYear() + direction * 10, prev.getMonth(), 1)\n );\n } else {\n setRightMonth(\n (prev) =>\n new Date(prev.getFullYear() + direction * 10, prev.getMonth(), 1)\n );\n }\n };\n\n const handleDateClick = (date: Date, isLeftCalendar: boolean): void => {\n if (\n (startDate !== null && endDate === null && isLeftCalendar) ||\n (startDate !== null &&\n endDate !== null &&\n startDate?.getTime() === endDate?.getTime() &&\n isLeftCalendar)\n ) {\n setStartDate(null);\n setEndDate(null);\n return;\n }\n\n if (!isLeftCalendar && startDate !== null && startDate <= date) {\n setEndDate(date);\n return;\n }\n\n if (date > new Date()) return;\n\n if (isDisabledDate(date)) return;\n\n const isSameMonthView = isSameMonth(leftMonth, rightMonth);\n\n if (!isSameMonthView) {\n // Different months: left calendar sets start date, right calendar sets end date\n if (isLeftCalendar) {\n setStartDate(date);\n if (endDate && date > endDate) {\n setEndDate(null);\n setSelectingStart(false);\n } else {\n setSelectingStart(false);\n }\n } else {\n if (startDate && date < startDate) {\n setStartDate(date);\n setEndDate(null);\n setSelectingStart(false);\n } else {\n setEndDate(date);\n setSelectingStart(true);\n }\n }\n } else {\n // Same month: retain original behavior\n if (selectingStart || !startDate || (startDate && endDate)) {\n setStartDate(date);\n setEndDate(null);\n setSelectingStart(false);\n } else {\n if (date < startDate!) {\n setEndDate(startDate);\n setStartDate(date);\n setSelectingStart(true);\n } else if (endDate && date > endDate) {\n setStartDate(date);\n setEndDate(null);\n setSelectingStart(false);\n } else {\n setEndDate(date);\n setSelectingStart(true);\n }\n }\n }\n };\n\n const handleMonthClick = (monthIndex: number, isLeft: boolean): void => {\n const year = isLeft ? leftMonth.getFullYear() : rightMonth.getFullYear();\n\n // Don't allow clicking disabled months\n if (isDisabledMonth(year, monthIndex)) return;\n\n if (isLeft) {\n setLeftMonth(new Date(leftMonth.getFullYear(), monthIndex, 1));\n setLeftCalendarView(\"day\");\n } else {\n setRightMonth(new Date(rightMonth.getFullYear(), monthIndex, 1));\n setRightCalendarView(\"day\");\n }\n };\n\n const handleYearClick = (year: number, isLeft: boolean): void => {\n // Don't allow clicking disabled years\n if (isDisabledYear(year)) return;\n if (isLeft) {\n setLeftMonth(new Date(year, leftMonth.getMonth(), 1));\n setLeftCalendarView(\"month\");\n } else {\n setRightMonth(new Date(year, rightMonth.getMonth(), 1));\n setRightCalendarView(\"month\");\n }\n };\n\n const handleHeaderClick = (isLeft: boolean): void => {\n if (isLeft) {\n if (leftCalendarView === \"day\") {\n setLeftCalendarView(\"month\");\n } else if (leftCalendarView === \"month\") {\n setLeftCalendarView(\"year\");\n }\n } else {\n if (rightCalendarView === \"day\") {\n setRightCalendarView(\"month\");\n } else if (rightCalendarView === \"month\") {\n setRightCalendarView(\"year\");\n }\n }\n };\n\n const circleContainer = () => {\n if (\n startDate !== null &&\n endDate !== null &&\n startDate?.getTime() === endDate?.getTime()\n ) {\n return \"rounded-full\";\n }\n return \"\";\n };\n\n const handlePresetClick = (preset: PresetRange): void => {\n const { start, end } = preset.getValue();\n setStartDate(start);\n setEndDate(end);\n setLabel(preset.label);\n setSelectingStart(true);\n\n // Reset calendar views to day view\n setLeftCalendarView(\"day\");\n setRightCalendarView(\"day\");\n\n const monthDiff =\n end.getMonth() -\n start.getMonth() +\n 12 * (end.getFullYear() - start.getFullYear());\n\n if (monthDiff >= 1) {\n setLeftMonth(new Date(start.getFullYear(), start.getMonth(), 1));\n setRightMonth(new Date(end.getFullYear(), end.getMonth(), 1));\n } else {\n const left = new Date(start.getFullYear(), start.getMonth(), 1);\n const right = new Date(start.getFullYear(), start.getMonth());\n setLeftMonth(left);\n setRightMonth(right);\n }\n };\n\n const [startInput, setStartInput] = useState(\n startDate ? formatDate(startDate) : \"\"\n );\n const [endInput, setEndInput] = useState(endDate ? formatDate(endDate) : \"\");\n\n useEffect(() => {\n if (startDate) {\n setStartInput(formatDate(startDate));\n } else {\n setStartInput(\"\");\n }\n }, [startDate]);\n\n useEffect(() => {\n if (endDate) {\n setEndInput(formatDate(endDate));\n } else {\n setEndInput(\"\");\n }\n }, [endDate]);\n\n const renderMonthView = (\n monthDate: Date,\n isLeft: boolean,\n className = \"\"\n ) => {\n const year = monthDate.getFullYear();\n\n return (\n <div className={`flex-1 ${className}`}>\n <div className=\"flex items-center justify-between mb-4\">\n <button\n onClick={() => navigateYear(-1, isLeft)}\n className=\"p-1 hover:bg-gray-100 rounded\"\n >\n <ChevronLeft className=\"w-4 h-4\" />\n </button>\n\n <button\n onClick={() => handleHeaderClick(isLeft)}\n className=\"font-medium text-center flex-1 hover:bg-gray-100 rounded px-2 py-1\"\n >\n {year}\n </button>\n\n <button\n onClick={() => navigateYear(1, isLeft)}\n className=\"p-1 hover:bg-gray-100 rounded\"\n >\n <ChevronRight className=\"w-4 h-4\" />\n </button>\n </div>\n\n <div className=\"grid grid-cols-3 gap-2\">\n {monthsShort.map((month, index) => {\n const isDisabled = isDisabledMonth(year, index);\n return (\n <button\n key={month}\n onClick={() => handleMonthClick(index, isLeft)}\n disabled={isDisabled}\n className={`p-2 text-sm rounded ${\n isDisabled\n ? \"cursor-not-allowed text-gray-300 bg-gray-100\"\n : \"hover:bg-blue-100\"\n } ${\n monthDate.getMonth() === index && !isDisabled\n ? \"bg-[#4683B4] text-white\"\n : \"\"\n }`}\n >\n {month}\n </button>\n );\n })}\n </div>\n </div>\n );\n };\n\n const renderYearView = (monthDate: Date, isLeft: boolean, className = \"\") => {\n const currentYear = monthDate.getFullYear();\n const startDecade = Math.floor(currentYear / 10) * 10;\n const years = [];\n\n for (let i = startDecade; i < startDecade + 10; i++) {\n years.push(i);\n }\n\n return (\n <div className={`flex-1 ${className}`}>\n <div className=\"flex items-center justify-between mb-4\">\n <button\n onClick={() => navigateDecade(-1, isLeft)}\n className=\"p-1 hover:bg-gray-100 rounded\"\n >\n <ChevronLeft className=\"w-4 h-4\" />\n </button>\n\n <h3 className=\"font-medium text-center flex-1\">\n {startDecade} - {startDecade + 9}\n </h3>\n\n <button\n onClick={() => navigateDecade(1, isLeft)}\n className=\"p-1 hover:bg-gray-100 rounded\"\n >\n <ChevronRight className=\"w-4 h-4\" />\n </button>\n </div>\n\n <div className=\"grid grid-cols-2 gap-2\">\n {years.map((year) => {\n const isDisabled = isDisabledYear(year);\n return (\n <button\n key={year}\n onClick={() => handleYearClick(year, isLeft)}\n disabled={isDisabled}\n className={`p-2 text-sm rounded ${\n isDisabled\n ? \"cursor-not-allowed text-gray-300 bg-gray-100\"\n : \"hover:bg-blue-100\"\n } ${\n currentYear === year && !isDisabled\n ? \"bg-[#4683B4] text-white\"\n : \"\"\n }`}\n >\n {year}\n </button>\n );\n })}\n </div>\n </div>\n );\n };\n\n const renderCalendar = (monthDate: Date, isLeft: boolean, className = \"\") => {\n const view = isLeft ? leftCalendarView : rightCalendarView;\n\n if (view === \"month\") {\n return renderMonthView(monthDate, isLeft, className);\n }\n\n if (view === \"year\") {\n return renderYearView(monthDate, isLeft, className);\n }\n\n // Default day view\n const year = monthDate.getFullYear();\n const month = monthDate.getMonth();\n const firstDay = new Date(year, month, 1);\n const lastDay = new Date(year, month + 1, 0);\n const daysInMonth = lastDay.getDate();\n const startingDayOfWeek = firstDay.getDay();\n const days: JSX.Element[] = [];\n\n for (let i = 0; i < startingDayOfWeek; i++) {\n const prevDate = new Date(year, month, -startingDayOfWeek + i + 1);\n days.push(\n <div\n key={`prev-${i}`}\n className=\"w-8 h-8 flex items-center justify-center text-gray-300 text-sm\"\n >\n {prevDate.getDate()}\n </div>\n );\n }\n\n for (let day = 1; day <= daysInMonth; day++) {\n const date = new Date(year, month, day);\n const isStart = startDate && isSameDay(date, startDate);\n const isEnd = endDate && isSameDay(date, endDate);\n const isInCurrentRange =\n startDate && endDate && isInRange(date, startDate, endDate);\n const isInHover = !endDate && isInHoverRange(date);\n const isDisabled = isDisabledDate(date);\n\n days.push(\n <div\n key={day}\n className={`relative w-8 h-8 flex items-center justify-center text-sm ${\n isDisabled ? \"cursor-not-allowed text-gray-300\" : \"cursor-pointer\"\n } group`}\n onClick={() => handleDateClick(date, isLeft)}\n onMouseEnter={() => !isDisabled && setHoveredDate(date)}\n onMouseLeave={() => setHoveredDate(null)}\n >\n {isStart ? (\n <>\n <div\n className={`absolute inset-0 bg-[#D9ECFF] rounded-l-full ${circleContainer()}`}\n />\n <div\n className={`w-6 h-6 bg-[#213D69] text-white rounded-full z-10 flex items-center justify-center text-xs font-bold`}\n >\n {day}\n </div>\n </>\n ) : isEnd ? (\n <>\n <div\n className={`absolute inset-0 bg-[#D9ECFF] rounded-r-full ${circleContainer()}`}\n />\n <div className=\"w-6 h-6 bg-[#213D69] text-white rounded-full z-10 flex items-center justify-center text-xs font-bold\">\n {day}\n </div>\n </>\n ) : isInCurrentRange || isInHover ? (\n <>\n <div className=\"absolute inset-0 bg-[#D9ECFF]\" />\n <div className=\"relative z-10\">{day}</div>\n </>\n ) : (\n <div\n className={`w-8 h-8 flex items-center justify-center rounded-full ${\n !isDisabled ? \"group-hover:bg-blue-100\" : \"\"\n }`}\n >\n {day}\n </div>\n )}\n </div>\n );\n }\n\n const totalCells = 42;\n const remainingCells = totalCells - days.length;\n for (let i = 1; i <= remainingCells; i++) {\n const nextDate = new Date(year, month + 1, i);\n days.push(\n <div\n key={`next-${i}`}\n className=\"w-8 h-8 flex items-center justify-center text-gray-300 text-sm\"\n >\n {nextDate.getDate()}\n </div>\n );\n }\n\n return (\n <div className={`flex-1 ${className}`}>\n <div className=\"flex items-center justify-between mb-4\">\n <button\n onClick={() => navigateMonth(-1, isLeft)}\n className=\"p-1 hover:bg-gray-100 rounded\"\n >\n <ChevronLeft className=\"w-4 h-4\" />\n </button>\n\n <button\n onClick={() => handleHeaderClick(isLeft)}\n className=\"font-medium text-center flex-1 hover:bg-gray-100 rounded px-2 py-1\"\n >\n {months[month]} {year}\n </button>\n\n <button\n onClick={() => navigateMonth(1, isLeft)}\n className=\"p-1 hover:bg-gray-100 rounded\"\n >\n <ChevronRight className=\"w-4 h-4\" />\n </button>\n </div>\n\n <div className=\"grid grid-cols-7 gap-1 mb-2\">\n {[\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"].map((day) => (\n <div\n key={day}\n className=\"w-8 h-8 flex items-center justify-center text-xs font-medium text-gray-500\"\n >\n {day}\n </div>\n ))}\n </div>\n\n <div className=\"grid grid-cols-7\">{days}</div>\n </div>\n );\n };\n\n const handleCancel = () => {\n const originalStart = originalStartDateRef.current;\n const originalEnd = originalEndDateRef.current;\n\n if (start_date === \"\" && end_date === \"\") {\n setStartDate(null);\n setEndDate(null);\n } else {\n setStartDate(originalStart);\n setEndDate(originalEnd);\n }\n\n setStartInput(originalStart ? formatDate(originalStart) : \"\");\n setEndInput(originalEnd ? formatDate(originalEnd) : \"\");\n\n setLabel(\"\");\n setSelectingStart(true);\n setIsCustomEditing(false);\n\n // Reset calendar views\n setLeftCalendarView(\"day\");\n setRightCalendarView(\"day\");\n\n setLeftMonth(\n originalStart\n ? new Date(originalStart.getFullYear(), originalStart.getMonth(), 1)\n : new Date()\n );\n setRightMonth(\n originalEnd\n ? new Date(originalEnd.getFullYear(), originalEnd.getMonth(), 1)\n : new Date()\n );\n\n setIsOpen(false);\n if (setIsShowDateRange !== undefined) setIsShowDateRange();\n };\n\n const validateCustomInput = (\n inputValue: string,\n isStartDate: boolean\n ): boolean => {\n if (inputValue.length !== 10) return false;\n if (!validateDate(inputValue)) return false;\n\n const [month, day, year] = inputValue\n .split(\"/\")\n .map((num) => parseInt(num, 10));\n const inputDate = new Date(year, month - 1, day);\n\n if (isDisabledDate(inputDate)) return false;\n\n if (isStartDate && endDate && inputDate > endDate) return false;\n if (!isStartDate && startDate && inputDate < startDate) return false;\n\n return true;\n };\n\n const isCustomInputValid = (): boolean => {\n if (\n label === \"Custom Range\" &&\n endDate !== null &&\n (!isDisabledDate(endDate) ||\n isSameDateMDY(new Date(startInput), new Date(endInput)))\n )\n return true;\n if (startDate === null || endDate === null) return false;\n\n if (!isCustomEditing) return true;\n\n const isStartValid = validateCustomInput(startInput, true);\n const isEndValid = validateCustomInput(endInput, false);\n\n return isStartValid && isEndValid;\n };\n\n return (\n <div>\n <div>\n {!datePopupOnly && !isDateRangeOnly && (\n <label\n className={twMerge(\n \"block text-sm font-medium text-gray-600 mb-1\",\n titleClass\n )}\n >\n {title}\n </label>\n )}\n <div className=\"relative\" ref={dropdownRef}>\n {!datePopupOnly && !isDateRangeOnly && (\n <div\n className={twMerge(\n `flex items-center w-full h-[38px] gap-2 px-3 py-2 border rounded-md cursor-pointer ${bgColor} hover:border-[#4683B4] ${\n isOpen && \"border-[#4683B4]\"\n }`,\n className\n )}\n onClick={() => {\n originalStartDateRef.current = startDate;\n originalEndDateRef.current = endDate;\n // Reset calendar views when opening\n setLeftCalendarView(\"day\");\n setRightCalendarView(\"day\");\n setIsOpen(!isOpen);\n }}\n >\n <span className=\"text-sm\">\n {startDate && endDate\n ? `${formatDate(startDate)} - ${formatDate(endDate)}`\n : startDate\n ? `${formatDate(startDate)} - Select end date`\n : \"\"}\n </span>\n <div className=\"absolute top-1/2 right-3 -translate-y-1/2 pointer-events-none\">\n <svg\n width=\"18\"\n height=\"20\"\n viewBox=\"0 0 18 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M4 9H6V11H4V9ZM18 4V18C18 19.1 17.1 20 16 20H2C0.89 20 0 19.1 0 18L0.00999999 4C0.00999999 2.9 0.89 2 2 2H3V0H5V2H13V0H15V2H16C17.1 2 18 2.9 18 4ZM2 6H16V4H2V6ZM16 18V8H2V18H16ZM12 11H14V9H12V11ZM8 11H10V9H8V11Z\"\n fill=\"#757575\"\n />\n </svg>\n </div>\n </div>\n )}\n\n {isOpen && (\n <div\n className={`absolute top-full right-0 ${\n datePopupOnly ? \"\" : \"mt-2\"\n } bg-white border rounded-lg shadow-lg z-50 ${dateRangeClass}`}\n style={{\n width: \"700px\",\n height: \"419px\",\n marginRight: datePopupOnly ? \"15px\" : undefined,\n }}\n >\n <div className=\"flex\">\n <div className=\"w-[290px] border-r\">\n <div className=\"flex flex-col justify-between h-[419px] p-4\">\n <div className=\"space-y-[3px]\">\n {presetRanges.map((preset, index) => (\n <button\n key={index}\n onClick={() => {\n handlePresetClick(preset);\n if (isCustomEditing) {\n setIsCustomEditing(false);\n }\n }}\n className={`w-full text-left px-[14px] py-[6px] text-[14px] rounded-[4px] border border-1 border-[#ECECF0] hover:bg-[#ECECF0] ${\n preset.label === label\n ? \"bg-[#ECECF0] font-semibold\"\n : \"\"\n }`}\n >\n {preset.label}\n </button>\n ))}\n <button\n className={`w-full text-left px-[14px] py-[6px] rounded-[4px] text-[13px] border border-1 border-[#ECECF0] hover:bg-[#ECECF0] ${\n isCustomEditing ? \"bg-[#ECECF0] font-semibold\" : \"\"\n }`}\n onClick={() => {\n setIsCustomEditing(true);\n setLabel(\"Custom Range\");\n previousLabelRef.current = \"Custom Range\";\n setStartInput(\"\");\n setEndInput(\"\");\n setStartDate(null);\n setEndDate(null);\n setRightMonth(new Date());\n setLeftMonth(new Date());\n // Reset calendar views\n setLeftCalendarView(\"day\");\n setRightCalendarView(\"day\");\n }}\n >\n Custom Range (max 1 year)\n </button>\n <div className=\"flex gap-[8px]\">\n <input\n type=\"text\"\n placeholder=\"MM/DD/YYYY\"\n value={startInput}\n onChange={(e) => {\n if (!isCustomEditing) return;\n\n const rawValue = e.target.value;\n const formattedValue = validateAndFormatInput(\n rawValue,\n {\n enableYearRange: false,\n yearsBack: yearsBack,\n }\n );\n\n setStartInput(formattedValue);\n\n if (formattedValue.length === 10) {\n const [month, day, year] = formattedValue\n .split(\"/\")\n .map((num) => parseInt(num, 10));\n const parsedDate = new Date(\n year,\n month - 1,\n day,\n 0,\n 0,\n 0,\n 0\n );\n setStartDate(parsedDate);\n setLeftMonth(\n new Date(\n parsedDate.getFullYear(),\n parsedDate.getMonth(),\n 1\n )\n );\n }\n }}\n onBlur={() => {\n if (!isCustomEditing) return;\n const endDateInput = new Date(endInput);\n\n if (\n isDisabledDate(endDateInput) &&\n startDate !== null &&\n !isSameDateMDY(startDate, endDateInput)\n ) {\n setEndDate(null);\n setEndInput(\"\");\n }\n }}\n disabled={!isCustomEditing}\n className={`w-full h-[33.5px] text-[12px] px-[13px] rounded-[4px] border border-1 border-[#ECECF0] ${\n !isCustomEditing\n ? \"bg-gray-100 cursor-not-allowed\"\n : \"\"\n }`}\n />\n\n <input\n type=\"text\"\n placeholder=\"MM/DD/YYYY\"\n value={endInput}\n onChange={(e) => {\n if (!isCustomEditing) return;\n\n const rawValue = e.target.value;\n const formattedValue = validateAndFormatInput(\n rawValue,\n {\n enableYearRange: false,\n yearsBack: yearsBack,\n }\n );\n\n setEndInput(formattedValue);\n\n if (formattedValue.length === 10) {\n const [month, day, year] = formattedValue\n .split(\"/\")\n .map((num) => parseInt(num, 10));\n const parsedDate = new Date(\n year,\n month - 1,\n day,\n 0,\n 0,\n 0,\n 0\n );\n setEndDate(parsedDate);\n setRightMonth(\n new Date(\n parsedDate.getFullYear(),\n parsedDate.getMonth(),\n 1\n )\n );\n }\n if (\n formattedValue.length === 10 &&\n isDisabledDate(new Date(formattedValue)) &&\n startDate !== null &&\n !isSameDateMDY(\n startDate,\n new Date(formattedValue)\n )\n ) {\n setEndDate(null);\n setEndInput(\"\");\n }\n }}\n onBlur={() => {\n if (!isCustomEditing) return;\n const endDateInput = new Date(endInput);\n if (\n isDisabledDate(endDateInput) &&\n startInput !== \"\" &&\n startDate !== null &&\n !isSameDateMDY(startDate, new Date(endDateInput))\n ) {\n setEndDate(null);\n setEndInput(\"\");\n }\n }}\n disabled={!isCustomEditing || startInput === \"\"}\n className={`w-full h-[33.5px] text-[12px] px-[13px] rounded-[4px] border border-1 border-[#ECECF0] ${\n !isCustomEditing\n ? \"bg-gray-100 cursor-not-allowed\"\n : \"\"\n }`}\n />\n </div>\n </div>\n\n <div className=\"flex gap-2\">\n <button\n onClick={() => handleCancel()}\n className=\"w-full px-[14px] py-[6px] text-[16px] font-semibold border rounded-[4px] border-1 border-[#E0E1E6]\"\n >\n Cancel\n </button>\n <button\n onClick={async () => {\n if (!isCustomInputValid()) return;\n setIsApply(true);\n\n if (label === \"Custom Range\")\n isCustomEditingRef.current = true;\n if (label !== \"Custom Range\")\n isCustomEditingRef.current = false;\n rightMonthRef.current = rightMonth;\n previousLabelRef.current = label;\n originalStartDateRef.current = startDate;\n originalEndDateRef.current = endDate;\n\n if (datePopupOnly) {\n dateFunc(\n startDate ? formatDate(startDate) : \"\",\n endDate ? formatDate(endDate) : \"\"\n );\n setIsExporting?.(true);\n try {\n if (startDate !== null && endDate !== null)\n await handleExport?.(\n formatDate(startDate),\n formatDate(endDate)\n );\n } finally {\n setIsExporting?.(false);\n }\n } else {\n dateFunc(\n startDate ? formatDate(startDate) : \"\",\n endDate ? formatDate(endDate) : \"\"\n );\n }\n if (isDateRangeOnly) {\n setEndInput(\"\");\n setStartInput(\"\");\n setEndInput(\"\");\n setStartDate(null);\n setEndDate(null);\n setRightMonth(new Date());\n setIsApply(false);\n originalStartDateRef.current = null;\n originalEndDateRef.current = null;\n }\n if (setIsShowDateRange !== undefined)\n setIsShowDateRange();\n\n setIsOpen(false);\n }}\n className={`w-full px-[14px] py-[6px] text-[16px] text-[#FFFFFF] font-semibold border rounded-[4px] bg-[#4683B4] ${\n !isCustomInputValid() && \"opacity-50\"\n } flex justify-center items-center gap-2`}\n >\n {datePopupOnly ? (\n isExporting ? (\n <svg\n className=\"animate-spin h-5 w-5 text-white\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n ></circle>\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8v8H4z\"\n ></path>\n </svg>\n ) : (\n \"Download\"\n )\n ) : (\n \"Apply\"\n )}\n </button>\n </div>\n </div>\n </div>\n\n <div className=\"flex\">\n {renderCalendar(\n leftMonth,\n true,\n \"pr-4 pt-4 pl-2 w-[227.59px]\"\n )}\n {renderCalendar(\n rightMonth,\n false,\n \"pr-4 pt-4 pl-2 w-[227.59px]\"\n )}\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n};\n\nexport default DateRangePicker;\n","// ? DATE UTILS\ninterface DateValidationOptions {\n enableYearRange?: boolean;\n yearsBack?: number;\n allowFutureDates?: boolean; // New option to control future date validation\n}\n\nexport const validateAndFormatInput = (\n rawInput: string,\n options: DateValidationOptions = {}\n) => {\n const {\n enableYearRange = true,\n yearsBack = 1,\n allowFutureDates = false,\n } = options;\n\n let digits = rawInput.replace(/\\D/g, \"\");\n\n // Validate month\n if (digits.length >= 2) {\n const month = parseInt(digits.slice(0, 2));\n if (month < 1 || month > 12) {\n digits = digits.slice(0, 1);\n }\n }\n\n // Validate day\n if (digits.length >= 4) {\n const month = parseInt(digits.slice(0, 2));\n const day = parseInt(digits.slice(2, 4));\n\n const daysInMonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n const maxDays = daysInMonth[month - 1] || 31;\n\n if (day < 1 || day > maxDays) {\n digits = digits.slice(0, 3);\n }\n }\n\n // Validate year range\n if (enableYearRange && digits.length >= 8) {\n const currentYear = new Date().getFullYear();\n const minYear = currentYear - yearsBack;\n const inputYear = parseInt(digits.slice(4, 8));\n\n if (inputYear < minYear || inputYear > currentYear) {\n digits = digits.slice(0, 4);\n }\n }\n\n // Validate complete date against future dates (if we have a complete date)\n if (!allowFutureDates && digits.length === 8) {\n const month = parseInt(digits.slice(0, 2));\n const day = parseInt(digits.slice(2, 4));\n const year = parseInt(digits.slice(4, 8));\n\n const inputDate = new Date(year, month - 1, day);\n const today = new Date();\n today.setHours(23, 59, 59, 999); // Set to end of today\n\n // If the complete date is in the future, truncate to just month/day\n if (inputDate > today) {\n digits = digits.slice(0, 4);\n }\n }\n\n digits = digits.slice(0, 8);\n\n let formatted = \"\";\n if (digits.length > 0) formatted += digits.slice(0, 2);\n if (digits.length >= 3) formatted += `/${digits.slice(2, 4)}`;\n if (digits.length >= 5) formatted += `/${digits.slice(4, 8)}`;\n\n return formatted;\n};\nexport const validateDate = (dateString: string, allowFutureDates = false) => {\n const formatRegex = /^(0[1-9]|1[0-2])\\/(0[1-9]|[12][0-9]|3[01])\\/\\d{4}$/;\n if (!formatRegex.test(dateString)) {\n return false;\n }\n\n const [month, day, year] = dateString\n .split(\"/\")\n .map((num) => parseInt(num, 10));\n const inputDate = new Date(year, month - 1, day);\n\n // Check if the date is valid (handles leap years, etc.)\n if (\n inputDate.getMonth() !== month - 1 ||\n inputDate.getDate() !== day ||\n inputDate.getFullYear() !== year\n ) {\n return false;\n }\n\n if (!allowFutureDates) {\n const today = new Date();\n today.setHours(23, 59, 59, 999);\n\n if (inputDate > today) {\n return false;\n }\n }\n\n return true;\n};\nexport const validateDateRange = (\n dateString: string,\n options: {\n allowFutureDates?: boolean;\n minDate?: Date;\n maxDate?: Date;\n yearsBack?: number;\n } = {}\n): boolean => {\n const { allowFutureDates = false, minDate, maxDate, yearsBack } = options;\n\n if (!validateDate(dateString, allowFutureDates)) {\n return false;\n }\n\n const [month, day, year] = dateString\n .split(\"/\")\n .map((num) => parseInt(num, 10));\n const inputDate = new Date(year, month - 1, day);\n\n if (minDate && inputDate < minDate) {\n return false;\n }\n\n if (maxDate && inputDate > maxDate) {\n return false;\n }\n\n if (yearsBack) {\n const currentYear = new Date().getFullYear();\n const minYear = currentYear - yearsBack;\n if (year < minYear) {\n return false;\n }\n }\n\n return true;\n};\n\nexport function toEndOfDay(date: Date): Date {\n const clean = new Date(date);\n clean.setHours(23, 59, 59, 999);\n return clean;\n}\n\nexport function toMidnight(date: Date): Date {\n const clean = new Date(date); // clone so we don't mutate the original\n clean.setHours(0, 0, 0, 0);\n return clean;\n}\n\nexport function isSameDateMDY(date1: Date, date2: Date): boolean {\n return (\n date1.getFullYear() === date2.getFullYear() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getDate() === date2.getDate()\n );\n}\n","import React, { ChangeEvent, useEffect, useRef, useState } from \"react\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport interface MultipleAutoSuggestionInputProps {\n label?: string;\n options: { key: string; name: string }[];\n selectedItems: string[] | string;\n isMulti?: boolean;\n enableTypingSingle?: boolean; // new prop\n onSelect: (key: string) => void;\n onRemove?: (key: string) => void;\n onChange: (e: ChangeEvent<HTMLInputElement>) => void;\n keyDown: (e: React.KeyboardEvent<HTMLInputElement>) => void;\n inputValue: string;\n setInputValue: (value: string) => void;\n isDropdownAutoOpen?: boolean;\n labelClass?: string;\n buttonClass?: string;\n dropdownOpenClass?: string;\n selectedItemsClass?: string;\n removeIconClass?: string;\n}\n\nconst MultipleAutoSuggestionInput: React.FC<\n MultipleAutoSuggestionInputProps\n> = ({\n label = \"\",\n options,\n selectedItems,\n isMulti = true,\n enableTypingSingle = true,\n onSelect,\n onRemove,\n keyDown,\n onChange,\n inputValue,\n setInputValue,\n isDropdownAutoOpen = false,\n labelClass = \"\",\n buttonClass = \"\",\n dropdownOpenClass = \"\",\n selectedItemsClass = \"\",\n removeIconClass = \"\",\n}) => {\n const [filteredOptions, setFilteredOptions] = useState(options);\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n\n const inputRef = useRef<HTMLInputElement>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n const selectedList = isMulti\n ? (selectedItems as string[])\n : selectedItems\n ? [selectedItems as string]\n : [];\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node)\n ) {\n setIsDropdownOpen(false);\n }\n };\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n useEffect(() => {\n if (!isMulti && !enableTypingSingle) {\n setFilteredOptions(\n options.filter((opt) => !selectedList.includes(opt.key))\n );\n return;\n }\n\n const filtered = options\n .filter((option) =>\n option.name.toLowerCase().includes(inputValue.toLowerCase())\n )\n .filter((option) => !selectedList.includes(option.key));\n\n setFilteredOptions(filtered);\n\n if (inputValue) {\n setIsDropdownOpen(true);\n } else {\n setIsDropdownOpen(false);\n }\n }, [inputValue, options, selectedItems]);\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setInputValue(e.target.value);\n onChange(e);\n };\n\n const handleOptionSelect = (key: string) => {\n onSelect(key);\n setInputValue(\"\");\n setIsDropdownOpen(false);\n };\n\n return (\n <div>\n <label\n className={twMerge(\n \"block text-sm font-medium text-custom-gray mb-1\",\n labelClass\n )}\n >\n {label}\n </label>\n <div\n ref={dropdownRef}\n className=\"relative\"\n onClick={() => {\n inputRef.current?.focus?.();\n if (!isDropdownOpen || isDropdownAutoOpen) {\n setIsDropdownOpen(true);\n }\n }}\n >\n <div\n className={twMerge(\n \"border border-[#E2E2E2] focus-within:border-[#4683B4] rounded-lg p-1.5 bg-[#F8F8F8] cursor-pointer flex flex-wrap items-center gap-2 min-h-[2.5rem]\",\n buttonClass\n )}\n >\n {isMulti && Array.isArray(selectedList)\n ? selectedList.map((itemKey) => {\n const option = options.find((opt) => opt.key === itemKey);\n return (\n <div\n key={itemKey}\n className={twMerge(\n \"flex flex border-[#E2E2E2] border items-center px-2 py-1 bg-white text-gray-700 rounded-md text-xs font-medium\",\n selectedItemsClass\n )}\n >\n {option ? option.name : itemKey}\n {onRemove && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n onRemove(itemKey);\n }}\n className={twMerge(\n \"ml-1 text-gray-500 hover:text-gray-700 bg-white\",\n removeIconClass\n )}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n >\n <path\n d=\"M11.0837 3.739L10.2612 2.9165L7.00033 6.17734L3.73949 2.9165L2.91699 3.739L6.17783 6.99984L2.91699 10.2607L3.73949 11.0832L7.00033 7.82234L10.2612 11.0832L11.0837 10.2607L7.82283 6.99984L11.0837 3.739Z\"\n fill=\"#323232\"\n />\n </svg>\n </button>\n )}\n </div>\n );\n })\n : selectedList.length > 0 && (\n <div\n className={twMerge(\n \"flex border-[#E2E2E2] border items-center px-2 py-1 bg-white text-gray-700 rounded-md text-xs font-medium\",\n selectedItemsClass\n )}\n >\n <span className=\"text-xs font-medium text-gray-800\">\n {options.find((opt) => opt.key === selectedList[0])?.name ||\n selectedList[0]}\n </span>\n {onRemove && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n onRemove(\n options.find((opt) => opt.key === selectedList[0])\n ?.name || selectedList[0]\n );\n }}\n className={twMerge(\n \"ml-1 text-gray-500 hover:text-gray-700\",\n removeIconClass\n )}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n >\n <path\n d=\"M11.0837 3.739L10.2612 2.9165L7.00033 6.17734L3.73949 2.9165L2.91699 3.739L6.17783 6.99984L2.91699 10.2607L3.73949 11.0832L7.00033 7.82234L10.2612 11.0832L11.0837 10.2607L7.82283 6.99984L11.0837 3.739Z\"\n fill=\"#323232\"\n />\n </svg>\n </button>\n )}\n </div>\n )}\n {!isMulti && !enableTypingSingle && selectedList.length === 0 && (\n <span className=\"text-xs text-gray-500 px-1 py-1\">Select...</span>\n )}\n {isMulti && enableTypingSingle && (\n <input\n type=\"text\"\n ref={inputRef}\n value={inputValue}\n onKeyDown={keyDown}\n onChange={handleInputChange}\n className=\"flex-grow px-0 py-1 bg-[#F8F8F8] text-xs border-none outline-none focus:ring-0\"\n onFocus={() => {\n if (!isDropdownOpen && (!isMulti || inputValue)) {\n setIsDropdownOpen(true);\n }\n }}\n />\n )}\n </div>\n\n {isDropdownOpen && filteredOptions.length > 0 && (\n <div\n className={twMerge(\n \"absolute top-full left-0 mt-1 w-full rounded-lg bg-white shadow-lg z-10 max-h-60 overflow-auto border border-[#E2E2E2]\",\n dropdownOpenClass\n )}\n >\n <div className=\"py-1 rounded-lg border-[#E2E2E2]\">\n {filteredOptions.map((option) => (\n <div\n key={option.key}\n className=\"px-4 py-2 text-sm cursor-pointer custom-listing-hover\"\n onClick={() => handleOptionSelect(option.key)}\n >\n {option.name}\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default MultipleAutoSuggestionInput;\n","import React, { ChangeEvent } from \"react\";\nimport { twMerge } from \"tailwind-merge\";\n\ninterface SingleListInputProps {\n formValues: string[];\n handleRemove: (value: string) => void;\n inputValue: string;\n onChange: (e: ChangeEvent<HTMLInputElement>) => void;\n keyDown: (e: React.KeyboardEvent<HTMLInputElement>) => void;\n label?: string;\n buttonClass?: string;\n labelClass?: string;\n}\n\nconst SingleListInput: React.FC<SingleListInputProps> = ({\n formValues,\n handleRemove,\n inputValue,\n onChange,\n keyDown,\n label,\n buttonClass = \"\",\n labelClass = \"\",\n}) => {\n return (\n <div>\n <label\n className={twMerge(\n \"block text-sm font-medium text-gray-600 mb-1\",\n labelClass\n )}\n >\n {label}\n </label>\n\n <div\n className={twMerge(\n \"border border-[#E2E2E2] rounded-lg p-1.5 bg-[#F8F8F8] cursor-pointer flex flex-wrap items-center gap-2 focus-within:border-[#4683B4]\",\n buttonClass\n )}\n >\n {formValues.map((id) => (\n <div\n key={id}\n className=\"flex border-custom-gray items-center px-2 py-1 bg-white text-gray-700 rounded-md text-xs font-medium\"\n >\n {id}\n <button\n onClick={() => handleRemove(id)}\n aria-label={`Remove ${id}`}\n className=\"ml-1 text-gray-500 hover:text-gray-700 bg-white\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n >\n <path\n d=\"M11.0837 3.739L10.2612 2.9165L7.00033 6.17734L3.73949 2.9165L2.91699 3.739L6.17783 6.99984L2.91699 10.2607L3.73949 11.0832L7.00033 7.82234L10.2612 11.0832L11.0837 10.2607L7.82283 6.99984L11.0837 3.739Z\"\n fill=\"#323232\"\n />\n </svg>\n </button>\n </div>\n ))}\n\n <input\n type=\"text\"\n value={inputValue}\n onChange={onChange}\n onKeyDown={keyDown}\n className=\"flex-grow px-0 py-1 bg-[#F8F8F8] text-xs border-none outline-none focus:ring-0\"\n />\n </div>\n </div>\n );\n};\n\nexport default SingleListInput;\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { twMerge } from \"tailwind-merge\";\n\ntype Option = { id: string; name: string };\n\ntype SingleSelectDropdownProps = {\n label?: string;\n value: string | null; // now only the id\n onChange: (value: string) => void; // returns id only\n options: Option[];\n placeholder?: string;\n onScrollToEnd?: () => void;\n onSearch?: (searchTerm: string) => void;\n hasMore?: boolean;\n isLoading?: boolean;\n searchable?: boolean;\n searchDebounceMs?: number;\n requiresSearch?: boolean;\n minSearchLength?: number;\n emptyMessage?: string;\n loadingMessage?: string;\n searchPlaceholder?: string;\n disabled?: boolean;\n allOptions?: Option[];\n hasIcon?: boolean;\n buttonClass?: string;\n labelClass?: string;\n displayMainClass?: string;\n displayItemClass?: string;\n hasSearchIcon?: boolean;\n searchInputClass?: string;\n placeholderSearchClass?: string;\n};\n\nexport default function SingleSelectDropdown({\n label = \"\",\n value,\n onChange,\n options,\n placeholder = \"Select an option\",\n onScrollToEnd,\n onSearch,\n hasMore = false,\n isLoading = false,\n searchable = true,\n searchDebounceMs = 300,\n requiresSearch = false,\n minSearchLength = 1,\n emptyMessage = \"No options found\",\n loadingMessage = \"Searching...\",\n searchPlaceholder = \"Search...\",\n disabled = false,\n hasIcon = true,\n buttonClass = \"\",\n labelClass = \"\",\n displayItemClass = \"\",\n displayMainClass = \"\",\n hasSearchIcon = true,\n searchInputClass = \"\",\n placeholderSearchClass = \"\",\n}: SingleSelectDropdownProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [searchTerm, setSearchTerm] = useState(\"\");\n const dropdownRef = useRef<HTMLDivElement>(null);\n const listRef = useRef<HTMLDivElement>(null);\n const searchTimeoutRef = useRef<number | any | undefined>();\n const [hoveredId, setHoveredId] = useState<string | null>(null);\n\n // The actual Option object corresponding to the passed id\n const selectedOption = options.find((opt) => opt.id === value) || null;\n\n // Handle scroll for pagination\n const handleScroll = useCallback(() => {\n if (!listRef.current || isLoading || !hasMore) return;\n\n const { scrollTop, scrollHeight, clientHeight } = listRef.current;\n if (scrollTop + clientHeight >= scrollHeight - 10) {\n onScrollToEnd?.();\n }\n }, [isLoading, hasMore, onScrollToEnd]);\n\n // Debounced search handler\n const handleSearchChange = useCallback(\n (newSearchTerm: string) => {\n setSearchTerm(newSearchTerm);\n\n if (onSearch) {\n if (searchTimeoutRef.current) {\n clearTimeout(searchTimeoutRef.current);\n }\n\n searchTimeoutRef.current = setTimeout(() => {\n onSearch(newSearchTerm);\n }, searchDebounceMs);\n }\n },\n [onSearch, searchDebounceMs]\n );\n\n // Clear search timeout on unmount\n useEffect(() => {\n return () => {\n if (searchTimeoutRef.current) {\n clearTimeout(searchTimeoutRef.current);\n }\n };\n }, []);\n\n // Dynamic filtering logic\n const getFilteredOptions = () => {\n if (onSearch) {\n // API-driven search — no local filter\n return options;\n } else {\n return options.filter((opt) =>\n (opt.name ?? \"\").toLowerCase().includes(searchTerm.toLowerCase())\n );\n }\n };\n\n const filteredOptions = getFilteredOptions();\n\n // Dynamic display logic\n const getDisplayOptions = () => {\n if (requiresSearch && onSearch) {\n if (searchTerm.length < minSearchLength) {\n return selectedOption ? [selectedOption] : [];\n }\n }\n return filteredOptions;\n };\n\n const displayOptions = getDisplayOptions();\n\n // Dynamic empty state logic\n const getEmptyStateContent = () => {\n if (requiresSearch && onSearch && searchTerm.length < minSearchLength) {\n return (\n <div className=\"px-4 py-8 text-center\">\n <div className=\"text-gray-400 mb-2\">\n <svg\n className=\"mx-auto h-8 w-8 mb-3\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\n />\n </svg>\n </div>\n <p className=\"text-sm text-gray-500 font-medium\">\n Enter at least {minSearchLength}{\" \"}\n {minSearchLength === 1 ? \"character\" : \"characters\"} to search\n </p>\n {minSearchLength >= 3 && (\n <p className=\"text-xs text-gray-400 mt-1\">\n Search from large dataset\n </p>\n )}\n </div>\n );\n }\n\n return (\n <div className=\"px-2 py-2 text-sm text-gray-500\">\n {!isLoading && options.length === 0 && emptyMessage}\n </div>\n );\n };\n\n const handleClickOutside = (event: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n };\n\n useEffect(() => {\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n // Modified: reset search only when opening again or when value changes\n useEffect(() => {\n if (isOpen && searchTerm && onSearch) {\n setSearchTerm(\"\");\n onSearch(\"\");\n }\n }, [isOpen]); // purposely only on isOpen change\n\n // Handle dropdown toggle\n const handleToggle = () => {\n if (!disabled) {\n setIsOpen(!isOpen);\n }\n };\n\n return (\n <div>\n <label\n className={twMerge(\n \"block py-1 pt-1 text-[14px] font-semibold mb-1 text-[#545454] \",\n labelClass\n )}\n style={{ letterSpacing: \"0.2px\" }}\n >\n {label}\n </label>\n <div ref={dropdownRef} className=\"relative\">\n <div\n onClick={handleToggle}\n className={twMerge(\n `border-[1.5px] rounded-md h-[40px] pl-3 pr-2 py-2 bg-[#F8F8F8] cursor-pointer flex items-center justify-between ${\n disabled\n ? \"bg-gray-100 cursor-not-allowed border-gray-200\"\n : isOpen\n ? \"border-[#4683B4]\"\n : \"border-[#E2E2E2]\"\n }`,\n buttonClass\n )}\n >\n <span\n className={`text-sm ${\n disabled\n ? \"text-gray-400\"\n : selectedOption\n ? \"text-gray-700\"\n : \"text-gray-400\"\n }`}\n >\n {selectedOption?.name || placeholder}\n </span>\n <div\n className={`transition-transform duration-200 ${\n isOpen ? \"rotate-180\" : \"\"\n } ${disabled ? \"text-gray-400\" : \"\"}\n ${hasIcon ? \"block\" : \"hidden\"}\n `}\n >\n <svg\n className=\"transform rotate-180\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g clipPath=\"url(#clip0_10508_5931)\">\n <path\n d=\"M5.83333 11.6665L10 7.49984L14.1667 11.6665H5.83333Z\"\n fill=\"currentColor\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_10508_5931\">\n <rect\n width=\"20\"\n height=\"20\"\n fill=\"white\"\n transform=\"matrix(1 0 0 -1 0 20)\"\n />\n </clipPath>\n </defs>\n </svg>\n </div>\n </div>\n\n {isOpen && !disabled && (\n <div className=\"absolute mt-1 w-full rounded-md bg-white shadow-lg z-20\">\n <div className=\"p-2 shadow-md border rounded-md max-h-[410px] flex flex-col\">\n {searchable && (\n <div className=\"relative\">\n <input\n type=\"text\"\n className={twMerge(\n \"input-placeholder-ellipsis w-full pr-[30px] h-[40px] px-2 py-1 rounded-md border border-gray-300 text-sm focus:border-1 focus:border-[#4683B4] focus:outline-none\",\n searchInputClass\n )}\n value={searchTerm}\n onChange={(e) => handleSearchChange(e.target.value)}\n />\n {!searchTerm && (\n <span\n className={twMerge(\n \"absolute left-2 top-1/2 transform -translate-y-1/2 text-[12px] text-gray-400 overflow-hidden whitespace-nowrap text-ellipsis pointer-events-none w-[90%]\",\n placeholderSearchClass\n )}\n >\n {searchPlaceholder}\n </span>\n )}\n <div\n className={twMerge(\n \"absolute right-2 top-1/2 transform -translate-y-1/2 pointer-events-none\",\n hasSearchIcon ? \"block\" : \"hidden\"\n )}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M10.9167 9.66667H10.2583L10.025 9.44167C10.8417 8.49167 11.3333 7.25833 11.3333 5.91667C11.3333 2.925 8.90833 0.5 5.91667 0.5C2.925 0.5 0.5 2.925 0.5 5.91667C0.5 8.90833 2.925 11.3333 5.91667 11.3333C7.25833 11.3333 8.49167 10.8417 9.44167 10.025L9.66667 10.2583V10.9167L13.8333 15.075L15.075 13.8333L10.9167 9.66667ZM5.91667 9.66667C3.84167 9.66667 2.16667 7.99167 2.16667 5.91667C2.16667 3.84167 3.84167 2.16667 5.91667 2.16667C7.99167 2.16667 9.66667 3.84167 9.66667 5.91667C9.66667 7.99167 7.99167 9.66667 5.91667 9.66667Z\"\n fill=\"#757575\"\n />\n </svg>\n </div>\n </div>\n )}\n\n <div\n ref={listRef}\n onScroll={handleScroll}\n onMouseEnter={() => setHoveredId(\"hovered\")}\n onMouseLeave={() => setHoveredId(null)}\n className={twMerge(\n `overflow-auto max-h-80 overscroll-contain ${\n searchable ? \"mt-2\" : \"\"\n }`,\n displayMainClass\n )}\n >\n {displayOptions.length > 0\n ? displayOptions.map((opt) => (\n <div\n key={opt.id}\n className={twMerge(\n `h-[40px] px-2 py-2 my-1 text-sm cursor-pointer select-none ${\n opt.id === value && hoveredId == null\n ? \"bg-[#ECF3F7] text-[#131414] font-semibold\"\n : opt.id === value && hoveredId != null\n ? \"text-[#131414] font-semibold\"\n : \"text-[#131414]\"\n }`,\n displayItemClass\n )}\n onClick={() => {\n onChange(opt.id); // only id now\n setIsOpen(false);\n }}\n >\n {opt.name}\n </div>\n ))\n : getEmptyStateContent()}\n {isLoading && hasMore && (\n <div className=\"flex justify-center px-2 pb-4\">\n <div className=\"flex items-center text-sm text-gray-500\">\n <div className=\"animate-spin rounded-full h-4 w-4 border-b-2 border-gray-400 mr-2\"></div>\n {loadingMessage}\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}\n","import { twMerge } from \"tailwind-merge\";\ninterface SelectionButton {\n data: string[];\n className?: string;\n buttonClass?: string;\n currentValue: string;\n onClick: (value: string) => void;\n}\nconst SelectionButton = ({\n data,\n currentValue,\n className = \"\",\n buttonClass,\n onClick,\n}: SelectionButton) => {\n return (\n <div\n className={twMerge(\n \"flex bg-white w-[208px] h-[28px] border border-[#E2E2E2] rounded-[4px] overflow-hidden\",\n className\n )}\n >\n {data.map((time, index) => (\n <button\n key={time}\n onClick={() => {\n onClick(time);\n }}\n className={twMerge(\n `font-normal px-[8px] text-[14px] text-[#131414] ${\n currentValue === time\n ? \"bg-[#ECF3F7] text-[#4683B4] font-semibold \"\n : \"text-gray-600 hover:bg-gray-100\"\n } ${index > 0 ? \"border-l border-gray-300\" : \"\"}`,\n buttonClass\n )}\n >\n {time}\n </button>\n ))}\n </div>\n );\n};\n\nexport default SelectionButton;\n","import { format, isValid, parseISO } from \"date-fns\";\nimport DatePicker from \"react-datepicker\";\nimport { twMerge } from \"tailwind-merge\";\n\ninterface DynamicDateProps {\n label?: string;\n hasCalendarIcon?: boolean;\n value: string; // ISO string: \"YYYY-MM-DD\"\n onChange: (e: string) => void;\n placeholder?: string;\n disableFuture?: boolean;\n labelColor?: string;\n borderWeight?: string;\n bgColor?: string;\n height?: string;\n placeholderColor?: string;\n labelClass?: string;\n className?: string;\n customIcon?: string;\n iconSize?: number;\n iconClass?: string;\n}\n\nconst SingleDateInput = ({\n label,\n hasCalendarIcon = true,\n value,\n onChange,\n placeholder = \"Required\",\n disableFuture = false,\n labelColor = \"text-[#131414]\",\n borderWeight = \"border-[2px]\",\n bgColor = \"bg-[#F8F8F8]\",\n height = \"h-[48px]\",\n placeholderColor = \"text-[#757575]\",\n labelClass = \"\",\n className = \"\",\n customIcon,\n iconSize = 20,\n iconClass = \"\",\n}: DynamicDateProps) => {\n const parsedDate = isValid(parseISO(value)) ? parseISO(value) : null;\n\n const handleChange = (date: Date | null) => {\n if (date) {\n onChange(format(date, \"yyyy-MM-dd\")); // keep it in ISO format\n } else {\n onChange(\"\");\n }\n };\n\n return (\n <div className=\"w-full\">\n {label && (\n <p\n className={twMerge(\n `${labelColor} text-[14px] font-semibold mb-1`,\n labelClass\n )}\n >\n {label}\n </p>\n )}\n <div className=\"relative\">\n <DatePicker\n selected={parsedDate}\n onChange={handleChange}\n maxDate={disableFuture ? new Date() : undefined}\n placeholderText={placeholder}\n dateFormat=\"MM/dd/yyyy\"\n className={twMerge(\n `\n ${height} px-3 py-2 ${borderWeight} rounded-[8px] text-[14px] text-[#131414] w-full\n border-[#E2E2E2] focus:border-[#3C6E97] focus:outline-none ${bgColor} placeholder:${placeholderColor}\n ${value !== \"\" ? \"text-[#131414]\" : \"\"}\n ${hasCalendarIcon ? \"pr-10\" : \"\"}\n `,\n className\n )}\n />\n {customIcon && customIcon}\n {hasCalendarIcon && (\n <div\n className={twMerge(\n \"absolute top-1/2 right-3 -translate-y-1/2 pointer-events-none\",\n iconClass\n )}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={iconSize}\n height={iconSize}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n >\n <path\n d=\"M4.5 9H6.5V11H4.5V9ZM18.5 4V18C18.5 19.1 17.6 20 16.5 20H2.5C1.39 20 0.5 19.1 0.5 18L0.51 4C0.51 2.9 1.39 2 2.5 2H3.5V0H5.5V2H13.5V0H15.5V2H16.5C17.6 2 18.5 2.9 18.5 4ZM2.5 6H16.5V4H2.5V6ZM16.5 18V8H2.5V18H16.5ZM12.5 11H14.5V9H12.5V11ZM8.5 11H10.5V9H8.5V11Z\"\n fill=\"#757575\"\n />\n </svg>\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default SingleDateInput;\n","import { isToday, startOfDay } from \"date-fns\";\nimport React from \"react\";\nimport DatePicker from \"react-datepicker\";\nimport { twMerge } from \"tailwind-merge\";\n\ninterface TimeInputProps {\n label?: string;\n hasTimeIcon?: boolean;\n value: string; // ISO string: \"YYYY-MM-DDTHH:mm:ss\"\n onChange: (e: string) => void;\n placeholder?: string;\n disableFuture?: boolean;\n selectedDate?: string;\n className?: string;\n labelClassName?: string;\n customIcon?: React.ReactNode;\n iconSize?: number;\n iconClass?: string;\n}\n\nconst TimeInput = ({\n label,\n hasTimeIcon = true,\n value,\n onChange,\n placeholder = \"Required\",\n disableFuture = false,\n selectedDate,\n className = \"\",\n labelClassName = \"\",\n customIcon,\n iconSize = 20,\n iconClass = \"\",\n}: TimeInputProps) => {\n const parsedDate = value ? new Date(value) : null;\n\n const handleChange = (date: Date | null) => {\n if (date && !isNaN(date.getTime())) {\n onChange(date.toISOString());\n }\n };\n\n const now = new Date();\n\n let minTime: Date | undefined;\n let maxTime: Date | undefined;\n\n if (disableFuture && selectedDate) {\n const selected = new Date(selectedDate);\n minTime = startOfDay(selected);\n\n if (isToday(selected)) {\n maxTime = now;\n } else {\n const endOfDay = new Date(selected);\n endOfDay.setHours(23, 59, 59, 999);\n maxTime = endOfDay;\n }\n }\n\n return (\n <div className=\"w-full\">\n {label && (\n <p\n className={twMerge(\n \"text-[#131414] text-[14px] font-semibold mb-1\",\n labelClassName\n )}\n >\n {label}\n </p>\n )}\n <div className=\"relative\">\n <DatePicker\n selected={parsedDate}\n onChange={handleChange}\n showTimeSelect\n showTimeSelectOnly\n timeIntervals={15}\n timeCaption=\"Time\"\n maxDate={disableFuture ? new Date() : undefined}\n placeholderText={placeholder}\n dateFormat=\"hh:mm aa\"\n minTime={minTime}\n maxTime={maxTime}\n className={twMerge(\n `\n h-[48px] px-3 py-2 border-[2px] rounded-[8px] text-[14px] w-full\n border-[#E2E2E2] focus:border-[#3C6E97] focus:outline-none bg-[#F8F8F8]\n ${value !== \"\" ? \"text-[#131414]\" : \"text-[#757575]\"}\n ${hasTimeIcon ? \"pr-10\" : \"\"}\n `,\n className\n )}\n />\n {customIcon && customIcon}\n {hasTimeIcon && (\n <div\n className={twMerge(\n \"absolute top-1/2 right-3 -translate-y-1/2 pointer-events-none\",\n iconClass\n )}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={iconSize}\n height={iconSize}\n viewBox={`0 0 20 20`}\n fill=\"none\"\n >\n <path\n d=\"M9.99 0C4.47 0 0 4.48 0 10C0 15.52 4.47 20 9.99 20C15.52 20 20 15.52 20 10C20 4.48 15.52 0 9.99 0ZM10 18C5.58 18 2 14.42 2 10C2 5.58 5.58 2 10 2C14.42 2 18 5.58 18 10C18 14.42 14.42 18 10 18ZM10.5 5H9V11L14.25 14.15L15 12.92L10.5 10.25V5Z\"\n fill=\"#757575\"\n />\n </svg>\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default TimeInput;\n","import React from 'react';\nimport ReactPaginate from 'react-paginate';\n\ninterface PaginationProps {\n totalPages: number;\n currentPage: number;\n onPageChange: (selectedPage: number) => void;\n pageRangeDisplayed?: number;\n}\n\nconst Pagination: React.FC<PaginationProps> = ({ totalPages, currentPage, onPageChange, pageRangeDisplayed = 4 }) => {\n return (\n <ReactPaginate\n key={totalPages}\n previousLabel={\n <svg\n width=\"8\"\n height=\"14\"\n viewBox=\"0 0 8 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M7 1L1 7L7 13\"\n stroke=\"#4062E5\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n }\n nextLabel={\n <svg\n width=\"8\"\n height=\"14\"\n viewBox=\"0 0 8 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M1 1L7 7L1 13\"\n stroke=\"#4062E5\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n }\n breakLabel={\n <svg\n width=\"16\"\n height=\"4\"\n viewBox=\"0 0 16 4\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"2.5\" cy=\"2\" r=\"1.75\" fill=\"#4062E5\" />\n <circle cx=\"8\" cy=\"2\" r=\"1.75\" fill=\"#4062E5\" />\n <circle cx=\"13.5\" cy=\"2\" r=\"1.75\" fill=\"#4062E5\" />\n </svg>\n }\n onPageChange={(event) => onPageChange(event.selected + 1)}\n pageRangeDisplayed={pageRangeDisplayed}\n marginPagesDisplayed={1}\n pageCount={totalPages}\n forcePage={currentPage - 1}\n containerClassName=\"flex items-center gap-2\"\n pageClassName=\"min-w-[32px] w-auto h-[32px] flex items-center justify-center rounded-md\"\n pageLinkClassName=\"w-full h-full flex items-center justify-center text-[#4062E5] hover:bg-[#ECEFFC] rounded-md cursor-pointer\"\n activeClassName=\"bg-[#4062E5] rounded-md cursor-default pointer-events-none\"\n activeLinkClassName=\"text-white\"\n previousClassName=\"min-w-[32px] w-auto h-[32px] flex items-center justify-center rounded-md\"\n previousLinkClassName=\"w-full h-full flex items-center justify-center pagination-color hover:bg-[#ECEFFC] rounded-md cursor-pointer disabled:text-gray-300\"\n nextClassName=\"min-w-[32px] w-auto h-[32px] flex items-center justify-center rounded-md\"\n nextLinkClassName=\"w-full h-full flex items-center justify-center pagination-color hover:bg-[#ECEFFC] rounded-md cursor-pointer disabled:text-gray-300\"\n breakClassName=\"w-10 h-10 flex items-center justify-center text-gray-500 font-bold\"\n disabledClassName=\"opacity-50 cursor-not-allowed\"\n />\n );\n};\n\nexport default Pagination;\n","import { twMerge } from \"tailwind-merge\";\nimport InfoIcon from \"../assets/info.svg\";\nimport DateRangePicker from \"../inputs/DateRange\";\nimport { TableHeaderProps } from \"./DynamicTable\";\n\nconst TableHeader: React.FC<TableHeaderProps> = ({\n toggleFilterPanel,\n isFilterPanelVisible,\n iconHeader,\n title,\n isExport,\n handleExport,\n isExporting,\n hasTooltip = false,\n isSimpleMode = false,\n tooltipMessage = \"This tab shows faxes received on the ChartRequest's retrieval fax line, 661-208-3159\",\n isButtonAvailable = true,\n isFilterVisible = false,\n isUseDateRange = false,\n isShowDateRange = false,\n dateRangeApplyFunc = (start_date, end_date) =>\n console.log(start_date, end_date),\n setIsShowDateRange,\n exportTooltipMessage = \"Select a date range to export data. The maximum allowed range is 1 year\",\n exportTooltipClass = \"left-2 \",\n hasMiddleHeaderCustomComponent = false,\n middleHeaderCustomComponent,\n rightHeaderClass = \"space-x-4\",\n dateRangeClass = \"\",\n customClass,\n}) => {\n return (\n <div className=\"h-[44px] w-full relative rounded-tl-[8px] rounded-tr-[8px] border bg-[#F5F7FE] flex px-[16px] py-[8px] justify-between items-center gap-4 border-[#C6D0F7] \">\n {customClass}\n <div className=\"flex items-center space-x-2 text-[#131414]\">\n {iconHeader}\n <span className=\"text-[14px] font-semibold text-content\">{title}</span>\n {hasTooltip && (\n <span\n className=\"relative group inline-flex items-center\" // Use inline-flex to align with text/elements\n >\n <img\n src={InfoIcon}\n alt=\"Info\"\n width={12}\n height={12}\n className=\"pt-[1px]\"\n />\n <div\n className=\"absolute left-full ml-2 top-1/2 -translate-y-1/2 z-10 hidden group-hover:block rounded-md bg-black text-white text-xs p-3 shadow-lg max-w-xs\" // Increased padding, max-width\n style={{ width: \"280px\", lineHeight: \"1.4\" }}\n >\n <div className=\"absolute right-full top-1/2 -translate-y-1/2 w-3 h-3 bg-black rotate-45 -mr-1.5\"></div>\n {tooltipMessage}\n </div>\n </span>\n )}\n </div>\n\n <div className={`flex items-center h-[28px] ${rightHeaderClass}`}>\n {setIsShowDateRange && (\n <span\n className={`relative group inline-flex ${exportTooltipClass} items-center ${\n !isButtonAvailable ? \"opacity-50\" : \"\"\n }`}\n >\n <img\n src={InfoIcon}\n alt=\"Info\"\n width={12}\n height={12}\n className=\"pt-[1px]\"\n />\n <div\n className=\"absolute right-5 ml-2 top-1/2 -translate-y-1/2 z-10 hidden group-hover:block rounded-md bg-black text-white text-xs p-2 shadow-lg max-w-xs\" // Increased padding, max-width\n style={{ width: \"280px\", lineHeight: \"1.4\" }}\n >\n <div className=\"absolute left-full top-1/2 -translate-y-1/2 w-3 h-3 bg-black rotate-45 -ml-1.5\"></div>\n {exportTooltipMessage}\n </div>\n </span>\n )}\n {isExporting && (\n <svg className=\"animate-spin h-5 w-10 text-white\" viewBox=\"0 0 24 24\">\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n ></circle>\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8v8H4z\"\n ></path>\n </svg>\n )}\n {isExport && !isExporting && (\n <button\n className={`font-semibold text-[14px] bg-transparent text-primary border-base-200 ${\n !isButtonAvailable ? \"opacity-50\" : \"\"\n }`}\n onClick={() => {\n if (!isButtonAvailable) return;\n handleExport?.();\n }}\n >\n Export\n </button>\n )}\n {isUseDateRange && isFilterVisible && (\n <div className={twMerge(\"absolute right-[141px] \", dateRangeClass)}>\n <DateRangePicker\n start_date={\"\"}\n end_date={\"\"}\n isDateRangeOnly\n dateFunc={(startDate, endDate) => {\n dateRangeApplyFunc(startDate, endDate);\n }}\n dateRangeClass=\"right-0 top-[11px]\"\n autoOpen={isShowDateRange}\n setIsShowDateRange={setIsShowDateRange}\n />\n </div>\n )}\n {\n <div\n className={`${hasMiddleHeaderCustomComponent ? \"block\" : \"hidden\"}`}\n >\n {middleHeaderCustomComponent}\n </div>\n }\n {!isSimpleMode && isFilterVisible && (\n <button\n onClick={() => {\n if (!isButtonAvailable) return;\n toggleFilterPanel?.();\n }}\n className={`px-[8px] py-[4px] rounded-[4px] border font-semibold text-[14px] ${\n !isButtonAvailable ? \"opacity-50\" : \"\"\n } filter-serach-hover\n ${\n isFilterPanelVisible\n ? \"filter-serach-button\"\n : \"bg-white text-primary border-base-200\"\n }`}\n >\n Filter & Search\n </button>\n )}\n </div>\n </div>\n );\n};\nexport default TableHeader;\n","import React from \"react\";\nimport NoData from \"../assets/noData.png\";\nimport Pagination from \"./Pagination\";\nimport TableHeader from \"./TableHeader\";\n// 1. Set interface TableData, FilterState, TableProps\nexport interface Column {\n name: string;\n selector: string;\n width: string;\n sortable?: boolean;\n isJustifyBetween?: boolean;\n isLineHeight?: boolean;\n isCenteredText?: boolean;\n className?: string;\n iconClassName?: string;\n tableHeaderFontSize?: string;\n}\nexport interface TableHeaderProps {\n toggleFilterPanel?: () => void;\n isFilterPanelVisible?: boolean;\n iconHeader?: React.ReactNode;\n title?: string;\n isExport?: boolean;\n handleExport?: () => void;\n isExporting?: boolean | undefined;\n hasTooltip?: boolean;\n tooltipMessage?: string;\n isSimpleMode?: boolean;\n isButtonAvailable?: boolean;\n isFilterVisible?: boolean;\n isUseDateRange?: boolean;\n isShowDateRange?: boolean;\n setIsShowDateRange?: () => void;\n dateRangeApplyFunc?: (start_date: string, end_date: string) => void;\n exportTooltipMessage?: string;\n exportTooltipClass?: string;\n hasMiddleHeaderCustomComponent?: boolean;\n middleHeaderCustomComponent?: React.ReactElement;\n rightHeaderClass?: string;\n dateRangeClass?: string;\n customClass?: string;\n}\n\ninterface TableHeaderCustom {\n tableHeaderHeight?: string;\n}\ninterface TableData {\n id?: string | number;\n [key: string]: any; // Allow for flexible data properties\n}\n\ninterface PaginationProps {\n totalPage: number;\n currentPage: number;\n handlePageChange: (page: number) => void;\n handleRowsPerPageChange: (page: number) => void;\n page: number;\n per_page: number;\n totalItems: number;\n}\n\ninterface DynamicTableProps {\n columns: Column[];\n tableData: TableData[];\n handleSort: (selector: string) => void;\n pagination: PaginationProps;\n mainTableHeader: TableHeaderProps;\n tableHeaderCustom?: TableHeaderCustom;\n isLoading: boolean;\n isError: boolean;\n tableHeader?: (\n column: Column,\n columnIndex: number,\n sortData: (selector: string) => void\n ) => React.ReactNode;\n tableBody?: (item: TableData, column: Column, columnIndex: number) => any;\n noDataMessage?: string;\n}\n\nconst DynamicTable: React.FC<DynamicTableProps> = ({\n columns,\n tableData,\n handleSort,\n pagination,\n isLoading,\n isError,\n tableBody,\n mainTableHeader,\n tableHeaderCustom,\n noDataMessage = \"No QA requests were found!\",\n}) => {\n const NoDataComponent = () => (\n <div className=\"flex flex-col justify-center items-center h-[53.2vh]\">\n <span>\n <img src={NoData} alt={\"No Data\"} width={100} height={100} />\n </span>\n <span className=\"text-gray-500 text-sm\">{noDataMessage}</span>\n </div>\n );\n\n return (\n <div className=\"relative flex flex-col grow w-full bg-white rounded-[8px]\">\n <TableHeader\n iconHeader={mainTableHeader.iconHeader}\n isFilterPanelVisible={mainTableHeader.isFilterPanelVisible}\n toggleFilterPanel={mainTableHeader.toggleFilterPanel}\n title={mainTableHeader.title}\n isExport={mainTableHeader.isExport}\n handleExport={mainTableHeader.handleExport}\n isExporting={mainTableHeader.isExporting}\n hasTooltip={mainTableHeader.hasTooltip}\n tooltipMessage={mainTableHeader.tooltipMessage}\n isButtonAvailable={mainTableHeader.isButtonAvailable}\n hasMiddleHeaderCustomComponent={\n mainTableHeader.hasMiddleHeaderCustomComponent\n }\n middleHeaderCustomComponent={\n mainTableHeader.middleHeaderCustomComponent\n }\n />\n {\n <div className=\"relative min-w-full bg-white bg-gray-50 border-l border-r border-b rounded-bl-[8px] rounded-br-[8px] p-6 pt-0 pl-0 pr-0 border-[#C6D0F7]\">\n {\n <table className=\"min-w-full divide-y divide-gray-200 shadow-sm table-fixed\">\n <thead className=\"border-b-2\">\n <tr>\n {columns.map((column, columnIndex) => (\n <th\n key={column.name}\n scope=\"col\"\n className={`px-1 pb-[7.5px] ${\n tableHeaderCustom?.tableHeaderHeight !== undefined\n ? tableHeaderCustom.tableHeaderHeight\n : \"h-[42px]\"\n } text-left tracking-wider cursor-pointer break-all ${\n column.isLineHeight && \"line-height-1\"\n } ${columnIndex === 0 ? \"pl-[24px]\" : \"\"} ${\n columnIndex === columns.length - 1 ? \"pr-[24px]\" : \"\"\n }`}\n style={{\n width: column.width,\n verticalAlign: \"bottom\",\n }}\n onClick={() =>\n column.sortable && handleSort(column.selector)\n }\n >\n <div\n className={`flex ${\n column.isJustifyBetween && \"justify-between\"\n } ${\n column.isJustifyBetween &&\n column.className !== undefined\n ? column.className\n : \"\"\n } items-center`}\n >\n {column.selector === \"checkbox\" ? (\n // This checkbox logic would typically be managed by the parent component\n <input type=\"checkbox\" className=\"cursor-pointer\" />\n ) : (\n <>\n <span\n className={`${\n column.isCenteredText &&\n \"h-[25px] flex flex-center\"\n } items-center text-[12px] font-semibold text-[#131414]`}\n >\n {column.name}\n </span>\n {column.sortable && (\n <span\n className={`inline-block ml-2 ${\n column.iconClassName ?? \"\"\n }`}\n >\n <svg\n width=\"8\"\n height=\"12\"\n viewBox=\"0 0 8 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M3.99994 1.88667L6.11328 4L7.05328 3.06L3.99994 0L0.939941 3.06L1.88661 4L3.99994 1.88667ZM3.99994 10.1133L1.88661 8L0.946608 8.94L3.99994 12L7.05994 8.94L6.11328 8L3.99994 10.1133Z\"\n fill=\"#323232\"\n />\n </svg>\n </span>\n )}\n </>\n )}\n </div>\n </th>\n ))}\n </tr>\n </thead>\n {!isLoading && (\n <tbody className=\"bg-white divide-y divide-gray-200\">\n {tableData.map((item, index) => (\n <tr key={index}>\n {columns.map((column, columnIndex) => (\n <td\n key={column.selector}\n className={`px-1 py-[5px] whitespace-normal text-[12px] font-normal items-center text-[#131414] break-all ${\n columnIndex === 0 ? \"pl-[24px]\" : \"\"\n } ${\n columnIndex === columns.length - 1\n ? \"pr-[24px]\"\n : \"\"\n }`}\n style={{ width: column.width, minHeight: \"45px\" }}\n >\n {/* Render custom body content if provided, otherwise default to item property */}\n {tableBody\n ? tableBody(item, column, columnIndex)\n : item[column.selector as keyof TableData]}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n )}\n </table>\n }\n {(isError || tableData.length === 0) && !isLoading && (\n <div className=\"container mx-auto overflow-x-auto \">\n <NoDataComponent />\n </div>\n )}\n {isLoading && (\n <div\n className=\"container mx-auto overflow-x-auto \"\n style={{ borderColor: \"rgba(64, 98, 229, 0.2)\" }}\n >\n <div className=\"flex justify-center items-center h-[53.2vh]\">\n <div className=\"animate-spin rounded-full h-10 w-10 border-b-2 border-primary\"></div>\n </div>\n </div>\n )}\n {tableData && tableData.length > 0 && !isLoading && (\n <div className=\"flex items-center justify-between px-4 py-3 bg-white\">\n <div className=\"flex items-center gap-2\">\n <Pagination\n totalPages={pagination.totalPage}\n currentPage={pagination.page}\n onPageChange={pagination.handlePageChange}\n />\n </div>\n\n <div className=\"flex items-center justify-center gap-2\">\n <span\n className=\"text-[12px] font-normal text-[#131414]\"\n style={{ marginTop: \"3px\" }}\n >\n Rows Per Page:\n </span>\n\n <div className=\"relative\">\n <select\n value={pagination.per_page}\n onChange={(e) =>\n pagination.handleRowsPerPageChange(Number(e.target.value))\n }\n className=\"appearance-none border broder-1 rounded-[2px] gap-2px pr-[2px] pt-[1px] pl-[8px] h-[20px] w-[50px]\"\n style={{\n borderColor: \"#E0E1E6\",\n fontSize: \"12px\",\n }}\n >\n <option value={10}>10</option>\n <option value={20}>20</option>\n <option value={50}>50</option>\n <option value={100}>100</option>\n </select>\n <div className=\"absolute right-[5px] bottom-1/2 top-1/2 pt-[5px] transform -translate-y-1/2 w-3 h-3 text-gray-400 pointer-events-none\">\n <svg\n width=\"10\"\n height=\"5\"\n viewBox=\"0 0 10 5\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M0.833313 0.333496L4.99998 4.50016L9.16665 0.333496H0.833313Z\"\n fill=\"#131414\"\n />\n </svg>\n </div>\n </div>\n <div\n className=\"bg-[#B5BAC4] h-[16px] w-[1px] self-center\"\n style={{ marginTop: \"1px\" }}\n ></div>\n <span\n className=\"text-[12px] font-normal text-[#131414]\"\n style={{ marginTop: \"3px\" }}\n >\n {`${\n (pagination.page - 1) * pagination.per_page + 1\n } - ${Math.min(\n pagination.page * pagination.per_page,\n pagination.totalItems\n )} of ${pagination.totalItems}`}\n </span>\n </div>\n </div>\n )}\n </div>\n }\n </div>\n );\n};\n\nexport default DynamicTable;\n","import React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { twMerge } from \"tailwind-merge\";\nimport NoData from \"../assets/noData.png\";\nimport { Column, TableHeaderProps } from \"./DynamicTable\";\nimport Pagination from \"./Pagination\";\nimport TableHeader from \"./TableHeader\";\n\n// 1. Set interface TableData, FilterState, TableProps\ninterface TableBodyDesign {\n className?: string;\n}\ninterface TableHeaderCustom {\n tableHeaderHeight?: string;\n px?: string;\n toggleAll?: () => void;\n isIndeterminate?: boolean;\n isAllSelected?: boolean;\n}\ninterface TableData {\n id?: string | number;\n [key: string]: any; // Allow for flexible data properties\n}\n\ninterface PaginationProps {\n totalPage: number;\n currentPage: number;\n handlePageChange: (page: number) => void;\n handleRowsPerPageChange: (page: number) => void;\n page: number;\n per_page: number;\n totalItems: number;\n pageRangeDisplayed?: number;\n}\n\ninterface DynamicTableV2Props {\n columns: Column[];\n tableData: TableData[];\n handleSort: (selector: string) => void;\n pagination: PaginationProps;\n mainTableHeader: TableHeaderProps;\n tableHeaderCustom?: TableHeaderCustom;\n isLoading: boolean;\n isError: boolean;\n tableHeader?: (\n column: Column,\n columnIndex: number,\n sortData: (selector: string) => void\n ) => React.ReactNode;\n tableBody?: (item: TableData, column: Column, columnIndex: number) => any;\n tableRow?: (\n item: TableData,\n index: number\n ) => React.HTMLAttributes<HTMLTableRowElement>;\n noDataMessage?: string;\n noDataMessageHeader?: string;\n noDataMessageImage?: React.ReactNode;\n noDataMessageImageSize?: number;\n tableBodyDesign?: TableBodyDesign;\n hasAnotherScreen?: boolean;\n anotherScreenComponent?: any;\n isSimpleMode?: boolean;\n loadAndErrorHeight?: string;\n isDisableTableHeader?: boolean;\n isShowDateRange?: boolean;\n tableClass?: string;\n}\n\nconst DynamicTableV2: React.FC<DynamicTableV2Props> = ({\n columns,\n tableData,\n handleSort,\n pagination,\n isLoading,\n isError,\n tableBody,\n tableRow,\n mainTableHeader,\n tableHeaderCustom,\n noDataMessageHeader = \"\",\n noDataMessage = \"No requestor payments were found!\",\n noDataMessageImage,\n noDataMessageImageSize = 64,\n tableBodyDesign,\n hasAnotherScreen = false,\n isSimpleMode = false,\n anotherScreenComponent,\n loadAndErrorHeight = \"h-[53.2vh]\",\n isDisableTableHeader = false,\n tableClass = \"\",\n}) => {\n const tableRef = useRef<HTMLTableElement>(null);\n const paginationRef = useRef<HTMLDivElement>(null);\n const [tableHeight, setTableHeight] = useState<number>(0);\n\n const calculateHeight = useCallback(() => {\n const tableEl = tableRef.current;\n const paginationEl = paginationRef.current;\n if (!tableEl) return;\n let totalHeight = tableEl.offsetHeight;\n if (paginationEl && !isSimpleMode && tableData.length > 0 && !isLoading) {\n totalHeight += paginationEl.offsetHeight;\n }\n\n setTableHeight(totalHeight);\n }, [isSimpleMode, tableData.length, isLoading]);\n\n useEffect(() => {\n const tableEl = tableRef.current;\n const paginationEl = paginationRef.current;\n if (!tableEl) return;\n const observer = new ResizeObserver(() => {\n setTimeout(calculateHeight, 0);\n });\n observer.observe(tableEl);\n if (paginationEl && !isSimpleMode && tableData.length > 0 && !isLoading) {\n observer.observe(paginationEl);\n }\n setTimeout(calculateHeight, 0);\n return () => {\n observer.disconnect();\n };\n }, [calculateHeight, isSimpleMode, tableData.length, isLoading]);\n\n useEffect(() => {\n const timeoutId = setTimeout(() => {\n calculateHeight();\n }, 100);\n\n return () => clearTimeout(timeoutId);\n }, [pagination.page, pagination.per_page, calculateHeight]);\n\n useEffect(() => {\n const tableEl = tableRef.current;\n const paginationEl = paginationRef.current;\n\n if (!tableEl || !paginationEl) return;\n\n const updateHeight = () => {\n const totalHeight = tableEl.offsetHeight + paginationEl.offsetHeight;\n setTableHeight(totalHeight);\n };\n\n const observer = new ResizeObserver(updateHeight);\n observer.observe(tableEl);\n observer.observe(paginationEl);\n\n return () => {\n observer.disconnect();\n };\n }, []);\n\n const NoDataComponent = () => (\n <div\n className={`flex flex-col justify-center items-center ${loadAndErrorHeight}`}\n >\n <span>\n {noDataMessageImage ? (\n noDataMessageImage\n ) : (\n <img\n src={NoData}\n alt={\"No Data\"}\n width={noDataMessageImageSize}\n height={noDataMessageImageSize}\n />\n )}\n </span>\n <span className=\"font-semibold text-[20px]\">{noDataMessageHeader}</span>\n <span className=\"text-gray-500 text-sm\">{noDataMessage}</span>\n </div>\n );\n\n return (\n <div className=\"relative flex flex-col grow w-full bg-white rounded-[8px]\">\n <TableHeader\n iconHeader={mainTableHeader.iconHeader}\n isFilterPanelVisible={mainTableHeader.isFilterPanelVisible}\n toggleFilterPanel={mainTableHeader.toggleFilterPanel}\n title={mainTableHeader.title}\n isExport={mainTableHeader.isExport}\n handleExport={mainTableHeader.handleExport}\n isExporting={mainTableHeader.isExporting}\n hasTooltip={mainTableHeader.hasTooltip}\n tooltipMessage={mainTableHeader.tooltipMessage}\n isSimpleMode={isSimpleMode}\n isButtonAvailable={mainTableHeader.isButtonAvailable}\n isFilterVisible={mainTableHeader.isFilterVisible}\n isUseDateRange={mainTableHeader.isUseDateRange}\n isShowDateRange={mainTableHeader.isShowDateRange}\n dateRangeApplyFunc={mainTableHeader.dateRangeApplyFunc}\n setIsShowDateRange={mainTableHeader.setIsShowDateRange}\n exportTooltipMessage={mainTableHeader.exportTooltipMessage}\n exportTooltipClass={mainTableHeader.exportTooltipClass}\n rightHeaderClass={mainTableHeader.rightHeaderClass}\n hasMiddleHeaderCustomComponent={\n mainTableHeader.hasMiddleHeaderCustomComponent\n }\n middleHeaderCustomComponent={\n mainTableHeader.middleHeaderCustomComponent\n }\n dateRangeClass={mainTableHeader.dateRangeClass}\n customClass={mainTableHeader.customClass}\n />\n <div\n className={twMerge(\n `flex w-full h-full bg-white bg-gray-50 border-l border-r border-b rounded-bl-[8px] rounded-br-[8px] pt-0 pl-0 pr-0 border-[#C6D0F7] ${\n isSimpleMode && \"overflow-hidden\"\n }`,\n tableClass\n )}\n >\n {\n <div className=\"relative min-w-0 flex-1 border-r-[1px]\">\n {\n <table\n ref={tableRef}\n className=\"min-w-full divide-y divide-gray-200 shadow-sm table-auto\"\n >\n {!isDisableTableHeader && (\n <thead className=\"border-b-2\">\n <tr>\n {columns.map((column, columnIndex) => (\n <th\n key={column.name}\n scope=\"col\"\n className={`${\n tableHeaderCustom?.px ?? \"px-1\"\n } pb-[7.5px] ${\n tableHeaderCustom?.tableHeaderHeight !== undefined\n ? tableHeaderCustom.tableHeaderHeight\n : \"h-[42px]\"\n } text-left tracking-wider cursor-pointer break-all ${\n column.isLineHeight && \"line-height-1\"\n } ${columnIndex === 0 ? \"pl-[24px]\" : \"\"} ${\n columnIndex === columns.length - 1\n ? \"pr-[24px]\"\n : \"\"\n }`}\n style={{\n width: column.width,\n verticalAlign: \"bottom\",\n }}\n onClick={() =>\n column.sortable && handleSort(column.selector)\n }\n >\n <div\n className={`flex ${\n column.isJustifyBetween && \"justify-between\"\n } ${\n column.isJustifyBetween &&\n column.className !== undefined\n ? column.className\n : \"\"\n } items-center`}\n >\n {column.selector === \"checkbox\" ? (\n <input\n type=\"checkbox\"\n checked={\n tableHeaderCustom?.isAllSelected ?? false\n }\n ref={(input) => {\n if (input) {\n input.indeterminate =\n tableHeaderCustom?.isIndeterminate ??\n false;\n }\n }}\n onChange={tableHeaderCustom?.toggleAll}\n className=\"cursor-pointer absolute top-6\"\n />\n ) : (\n <>\n <span\n className={`${\n column.isCenteredText &&\n \"h-[25px] flex flex-center\"\n } items-center ${\n column.tableHeaderFontSize\n ? column.tableHeaderFontSize\n : \"text-[12px]\"\n } font-semibold text-[#131414]`}\n >\n {column.name}\n </span>\n {column.sortable && (\n <span className=\"inline-block ml-2\">\n <svg\n width=\"8\"\n height=\"12\"\n viewBox=\"0 0 8 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M3.99994 1.88667L6.11328 4L7.05328 3.06L3.99994 0L0.939941 3.06L1.88661 4L3.99994 1.88667ZM3.99994 10.1133L1.88661 8L0.946608 8.94L3.99994 12L7.05994 8.94L6.11328 8L3.99994 10.1133Z\"\n fill=\"#323232\"\n />\n </svg>\n </span>\n )}\n </>\n )}\n </div>\n </th>\n ))}\n </tr>\n </thead>\n )}\n {!isLoading && (\n <tbody className=\"bg-white divide-y divide-gray-200\">\n {tableData.map((item, index) => {\n // Get custom row attributes if tableRow function is provided\n const rowProps = tableRow ? tableRow(item, index) : {};\n\n return (\n <tr\n key={index}\n {...rowProps}\n className={rowProps.className || \"\"}\n >\n {columns.map((column, columnIndex) => (\n <td\n key={column.selector}\n className={`px-1 py-[5px] whitespace-normal text-[12px] font-normal items-center text-[#131414] break-all ${\n columnIndex === 0 ? \"pl-[24px]\" : \"\"\n } ${\n columnIndex === columns.length - 1\n ? \"pr-[24px]\"\n : \"\"\n }\n ${\n index === tableData.length - 1\n ? \"\"\n : tableBodyDesign?.className ?? \"\"\n }\n `}\n style={{ width: column.width, minHeight: \"45px\" }}\n >\n {/* Render custom body content if provided, otherwise default to item property */}\n {tableBody\n ? tableBody(item, column, columnIndex)\n : item[column.selector as keyof TableData]}\n </td>\n ))}\n </tr>\n );\n })}\n </tbody>\n )}\n </table>\n }\n {(isError || tableData.length === 0) && !isLoading && (\n <div className=\"container mx-auto overflow-x-auto \">\n <NoDataComponent />\n </div>\n )}\n {isLoading && (\n <div\n className=\"container mx-auto overflow-x-auto \"\n style={{ borderColor: \"rgba(64, 98, 229, 0.2)\" }}\n >\n <div\n className={`flex justify-center items-center ${loadAndErrorHeight}`}\n >\n <div className=\"animate-spin rounded-full h-10 w-10 border-b-2 border-primary\"></div>\n </div>\n </div>\n )}\n {tableData &&\n tableData.length > 0 &&\n !isLoading &&\n !isSimpleMode && (\n <div\n ref={paginationRef}\n className=\"flex items-center justify-between px-4 py-3 bg-white border-b-1 rounded-bl-[8px]\"\n >\n <div className=\"flex items-center gap-2\">\n <Pagination\n totalPages={pagination.totalPage}\n currentPage={pagination.page}\n onPageChange={pagination.handlePageChange}\n pageRangeDisplayed={pagination.pageRangeDisplayed}\n />\n </div>\n\n <div className=\"flex items-center justify-center gap-2\">\n <span\n className=\"text-[12px] font-normal text-[#131414]\"\n style={{ marginTop: \"3px\" }}\n >\n Rows Per Page:\n </span>\n\n <div className=\"relative\">\n <select\n value={pagination.per_page}\n onChange={(e) =>\n pagination.handleRowsPerPageChange(\n Number(e.target.value)\n )\n }\n className=\"appearance-none border broder-1 rounded-[2px] gap-2px pr-[2px] pt-[1px] pl-[8px] h-[20px] w-[50px]\"\n style={{\n borderColor: \"#E0E1E6\",\n fontSize: \"12px\",\n }}\n >\n <option value={10}>10</option>\n <option value={20}>20</option>\n <option value={50}>50</option>\n <option value={100}>100</option>\n </select>\n <div className=\"absolute right-[5px] bottom-1/2 top-1/2 pt-[5px] transform -translate-y-1/2 w-3 h-3 text-gray-400 pointer-events-none\">\n <svg\n width=\"10\"\n height=\"5\"\n viewBox=\"0 0 10 5\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M0.833313 0.333496L4.99998 4.50016L9.16665 0.333496H0.833313Z\"\n fill=\"#131414\"\n />\n </svg>\n </div>\n </div>\n <div\n className=\"bg-[#B5BAC4] h-[16px] w-[1px] self-center\"\n style={{ marginTop: \"1px\" }}\n ></div>\n <span\n className=\"text-[12px] font-normal text-[#131414]\"\n style={{ marginTop: \"3px\" }}\n >\n {`${\n (pagination.page - 1) * pagination.per_page + 1\n } - ${Math.min(\n pagination.page * pagination.per_page,\n pagination.totalItems\n )} of ${pagination.totalItems}`}\n </span>\n </div>\n </div>\n )}\n </div>\n }\n <div\n className={`min-w-0 border-[#E2E2E2] flex-1 ${\n !hasAnotherScreen ? \"hidden\" : \"\"\n }`}\n style={{\n maxHeight: `${tableHeight <= 100 ? 540 : tableHeight}px`,\n minHeight: \"490px\",\n }}\n >\n {anotherScreenComponent ?? <div></div>}\n </div>\n </div>\n </div>\n );\n};\n\nexport default DynamicTableV2;\n","import { useEffect, useState } from \"react\";\nimport WarningImage from \"../assets/warning.png\";\ninterface ErrorToastProps {\n message?: string;\n onClose?: () => void;\n autoClose?: boolean;\n autoCloseDelay?: number;\n isVisible?: boolean;\n}\n\nconst ErrorToast = ({\n message = \"Request set as paid successfully!\",\n onClose,\n autoClose = false,\n autoCloseDelay = 125000,\n isVisible: externalIsVisible,\n}: ErrorToastProps) => {\n const [internalIsVisible, setInternalIsVisible] = useState(true);\n const [shouldRender, setShouldRender] = useState(true);\n const isVisible =\n externalIsVisible !== undefined ? externalIsVisible : internalIsVisible;\n\n useEffect(() => {\n if (!isVisible) {\n // Wait for fade-out transition to complete before unmounting\n const timeout = setTimeout(() => setShouldRender(false), 300);\n return () => clearTimeout(timeout);\n } else {\n setShouldRender(true); // Ensure it's rendered if visible\n }\n }, [isVisible]);\n\n useEffect(() => {\n if (autoClose && autoCloseDelay > 0 && isVisible) {\n const timer = setTimeout(() => {\n handleClose();\n }, autoCloseDelay);\n\n return () => clearTimeout(timer);\n }\n }, [autoClose, autoCloseDelay, isVisible]);\n\n const handleClose = () => {\n if (externalIsVisible === undefined) {\n setInternalIsVisible(false);\n }\n if (onClose) {\n onClose();\n }\n };\n\n if (!shouldRender) return null;\n\n return (\n <div\n className={`fixed top-[70px] right-0 transform z-50 transition-opacity duration-300 ${\n isVisible ? \"opacity-100\" : \"opacity-0\"\n }`}\n >\n <div className=\"flex justify-start items-center bg-[#FFE2E2] rounded-[6px] h-[48px] shadow-lg w-auto border-l-[6px] border-[#E7322C]\">\n <div className=\"w-[5px]\" />\n <img src={WarningImage} alt=\"warning\" height={18} width={18} />\n <p className=\"text-[#131414] pl-[8px] pr-[17px] font-semibold text-[14px]\">\n {message}\n </p>\n <button onClick={handleClose} aria-label=\"Close notification\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"17.5\"\n height=\"17.5\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n >\n <path\n d=\"M11.0837 3.739L10.2612 2.9165L7.00033 6.17734L3.73949 2.9165L2.91699 3.739L6.17783 6.99984L2.91699 10.2607L3.73949 11.0832L7.00033 7.82234L10.2612 11.0832L11.0837 10.2607L7.82283 6.99984L11.0837 3.739Z\"\n fill=\"#4B5563\"\n />\n </svg>\n </button>\n </div>\n </div>\n );\n};\n\nexport default ErrorToast;\n","import { useEffect, useState } from \"react\";\nimport CheckImage from \"../assets/check.png\";\ninterface SuccessToastProps {\n message?: string;\n onClose?: () => void;\n autoClose?: boolean;\n autoCloseDelay?: number;\n isVisible?: boolean;\n}\n\nconst SuccessToast = ({\n message = \"Request set as paid successfully!\",\n onClose,\n autoClose = false,\n autoCloseDelay = 125000,\n isVisible: externalIsVisible,\n}: SuccessToastProps) => {\n const [internalIsVisible, setInternalIsVisible] = useState(true);\n const [shouldRender, setShouldRender] = useState(true);\n const isVisible =\n externalIsVisible !== undefined ? externalIsVisible : internalIsVisible;\n\n useEffect(() => {\n if (!isVisible) {\n // Wait for fade-out transition to complete before unmounting\n const timeout = setTimeout(() => setShouldRender(false), 300);\n return () => clearTimeout(timeout);\n } else {\n setShouldRender(true); // Ensure it's rendered if visible\n }\n }, [isVisible]);\n\n useEffect(() => {\n if (autoClose && autoCloseDelay > 0 && isVisible) {\n const timer = setTimeout(() => {\n handleClose();\n }, autoCloseDelay);\n\n return () => clearTimeout(timer);\n }\n }, [autoClose, autoCloseDelay, isVisible]);\n\n const handleClose = () => {\n if (externalIsVisible === undefined) {\n setInternalIsVisible(false);\n }\n if (onClose) {\n onClose();\n }\n };\n\n if (!shouldRender) return null;\n\n return (\n <div\n className={`fixed top-[70px] right-0 transform z-50 transition-opacity duration-300 ${\n isVisible ? \"opacity-100\" : \"opacity-0\"\n }`}\n >\n <div className=\"flex justify-start items-center bg-[#C6F6D5] rounded-[6px] h-[48px] shadow-lg w-auto border-l-[6px] border-[#38A169]\">\n <div className=\"w-[5px]\" />\n <img src={CheckImage} alt=\"warning\" height={18} width={18} />\n <p className=\"text-[#131414] pl-[8px] pr-[17px] font-semibold text-[14px]\">\n {message}\n </p>\n <button onClick={handleClose} aria-label=\"Close notification\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"17.5\"\n height=\"17.5\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n >\n <path\n d=\"M11.0837 3.739L10.2612 2.9165L7.00033 6.17734L3.73949 2.9165L2.91699 3.739L6.17783 6.99984L2.91699 10.2607L3.73949 11.0832L7.00033 7.82234L10.2612 11.0832L11.0837 10.2607L7.82283 6.99984L11.0837 3.739Z\"\n fill=\"#4B5563\"\n />\n </svg>\n </button>\n </div>\n </div>\n );\n};\n\nexport default SuccessToast;\n","import { twMerge } from \"tailwind-merge\";\n\nexport type NavBarProps = {\n children?: React.ReactNode;\n wrapperClassName?: string;\n innerClassName?: string;\n} & React.HTMLAttributes<HTMLElement>; // allow props like onClick, id, aria-*\n\nconst NavBar = ({\n children,\n wrapperClassName,\n innerClassName,\n ...rest\n}: NavBarProps) => {\n return (\n <nav\n {...rest}\n className={twMerge(\n \"z-20 w-full px-4 shadow-navbar bg-white h-[80px]\",\n wrapperClassName\n )}\n >\n <div\n className={twMerge(\n \"h-[80px] flex justify-between items-center gap-2 px-4 py-1\",\n innerClassName\n )}\n >\n {children}\n </div>\n </nav>\n );\n};\n\nexport default NavBar;\n","import { twMerge } from \"tailwind-merge\";\n\ntype ModalProps = {\n isOpen: boolean;\n type?: \"left\" | \"right\" | \"center\";\n onClose?: () => void;\n widthClassName?: string;\n children?: React.ReactNode;\n overlayClassName?: string;\n modalClassName?: string;\n stayMounted?: boolean;\n};\n\nconst Modal = ({\n isOpen,\n type = \"right\",\n onClose,\n widthClassName = \"w-[300px]\",\n children,\n overlayClassName,\n modalClassName,\n stayMounted = false,\n}: ModalProps) => {\n if (!stayMounted && !isOpen) return null;\n\n let positionClasses = \"\";\n if (type === \"left\") {\n positionClasses = \"left-0 top-0 h-full\";\n } else if (type === \"right\") {\n positionClasses = \"right-0 top-0 h-full\";\n } else if (type === \"center\") {\n positionClasses =\n \"top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2\";\n }\n\n return (\n <>\n <div\n className={twMerge(\n \"fixed inset-0 bg-black bg-opacity-50 z-40\",\n stayMounted ? (isOpen ? \"block\" : \"hidden\") : \"block\",\n overlayClassName\n )}\n onClick={onClose}\n aria-hidden={!isOpen}\n />\n\n <div\n className={twMerge(\n `fixed bg-white shadow-xl z-50 transform transition-transform duration-300 ease-in-out ${positionClasses}`,\n stayMounted ? (isOpen ? \"block\" : \"hidden\") : \"block\",\n widthClassName,\n modalClassName\n )}\n role=\"dialog\"\n aria-modal=\"true\"\n >\n {children}\n </div>\n </>\n );\n};\n\nexport default Modal;\n","import { twMerge } from \"tailwind-merge\";\n\ntype PopupWrapperProps = {\n children?: React.ReactNode;\n className?: string;\n isOpen: boolean;\n stayMounted?: boolean;\n} & React.HTMLAttributes<HTMLElement>;\n\nconst PopupWrapper = ({\n children,\n className,\n isOpen = false,\n stayMounted = false,\n ...rest\n}: PopupWrapperProps) => {\n if (!stayMounted && !isOpen) return null;\n\n return (\n <div\n {...rest}\n className={twMerge(\n \"absolute right-0 top-1 mt-10 shadow-lg bg-white rounded-lg p-4 w-80 z-10 border border-opacity-10\",\n isOpen ? \"block\" : \"hidden\",\n className\n )}\n >\n {children}\n </div>\n );\n};\n\nexport default PopupWrapper;\n","import { twMerge } from \"tailwind-merge\";\n\nexport type LayoutProps = {\n children: React.ReactNode;\n wrapperClassName?: string;\n navClassName?: string;\n navProps?: React.HTMLAttributes<HTMLElement>;\n} & React.HTMLAttributes<HTMLDivElement>;\n\nconst SideNav = ({\n children,\n wrapperClassName,\n navClassName,\n navProps,\n ...rest\n}: LayoutProps) => {\n return (\n <div\n {...rest}\n className={twMerge(\n \"bg-base min-w-[260px] shadow-sidebar relative sm:flex flex-col justify-between h-screen max-h-screen\",\n wrapperClassName\n )}\n >\n <nav\n {...navProps}\n className={twMerge(\n \"relative flex flex-col w-full gap-1 px-4 pt-4\",\n navClassName,\n navProps?.className\n )}\n >\n {children}\n </nav>\n </div>\n );\n};\n\nexport default SideNav;\n","import React from \"react\";\nimport { twMerge } from \"tailwind-merge\";\n\ninterface BoxProps extends React.HTMLAttributes<HTMLDivElement> {\n className?: string;\n children?: React.ReactNode;\n}\n\nconst Box: React.FC<BoxProps> = ({ className = \"\", children, ...rest }) => {\n return (\n <div\n {...rest}\n className={twMerge(\n \"border border-[1px] border-[#C4CFF6] rounded-[8px] min-h-[10px] bg-white\",\n className\n )}\n >\n {children}\n </div>\n );\n};\n\nexport default Box;\n","import React from \"react\";\nimport { twMerge } from \"tailwind-merge\";\n\ninterface BoxHeaderProps extends React.HTMLAttributes<HTMLDivElement> {\n className?: string;\n children?: React.ReactNode;\n}\n\nconst BoxHeader: React.FC<BoxHeaderProps> = ({\n className = \"\",\n children,\n ...rest\n}) => {\n return (\n <div\n {...rest}\n className={twMerge(\n \"h-[40px] w-full bg-[#F5F7FE] px-2 flex items-center border-b border-[#C4CFF6] rounded-tr-[8px] rounded-tl-[8px]\",\n className\n )}\n >\n {children}\n </div>\n );\n};\n\nexport default BoxHeader;\n","import React from \"react\";\nimport { twMerge } from \"tailwind-merge\";\n\ninterface BoxBodyProps extends React.HTMLAttributes<HTMLDivElement> {\n className?: string;\n children?: React.ReactNode;\n}\n\nconst BoxBody: React.FC<BoxBodyProps> = ({\n className = \"\",\n children,\n ...rest\n}) => {\n return (\n <div\n {...rest}\n className={twMerge(\n \"bg-white p-2 min-h-[20px] rounded-br-[8px] rounded-bl-[8px]\",\n className\n )}\n >\n {children}\n </div>\n );\n};\n\nexport default BoxBody;\n"],"mappings":"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","names":["import_tailwind_merge","import_jsx_runtime","import_tailwind_merge","import_jsx_runtime","import_tailwind_merge","import_tailwind_merge","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","ChartJS","label","import_tailwind_merge","import_jsx_runtime","import_jsx_runtime","import_react","import_tailwind_merge","import_tailwind_merge","import_jsx_runtime","import_tailwind_merge","import_jsx_runtime","import_jsx_runtime","React","import_tailwind_merge","import_jsx_runtime","import_chart","import_react","import_react_chartjs_2","import_tailwind_merge","import_jsx_runtime","ChartJS","import_chart","import_react","import_react_chartjs_2","import_tailwind_merge","import_jsx_runtime","ChartJS","label","import_tailwind_merge","import_jsx_runtime","import_react","import_tailwind_merge","import_jsx_runtime","isValid","earliestDate","className","import_react","import_tailwind_merge","import_jsx_runtime","_a","import_tailwind_merge","import_jsx_runtime","import_react","import_tailwind_merge","import_jsx_runtime","import_tailwind_merge","import_jsx_runtime","import_tailwind_merge","import_jsx_runtime","DatePicker","import_date_fns","import_react_datepicker","import_tailwind_merge","import_jsx_runtime","DatePicker","import_jsx_runtime","ReactPaginate","import_tailwind_merge","import_jsx_runtime","import_jsx_runtime","import_react","import_tailwind_merge","import_jsx_runtime","_a","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_tailwind_merge","import_jsx_runtime","import_tailwind_merge","import_jsx_runtime","import_tailwind_merge","import_jsx_runtime","import_tailwind_merge","import_jsx_runtime","import_tailwind_merge","import_jsx_runtime","import_tailwind_merge","import_jsx_runtime","import_tailwind_merge","import_jsx_runtime"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/components/button/PlainButton.tsx","../src/components/button/CollapseButton.tsx","../src/components/button/Button.tsx","../src/components/cards/GraphedCard.tsx","../src/components/cards/components/ErrorGraphContet.tsx","../src/components/assets/RefreshIcon.tsx","../src/components/cards/components/LineChart.tsx","../src/components/cards/components/LoaderGraphContent.tsx","../src/components/cards/SimpleCard.tsx","../src/components/cards/components/ErrorContent.tsx","../src/components/cards/components/LoaderContent.tsx","../src/components/common/Label.tsx","../src/components/graph/MultiLineGraph.tsx","../src/components/graph/SingleLineGraph.tsx","../src/components/inputs/CommonInput.tsx","../src/components/inputs/DateRange.tsx","../src/utility/daterange.tsx","../src/components/inputs/MultipleAutoSuggestionInput.tsx","../src/components/inputs/SingleListInput.tsx","../src/components/inputs/SingleSelectDropdown.tsx","../src/components/inputs/SelectionButton.tsx","../src/components/inputs/SingleDateInput.tsx","../src/components/inputs/TimeInput.tsx","../src/components/table/Pagination.tsx","../src/components/table/TableHeader.tsx","../src/components/table/DynamicTable.tsx","../src/components/table/DynamicTableV2.tsx","../src/components/toast/ErrorToast.tsx","../src/components/toast/SuccessToast.tsx","../src/components/wrappers/NavBar.tsx","../src/components/wrappers/Modal.tsx","../src/components/wrappers/PopupWrapper.tsx","../src/components/wrappers/SideNav.tsx","../src/components/wrappers/Box.tsx","../src/components/wrappers/BoxHeaders.tsx","../src/components/wrappers/BoxBody.tsx"],"sourcesContent":["export * from \"./components/button\";\nexport * from \"./components/cards\";\nexport * from \"./components/common\";\nexport * from \"./components/graph\";\nexport * from \"./components/inputs\";\nexport * from \"./components/table\";\nexport * from \"./components/toast\";\nexport * from \"./components/wrappers\";\nexport * from \"./utility\";\n","import { twMerge } from \"tailwind-merge\";\n\ninterface PlainButtonProps extends React.HTMLAttributes<HTMLDivElement> {\n className?: string;\n children?: React.ReactNode;\n}\nconst PlainButton = ({ className, children, ...rest }: PlainButtonProps) => {\n return (\n <div\n {...rest}\n className={twMerge(\n \"min-h-[26px] w-[50px] bg-white text-center rounded-[4px] flex items-center justify-center border border-[#E2E2E2] text-black cursor-pointer\",\n className\n )}\n >\n {children}\n </div>\n );\n};\n\nexport default PlainButton;\n","import { twMerge } from \"tailwind-merge\";\n\ninterface Props extends React.HTMLAttributes<HTMLDivElement> {\n isOpen: boolean;\n mainClass?: string;\n paragraphClass?: string;\n paragraphContent: string;\n title: string;\n titleClass?: string;\n}\nconst CollapseButton = ({\n isOpen,\n mainClass,\n paragraphClass,\n paragraphContent,\n title,\n titleClass,\n ...rest\n}: Props) => {\n return (\n <div\n className={twMerge(\n \"min-h-[40px] w-full px-[16px] py-[8px] bg-white border border-[#E2E2E2] rounded-[4px]\",\n mainClass\n )}\n >\n {/* Header */}\n <div\n {...rest}\n className=\"flex justify-between items-center cursor-pointer\"\n >\n <p\n className={twMerge(\n \"font-semibold text-[14px] transition-colors duration-300\",\n isOpen ? \"text-[#4062E5]\" : \"text-[#000]\",\n titleClass\n )}\n >\n {title}\n </p>\n <svg\n className={twMerge(\n \"transition-transform duration-300\",\n !isOpen && \"rotate-180\"\n )}\n width=\"10\"\n height=\"5\"\n viewBox=\"0 0 10 5\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M0 5L5 0L10 5H0Z\" fill=\"#757575\" />\n </svg>\n </div>\n\n <div\n className={twMerge(\n `overflow-hidden transition-all duration-300 ease-in-out`,\n isOpen ? \"max-h-40 opacity-100 mt-1\" : \"max-h-0 opacity-0 mt-0\"\n )}\n >\n <p className={twMerge(\"font-normal text-[14px]\", paragraphClass)}>\n {paragraphContent}\n </p>\n </div>\n </div>\n );\n};\n\nexport default CollapseButton;\n","import { twMerge } from \"tailwind-merge\";\n\ninterface ButtonProps extends React.HTMLAttributes<HTMLDivElement> {\n className?: string;\n children?: React.ReactNode;\n}\nconst Button = ({ className, children, ...rest }: ButtonProps) => {\n return (\n <div\n {...rest}\n className={twMerge(\n \"min-h-[26px] w-[50px] bg-[#4683B4] text-center flex items-center justify-center rounded-[4px] text-white cursor-pointer\",\n className\n )}\n >\n {children}\n </div>\n );\n};\n\nexport default Button;\n","import { twMerge } from \"tailwind-merge\";\nimport InfoIcon from \"../assets/info.svg\";\nimport ErrorGraphContent from \"./components/ErrorGraphContet\";\nimport LineChart from \"./components/LineChart\";\nimport LoaderGraphContent from \"./components/LoaderGraphContent\";\ninterface GraphedCardProps {\n className?: string;\n title: string;\n tooltip_text: string;\n subText?: string;\n value: string;\n unit?: string;\n image?: React.ReactNode;\n lineData: number[];\n lineLabel: string[];\n gradientColor0?: string;\n gradientColor1?: string;\n pointLabelColor?: string;\n labelPopupTitle?: string;\n isCustomTitle?: boolean;\n customTitle?: React.ReactNode;\n lineColor?: string;\n isLoading: boolean;\n isError: boolean;\n handleRefresh?: () => void;\n}\n\nconst GraphedCard = ({\n className,\n title,\n value,\n subText = \"\",\n unit = \"\",\n tooltip_text,\n image,\n gradientColor0,\n gradientColor1,\n pointLabelColor,\n labelPopupTitle,\n lineData,\n lineLabel,\n isCustomTitle = false,\n customTitle,\n lineColor,\n isLoading,\n isError,\n handleRefresh,\n}: GraphedCardProps) => {\n if (isLoading) {\n return <LoaderGraphContent className={className} />;\n }\n\n if (isError) {\n return (\n <ErrorGraphContent\n handleRefresh={handleRefresh}\n image={image}\n tooltip_text={tooltip_text}\n title={title}\n className={className}\n />\n );\n }\n return (\n <div\n className={twMerge(\n \"bg-white rounded-[6px] px-[8px] py-[9px] pl-[12px] w-full flex h-[180px] min-w-[210px] justify-between border border-1\",\n className\n )}\n style={{\n borderColor: \"#E2E2E2\",\n boxShadow: \"0px 12px 26px 0px #101E730F\",\n }}\n >\n <div className=\"flex-1 flex flex-col justify-between\">\n <div className=\"flex justify-between relative\">\n <div className={`flex-1 flex flex-col justify-between gap-1`}>\n <div className=\"flex items-center relative\">\n <h3\n className=\"text-content-2 font-semibold flex\"\n style={{ fontSize: \"12px\" }}\n >\n {isCustomTitle ? (\n customTitle\n ) : (\n <span\n className=\"font-medium\"\n style={{ letterSpacing: \"0.5px\" }}\n >\n {title}\n </span>\n )}\n <span\n className=\"cursor-pointer text-gray-400 relative group\"\n style={{ top: \"0.5px\", left: \"2px\" }}\n >\n <img\n src={InfoIcon}\n alt=\"Info\"\n width={12}\n height={12}\n className=\"pt-[1px]\"\n />\n <div\n className=\"absolute top-6 left-1/2 transform -translate-x-1/2 z-10 hidden rounded-md bg-black text-white text-xs p-2 shadow-md group-hover:block text-center\"\n style={{ width: \"170px\" }}\n >\n {tooltip_text}\n <div className=\"absolute left-1/2 -top-1 transform -translate-x-1/2 w-3 h-3 bg-black rotate-45\"></div>\n </div>\n </span>\n </h3>\n </div>\n <div className={`flex-grow items-center`}>\n <span className=\"text-[24px] font-semibold text-gray-900\">\n {subText == \"$\" ? \"$\" : \"\"}\n {value.trim()}\n {subText == \"$\" ? \"\" : subText}\n </span>\n <span className=\"text-gray-500 ml-2\">{unit}</span>\n </div>\n </div>\n\n <div className=\"ml-4\">{image}</div>\n <div className=\"absolute w-full h-full top-16\">\n <LineChart\n data={lineData}\n label={lineLabel}\n lineColor={lineColor}\n gradientColor0={gradientColor0}\n gradientColor1={gradientColor1}\n pointLabelColor={pointLabelColor}\n labelPopupTitle={labelPopupTitle}\n />\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default GraphedCard;\n","import { twMerge } from \"tailwind-merge\";\nimport InfoIcon from \"../../assets/info.svg\";\nimport RefreshIcon from \"../../assets/RefreshIcon\";\ninterface Props {\n title: string;\n tooltip_text: string;\n image?: React.ReactNode;\n handleRefresh?: () => void;\n className?: string;\n}\nconst ErrorGraphContent = ({\n className,\n title,\n tooltip_text,\n image,\n handleRefresh,\n}: Props) => {\n return (\n <div\n className={twMerge(\n \"bg-white rounded-[6px] px-[8px] py-[9px] pl-[12px] h-[180px] w-full border border-1\",\n className\n )}\n style={{ borderColor: \"#E2E2E2\" }}\n >\n <div className=\"flex justify-between relative\">\n <div className=\"flex-1 flex flex-col justify-between\">\n <div className=\"flex items-center relative\">\n <h3\n className=\"text-content-2 font-semibold flex\"\n style={{ fontSize: \"12px\" }}\n >\n <span className=\"font-medium\" style={{ letterSpacing: \"0.5px\" }}>\n {title}\n </span>\n\n <span\n className=\"cursor-pointer text-gray-400 relative group\"\n style={{ top: \"0.5px\", left: \"2px\" }}\n >\n <img\n src={InfoIcon}\n alt=\"Info\"\n width={12}\n height={12}\n className=\"pt-[1px]\"\n />\n <div\n className=\"absolute top-6 left-1/2 transform -translate-x-1/2 z-10 hidden rounded-md bg-black text-white text-xs p-2 shadow-md group-hover:block text-center\"\n style={{ width: \"170px\" }}\n >\n {tooltip_text}\n <div className=\"absolute left-1/2 -top-1 transform -translate-x-1/2 w-3 h-3 bg-black rotate-45\"></div>\n </div>\n </span>\n </h3>\n </div>\n <div\n className=\"flex justify-center mt-3 w-[53px] h-[16px] cursor-pointer\"\n onClick={handleRefresh}\n >\n <div className=\"flex gap-1 items-center\">\n <RefreshIcon height=\"16px\" width=\"16px\" color=\"#4062E5\" />\n <p className=\"text-[#4062E5] text-[10px]\">Refresh</p>\n </div>\n </div>\n </div>\n\n <div className=\"ml-4\">{image}</div>\n <div className=\"absolute w-full h-full top-[70px]\">\n <div className=\"h-[90px] bg-gray-300 rounded w-full animate-pulse\"></div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default ErrorGraphContent;\n","const RefreshIcon = ({ height = \"24px\", width = \"24px\", color = \"#000\" }) => (\n <svg\n fill={color}\n width={width}\n height={height}\n viewBox=\"0 0 32 32\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M27.1 14.313V5.396L24.158 8.34c-2.33-2.325-5.033-3.503-8.11-3.503C9.902 4.837 4.901 9.847 4.899 16c.001 6.152 5.003 11.158 11.15 11.16 4.276 0 9.369-2.227 10.836-8.478l.028-.122h-3.23l-.022.068c-1.078 3.242-4.138 5.421-7.613 5.421a8 8 0 0 1-5.691-2.359A7.993 7.993 0 0 1 8 16.001c0-4.438 3.611-8.049 8.05-8.049 2.069 0 3.638.58 5.924 2.573l-3.792 3.789H27.1z\" />\n </svg>\n);\n\nexport default RefreshIcon;\n","import {\n CategoryScale,\n Chart as ChartJS,\n Filler,\n Legend,\n LinearScale,\n LineElement,\n PointElement,\n Title,\n Tooltip,\n} from \"chart.js\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { Line } from \"react-chartjs-2\";\n\ninterface LineChartProps {\n data: number[];\n label: string[];\n gradientColor0?: string;\n gradientColor1?: string;\n pointLabelColor?: string;\n labelPopupTitle?: string;\n lineColor?: string;\n}\nChartJS.register(\n CategoryScale,\n LinearScale,\n PointElement,\n LineElement,\n Title,\n Tooltip,\n Filler,\n Legend\n);\n\nconst LineChart = ({\n data,\n label,\n lineColor = \"#17CA43\",\n gradientColor1 = \"rgba(23, 202, 67, 0.5)\",\n gradientColor0 = \"rgba(23, 202, 67, 0)\",\n pointLabelColor = \"#4062E5\",\n labelPopupTitle = \"Requests Completed\",\n}: LineChartProps) => {\n const chartRef = useRef(null);\n const [chartKey, setChartKey] = useState(`chart-${Date.now()}`);\n\n // Force chart to re-render when window resizes\n useEffect(() => {\n const handleResize = () => {\n setChartKey(`chart-${Date.now()}`);\n };\n\n window.addEventListener(\"resize\", handleResize);\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n };\n }, []);\n\n const months = label;\n\n const values = data;\n\n const options = useMemo(\n () => ({\n responsive: true,\n maintainAspectRatio: false,\n animation: {\n duration: 100,\n easing: \"easeOutQuad\" as const,\n },\n layout: {\n padding: {},\n },\n scales: {\n x: {\n display: false,\n grid: {\n drawBorder: false,\n drawTicks: false,\n drawOnChartArea: false,\n },\n },\n y: {\n display: false,\n grid: {\n drawBorder: false,\n drawTicks: false,\n drawOnChartArea: false,\n },\n },\n },\n\n plugins: {\n legend: { display: false },\n tooltip: {\n enabled: false,\n external: function (context: any) {\n let tooltipEl = document.getElementById(\"chartjs-tooltip\");\n if (!tooltipEl) {\n tooltipEl = document.createElement(\"div\");\n tooltipEl.id = \"chartjs-tooltip\";\n tooltipEl.innerHTML = \"<div></div>\";\n document.body.appendChild(tooltipEl);\n }\n\n const tooltipModel = context.tooltip;\n context.chart.canvas.style.cursor =\n tooltipModel.opacity === 0 ? \"default\" : \"pointer\";\n if (tooltipModel.opacity === 0) {\n tooltipEl.style.opacity = \"0\";\n return;\n }\n\n const dataPoint = tooltipModel.dataPoints?.[0];\n const value = dataPoint?.parsed.y;\n const label = dataPoint?.label;\n const arrowSize = 8;\n const position = context.chart.canvas.getBoundingClientRect();\n tooltipEl.style.position = \"absolute\";\n tooltipEl.style.left = \"0px\";\n tooltipEl.style.top = \"0px\";\n tooltipEl.style.opacity = \"1\";\n tooltipEl.style.pointerEvents = \"none\";\n tooltipEl.innerHTML = `\n <div style=\"position: relative;height: 57px; background:white; border:1px solid rgba(16, 30, 115, 0.1); padding:10px; border-radius:4px; font-size:12px; color:#333; display:flex; align-items:center; gap:10px;\">\n <div>\n <p style=\"color:#757575;\"><strong>${label}</strong></p>\n <span style=\"display: inline-flex; align-items: center; font-weight: bold; color: #757575;\">\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 9 10\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M0.416687 3.36663H2.16669V9.08329H0.416687V3.36663ZM3.68335 0.916626H5.31669V9.08329H3.68335V0.916626ZM6.95002 5.58329H8.58335V9.08329H6.95002V5.58329Z\" fill=\"#4683B4\"/>\n </svg> \n ${labelPopupTitle}: <span style=\"color:#757575;\"> ${value}</span>\n </span> \n </div>\n </div>\n `;\n\n const tooltipWidth = tooltipEl.offsetWidth;\n const tooltipHeight = tooltipEl.offsetHeight;\n const pointX =\n position.left + window.pageXOffset + tooltipModel.caretX;\n const pointY =\n position.top + window.pageYOffset + tooltipModel.caretY;\n const windowWidth = window.innerWidth;\n const tooltipLeftEdge = pointX - tooltipWidth / 2;\n const tooltipRightEdge = pointX + tooltipWidth / 2;\n let arrowLeftPercent = 50;\n let xAdjustment = 0;\n if (tooltipLeftEdge < 10) {\n xAdjustment = 10 - tooltipLeftEdge;\n } else if (tooltipRightEdge > windowWidth - 10) {\n xAdjustment = windowWidth - 10 - tooltipRightEdge;\n }\n\n const xPosition = tooltipLeftEdge + xAdjustment;\n const yPosition = pointY - tooltipHeight - arrowSize - 5;\n arrowLeftPercent = ((pointX - xPosition) / tooltipWidth) * 100;\n arrowLeftPercent = Math.max(10, Math.min(90, arrowLeftPercent));\n\n const outerArrowSize = 6;\n const innerArrowSize = 5;\n\n const innerHtml = `\n <div style=\"position: relative; background: white; border: 1px solid rgba(16, 30, 115, 0.1); padding: 10px; border-radius: 4px; font-size: 12px; color: #333; display: flex; align-items: center; gap: 10px;\">\n\n <!-- Outer arrow (border color) -->\n <div style=\"\n position: absolute;\n top: 100%;\n left: ${arrowLeftPercent}%;\n transform: translateX(-50%);\n width: 0;\n height: 0;\n border-left: ${outerArrowSize}px solid transparent;\n border-right: ${outerArrowSize}px solid transparent;\n border-top: ${outerArrowSize}px solid rgba(16, 30, 115, 0.1);\n \"></div>\n\n <!-- Inner arrow (white background) -->\n <div style=\"\n position: absolute;\n top: 100%;\n left: ${arrowLeftPercent}%;\n transform: translateX(-50%) translateY(-1px);\n width: 0;\n height: 0;\n border-left: ${innerArrowSize}px solid transparent;\n border-right: ${innerArrowSize}px solid transparent;\n border-top: ${innerArrowSize}px solid white;\n \"></div>\n\n <div>\n <p style=\"color:#757575;\"><strong>${label}</strong></p>\n <span style=\"display: inline-flex; align-items: center; font-weight: bold; color: #757575;\">\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 9 10\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M0.416687 3.36663H2.16669V9.08329H0.416687V3.36663ZM3.68335 0.916626H5.31669V9.08329H3.68335V0.916626ZM6.95002 5.58329H8.58335V9.08329H6.95002V5.58329Z\" fill=\"#4683B4\"/>\n </svg> \n ${labelPopupTitle}: <span style=\"color:#131414;\"> ${value}</span>\n </span> \n </div>\n </div>\n `;\n\n tooltipEl.innerHTML = innerHtml;\n tooltipEl.style.left = xPosition + \"px\";\n tooltipEl.style.top = yPosition + \"px\";\n },\n },\n },\n interaction: {\n intersect: false,\n mode: \"index\" as const,\n },\n elements: {\n line: { tension: 0.5 },\n point: {\n radius: 0,\n hoverRadius: 6,\n backgroundColor: \"#17CA43\",\n borderColor: \"white\",\n borderWidth: 2,\n pointHoverBorderWidth: 3,\n pointHoverRadius: 5,\n },\n },\n }),\n []\n );\n\n const verticalHoverLine = useMemo(\n () => ({\n id: \"verticalLine\",\n afterDraw: (chart: any) => {\n const tooltip = chart.tooltip;\n if (tooltip?._active?.length) {\n const activePoint = chart.tooltip._active[0];\n const ctx = chart.ctx;\n const x = activePoint.element.x;\n const topY = chart.scales.y.top;\n const bottomY = chart.scales.y.bottom;\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(x, topY);\n ctx.lineTo(x, bottomY);\n ctx.lineWidth = 0.5;\n ctx.strokeStyle = \"#4062E5\";\n ctx.setLineDash([5, 5]);\n ctx.stroke();\n ctx.restore();\n }\n },\n }),\n []\n );\n\n const lineData = useMemo(\n () => ({\n labels: months,\n datasets: [\n {\n label: labelPopupTitle,\n data: values,\n borderColor: lineColor,\n backgroundColor: (context: any) => {\n if (!context.chart.chartArea) return \"rgba(23, 202, 67, 0.5)\";\n const { ctx, chartArea } = context.chart;\n const gradient = ctx.createLinearGradient(\n 0,\n chartArea.bottom,\n 0,\n chartArea.top\n );\n gradient.addColorStop(0, gradientColor0);\n gradient.addColorStop(1, gradientColor1);\n return gradient;\n },\n fill: true,\n pointBackgroundColor: \"#ffffff\",\n pointBorderColor: pointLabelColor,\n },\n ],\n }),\n [months, values]\n );\n\n return (\n <div style={{ width: \"100%\", height: \"100px\" }}>\n <Line\n ref={chartRef}\n key={chartKey}\n options={options}\n data={lineData}\n plugins={[verticalHoverLine]}\n />\n </div>\n );\n};\nexport default LineChart;\n","import { twMerge } from \"tailwind-merge\";\n\ninterface Props {\n className?: string;\n}\nconst LoaderGraphContent = ({ className }: Props) => {\n return (\n <div\n className={twMerge(\n \"bg-white rounded-[6px] px-[8px] py-[9px] pl-[12px] h-[180px] w-full border border-1\",\n className\n )}\n style={{ borderColor: \"#E2E2E2\" }}\n >\n <div className=\"flex justify-between relative\">\n <div className=\"flex-1 flex flex-col justify-between relative\">\n <div className=\"flex items-center relative\">\n <div className=\"h-4 bg-gray-300 rounded w-1/2 animate-pulse\"></div>\n <div className=\"ml-1 mt-1 h-3 w-3 bg-gray-300 rounded-full animate-pulse\"></div>\n </div>\n <div className=\"mt-3 flex items-baseline\">\n <div className=\"h-6 bg-gray-300 rounded w-1/4 animate-pulse\"></div>\n </div>\n </div>\n\n <div className=\"ml-4 h-10 w-10 bg-gray-300 rounded-full animate-pulse\"></div>\n <div className=\"absolute w-full h-full top-[70px]\">\n <div className=\"h-[90px] bg-gray-300 rounded w-full animate-pulse\"></div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default LoaderGraphContent;\n","\"use client\";\n\nimport React from \"react\";\nimport { twMerge } from \"tailwind-merge\";\nimport InfoIcon from \"../assets/info.svg\";\nimport ErrorContent from \"./components/ErrorContent\";\nimport LoaderComponent from \"./components/LoaderContent\";\n\ninterface SimpleCardProps {\n title: string;\n value: string;\n unit?: string;\n tooltip_text: string;\n subText?: string;\n footerText?: string;\n hasDaysOption?: boolean;\n hasTillDateDayOption?: boolean;\n onDayChange?: (days: string) => void;\n image?: React.ReactNode;\n hasfooterDesign?: boolean;\n footerDesign?: React.ReactNode;\n className?: string;\n isLoading: boolean;\n isError: boolean;\n handleRefresh?: () => void;\n isCustomTitle?: boolean;\n customTitle?: React.ReactNode;\n}\n\nconst SimpleCard = ({\n title,\n value,\n image,\n unit = \"\",\n tooltip_text,\n subText = \"\",\n footerText = \"\",\n hasfooterDesign = false,\n footerDesign,\n hasDaysOption = false,\n hasTillDateDayOption = false,\n onDayChange,\n className,\n handleRefresh,\n isLoading,\n isError,\n isCustomTitle = false,\n customTitle,\n}: SimpleCardProps) => {\n const [selectedDay, setSelectedDay] = React.useState<string>(\"90\");\n const handleDayClick = (label: string) => {\n setSelectedDay(label);\n if (onDayChange) onDayChange(label);\n };\n\n const options = React.useMemo(() => {\n const baseOptions = [\"90\", \"30\", \"7\"];\n if (hasTillDateDayOption) {\n return [...baseOptions, \"till date\"];\n }\n return baseOptions;\n }, [hasTillDateDayOption]);\n\n if (isLoading) {\n return <LoaderComponent className={className} />;\n }\n\n if (isError) {\n return (\n <ErrorContent\n handleRefresh={handleRefresh}\n image={image}\n tooltip_text={tooltip_text}\n title={title}\n className={className}\n />\n );\n }\n\n const renderDayOption = (label: string) => {\n const isSelected = selectedDay === label;\n return (\n <span\n key={label}\n className={`cursor-pointer ${\n isSelected\n ? \"text-[#4683B4] font-semibold\"\n : \"text-[#757575] font-normal\"\n }`}\n style={{ letterSpacing: \"0.5px\", lineHeight: 1 }}\n onClick={() => handleDayClick(label)}\n >\n {label} {label !== \"till date\" && \"days\"}\n </span>\n );\n };\n\n return (\n <div\n className={twMerge(\n \"bg-white rounded-[6px] px-[8px] py-[9px] pl-[12px] w-full flex min-h-[100px] min-w-[210px] justify-between border border-1\",\n className\n )}\n style={{\n borderColor: \"#E2E2E2\",\n boxShadow: \"0px 12px 26px 0px #101E730F\",\n }}\n >\n <div className=\"flex-1 flex flex-col justify-between\">\n <div className=\"flex justify-between\">\n <div className={`flex-1 flex flex-col justify-between gap-1`}>\n <div className=\"flex items-center relative\">\n <h3\n className=\"text-content-2 font-semibold flex\"\n style={{ fontSize: \"12px\" }}\n >\n {isCustomTitle ? (\n customTitle\n ) : (\n <span\n className=\"font-medium\"\n style={{ letterSpacing: \"0.5px\" }}\n >\n {title}\n </span>\n )}\n <span\n className=\"cursor-pointer text-gray-400 relative group\"\n style={{ top: \"0.5px\", left: \"2px\" }}\n >\n <img\n src={InfoIcon}\n alt=\"Info\"\n width={12}\n height={12}\n className=\"pt-[1px]\"\n />\n <div\n className=\"absolute top-6 left-1/2 transform -translate-x-1/2 z-10 hidden rounded-md bg-black text-white text-xs p-2 shadow-md group-hover:block text-center\"\n style={{ width: \"170px\" }}\n >\n {tooltip_text}\n <div className=\"absolute left-1/2 -top-1 transform -translate-x-1/2 w-3 h-3 bg-black rotate-45\"></div>\n </div>\n </span>\n </h3>\n </div>\n <div className={`flex-grow items-center`}>\n <span className=\"text-[24px] font-semibold text-gray-900\">\n {subText == \"$\" ? \"$\" : \"\"}\n {value.trim()}\n {subText == \"$\" ? \"\" : subText}\n </span>\n <span className=\"text-gray-500 ml-2\">{unit}</span>\n </div>\n </div>\n <div className=\"ml-4\">{image}</div>\n </div>\n <div className=\"flex items-center gap-2\">\n {hasfooterDesign && footerDesign}\n {!hasDaysOption && (\n <span\n className=\"text-[12px] font-normal\"\n style={{\n color: \"#757575\",\n letterSpacing: \"0.5px\",\n lineHeight: 1,\n }}\n >\n {footerText}\n </span>\n )}\n </div>\n {hasDaysOption && (\n <div className=\"flex gap-[4px] text-[12px] font-normal text-center items-center\">\n {options.map((label, index, array) => (\n <React.Fragment key={label}>\n {renderDayOption(label)}\n {index < array.length - 1 && (\n <p className=\"text-[#757575]\">|</p>\n )}\n </React.Fragment>\n ))}\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default SimpleCard;\n","import React from \"react\";\nimport { twMerge } from \"tailwind-merge\";\nimport RefreshIcon from \"../../assets/RefreshIcon\";\nimport InfoIcon from \"../../assets/info.svg\";\ninterface ErrorContentProps {\n title: string;\n tooltip_text: string;\n image?: React.ReactNode;\n handleRefresh?: () => void;\n className?: string;\n}\nconst ErrorContent = ({\n title,\n tooltip_text,\n image,\n handleRefresh,\n className,\n}: ErrorContentProps) => {\n return (\n <div\n className={twMerge(\n \"bg-white rounded-[6px] px-[8px] py-[9px] min-h-[100px] w-full flex justify-between border border-1\",\n className\n )}\n style={{ borderColor: \"#E2E2E2\" }}\n >\n <div className=\"flex-1 flex flex-col justify-between\">\n <div className=\"flex items-center relative\">\n <div className=\"flex items-center relative\">\n <h3\n className=\"text-content-2 font-semibold flex\"\n style={{ fontSize: \"12px\" }}\n >\n <span className=\"font-medium\" style={{ letterSpacing: \"0.5px\" }}>\n {title}\n </span>\n\n <span\n className=\"cursor-pointer text-gray-400 relative group\"\n style={{ top: \"0.5px\", left: \"2px\" }}\n >\n <img\n src={InfoIcon}\n alt=\"Info\"\n width={12}\n height={12}\n className=\"pt-[1px]\"\n />\n <div\n className=\"absolute top-6 left-1/2 transform -translate-x-1/2 z-10 hidden rounded-md bg-black text-white text-xs p-2 shadow-md group-hover:block text-center\"\n style={{ width: \"170px\" }}\n >\n {tooltip_text}\n <div className=\"absolute left-1/2 -top-1 transform -translate-x-1/2 w-3 h-3 bg-black rotate-45\"></div>\n </div>\n </span>\n </h3>\n </div>\n </div>\n <div className=\"mt-2 flex items-baseline\">\n <div className=\"flex items-center px-2 py-1 rounded-md bg-[#F2F2F2] w-[190px] h-[28px] animate-pulse\"></div>\n </div>\n <div className=\"flex items-center\">\n <div className=\"flex items-center px-2 py-1 rounded-md bg-[#F2F2F2] w-[40px] h-[20px] animate-pulse\"></div>\n <div\n className=\"flex justify-center ml-2 w-[53px] h-[16px] cursor-pointer\"\n onClick={handleRefresh}\n >\n <div className=\"flex gap-1 items-center\">\n <RefreshIcon height=\"16px\" width=\"16px\" color=\"#4062E5\" />\n <p className=\"text-[#4062E5] text-[10px]\">Refresh</p>\n </div>\n </div>\n </div>\n </div>\n <div className=\"ml-4\">{image}</div>\n </div>\n );\n};\n\nexport default ErrorContent;\n","import { twMerge } from \"tailwind-merge\";\n\ninterface Props {\n className?: string;\n}\nconst LoaderComponent = ({ className }: Props) => {\n return (\n <div\n className={twMerge(\n \"bg-white rounded-[6px] px-[8px] py-[9px] min-h-[100px] w-full flex justify-between border border-1\",\n className\n )}\n style={{ borderColor: \"#E2E2E2\" }}\n >\n <div className=\"flex-1 flex flex-col justify-between\">\n <div className=\"flex items-center relative\">\n <div className=\"h-4 bg-gray-300 rounded w-1/2 animate-pulse\"></div>\n <div className=\"ml-1 mt-1 h-3 w-3 bg-gray-300 rounded-full animate-pulse\"></div>\n </div>\n <div className=\"mt-2 flex items-baseline\">\n <div className=\"h-6 bg-gray-300 rounded w-1/4 animate-pulse\"></div>\n </div>\n <div className=\"mt-2 flex items-center\">\n <div className=\"flex items-center px-2 py-1 rounded-md bg-gray-200 w-24 animate-pulse\">\n <div className=\"h-3 w-3 bg-gray-300 rounded-full mr-2\"></div>\n <div className=\"h-3 bg-gray-300 rounded w-12\"></div>\n </div>\n <div className=\"text-gray-500 text-xs ml-2 h-3 bg-gray-300 rounded w-16 animate-pulse\"></div>\n </div>\n </div>\n <div className=\"ml-4 h-10 w-10 bg-gray-300 rounded-full animate-pulse\"></div>\n </div>\n );\n};\n\nexport default LoaderComponent;\n","import { twMerge } from \"tailwind-merge\";\ninterface Props {\n title: string;\n classNames?: string;\n}\nconst Label = ({ title, classNames }: Props) => {\n return (\n <p className={twMerge(\"text-[14px] font-semibold \", classNames)}>{title}</p>\n );\n};\n\nexport default Label;\n","import {\n CategoryScale,\n Chart as ChartJS,\n Filler,\n Legend,\n LinearScale,\n LineElement,\n PointElement,\n Title,\n Tooltip,\n} from \"chart.js\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { Line } from \"react-chartjs-2\";\nimport { twMerge } from \"tailwind-merge\";\n\ninterface DataSet {\n data: number[];\n label: string;\n lineColor?: string;\n pointLabelColor?: string;\n}\n\ninterface MultiLineGraphProps {\n datasets: DataSet[];\n xAxisLabels: string[];\n className?: string;\n}\n\nChartJS.register(\n CategoryScale,\n LinearScale,\n PointElement,\n LineElement,\n Title,\n Tooltip,\n Filler,\n Legend\n);\n\nconst MultiLineGraph = ({\n datasets,\n xAxisLabels,\n className = \"\",\n}: MultiLineGraphProps) => {\n const chartRef = useRef(null);\n const [chartKey, setChartKey] = useState(`chart-${Date.now()}`);\n\n // Default colors for multiple lines\n const defaultColors = [\n { line: \"#17CA43\", point: \"#17CA43\" },\n { line: \"#FF6B6B\", point: \"#FF4757\" },\n { line: \"#4ECDC4\", point: \"#26D0CE\" },\n { line: \"#45B7D1\", point: \"#3742FA\" },\n { line: \"#FFA726\", point: \"#FF6F00\" },\n { line: \"#AB47BC\", point: \"#8E24AA\" },\n ];\n\n // Force chart to re-render when window resizes\n useEffect(() => {\n const handleResize = () => {\n setChartKey(`chart-${Date.now()}`);\n };\n\n window.addEventListener(\"resize\", handleResize);\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n };\n }, []);\n\n const options = useMemo(\n () => ({\n responsive: true,\n maintainAspectRatio: false,\n animation: {\n duration: 100,\n easing: \"easeOutQuad\" as const,\n },\n layout: {\n padding: {},\n },\n scales: {\n x: {\n display: true,\n\n grid: {\n drawBorder: true,\n drawTicks: true,\n drawOnChartArea: false,\n },\n },\n y: {\n display: true,\n border: {\n display: false,\n },\n grid: {\n drawBorder: false,\n drawTicks: false,\n drawOnChartArea: false,\n },\n ticks: {\n display: true, // 👈 Add this to hide the number labels\n },\n },\n },\n plugins: {\n legend: { display: false },\n tooltip: {\n enabled: false,\n external: function (context: any) {\n let tooltipEl = document.getElementById(\"chartjs-tooltip\");\n if (!tooltipEl) {\n tooltipEl = document.createElement(\"div\");\n tooltipEl.id = \"chartjs-tooltip\";\n tooltipEl.innerHTML = \"<div></div>\";\n document.body.appendChild(tooltipEl);\n }\n\n const tooltipModel = context.tooltip;\n context.chart.canvas.style.cursor =\n tooltipModel.opacity === 0 ? \"default\" : \"pointer\";\n if (tooltipModel.opacity === 0) {\n tooltipEl.style.opacity = \"0\";\n return;\n }\n\n const dataPoints = tooltipModel.dataPoints || [];\n // With 'nearest' mode, dataPoints will usually have only one item.\n const label = dataPoints[0]?.label;\n const arrowSize = 8;\n const position = context.chart.canvas.getBoundingClientRect();\n\n tooltipEl.style.position = \"absolute\";\n tooltipEl.style.left = \"0px\";\n tooltipEl.style.top = \"0px\";\n tooltipEl.style.opacity = \"1\";\n tooltipEl.style.pointerEvents = \"none\";\n\n const dataPointsHtml = dataPoints\n .map(\n (point: any, index: number) => `\n <div style=\"display: flex; align-items: center; gap: 8px; margin: ${\n index > 0 ? \"4px\" : \"0\"\n } 0;\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10.0833 0.75H1.91667C1.275 0.75 0.755833 1.275 0.755833 1.91667L0.75 10.0833C0.75 10.725 1.275 11.25 1.91667 11.25H10.0833C10.725 11.25 11.25 10.725 11.25 10.0833V1.91667C11.25 1.275 10.725 0.75 10.0833 0.75ZM10.0833 10.0833H1.91667V1.91667H10.0833V10.0833ZM5.125 8.91667H6.875V6.875H8.91667V5.125H6.875V3.08333H5.125V5.125H3.08333V6.875H5.125V8.91667Z\" fill=\"#4683B4\"/>\n </svg>\n <span style=\"font-weight: bold; color: #757575; margin-top: 1px;\">\n ${\n point.dataset.label\n }: <span style=\"color:#131414; padding-top: 1px;\">${\n point.parsed.y\n }</span>\n </span>\n </div>\n `\n )\n .join(\"\");\n\n const tooltipWidth = tooltipEl.offsetWidth;\n const tooltipHeight = tooltipEl.offsetHeight;\n const pointX =\n position.left + window.pageXOffset + tooltipModel.caretX;\n const pointY =\n position.top + window.pageYOffset + tooltipModel.caretY;\n const windowWidth = window.innerWidth;\n const tooltipLeftEdge = pointX - tooltipWidth / 2;\n const tooltipRightEdge = pointX + tooltipWidth / 2;\n\n let arrowLeftPercent = 50;\n let xAdjustment = 0;\n if (tooltipLeftEdge < 10) {\n xAdjustment = 10 - tooltipLeftEdge;\n } else if (tooltipRightEdge > windowWidth - 10) {\n xAdjustment = windowWidth - 10 - tooltipRightEdge;\n }\n\n const xPosition = tooltipLeftEdge + xAdjustment;\n const yPosition = pointY - tooltipHeight - arrowSize - 5;\n arrowLeftPercent = ((pointX - xPosition) / tooltipWidth) * 100;\n arrowLeftPercent = Math.max(10, Math.min(90, arrowLeftPercent));\n\n const outerArrowSize = 6;\n const innerArrowSize = 5;\n\n const innerHtml = `\n <div style=\"position: relative; background: white; border: 1px solid rgba(16, 30, 115, 0.1); padding: 10px; border-radius: 4px; font-size: 12px; color: #333; min-width: 120px;\">\n <div style=\"\n position: absolute;\n top: 100%;\n left: ${arrowLeftPercent}%;\n transform: translateX(-50%);\n width: 0;\n height: 0;\n border-left: ${outerArrowSize}px solid transparent;\n border-right: ${outerArrowSize}px solid transparent;\n border-top: ${outerArrowSize}px solid rgba(16, 30, 115, 0.1);\n \"></div>\n\n <div style=\"\n position: absolute;\n top: 100%;\n left: ${arrowLeftPercent}%;\n transform: translateX(-50%) translateY(-1px);\n width: 0;\n height: 0;\n border-left: ${innerArrowSize}px solid transparent;\n border-right: ${innerArrowSize}px solid transparent;\n border-top: ${innerArrowSize}px solid white;\n \"></div>\n\n <div>\n <p style=\"color:#757575; margin: 0 0 8px 0;\"><strong>${label}</strong></p>\n ${dataPointsHtml}\n </div>\n </div>\n `;\n\n tooltipEl.innerHTML = innerHtml;\n tooltipEl.style.left = xPosition + \"px\";\n tooltipEl.style.top = yPosition + \"px\";\n },\n },\n },\n interaction: {\n intersect: false,\n // 👇 CHANGE THIS LINE\n mode: \"nearest\" as const,\n },\n elements: {\n line: { tension: 0.5 },\n point: {\n radius: 0,\n hoverRadius: 6,\n backgroundColor: \"#ffffff\",\n borderWidth: 2,\n pointHoverBorderWidth: 3,\n pointHoverRadius: 5,\n },\n },\n }),\n []\n );\n\n const verticalHoverLine = useMemo(\n () => ({\n id: \"verticalLine\",\n afterDraw: (chart: any) => {\n const tooltip = chart.tooltip;\n if (tooltip?._active?.length) {\n const activePoint = chart.tooltip._active[0];\n const ctx = chart.ctx;\n const x = activePoint.element.x;\n const topY = chart.scales.y.top;\n const bottomY = chart.scales.y.bottom;\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(x, topY);\n ctx.lineTo(x, bottomY);\n ctx.lineWidth = 0.5;\n ctx.strokeStyle = \"#4062E5\";\n ctx.setLineDash([5, 5]);\n ctx.stroke();\n ctx.restore();\n }\n },\n }),\n []\n );\n\n const lineData = useMemo(\n () => ({\n labels: xAxisLabels,\n datasets: datasets.map((dataset, index) => {\n const colors = defaultColors[index % defaultColors.length];\n return {\n label: dataset.label,\n data: dataset.data,\n borderColor: dataset.lineColor || colors.line,\n backgroundColor: \"transparent\",\n fill: false,\n pointBackgroundColor: \"#ffffff\",\n pointBorderColor: dataset.pointLabelColor || colors.point,\n tension: 0.5,\n // 👇 ADD THESE TWO LINES to make the line thicker on hover\n borderWidth: 2,\n hoverBorderWidth: 3.5,\n };\n }),\n }),\n [datasets, xAxisLabels]\n );\n\n const dashedGridPlugin = useMemo(\n () => ({\n id: \"customGridAndLabels\",\n afterDatasetsDraw: (chart: any) => {\n const ctx = chart.ctx;\n const yAxis = chart.scales.y;\n const xAxis = chart.scales.x;\n\n if (!yAxis || !xAxis) return;\n\n ctx.save();\n\n ctx.beginPath();\n ctx.setLineDash([4, 4]);\n ctx.strokeStyle = \"rgba(0, 0, 0, 0.1)\";\n ctx.lineWidth = 1;\n\n yAxis.getTicks().forEach((tick: any, index: number) => {\n // ✅ MODIFIED LINE: Only skip the bottom-most line\n if (index === 0) {\n return;\n }\n const yPosition = yAxis.getPixelForValue(tick.value);\n ctx.moveTo(xAxis.left, yPosition);\n ctx.lineTo(xAxis.right, yPosition);\n });\n\n ctx.stroke();\n ctx.restore();\n },\n }),\n []\n );\n\n return (\n <div className={twMerge(\" w-full h-full\", className)}>\n <Line\n ref={chartRef}\n key={chartKey}\n options={options}\n data={lineData}\n plugins={[verticalHoverLine, dashedGridPlugin]}\n />\n </div>\n );\n};\n\nexport default MultiLineGraph;\n","import {\n CategoryScale,\n Chart as ChartJS,\n Filler,\n Legend,\n LinearScale,\n LineElement,\n PointElement,\n Title,\n Tooltip,\n} from \"chart.js\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { Line } from \"react-chartjs-2\";\nimport { twMerge } from \"tailwind-merge\";\n\ninterface SingleLineGraphProps {\n data: number[];\n label: string[];\n gradientColor0?: string;\n gradientColor1?: string;\n pointLabelColor?: string;\n labelPopupTitle?: string;\n lineColor?: string;\n className?: string;\n}\nChartJS.register(\n CategoryScale,\n LinearScale,\n PointElement,\n LineElement,\n Title,\n Tooltip,\n Filler,\n Legend\n);\n\nconst SingleLineGraph = ({\n data,\n label,\n lineColor = \"#17CA43\",\n gradientColor1 = \"rgba(23, 202, 67, 0.5)\",\n gradientColor0 = \"rgba(23, 202, 67, 0)\",\n pointLabelColor = \"#4062E5\",\n labelPopupTitle = \"Requests Completed\",\n className = \"\",\n}: SingleLineGraphProps) => {\n const chartRef = useRef(null);\n const [chartKey, setChartKey] = useState(`chart-${Date.now()}`);\n\n // Force chart to re-render when window resizes\n useEffect(() => {\n const handleResize = () => {\n setChartKey(`chart-${Date.now()}`);\n };\n\n window.addEventListener(\"resize\", handleResize);\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n };\n }, []);\n\n const months = label;\n\n const values = data;\n\n const options = useMemo(\n () => ({\n responsive: true,\n maintainAspectRatio: false,\n animation: {\n duration: 100,\n easing: \"easeOutQuad\" as const,\n },\n layout: {\n padding: {},\n },\n scales: {\n x: {\n display: true,\n\n grid: {\n drawBorder: true,\n drawTicks: true,\n drawOnChartArea: false,\n },\n },\n y: {\n display: true,\n border: {\n display: false,\n },\n grid: {\n drawBorder: false,\n drawTicks: false,\n drawOnChartArea: false,\n },\n ticks: {\n display: true, // 👈 Add this to hide the number labels\n },\n },\n },\n plugins: {\n legend: { display: false },\n tooltip: {\n enabled: false,\n external: function (context: any) {\n let tooltipEl = document.getElementById(\"chartjs-tooltip\");\n if (!tooltipEl) {\n tooltipEl = document.createElement(\"div\");\n tooltipEl.id = \"chartjs-tooltip\";\n tooltipEl.innerHTML = \"<div></div>\";\n document.body.appendChild(tooltipEl);\n }\n\n const tooltipModel = context.tooltip;\n context.chart.canvas.style.cursor =\n tooltipModel.opacity === 0 ? \"default\" : \"pointer\";\n if (tooltipModel.opacity === 0) {\n tooltipEl.style.opacity = \"0\";\n return;\n }\n\n const dataPoint = tooltipModel.dataPoints?.[0];\n const value = dataPoint?.parsed.y;\n const label = dataPoint?.label;\n const arrowSize = 8;\n const position = context.chart.canvas.getBoundingClientRect();\n tooltipEl.style.position = \"absolute\";\n tooltipEl.style.left = \"0px\";\n tooltipEl.style.top = \"0px\";\n tooltipEl.style.opacity = \"1\";\n tooltipEl.style.pointerEvents = \"none\";\n tooltipEl.innerHTML = `\n <div style=\"position: relative;height: 57px; background:white; border:1px solid rgba(16, 30, 115, 0.1); padding:10px; border-radius:4px; font-size:12px; color:#333; display:flex; align-items:center; gap:10px;\">\n <div>\n <p style=\"color:#757575;\"><strong>${label}</strong></p>\n <span style=\"display: inline-flex; align-items: center; font-weight: bold; color: #757575;\">\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 9 10\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M0.416687 3.36663H2.16669V9.08329H0.416687V3.36663ZM3.68335 0.916626H5.31669V9.08329H3.68335V0.916626ZM6.95002 5.58329H8.58335V9.08329H6.95002V5.58329Z\" fill=\"#4683B4\"/>\n </svg> \n ${labelPopupTitle}: <span style=\"color:#757575;\"> ${value}</span>\n </span> \n </div>\n </div>\n `;\n\n const tooltipWidth = tooltipEl.offsetWidth;\n const tooltipHeight = tooltipEl.offsetHeight;\n const pointX =\n position.left + window.pageXOffset + tooltipModel.caretX;\n const pointY =\n position.top + window.pageYOffset + tooltipModel.caretY;\n const windowWidth = window.innerWidth;\n const tooltipLeftEdge = pointX - tooltipWidth / 2;\n const tooltipRightEdge = pointX + tooltipWidth / 2;\n let arrowLeftPercent = 50;\n let xAdjustment = 0;\n if (tooltipLeftEdge < 10) {\n xAdjustment = 10 - tooltipLeftEdge;\n } else if (tooltipRightEdge > windowWidth - 10) {\n xAdjustment = windowWidth - 10 - tooltipRightEdge;\n }\n\n const xPosition = tooltipLeftEdge + xAdjustment;\n const yPosition = pointY - tooltipHeight - arrowSize - 5;\n arrowLeftPercent = ((pointX - xPosition) / tooltipWidth) * 100;\n arrowLeftPercent = Math.max(10, Math.min(90, arrowLeftPercent));\n\n const outerArrowSize = 6;\n const innerArrowSize = 5;\n\n const innerHtml = `\n <div style=\"position: relative; background: white; border: 1px solid rgba(16, 30, 115, 0.1); padding: 10px; border-radius: 4px; font-size: 12px; color: #333; display: flex; align-items: center; gap: 10px;\">\n\n <!-- Outer arrow (border color) -->\n <div style=\"\n position: absolute;\n top: 100%;\n left: ${arrowLeftPercent}%;\n transform: translateX(-50%);\n width: 0;\n height: 0;\n border-left: ${outerArrowSize}px solid transparent;\n border-right: ${outerArrowSize}px solid transparent;\n border-top: ${outerArrowSize}px solid rgba(16, 30, 115, 0.1);\n \"></div>\n\n <!-- Inner arrow (white background) -->\n <div style=\"\n position: absolute;\n top: 100%;\n left: ${arrowLeftPercent}%;\n transform: translateX(-50%) translateY(-1px);\n width: 0;\n height: 0;\n border-left: ${innerArrowSize}px solid transparent;\n border-right: ${innerArrowSize}px solid transparent;\n border-top: ${innerArrowSize}px solid white;\n \"></div>\n\n <div>\n <p style=\"color:#757575;\"><strong>${label}</strong></p>\n <span style=\"display: inline-flex; align-items: center; font-weight: bold; color: #757575;\">\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 9 10\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M0.416687 3.36663H2.16669V9.08329H0.416687V3.36663ZM3.68335 0.916626H5.31669V9.08329H3.68335V0.916626ZM6.95002 5.58329H8.58335V9.08329H6.95002V5.58329Z\" fill=\"#4683B4\"/>\n </svg> \n ${labelPopupTitle}: <span style=\"color:#131414;\"> ${value}</span>\n </span> \n </div>\n </div>\n `;\n\n tooltipEl.innerHTML = innerHtml;\n tooltipEl.style.left = xPosition + \"px\";\n tooltipEl.style.top = yPosition + \"px\";\n },\n },\n },\n interaction: {\n intersect: false,\n mode: \"index\" as const,\n },\n elements: {\n line: { tension: 0.5 },\n point: {\n radius: 0,\n hoverRadius: 6,\n backgroundColor: \"#17CA43\",\n borderColor: \"white\",\n borderWidth: 2,\n pointHoverBorderWidth: 3,\n pointHoverRadius: 5,\n },\n },\n }),\n []\n );\n\n const verticalHoverLine = useMemo(\n () => ({\n id: \"verticalLine\",\n afterDraw: (chart: any) => {\n const tooltip = chart.tooltip;\n if (tooltip?._active?.length) {\n const activePoint = chart.tooltip._active[0];\n const ctx = chart.ctx;\n const x = activePoint.element.x;\n const topY = chart.scales.y.top;\n const bottomY = chart.scales.y.bottom;\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(x, topY);\n ctx.lineTo(x, bottomY);\n ctx.lineWidth = 0.5;\n ctx.strokeStyle = \"#4062E5\";\n ctx.setLineDash([5, 5]);\n ctx.stroke();\n ctx.restore();\n }\n },\n }),\n []\n );\n\n const lineData = useMemo(\n () => ({\n labels: months,\n datasets: [\n {\n label: labelPopupTitle,\n data: values,\n borderColor: lineColor,\n backgroundColor: (context: any) => {\n if (!context.chart.chartArea) return \"rgba(23, 202, 67, 0.5)\";\n const { ctx, chartArea } = context.chart;\n const gradient = ctx.createLinearGradient(\n 0,\n chartArea.bottom,\n 0,\n chartArea.top\n );\n gradient.addColorStop(0, gradientColor0);\n gradient.addColorStop(1, gradientColor1);\n return gradient;\n },\n fill: true,\n pointBackgroundColor: \"#ffffff\",\n pointBorderColor: pointLabelColor,\n },\n ],\n }),\n [months, values]\n );\n\n const dashedGridPlugin = useMemo(\n () => ({\n id: \"customGridAndLabels\",\n afterDatasetsDraw: (chart: any) => {\n const ctx = chart.ctx;\n const yAxis = chart.scales.y;\n const xAxis = chart.scales.x;\n\n if (!yAxis || !xAxis) return;\n\n ctx.save();\n\n ctx.beginPath();\n ctx.setLineDash([4, 4]);\n ctx.strokeStyle = \"rgba(0, 0, 0, 0.1)\";\n ctx.lineWidth = 1;\n\n yAxis.getTicks().forEach((tick: any, index: number) => {\n // ✅ MODIFIED LINE: Only skip the bottom-most line\n if (index === 0) {\n return;\n }\n const yPosition = yAxis.getPixelForValue(tick.value);\n ctx.moveTo(xAxis.left, yPosition);\n ctx.lineTo(xAxis.right, yPosition);\n });\n\n ctx.stroke();\n ctx.restore();\n },\n }),\n []\n );\n\n return (\n <div className={twMerge(\"w-full h-full\", className)}>\n <Line\n ref={chartRef}\n key={chartKey}\n options={options}\n data={lineData}\n plugins={[verticalHoverLine, dashedGridPlugin]}\n />\n </div>\n );\n};\nexport default SingleLineGraph;\n","import React from \"react\";\nimport { twMerge } from \"tailwind-merge\";\n\ninterface CommonInputProps\n extends React.HTMLAttributes<HTMLInputElement | HTMLTextAreaElement> {\n label?: string;\n hasDollar?: boolean;\n value: string;\n onChange: (\n e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>\n ) => void;\n placeholder?: string;\n type?: string;\n height?: string;\n isTextarea?: boolean;\n className?: string;\n maxLength?: number;\n hasIcon?: boolean;\n icon?: React.ReactNode;\n labelColor?: string;\n borderWeight?: string;\n error?: string;\n dollarClass?: string;\n}\n\nconst CommonInput: React.FC<CommonInputProps> = ({\n label,\n hasDollar = false,\n dollarClass = \"\",\n value,\n onChange,\n placeholder = \"\",\n type = \"text\",\n height = \"h-[48px]\",\n isTextarea = false,\n className = \"\",\n maxLength,\n hasIcon = false,\n icon,\n labelColor = \"text-[#131414]\",\n borderWeight = \"border-[2px]\",\n error,\n ...rest\n}) => {\n const inputClasses = twMerge(\n height,\n \"px-3 py-2\",\n borderWeight,\n \"rounded-[8px] text-[14px] text-[#131414] placeholder-[#757575] font-hairline w-full focus:border-[#3C6E97] focus:outline-none resize-none\",\n error ? \"border-red-500 bg-red-100\" : \"border-[#E2E2E2]\",\n hasDollar && !isTextarea && \"pl-7\",\n isTextarea && \"pt-3 align-top\",\n className\n );\n\n return (\n <div className=\"w-full\">\n {/* Label */}\n {label && (\n <p className={twMerge(labelColor, \"text-[14px] font-semibold mb-1\")}>\n {label}\n </p>\n )}\n\n <div className=\"relative\">\n {/* Dollar sign */}\n {hasDollar && !isTextarea && (\n <span\n className={twMerge(\n \"absolute top-1/2 left-3 -translate-y-1/2 text-[#131414] text-[14px] font-medium\",\n dollarClass\n )}\n >\n $\n </span>\n )}\n {hasIcon && icon}\n {/* Input / Textarea */}\n {isTextarea ? (\n <textarea\n value={value}\n onChange={onChange}\n placeholder={placeholder}\n className={inputClasses}\n rows={4}\n maxLength={maxLength}\n {...rest}\n />\n ) : (\n <input\n type={type}\n value={value}\n onChange={onChange}\n placeholder={placeholder}\n className={inputClasses}\n maxLength={maxLength}\n {...rest}\n />\n )}\n </div>\n\n {/* Error */}\n {error && <span className=\"text-[12px] text-red-500\">{error}</span>}\n </div>\n );\n};\n\nexport default CommonInput;\n","import { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { twMerge } from \"tailwind-merge\";\nimport {\n isSameDateMDY,\n validateAndFormatInput,\n validateDate,\n} from \"../../utility/daterange\";\n\ninterface PresetRange {\n label: string;\n getValue: () => { start: Date; end: Date };\n}\n\ninterface DateRangePickerProps {\n bgColor?: string;\n dateFunc: (startDate: string, endDate: string) => void;\n start_date?: string;\n end_date?: string;\n yearsBack?: number;\n title?: string;\n titleClass?: string;\n autoOpen?: boolean;\n isDateRangeOnly?: boolean;\n dateRangeClass?: string;\n setIsShowDateRange?: () => void;\n datePopupOnly?: boolean;\n handleExport?: (start_date: string, end_date: string) => Promise<void>;\n setIsExporting?: (value: boolean) => void;\n isExporting?: boolean;\n className?: string;\n}\n\ntype CalendarView = \"day\" | \"month\" | \"year\";\n\nconst DateRangePicker: React.FC<DateRangePickerProps> = ({\n bgColor = \"bg-[#F8F8F8]\",\n dateFunc,\n start_date = \"\",\n end_date = \"\",\n yearsBack = 1,\n title = \"\",\n titleClass = \"\",\n autoOpen = false,\n isDateRangeOnly = false,\n dateRangeClass = \"\",\n setIsShowDateRange,\n datePopupOnly = false,\n handleExport,\n setIsExporting,\n isExporting = false,\n className = \"\",\n}) => {\n const [isOpen, setIsOpen] = useState<boolean>(autoOpen);\n const [isApply, setIsApply] = useState<boolean>(false);\n const originalStartDateRef = useRef<Date | null>(null);\n const originalEndDateRef = useRef<Date | null>(null);\n\n // New state for calendar views\n const [leftCalendarView, setLeftCalendarView] = useState<CalendarView>(\"day\");\n const [rightCalendarView, setRightCalendarView] =\n useState<CalendarView>(\"day\");\n\n const getInitialStartDate = () => {\n if (start_date) {\n const [month, day, year] = start_date\n .split(\"/\")\n .map((num) => parseInt(num, 10));\n return new Date(year, month - 1, day);\n }\n return null;\n };\n\n const getInitialEndDate = () => {\n if (end_date) {\n const [month, day, year] = end_date\n .split(\"/\")\n .map((num) => parseInt(num, 10));\n return new Date(year, month - 1, day);\n }\n return null;\n };\n\n const [startDate, setStartDate] = useState<Date | null>(\n getInitialStartDate()\n );\n const [endDate, setEndDate] = useState<Date | null>(getInitialEndDate());\n const [leftMonth, setLeftMonth] = useState<Date>(new Date());\n const [rightMonth, setRightMonth] = useState<Date>(new Date());\n const [hoveredDate, setHoveredDate] = useState<Date | null>(null);\n const [selectingStart, setSelectingStart] = useState<boolean>(true);\n const [label, setLabel] = useState(\"\");\n const dropdownRef = useRef<HTMLDivElement>(null);\n const [isCustomEditing, setIsCustomEditing] = useState(false);\n const previousLabelRef = useRef(\"\");\n const isCustomEditingRef = useRef(false);\n const rightMonthRef = useRef<Date>(new Date());\n const months = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n ];\n\n const monthsShort = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ];\n\n const presetRanges: PresetRange[] = [\n {\n label: \"Today\",\n getValue: () => ({ start: new Date(), end: new Date() }),\n },\n {\n label: \"Last Week\",\n getValue: () => {\n const end = new Date();\n const start = new Date(end.getTime() - 7 * 24 * 60 * 60 * 1000);\n return { start, end };\n },\n },\n {\n label: \"This Month\",\n getValue: () => {\n const now = new Date();\n const start = new Date(now.getFullYear(), now.getMonth(), 1);\n const end = new Date();\n return { start, end };\n },\n },\n {\n label: \"Last Month\",\n getValue: () => {\n const now = new Date();\n const start = new Date(now.getFullYear(), now.getMonth() - 1, 1);\n const end = new Date(now.getFullYear(), now.getMonth(), 0);\n return { start, end };\n },\n },\n {\n label: \"Last 3 Months\",\n getValue: () => {\n const end = new Date();\n const start = new Date(\n end.getFullYear(),\n end.getMonth() - 3,\n end.getDate()\n );\n return { start, end };\n },\n },\n {\n label: \"Last 6 Months\",\n getValue: () => {\n const end = new Date();\n const start = new Date(\n end.getFullYear(),\n end.getMonth() - 6,\n end.getDate()\n );\n return { start, end };\n },\n },\n {\n label: `Last 1 Year`,\n getValue: () => {\n const end = new Date();\n const start = new Date(\n end.getFullYear() - 1,\n end.getMonth(),\n end.getDate()\n );\n return { start, end };\n },\n },\n ];\n\n useEffect(() => {\n if (\n previousLabelRef.current === \"\" &&\n end_date !== \"\" &&\n start_date !== \"\"\n ) {\n setLeftMonth(new Date(start_date));\n setRightMonth(new Date(end_date));\n setStartDate(new Date(start_date));\n setEndDate(new Date(end_date));\n if (new Date(end_date) < new Date() && previousLabelRef.current !== \"\") {\n setLabel(\"Custom Range\");\n }\n }\n }, [end_date, start_date]);\n\n useEffect(() => {\n if (autoOpen || datePopupOnly) {\n setIsOpen(true);\n }\n }, [autoOpen, datePopupOnly]);\n\n useEffect(() => {\n if (autoOpen || datePopupOnly) {\n setIsOpen(true);\n }\n }, [autoOpen, datePopupOnly]);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n const isEditing = isCustomEditing;\n const isValid =\n validateCustomInput(startInput, true) &&\n validateCustomInput(endInput, false);\n\n if (isEditing && !isValid) {\n handleCancel();\n return;\n }\n if (!isApply && start_date === \"\" && end_date === \"\") {\n handleCancel();\n return;\n }\n\n if (isApply) {\n setRightMonth(rightMonthRef.current);\n setLeftMonth(new Date(start_date));\n setEndDate(new Date(end_date));\n setStartDate(new Date(start_date));\n setLabel(previousLabelRef.current);\n if (isCustomEditingRef.current)\n setIsCustomEditing(isCustomEditingRef.current);\n return;\n }\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, [end_date, isApply, isCustomEditing, start_date]);\n\n const formatDate = (date: Date): string => {\n return `${(date.getMonth() + 1).toString().padStart(2, \"0\")}/${date\n .getDate()\n .toString()\n .padStart(2, \"0\")}/${date.getFullYear()}`;\n };\n\n const isSameDay = (date1: Date, date2: Date): boolean => {\n return (\n date1.getDate() === date2.getDate() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getFullYear() === date2.getFullYear()\n );\n };\n\n const isSameMonth = (date1: Date, date2: Date): boolean => {\n return (\n date1.getMonth() === date2.getMonth() &&\n date1.getFullYear() === date2.getFullYear()\n );\n };\n\n const isInRange = (date: Date, start: Date, end: Date): boolean => {\n return date >= start && date <= end;\n };\n\n const isInHoverRange = (date: Date): boolean => {\n if (!hoveredDate || !startDate) return false;\n const start = startDate;\n const end = hoveredDate;\n return (\n date >= new Date(Math.min(start.getTime(), end.getTime())) &&\n date <= new Date(Math.max(start.getTime(), end.getTime()))\n );\n };\n\n const isDisabledDate = (date: Date): boolean => {\n if (new Date() < date) return true;\n\n if ((label === \"Custom Range\" || endDate === null) && startDate !== null) {\n const baseDate = new Date(startDate);\n\n baseDate.setHours(23, 59, 59, 999);\n\n if (date < baseDate) return true;\n\n const earliestDate = new Date(startDate);\n\n earliestDate.setFullYear(earliestDate.getFullYear() + yearsBack);\n earliestDate.setHours(0, 0, 0, 0);\n\n if (date > earliestDate) return true;\n return false;\n }\n\n if (startDate === null) return false;\n\n if (startDate !== null) {\n const baseDate = new Date(startDate);\n baseDate.setHours(23, 59, 59, 999);\n\n if (date < baseDate) return true;\n\n const earliestDate = new Date(startDate);\n\n earliestDate.setFullYear(earliestDate.getFullYear() + yearsBack);\n earliestDate.setHours(0, 0, 0, 0);\n\n if (date > earliestDate) return true;\n\n return false;\n }\n\n const today = new Date();\n today.setHours(23, 59, 59, 999);\n\n if (date > today) return true;\n\n const earliestDate = new Date();\n earliestDate.setFullYear(earliestDate.getFullYear() - yearsBack);\n earliestDate.setHours(0, 0, 0, 0);\n\n if (date < earliestDate) return true;\n\n return false;\n };\n\n const isDisabledMonth = (year: number, month: number): boolean => {\n const today = new Date();\n const currentYear = today.getFullYear();\n const currentMonth = today.getMonth();\n\n // Disable future months\n if (year > currentYear || (year === currentYear && month > currentMonth)) {\n return true;\n }\n\n // Disable months that are too far back\n const earliestDate = new Date();\n earliestDate.setFullYear(earliestDate.getFullYear() - 50);\n const earliestYear = earliestDate.getFullYear();\n const earliestMonth = earliestDate.getMonth();\n\n if (\n year < earliestYear ||\n (year === earliestYear && month < earliestMonth)\n ) {\n return true;\n }\n\n return false;\n };\n\n const isDisabledYear = (year: number): boolean => {\n const today = new Date();\n const currentYear = today.getFullYear();\n\n // Disable future years\n if (year > currentYear) {\n return true;\n }\n\n // Disable years that are too far back\n const earliestYear = currentYear - 50;\n if (year < earliestYear) {\n return true;\n }\n\n return false;\n };\n\n const navigateMonth = (direction: number, isLeft: boolean): void => {\n if (isLeft) {\n setLeftMonth(\n (prev) => new Date(prev.getFullYear(), prev.getMonth() + direction, 1)\n );\n } else {\n setRightMonth(\n (prev) => new Date(prev.getFullYear(), prev.getMonth() + direction, 1)\n );\n }\n };\n\n const navigateYear = (direction: number, isLeft: boolean): void => {\n if (isLeft) {\n setLeftMonth(\n (prev) => new Date(prev.getFullYear() + direction, prev.getMonth(), 1)\n );\n } else {\n setRightMonth(\n (prev) => new Date(prev.getFullYear() + direction, prev.getMonth(), 1)\n );\n }\n };\n\n const navigateDecade = (direction: number, isLeft: boolean): void => {\n if (isLeft) {\n setLeftMonth(\n (prev) =>\n new Date(prev.getFullYear() + direction * 10, prev.getMonth(), 1)\n );\n } else {\n setRightMonth(\n (prev) =>\n new Date(prev.getFullYear() + direction * 10, prev.getMonth(), 1)\n );\n }\n };\n\n const handleDateClick = (date: Date, isLeftCalendar: boolean): void => {\n if (\n (startDate !== null && endDate === null && isLeftCalendar) ||\n (startDate !== null &&\n endDate !== null &&\n startDate?.getTime() === endDate?.getTime() &&\n isLeftCalendar)\n ) {\n setStartDate(null);\n setEndDate(null);\n return;\n }\n\n if (!isLeftCalendar && startDate !== null && startDate <= date) {\n setEndDate(date);\n return;\n }\n\n if (date > new Date()) return;\n\n if (isDisabledDate(date)) return;\n\n const isSameMonthView = isSameMonth(leftMonth, rightMonth);\n\n if (!isSameMonthView) {\n // Different months: left calendar sets start date, right calendar sets end date\n if (isLeftCalendar) {\n setStartDate(date);\n if (endDate && date > endDate) {\n setEndDate(null);\n setSelectingStart(false);\n } else {\n setSelectingStart(false);\n }\n } else {\n if (startDate && date < startDate) {\n setStartDate(date);\n setEndDate(null);\n setSelectingStart(false);\n } else {\n setEndDate(date);\n setSelectingStart(true);\n }\n }\n } else {\n // Same month: retain original behavior\n if (selectingStart || !startDate || (startDate && endDate)) {\n setStartDate(date);\n setEndDate(null);\n setSelectingStart(false);\n } else {\n if (date < startDate!) {\n setEndDate(startDate);\n setStartDate(date);\n setSelectingStart(true);\n } else if (endDate && date > endDate) {\n setStartDate(date);\n setEndDate(null);\n setSelectingStart(false);\n } else {\n setEndDate(date);\n setSelectingStart(true);\n }\n }\n }\n };\n\n const handleMonthClick = (monthIndex: number, isLeft: boolean): void => {\n const year = isLeft ? leftMonth.getFullYear() : rightMonth.getFullYear();\n\n // Don't allow clicking disabled months\n if (isDisabledMonth(year, monthIndex)) return;\n\n if (isLeft) {\n setLeftMonth(new Date(leftMonth.getFullYear(), monthIndex, 1));\n setLeftCalendarView(\"day\");\n } else {\n setRightMonth(new Date(rightMonth.getFullYear(), monthIndex, 1));\n setRightCalendarView(\"day\");\n }\n };\n\n const handleYearClick = (year: number, isLeft: boolean): void => {\n // Don't allow clicking disabled years\n if (isDisabledYear(year)) return;\n if (isLeft) {\n setLeftMonth(new Date(year, leftMonth.getMonth(), 1));\n setLeftCalendarView(\"month\");\n } else {\n setRightMonth(new Date(year, rightMonth.getMonth(), 1));\n setRightCalendarView(\"month\");\n }\n };\n\n const handleHeaderClick = (isLeft: boolean): void => {\n if (isLeft) {\n if (leftCalendarView === \"day\") {\n setLeftCalendarView(\"month\");\n } else if (leftCalendarView === \"month\") {\n setLeftCalendarView(\"year\");\n }\n } else {\n if (rightCalendarView === \"day\") {\n setRightCalendarView(\"month\");\n } else if (rightCalendarView === \"month\") {\n setRightCalendarView(\"year\");\n }\n }\n };\n\n const circleContainer = () => {\n if (\n startDate !== null &&\n endDate !== null &&\n startDate?.getTime() === endDate?.getTime()\n ) {\n return \"rounded-full\";\n }\n return \"\";\n };\n\n const handlePresetClick = (preset: PresetRange): void => {\n const { start, end } = preset.getValue();\n setStartDate(start);\n setEndDate(end);\n setLabel(preset.label);\n setSelectingStart(true);\n\n // Reset calendar views to day view\n setLeftCalendarView(\"day\");\n setRightCalendarView(\"day\");\n\n const monthDiff =\n end.getMonth() -\n start.getMonth() +\n 12 * (end.getFullYear() - start.getFullYear());\n\n if (monthDiff >= 1) {\n setLeftMonth(new Date(start.getFullYear(), start.getMonth(), 1));\n setRightMonth(new Date(end.getFullYear(), end.getMonth(), 1));\n } else {\n const left = new Date(start.getFullYear(), start.getMonth(), 1);\n const right = new Date(start.getFullYear(), start.getMonth());\n setLeftMonth(left);\n setRightMonth(right);\n }\n };\n\n const [startInput, setStartInput] = useState(\n startDate ? formatDate(startDate) : \"\"\n );\n const [endInput, setEndInput] = useState(endDate ? formatDate(endDate) : \"\");\n\n useEffect(() => {\n if (startDate) {\n setStartInput(formatDate(startDate));\n } else {\n setStartInput(\"\");\n }\n }, [startDate]);\n\n useEffect(() => {\n if (endDate) {\n setEndInput(formatDate(endDate));\n } else {\n setEndInput(\"\");\n }\n }, [endDate]);\n\n const renderMonthView = (\n monthDate: Date,\n isLeft: boolean,\n className = \"\"\n ) => {\n const year = monthDate.getFullYear();\n\n return (\n <div className={`flex-1 ${className}`}>\n <div className=\"flex items-center justify-between mb-4\">\n <button\n onClick={() => navigateYear(-1, isLeft)}\n className=\"p-1 hover:bg-gray-100 rounded\"\n >\n <ChevronLeft className=\"w-4 h-4\" />\n </button>\n\n <button\n onClick={() => handleHeaderClick(isLeft)}\n className=\"font-medium text-center flex-1 hover:bg-gray-100 rounded px-2 py-1\"\n >\n {year}\n </button>\n\n <button\n onClick={() => navigateYear(1, isLeft)}\n className=\"p-1 hover:bg-gray-100 rounded\"\n >\n <ChevronRight className=\"w-4 h-4\" />\n </button>\n </div>\n\n <div className=\"grid grid-cols-3 gap-2\">\n {monthsShort.map((month, index) => {\n const isDisabled = isDisabledMonth(year, index);\n return (\n <button\n key={month}\n onClick={() => handleMonthClick(index, isLeft)}\n disabled={isDisabled}\n className={`p-2 text-sm rounded ${\n isDisabled\n ? \"cursor-not-allowed text-gray-300 bg-gray-100\"\n : \"hover:bg-blue-100\"\n } ${\n monthDate.getMonth() === index && !isDisabled\n ? \"bg-[#4683B4] text-white\"\n : \"\"\n }`}\n >\n {month}\n </button>\n );\n })}\n </div>\n </div>\n );\n };\n\n const renderYearView = (monthDate: Date, isLeft: boolean, className = \"\") => {\n const currentYear = monthDate.getFullYear();\n const startDecade = Math.floor(currentYear / 10) * 10;\n const years = [];\n\n for (let i = startDecade; i < startDecade + 10; i++) {\n years.push(i);\n }\n\n return (\n <div className={`flex-1 ${className}`}>\n <div className=\"flex items-center justify-between mb-4\">\n <button\n onClick={() => navigateDecade(-1, isLeft)}\n className=\"p-1 hover:bg-gray-100 rounded\"\n >\n <ChevronLeft className=\"w-4 h-4\" />\n </button>\n\n <h3 className=\"font-medium text-center flex-1\">\n {startDecade} - {startDecade + 9}\n </h3>\n\n <button\n onClick={() => navigateDecade(1, isLeft)}\n className=\"p-1 hover:bg-gray-100 rounded\"\n >\n <ChevronRight className=\"w-4 h-4\" />\n </button>\n </div>\n\n <div className=\"grid grid-cols-2 gap-2\">\n {years.map((year) => {\n const isDisabled = isDisabledYear(year);\n return (\n <button\n key={year}\n onClick={() => handleYearClick(year, isLeft)}\n disabled={isDisabled}\n className={`p-2 text-sm rounded ${\n isDisabled\n ? \"cursor-not-allowed text-gray-300 bg-gray-100\"\n : \"hover:bg-blue-100\"\n } ${\n currentYear === year && !isDisabled\n ? \"bg-[#4683B4] text-white\"\n : \"\"\n }`}\n >\n {year}\n </button>\n );\n })}\n </div>\n </div>\n );\n };\n\n const renderCalendar = (monthDate: Date, isLeft: boolean, className = \"\") => {\n const view = isLeft ? leftCalendarView : rightCalendarView;\n\n if (view === \"month\") {\n return renderMonthView(monthDate, isLeft, className);\n }\n\n if (view === \"year\") {\n return renderYearView(monthDate, isLeft, className);\n }\n\n // Default day view\n const year = monthDate.getFullYear();\n const month = monthDate.getMonth();\n const firstDay = new Date(year, month, 1);\n const lastDay = new Date(year, month + 1, 0);\n const daysInMonth = lastDay.getDate();\n const startingDayOfWeek = firstDay.getDay();\n const days: JSX.Element[] = [];\n\n for (let i = 0; i < startingDayOfWeek; i++) {\n const prevDate = new Date(year, month, -startingDayOfWeek + i + 1);\n days.push(\n <div\n key={`prev-${i}`}\n className=\"w-8 h-8 flex items-center justify-center text-gray-300 text-sm\"\n >\n {prevDate.getDate()}\n </div>\n );\n }\n\n for (let day = 1; day <= daysInMonth; day++) {\n const date = new Date(year, month, day);\n const isStart = startDate && isSameDay(date, startDate);\n const isEnd = endDate && isSameDay(date, endDate);\n const isInCurrentRange =\n startDate && endDate && isInRange(date, startDate, endDate);\n const isInHover = !endDate && isInHoverRange(date);\n const isDisabled = isDisabledDate(date);\n\n days.push(\n <div\n key={day}\n className={`relative w-8 h-8 flex items-center justify-center text-sm ${\n isDisabled ? \"cursor-not-allowed text-gray-300\" : \"cursor-pointer\"\n } group`}\n onClick={() => handleDateClick(date, isLeft)}\n onMouseEnter={() => !isDisabled && setHoveredDate(date)}\n onMouseLeave={() => setHoveredDate(null)}\n >\n {isStart ? (\n <>\n <div\n className={`absolute inset-0 bg-[#D9ECFF] rounded-l-full ${circleContainer()}`}\n />\n <div\n className={`w-6 h-6 bg-[#213D69] text-white rounded-full z-10 flex items-center justify-center text-xs font-bold`}\n >\n {day}\n </div>\n </>\n ) : isEnd ? (\n <>\n <div\n className={`absolute inset-0 bg-[#D9ECFF] rounded-r-full ${circleContainer()}`}\n />\n <div className=\"w-6 h-6 bg-[#213D69] text-white rounded-full z-10 flex items-center justify-center text-xs font-bold\">\n {day}\n </div>\n </>\n ) : isInCurrentRange || isInHover ? (\n <>\n <div className=\"absolute inset-0 bg-[#D9ECFF]\" />\n <div className=\"relative z-10\">{day}</div>\n </>\n ) : (\n <div\n className={`w-8 h-8 flex items-center justify-center rounded-full ${\n !isDisabled ? \"group-hover:bg-blue-100\" : \"\"\n }`}\n >\n {day}\n </div>\n )}\n </div>\n );\n }\n\n const totalCells = 42;\n const remainingCells = totalCells - days.length;\n for (let i = 1; i <= remainingCells; i++) {\n const nextDate = new Date(year, month + 1, i);\n days.push(\n <div\n key={`next-${i}`}\n className=\"w-8 h-8 flex items-center justify-center text-gray-300 text-sm\"\n >\n {nextDate.getDate()}\n </div>\n );\n }\n\n return (\n <div className={`flex-1 ${className}`}>\n <div className=\"flex items-center justify-between mb-4\">\n <button\n onClick={() => navigateMonth(-1, isLeft)}\n className=\"p-1 hover:bg-gray-100 rounded\"\n >\n <ChevronLeft className=\"w-4 h-4\" />\n </button>\n\n <button\n onClick={() => handleHeaderClick(isLeft)}\n className=\"font-medium text-center flex-1 hover:bg-gray-100 rounded px-2 py-1\"\n >\n {months[month]} {year}\n </button>\n\n <button\n onClick={() => navigateMonth(1, isLeft)}\n className=\"p-1 hover:bg-gray-100 rounded\"\n >\n <ChevronRight className=\"w-4 h-4\" />\n </button>\n </div>\n\n <div className=\"grid grid-cols-7 gap-1 mb-2\">\n {[\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"].map((day) => (\n <div\n key={day}\n className=\"w-8 h-8 flex items-center justify-center text-xs font-medium text-gray-500\"\n >\n {day}\n </div>\n ))}\n </div>\n\n <div className=\"grid grid-cols-7\">{days}</div>\n </div>\n );\n };\n\n const handleCancel = () => {\n const originalStart = originalStartDateRef.current;\n const originalEnd = originalEndDateRef.current;\n\n if (start_date === \"\" && end_date === \"\") {\n setStartDate(null);\n setEndDate(null);\n } else {\n setStartDate(originalStart);\n setEndDate(originalEnd);\n }\n\n setStartInput(originalStart ? formatDate(originalStart) : \"\");\n setEndInput(originalEnd ? formatDate(originalEnd) : \"\");\n\n setLabel(\"\");\n setSelectingStart(true);\n setIsCustomEditing(false);\n\n // Reset calendar views\n setLeftCalendarView(\"day\");\n setRightCalendarView(\"day\");\n\n setLeftMonth(\n originalStart\n ? new Date(originalStart.getFullYear(), originalStart.getMonth(), 1)\n : new Date()\n );\n setRightMonth(\n originalEnd\n ? new Date(originalEnd.getFullYear(), originalEnd.getMonth(), 1)\n : new Date()\n );\n\n setIsOpen(false);\n if (setIsShowDateRange !== undefined) setIsShowDateRange();\n };\n\n const validateCustomInput = (\n inputValue: string,\n isStartDate: boolean\n ): boolean => {\n if (inputValue.length !== 10) return false;\n if (!validateDate(inputValue)) return false;\n\n const [month, day, year] = inputValue\n .split(\"/\")\n .map((num) => parseInt(num, 10));\n const inputDate = new Date(year, month - 1, day);\n\n if (isDisabledDate(inputDate)) return false;\n\n if (isStartDate && endDate && inputDate > endDate) return false;\n if (!isStartDate && startDate && inputDate < startDate) return false;\n\n return true;\n };\n\n const isCustomInputValid = (): boolean => {\n if (\n label === \"Custom Range\" &&\n endDate !== null &&\n (!isDisabledDate(endDate) ||\n isSameDateMDY(new Date(startInput), new Date(endInput)))\n )\n return true;\n if (startDate === null || endDate === null) return false;\n\n if (!isCustomEditing) return true;\n\n const isStartValid = validateCustomInput(startInput, true);\n const isEndValid = validateCustomInput(endInput, false);\n\n return isStartValid && isEndValid;\n };\n\n return (\n <div>\n <div>\n {!datePopupOnly && !isDateRangeOnly && (\n <label\n className={twMerge(\n \"block text-sm font-medium text-gray-600 mb-1\",\n titleClass\n )}\n >\n {title}\n </label>\n )}\n <div className=\"relative\" ref={dropdownRef}>\n {!datePopupOnly && !isDateRangeOnly && (\n <div\n className={twMerge(\n `flex items-center w-full h-[38px] gap-2 px-3 py-2 border rounded-md cursor-pointer ${bgColor} hover:border-[#4683B4] ${\n isOpen && \"border-[#4683B4]\"\n }`,\n className\n )}\n onClick={() => {\n originalStartDateRef.current = startDate;\n originalEndDateRef.current = endDate;\n // Reset calendar views when opening\n setLeftCalendarView(\"day\");\n setRightCalendarView(\"day\");\n setIsOpen(!isOpen);\n }}\n >\n <span className=\"text-sm\">\n {startDate && endDate\n ? `${formatDate(startDate)} - ${formatDate(endDate)}`\n : startDate\n ? `${formatDate(startDate)} - Select end date`\n : \"\"}\n </span>\n <div className=\"absolute top-1/2 right-3 -translate-y-1/2 pointer-events-none\">\n <svg\n width=\"18\"\n height=\"20\"\n viewBox=\"0 0 18 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M4 9H6V11H4V9ZM18 4V18C18 19.1 17.1 20 16 20H2C0.89 20 0 19.1 0 18L0.00999999 4C0.00999999 2.9 0.89 2 2 2H3V0H5V2H13V0H15V2H16C17.1 2 18 2.9 18 4ZM2 6H16V4H2V6ZM16 18V8H2V18H16ZM12 11H14V9H12V11ZM8 11H10V9H8V11Z\"\n fill=\"#757575\"\n />\n </svg>\n </div>\n </div>\n )}\n\n {isOpen && (\n <div\n className={`absolute top-full right-0 ${\n datePopupOnly ? \"\" : \"mt-2\"\n } bg-white border rounded-lg shadow-lg z-50 ${dateRangeClass}`}\n style={{\n width: \"700px\",\n height: \"419px\",\n marginRight: datePopupOnly ? \"15px\" : undefined,\n }}\n >\n <div className=\"flex\">\n <div className=\"w-[290px] border-r\">\n <div className=\"flex flex-col justify-between h-[419px] p-4\">\n <div className=\"space-y-[3px]\">\n {presetRanges.map((preset, index) => (\n <button\n key={index}\n onClick={() => {\n handlePresetClick(preset);\n if (isCustomEditing) {\n setIsCustomEditing(false);\n }\n }}\n className={`w-full text-left px-[14px] py-[6px] text-[14px] rounded-[4px] border border-1 border-[#ECECF0] hover:bg-[#ECECF0] ${\n preset.label === label\n ? \"bg-[#ECECF0] font-semibold\"\n : \"\"\n }`}\n >\n {preset.label}\n </button>\n ))}\n <button\n className={`w-full text-left px-[14px] py-[6px] rounded-[4px] text-[13px] border border-1 border-[#ECECF0] hover:bg-[#ECECF0] ${\n isCustomEditing ? \"bg-[#ECECF0] font-semibold\" : \"\"\n }`}\n onClick={() => {\n setIsCustomEditing(true);\n setLabel(\"Custom Range\");\n previousLabelRef.current = \"Custom Range\";\n setStartInput(\"\");\n setEndInput(\"\");\n setStartDate(null);\n setEndDate(null);\n setRightMonth(new Date());\n setLeftMonth(new Date());\n // Reset calendar views\n setLeftCalendarView(\"day\");\n setRightCalendarView(\"day\");\n }}\n >\n Custom Range (max 1 year)\n </button>\n <div className=\"flex gap-[8px]\">\n <input\n type=\"text\"\n placeholder=\"MM/DD/YYYY\"\n value={startInput}\n onChange={(e) => {\n if (!isCustomEditing) return;\n\n const rawValue = e.target.value;\n const formattedValue = validateAndFormatInput(\n rawValue,\n {\n enableYearRange: false,\n yearsBack: yearsBack,\n }\n );\n\n setStartInput(formattedValue);\n\n if (formattedValue.length === 10) {\n const [month, day, year] = formattedValue\n .split(\"/\")\n .map((num) => parseInt(num, 10));\n const parsedDate = new Date(\n year,\n month - 1,\n day,\n 0,\n 0,\n 0,\n 0\n );\n setStartDate(parsedDate);\n setLeftMonth(\n new Date(\n parsedDate.getFullYear(),\n parsedDate.getMonth(),\n 1\n )\n );\n }\n }}\n onBlur={() => {\n if (!isCustomEditing) return;\n const endDateInput = new Date(endInput);\n\n if (\n isDisabledDate(endDateInput) &&\n startDate !== null &&\n !isSameDateMDY(startDate, endDateInput)\n ) {\n setEndDate(null);\n setEndInput(\"\");\n }\n }}\n disabled={!isCustomEditing}\n className={`w-full h-[33.5px] text-[12px] px-[13px] rounded-[4px] border border-1 border-[#ECECF0] ${\n !isCustomEditing\n ? \"bg-gray-100 cursor-not-allowed\"\n : \"\"\n }`}\n />\n\n <input\n type=\"text\"\n placeholder=\"MM/DD/YYYY\"\n value={endInput}\n onChange={(e) => {\n if (!isCustomEditing) return;\n\n const rawValue = e.target.value;\n const formattedValue = validateAndFormatInput(\n rawValue,\n {\n enableYearRange: false,\n yearsBack: yearsBack,\n }\n );\n\n setEndInput(formattedValue);\n\n if (formattedValue.length === 10) {\n const [month, day, year] = formattedValue\n .split(\"/\")\n .map((num) => parseInt(num, 10));\n const parsedDate = new Date(\n year,\n month - 1,\n day,\n 0,\n 0,\n 0,\n 0\n );\n setEndDate(parsedDate);\n setRightMonth(\n new Date(\n parsedDate.getFullYear(),\n parsedDate.getMonth(),\n 1\n )\n );\n }\n if (\n formattedValue.length === 10 &&\n isDisabledDate(new Date(formattedValue)) &&\n startDate !== null &&\n !isSameDateMDY(\n startDate,\n new Date(formattedValue)\n )\n ) {\n setEndDate(null);\n setEndInput(\"\");\n }\n }}\n onBlur={() => {\n if (!isCustomEditing) return;\n const endDateInput = new Date(endInput);\n if (\n isDisabledDate(endDateInput) &&\n startInput !== \"\" &&\n startDate !== null &&\n !isSameDateMDY(startDate, new Date(endDateInput))\n ) {\n setEndDate(null);\n setEndInput(\"\");\n }\n }}\n disabled={!isCustomEditing || startInput === \"\"}\n className={`w-full h-[33.5px] text-[12px] px-[13px] rounded-[4px] border border-1 border-[#ECECF0] ${\n !isCustomEditing\n ? \"bg-gray-100 cursor-not-allowed\"\n : \"\"\n }`}\n />\n </div>\n </div>\n\n <div className=\"flex gap-2\">\n <button\n onClick={() => handleCancel()}\n className=\"w-full px-[14px] py-[6px] text-[16px] font-semibold border rounded-[4px] border-1 border-[#E0E1E6]\"\n >\n Cancel\n </button>\n <button\n onClick={async () => {\n if (!isCustomInputValid()) return;\n setIsApply(true);\n\n if (label === \"Custom Range\")\n isCustomEditingRef.current = true;\n if (label !== \"Custom Range\")\n isCustomEditingRef.current = false;\n rightMonthRef.current = rightMonth;\n previousLabelRef.current = label;\n originalStartDateRef.current = startDate;\n originalEndDateRef.current = endDate;\n\n if (datePopupOnly) {\n dateFunc(\n startDate ? formatDate(startDate) : \"\",\n endDate ? formatDate(endDate) : \"\"\n );\n setIsExporting?.(true);\n try {\n if (startDate !== null && endDate !== null)\n await handleExport?.(\n formatDate(startDate),\n formatDate(endDate)\n );\n } finally {\n setIsExporting?.(false);\n }\n } else {\n dateFunc(\n startDate ? formatDate(startDate) : \"\",\n endDate ? formatDate(endDate) : \"\"\n );\n }\n if (isDateRangeOnly) {\n setEndInput(\"\");\n setStartInput(\"\");\n setEndInput(\"\");\n setStartDate(null);\n setEndDate(null);\n setRightMonth(new Date());\n setIsApply(false);\n originalStartDateRef.current = null;\n originalEndDateRef.current = null;\n }\n if (setIsShowDateRange !== undefined)\n setIsShowDateRange();\n\n setIsOpen(false);\n }}\n className={`w-full px-[14px] py-[6px] text-[16px] text-[#FFFFFF] font-semibold border rounded-[4px] bg-[#4683B4] ${\n !isCustomInputValid() && \"opacity-50\"\n } flex justify-center items-center gap-2`}\n >\n {datePopupOnly ? (\n isExporting ? (\n <svg\n className=\"animate-spin h-5 w-5 text-white\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n ></circle>\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8v8H4z\"\n ></path>\n </svg>\n ) : (\n \"Download\"\n )\n ) : (\n \"Apply\"\n )}\n </button>\n </div>\n </div>\n </div>\n\n <div className=\"flex\">\n {renderCalendar(\n leftMonth,\n true,\n \"pr-4 pt-4 pl-2 w-[227.59px]\"\n )}\n {renderCalendar(\n rightMonth,\n false,\n \"pr-4 pt-4 pl-2 w-[227.59px]\"\n )}\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n};\n\nexport default DateRangePicker;\n","// ? DATE UTILS\ninterface DateValidationOptions {\n enableYearRange?: boolean;\n yearsBack?: number;\n allowFutureDates?: boolean; // New option to control future date validation\n}\n\nexport const validateAndFormatInput = (\n rawInput: string,\n options: DateValidationOptions = {}\n) => {\n const {\n enableYearRange = true,\n yearsBack = 1,\n allowFutureDates = false,\n } = options;\n\n let digits = rawInput.replace(/\\D/g, \"\");\n\n // Validate month\n if (digits.length >= 2) {\n const month = parseInt(digits.slice(0, 2));\n if (month < 1 || month > 12) {\n digits = digits.slice(0, 1);\n }\n }\n\n // Validate day\n if (digits.length >= 4) {\n const month = parseInt(digits.slice(0, 2));\n const day = parseInt(digits.slice(2, 4));\n\n const daysInMonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n const maxDays = daysInMonth[month - 1] || 31;\n\n if (day < 1 || day > maxDays) {\n digits = digits.slice(0, 3);\n }\n }\n\n // Validate year range\n if (enableYearRange && digits.length >= 8) {\n const currentYear = new Date().getFullYear();\n const minYear = currentYear - yearsBack;\n const inputYear = parseInt(digits.slice(4, 8));\n\n if (inputYear < minYear || inputYear > currentYear) {\n digits = digits.slice(0, 4);\n }\n }\n\n // Validate complete date against future dates (if we have a complete date)\n if (!allowFutureDates && digits.length === 8) {\n const month = parseInt(digits.slice(0, 2));\n const day = parseInt(digits.slice(2, 4));\n const year = parseInt(digits.slice(4, 8));\n\n const inputDate = new Date(year, month - 1, day);\n const today = new Date();\n today.setHours(23, 59, 59, 999); // Set to end of today\n\n // If the complete date is in the future, truncate to just month/day\n if (inputDate > today) {\n digits = digits.slice(0, 4);\n }\n }\n\n digits = digits.slice(0, 8);\n\n let formatted = \"\";\n if (digits.length > 0) formatted += digits.slice(0, 2);\n if (digits.length >= 3) formatted += `/${digits.slice(2, 4)}`;\n if (digits.length >= 5) formatted += `/${digits.slice(4, 8)}`;\n\n return formatted;\n};\nexport const validateDate = (dateString: string, allowFutureDates = false) => {\n const formatRegex = /^(0[1-9]|1[0-2])\\/(0[1-9]|[12][0-9]|3[01])\\/\\d{4}$/;\n if (!formatRegex.test(dateString)) {\n return false;\n }\n\n const [month, day, year] = dateString\n .split(\"/\")\n .map((num) => parseInt(num, 10));\n const inputDate = new Date(year, month - 1, day);\n\n // Check if the date is valid (handles leap years, etc.)\n if (\n inputDate.getMonth() !== month - 1 ||\n inputDate.getDate() !== day ||\n inputDate.getFullYear() !== year\n ) {\n return false;\n }\n\n if (!allowFutureDates) {\n const today = new Date();\n today.setHours(23, 59, 59, 999);\n\n if (inputDate > today) {\n return false;\n }\n }\n\n return true;\n};\nexport const validateDateRange = (\n dateString: string,\n options: {\n allowFutureDates?: boolean;\n minDate?: Date;\n maxDate?: Date;\n yearsBack?: number;\n } = {}\n): boolean => {\n const { allowFutureDates = false, minDate, maxDate, yearsBack } = options;\n\n if (!validateDate(dateString, allowFutureDates)) {\n return false;\n }\n\n const [month, day, year] = dateString\n .split(\"/\")\n .map((num) => parseInt(num, 10));\n const inputDate = new Date(year, month - 1, day);\n\n if (minDate && inputDate < minDate) {\n return false;\n }\n\n if (maxDate && inputDate > maxDate) {\n return false;\n }\n\n if (yearsBack) {\n const currentYear = new Date().getFullYear();\n const minYear = currentYear - yearsBack;\n if (year < minYear) {\n return false;\n }\n }\n\n return true;\n};\n\nexport function toEndOfDay(date: Date): Date {\n const clean = new Date(date);\n clean.setHours(23, 59, 59, 999);\n return clean;\n}\n\nexport function toMidnight(date: Date): Date {\n const clean = new Date(date); // clone so we don't mutate the original\n clean.setHours(0, 0, 0, 0);\n return clean;\n}\n\nexport function isSameDateMDY(date1: Date, date2: Date): boolean {\n return (\n date1.getFullYear() === date2.getFullYear() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getDate() === date2.getDate()\n );\n}\n","import React, { ChangeEvent, useEffect, useRef, useState } from \"react\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport interface MultipleAutoSuggestionInputProps {\n label?: string;\n options: { key: string; name: string }[];\n selectedItems: string[] | string;\n isMulti?: boolean;\n enableTypingSingle?: boolean; // new prop\n onSelect: (key: string) => void;\n onRemove?: (key: string) => void;\n onChange: (e: ChangeEvent<HTMLInputElement>) => void;\n keyDown: (e: React.KeyboardEvent<HTMLInputElement>) => void;\n inputValue: string;\n setInputValue: (value: string) => void;\n isDropdownAutoOpen?: boolean;\n labelClass?: string;\n buttonClass?: string;\n dropdownOpenClass?: string;\n selectedItemsClass?: string;\n removeIconClass?: string;\n}\n\nconst MultipleAutoSuggestionInput: React.FC<\n MultipleAutoSuggestionInputProps\n> = ({\n label = \"\",\n options,\n selectedItems,\n isMulti = true,\n enableTypingSingle = true,\n onSelect,\n onRemove,\n keyDown,\n onChange,\n inputValue,\n setInputValue,\n isDropdownAutoOpen = false,\n labelClass = \"\",\n buttonClass = \"\",\n dropdownOpenClass = \"\",\n selectedItemsClass = \"\",\n removeIconClass = \"\",\n}) => {\n const [filteredOptions, setFilteredOptions] = useState(options);\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n\n const inputRef = useRef<HTMLInputElement>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n const selectedList = isMulti\n ? (selectedItems as string[])\n : selectedItems\n ? [selectedItems as string]\n : [];\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node)\n ) {\n setIsDropdownOpen(false);\n }\n };\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n useEffect(() => {\n if (!isMulti && !enableTypingSingle) {\n setFilteredOptions(\n options.filter((opt) => !selectedList.includes(opt.key))\n );\n return;\n }\n\n const filtered = options\n .filter((option) =>\n option.name.toLowerCase().includes(inputValue.toLowerCase())\n )\n .filter((option) => !selectedList.includes(option.key));\n\n setFilteredOptions(filtered);\n\n if (inputValue) {\n setIsDropdownOpen(true);\n } else {\n setIsDropdownOpen(false);\n }\n }, [inputValue, options, selectedItems]);\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setInputValue(e.target.value);\n onChange(e);\n };\n\n const handleOptionSelect = (key: string) => {\n onSelect(key);\n setInputValue(\"\");\n setIsDropdownOpen(false);\n };\n\n return (\n <div>\n <label\n className={twMerge(\n \"block text-sm font-medium text-custom-gray mb-1\",\n labelClass\n )}\n >\n {label}\n </label>\n <div\n ref={dropdownRef}\n className=\"relative\"\n onClick={() => {\n inputRef.current?.focus?.();\n if (!isDropdownOpen || isDropdownAutoOpen) {\n setIsDropdownOpen(true);\n }\n }}\n >\n <div\n className={twMerge(\n \"border border-[#E2E2E2] focus-within:border-[#4683B4] rounded-lg p-1.5 bg-[#F8F8F8] cursor-pointer flex flex-wrap items-center gap-2 min-h-[2.5rem]\",\n buttonClass\n )}\n >\n {isMulti && Array.isArray(selectedList)\n ? selectedList.map((itemKey) => {\n const option = options.find((opt) => opt.key === itemKey);\n return (\n <div\n key={itemKey}\n className={twMerge(\n \"flex flex border-[#E2E2E2] border items-center px-2 py-1 bg-white text-gray-700 rounded-md text-xs font-medium\",\n selectedItemsClass\n )}\n >\n {option ? option.name : itemKey}\n {onRemove && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n onRemove(itemKey);\n }}\n className={twMerge(\n \"ml-1 text-gray-500 hover:text-gray-700 bg-white\",\n removeIconClass\n )}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n >\n <path\n d=\"M11.0837 3.739L10.2612 2.9165L7.00033 6.17734L3.73949 2.9165L2.91699 3.739L6.17783 6.99984L2.91699 10.2607L3.73949 11.0832L7.00033 7.82234L10.2612 11.0832L11.0837 10.2607L7.82283 6.99984L11.0837 3.739Z\"\n fill=\"#323232\"\n />\n </svg>\n </button>\n )}\n </div>\n );\n })\n : selectedList.length > 0 && (\n <div\n className={twMerge(\n \"flex border-[#E2E2E2] border items-center px-2 py-1 bg-white text-gray-700 rounded-md text-xs font-medium\",\n selectedItemsClass\n )}\n >\n <span className=\"text-xs font-medium text-gray-800\">\n {options.find((opt) => opt.key === selectedList[0])?.name ||\n selectedList[0]}\n </span>\n {onRemove && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n onRemove(\n options.find((opt) => opt.key === selectedList[0])\n ?.name || selectedList[0]\n );\n }}\n className={twMerge(\n \"ml-1 text-gray-500 hover:text-gray-700\",\n removeIconClass\n )}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n >\n <path\n d=\"M11.0837 3.739L10.2612 2.9165L7.00033 6.17734L3.73949 2.9165L2.91699 3.739L6.17783 6.99984L2.91699 10.2607L3.73949 11.0832L7.00033 7.82234L10.2612 11.0832L11.0837 10.2607L7.82283 6.99984L11.0837 3.739Z\"\n fill=\"#323232\"\n />\n </svg>\n </button>\n )}\n </div>\n )}\n {!isMulti && !enableTypingSingle && selectedList.length === 0 && (\n <span className=\"text-xs text-gray-500 px-1 py-1\">Select...</span>\n )}\n {isMulti && enableTypingSingle && (\n <input\n type=\"text\"\n ref={inputRef}\n value={inputValue}\n onKeyDown={keyDown}\n onChange={handleInputChange}\n className=\"flex-grow px-0 py-1 bg-[#F8F8F8] text-xs border-none outline-none focus:ring-0\"\n onFocus={() => {\n if (!isDropdownOpen && (!isMulti || inputValue)) {\n setIsDropdownOpen(true);\n }\n }}\n />\n )}\n </div>\n\n {isDropdownOpen && filteredOptions.length > 0 && (\n <div\n className={twMerge(\n \"absolute top-full left-0 mt-1 w-full rounded-lg bg-white shadow-lg z-10 max-h-60 overflow-auto border border-[#E2E2E2]\",\n dropdownOpenClass\n )}\n >\n <div className=\"py-1 rounded-lg border-[#E2E2E2]\">\n {filteredOptions.map((option) => (\n <div\n key={option.key}\n className=\"px-4 py-2 text-sm cursor-pointer custom-listing-hover\"\n onClick={() => handleOptionSelect(option.key)}\n >\n {option.name}\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default MultipleAutoSuggestionInput;\n","import React, { ChangeEvent } from \"react\";\nimport { twMerge } from \"tailwind-merge\";\n\ninterface SingleListInputProps {\n formValues: string[];\n handleRemove: (value: string) => void;\n inputValue: string;\n onChange: (e: ChangeEvent<HTMLInputElement>) => void;\n keyDown: (e: React.KeyboardEvent<HTMLInputElement>) => void;\n label?: string;\n buttonClass?: string;\n labelClass?: string;\n}\n\nconst SingleListInput: React.FC<SingleListInputProps> = ({\n formValues,\n handleRemove,\n inputValue,\n onChange,\n keyDown,\n label,\n buttonClass = \"\",\n labelClass = \"\",\n}) => {\n return (\n <div>\n <label\n className={twMerge(\n \"block text-sm font-medium text-gray-600 mb-1\",\n labelClass\n )}\n >\n {label}\n </label>\n\n <div\n className={twMerge(\n \"border border-[#E2E2E2] rounded-lg p-1.5 bg-[#F8F8F8] cursor-pointer flex flex-wrap items-center gap-2 focus-within:border-[#4683B4]\",\n buttonClass\n )}\n >\n {formValues.map((id) => (\n <div\n key={id}\n className=\"flex border-custom-gray items-center px-2 py-1 bg-white text-gray-700 rounded-md text-xs font-medium\"\n >\n {id}\n <button\n onClick={() => handleRemove(id)}\n aria-label={`Remove ${id}`}\n className=\"ml-1 text-gray-500 hover:text-gray-700 bg-white\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n >\n <path\n d=\"M11.0837 3.739L10.2612 2.9165L7.00033 6.17734L3.73949 2.9165L2.91699 3.739L6.17783 6.99984L2.91699 10.2607L3.73949 11.0832L7.00033 7.82234L10.2612 11.0832L11.0837 10.2607L7.82283 6.99984L11.0837 3.739Z\"\n fill=\"#323232\"\n />\n </svg>\n </button>\n </div>\n ))}\n\n <input\n type=\"text\"\n value={inputValue}\n onChange={onChange}\n onKeyDown={keyDown}\n className=\"flex-grow px-0 py-1 bg-[#F8F8F8] text-xs border-none outline-none focus:ring-0\"\n />\n </div>\n </div>\n );\n};\n\nexport default SingleListInput;\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { twMerge } from \"tailwind-merge\";\n\ntype Option = { id: string; name: string };\n\ntype SingleSelectDropdownProps = {\n label?: string;\n value: string | null; // now only the id\n onChange: (value: string) => void; // returns id only\n options: Option[];\n placeholder?: string;\n onScrollToEnd?: () => void;\n onSearch?: (searchTerm: string) => void;\n hasMore?: boolean;\n isLoading?: boolean;\n searchable?: boolean;\n searchDebounceMs?: number;\n requiresSearch?: boolean;\n minSearchLength?: number;\n emptyMessage?: string;\n loadingMessage?: string;\n searchPlaceholder?: string;\n disabled?: boolean;\n allOptions?: Option[];\n hasIcon?: boolean;\n buttonClass?: string;\n labelClass?: string;\n displayMainClass?: string;\n displayItemClass?: string;\n hasSearchIcon?: boolean;\n searchInputClass?: string;\n placeholderSearchClass?: string;\n};\n\nexport default function SingleSelectDropdown({\n label = \"\",\n value,\n onChange,\n options,\n placeholder = \"Select an option\",\n onScrollToEnd,\n onSearch,\n hasMore = false,\n isLoading = false,\n searchable = true,\n searchDebounceMs = 300,\n requiresSearch = false,\n minSearchLength = 1,\n emptyMessage = \"No options found\",\n loadingMessage = \"Searching...\",\n searchPlaceholder = \"Search...\",\n disabled = false,\n hasIcon = true,\n buttonClass = \"\",\n labelClass = \"\",\n displayItemClass = \"\",\n displayMainClass = \"\",\n hasSearchIcon = true,\n searchInputClass = \"\",\n placeholderSearchClass = \"\",\n}: SingleSelectDropdownProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [searchTerm, setSearchTerm] = useState(\"\");\n const dropdownRef = useRef<HTMLDivElement>(null);\n const listRef = useRef<HTMLDivElement>(null);\n const searchTimeoutRef = useRef<number | any | undefined>();\n const [hoveredId, setHoveredId] = useState<string | null>(null);\n\n // The actual Option object corresponding to the passed id\n const selectedOption = options.find((opt) => opt.id === value) || null;\n\n // Handle scroll for pagination\n const handleScroll = useCallback(() => {\n if (!listRef.current || isLoading || !hasMore) return;\n\n const { scrollTop, scrollHeight, clientHeight } = listRef.current;\n if (scrollTop + clientHeight >= scrollHeight - 10) {\n onScrollToEnd?.();\n }\n }, [isLoading, hasMore, onScrollToEnd]);\n\n // Debounced search handler\n const handleSearchChange = useCallback(\n (newSearchTerm: string) => {\n setSearchTerm(newSearchTerm);\n\n if (onSearch) {\n if (searchTimeoutRef.current) {\n clearTimeout(searchTimeoutRef.current);\n }\n\n searchTimeoutRef.current = setTimeout(() => {\n onSearch(newSearchTerm);\n }, searchDebounceMs);\n }\n },\n [onSearch, searchDebounceMs]\n );\n\n // Clear search timeout on unmount\n useEffect(() => {\n return () => {\n if (searchTimeoutRef.current) {\n clearTimeout(searchTimeoutRef.current);\n }\n };\n }, []);\n\n // Dynamic filtering logic\n const getFilteredOptions = () => {\n if (onSearch) {\n // API-driven search — no local filter\n return options;\n } else {\n return options.filter((opt) =>\n (opt.name ?? \"\").toLowerCase().includes(searchTerm.toLowerCase())\n );\n }\n };\n\n const filteredOptions = getFilteredOptions();\n\n // Dynamic display logic\n const getDisplayOptions = () => {\n if (requiresSearch && onSearch) {\n if (searchTerm.length < minSearchLength) {\n return selectedOption ? [selectedOption] : [];\n }\n }\n return filteredOptions;\n };\n\n const displayOptions = getDisplayOptions();\n\n // Dynamic empty state logic\n const getEmptyStateContent = () => {\n if (requiresSearch && onSearch && searchTerm.length < minSearchLength) {\n return (\n <div className=\"px-4 py-8 text-center\">\n <div className=\"text-gray-400 mb-2\">\n <svg\n className=\"mx-auto h-8 w-8 mb-3\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\n />\n </svg>\n </div>\n <p className=\"text-sm text-gray-500 font-medium\">\n Enter at least {minSearchLength}{\" \"}\n {minSearchLength === 1 ? \"character\" : \"characters\"} to search\n </p>\n {minSearchLength >= 3 && (\n <p className=\"text-xs text-gray-400 mt-1\">\n Search from large dataset\n </p>\n )}\n </div>\n );\n }\n\n return (\n <div className=\"px-2 py-2 text-sm text-gray-500\">\n {!isLoading && options.length === 0 && emptyMessage}\n </div>\n );\n };\n\n const handleClickOutside = (event: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n };\n\n useEffect(() => {\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n // Modified: reset search only when opening again or when value changes\n useEffect(() => {\n if (isOpen && searchTerm && onSearch) {\n setSearchTerm(\"\");\n onSearch(\"\");\n }\n }, [isOpen]); // purposely only on isOpen change\n\n // Handle dropdown toggle\n const handleToggle = () => {\n if (!disabled) {\n setIsOpen(!isOpen);\n }\n };\n\n return (\n <div>\n <label\n className={twMerge(\n \"block py-1 pt-1 text-[14px] font-semibold mb-1 text-[#545454] \",\n labelClass\n )}\n style={{ letterSpacing: \"0.2px\" }}\n >\n {label}\n </label>\n <div ref={dropdownRef} className=\"relative\">\n <div\n onClick={handleToggle}\n className={twMerge(\n `border-[1.5px] rounded-md h-[40px] pl-3 pr-2 py-2 bg-[#F8F8F8] cursor-pointer flex items-center justify-between ${\n disabled\n ? \"bg-gray-100 cursor-not-allowed border-gray-200\"\n : isOpen\n ? \"border-[#4683B4]\"\n : \"border-[#E2E2E2]\"\n }`,\n buttonClass\n )}\n >\n <span\n className={`text-sm ${\n disabled\n ? \"text-gray-400\"\n : selectedOption\n ? \"text-gray-700\"\n : \"text-gray-400\"\n }`}\n >\n {selectedOption?.name || placeholder}\n </span>\n <div\n className={`transition-transform duration-200 ${\n isOpen ? \"rotate-180\" : \"\"\n } ${disabled ? \"text-gray-400\" : \"\"}\n ${hasIcon ? \"block\" : \"hidden\"}\n `}\n >\n <svg\n className=\"transform rotate-180\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g clipPath=\"url(#clip0_10508_5931)\">\n <path\n d=\"M5.83333 11.6665L10 7.49984L14.1667 11.6665H5.83333Z\"\n fill=\"currentColor\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_10508_5931\">\n <rect\n width=\"20\"\n height=\"20\"\n fill=\"white\"\n transform=\"matrix(1 0 0 -1 0 20)\"\n />\n </clipPath>\n </defs>\n </svg>\n </div>\n </div>\n\n {isOpen && !disabled && (\n <div className=\"absolute mt-1 w-full rounded-md bg-white shadow-lg z-20\">\n <div className=\"p-2 shadow-md border rounded-md max-h-[410px] flex flex-col\">\n {searchable && (\n <div className=\"relative\">\n <input\n type=\"text\"\n className={twMerge(\n \"input-placeholder-ellipsis w-full pr-[30px] h-[40px] px-2 py-1 rounded-md border border-gray-300 text-sm focus:border-1 focus:border-[#4683B4] focus:outline-none\",\n searchInputClass\n )}\n value={searchTerm}\n onChange={(e) => handleSearchChange(e.target.value)}\n />\n {!searchTerm && (\n <span\n className={twMerge(\n \"absolute left-2 top-1/2 transform -translate-y-1/2 text-[12px] text-gray-400 overflow-hidden whitespace-nowrap text-ellipsis pointer-events-none w-[90%]\",\n placeholderSearchClass\n )}\n >\n {searchPlaceholder}\n </span>\n )}\n <div\n className={twMerge(\n \"absolute right-2 top-1/2 transform -translate-y-1/2 pointer-events-none\",\n hasSearchIcon ? \"block\" : \"hidden\"\n )}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M10.9167 9.66667H10.2583L10.025 9.44167C10.8417 8.49167 11.3333 7.25833 11.3333 5.91667C11.3333 2.925 8.90833 0.5 5.91667 0.5C2.925 0.5 0.5 2.925 0.5 5.91667C0.5 8.90833 2.925 11.3333 5.91667 11.3333C7.25833 11.3333 8.49167 10.8417 9.44167 10.025L9.66667 10.2583V10.9167L13.8333 15.075L15.075 13.8333L10.9167 9.66667ZM5.91667 9.66667C3.84167 9.66667 2.16667 7.99167 2.16667 5.91667C2.16667 3.84167 3.84167 2.16667 5.91667 2.16667C7.99167 2.16667 9.66667 3.84167 9.66667 5.91667C9.66667 7.99167 7.99167 9.66667 5.91667 9.66667Z\"\n fill=\"#757575\"\n />\n </svg>\n </div>\n </div>\n )}\n\n <div\n ref={listRef}\n onScroll={handleScroll}\n onMouseEnter={() => setHoveredId(\"hovered\")}\n onMouseLeave={() => setHoveredId(null)}\n className={twMerge(\n `overflow-auto max-h-80 overscroll-contain ${\n searchable ? \"mt-2\" : \"\"\n }`,\n displayMainClass\n )}\n >\n {displayOptions.length > 0\n ? displayOptions.map((opt) => (\n <div\n key={opt.id}\n className={twMerge(\n `h-[40px] px-2 py-2 my-1 text-sm cursor-pointer select-none ${\n opt.id === value && hoveredId == null\n ? \"bg-[#ECF3F7] text-[#131414] font-semibold\"\n : opt.id === value && hoveredId != null\n ? \"text-[#131414] font-semibold\"\n : \"text-[#131414]\"\n }`,\n displayItemClass\n )}\n onClick={() => {\n onChange(opt.id); // only id now\n setIsOpen(false);\n }}\n >\n {opt.name}\n </div>\n ))\n : getEmptyStateContent()}\n {isLoading && hasMore && (\n <div className=\"flex justify-center px-2 pb-4\">\n <div className=\"flex items-center text-sm text-gray-500\">\n <div className=\"animate-spin rounded-full h-4 w-4 border-b-2 border-gray-400 mr-2\"></div>\n {loadingMessage}\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}\n","import { twMerge } from \"tailwind-merge\";\ninterface SelectionButton {\n data: string[];\n className?: string;\n buttonClass?: string;\n currentValue: string;\n onClick: (value: string) => void;\n}\nconst SelectionButton = ({\n data,\n currentValue,\n className = \"\",\n buttonClass,\n onClick,\n}: SelectionButton) => {\n return (\n <div\n className={twMerge(\n \"flex bg-white w-[208px] h-[28px] border border-[#E2E2E2] rounded-[4px] overflow-hidden\",\n className\n )}\n >\n {data.map((time, index) => (\n <button\n key={time}\n onClick={() => {\n onClick(time);\n }}\n className={twMerge(\n `font-normal px-[8px] text-[14px] text-[#131414] ${\n currentValue === time\n ? \"bg-[#ECF3F7] text-[#4683B4] font-semibold \"\n : \"text-gray-600 hover:bg-gray-100\"\n } ${index > 0 ? \"border-l border-gray-300\" : \"\"}`,\n buttonClass\n )}\n >\n {time}\n </button>\n ))}\n </div>\n );\n};\n\nexport default SelectionButton;\n","import { format, isValid, parseISO } from \"date-fns\";\nimport { default as DatePicker } from \"react-datepicker\";\nimport { twMerge } from \"tailwind-merge\";\n\ninterface DynamicDateProps {\n label?: string;\n hasCalendarIcon?: boolean;\n value: string; // ISO string: \"YYYY-MM-DD\"\n onChange: (e: string) => void;\n placeholder?: string;\n disableFuture?: boolean;\n labelColor?: string;\n borderWeight?: string;\n bgColor?: string;\n height?: string;\n placeholderColor?: string;\n labelClass?: string;\n className?: string;\n customIcon?: string;\n iconSize?: number;\n iconClass?: string;\n}\n\nconst SingleDateInput = ({\n label,\n hasCalendarIcon = true,\n value,\n onChange,\n placeholder = \"Required\",\n disableFuture = false,\n labelColor = \"text-[#131414]\",\n borderWeight = \"border-[2px]\",\n bgColor = \"bg-[#F8F8F8]\",\n height = \"h-[48px]\",\n placeholderColor = \"text-[#757575]\",\n labelClass = \"\",\n className = \"\",\n customIcon,\n iconSize = 20,\n iconClass = \"\",\n}: DynamicDateProps) => {\n const parsedDate = isValid(parseISO(value)) ? parseISO(value) : null;\n\n const handleChange = (date: Date | null) => {\n if (date) {\n onChange(format(date, \"yyyy-MM-dd\")); // keep it in ISO format\n } else {\n onChange(\"\");\n }\n };\n\n return (\n <div className=\"w-full\">\n {label && (\n <p\n className={twMerge(\n `${labelColor} text-[14px] font-semibold mb-1`,\n labelClass\n )}\n >\n {label}\n </p>\n )}\n <div className=\"relative\">\n <DatePicker\n selected={parsedDate}\n onChange={handleChange}\n maxDate={disableFuture ? new Date() : undefined}\n placeholderText={placeholder}\n dateFormat=\"MM/dd/yyyy\"\n className={twMerge(\n `\n ${height} px-3 py-2 ${borderWeight} rounded-[8px] text-[14px] text-[#131414] w-full\n border-[#E2E2E2] focus:border-[#3C6E97] focus:outline-none ${bgColor} placeholder:${placeholderColor}\n ${value !== \"\" ? \"text-[#131414]\" : \"\"}\n ${hasCalendarIcon ? \"pr-10\" : \"\"}\n `,\n className\n )}\n />\n {customIcon && customIcon}\n {hasCalendarIcon && (\n <div\n className={twMerge(\n \"absolute top-1/2 right-3 -translate-y-1/2 pointer-events-none\",\n iconClass\n )}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={iconSize}\n height={iconSize}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n >\n <path\n d=\"M4.5 9H6.5V11H4.5V9ZM18.5 4V18C18.5 19.1 17.6 20 16.5 20H2.5C1.39 20 0.5 19.1 0.5 18L0.51 4C0.51 2.9 1.39 2 2.5 2H3.5V0H5.5V2H13.5V0H15.5V2H16.5C17.6 2 18.5 2.9 18.5 4ZM2.5 6H16.5V4H2.5V6ZM16.5 18V8H2.5V18H16.5ZM12.5 11H14.5V9H12.5V11ZM8.5 11H10.5V9H8.5V11Z\"\n fill=\"#757575\"\n />\n </svg>\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default SingleDateInput;\n","import { isToday, startOfDay } from \"date-fns\";\nimport React from \"react\";\nimport { default as DatePicker } from \"react-datepicker\";\nimport { twMerge } from \"tailwind-merge\";\n\ninterface TimeInputProps {\n label?: string;\n hasTimeIcon?: boolean;\n value: string; // ISO string: \"YYYY-MM-DDTHH:mm:ss\"\n onChange: (e: string) => void;\n placeholder?: string;\n disableFuture?: boolean;\n selectedDate?: string;\n className?: string;\n labelClassName?: string;\n customIcon?: React.ReactNode;\n iconSize?: number;\n iconClass?: string;\n}\n\nconst TimeInput = ({\n label,\n hasTimeIcon = true,\n value,\n onChange,\n placeholder = \"Required\",\n disableFuture = false,\n selectedDate,\n className = \"\",\n labelClassName = \"\",\n customIcon,\n iconSize = 20,\n iconClass = \"\",\n}: TimeInputProps) => {\n const parsedDate = value ? new Date(value) : null;\n\n const handleChange = (date: Date | null) => {\n if (date && !isNaN(date.getTime())) {\n onChange(date.toISOString());\n }\n };\n\n const now = new Date();\n\n let minTime: Date | undefined;\n let maxTime: Date | undefined;\n\n if (disableFuture && selectedDate) {\n const selected = new Date(selectedDate);\n minTime = startOfDay(selected);\n\n if (isToday(selected)) {\n maxTime = now;\n } else {\n const endOfDay = new Date(selected);\n endOfDay.setHours(23, 59, 59, 999);\n maxTime = endOfDay;\n }\n }\n\n return (\n <div className=\"w-full\">\n {label && (\n <p\n className={twMerge(\n \"text-[#131414] text-[14px] font-semibold mb-1\",\n labelClassName\n )}\n >\n {label}\n </p>\n )}\n <div className=\"relative\">\n <DatePicker\n selected={parsedDate}\n onChange={handleChange}\n showTimeSelect\n showTimeSelectOnly\n timeIntervals={15}\n timeCaption=\"Time\"\n maxDate={disableFuture ? new Date() : undefined}\n placeholderText={placeholder}\n dateFormat=\"hh:mm aa\"\n minTime={minTime}\n maxTime={maxTime}\n className={twMerge(\n `\n h-[48px] px-3 py-2 border-[2px] rounded-[8px] text-[14px] w-full\n border-[#E2E2E2] focus:border-[#3C6E97] focus:outline-none bg-[#F8F8F8]\n ${value !== \"\" ? \"text-[#131414]\" : \"text-[#757575]\"}\n ${hasTimeIcon ? \"pr-10\" : \"\"}\n `,\n className\n )}\n />\n {customIcon && customIcon}\n {hasTimeIcon && (\n <div\n className={twMerge(\n \"absolute top-1/2 right-3 -translate-y-1/2 pointer-events-none\",\n iconClass\n )}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={iconSize}\n height={iconSize}\n viewBox={`0 0 20 20`}\n fill=\"none\"\n >\n <path\n d=\"M9.99 0C4.47 0 0 4.48 0 10C0 15.52 4.47 20 9.99 20C15.52 20 20 15.52 20 10C20 4.48 15.52 0 9.99 0ZM10 18C5.58 18 2 14.42 2 10C2 5.58 5.58 2 10 2C14.42 2 18 5.58 18 10C18 14.42 14.42 18 10 18ZM10.5 5H9V11L14.25 14.15L15 12.92L10.5 10.25V5Z\"\n fill=\"#757575\"\n />\n </svg>\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default TimeInput;\n","import React from 'react';\nimport ReactPaginate from 'react-paginate';\n\ninterface PaginationProps {\n totalPages: number;\n currentPage: number;\n onPageChange: (selectedPage: number) => void;\n pageRangeDisplayed?: number;\n}\n\nconst Pagination: React.FC<PaginationProps> = ({ totalPages, currentPage, onPageChange, pageRangeDisplayed = 4 }) => {\n return (\n <ReactPaginate\n key={totalPages}\n previousLabel={\n <svg\n width=\"8\"\n height=\"14\"\n viewBox=\"0 0 8 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M7 1L1 7L7 13\"\n stroke=\"#4062E5\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n }\n nextLabel={\n <svg\n width=\"8\"\n height=\"14\"\n viewBox=\"0 0 8 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M1 1L7 7L1 13\"\n stroke=\"#4062E5\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n }\n breakLabel={\n <svg\n width=\"16\"\n height=\"4\"\n viewBox=\"0 0 16 4\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"2.5\" cy=\"2\" r=\"1.75\" fill=\"#4062E5\" />\n <circle cx=\"8\" cy=\"2\" r=\"1.75\" fill=\"#4062E5\" />\n <circle cx=\"13.5\" cy=\"2\" r=\"1.75\" fill=\"#4062E5\" />\n </svg>\n }\n onPageChange={(event) => onPageChange(event.selected + 1)}\n pageRangeDisplayed={pageRangeDisplayed}\n marginPagesDisplayed={1}\n pageCount={totalPages}\n forcePage={currentPage - 1}\n containerClassName=\"flex items-center gap-2\"\n pageClassName=\"min-w-[32px] w-auto h-[32px] flex items-center justify-center rounded-md\"\n pageLinkClassName=\"w-full h-full flex items-center justify-center text-[#4062E5] hover:bg-[#ECEFFC] rounded-md cursor-pointer\"\n activeClassName=\"bg-[#4062E5] rounded-md cursor-default pointer-events-none\"\n activeLinkClassName=\"text-white\"\n previousClassName=\"min-w-[32px] w-auto h-[32px] flex items-center justify-center rounded-md\"\n previousLinkClassName=\"w-full h-full flex items-center justify-center pagination-color hover:bg-[#ECEFFC] rounded-md cursor-pointer disabled:text-gray-300\"\n nextClassName=\"min-w-[32px] w-auto h-[32px] flex items-center justify-center rounded-md\"\n nextLinkClassName=\"w-full h-full flex items-center justify-center pagination-color hover:bg-[#ECEFFC] rounded-md cursor-pointer disabled:text-gray-300\"\n breakClassName=\"w-10 h-10 flex items-center justify-center text-gray-500 font-bold\"\n disabledClassName=\"opacity-50 cursor-not-allowed\"\n />\n );\n};\n\nexport default Pagination;\n","import { twMerge } from \"tailwind-merge\";\nimport InfoIcon from \"../assets/info.svg\";\nimport DateRangePicker from \"../inputs/DateRange\";\nimport { TableHeaderProps } from \"./DynamicTable\";\n\nconst TableHeader: React.FC<TableHeaderProps> = ({\n toggleFilterPanel,\n isFilterPanelVisible,\n iconHeader,\n title,\n isExport,\n handleExport,\n isExporting,\n hasTooltip = false,\n isSimpleMode = false,\n tooltipMessage = \"This tab shows faxes received on the ChartRequest's retrieval fax line, 661-208-3159\",\n isButtonAvailable = true,\n isFilterVisible = false,\n isUseDateRange = false,\n isShowDateRange = false,\n dateRangeApplyFunc = (start_date, end_date) =>\n console.log(start_date, end_date),\n setIsShowDateRange,\n exportTooltipMessage = \"Select a date range to export data. The maximum allowed range is 1 year\",\n exportTooltipClass = \"left-2 \",\n hasMiddleHeaderCustomComponent = false,\n middleHeaderCustomComponent,\n rightHeaderClass = \"space-x-4\",\n dateRangeClass = \"\",\n customClass,\n}) => {\n return (\n <div className=\"h-[44px] w-full relative rounded-tl-[8px] rounded-tr-[8px] border bg-[#F5F7FE] flex px-[16px] py-[8px] justify-between items-center gap-4 border-[#C6D0F7] \">\n {customClass}\n <div className=\"flex items-center space-x-2 text-[#131414]\">\n {iconHeader}\n <span className=\"text-[14px] font-semibold text-content\">{title}</span>\n {hasTooltip && (\n <span\n className=\"relative group inline-flex items-center\" // Use inline-flex to align with text/elements\n >\n <img\n src={InfoIcon}\n alt=\"Info\"\n width={12}\n height={12}\n className=\"pt-[1px]\"\n />\n <div\n className=\"absolute left-full ml-2 top-1/2 -translate-y-1/2 z-10 hidden group-hover:block rounded-md bg-black text-white text-xs p-3 shadow-lg max-w-xs\" // Increased padding, max-width\n style={{ width: \"280px\", lineHeight: \"1.4\" }}\n >\n <div className=\"absolute right-full top-1/2 -translate-y-1/2 w-3 h-3 bg-black rotate-45 -mr-1.5\"></div>\n {tooltipMessage}\n </div>\n </span>\n )}\n </div>\n\n <div className={`flex items-center h-[28px] ${rightHeaderClass}`}>\n {setIsShowDateRange && (\n <span\n className={`relative group inline-flex ${exportTooltipClass} items-center ${\n !isButtonAvailable ? \"opacity-50\" : \"\"\n }`}\n >\n <img\n src={InfoIcon}\n alt=\"Info\"\n width={12}\n height={12}\n className=\"pt-[1px]\"\n />\n <div\n className=\"absolute right-5 ml-2 top-1/2 -translate-y-1/2 z-10 hidden group-hover:block rounded-md bg-black text-white text-xs p-2 shadow-lg max-w-xs\" // Increased padding, max-width\n style={{ width: \"280px\", lineHeight: \"1.4\" }}\n >\n <div className=\"absolute left-full top-1/2 -translate-y-1/2 w-3 h-3 bg-black rotate-45 -ml-1.5\"></div>\n {exportTooltipMessage}\n </div>\n </span>\n )}\n {isExporting && (\n <svg className=\"animate-spin h-5 w-10 text-white\" viewBox=\"0 0 24 24\">\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n ></circle>\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8v8H4z\"\n ></path>\n </svg>\n )}\n {isExport && !isExporting && (\n <button\n className={`font-semibold text-[14px] bg-transparent text-primary border-base-200 ${\n !isButtonAvailable ? \"opacity-50\" : \"\"\n }`}\n onClick={() => {\n if (!isButtonAvailable) return;\n handleExport?.();\n }}\n >\n Export\n </button>\n )}\n {isUseDateRange && isFilterVisible && (\n <div className={twMerge(\"absolute right-[141px] \", dateRangeClass)}>\n <DateRangePicker\n start_date={\"\"}\n end_date={\"\"}\n isDateRangeOnly\n dateFunc={(startDate, endDate) => {\n dateRangeApplyFunc(startDate, endDate);\n }}\n dateRangeClass=\"right-0 top-[11px]\"\n autoOpen={isShowDateRange}\n setIsShowDateRange={setIsShowDateRange}\n />\n </div>\n )}\n {\n <div\n className={`${hasMiddleHeaderCustomComponent ? \"block\" : \"hidden\"}`}\n >\n {middleHeaderCustomComponent}\n </div>\n }\n {!isSimpleMode && isFilterVisible && (\n <button\n onClick={() => {\n if (!isButtonAvailable) return;\n toggleFilterPanel?.();\n }}\n className={`px-[8px] py-[4px] rounded-[4px] border font-semibold text-[14px] ${\n !isButtonAvailable ? \"opacity-50\" : \"\"\n } filter-serach-hover\n ${\n isFilterPanelVisible\n ? \"filter-serach-button\"\n : \"bg-white text-primary border-base-200\"\n }`}\n >\n Filter & Search\n </button>\n )}\n </div>\n </div>\n );\n};\nexport default TableHeader;\n","import React from \"react\";\nimport NoData from \"../assets/noData.png\";\nimport Pagination from \"./Pagination\";\nimport TableHeader from \"./TableHeader\";\n// 1. Set interface TableData, FilterState, TableProps\nexport interface Column {\n name: string;\n selector: string;\n width: string;\n sortable?: boolean;\n isJustifyBetween?: boolean;\n isLineHeight?: boolean;\n isCenteredText?: boolean;\n className?: string;\n iconClassName?: string;\n tableHeaderFontSize?: string;\n}\nexport interface TableHeaderProps {\n toggleFilterPanel?: () => void;\n isFilterPanelVisible?: boolean;\n iconHeader?: React.ReactNode;\n title?: string;\n isExport?: boolean;\n handleExport?: () => void;\n isExporting?: boolean | undefined;\n hasTooltip?: boolean;\n tooltipMessage?: string;\n isSimpleMode?: boolean;\n isButtonAvailable?: boolean;\n isFilterVisible?: boolean;\n isUseDateRange?: boolean;\n isShowDateRange?: boolean;\n setIsShowDateRange?: () => void;\n dateRangeApplyFunc?: (start_date: string, end_date: string) => void;\n exportTooltipMessage?: string;\n exportTooltipClass?: string;\n hasMiddleHeaderCustomComponent?: boolean;\n middleHeaderCustomComponent?: React.ReactElement;\n rightHeaderClass?: string;\n dateRangeClass?: string;\n customClass?: string;\n}\n\ninterface TableHeaderCustom {\n tableHeaderHeight?: string;\n}\ninterface TableData {\n id?: string | number;\n [key: string]: any; // Allow for flexible data properties\n}\n\ninterface PaginationProps {\n totalPage: number;\n currentPage: number;\n handlePageChange: (page: number) => void;\n handleRowsPerPageChange: (page: number) => void;\n page: number;\n per_page: number;\n totalItems: number;\n}\n\ninterface DynamicTableProps {\n columns: Column[];\n tableData: TableData[];\n handleSort: (selector: string) => void;\n pagination: PaginationProps;\n mainTableHeader: TableHeaderProps;\n tableHeaderCustom?: TableHeaderCustom;\n isLoading: boolean;\n isError: boolean;\n tableHeader?: (\n column: Column,\n columnIndex: number,\n sortData: (selector: string) => void\n ) => React.ReactNode;\n tableBody?: (item: TableData, column: Column, columnIndex: number) => any;\n noDataMessage?: string;\n}\n\nconst DynamicTable: React.FC<DynamicTableProps> = ({\n columns,\n tableData,\n handleSort,\n pagination,\n isLoading,\n isError,\n tableBody,\n mainTableHeader,\n tableHeaderCustom,\n noDataMessage = \"No QA requests were found!\",\n}) => {\n const NoDataComponent = () => (\n <div className=\"flex flex-col justify-center items-center h-[53.2vh]\">\n <span>\n <img src={NoData} alt={\"No Data\"} width={100} height={100} />\n </span>\n <span className=\"text-gray-500 text-sm\">{noDataMessage}</span>\n </div>\n );\n\n return (\n <div className=\"relative flex flex-col grow w-full bg-white rounded-[8px]\">\n <TableHeader\n iconHeader={mainTableHeader.iconHeader}\n isFilterPanelVisible={mainTableHeader.isFilterPanelVisible}\n toggleFilterPanel={mainTableHeader.toggleFilterPanel}\n title={mainTableHeader.title}\n isExport={mainTableHeader.isExport}\n handleExport={mainTableHeader.handleExport}\n isExporting={mainTableHeader.isExporting}\n hasTooltip={mainTableHeader.hasTooltip}\n tooltipMessage={mainTableHeader.tooltipMessage}\n isButtonAvailable={mainTableHeader.isButtonAvailable}\n hasMiddleHeaderCustomComponent={\n mainTableHeader.hasMiddleHeaderCustomComponent\n }\n middleHeaderCustomComponent={\n mainTableHeader.middleHeaderCustomComponent\n }\n />\n {\n <div className=\"relative min-w-full bg-white bg-gray-50 border-l border-r border-b rounded-bl-[8px] rounded-br-[8px] p-6 pt-0 pl-0 pr-0 border-[#C6D0F7]\">\n {\n <table className=\"min-w-full divide-y divide-gray-200 shadow-sm table-fixed\">\n <thead className=\"border-b-2\">\n <tr>\n {columns.map((column, columnIndex) => (\n <th\n key={column.name}\n scope=\"col\"\n className={`px-1 pb-[7.5px] ${\n tableHeaderCustom?.tableHeaderHeight !== undefined\n ? tableHeaderCustom.tableHeaderHeight\n : \"h-[42px]\"\n } text-left tracking-wider cursor-pointer break-all ${\n column.isLineHeight && \"line-height-1\"\n } ${columnIndex === 0 ? \"pl-[24px]\" : \"\"} ${\n columnIndex === columns.length - 1 ? \"pr-[24px]\" : \"\"\n }`}\n style={{\n width: column.width,\n verticalAlign: \"bottom\",\n }}\n onClick={() =>\n column.sortable && handleSort(column.selector)\n }\n >\n <div\n className={`flex ${\n column.isJustifyBetween && \"justify-between\"\n } ${\n column.isJustifyBetween &&\n column.className !== undefined\n ? column.className\n : \"\"\n } items-center`}\n >\n {column.selector === \"checkbox\" ? (\n // This checkbox logic would typically be managed by the parent component\n <input type=\"checkbox\" className=\"cursor-pointer\" />\n ) : (\n <>\n <span\n className={`${\n column.isCenteredText &&\n \"h-[25px] flex flex-center\"\n } items-center text-[12px] font-semibold text-[#131414]`}\n >\n {column.name}\n </span>\n {column.sortable && (\n <span\n className={`inline-block ml-2 ${\n column.iconClassName ?? \"\"\n }`}\n >\n <svg\n width=\"8\"\n height=\"12\"\n viewBox=\"0 0 8 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M3.99994 1.88667L6.11328 4L7.05328 3.06L3.99994 0L0.939941 3.06L1.88661 4L3.99994 1.88667ZM3.99994 10.1133L1.88661 8L0.946608 8.94L3.99994 12L7.05994 8.94L6.11328 8L3.99994 10.1133Z\"\n fill=\"#323232\"\n />\n </svg>\n </span>\n )}\n </>\n )}\n </div>\n </th>\n ))}\n </tr>\n </thead>\n {!isLoading && (\n <tbody className=\"bg-white divide-y divide-gray-200\">\n {tableData.map((item, index) => (\n <tr key={index}>\n {columns.map((column, columnIndex) => (\n <td\n key={column.selector}\n className={`px-1 py-[5px] whitespace-normal text-[12px] font-normal items-center text-[#131414] break-all ${\n columnIndex === 0 ? \"pl-[24px]\" : \"\"\n } ${\n columnIndex === columns.length - 1\n ? \"pr-[24px]\"\n : \"\"\n }`}\n style={{ width: column.width, minHeight: \"45px\" }}\n >\n {/* Render custom body content if provided, otherwise default to item property */}\n {tableBody\n ? tableBody(item, column, columnIndex)\n : item[column.selector as keyof TableData]}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n )}\n </table>\n }\n {(isError || tableData.length === 0) && !isLoading && (\n <div className=\"container mx-auto overflow-x-auto \">\n <NoDataComponent />\n </div>\n )}\n {isLoading && (\n <div\n className=\"container mx-auto overflow-x-auto \"\n style={{ borderColor: \"rgba(64, 98, 229, 0.2)\" }}\n >\n <div className=\"flex justify-center items-center h-[53.2vh]\">\n <div className=\"animate-spin rounded-full h-10 w-10 border-b-2 border-primary\"></div>\n </div>\n </div>\n )}\n {tableData && tableData.length > 0 && !isLoading && (\n <div className=\"flex items-center justify-between px-4 py-3 bg-white\">\n <div className=\"flex items-center gap-2\">\n <Pagination\n totalPages={pagination.totalPage}\n currentPage={pagination.page}\n onPageChange={pagination.handlePageChange}\n />\n </div>\n\n <div className=\"flex items-center justify-center gap-2\">\n <span\n className=\"text-[12px] font-normal text-[#131414]\"\n style={{ marginTop: \"3px\" }}\n >\n Rows Per Page:\n </span>\n\n <div className=\"relative\">\n <select\n value={pagination.per_page}\n onChange={(e) =>\n pagination.handleRowsPerPageChange(Number(e.target.value))\n }\n className=\"appearance-none border broder-1 rounded-[2px] gap-2px pr-[2px] pt-[1px] pl-[8px] h-[20px] w-[50px]\"\n style={{\n borderColor: \"#E0E1E6\",\n fontSize: \"12px\",\n }}\n >\n <option value={10}>10</option>\n <option value={20}>20</option>\n <option value={50}>50</option>\n <option value={100}>100</option>\n </select>\n <div className=\"absolute right-[5px] bottom-1/2 top-1/2 pt-[5px] transform -translate-y-1/2 w-3 h-3 text-gray-400 pointer-events-none\">\n <svg\n width=\"10\"\n height=\"5\"\n viewBox=\"0 0 10 5\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M0.833313 0.333496L4.99998 4.50016L9.16665 0.333496H0.833313Z\"\n fill=\"#131414\"\n />\n </svg>\n </div>\n </div>\n <div\n className=\"bg-[#B5BAC4] h-[16px] w-[1px] self-center\"\n style={{ marginTop: \"1px\" }}\n ></div>\n <span\n className=\"text-[12px] font-normal text-[#131414]\"\n style={{ marginTop: \"3px\" }}\n >\n {`${\n (pagination.page - 1) * pagination.per_page + 1\n } - ${Math.min(\n pagination.page * pagination.per_page,\n pagination.totalItems\n )} of ${pagination.totalItems}`}\n </span>\n </div>\n </div>\n )}\n </div>\n }\n </div>\n );\n};\n\nexport default DynamicTable;\n","import React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { twMerge } from \"tailwind-merge\";\nimport NoData from \"../assets/noData.png\";\nimport { Column, TableHeaderProps } from \"./DynamicTable\";\nimport Pagination from \"./Pagination\";\nimport TableHeader from \"./TableHeader\";\n\n// 1. Set interface TableData, FilterState, TableProps\ninterface TableBodyDesign {\n className?: string;\n}\ninterface TableHeaderCustom {\n tableHeaderHeight?: string;\n px?: string;\n toggleAll?: () => void;\n isIndeterminate?: boolean;\n isAllSelected?: boolean;\n}\ninterface TableData {\n id?: string | number;\n [key: string]: any; // Allow for flexible data properties\n}\n\ninterface PaginationProps {\n totalPage: number;\n currentPage: number;\n handlePageChange: (page: number) => void;\n handleRowsPerPageChange: (page: number) => void;\n page: number;\n per_page: number;\n totalItems: number;\n pageRangeDisplayed?: number;\n}\n\ninterface DynamicTableV2Props {\n columns: Column[];\n tableData: TableData[];\n handleSort: (selector: string) => void;\n pagination: PaginationProps;\n mainTableHeader: TableHeaderProps;\n tableHeaderCustom?: TableHeaderCustom;\n isLoading: boolean;\n isError: boolean;\n tableHeader?: (\n column: Column,\n columnIndex: number,\n sortData: (selector: string) => void\n ) => React.ReactNode;\n tableBody?: (item: TableData, column: Column, columnIndex: number) => any;\n tableRow?: (\n item: TableData,\n index: number\n ) => React.HTMLAttributes<HTMLTableRowElement>;\n noDataMessage?: string;\n noDataMessageHeader?: string;\n noDataMessageImage?: React.ReactNode;\n noDataMessageImageSize?: number;\n tableBodyDesign?: TableBodyDesign;\n hasAnotherScreen?: boolean;\n anotherScreenComponent?: any;\n isSimpleMode?: boolean;\n loadAndErrorHeight?: string;\n isDisableTableHeader?: boolean;\n isShowDateRange?: boolean;\n tableClass?: string;\n}\n\nconst DynamicTableV2: React.FC<DynamicTableV2Props> = ({\n columns,\n tableData,\n handleSort,\n pagination,\n isLoading,\n isError,\n tableBody,\n tableRow,\n mainTableHeader,\n tableHeaderCustom,\n noDataMessageHeader = \"\",\n noDataMessage = \"No requestor payments were found!\",\n noDataMessageImage,\n noDataMessageImageSize = 64,\n tableBodyDesign,\n hasAnotherScreen = false,\n isSimpleMode = false,\n anotherScreenComponent,\n loadAndErrorHeight = \"h-[53.2vh]\",\n isDisableTableHeader = false,\n tableClass = \"\",\n}) => {\n const tableRef = useRef<HTMLTableElement>(null);\n const paginationRef = useRef<HTMLDivElement>(null);\n const [tableHeight, setTableHeight] = useState<number>(0);\n\n const calculateHeight = useCallback(() => {\n const tableEl = tableRef.current;\n const paginationEl = paginationRef.current;\n if (!tableEl) return;\n let totalHeight = tableEl.offsetHeight;\n if (paginationEl && !isSimpleMode && tableData.length > 0 && !isLoading) {\n totalHeight += paginationEl.offsetHeight;\n }\n\n setTableHeight(totalHeight);\n }, [isSimpleMode, tableData.length, isLoading]);\n\n useEffect(() => {\n const tableEl = tableRef.current;\n const paginationEl = paginationRef.current;\n if (!tableEl) return;\n const observer = new ResizeObserver(() => {\n setTimeout(calculateHeight, 0);\n });\n observer.observe(tableEl);\n if (paginationEl && !isSimpleMode && tableData.length > 0 && !isLoading) {\n observer.observe(paginationEl);\n }\n setTimeout(calculateHeight, 0);\n return () => {\n observer.disconnect();\n };\n }, [calculateHeight, isSimpleMode, tableData.length, isLoading]);\n\n useEffect(() => {\n const timeoutId = setTimeout(() => {\n calculateHeight();\n }, 100);\n\n return () => clearTimeout(timeoutId);\n }, [pagination.page, pagination.per_page, calculateHeight]);\n\n useEffect(() => {\n const tableEl = tableRef.current;\n const paginationEl = paginationRef.current;\n\n if (!tableEl || !paginationEl) return;\n\n const updateHeight = () => {\n const totalHeight = tableEl.offsetHeight + paginationEl.offsetHeight;\n setTableHeight(totalHeight);\n };\n\n const observer = new ResizeObserver(updateHeight);\n observer.observe(tableEl);\n observer.observe(paginationEl);\n\n return () => {\n observer.disconnect();\n };\n }, []);\n\n const NoDataComponent = () => (\n <div\n className={`flex flex-col justify-center items-center ${loadAndErrorHeight}`}\n >\n <span>\n {noDataMessageImage ? (\n noDataMessageImage\n ) : (\n <img\n src={NoData}\n alt={\"No Data\"}\n width={noDataMessageImageSize}\n height={noDataMessageImageSize}\n />\n )}\n </span>\n <span className=\"font-semibold text-[20px]\">{noDataMessageHeader}</span>\n <span className=\"text-gray-500 text-sm\">{noDataMessage}</span>\n </div>\n );\n\n return (\n <div className=\"relative flex flex-col grow w-full bg-white rounded-[8px]\">\n <TableHeader\n iconHeader={mainTableHeader.iconHeader}\n isFilterPanelVisible={mainTableHeader.isFilterPanelVisible}\n toggleFilterPanel={mainTableHeader.toggleFilterPanel}\n title={mainTableHeader.title}\n isExport={mainTableHeader.isExport}\n handleExport={mainTableHeader.handleExport}\n isExporting={mainTableHeader.isExporting}\n hasTooltip={mainTableHeader.hasTooltip}\n tooltipMessage={mainTableHeader.tooltipMessage}\n isSimpleMode={isSimpleMode}\n isButtonAvailable={mainTableHeader.isButtonAvailable}\n isFilterVisible={mainTableHeader.isFilterVisible}\n isUseDateRange={mainTableHeader.isUseDateRange}\n isShowDateRange={mainTableHeader.isShowDateRange}\n dateRangeApplyFunc={mainTableHeader.dateRangeApplyFunc}\n setIsShowDateRange={mainTableHeader.setIsShowDateRange}\n exportTooltipMessage={mainTableHeader.exportTooltipMessage}\n exportTooltipClass={mainTableHeader.exportTooltipClass}\n rightHeaderClass={mainTableHeader.rightHeaderClass}\n hasMiddleHeaderCustomComponent={\n mainTableHeader.hasMiddleHeaderCustomComponent\n }\n middleHeaderCustomComponent={\n mainTableHeader.middleHeaderCustomComponent\n }\n dateRangeClass={mainTableHeader.dateRangeClass}\n customClass={mainTableHeader.customClass}\n />\n <div\n className={twMerge(\n `flex w-full h-full bg-white bg-gray-50 border-l border-r border-b rounded-bl-[8px] rounded-br-[8px] pt-0 pl-0 pr-0 border-[#C6D0F7] ${\n isSimpleMode && \"overflow-hidden\"\n }`,\n tableClass\n )}\n >\n {\n <div className=\"relative min-w-0 flex-1 border-r-[1px]\">\n {\n <table\n ref={tableRef}\n className=\"min-w-full divide-y divide-gray-200 shadow-sm table-auto\"\n >\n {!isDisableTableHeader && (\n <thead className=\"border-b-2\">\n <tr>\n {columns.map((column, columnIndex) => (\n <th\n key={column.name}\n scope=\"col\"\n className={`${\n tableHeaderCustom?.px ?? \"px-1\"\n } pb-[7.5px] ${\n tableHeaderCustom?.tableHeaderHeight !== undefined\n ? tableHeaderCustom.tableHeaderHeight\n : \"h-[42px]\"\n } text-left tracking-wider cursor-pointer break-all ${\n column.isLineHeight && \"line-height-1\"\n } ${columnIndex === 0 ? \"pl-[24px]\" : \"\"} ${\n columnIndex === columns.length - 1\n ? \"pr-[24px]\"\n : \"\"\n }`}\n style={{\n width: column.width,\n verticalAlign: \"bottom\",\n }}\n onClick={() =>\n column.sortable && handleSort(column.selector)\n }\n >\n <div\n className={`flex ${\n column.isJustifyBetween && \"justify-between\"\n } ${\n column.isJustifyBetween &&\n column.className !== undefined\n ? column.className\n : \"\"\n } items-center`}\n >\n {column.selector === \"checkbox\" ? (\n <input\n type=\"checkbox\"\n checked={\n tableHeaderCustom?.isAllSelected ?? false\n }\n ref={(input) => {\n if (input) {\n input.indeterminate =\n tableHeaderCustom?.isIndeterminate ??\n false;\n }\n }}\n onChange={tableHeaderCustom?.toggleAll}\n className=\"cursor-pointer absolute top-6\"\n />\n ) : (\n <>\n <span\n className={`${\n column.isCenteredText &&\n \"h-[25px] flex flex-center\"\n } items-center ${\n column.tableHeaderFontSize\n ? column.tableHeaderFontSize\n : \"text-[12px]\"\n } font-semibold text-[#131414]`}\n >\n {column.name}\n </span>\n {column.sortable && (\n <span className=\"inline-block ml-2\">\n <svg\n width=\"8\"\n height=\"12\"\n viewBox=\"0 0 8 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M3.99994 1.88667L6.11328 4L7.05328 3.06L3.99994 0L0.939941 3.06L1.88661 4L3.99994 1.88667ZM3.99994 10.1133L1.88661 8L0.946608 8.94L3.99994 12L7.05994 8.94L6.11328 8L3.99994 10.1133Z\"\n fill=\"#323232\"\n />\n </svg>\n </span>\n )}\n </>\n )}\n </div>\n </th>\n ))}\n </tr>\n </thead>\n )}\n {!isLoading && (\n <tbody className=\"bg-white divide-y divide-gray-200\">\n {tableData.map((item, index) => {\n // Get custom row attributes if tableRow function is provided\n const rowProps = tableRow ? tableRow(item, index) : {};\n\n return (\n <tr\n key={index}\n {...rowProps}\n className={rowProps.className || \"\"}\n >\n {columns.map((column, columnIndex) => (\n <td\n key={column.selector}\n className={`px-1 py-[5px] whitespace-normal text-[12px] font-normal items-center text-[#131414] break-all ${\n columnIndex === 0 ? \"pl-[24px]\" : \"\"\n } ${\n columnIndex === columns.length - 1\n ? \"pr-[24px]\"\n : \"\"\n }\n ${\n index === tableData.length - 1\n ? \"\"\n : tableBodyDesign?.className ?? \"\"\n }\n `}\n style={{ width: column.width, minHeight: \"45px\" }}\n >\n {/* Render custom body content if provided, otherwise default to item property */}\n {tableBody\n ? tableBody(item, column, columnIndex)\n : item[column.selector as keyof TableData]}\n </td>\n ))}\n </tr>\n );\n })}\n </tbody>\n )}\n </table>\n }\n {(isError || tableData.length === 0) && !isLoading && (\n <div className=\"container mx-auto overflow-x-auto \">\n <NoDataComponent />\n </div>\n )}\n {isLoading && (\n <div\n className=\"container mx-auto overflow-x-auto \"\n style={{ borderColor: \"rgba(64, 98, 229, 0.2)\" }}\n >\n <div\n className={`flex justify-center items-center ${loadAndErrorHeight}`}\n >\n <div className=\"animate-spin rounded-full h-10 w-10 border-b-2 border-primary\"></div>\n </div>\n </div>\n )}\n {tableData &&\n tableData.length > 0 &&\n !isLoading &&\n !isSimpleMode && (\n <div\n ref={paginationRef}\n className=\"flex items-center justify-between px-4 py-3 bg-white border-b-1 rounded-bl-[8px]\"\n >\n <div className=\"flex items-center gap-2\">\n <Pagination\n totalPages={pagination.totalPage}\n currentPage={pagination.page}\n onPageChange={pagination.handlePageChange}\n pageRangeDisplayed={pagination.pageRangeDisplayed}\n />\n </div>\n\n <div className=\"flex items-center justify-center gap-2\">\n <span\n className=\"text-[12px] font-normal text-[#131414]\"\n style={{ marginTop: \"3px\" }}\n >\n Rows Per Page:\n </span>\n\n <div className=\"relative\">\n <select\n value={pagination.per_page}\n onChange={(e) =>\n pagination.handleRowsPerPageChange(\n Number(e.target.value)\n )\n }\n className=\"appearance-none border broder-1 rounded-[2px] gap-2px pr-[2px] pt-[1px] pl-[8px] h-[20px] w-[50px]\"\n style={{\n borderColor: \"#E0E1E6\",\n fontSize: \"12px\",\n }}\n >\n <option value={10}>10</option>\n <option value={20}>20</option>\n <option value={50}>50</option>\n <option value={100}>100</option>\n </select>\n <div className=\"absolute right-[5px] bottom-1/2 top-1/2 pt-[5px] transform -translate-y-1/2 w-3 h-3 text-gray-400 pointer-events-none\">\n <svg\n width=\"10\"\n height=\"5\"\n viewBox=\"0 0 10 5\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M0.833313 0.333496L4.99998 4.50016L9.16665 0.333496H0.833313Z\"\n fill=\"#131414\"\n />\n </svg>\n </div>\n </div>\n <div\n className=\"bg-[#B5BAC4] h-[16px] w-[1px] self-center\"\n style={{ marginTop: \"1px\" }}\n ></div>\n <span\n className=\"text-[12px] font-normal text-[#131414]\"\n style={{ marginTop: \"3px\" }}\n >\n {`${\n (pagination.page - 1) * pagination.per_page + 1\n } - ${Math.min(\n pagination.page * pagination.per_page,\n pagination.totalItems\n )} of ${pagination.totalItems}`}\n </span>\n </div>\n </div>\n )}\n </div>\n }\n <div\n className={`min-w-0 border-[#E2E2E2] flex-1 ${\n !hasAnotherScreen ? \"hidden\" : \"\"\n }`}\n style={{\n maxHeight: `${tableHeight <= 100 ? 540 : tableHeight}px`,\n minHeight: \"490px\",\n }}\n >\n {anotherScreenComponent ?? <div></div>}\n </div>\n </div>\n </div>\n );\n};\n\nexport default DynamicTableV2;\n","import { useEffect, useState } from \"react\";\nimport WarningImage from \"../assets/warning.png\";\ninterface ErrorToastProps {\n message?: string;\n onClose?: () => void;\n autoClose?: boolean;\n autoCloseDelay?: number;\n isVisible?: boolean;\n}\n\nconst ErrorToast = ({\n message = \"Request set as paid successfully!\",\n onClose,\n autoClose = false,\n autoCloseDelay = 125000,\n isVisible: externalIsVisible,\n}: ErrorToastProps) => {\n const [internalIsVisible, setInternalIsVisible] = useState(true);\n const [shouldRender, setShouldRender] = useState(true);\n const isVisible =\n externalIsVisible !== undefined ? externalIsVisible : internalIsVisible;\n\n useEffect(() => {\n if (!isVisible) {\n // Wait for fade-out transition to complete before unmounting\n const timeout = setTimeout(() => setShouldRender(false), 300);\n return () => clearTimeout(timeout);\n } else {\n setShouldRender(true); // Ensure it's rendered if visible\n }\n }, [isVisible]);\n\n useEffect(() => {\n if (autoClose && autoCloseDelay > 0 && isVisible) {\n const timer = setTimeout(() => {\n handleClose();\n }, autoCloseDelay);\n\n return () => clearTimeout(timer);\n }\n }, [autoClose, autoCloseDelay, isVisible]);\n\n const handleClose = () => {\n if (externalIsVisible === undefined) {\n setInternalIsVisible(false);\n }\n if (onClose) {\n onClose();\n }\n };\n\n if (!shouldRender) return null;\n\n return (\n <div\n className={`fixed top-[70px] right-0 transform z-50 transition-opacity duration-300 ${\n isVisible ? \"opacity-100\" : \"opacity-0\"\n }`}\n >\n <div className=\"flex justify-start items-center bg-[#FFE2E2] rounded-[6px] h-[48px] shadow-lg w-auto border-l-[6px] border-[#E7322C]\">\n <div className=\"w-[5px]\" />\n <img src={WarningImage} alt=\"warning\" height={18} width={18} />\n <p className=\"text-[#131414] pl-[8px] pr-[17px] font-semibold text-[14px]\">\n {message}\n </p>\n <button onClick={handleClose} aria-label=\"Close notification\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"17.5\"\n height=\"17.5\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n >\n <path\n d=\"M11.0837 3.739L10.2612 2.9165L7.00033 6.17734L3.73949 2.9165L2.91699 3.739L6.17783 6.99984L2.91699 10.2607L3.73949 11.0832L7.00033 7.82234L10.2612 11.0832L11.0837 10.2607L7.82283 6.99984L11.0837 3.739Z\"\n fill=\"#4B5563\"\n />\n </svg>\n </button>\n </div>\n </div>\n );\n};\n\nexport default ErrorToast;\n","import { useEffect, useState } from \"react\";\nimport CheckImage from \"../assets/check.png\";\ninterface SuccessToastProps {\n message?: string;\n onClose?: () => void;\n autoClose?: boolean;\n autoCloseDelay?: number;\n isVisible?: boolean;\n}\n\nconst SuccessToast = ({\n message = \"Request set as paid successfully!\",\n onClose,\n autoClose = false,\n autoCloseDelay = 125000,\n isVisible: externalIsVisible,\n}: SuccessToastProps) => {\n const [internalIsVisible, setInternalIsVisible] = useState(true);\n const [shouldRender, setShouldRender] = useState(true);\n const isVisible =\n externalIsVisible !== undefined ? externalIsVisible : internalIsVisible;\n\n useEffect(() => {\n if (!isVisible) {\n // Wait for fade-out transition to complete before unmounting\n const timeout = setTimeout(() => setShouldRender(false), 300);\n return () => clearTimeout(timeout);\n } else {\n setShouldRender(true); // Ensure it's rendered if visible\n }\n }, [isVisible]);\n\n useEffect(() => {\n if (autoClose && autoCloseDelay > 0 && isVisible) {\n const timer = setTimeout(() => {\n handleClose();\n }, autoCloseDelay);\n\n return () => clearTimeout(timer);\n }\n }, [autoClose, autoCloseDelay, isVisible]);\n\n const handleClose = () => {\n if (externalIsVisible === undefined) {\n setInternalIsVisible(false);\n }\n if (onClose) {\n onClose();\n }\n };\n\n if (!shouldRender) return null;\n\n return (\n <div\n className={`fixed top-[70px] right-0 transform z-50 transition-opacity duration-300 ${\n isVisible ? \"opacity-100\" : \"opacity-0\"\n }`}\n >\n <div className=\"flex justify-start items-center bg-[#C6F6D5] rounded-[6px] h-[48px] shadow-lg w-auto border-l-[6px] border-[#38A169]\">\n <div className=\"w-[5px]\" />\n <img src={CheckImage} alt=\"warning\" height={18} width={18} />\n <p className=\"text-[#131414] pl-[8px] pr-[17px] font-semibold text-[14px]\">\n {message}\n </p>\n <button onClick={handleClose} aria-label=\"Close notification\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"17.5\"\n height=\"17.5\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n >\n <path\n d=\"M11.0837 3.739L10.2612 2.9165L7.00033 6.17734L3.73949 2.9165L2.91699 3.739L6.17783 6.99984L2.91699 10.2607L3.73949 11.0832L7.00033 7.82234L10.2612 11.0832L11.0837 10.2607L7.82283 6.99984L11.0837 3.739Z\"\n fill=\"#4B5563\"\n />\n </svg>\n </button>\n </div>\n </div>\n );\n};\n\nexport default SuccessToast;\n","import { twMerge } from \"tailwind-merge\";\n\nexport type NavBarProps = {\n children?: React.ReactNode;\n wrapperClassName?: string;\n innerClassName?: string;\n} & React.HTMLAttributes<HTMLElement>; // allow props like onClick, id, aria-*\n\nconst NavBar = ({\n children,\n wrapperClassName,\n innerClassName,\n ...rest\n}: NavBarProps) => {\n return (\n <nav\n {...rest}\n className={twMerge(\n \"z-20 w-full px-4 shadow-navbar bg-white h-[80px]\",\n wrapperClassName\n )}\n >\n <div\n className={twMerge(\n \"h-[80px] flex justify-between items-center gap-2 px-4 py-1\",\n innerClassName\n )}\n >\n {children}\n </div>\n </nav>\n );\n};\n\nexport default NavBar;\n","import { twMerge } from \"tailwind-merge\";\n\ntype ModalProps = {\n isOpen: boolean;\n type?: \"left\" | \"right\" | \"center\";\n onClose?: () => void;\n widthClassName?: string;\n children?: React.ReactNode;\n overlayClassName?: string;\n modalClassName?: string;\n stayMounted?: boolean;\n};\n\nconst Modal = ({\n isOpen,\n type = \"right\",\n onClose,\n widthClassName = \"w-[300px]\",\n children,\n overlayClassName,\n modalClassName,\n stayMounted = false,\n}: ModalProps) => {\n if (!stayMounted && !isOpen) return null;\n\n let positionClasses = \"\";\n if (type === \"left\") {\n positionClasses = \"left-0 top-0 h-full\";\n } else if (type === \"right\") {\n positionClasses = \"right-0 top-0 h-full\";\n } else if (type === \"center\") {\n positionClasses =\n \"top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2\";\n }\n\n return (\n <>\n <div\n className={twMerge(\n \"fixed inset-0 bg-black bg-opacity-50 z-40\",\n stayMounted ? (isOpen ? \"block\" : \"hidden\") : \"block\",\n overlayClassName\n )}\n onClick={onClose}\n aria-hidden={!isOpen}\n />\n\n <div\n className={twMerge(\n `fixed bg-white shadow-xl z-50 transform transition-transform duration-300 ease-in-out ${positionClasses}`,\n stayMounted ? (isOpen ? \"block\" : \"hidden\") : \"block\",\n widthClassName,\n modalClassName\n )}\n role=\"dialog\"\n aria-modal=\"true\"\n >\n {children}\n </div>\n </>\n );\n};\n\nexport default Modal;\n","import { twMerge } from \"tailwind-merge\";\n\ntype PopupWrapperProps = {\n children?: React.ReactNode;\n className?: string;\n isOpen: boolean;\n stayMounted?: boolean;\n} & React.HTMLAttributes<HTMLElement>;\n\nconst PopupWrapper = ({\n children,\n className,\n isOpen = false,\n stayMounted = false,\n ...rest\n}: PopupWrapperProps) => {\n if (!stayMounted && !isOpen) return null;\n\n return (\n <div\n {...rest}\n className={twMerge(\n \"absolute right-0 top-1 mt-10 shadow-lg bg-white rounded-lg p-4 w-80 z-10 border border-opacity-10\",\n isOpen ? \"block\" : \"hidden\",\n className\n )}\n >\n {children}\n </div>\n );\n};\n\nexport default PopupWrapper;\n","import { twMerge } from \"tailwind-merge\";\n\nexport type LayoutProps = {\n children: React.ReactNode;\n wrapperClassName?: string;\n navClassName?: string;\n navProps?: React.HTMLAttributes<HTMLElement>;\n} & React.HTMLAttributes<HTMLDivElement>;\n\nconst SideNav = ({\n children,\n wrapperClassName,\n navClassName,\n navProps,\n ...rest\n}: LayoutProps) => {\n return (\n <div\n {...rest}\n className={twMerge(\n \"bg-base min-w-[260px] shadow-sidebar relative sm:flex flex-col justify-between h-screen max-h-screen\",\n wrapperClassName\n )}\n >\n <nav\n {...navProps}\n className={twMerge(\n \"relative flex flex-col w-full gap-1 px-4 pt-4\",\n navClassName,\n navProps?.className\n )}\n >\n {children}\n </nav>\n </div>\n );\n};\n\nexport default SideNav;\n","import React from \"react\";\nimport { twMerge } from \"tailwind-merge\";\n\ninterface BoxProps extends React.HTMLAttributes<HTMLDivElement> {\n className?: string;\n children?: React.ReactNode;\n}\n\nconst Box: React.FC<BoxProps> = ({ className = \"\", children, ...rest }) => {\n return (\n <div\n {...rest}\n className={twMerge(\n \"border border-[1px] border-[#C4CFF6] rounded-[8px] min-h-[10px] bg-white\",\n className\n )}\n >\n {children}\n </div>\n );\n};\n\nexport default Box;\n","import React from \"react\";\nimport { twMerge } from \"tailwind-merge\";\n\ninterface BoxHeaderProps extends React.HTMLAttributes<HTMLDivElement> {\n className?: string;\n children?: React.ReactNode;\n}\n\nconst BoxHeader: React.FC<BoxHeaderProps> = ({\n className = \"\",\n children,\n ...rest\n}) => {\n return (\n <div\n {...rest}\n className={twMerge(\n \"h-[40px] w-full bg-[#F5F7FE] px-2 flex items-center border-b border-[#C4CFF6] rounded-tr-[8px] rounded-tl-[8px]\",\n className\n )}\n >\n {children}\n </div>\n );\n};\n\nexport default BoxHeader;\n","import React from \"react\";\nimport { twMerge } from \"tailwind-merge\";\n\ninterface BoxBodyProps extends React.HTMLAttributes<HTMLDivElement> {\n className?: string;\n children?: React.ReactNode;\n}\n\nconst BoxBody: React.FC<BoxBodyProps> = ({\n className = \"\",\n children,\n ...rest\n}) => {\n return (\n <div\n {...rest}\n className={twMerge(\n \"bg-white p-2 min-h-[20px] rounded-br-[8px] rounded-bl-[8px]\",\n className\n )}\n >\n {children}\n </div>\n );\n};\n\nexport default BoxBody;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,4BAAwB;AAQpB;AAFJ,IAAM,cAAc,CAAC,EAAE,WAAW,UAAU,GAAG,KAAK,MAAwB;AAC1E,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,eAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;AAEA,IAAO,sBAAQ;;;ACpBf,IAAAA,yBAAwB;AA2BlB,IAAAC,sBAAA;AAjBN,IAAM,iBAAiB,CAAC;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAa;AACX,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MAGA;AAAA;AAAA,UAAC;AAAA;AAAA,YACE,GAAG;AAAA,YACJ,WAAU;AAAA,YAEV;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,eAAW;AAAA,oBACT;AAAA,oBACA,SAAS,mBAAmB;AAAA,oBAC5B;AAAA,kBACF;AAAA,kBAEC;AAAA;AAAA,cACH;AAAA,cACA;AAAA,gBAAC;AAAA;AAAA,kBACC,eAAW;AAAA,oBACT;AAAA,oBACA,CAAC,UAAU;AAAA,kBACb;AAAA,kBACA,OAAM;AAAA,kBACN,QAAO;AAAA,kBACP,SAAQ;AAAA,kBACR,MAAK;AAAA,kBACL,OAAM;AAAA,kBAEN,uDAAC,UAAK,GAAE,oBAAmB,MAAK,WAAU;AAAA;AAAA,cAC5C;AAAA;AAAA;AAAA,QACF;AAAA,QAEA;AAAA,UAAC;AAAA;AAAA,YACC,eAAW;AAAA,cACT;AAAA,cACA,SAAS,8BAA8B;AAAA,YACzC;AAAA,YAEA,uDAAC,OAAE,eAAW,gCAAQ,2BAA2B,cAAc,GAC5D,4BACH;AAAA;AAAA,QACF;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,yBAAQ;;;ACrEf,IAAAC,yBAAwB;AAQpB,IAAAC,sBAAA;AAFJ,IAAM,SAAS,CAAC,EAAE,WAAW,UAAU,GAAG,KAAK,MAAmB;AAChE,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,eAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;AAEA,IAAO,iBAAQ;;;ACpBf,IAAAC,yBAAwB;A;;;;;ACAxB,IAAAC,yBAAwB;;;ACQpB,IAAAC,sBAAA;AARJ,IAAM,cAAc,CAAC,EAAE,SAAS,QAAQ,QAAQ,QAAQ,QAAQ,OAAO,MACrE;AAAA,EAAC;AAAA;AAAA,IACC,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA,SAAQ;AAAA,IACR,OAAM;AAAA,IAEN,uDAAC,UAAK,GAAE,0WAAyW;AAAA;AACnX;AAGF,IAAO,sBAAQ;;;ADoBD,IAAAC,sBAAA;AAtBd,IAAM,oBAAoB,CAAC;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAa;AACX,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACA,OAAO,EAAE,aAAa,UAAU;AAAA,MAEhC,wDAAC,SAAI,WAAU,iCACb;AAAA,sDAAC,SAAI,WAAU,wCACb;AAAA,uDAAC,SAAI,WAAU,8BACb;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO,EAAE,UAAU,OAAO;AAAA,cAE1B;AAAA,6DAAC,UAAK,WAAU,eAAc,OAAO,EAAE,eAAe,QAAQ,GAC3D,iBACH;AAAA,gBAEA;AAAA,kBAAC;AAAA;AAAA,oBACC,WAAU;AAAA,oBACV,OAAO,EAAE,KAAK,SAAS,MAAM,MAAM;AAAA,oBAEnC;AAAA;AAAA,wBAAC;AAAA;AAAA,0BACC,KAAK;AAAA,0BACL,KAAI;AAAA,0BACJ,OAAO;AAAA,0BACP,QAAQ;AAAA,0BACR,WAAU;AAAA;AAAA,sBACZ;AAAA,sBACA;AAAA,wBAAC;AAAA;AAAA,0BACC,WAAU;AAAA,0BACV,OAAO,EAAE,OAAO,QAAQ;AAAA,0BAEvB;AAAA;AAAA,4BACD,6CAAC,SAAI,WAAU,kFAAiF;AAAA;AAAA;AAAA,sBAClG;AAAA;AAAA;AAAA,gBACF;AAAA;AAAA;AAAA,UACF,GACF;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,SAAS;AAAA,cAET,wDAAC,SAAI,WAAU,2BACb;AAAA,6DAAC,uBAAY,QAAO,QAAO,OAAM,QAAO,OAAM,WAAU;AAAA,gBACxD,6CAAC,OAAE,WAAU,8BAA6B,qBAAO;AAAA,iBACnD;AAAA;AAAA,UACF;AAAA,WACF;AAAA,QAEA,6CAAC,SAAI,WAAU,QAAQ,iBAAM;AAAA,QAC7B,6CAAC,SAAI,WAAU,qCACb,uDAAC,SAAI,WAAU,qDAAoD,GACrE;AAAA,SACF;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,2BAAQ;;;AE7Ef,mBAUO;AACP,mBAAqD;AACrD,6BAAqB;AAmRf,IAAAC,sBAAA;AAxQN,aAAAC,MAAQ;AAAA,EACN;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,YAAY,CAAC;AAAA,EACjB;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,kBAAkB;AAAA,EAClB,kBAAkB;AACpB,MAAsB;AACpB,QAAM,eAAW,qBAAO,IAAI;AAC5B,QAAM,CAAC,UAAU,WAAW,QAAI,uBAAS,SAAS,KAAK,IAAI,CAAC,EAAE;AAG9D,8BAAU,MAAM;AACd,UAAM,eAAe,MAAM;AACzB,kBAAY,SAAS,KAAK,IAAI,CAAC,EAAE;AAAA,IACnC;AAEA,WAAO,iBAAiB,UAAU,YAAY;AAC9C,WAAO,MAAM;AACX,aAAO,oBAAoB,UAAU,YAAY;AAAA,IACnD;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,SAAS;AAEf,QAAM,SAAS;AAEf,QAAM,cAAU;AAAA,IACd,OAAO;AAAA,MACL,YAAY;AAAA,MACZ,qBAAqB;AAAA,MACrB,WAAW;AAAA,QACT,UAAU;AAAA,QACV,QAAQ;AAAA,MACV;AAAA,MACA,QAAQ;AAAA,QACN,SAAS,CAAC;AAAA,MACZ;AAAA,MACA,QAAQ;AAAA,QACN,GAAG;AAAA,UACD,SAAS;AAAA,UACT,MAAM;AAAA,YACJ,YAAY;AAAA,YACZ,WAAW;AAAA,YACX,iBAAiB;AAAA,UACnB;AAAA,QACF;AAAA,QACA,GAAG;AAAA,UACD,SAAS;AAAA,UACT,MAAM;AAAA,YACJ,YAAY;AAAA,YACZ,WAAW;AAAA,YACX,iBAAiB;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AAAA,MAEA,SAAS;AAAA,QACP,QAAQ,EAAE,SAAS,MAAM;AAAA,QACzB,SAAS;AAAA,UACP,SAAS;AAAA,UACT,UAAU,SAAU,SAAc;AAhG5C;AAiGY,gBAAI,YAAY,SAAS,eAAe,iBAAiB;AACzD,gBAAI,CAAC,WAAW;AACd,0BAAY,SAAS,cAAc,KAAK;AACxC,wBAAU,KAAK;AACf,wBAAU,YAAY;AACtB,uBAAS,KAAK,YAAY,SAAS;AAAA,YACrC;AAEA,kBAAM,eAAe,QAAQ;AAC7B,oBAAQ,MAAM,OAAO,MAAM,SACzB,aAAa,YAAY,IAAI,YAAY;AAC3C,gBAAI,aAAa,YAAY,GAAG;AAC9B,wBAAU,MAAM,UAAU;AAC1B;AAAA,YACF;AAEA,kBAAM,aAAY,kBAAa,eAAb,mBAA0B;AAC5C,kBAAM,QAAQ,uCAAW,OAAO;AAChC,kBAAMC,SAAQ,uCAAW;AACzB,kBAAM,YAAY;AAClB,kBAAM,WAAW,QAAQ,MAAM,OAAO,sBAAsB;AAC5D,sBAAU,MAAM,WAAW;AAC3B,sBAAU,MAAM,OAAO;AACvB,sBAAU,MAAM,MAAM;AACtB,sBAAU,MAAM,UAAU;AAC1B,sBAAU,MAAM,gBAAgB;AAChC,sBAAU,YAAY;AAAA;AAAA;AAAA,oDAGkBA,MAAK;AAAA;AAAA;AAAA;AAAA;AAAA,oBAKrC,eAAe,wCAAwC,KAAK;AAAA;AAAA;AAAA;AAAA;AAMpE,kBAAM,eAAe,UAAU;AAC/B,kBAAM,gBAAgB,UAAU;AAChC,kBAAM,SACJ,SAAS,OAAO,OAAO,cAAc,aAAa;AACpD,kBAAM,SACJ,SAAS,MAAM,OAAO,cAAc,aAAa;AACnD,kBAAM,cAAc,OAAO;AAC3B,kBAAM,kBAAkB,SAAS,eAAe;AAChD,kBAAM,mBAAmB,SAAS,eAAe;AACjD,gBAAI,mBAAmB;AACvB,gBAAI,cAAc;AAClB,gBAAI,kBAAkB,IAAI;AACxB,4BAAc,KAAK;AAAA,YACrB,WAAW,mBAAmB,cAAc,IAAI;AAC9C,4BAAc,cAAc,KAAK;AAAA,YACnC;AAEA,kBAAM,YAAY,kBAAkB;AACpC,kBAAM,YAAY,SAAS,gBAAgB,YAAY;AACvD,gCAAqB,SAAS,aAAa,eAAgB;AAC3D,+BAAmB,KAAK,IAAI,IAAI,KAAK,IAAI,IAAI,gBAAgB,CAAC;AAE9D,kBAAM,iBAAiB;AACvB,kBAAM,iBAAiB;AAEvB,kBAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAOR,gBAAgB;AAAA;AAAA;AAAA;AAAA,6BAIT,cAAc;AAAA,8BACb,cAAc;AAAA,4BAChB,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAOpB,gBAAgB;AAAA;AAAA;AAAA;AAAA,6BAIT,cAAc;AAAA,8BACb,cAAc;AAAA,4BAChB,cAAc;AAAA;AAAA;AAAA;AAAA,kDAIQA,MAAK;AAAA;AAAA;AAAA;AAAA;AAAA,kBAKrC,eAAe,wCAAwC,KAAK;AAAA;AAAA;AAAA;AAAA;AAMlE,sBAAU,YAAY;AACtB,sBAAU,MAAM,OAAO,YAAY;AACnC,sBAAU,MAAM,MAAM,YAAY;AAAA,UACpC;AAAA,QACF;AAAA,MACF;AAAA,MACA,aAAa;AAAA,QACX,WAAW;AAAA,QACX,MAAM;AAAA,MACR;AAAA,MACA,UAAU;AAAA,QACR,MAAM,EAAE,SAAS,IAAI;AAAA,QACrB,OAAO;AAAA,UACL,QAAQ;AAAA,UACR,aAAa;AAAA,UACb,iBAAiB;AAAA,UACjB,aAAa;AAAA,UACb,aAAa;AAAA,UACb,uBAAuB;AAAA,UACvB,kBAAkB;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AAAA,IACA,CAAC;AAAA,EACH;AAEA,QAAM,wBAAoB;AAAA,IACxB,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,WAAW,CAAC,UAAe;AAxOjC;AAyOQ,cAAM,UAAU,MAAM;AACtB,aAAI,wCAAS,YAAT,mBAAkB,QAAQ;AAC5B,gBAAM,cAAc,MAAM,QAAQ,QAAQ,CAAC;AAC3C,gBAAM,MAAM,MAAM;AAClB,gBAAM,IAAI,YAAY,QAAQ;AAC9B,gBAAM,OAAO,MAAM,OAAO,EAAE;AAC5B,gBAAM,UAAU,MAAM,OAAO,EAAE;AAC/B,cAAI,KAAK;AACT,cAAI,UAAU;AACd,cAAI,OAAO,GAAG,IAAI;AAClB,cAAI,OAAO,GAAG,OAAO;AACrB,cAAI,YAAY;AAChB,cAAI,cAAc;AAClB,cAAI,YAAY,CAAC,GAAG,CAAC,CAAC;AACtB,cAAI,OAAO;AACX,cAAI,QAAQ;AAAA,QACd;AAAA,MACF;AAAA,IACF;AAAA,IACA,CAAC;AAAA,EACH;AAEA,QAAM,eAAW;AAAA,IACf,OAAO;AAAA,MACL,QAAQ;AAAA,MACR,UAAU;AAAA,QACR;AAAA,UACE,OAAO;AAAA,UACP,MAAM;AAAA,UACN,aAAa;AAAA,UACb,iBAAiB,CAAC,YAAiB;AACjC,gBAAI,CAAC,QAAQ,MAAM,UAAW,QAAO;AACrC,kBAAM,EAAE,KAAK,UAAU,IAAI,QAAQ;AACnC,kBAAM,WAAW,IAAI;AAAA,cACnB;AAAA,cACA,UAAU;AAAA,cACV;AAAA,cACA,UAAU;AAAA,YACZ;AACA,qBAAS,aAAa,GAAG,cAAc;AACvC,qBAAS,aAAa,GAAG,cAAc;AACvC,mBAAO;AAAA,UACT;AAAA,UACA,MAAM;AAAA,UACN,sBAAsB;AAAA,UACtB,kBAAkB;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AAAA,IACA,CAAC,QAAQ,MAAM;AAAA,EACjB;AAEA,SACE,6CAAC,SAAI,OAAO,EAAE,OAAO,QAAQ,QAAQ,QAAQ,GAC3C;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MAEL;AAAA,MACA,MAAM;AAAA,MACN,SAAS,CAAC,iBAAiB;AAAA;AAAA,IAHtB;AAAA,EAIP,GACF;AAEJ;AACA,IAAO,oBAAQ;;;ACzSf,IAAAC,yBAAwB;AAgBd,IAAAC,sBAAA;AAXV,IAAM,qBAAqB,CAAC,EAAE,UAAU,MAAa;AACnD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACA,OAAO,EAAE,aAAa,UAAU;AAAA,MAEhC,wDAAC,SAAI,WAAU,iCACb;AAAA,sDAAC,SAAI,WAAU,iDACb;AAAA,wDAAC,SAAI,WAAU,8BACb;AAAA,yDAAC,SAAI,WAAU,+CAA8C;AAAA,YAC7D,6CAAC,SAAI,WAAU,4DAA2D;AAAA,aAC5E;AAAA,UACA,6CAAC,SAAI,WAAU,4BACb,uDAAC,SAAI,WAAU,+CAA8C,GAC/D;AAAA,WACF;AAAA,QAEA,6CAAC,SAAI,WAAU,yDAAwD;AAAA,QACvE,6CAAC,SAAI,WAAU,qCACb,uDAAC,SAAI,WAAU,qDAAoD,GACrE;AAAA,SACF;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,6BAAQ;;;AJeJ,IAAAC,sBAAA;AAtBX,IAAM,cAAc,CAAC;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,gBAAgB;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAwB;AACtB,MAAI,WAAW;AACb,WAAO,6CAAC,8BAAmB,WAAsB;AAAA,EACnD;AAEA,MAAI,SAAS;AACX,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACF;AAAA,EAEJ;AACA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACA,OAAO;AAAA,QACL,aAAa;AAAA,QACb,WAAW;AAAA,MACb;AAAA,MAEA,uDAAC,SAAI,WAAU,wCACb,wDAAC,SAAI,WAAU,iCACb;AAAA,sDAAC,SAAI,WAAW,8CACd;AAAA,uDAAC,SAAI,WAAU,8BACb;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO,EAAE,UAAU,OAAO;AAAA,cAEzB;AAAA,gCACC,cAEA;AAAA,kBAAC;AAAA;AAAA,oBACC,WAAU;AAAA,oBACV,OAAO,EAAE,eAAe,QAAQ;AAAA,oBAE/B;AAAA;AAAA,gBACH;AAAA,gBAEF;AAAA,kBAAC;AAAA;AAAA,oBACC,WAAU;AAAA,oBACV,OAAO,EAAE,KAAK,SAAS,MAAM,MAAM;AAAA,oBAEnC;AAAA;AAAA,wBAAC;AAAA;AAAA,0BACC,KAAK;AAAA,0BACL,KAAI;AAAA,0BACJ,OAAO;AAAA,0BACP,QAAQ;AAAA,0BACR,WAAU;AAAA;AAAA,sBACZ;AAAA,sBACA;AAAA,wBAAC;AAAA;AAAA,0BACC,WAAU;AAAA,0BACV,OAAO,EAAE,OAAO,QAAQ;AAAA,0BAEvB;AAAA;AAAA,4BACD,6CAAC,SAAI,WAAU,kFAAiF;AAAA;AAAA;AAAA,sBAClG;AAAA;AAAA;AAAA,gBACF;AAAA;AAAA;AAAA,UACF,GACF;AAAA,UACA,8CAAC,SAAI,WAAW,0BACd;AAAA,0DAAC,UAAK,WAAU,2CACb;AAAA,yBAAW,MAAM,MAAM;AAAA,cACvB,MAAM,KAAK;AAAA,cACX,WAAW,MAAM,KAAK;AAAA,eACzB;AAAA,YACA,6CAAC,UAAK,WAAU,sBAAsB,gBAAK;AAAA,aAC7C;AAAA,WACF;AAAA,QAEA,6CAAC,SAAI,WAAU,QAAQ,iBAAM;AAAA,QAC7B,6CAAC,SAAI,WAAU,iCACb;AAAA,UAAC;AAAA;AAAA,YACC,MAAM;AAAA,YACN,OAAO;AAAA,YACP;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA;AAAA,QACF,GACF;AAAA,SACF,GACF;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,sBAAQ;;;AK3If,IAAAC,gBAAkB;AAClB,IAAAC,yBAAwB;;;ACFxB,IAAAC,yBAAwB;AAgCV,IAAAC,sBAAA;AAtBd,IAAM,eAAe,CAAC;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAyB;AACvB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACA,OAAO,EAAE,aAAa,UAAU;AAAA,MAEhC;AAAA,sDAAC,SAAI,WAAU,wCACb;AAAA,uDAAC,SAAI,WAAU,8BACb,uDAAC,SAAI,WAAU,8BACb;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO,EAAE,UAAU,OAAO;AAAA,cAE1B;AAAA,6DAAC,UAAK,WAAU,eAAc,OAAO,EAAE,eAAe,QAAQ,GAC3D,iBACH;AAAA,gBAEA;AAAA,kBAAC;AAAA;AAAA,oBACC,WAAU;AAAA,oBACV,OAAO,EAAE,KAAK,SAAS,MAAM,MAAM;AAAA,oBAEnC;AAAA;AAAA,wBAAC;AAAA;AAAA,0BACC,KAAK;AAAA,0BACL,KAAI;AAAA,0BACJ,OAAO;AAAA,0BACP,QAAQ;AAAA,0BACR,WAAU;AAAA;AAAA,sBACZ;AAAA,sBACA;AAAA,wBAAC;AAAA;AAAA,0BACC,WAAU;AAAA,0BACV,OAAO,EAAE,OAAO,QAAQ;AAAA,0BAEvB;AAAA;AAAA,4BACD,6CAAC,SAAI,WAAU,kFAAiF;AAAA;AAAA;AAAA,sBAClG;AAAA;AAAA;AAAA,gBACF;AAAA;AAAA;AAAA,UACF,GACF,GACF;AAAA,UACA,6CAAC,SAAI,WAAU,4BACb,uDAAC,SAAI,WAAU,wFAAuF,GACxG;AAAA,UACA,8CAAC,SAAI,WAAU,qBACb;AAAA,yDAAC,SAAI,WAAU,uFAAsF;AAAA,YACrG;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,SAAS;AAAA,gBAET,wDAAC,SAAI,WAAU,2BACb;AAAA,+DAAC,uBAAY,QAAO,QAAO,OAAM,QAAO,OAAM,WAAU;AAAA,kBACxD,6CAAC,OAAE,WAAU,8BAA6B,qBAAO;AAAA,mBACnD;AAAA;AAAA,YACF;AAAA,aACF;AAAA,WACF;AAAA,QACA,6CAAC,SAAI,WAAU,QAAQ,iBAAM;AAAA;AAAA;AAAA,EAC/B;AAEJ;AAEA,IAAO,uBAAQ;;;AChFf,IAAAC,yBAAwB;AAehB,IAAAC,uBAAA;AAVR,IAAM,kBAAkB,CAAC,EAAE,UAAU,MAAa;AAChD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACA,OAAO,EAAE,aAAa,UAAU;AAAA,MAEhC;AAAA,uDAAC,SAAI,WAAU,wCACb;AAAA,yDAAC,SAAI,WAAU,8BACb;AAAA,0DAAC,SAAI,WAAU,+CAA8C;AAAA,YAC7D,8CAAC,SAAI,WAAU,4DAA2D;AAAA,aAC5E;AAAA,UACA,8CAAC,SAAI,WAAU,4BACb,wDAAC,SAAI,WAAU,+CAA8C,GAC/D;AAAA,UACA,+CAAC,SAAI,WAAU,0BACb;AAAA,2DAAC,SAAI,WAAU,yEACb;AAAA,4DAAC,SAAI,WAAU,yCAAwC;AAAA,cACvD,8CAAC,SAAI,WAAU,gCAA+B;AAAA,eAChD;AAAA,YACA,8CAAC,SAAI,WAAU,yEAAwE;AAAA,aACzF;AAAA,WACF;AAAA,QACA,8CAAC,SAAI,WAAU,yDAAwD;AAAA;AAAA;AAAA,EACzE;AAEJ;AAEA,IAAO,wBAAQ;;;AF6BJ,IAAAC,uBAAA;AAnCX,IAAM,aAAa,CAAC;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA,UAAU;AAAA,EACV,aAAa;AAAA,EACb,kBAAkB;AAAA,EAClB;AAAA,EACA,gBAAgB;AAAA,EAChB,uBAAuB;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,gBAAgB;AAAA,EAChB;AACF,MAAuB;AACrB,QAAM,CAAC,aAAa,cAAc,IAAI,cAAAC,QAAM,SAAiB,IAAI;AACjE,QAAM,iBAAiB,CAAC,UAAkB;AACxC,mBAAe,KAAK;AACpB,QAAI,YAAa,aAAY,KAAK;AAAA,EACpC;AAEA,QAAM,UAAU,cAAAA,QAAM,QAAQ,MAAM;AAClC,UAAM,cAAc,CAAC,MAAM,MAAM,GAAG;AACpC,QAAI,sBAAsB;AACxB,aAAO,CAAC,GAAG,aAAa,WAAW;AAAA,IACrC;AACA,WAAO;AAAA,EACT,GAAG,CAAC,oBAAoB,CAAC;AAEzB,MAAI,WAAW;AACb,WAAO,8CAAC,yBAAgB,WAAsB;AAAA,EAChD;AAEA,MAAI,SAAS;AACX,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACF;AAAA,EAEJ;AAEA,QAAM,kBAAkB,CAAC,UAAkB;AACzC,UAAM,aAAa,gBAAgB;AACnC,WACE;AAAA,MAAC;AAAA;AAAA,QAEC,WAAW,kBACT,aACI,iCACA,4BACN;AAAA,QACA,OAAO,EAAE,eAAe,SAAS,YAAY,EAAE;AAAA,QAC/C,SAAS,MAAM,eAAe,KAAK;AAAA,QAElC;AAAA;AAAA,UAAM;AAAA,UAAE,UAAU,eAAe;AAAA;AAAA;AAAA,MAT7B;AAAA,IAUP;AAAA,EAEJ;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACA,OAAO;AAAA,QACL,aAAa;AAAA,QACb,WAAW;AAAA,MACb;AAAA,MAEA,yDAAC,SAAI,WAAU,wCACb;AAAA,uDAAC,SAAI,WAAU,wBACb;AAAA,yDAAC,SAAI,WAAW,8CACd;AAAA,0DAAC,SAAI,WAAU,8BACb;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,OAAO,EAAE,UAAU,OAAO;AAAA,gBAEzB;AAAA,kCACC,cAEA;AAAA,oBAAC;AAAA;AAAA,sBACC,WAAU;AAAA,sBACV,OAAO,EAAE,eAAe,QAAQ;AAAA,sBAE/B;AAAA;AAAA,kBACH;AAAA,kBAEF;AAAA,oBAAC;AAAA;AAAA,sBACC,WAAU;AAAA,sBACV,OAAO,EAAE,KAAK,SAAS,MAAM,MAAM;AAAA,sBAEnC;AAAA;AAAA,0BAAC;AAAA;AAAA,4BACC,KAAK;AAAA,4BACL,KAAI;AAAA,4BACJ,OAAO;AAAA,4BACP,QAAQ;AAAA,4BACR,WAAU;AAAA;AAAA,wBACZ;AAAA,wBACA;AAAA,0BAAC;AAAA;AAAA,4BACC,WAAU;AAAA,4BACV,OAAO,EAAE,OAAO,QAAQ;AAAA,4BAEvB;AAAA;AAAA,8BACD,8CAAC,SAAI,WAAU,kFAAiF;AAAA;AAAA;AAAA,wBAClG;AAAA;AAAA;AAAA,kBACF;AAAA;AAAA;AAAA,YACF,GACF;AAAA,YACA,+CAAC,SAAI,WAAW,0BACd;AAAA,6DAAC,UAAK,WAAU,2CACb;AAAA,2BAAW,MAAM,MAAM;AAAA,gBACvB,MAAM,KAAK;AAAA,gBACX,WAAW,MAAM,KAAK;AAAA,iBACzB;AAAA,cACA,8CAAC,UAAK,WAAU,sBAAsB,gBAAK;AAAA,eAC7C;AAAA,aACF;AAAA,UACA,8CAAC,SAAI,WAAU,QAAQ,iBAAM;AAAA,WAC/B;AAAA,QACA,+CAAC,SAAI,WAAU,2BACZ;AAAA,6BAAmB;AAAA,UACnB,CAAC,iBACA;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO;AAAA,gBACL,OAAO;AAAA,gBACP,eAAe;AAAA,gBACf,YAAY;AAAA,cACd;AAAA,cAEC;AAAA;AAAA,UACH;AAAA,WAEJ;AAAA,QACC,iBACC,8CAAC,SAAI,WAAU,mEACZ,kBAAQ,IAAI,CAAC,OAAO,OAAO,UAC1B,+CAAC,cAAAA,QAAM,UAAN,EACE;AAAA,0BAAgB,KAAK;AAAA,UACrB,QAAQ,MAAM,SAAS,KACtB,8CAAC,OAAE,WAAU,kBAAiB,eAAC;AAAA,aAHd,KAKrB,CACD,GACH;AAAA,SAEJ;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,qBAAQ;;;AG9Lf,IAAAC,0BAAwB;AAOpB,IAAAC,uBAAA;AAFJ,IAAM,QAAQ,CAAC,EAAE,OAAO,WAAW,MAAa;AAC9C,SACE,8CAAC,OAAE,eAAW,iCAAQ,8BAA8B,UAAU,GAAI,iBAAM;AAE5E;AAEA,IAAO,gBAAQ;;;ACXf,IAAAC,gBAUO;AACP,IAAAC,gBAAqD;AACrD,IAAAC,0BAAqB;AACrB,IAAAC,0BAAwB;AA4TlB,IAAAC,uBAAA;AA7SN,cAAAC,MAAQ;AAAA,EACN;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,iBAAiB,CAAC;AAAA,EACtB;AAAA,EACA;AAAA,EACA,YAAY;AACd,MAA2B;AACzB,QAAM,eAAW,sBAAO,IAAI;AAC5B,QAAM,CAAC,UAAU,WAAW,QAAI,wBAAS,SAAS,KAAK,IAAI,CAAC,EAAE;AAG9D,QAAM,gBAAgB;AAAA,IACpB,EAAE,MAAM,WAAW,OAAO,UAAU;AAAA,IACpC,EAAE,MAAM,WAAW,OAAO,UAAU;AAAA,IACpC,EAAE,MAAM,WAAW,OAAO,UAAU;AAAA,IACpC,EAAE,MAAM,WAAW,OAAO,UAAU;AAAA,IACpC,EAAE,MAAM,WAAW,OAAO,UAAU;AAAA,IACpC,EAAE,MAAM,WAAW,OAAO,UAAU;AAAA,EACtC;AAGA,+BAAU,MAAM;AACd,UAAM,eAAe,MAAM;AACzB,kBAAY,SAAS,KAAK,IAAI,CAAC,EAAE;AAAA,IACnC;AAEA,WAAO,iBAAiB,UAAU,YAAY;AAC9C,WAAO,MAAM;AACX,aAAO,oBAAoB,UAAU,YAAY;AAAA,IACnD;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,cAAU;AAAA,IACd,OAAO;AAAA,MACL,YAAY;AAAA,MACZ,qBAAqB;AAAA,MACrB,WAAW;AAAA,QACT,UAAU;AAAA,QACV,QAAQ;AAAA,MACV;AAAA,MACA,QAAQ;AAAA,QACN,SAAS,CAAC;AAAA,MACZ;AAAA,MACA,QAAQ;AAAA,QACN,GAAG;AAAA,UACD,SAAS;AAAA,UAET,MAAM;AAAA,YACJ,YAAY;AAAA,YACZ,WAAW;AAAA,YACX,iBAAiB;AAAA,UACnB;AAAA,QACF;AAAA,QACA,GAAG;AAAA,UACD,SAAS;AAAA,UACT,QAAQ;AAAA,YACN,SAAS;AAAA,UACX;AAAA,UACA,MAAM;AAAA,YACJ,YAAY;AAAA,YACZ,WAAW;AAAA,YACX,iBAAiB;AAAA,UACnB;AAAA,UACA,OAAO;AAAA,YACL,SAAS;AAAA;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,MACA,SAAS;AAAA,QACP,QAAQ,EAAE,SAAS,MAAM;AAAA,QACzB,SAAS;AAAA,UACP,SAAS;AAAA,UACT,UAAU,SAAU,SAAc;AA7G5C;AA8GY,gBAAI,YAAY,SAAS,eAAe,iBAAiB;AACzD,gBAAI,CAAC,WAAW;AACd,0BAAY,SAAS,cAAc,KAAK;AACxC,wBAAU,KAAK;AACf,wBAAU,YAAY;AACtB,uBAAS,KAAK,YAAY,SAAS;AAAA,YACrC;AAEA,kBAAM,eAAe,QAAQ;AAC7B,oBAAQ,MAAM,OAAO,MAAM,SACzB,aAAa,YAAY,IAAI,YAAY;AAC3C,gBAAI,aAAa,YAAY,GAAG;AAC9B,wBAAU,MAAM,UAAU;AAC1B;AAAA,YACF;AAEA,kBAAM,aAAa,aAAa,cAAc,CAAC;AAE/C,kBAAM,SAAQ,gBAAW,CAAC,MAAZ,mBAAe;AAC7B,kBAAM,YAAY;AAClB,kBAAM,WAAW,QAAQ,MAAM,OAAO,sBAAsB;AAE5D,sBAAU,MAAM,WAAW;AAC3B,sBAAU,MAAM,OAAO;AACvB,sBAAU,MAAM,MAAM;AACtB,sBAAU,MAAM,UAAU;AAC1B,sBAAU,MAAM,gBAAgB;AAEhC,kBAAM,iBAAiB,WACpB;AAAA,cACC,CAAC,OAAY,UAAkB;AAAA,kFAE/B,QAAQ,IAAI,QAAQ,GACtB;AAAA;AAAA;AAAA;AAAA;AAAA,oBAMM,MAAM,QAAQ,KAChB,oDACA,MAAM,OAAO,CACf;AAAA;AAAA;AAAA;AAAA,YAIF,EACC,KAAK,EAAE;AAEV,kBAAM,eAAe,UAAU;AAC/B,kBAAM,gBAAgB,UAAU;AAChC,kBAAM,SACJ,SAAS,OAAO,OAAO,cAAc,aAAa;AACpD,kBAAM,SACJ,SAAS,MAAM,OAAO,cAAc,aAAa;AACnD,kBAAM,cAAc,OAAO;AAC3B,kBAAM,kBAAkB,SAAS,eAAe;AAChD,kBAAM,mBAAmB,SAAS,eAAe;AAEjD,gBAAI,mBAAmB;AACvB,gBAAI,cAAc;AAClB,gBAAI,kBAAkB,IAAI;AACxB,4BAAc,KAAK;AAAA,YACrB,WAAW,mBAAmB,cAAc,IAAI;AAC9C,4BAAc,cAAc,KAAK;AAAA,YACnC;AAEA,kBAAM,YAAY,kBAAkB;AACpC,kBAAM,YAAY,SAAS,gBAAgB,YAAY;AACvD,gCAAqB,SAAS,aAAa,eAAgB;AAC3D,+BAAmB,KAAK,IAAI,IAAI,KAAK,IAAI,IAAI,gBAAgB,CAAC;AAE9D,kBAAM,iBAAiB;AACvB,kBAAM,iBAAiB;AAEvB,kBAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA,0BAKJ,gBAAgB;AAAA;AAAA;AAAA;AAAA,iCAIT,cAAc;AAAA,kCACb,cAAc;AAAA,gCAChB,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAMpB,gBAAgB;AAAA;AAAA;AAAA;AAAA,iCAIT,cAAc;AAAA,kCACb,cAAc;AAAA,gCAChB,cAAc;AAAA;AAAA;AAAA;AAAA,yEAI2B,KAAK;AAAA,oBAC1D,cAAc;AAAA;AAAA;AAAA;AAKtB,sBAAU,YAAY;AACtB,sBAAU,MAAM,OAAO,YAAY;AACnC,sBAAU,MAAM,MAAM,YAAY;AAAA,UACpC;AAAA,QACF;AAAA,MACF;AAAA,MACA,aAAa;AAAA,QACX,WAAW;AAAA;AAAA,QAEX,MAAM;AAAA,MACR;AAAA,MACA,UAAU;AAAA,QACR,MAAM,EAAE,SAAS,IAAI;AAAA,QACrB,OAAO;AAAA,UACL,QAAQ;AAAA,UACR,aAAa;AAAA,UACb,iBAAiB;AAAA,UACjB,aAAa;AAAA,UACb,uBAAuB;AAAA,UACvB,kBAAkB;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AAAA,IACA,CAAC;AAAA,EACH;AAEA,QAAM,wBAAoB;AAAA,IACxB,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,WAAW,CAAC,UAAe;AAvPjC;AAwPQ,cAAM,UAAU,MAAM;AACtB,aAAI,wCAAS,YAAT,mBAAkB,QAAQ;AAC5B,gBAAM,cAAc,MAAM,QAAQ,QAAQ,CAAC;AAC3C,gBAAM,MAAM,MAAM;AAClB,gBAAM,IAAI,YAAY,QAAQ;AAC9B,gBAAM,OAAO,MAAM,OAAO,EAAE;AAC5B,gBAAM,UAAU,MAAM,OAAO,EAAE;AAC/B,cAAI,KAAK;AACT,cAAI,UAAU;AACd,cAAI,OAAO,GAAG,IAAI;AAClB,cAAI,OAAO,GAAG,OAAO;AACrB,cAAI,YAAY;AAChB,cAAI,cAAc;AAClB,cAAI,YAAY,CAAC,GAAG,CAAC,CAAC;AACtB,cAAI,OAAO;AACX,cAAI,QAAQ;AAAA,QACd;AAAA,MACF;AAAA,IACF;AAAA,IACA,CAAC;AAAA,EACH;AAEA,QAAM,eAAW;AAAA,IACf,OAAO;AAAA,MACL,QAAQ;AAAA,MACR,UAAU,SAAS,IAAI,CAAC,SAAS,UAAU;AACzC,cAAM,SAAS,cAAc,QAAQ,cAAc,MAAM;AACzD,eAAO;AAAA,UACL,OAAO,QAAQ;AAAA,UACf,MAAM,QAAQ;AAAA,UACd,aAAa,QAAQ,aAAa,OAAO;AAAA,UACzC,iBAAiB;AAAA,UACjB,MAAM;AAAA,UACN,sBAAsB;AAAA,UACtB,kBAAkB,QAAQ,mBAAmB,OAAO;AAAA,UACpD,SAAS;AAAA;AAAA,UAET,aAAa;AAAA,UACb,kBAAkB;AAAA,QACpB;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IACA,CAAC,UAAU,WAAW;AAAA,EACxB;AAEA,QAAM,uBAAmB;AAAA,IACvB,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,mBAAmB,CAAC,UAAe;AACjC,cAAM,MAAM,MAAM;AAClB,cAAM,QAAQ,MAAM,OAAO;AAC3B,cAAM,QAAQ,MAAM,OAAO;AAE3B,YAAI,CAAC,SAAS,CAAC,MAAO;AAEtB,YAAI,KAAK;AAET,YAAI,UAAU;AACd,YAAI,YAAY,CAAC,GAAG,CAAC,CAAC;AACtB,YAAI,cAAc;AAClB,YAAI,YAAY;AAEhB,cAAM,SAAS,EAAE,QAAQ,CAAC,MAAW,UAAkB;AAErD,cAAI,UAAU,GAAG;AACf;AAAA,UACF;AACA,gBAAM,YAAY,MAAM,iBAAiB,KAAK,KAAK;AACnD,cAAI,OAAO,MAAM,MAAM,SAAS;AAChC,cAAI,OAAO,MAAM,OAAO,SAAS;AAAA,QACnC,CAAC;AAED,YAAI,OAAO;AACX,YAAI,QAAQ;AAAA,MACd;AAAA,IACF;AAAA,IACA,CAAC;AAAA,EACH;AAEA,SACE,8CAAC,SAAI,eAAW,iCAAQ,kBAAkB,SAAS,GACjD;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MAEL;AAAA,MACA,MAAM;AAAA,MACN,SAAS,CAAC,mBAAmB,gBAAgB;AAAA;AAAA,IAHxC;AAAA,EAIP,GACF;AAEJ;AAEA,IAAO,yBAAQ;;;ACpVf,IAAAC,gBAUO;AACP,IAAAC,gBAAqD;AACrD,IAAAC,0BAAqB;AACrB,IAAAC,0BAAwB;AA6TlB,IAAAC,uBAAA;AAjTN,cAAAC,MAAQ;AAAA,EACN;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,kBAAkB,CAAC;AAAA,EACvB;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,YAAY;AACd,MAA4B;AAC1B,QAAM,eAAW,sBAAO,IAAI;AAC5B,QAAM,CAAC,UAAU,WAAW,QAAI,wBAAS,SAAS,KAAK,IAAI,CAAC,EAAE;AAG9D,+BAAU,MAAM;AACd,UAAM,eAAe,MAAM;AACzB,kBAAY,SAAS,KAAK,IAAI,CAAC,EAAE;AAAA,IACnC;AAEA,WAAO,iBAAiB,UAAU,YAAY;AAC9C,WAAO,MAAM;AACX,aAAO,oBAAoB,UAAU,YAAY;AAAA,IACnD;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,SAAS;AAEf,QAAM,SAAS;AAEf,QAAM,cAAU;AAAA,IACd,OAAO;AAAA,MACL,YAAY;AAAA,MACZ,qBAAqB;AAAA,MACrB,WAAW;AAAA,QACT,UAAU;AAAA,QACV,QAAQ;AAAA,MACV;AAAA,MACA,QAAQ;AAAA,QACN,SAAS,CAAC;AAAA,MACZ;AAAA,MACA,QAAQ;AAAA,QACN,GAAG;AAAA,UACD,SAAS;AAAA,UAET,MAAM;AAAA,YACJ,YAAY;AAAA,YACZ,WAAW;AAAA,YACX,iBAAiB;AAAA,UACnB;AAAA,QACF;AAAA,QACA,GAAG;AAAA,UACD,SAAS;AAAA,UACT,QAAQ;AAAA,YACN,SAAS;AAAA,UACX;AAAA,UACA,MAAM;AAAA,YACJ,YAAY;AAAA,YACZ,WAAW;AAAA,YACX,iBAAiB;AAAA,UACnB;AAAA,UACA,OAAO;AAAA,YACL,SAAS;AAAA;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,MACA,SAAS;AAAA,QACP,QAAQ,EAAE,SAAS,MAAM;AAAA,QACzB,SAAS;AAAA,UACP,SAAS;AAAA,UACT,UAAU,SAAU,SAAc;AAzG5C;AA0GY,gBAAI,YAAY,SAAS,eAAe,iBAAiB;AACzD,gBAAI,CAAC,WAAW;AACd,0BAAY,SAAS,cAAc,KAAK;AACxC,wBAAU,KAAK;AACf,wBAAU,YAAY;AACtB,uBAAS,KAAK,YAAY,SAAS;AAAA,YACrC;AAEA,kBAAM,eAAe,QAAQ;AAC7B,oBAAQ,MAAM,OAAO,MAAM,SACzB,aAAa,YAAY,IAAI,YAAY;AAC3C,gBAAI,aAAa,YAAY,GAAG;AAC9B,wBAAU,MAAM,UAAU;AAC1B;AAAA,YACF;AAEA,kBAAM,aAAY,kBAAa,eAAb,mBAA0B;AAC5C,kBAAM,QAAQ,uCAAW,OAAO;AAChC,kBAAMC,SAAQ,uCAAW;AACzB,kBAAM,YAAY;AAClB,kBAAM,WAAW,QAAQ,MAAM,OAAO,sBAAsB;AAC5D,sBAAU,MAAM,WAAW;AAC3B,sBAAU,MAAM,OAAO;AACvB,sBAAU,MAAM,MAAM;AACtB,sBAAU,MAAM,UAAU;AAC1B,sBAAU,MAAM,gBAAgB;AAChC,sBAAU,YAAY;AAAA;AAAA;AAAA,oDAGkBA,MAAK;AAAA;AAAA;AAAA;AAAA;AAAA,oBAKrC,eAAe,wCAAwC,KAAK;AAAA;AAAA;AAAA;AAAA;AAMpE,kBAAM,eAAe,UAAU;AAC/B,kBAAM,gBAAgB,UAAU;AAChC,kBAAM,SACJ,SAAS,OAAO,OAAO,cAAc,aAAa;AACpD,kBAAM,SACJ,SAAS,MAAM,OAAO,cAAc,aAAa;AACnD,kBAAM,cAAc,OAAO;AAC3B,kBAAM,kBAAkB,SAAS,eAAe;AAChD,kBAAM,mBAAmB,SAAS,eAAe;AACjD,gBAAI,mBAAmB;AACvB,gBAAI,cAAc;AAClB,gBAAI,kBAAkB,IAAI;AACxB,4BAAc,KAAK;AAAA,YACrB,WAAW,mBAAmB,cAAc,IAAI;AAC9C,4BAAc,cAAc,KAAK;AAAA,YACnC;AAEA,kBAAM,YAAY,kBAAkB;AACpC,kBAAM,YAAY,SAAS,gBAAgB,YAAY;AACvD,gCAAqB,SAAS,aAAa,eAAgB;AAC3D,+BAAmB,KAAK,IAAI,IAAI,KAAK,IAAI,IAAI,gBAAgB,CAAC;AAE9D,kBAAM,iBAAiB;AACvB,kBAAM,iBAAiB;AAEvB,kBAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAOR,gBAAgB;AAAA;AAAA;AAAA;AAAA,6BAIT,cAAc;AAAA,8BACb,cAAc;AAAA,4BAChB,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAOpB,gBAAgB;AAAA;AAAA;AAAA;AAAA,6BAIT,cAAc;AAAA,8BACb,cAAc;AAAA,4BAChB,cAAc;AAAA;AAAA;AAAA;AAAA,kDAIQA,MAAK;AAAA;AAAA;AAAA;AAAA;AAAA,kBAKrC,eAAe,wCAAwC,KAAK;AAAA;AAAA;AAAA;AAAA;AAMlE,sBAAU,YAAY;AACtB,sBAAU,MAAM,OAAO,YAAY;AACnC,sBAAU,MAAM,MAAM,YAAY;AAAA,UACpC;AAAA,QACF;AAAA,MACF;AAAA,MACA,aAAa;AAAA,QACX,WAAW;AAAA,QACX,MAAM;AAAA,MACR;AAAA,MACA,UAAU;AAAA,QACR,MAAM,EAAE,SAAS,IAAI;AAAA,QACrB,OAAO;AAAA,UACL,QAAQ;AAAA,UACR,aAAa;AAAA,UACb,iBAAiB;AAAA,UACjB,aAAa;AAAA,UACb,aAAa;AAAA,UACb,uBAAuB;AAAA,UACvB,kBAAkB;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AAAA,IACA,CAAC;AAAA,EACH;AAEA,QAAM,wBAAoB;AAAA,IACxB,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,WAAW,CAAC,UAAe;AAjPjC;AAkPQ,cAAM,UAAU,MAAM;AACtB,aAAI,wCAAS,YAAT,mBAAkB,QAAQ;AAC5B,gBAAM,cAAc,MAAM,QAAQ,QAAQ,CAAC;AAC3C,gBAAM,MAAM,MAAM;AAClB,gBAAM,IAAI,YAAY,QAAQ;AAC9B,gBAAM,OAAO,MAAM,OAAO,EAAE;AAC5B,gBAAM,UAAU,MAAM,OAAO,EAAE;AAC/B,cAAI,KAAK;AACT,cAAI,UAAU;AACd,cAAI,OAAO,GAAG,IAAI;AAClB,cAAI,OAAO,GAAG,OAAO;AACrB,cAAI,YAAY;AAChB,cAAI,cAAc;AAClB,cAAI,YAAY,CAAC,GAAG,CAAC,CAAC;AACtB,cAAI,OAAO;AACX,cAAI,QAAQ;AAAA,QACd;AAAA,MACF;AAAA,IACF;AAAA,IACA,CAAC;AAAA,EACH;AAEA,QAAM,eAAW;AAAA,IACf,OAAO;AAAA,MACL,QAAQ;AAAA,MACR,UAAU;AAAA,QACR;AAAA,UACE,OAAO;AAAA,UACP,MAAM;AAAA,UACN,aAAa;AAAA,UACb,iBAAiB,CAAC,YAAiB;AACjC,gBAAI,CAAC,QAAQ,MAAM,UAAW,QAAO;AACrC,kBAAM,EAAE,KAAK,UAAU,IAAI,QAAQ;AACnC,kBAAM,WAAW,IAAI;AAAA,cACnB;AAAA,cACA,UAAU;AAAA,cACV;AAAA,cACA,UAAU;AAAA,YACZ;AACA,qBAAS,aAAa,GAAG,cAAc;AACvC,qBAAS,aAAa,GAAG,cAAc;AACvC,mBAAO;AAAA,UACT;AAAA,UACA,MAAM;AAAA,UACN,sBAAsB;AAAA,UACtB,kBAAkB;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AAAA,IACA,CAAC,QAAQ,MAAM;AAAA,EACjB;AAEA,QAAM,uBAAmB;AAAA,IACvB,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,mBAAmB,CAAC,UAAe;AACjC,cAAM,MAAM,MAAM;AAClB,cAAM,QAAQ,MAAM,OAAO;AAC3B,cAAM,QAAQ,MAAM,OAAO;AAE3B,YAAI,CAAC,SAAS,CAAC,MAAO;AAEtB,YAAI,KAAK;AAET,YAAI,UAAU;AACd,YAAI,YAAY,CAAC,GAAG,CAAC,CAAC;AACtB,YAAI,cAAc;AAClB,YAAI,YAAY;AAEhB,cAAM,SAAS,EAAE,QAAQ,CAAC,MAAW,UAAkB;AAErD,cAAI,UAAU,GAAG;AACf;AAAA,UACF;AACA,gBAAM,YAAY,MAAM,iBAAiB,KAAK,KAAK;AACnD,cAAI,OAAO,MAAM,MAAM,SAAS;AAChC,cAAI,OAAO,MAAM,OAAO,SAAS;AAAA,QACnC,CAAC;AAED,YAAI,OAAO;AACX,YAAI,QAAQ;AAAA,MACd;AAAA,IACF;AAAA,IACA,CAAC;AAAA,EACH;AAEA,SACE,8CAAC,SAAI,eAAW,iCAAQ,iBAAiB,SAAS,GAChD;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MAEL;AAAA,MACA,MAAM;AAAA,MACN,SAAS,CAAC,mBAAmB,gBAAgB;AAAA;AAAA,IAHxC;AAAA,EAIP,GACF;AAEJ;AACA,IAAO,0BAAQ;;;ACnVf,IAAAC,0BAAwB;AA0DhB,IAAAC,uBAAA;AAlCR,IAAM,cAA0C,CAAC;AAAA,EAC/C;AAAA,EACA,YAAY;AAAA,EACZ,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,OAAO;AAAA,EACP,SAAS;AAAA,EACT,aAAa;AAAA,EACb,YAAY;AAAA,EACZ;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA,aAAa;AAAA,EACb,eAAe;AAAA,EACf;AAAA,EACA,GAAG;AACL,MAAM;AACJ,QAAM,mBAAe;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ,8BAA8B;AAAA,IACtC,aAAa,CAAC,cAAc;AAAA,IAC5B,cAAc;AAAA,IACd;AAAA,EACF;AAEA,SACE,+CAAC,SAAI,WAAU,UAEZ;AAAA,aACC,8CAAC,OAAE,eAAW,iCAAQ,YAAY,gCAAgC,GAC/D,iBACH;AAAA,IAGF,+CAAC,SAAI,WAAU,YAEZ;AAAA,mBAAa,CAAC,cACb;AAAA,QAAC;AAAA;AAAA,UACC,eAAW;AAAA,YACT;AAAA,YACA;AAAA,UACF;AAAA,UACD;AAAA;AAAA,MAED;AAAA,MAED,WAAW;AAAA,MAEX,aACC;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UACA,WAAW;AAAA,UACX,MAAM;AAAA,UACN;AAAA,UACC,GAAG;AAAA;AAAA,MACN,IAEA;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,WAAW;AAAA,UACX;AAAA,UACC,GAAG;AAAA;AAAA,MACN;AAAA,OAEJ;AAAA,IAGC,SAAS,8CAAC,UAAK,WAAU,4BAA4B,iBAAM;AAAA,KAC9D;AAEJ;AAEA,IAAO,sBAAQ;;;AC3Gf,0BAA0C;AAC1C,IAAAC,gBAAmD;AACnD,IAAAC,0BAAwB;;;ACKjB,IAAM,yBAAyB,CACpC,UACA,UAAiC,CAAC,MAC/B;AACH,QAAM;AAAA,IACJ,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,mBAAmB;AAAA,EACrB,IAAI;AAEJ,MAAI,SAAS,SAAS,QAAQ,OAAO,EAAE;AAGvC,MAAI,OAAO,UAAU,GAAG;AACtB,UAAM,QAAQ,SAAS,OAAO,MAAM,GAAG,CAAC,CAAC;AACzC,QAAI,QAAQ,KAAK,QAAQ,IAAI;AAC3B,eAAS,OAAO,MAAM,GAAG,CAAC;AAAA,IAC5B;AAAA,EACF;AAGA,MAAI,OAAO,UAAU,GAAG;AACtB,UAAM,QAAQ,SAAS,OAAO,MAAM,GAAG,CAAC,CAAC;AACzC,UAAM,MAAM,SAAS,OAAO,MAAM,GAAG,CAAC,CAAC;AAEvC,UAAM,cAAc,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AACnE,UAAM,UAAU,YAAY,QAAQ,CAAC,KAAK;AAE1C,QAAI,MAAM,KAAK,MAAM,SAAS;AAC5B,eAAS,OAAO,MAAM,GAAG,CAAC;AAAA,IAC5B;AAAA,EACF;AAGA,MAAI,mBAAmB,OAAO,UAAU,GAAG;AACzC,UAAM,eAAc,oBAAI,KAAK,GAAE,YAAY;AAC3C,UAAM,UAAU,cAAc;AAC9B,UAAM,YAAY,SAAS,OAAO,MAAM,GAAG,CAAC,CAAC;AAE7C,QAAI,YAAY,WAAW,YAAY,aAAa;AAClD,eAAS,OAAO,MAAM,GAAG,CAAC;AAAA,IAC5B;AAAA,EACF;AAGA,MAAI,CAAC,oBAAoB,OAAO,WAAW,GAAG;AAC5C,UAAM,QAAQ,SAAS,OAAO,MAAM,GAAG,CAAC,CAAC;AACzC,UAAM,MAAM,SAAS,OAAO,MAAM,GAAG,CAAC,CAAC;AACvC,UAAM,OAAO,SAAS,OAAO,MAAM,GAAG,CAAC,CAAC;AAExC,UAAM,YAAY,IAAI,KAAK,MAAM,QAAQ,GAAG,GAAG;AAC/C,UAAM,QAAQ,oBAAI,KAAK;AACvB,UAAM,SAAS,IAAI,IAAI,IAAI,GAAG;AAG9B,QAAI,YAAY,OAAO;AACrB,eAAS,OAAO,MAAM,GAAG,CAAC;AAAA,IAC5B;AAAA,EACF;AAEA,WAAS,OAAO,MAAM,GAAG,CAAC;AAE1B,MAAI,YAAY;AAChB,MAAI,OAAO,SAAS,EAAG,cAAa,OAAO,MAAM,GAAG,CAAC;AACrD,MAAI,OAAO,UAAU,EAAG,cAAa,IAAI,OAAO,MAAM,GAAG,CAAC,CAAC;AAC3D,MAAI,OAAO,UAAU,EAAG,cAAa,IAAI,OAAO,MAAM,GAAG,CAAC,CAAC;AAE3D,SAAO;AACT;AACO,IAAM,eAAe,CAAC,YAAoB,mBAAmB,UAAU;AAC5E,QAAM,cAAc;AACpB,MAAI,CAAC,YAAY,KAAK,UAAU,GAAG;AACjC,WAAO;AAAA,EACT;AAEA,QAAM,CAAC,OAAO,KAAK,IAAI,IAAI,WACxB,MAAM,GAAG,EACT,IAAI,CAAC,QAAQ,SAAS,KAAK,EAAE,CAAC;AACjC,QAAM,YAAY,IAAI,KAAK,MAAM,QAAQ,GAAG,GAAG;AAG/C,MACE,UAAU,SAAS,MAAM,QAAQ,KACjC,UAAU,QAAQ,MAAM,OACxB,UAAU,YAAY,MAAM,MAC5B;AACA,WAAO;AAAA,EACT;AAEA,MAAI,CAAC,kBAAkB;AACrB,UAAM,QAAQ,oBAAI,KAAK;AACvB,UAAM,SAAS,IAAI,IAAI,IAAI,GAAG;AAE9B,QAAI,YAAY,OAAO;AACrB,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AACO,IAAM,oBAAoB,CAC/B,YACA,UAKI,CAAC,MACO;AACZ,QAAM,EAAE,mBAAmB,OAAO,SAAS,SAAS,UAAU,IAAI;AAElE,MAAI,CAAC,aAAa,YAAY,gBAAgB,GAAG;AAC/C,WAAO;AAAA,EACT;AAEA,QAAM,CAAC,OAAO,KAAK,IAAI,IAAI,WACxB,MAAM,GAAG,EACT,IAAI,CAAC,QAAQ,SAAS,KAAK,EAAE,CAAC;AACjC,QAAM,YAAY,IAAI,KAAK,MAAM,QAAQ,GAAG,GAAG;AAE/C,MAAI,WAAW,YAAY,SAAS;AAClC,WAAO;AAAA,EACT;AAEA,MAAI,WAAW,YAAY,SAAS;AAClC,WAAO;AAAA,EACT;AAEA,MAAI,WAAW;AACb,UAAM,eAAc,oBAAI,KAAK,GAAE,YAAY;AAC3C,UAAM,UAAU,cAAc;AAC9B,QAAI,OAAO,SAAS;AAClB,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,WAAW,MAAkB;AAC3C,QAAM,QAAQ,IAAI,KAAK,IAAI;AAC3B,QAAM,SAAS,IAAI,IAAI,IAAI,GAAG;AAC9B,SAAO;AACT;AAEO,SAAS,WAAW,MAAkB;AAC3C,QAAM,QAAQ,IAAI,KAAK,IAAI;AAC3B,QAAM,SAAS,GAAG,GAAG,GAAG,CAAC;AACzB,SAAO;AACT;AAEO,SAAS,cAAc,OAAa,OAAsB;AAC/D,SACE,MAAM,YAAY,MAAM,MAAM,YAAY,KAC1C,MAAM,SAAS,MAAM,MAAM,SAAS,KACpC,MAAM,QAAQ,MAAM,MAAM,QAAQ;AAEtC;;;AD6bQ,IAAAC,uBAAA;AA9jBR,IAAM,kBAAkD,CAAC;AAAA,EACvD,UAAU;AAAA,EACV;AAAA,EACA,aAAa;AAAA,EACb,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,WAAW;AAAA,EACX,kBAAkB;AAAA,EAClB,iBAAiB;AAAA,EACjB;AAAA,EACA,gBAAgB;AAAA,EAChB;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,YAAY;AACd,MAAM;AACJ,QAAM,CAAC,QAAQ,SAAS,QAAI,wBAAkB,QAAQ;AACtD,QAAM,CAAC,SAAS,UAAU,QAAI,wBAAkB,KAAK;AACrD,QAAM,2BAAuB,sBAAoB,IAAI;AACrD,QAAM,yBAAqB,sBAAoB,IAAI;AAGnD,QAAM,CAAC,kBAAkB,mBAAmB,QAAI,wBAAuB,KAAK;AAC5E,QAAM,CAAC,mBAAmB,oBAAoB,QAC5C,wBAAuB,KAAK;AAE9B,QAAM,sBAAsB,MAAM;AAChC,QAAI,YAAY;AACd,YAAM,CAAC,OAAO,KAAK,IAAI,IAAI,WACxB,MAAM,GAAG,EACT,IAAI,CAAC,QAAQ,SAAS,KAAK,EAAE,CAAC;AACjC,aAAO,IAAI,KAAK,MAAM,QAAQ,GAAG,GAAG;AAAA,IACtC;AACA,WAAO;AAAA,EACT;AAEA,QAAM,oBAAoB,MAAM;AAC9B,QAAI,UAAU;AACZ,YAAM,CAAC,OAAO,KAAK,IAAI,IAAI,SACxB,MAAM,GAAG,EACT,IAAI,CAAC,QAAQ,SAAS,KAAK,EAAE,CAAC;AACjC,aAAO,IAAI,KAAK,MAAM,QAAQ,GAAG,GAAG;AAAA,IACtC;AACA,WAAO;AAAA,EACT;AAEA,QAAM,CAAC,WAAW,YAAY,QAAI;AAAA,IAChC,oBAAoB;AAAA,EACtB;AACA,QAAM,CAAC,SAAS,UAAU,QAAI,wBAAsB,kBAAkB,CAAC;AACvE,QAAM,CAAC,WAAW,YAAY,QAAI,wBAAe,oBAAI,KAAK,CAAC;AAC3D,QAAM,CAAC,YAAY,aAAa,QAAI,wBAAe,oBAAI,KAAK,CAAC;AAC7D,QAAM,CAAC,aAAa,cAAc,QAAI,wBAAsB,IAAI;AAChE,QAAM,CAAC,gBAAgB,iBAAiB,QAAI,wBAAkB,IAAI;AAClE,QAAM,CAAC,OAAO,QAAQ,QAAI,wBAAS,EAAE;AACrC,QAAM,kBAAc,sBAAuB,IAAI;AAC/C,QAAM,CAAC,iBAAiB,kBAAkB,QAAI,wBAAS,KAAK;AAC5D,QAAM,uBAAmB,sBAAO,EAAE;AAClC,QAAM,yBAAqB,sBAAO,KAAK;AACvC,QAAM,oBAAgB,sBAAa,oBAAI,KAAK,CAAC;AAC7C,QAAM,SAAS;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,QAAM,cAAc;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,QAAM,eAA8B;AAAA,IAClC;AAAA,MACE,OAAO;AAAA,MACP,UAAU,OAAO,EAAE,OAAO,oBAAI,KAAK,GAAG,KAAK,oBAAI,KAAK,EAAE;AAAA,IACxD;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,UAAU,MAAM;AACd,cAAM,MAAM,oBAAI,KAAK;AACrB,cAAM,QAAQ,IAAI,KAAK,IAAI,QAAQ,IAAI,IAAI,KAAK,KAAK,KAAK,GAAI;AAC9D,eAAO,EAAE,OAAO,IAAI;AAAA,MACtB;AAAA,IACF;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,UAAU,MAAM;AACd,cAAM,MAAM,oBAAI,KAAK;AACrB,cAAM,QAAQ,IAAI,KAAK,IAAI,YAAY,GAAG,IAAI,SAAS,GAAG,CAAC;AAC3D,cAAM,MAAM,oBAAI,KAAK;AACrB,eAAO,EAAE,OAAO,IAAI;AAAA,MACtB;AAAA,IACF;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,UAAU,MAAM;AACd,cAAM,MAAM,oBAAI,KAAK;AACrB,cAAM,QAAQ,IAAI,KAAK,IAAI,YAAY,GAAG,IAAI,SAAS,IAAI,GAAG,CAAC;AAC/D,cAAM,MAAM,IAAI,KAAK,IAAI,YAAY,GAAG,IAAI,SAAS,GAAG,CAAC;AACzD,eAAO,EAAE,OAAO,IAAI;AAAA,MACtB;AAAA,IACF;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,UAAU,MAAM;AACd,cAAM,MAAM,oBAAI,KAAK;AACrB,cAAM,QAAQ,IAAI;AAAA,UAChB,IAAI,YAAY;AAAA,UAChB,IAAI,SAAS,IAAI;AAAA,UACjB,IAAI,QAAQ;AAAA,QACd;AACA,eAAO,EAAE,OAAO,IAAI;AAAA,MACtB;AAAA,IACF;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,UAAU,MAAM;AACd,cAAM,MAAM,oBAAI,KAAK;AACrB,cAAM,QAAQ,IAAI;AAAA,UAChB,IAAI,YAAY;AAAA,UAChB,IAAI,SAAS,IAAI;AAAA,UACjB,IAAI,QAAQ;AAAA,QACd;AACA,eAAO,EAAE,OAAO,IAAI;AAAA,MACtB;AAAA,IACF;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,UAAU,MAAM;AACd,cAAM,MAAM,oBAAI,KAAK;AACrB,cAAM,QAAQ,IAAI;AAAA,UAChB,IAAI,YAAY,IAAI;AAAA,UACpB,IAAI,SAAS;AAAA,UACb,IAAI,QAAQ;AAAA,QACd;AACA,eAAO,EAAE,OAAO,IAAI;AAAA,MACtB;AAAA,IACF;AAAA,EACF;AAEA,+BAAU,MAAM;AACd,QACE,iBAAiB,YAAY,MAC7B,aAAa,MACb,eAAe,IACf;AACA,mBAAa,IAAI,KAAK,UAAU,CAAC;AACjC,oBAAc,IAAI,KAAK,QAAQ,CAAC;AAChC,mBAAa,IAAI,KAAK,UAAU,CAAC;AACjC,iBAAW,IAAI,KAAK,QAAQ,CAAC;AAC7B,UAAI,IAAI,KAAK,QAAQ,IAAI,oBAAI,KAAK,KAAK,iBAAiB,YAAY,IAAI;AACtE,iBAAS,cAAc;AAAA,MACzB;AAAA,IACF;AAAA,EACF,GAAG,CAAC,UAAU,UAAU,CAAC;AAEzB,+BAAU,MAAM;AACd,QAAI,YAAY,eAAe;AAC7B,gBAAU,IAAI;AAAA,IAChB;AAAA,EACF,GAAG,CAAC,UAAU,aAAa,CAAC;AAE5B,+BAAU,MAAM;AACd,QAAI,YAAY,eAAe;AAC7B,gBAAU,IAAI;AAAA,IAChB;AAAA,EACF,GAAG,CAAC,UAAU,aAAa,CAAC;AAE5B,+BAAU,MAAM;AACd,UAAM,qBAAqB,CAAC,UAAsB;AAChD,UACE,YAAY,WACZ,CAAC,YAAY,QAAQ,SAAS,MAAM,MAAc,GAClD;AACA,kBAAU,KAAK;AACf,cAAM,YAAY;AAClB,cAAMC,WACJ,oBAAoB,YAAY,IAAI,KACpC,oBAAoB,UAAU,KAAK;AAErC,YAAI,aAAa,CAACA,UAAS;AACzB,uBAAa;AACb;AAAA,QACF;AACA,YAAI,CAAC,WAAW,eAAe,MAAM,aAAa,IAAI;AACpD,uBAAa;AACb;AAAA,QACF;AAEA,YAAI,SAAS;AACX,wBAAc,cAAc,OAAO;AACnC,uBAAa,IAAI,KAAK,UAAU,CAAC;AACjC,qBAAW,IAAI,KAAK,QAAQ,CAAC;AAC7B,uBAAa,IAAI,KAAK,UAAU,CAAC;AACjC,mBAAS,iBAAiB,OAAO;AACjC,cAAI,mBAAmB;AACrB,+BAAmB,mBAAmB,OAAO;AAC/C;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,aAAS,iBAAiB,aAAa,kBAAkB;AACzD,WAAO,MAAM,SAAS,oBAAoB,aAAa,kBAAkB;AAAA,EAC3E,GAAG,CAAC,UAAU,SAAS,iBAAiB,UAAU,CAAC;AAEnD,QAAM,aAAa,CAAC,SAAuB;AACzC,WAAO,IAAI,KAAK,SAAS,IAAI,GAAG,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,KAC5D,QAAQ,EACR,SAAS,EACT,SAAS,GAAG,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC;AAAA,EAC3C;AAEA,QAAM,YAAY,CAAC,OAAa,UAAyB;AACvD,WACE,MAAM,QAAQ,MAAM,MAAM,QAAQ,KAClC,MAAM,SAAS,MAAM,MAAM,SAAS,KACpC,MAAM,YAAY,MAAM,MAAM,YAAY;AAAA,EAE9C;AAEA,QAAM,cAAc,CAAC,OAAa,UAAyB;AACzD,WACE,MAAM,SAAS,MAAM,MAAM,SAAS,KACpC,MAAM,YAAY,MAAM,MAAM,YAAY;AAAA,EAE9C;AAEA,QAAM,YAAY,CAAC,MAAY,OAAa,QAAuB;AACjE,WAAO,QAAQ,SAAS,QAAQ;AAAA,EAClC;AAEA,QAAM,iBAAiB,CAAC,SAAwB;AAC9C,QAAI,CAAC,eAAe,CAAC,UAAW,QAAO;AACvC,UAAM,QAAQ;AACd,UAAM,MAAM;AACZ,WACE,QAAQ,IAAI,KAAK,KAAK,IAAI,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,CAAC,KACzD,QAAQ,IAAI,KAAK,KAAK,IAAI,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,CAAC;AAAA,EAE7D;AAEA,QAAM,iBAAiB,CAAC,SAAwB;AAC9C,QAAI,oBAAI,KAAK,IAAI,KAAM,QAAO;AAE9B,SAAK,UAAU,kBAAkB,YAAY,SAAS,cAAc,MAAM;AACxE,YAAM,WAAW,IAAI,KAAK,SAAS;AAEnC,eAAS,SAAS,IAAI,IAAI,IAAI,GAAG;AAEjC,UAAI,OAAO,SAAU,QAAO;AAE5B,YAAMC,gBAAe,IAAI,KAAK,SAAS;AAEvC,MAAAA,cAAa,YAAYA,cAAa,YAAY,IAAI,SAAS;AAC/D,MAAAA,cAAa,SAAS,GAAG,GAAG,GAAG,CAAC;AAEhC,UAAI,OAAOA,cAAc,QAAO;AAChC,aAAO;AAAA,IACT;AAEA,QAAI,cAAc,KAAM,QAAO;AAE/B,QAAI,cAAc,MAAM;AACtB,YAAM,WAAW,IAAI,KAAK,SAAS;AACnC,eAAS,SAAS,IAAI,IAAI,IAAI,GAAG;AAEjC,UAAI,OAAO,SAAU,QAAO;AAE5B,YAAMA,gBAAe,IAAI,KAAK,SAAS;AAEvC,MAAAA,cAAa,YAAYA,cAAa,YAAY,IAAI,SAAS;AAC/D,MAAAA,cAAa,SAAS,GAAG,GAAG,GAAG,CAAC;AAEhC,UAAI,OAAOA,cAAc,QAAO;AAEhC,aAAO;AAAA,IACT;AAEA,UAAM,QAAQ,oBAAI,KAAK;AACvB,UAAM,SAAS,IAAI,IAAI,IAAI,GAAG;AAE9B,QAAI,OAAO,MAAO,QAAO;AAEzB,UAAM,eAAe,oBAAI,KAAK;AAC9B,iBAAa,YAAY,aAAa,YAAY,IAAI,SAAS;AAC/D,iBAAa,SAAS,GAAG,GAAG,GAAG,CAAC;AAEhC,QAAI,OAAO,aAAc,QAAO;AAEhC,WAAO;AAAA,EACT;AAEA,QAAM,kBAAkB,CAAC,MAAc,UAA2B;AAChE,UAAM,QAAQ,oBAAI,KAAK;AACvB,UAAM,cAAc,MAAM,YAAY;AACtC,UAAM,eAAe,MAAM,SAAS;AAGpC,QAAI,OAAO,eAAgB,SAAS,eAAe,QAAQ,cAAe;AACxE,aAAO;AAAA,IACT;AAGA,UAAM,eAAe,oBAAI,KAAK;AAC9B,iBAAa,YAAY,aAAa,YAAY,IAAI,EAAE;AACxD,UAAM,eAAe,aAAa,YAAY;AAC9C,UAAM,gBAAgB,aAAa,SAAS;AAE5C,QACE,OAAO,gBACN,SAAS,gBAAgB,QAAQ,eAClC;AACA,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAEA,QAAM,iBAAiB,CAAC,SAA0B;AAChD,UAAM,QAAQ,oBAAI,KAAK;AACvB,UAAM,cAAc,MAAM,YAAY;AAGtC,QAAI,OAAO,aAAa;AACtB,aAAO;AAAA,IACT;AAGA,UAAM,eAAe,cAAc;AACnC,QAAI,OAAO,cAAc;AACvB,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAEA,QAAM,gBAAgB,CAAC,WAAmB,WAA0B;AAClE,QAAI,QAAQ;AACV;AAAA,QACE,CAAC,SAAS,IAAI,KAAK,KAAK,YAAY,GAAG,KAAK,SAAS,IAAI,WAAW,CAAC;AAAA,MACvE;AAAA,IACF,OAAO;AACL;AAAA,QACE,CAAC,SAAS,IAAI,KAAK,KAAK,YAAY,GAAG,KAAK,SAAS,IAAI,WAAW,CAAC;AAAA,MACvE;AAAA,IACF;AAAA,EACF;AAEA,QAAM,eAAe,CAAC,WAAmB,WAA0B;AACjE,QAAI,QAAQ;AACV;AAAA,QACE,CAAC,SAAS,IAAI,KAAK,KAAK,YAAY,IAAI,WAAW,KAAK,SAAS,GAAG,CAAC;AAAA,MACvE;AAAA,IACF,OAAO;AACL;AAAA,QACE,CAAC,SAAS,IAAI,KAAK,KAAK,YAAY,IAAI,WAAW,KAAK,SAAS,GAAG,CAAC;AAAA,MACvE;AAAA,IACF;AAAA,EACF;AAEA,QAAM,iBAAiB,CAAC,WAAmB,WAA0B;AACnE,QAAI,QAAQ;AACV;AAAA,QACE,CAAC,SACC,IAAI,KAAK,KAAK,YAAY,IAAI,YAAY,IAAI,KAAK,SAAS,GAAG,CAAC;AAAA,MACpE;AAAA,IACF,OAAO;AACL;AAAA,QACE,CAAC,SACC,IAAI,KAAK,KAAK,YAAY,IAAI,YAAY,IAAI,KAAK,SAAS,GAAG,CAAC;AAAA,MACpE;AAAA,IACF;AAAA,EACF;AAEA,QAAM,kBAAkB,CAAC,MAAY,mBAAkC;AACrE,QACG,cAAc,QAAQ,YAAY,QAAQ,kBAC1C,cAAc,QACb,YAAY,SACZ,uCAAW,gBAAc,mCAAS,cAClC,gBACF;AACA,mBAAa,IAAI;AACjB,iBAAW,IAAI;AACf;AAAA,IACF;AAEA,QAAI,CAAC,kBAAkB,cAAc,QAAQ,aAAa,MAAM;AAC9D,iBAAW,IAAI;AACf;AAAA,IACF;AAEA,QAAI,OAAO,oBAAI,KAAK,EAAG;AAEvB,QAAI,eAAe,IAAI,EAAG;AAE1B,UAAM,kBAAkB,YAAY,WAAW,UAAU;AAEzD,QAAI,CAAC,iBAAiB;AAEpB,UAAI,gBAAgB;AAClB,qBAAa,IAAI;AACjB,YAAI,WAAW,OAAO,SAAS;AAC7B,qBAAW,IAAI;AACf,4BAAkB,KAAK;AAAA,QACzB,OAAO;AACL,4BAAkB,KAAK;AAAA,QACzB;AAAA,MACF,OAAO;AACL,YAAI,aAAa,OAAO,WAAW;AACjC,uBAAa,IAAI;AACjB,qBAAW,IAAI;AACf,4BAAkB,KAAK;AAAA,QACzB,OAAO;AACL,qBAAW,IAAI;AACf,4BAAkB,IAAI;AAAA,QACxB;AAAA,MACF;AAAA,IACF,OAAO;AAEL,UAAI,kBAAkB,CAAC,aAAc,aAAa,SAAU;AAC1D,qBAAa,IAAI;AACjB,mBAAW,IAAI;AACf,0BAAkB,KAAK;AAAA,MACzB,OAAO;AACL,YAAI,OAAO,WAAY;AACrB,qBAAW,SAAS;AACpB,uBAAa,IAAI;AACjB,4BAAkB,IAAI;AAAA,QACxB,WAAW,WAAW,OAAO,SAAS;AACpC,uBAAa,IAAI;AACjB,qBAAW,IAAI;AACf,4BAAkB,KAAK;AAAA,QACzB,OAAO;AACL,qBAAW,IAAI;AACf,4BAAkB,IAAI;AAAA,QACxB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,mBAAmB,CAAC,YAAoB,WAA0B;AACtE,UAAM,OAAO,SAAS,UAAU,YAAY,IAAI,WAAW,YAAY;AAGvE,QAAI,gBAAgB,MAAM,UAAU,EAAG;AAEvC,QAAI,QAAQ;AACV,mBAAa,IAAI,KAAK,UAAU,YAAY,GAAG,YAAY,CAAC,CAAC;AAC7D,0BAAoB,KAAK;AAAA,IAC3B,OAAO;AACL,oBAAc,IAAI,KAAK,WAAW,YAAY,GAAG,YAAY,CAAC,CAAC;AAC/D,2BAAqB,KAAK;AAAA,IAC5B;AAAA,EACF;AAEA,QAAM,kBAAkB,CAAC,MAAc,WAA0B;AAE/D,QAAI,eAAe,IAAI,EAAG;AAC1B,QAAI,QAAQ;AACV,mBAAa,IAAI,KAAK,MAAM,UAAU,SAAS,GAAG,CAAC,CAAC;AACpD,0BAAoB,OAAO;AAAA,IAC7B,OAAO;AACL,oBAAc,IAAI,KAAK,MAAM,WAAW,SAAS,GAAG,CAAC,CAAC;AACtD,2BAAqB,OAAO;AAAA,IAC9B;AAAA,EACF;AAEA,QAAM,oBAAoB,CAAC,WAA0B;AACnD,QAAI,QAAQ;AACV,UAAI,qBAAqB,OAAO;AAC9B,4BAAoB,OAAO;AAAA,MAC7B,WAAW,qBAAqB,SAAS;AACvC,4BAAoB,MAAM;AAAA,MAC5B;AAAA,IACF,OAAO;AACL,UAAI,sBAAsB,OAAO;AAC/B,6BAAqB,OAAO;AAAA,MAC9B,WAAW,sBAAsB,SAAS;AACxC,6BAAqB,MAAM;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAEA,QAAM,kBAAkB,MAAM;AAC5B,QACE,cAAc,QACd,YAAY,SACZ,uCAAW,gBAAc,mCAAS,YAClC;AACA,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAEA,QAAM,oBAAoB,CAAC,WAA8B;AACvD,UAAM,EAAE,OAAO,IAAI,IAAI,OAAO,SAAS;AACvC,iBAAa,KAAK;AAClB,eAAW,GAAG;AACd,aAAS,OAAO,KAAK;AACrB,sBAAkB,IAAI;AAGtB,wBAAoB,KAAK;AACzB,yBAAqB,KAAK;AAE1B,UAAM,YACJ,IAAI,SAAS,IACb,MAAM,SAAS,IACf,MAAM,IAAI,YAAY,IAAI,MAAM,YAAY;AAE9C,QAAI,aAAa,GAAG;AAClB,mBAAa,IAAI,KAAK,MAAM,YAAY,GAAG,MAAM,SAAS,GAAG,CAAC,CAAC;AAC/D,oBAAc,IAAI,KAAK,IAAI,YAAY,GAAG,IAAI,SAAS,GAAG,CAAC,CAAC;AAAA,IAC9D,OAAO;AACL,YAAM,OAAO,IAAI,KAAK,MAAM,YAAY,GAAG,MAAM,SAAS,GAAG,CAAC;AAC9D,YAAM,QAAQ,IAAI,KAAK,MAAM,YAAY,GAAG,MAAM,SAAS,CAAC;AAC5D,mBAAa,IAAI;AACjB,oBAAc,KAAK;AAAA,IACrB;AAAA,EACF;AAEA,QAAM,CAAC,YAAY,aAAa,QAAI;AAAA,IAClC,YAAY,WAAW,SAAS,IAAI;AAAA,EACtC;AACA,QAAM,CAAC,UAAU,WAAW,QAAI,wBAAS,UAAU,WAAW,OAAO,IAAI,EAAE;AAE3E,+BAAU,MAAM;AACd,QAAI,WAAW;AACb,oBAAc,WAAW,SAAS,CAAC;AAAA,IACrC,OAAO;AACL,oBAAc,EAAE;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,SAAS,CAAC;AAEd,+BAAU,MAAM;AACd,QAAI,SAAS;AACX,kBAAY,WAAW,OAAO,CAAC;AAAA,IACjC,OAAO;AACL,kBAAY,EAAE;AAAA,IAChB;AAAA,EACF,GAAG,CAAC,OAAO,CAAC;AAEZ,QAAM,kBAAkB,CACtB,WACA,QACAC,aAAY,OACT;AACH,UAAM,OAAO,UAAU,YAAY;AAEnC,WACE,+CAAC,SAAI,WAAW,UAAUA,UAAS,IACjC;AAAA,qDAAC,SAAI,WAAU,0CACb;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,SAAS,MAAM,aAAa,IAAI,MAAM;AAAA,YACtC,WAAU;AAAA,YAEV,wDAAC,mCAAY,WAAU,WAAU;AAAA;AAAA,QACnC;AAAA,QAEA;AAAA,UAAC;AAAA;AAAA,YACC,SAAS,MAAM,kBAAkB,MAAM;AAAA,YACvC,WAAU;AAAA,YAET;AAAA;AAAA,QACH;AAAA,QAEA;AAAA,UAAC;AAAA;AAAA,YACC,SAAS,MAAM,aAAa,GAAG,MAAM;AAAA,YACrC,WAAU;AAAA,YAEV,wDAAC,oCAAa,WAAU,WAAU;AAAA;AAAA,QACpC;AAAA,SACF;AAAA,MAEA,8CAAC,SAAI,WAAU,0BACZ,sBAAY,IAAI,CAAC,OAAO,UAAU;AACjC,cAAM,aAAa,gBAAgB,MAAM,KAAK;AAC9C,eACE;AAAA,UAAC;AAAA;AAAA,YAEC,SAAS,MAAM,iBAAiB,OAAO,MAAM;AAAA,YAC7C,UAAU;AAAA,YACV,WAAW,uBACT,aACI,iDACA,mBACN,IACE,UAAU,SAAS,MAAM,SAAS,CAAC,aAC/B,4BACA,EACN;AAAA,YAEC;AAAA;AAAA,UAbI;AAAA,QAcP;AAAA,MAEJ,CAAC,GACH;AAAA,OACF;AAAA,EAEJ;AAEA,QAAM,iBAAiB,CAAC,WAAiB,QAAiBA,aAAY,OAAO;AAC3E,UAAM,cAAc,UAAU,YAAY;AAC1C,UAAM,cAAc,KAAK,MAAM,cAAc,EAAE,IAAI;AACnD,UAAM,QAAQ,CAAC;AAEf,aAAS,IAAI,aAAa,IAAI,cAAc,IAAI,KAAK;AACnD,YAAM,KAAK,CAAC;AAAA,IACd;AAEA,WACE,+CAAC,SAAI,WAAW,UAAUA,UAAS,IACjC;AAAA,qDAAC,SAAI,WAAU,0CACb;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,SAAS,MAAM,eAAe,IAAI,MAAM;AAAA,YACxC,WAAU;AAAA,YAEV,wDAAC,mCAAY,WAAU,WAAU;AAAA;AAAA,QACnC;AAAA,QAEA,+CAAC,QAAG,WAAU,kCACX;AAAA;AAAA,UAAY;AAAA,UAAI,cAAc;AAAA,WACjC;AAAA,QAEA;AAAA,UAAC;AAAA;AAAA,YACC,SAAS,MAAM,eAAe,GAAG,MAAM;AAAA,YACvC,WAAU;AAAA,YAEV,wDAAC,oCAAa,WAAU,WAAU;AAAA;AAAA,QACpC;AAAA,SACF;AAAA,MAEA,8CAAC,SAAI,WAAU,0BACZ,gBAAM,IAAI,CAAC,SAAS;AACnB,cAAM,aAAa,eAAe,IAAI;AACtC,eACE;AAAA,UAAC;AAAA;AAAA,YAEC,SAAS,MAAM,gBAAgB,MAAM,MAAM;AAAA,YAC3C,UAAU;AAAA,YACV,WAAW,uBACT,aACI,iDACA,mBACN,IACE,gBAAgB,QAAQ,CAAC,aACrB,4BACA,EACN;AAAA,YAEC;AAAA;AAAA,UAbI;AAAA,QAcP;AAAA,MAEJ,CAAC,GACH;AAAA,OACF;AAAA,EAEJ;AAEA,QAAM,iBAAiB,CAAC,WAAiB,QAAiBA,aAAY,OAAO;AAC3E,UAAM,OAAO,SAAS,mBAAmB;AAEzC,QAAI,SAAS,SAAS;AACpB,aAAO,gBAAgB,WAAW,QAAQA,UAAS;AAAA,IACrD;AAEA,QAAI,SAAS,QAAQ;AACnB,aAAO,eAAe,WAAW,QAAQA,UAAS;AAAA,IACpD;AAGA,UAAM,OAAO,UAAU,YAAY;AACnC,UAAM,QAAQ,UAAU,SAAS;AACjC,UAAM,WAAW,IAAI,KAAK,MAAM,OAAO,CAAC;AACxC,UAAM,UAAU,IAAI,KAAK,MAAM,QAAQ,GAAG,CAAC;AAC3C,UAAM,cAAc,QAAQ,QAAQ;AACpC,UAAM,oBAAoB,SAAS,OAAO;AAC1C,UAAM,OAAsB,CAAC;AAE7B,aAAS,IAAI,GAAG,IAAI,mBAAmB,KAAK;AAC1C,YAAM,WAAW,IAAI,KAAK,MAAM,OAAO,CAAC,oBAAoB,IAAI,CAAC;AACjE,WAAK;AAAA,QACH;AAAA,UAAC;AAAA;AAAA,YAEC,WAAU;AAAA,YAET,mBAAS,QAAQ;AAAA;AAAA,UAHb,QAAQ,CAAC;AAAA,QAIhB;AAAA,MACF;AAAA,IACF;AAEA,aAAS,MAAM,GAAG,OAAO,aAAa,OAAO;AAC3C,YAAM,OAAO,IAAI,KAAK,MAAM,OAAO,GAAG;AACtC,YAAM,UAAU,aAAa,UAAU,MAAM,SAAS;AACtD,YAAM,QAAQ,WAAW,UAAU,MAAM,OAAO;AAChD,YAAM,mBACJ,aAAa,WAAW,UAAU,MAAM,WAAW,OAAO;AAC5D,YAAM,YAAY,CAAC,WAAW,eAAe,IAAI;AACjD,YAAM,aAAa,eAAe,IAAI;AAEtC,WAAK;AAAA,QACH;AAAA,UAAC;AAAA;AAAA,YAEC,WAAW,6DACT,aAAa,qCAAqC,gBACpD;AAAA,YACA,SAAS,MAAM,gBAAgB,MAAM,MAAM;AAAA,YAC3C,cAAc,MAAM,CAAC,cAAc,eAAe,IAAI;AAAA,YACtD,cAAc,MAAM,eAAe,IAAI;AAAA,YAEtC,oBACC,gFACE;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,WAAW,gDAAgD,gBAAgB,CAAC;AAAA;AAAA,cAC9E;AAAA,cACA;AAAA,gBAAC;AAAA;AAAA,kBACC,WAAW;AAAA,kBAEV;AAAA;AAAA,cACH;AAAA,eACF,IACE,QACF,gFACE;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,WAAW,gDAAgD,gBAAgB,CAAC;AAAA;AAAA,cAC9E;AAAA,cACA,8CAAC,SAAI,WAAU,wGACZ,eACH;AAAA,eACF,IACE,oBAAoB,YACtB,gFACE;AAAA,4DAAC,SAAI,WAAU,iCAAgC;AAAA,cAC/C,8CAAC,SAAI,WAAU,iBAAiB,eAAI;AAAA,eACtC,IAEA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAW,yDACT,CAAC,aAAa,4BAA4B,EAC5C;AAAA,gBAEC;AAAA;AAAA,YACH;AAAA;AAAA,UAxCG;AAAA,QA0CP;AAAA,MACF;AAAA,IACF;AAEA,UAAM,aAAa;AACnB,UAAM,iBAAiB,aAAa,KAAK;AACzC,aAAS,IAAI,GAAG,KAAK,gBAAgB,KAAK;AACxC,YAAM,WAAW,IAAI,KAAK,MAAM,QAAQ,GAAG,CAAC;AAC5C,WAAK;AAAA,QACH;AAAA,UAAC;AAAA;AAAA,YAEC,WAAU;AAAA,YAET,mBAAS,QAAQ;AAAA;AAAA,UAHb,QAAQ,CAAC;AAAA,QAIhB;AAAA,MACF;AAAA,IACF;AAEA,WACE,+CAAC,SAAI,WAAW,UAAUA,UAAS,IACjC;AAAA,qDAAC,SAAI,WAAU,0CACb;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,SAAS,MAAM,cAAc,IAAI,MAAM;AAAA,YACvC,WAAU;AAAA,YAEV,wDAAC,mCAAY,WAAU,WAAU;AAAA;AAAA,QACnC;AAAA,QAEA;AAAA,UAAC;AAAA;AAAA,YACC,SAAS,MAAM,kBAAkB,MAAM;AAAA,YACvC,WAAU;AAAA,YAET;AAAA,qBAAO,KAAK;AAAA,cAAE;AAAA,cAAE;AAAA;AAAA;AAAA,QACnB;AAAA,QAEA;AAAA,UAAC;AAAA;AAAA,YACC,SAAS,MAAM,cAAc,GAAG,MAAM;AAAA,YACtC,WAAU;AAAA,YAEV,wDAAC,oCAAa,WAAU,WAAU;AAAA;AAAA,QACpC;AAAA,SACF;AAAA,MAEA,8CAAC,SAAI,WAAU,+BACZ,WAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,EAAE,IAAI,CAAC,QAC/C;AAAA,QAAC;AAAA;AAAA,UAEC,WAAU;AAAA,UAET;AAAA;AAAA,QAHI;AAAA,MAIP,CACD,GACH;AAAA,MAEA,8CAAC,SAAI,WAAU,oBAAoB,gBAAK;AAAA,OAC1C;AAAA,EAEJ;AAEA,QAAM,eAAe,MAAM;AACzB,UAAM,gBAAgB,qBAAqB;AAC3C,UAAM,cAAc,mBAAmB;AAEvC,QAAI,eAAe,MAAM,aAAa,IAAI;AACxC,mBAAa,IAAI;AACjB,iBAAW,IAAI;AAAA,IACjB,OAAO;AACL,mBAAa,aAAa;AAC1B,iBAAW,WAAW;AAAA,IACxB;AAEA,kBAAc,gBAAgB,WAAW,aAAa,IAAI,EAAE;AAC5D,gBAAY,cAAc,WAAW,WAAW,IAAI,EAAE;AAEtD,aAAS,EAAE;AACX,sBAAkB,IAAI;AACtB,uBAAmB,KAAK;AAGxB,wBAAoB,KAAK;AACzB,yBAAqB,KAAK;AAE1B;AAAA,MACE,gBACI,IAAI,KAAK,cAAc,YAAY,GAAG,cAAc,SAAS,GAAG,CAAC,IACjE,oBAAI,KAAK;AAAA,IACf;AACA;AAAA,MACE,cACI,IAAI,KAAK,YAAY,YAAY,GAAG,YAAY,SAAS,GAAG,CAAC,IAC7D,oBAAI,KAAK;AAAA,IACf;AAEA,cAAU,KAAK;AACf,QAAI,uBAAuB,OAAW,oBAAmB;AAAA,EAC3D;AAEA,QAAM,sBAAsB,CAC1B,YACA,gBACY;AACZ,QAAI,WAAW,WAAW,GAAI,QAAO;AACrC,QAAI,CAAC,aAAa,UAAU,EAAG,QAAO;AAEtC,UAAM,CAAC,OAAO,KAAK,IAAI,IAAI,WACxB,MAAM,GAAG,EACT,IAAI,CAAC,QAAQ,SAAS,KAAK,EAAE,CAAC;AACjC,UAAM,YAAY,IAAI,KAAK,MAAM,QAAQ,GAAG,GAAG;AAE/C,QAAI,eAAe,SAAS,EAAG,QAAO;AAEtC,QAAI,eAAe,WAAW,YAAY,QAAS,QAAO;AAC1D,QAAI,CAAC,eAAe,aAAa,YAAY,UAAW,QAAO;AAE/D,WAAO;AAAA,EACT;AAEA,QAAM,qBAAqB,MAAe;AACxC,QACE,UAAU,kBACV,YAAY,SACX,CAAC,eAAe,OAAO,KACtB,cAAc,IAAI,KAAK,UAAU,GAAG,IAAI,KAAK,QAAQ,CAAC;AAExD,aAAO;AACT,QAAI,cAAc,QAAQ,YAAY,KAAM,QAAO;AAEnD,QAAI,CAAC,gBAAiB,QAAO;AAE7B,UAAM,eAAe,oBAAoB,YAAY,IAAI;AACzD,UAAM,aAAa,oBAAoB,UAAU,KAAK;AAEtD,WAAO,gBAAgB;AAAA,EACzB;AAEA,SACE,8CAAC,SACC,yDAAC,SACE;AAAA,KAAC,iBAAiB,CAAC,mBAClB;AAAA,MAAC;AAAA;AAAA,QACC,eAAW;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,QAEC;AAAA;AAAA,IACH;AAAA,IAEF,+CAAC,SAAI,WAAU,YAAW,KAAK,aAC5B;AAAA,OAAC,iBAAiB,CAAC,mBAClB;AAAA,QAAC;AAAA;AAAA,UACC,eAAW;AAAA,YACT,sFAAsF,OAAO,2BAC3F,UAAU,kBACZ;AAAA,YACA;AAAA,UACF;AAAA,UACA,SAAS,MAAM;AACb,iCAAqB,UAAU;AAC/B,+BAAmB,UAAU;AAE7B,gCAAoB,KAAK;AACzB,iCAAqB,KAAK;AAC1B,sBAAU,CAAC,MAAM;AAAA,UACnB;AAAA,UAEA;AAAA,0DAAC,UAAK,WAAU,WACb,uBAAa,UACV,GAAG,WAAW,SAAS,CAAC,MAAM,WAAW,OAAO,CAAC,KACjD,YACA,GAAG,WAAW,SAAS,CAAC,uBACxB,IACN;AAAA,YACA,8CAAC,SAAI,WAAU,iEACb;AAAA,cAAC;AAAA;AAAA,gBACC,OAAM;AAAA,gBACN,QAAO;AAAA,gBACP,SAAQ;AAAA,gBACR,MAAK;AAAA,gBACL,OAAM;AAAA,gBAEN;AAAA,kBAAC;AAAA;AAAA,oBACC,GAAE;AAAA,oBACF,MAAK;AAAA;AAAA,gBACP;AAAA;AAAA,YACF,GACF;AAAA;AAAA;AAAA,MACF;AAAA,MAGD,UACC;AAAA,QAAC;AAAA;AAAA,UACC,WAAW,6BACT,gBAAgB,KAAK,MACvB,8CAA8C,cAAc;AAAA,UAC5D,OAAO;AAAA,YACL,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,aAAa,gBAAgB,SAAS;AAAA,UACxC;AAAA,UAEA,yDAAC,SAAI,WAAU,QACb;AAAA,0DAAC,SAAI,WAAU,sBACb,yDAAC,SAAI,WAAU,+CACb;AAAA,6DAAC,SAAI,WAAU,iBACZ;AAAA,6BAAa,IAAI,CAAC,QAAQ,UACzB;AAAA,kBAAC;AAAA;AAAA,oBAEC,SAAS,MAAM;AACb,wCAAkB,MAAM;AACxB,0BAAI,iBAAiB;AACnB,2CAAmB,KAAK;AAAA,sBAC1B;AAAA,oBACF;AAAA,oBACA,WAAW,qHACT,OAAO,UAAU,QACb,+BACA,EACN;AAAA,oBAEC,iBAAO;AAAA;AAAA,kBAbH;AAAA,gBAcP,CACD;AAAA,gBACD;AAAA,kBAAC;AAAA;AAAA,oBACC,WAAW,qHACT,kBAAkB,+BAA+B,EACnD;AAAA,oBACA,SAAS,MAAM;AACb,yCAAmB,IAAI;AACvB,+BAAS,cAAc;AACvB,uCAAiB,UAAU;AAC3B,oCAAc,EAAE;AAChB,kCAAY,EAAE;AACd,mCAAa,IAAI;AACjB,iCAAW,IAAI;AACf,oCAAc,oBAAI,KAAK,CAAC;AACxB,mCAAa,oBAAI,KAAK,CAAC;AAEvB,0CAAoB,KAAK;AACzB,2CAAqB,KAAK;AAAA,oBAC5B;AAAA,oBACD;AAAA;AAAA,gBAED;AAAA,gBACA,+CAAC,SAAI,WAAU,kBACb;AAAA;AAAA,oBAAC;AAAA;AAAA,sBACC,MAAK;AAAA,sBACL,aAAY;AAAA,sBACZ,OAAO;AAAA,sBACP,UAAU,CAAC,MAAM;AACf,4BAAI,CAAC,gBAAiB;AAEtB,8BAAM,WAAW,EAAE,OAAO;AAC1B,8BAAM,iBAAiB;AAAA,0BACrB;AAAA,0BACA;AAAA,4BACE,iBAAiB;AAAA,4BACjB;AAAA,0BACF;AAAA,wBACF;AAEA,sCAAc,cAAc;AAE5B,4BAAI,eAAe,WAAW,IAAI;AAChC,gCAAM,CAAC,OAAO,KAAK,IAAI,IAAI,eACxB,MAAM,GAAG,EACT,IAAI,CAAC,QAAQ,SAAS,KAAK,EAAE,CAAC;AACjC,gCAAM,aAAa,IAAI;AAAA,4BACrB;AAAA,4BACA,QAAQ;AAAA,4BACR;AAAA,4BACA;AAAA,4BACA;AAAA,4BACA;AAAA,4BACA;AAAA,0BACF;AACA,uCAAa,UAAU;AACvB;AAAA,4BACE,IAAI;AAAA,8BACF,WAAW,YAAY;AAAA,8BACvB,WAAW,SAAS;AAAA,8BACpB;AAAA,4BACF;AAAA,0BACF;AAAA,wBACF;AAAA,sBACF;AAAA,sBACA,QAAQ,MAAM;AACZ,4BAAI,CAAC,gBAAiB;AACtB,8BAAM,eAAe,IAAI,KAAK,QAAQ;AAEtC,4BACE,eAAe,YAAY,KAC3B,cAAc,QACd,CAAC,cAAc,WAAW,YAAY,GACtC;AACA,qCAAW,IAAI;AACf,sCAAY,EAAE;AAAA,wBAChB;AAAA,sBACF;AAAA,sBACA,UAAU,CAAC;AAAA,sBACX,WAAW,0FACT,CAAC,kBACG,mCACA,EACN;AAAA;AAAA,kBACF;AAAA,kBAEA;AAAA,oBAAC;AAAA;AAAA,sBACC,MAAK;AAAA,sBACL,aAAY;AAAA,sBACZ,OAAO;AAAA,sBACP,UAAU,CAAC,MAAM;AACf,4BAAI,CAAC,gBAAiB;AAEtB,8BAAM,WAAW,EAAE,OAAO;AAC1B,8BAAM,iBAAiB;AAAA,0BACrB;AAAA,0BACA;AAAA,4BACE,iBAAiB;AAAA,4BACjB;AAAA,0BACF;AAAA,wBACF;AAEA,oCAAY,cAAc;AAE1B,4BAAI,eAAe,WAAW,IAAI;AAChC,gCAAM,CAAC,OAAO,KAAK,IAAI,IAAI,eACxB,MAAM,GAAG,EACT,IAAI,CAAC,QAAQ,SAAS,KAAK,EAAE,CAAC;AACjC,gCAAM,aAAa,IAAI;AAAA,4BACrB;AAAA,4BACA,QAAQ;AAAA,4BACR;AAAA,4BACA;AAAA,4BACA;AAAA,4BACA;AAAA,4BACA;AAAA,0BACF;AACA,qCAAW,UAAU;AACrB;AAAA,4BACE,IAAI;AAAA,8BACF,WAAW,YAAY;AAAA,8BACvB,WAAW,SAAS;AAAA,8BACpB;AAAA,4BACF;AAAA,0BACF;AAAA,wBACF;AACA,4BACE,eAAe,WAAW,MAC1B,eAAe,IAAI,KAAK,cAAc,CAAC,KACvC,cAAc,QACd,CAAC;AAAA,0BACC;AAAA,0BACA,IAAI,KAAK,cAAc;AAAA,wBACzB,GACA;AACA,qCAAW,IAAI;AACf,sCAAY,EAAE;AAAA,wBAChB;AAAA,sBACF;AAAA,sBACA,QAAQ,MAAM;AACZ,4BAAI,CAAC,gBAAiB;AACtB,8BAAM,eAAe,IAAI,KAAK,QAAQ;AACtC,4BACE,eAAe,YAAY,KAC3B,eAAe,MACf,cAAc,QACd,CAAC,cAAc,WAAW,IAAI,KAAK,YAAY,CAAC,GAChD;AACA,qCAAW,IAAI;AACf,sCAAY,EAAE;AAAA,wBAChB;AAAA,sBACF;AAAA,sBACA,UAAU,CAAC,mBAAmB,eAAe;AAAA,sBAC7C,WAAW,0FACT,CAAC,kBACG,mCACA,EACN;AAAA;AAAA,kBACF;AAAA,mBACF;AAAA,iBACF;AAAA,cAEA,+CAAC,SAAI,WAAU,cACb;AAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,SAAS,MAAM,aAAa;AAAA,oBAC5B,WAAU;AAAA,oBACX;AAAA;AAAA,gBAED;AAAA,gBACA;AAAA,kBAAC;AAAA;AAAA,oBACC,SAAS,YAAY;AACnB,0BAAI,CAAC,mBAAmB,EAAG;AAC3B,iCAAW,IAAI;AAEf,0BAAI,UAAU;AACZ,2CAAmB,UAAU;AAC/B,0BAAI,UAAU;AACZ,2CAAmB,UAAU;AAC/B,oCAAc,UAAU;AACxB,uCAAiB,UAAU;AAC3B,2CAAqB,UAAU;AAC/B,yCAAmB,UAAU;AAE7B,0BAAI,eAAe;AACjB;AAAA,0BACE,YAAY,WAAW,SAAS,IAAI;AAAA,0BACpC,UAAU,WAAW,OAAO,IAAI;AAAA,wBAClC;AACA,yEAAiB;AACjB,4BAAI;AACF,8BAAI,cAAc,QAAQ,YAAY;AACpC,mCAAM;AAAA,8BACJ,WAAW,SAAS;AAAA,8BACpB,WAAW,OAAO;AAAA;AAAA,wBAExB,UAAE;AACA,2EAAiB;AAAA,wBACnB;AAAA,sBACF,OAAO;AACL;AAAA,0BACE,YAAY,WAAW,SAAS,IAAI;AAAA,0BACpC,UAAU,WAAW,OAAO,IAAI;AAAA,wBAClC;AAAA,sBACF;AACA,0BAAI,iBAAiB;AACnB,oCAAY,EAAE;AACd,sCAAc,EAAE;AAChB,oCAAY,EAAE;AACd,qCAAa,IAAI;AACjB,mCAAW,IAAI;AACf,sCAAc,oBAAI,KAAK,CAAC;AACxB,mCAAW,KAAK;AAChB,6CAAqB,UAAU;AAC/B,2CAAmB,UAAU;AAAA,sBAC/B;AACA,0BAAI,uBAAuB;AACzB,2CAAmB;AAErB,gCAAU,KAAK;AAAA,oBACjB;AAAA,oBACA,WAAW,wGACT,CAAC,mBAAmB,KAAK,YAC3B;AAAA,oBAEC,0BACC,cACE;AAAA,sBAAC;AAAA;AAAA,wBACC,WAAU;AAAA,wBACV,OAAM;AAAA,wBACN,MAAK;AAAA,wBACL,SAAQ;AAAA,wBAER;AAAA;AAAA,4BAAC;AAAA;AAAA,8BACC,WAAU;AAAA,8BACV,IAAG;AAAA,8BACH,IAAG;AAAA,8BACH,GAAE;AAAA,8BACF,QAAO;AAAA,8BACP,aAAY;AAAA;AAAA,0BACb;AAAA,0BACD;AAAA,4BAAC;AAAA;AAAA,8BACC,WAAU;AAAA,8BACV,MAAK;AAAA,8BACL,GAAE;AAAA;AAAA,0BACH;AAAA;AAAA;AAAA,oBACH,IAEA,aAGF;AAAA;AAAA,gBAEJ;AAAA,iBACF;AAAA,eACF,GACF;AAAA,YAEA,+CAAC,SAAI,WAAU,QACZ;AAAA;AAAA,gBACC;AAAA,gBACA;AAAA,gBACA;AAAA,cACF;AAAA,cACC;AAAA,gBACC;AAAA,gBACA;AAAA,gBACA;AAAA,cACF;AAAA,eACF;AAAA,aACF;AAAA;AAAA,MACF;AAAA,OAEJ;AAAA,KACF,GACF;AAEJ;AAEA,IAAO,oBAAQ;;;AErxCf,IAAAC,gBAAgE;AAChE,IAAAC,0BAAwB;AAwGlB,IAAAC,uBAAA;AAlFN,IAAM,8BAEF,CAAC;AAAA,EACH,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,qBAAqB;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,qBAAqB;AAAA,EACrB,aAAa;AAAA,EACb,cAAc;AAAA,EACd,oBAAoB;AAAA,EACpB,qBAAqB;AAAA,EACrB,kBAAkB;AACpB,MAAM;AA3CN;AA4CE,QAAM,CAAC,iBAAiB,kBAAkB,QAAI,wBAAS,OAAO;AAC9D,QAAM,CAAC,gBAAgB,iBAAiB,QAAI,wBAAS,KAAK;AAE1D,QAAM,eAAW,sBAAyB,IAAI;AAC9C,QAAM,kBAAc,sBAAuB,IAAI;AAE/C,QAAM,eAAe,UAChB,gBACD,gBACA,CAAC,aAAuB,IACxB,CAAC;AAEL,+BAAU,MAAM;AACd,UAAM,qBAAqB,CAAC,UAAsB;AAChD,UACE,YAAY,WACZ,CAAC,YAAY,QAAQ,SAAS,MAAM,MAAc,GAClD;AACA,0BAAkB,KAAK;AAAA,MACzB;AAAA,IACF;AACA,aAAS,iBAAiB,aAAa,kBAAkB;AACzD,WAAO,MAAM,SAAS,oBAAoB,aAAa,kBAAkB;AAAA,EAC3E,GAAG,CAAC,CAAC;AAEL,+BAAU,MAAM;AACd,QAAI,CAAC,WAAW,CAAC,oBAAoB;AACnC;AAAA,QACE,QAAQ,OAAO,CAAC,QAAQ,CAAC,aAAa,SAAS,IAAI,GAAG,CAAC;AAAA,MACzD;AACA;AAAA,IACF;AAEA,UAAM,WAAW,QACd;AAAA,MAAO,CAAC,WACP,OAAO,KAAK,YAAY,EAAE,SAAS,WAAW,YAAY,CAAC;AAAA,IAC7D,EACC,OAAO,CAAC,WAAW,CAAC,aAAa,SAAS,OAAO,GAAG,CAAC;AAExD,uBAAmB,QAAQ;AAE3B,QAAI,YAAY;AACd,wBAAkB,IAAI;AAAA,IACxB,OAAO;AACL,wBAAkB,KAAK;AAAA,IACzB;AAAA,EACF,GAAG,CAAC,YAAY,SAAS,aAAa,CAAC;AAEvC,QAAM,oBAAoB,CAAC,MAA2C;AACpE,kBAAc,EAAE,OAAO,KAAK;AAC5B,aAAS,CAAC;AAAA,EACZ;AAEA,QAAM,qBAAqB,CAAC,QAAgB;AAC1C,aAAS,GAAG;AACZ,kBAAc,EAAE;AAChB,sBAAkB,KAAK;AAAA,EACzB;AAEA,SACE,+CAAC,SACC;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,eAAW;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,QAEC;AAAA;AAAA,IACH;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,WAAU;AAAA,QACV,SAAS,MAAM;AApHvB,cAAAC,KAAA;AAqHU,iBAAAA,MAAA,SAAS,YAAT,gBAAAA,IAAkB,UAAlB,wBAAAA;AACA,cAAI,CAAC,kBAAkB,oBAAoB;AACzC,8BAAkB,IAAI;AAAA,UACxB;AAAA,QACF;AAAA,QAEA;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,eAAW;AAAA,gBACT;AAAA,gBACA;AAAA,cACF;AAAA,cAEC;AAAA,2BAAW,MAAM,QAAQ,YAAY,IAClC,aAAa,IAAI,CAAC,YAAY;AAC5B,wBAAM,SAAS,QAAQ,KAAK,CAAC,QAAQ,IAAI,QAAQ,OAAO;AACxD,yBACE;AAAA,oBAAC;AAAA;AAAA,sBAEC,eAAW;AAAA,wBACT;AAAA,wBACA;AAAA,sBACF;AAAA,sBAEC;AAAA,iCAAS,OAAO,OAAO;AAAA,wBACvB,YACC;AAAA,0BAAC;AAAA;AAAA,4BACC,SAAS,CAAC,MAAM;AACd,gCAAE,gBAAgB;AAClB,uCAAS,OAAO;AAAA,4BAClB;AAAA,4BACA,eAAW;AAAA,8BACT;AAAA,8BACA;AAAA,4BACF;AAAA,4BAEA;AAAA,8BAAC;AAAA;AAAA,gCACC,OAAM;AAAA,gCACN,OAAM;AAAA,gCACN,QAAO;AAAA,gCACP,SAAQ;AAAA,gCACR,MAAK;AAAA,gCAEL;AAAA,kCAAC;AAAA;AAAA,oCACC,GAAE;AAAA,oCACF,MAAK;AAAA;AAAA,gCACP;AAAA;AAAA,4BACF;AAAA;AAAA,wBACF;AAAA;AAAA;AAAA,oBA9BG;AAAA,kBAgCP;AAAA,gBAEJ,CAAC,IACD,aAAa,SAAS,KACpB;AAAA,kBAAC;AAAA;AAAA,oBACC,eAAW;AAAA,sBACT;AAAA,sBACA;AAAA,oBACF;AAAA,oBAEA;AAAA,oEAAC,UAAK,WAAU,qCACb,yBAAQ,KAAK,CAAC,QAAQ,IAAI,QAAQ,aAAa,CAAC,CAAC,MAAjD,mBAAoD,SACnD,aAAa,CAAC,GAClB;AAAA,sBACC,YACC;AAAA,wBAAC;AAAA;AAAA,0BACC,SAAS,CAAC,MAAM;AAtLtC,gCAAAA;AAuLwB,8BAAE,gBAAgB;AAClB;AAAA,gCACEA,MAAA,QAAQ,KAAK,CAAC,QAAQ,IAAI,QAAQ,aAAa,CAAC,CAAC,MAAjD,gBAAAA,IACI,SAAQ,aAAa,CAAC;AAAA,4BAC5B;AAAA,0BACF;AAAA,0BACA,eAAW;AAAA,4BACT;AAAA,4BACA;AAAA,0BACF;AAAA,0BAEA;AAAA,4BAAC;AAAA;AAAA,8BACC,OAAM;AAAA,8BACN,OAAM;AAAA,8BACN,QAAO;AAAA,8BACP,SAAQ;AAAA,8BACR,MAAK;AAAA,8BAEL;AAAA,gCAAC;AAAA;AAAA,kCACC,GAAE;AAAA,kCACF,MAAK;AAAA;AAAA,8BACP;AAAA;AAAA,0BACF;AAAA;AAAA,sBACF;AAAA;AAAA;AAAA,gBAEJ;AAAA,gBAEL,CAAC,WAAW,CAAC,sBAAsB,aAAa,WAAW,KAC1D,8CAAC,UAAK,WAAU,mCAAkC,uBAAS;AAAA,gBAE5D,WAAW,sBACV;AAAA,kBAAC;AAAA;AAAA,oBACC,MAAK;AAAA,oBACL,KAAK;AAAA,oBACL,OAAO;AAAA,oBACP,WAAW;AAAA,oBACX,UAAU;AAAA,oBACV,WAAU;AAAA,oBACV,SAAS,MAAM;AACb,0BAAI,CAAC,mBAAmB,CAAC,WAAW,aAAa;AAC/C,0CAAkB,IAAI;AAAA,sBACxB;AAAA,oBACF;AAAA;AAAA,gBACF;AAAA;AAAA;AAAA,UAEJ;AAAA,UAEC,kBAAkB,gBAAgB,SAAS,KAC1C;AAAA,YAAC;AAAA;AAAA,cACC,eAAW;AAAA,gBACT;AAAA,gBACA;AAAA,cACF;AAAA,cAEA,wDAAC,SAAI,WAAU,oCACZ,0BAAgB,IAAI,CAAC,WACpB;AAAA,gBAAC;AAAA;AAAA,kBAEC,WAAU;AAAA,kBACV,SAAS,MAAM,mBAAmB,OAAO,GAAG;AAAA,kBAE3C,iBAAO;AAAA;AAAA,gBAJH,OAAO;AAAA,cAKd,CACD,GACH;AAAA;AAAA,UACF;AAAA;AAAA;AAAA,IAEJ;AAAA,KACF;AAEJ;AAEA,IAAO,sCAAQ;;;AC9Pf,IAAAC,0BAAwB;AAyBlB,IAAAC,uBAAA;AAZN,IAAM,kBAAkD,CAAC;AAAA,EACvD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,aAAa;AACf,MAAM;AACJ,SACE,+CAAC,SACC;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,eAAW;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,QAEC;AAAA;AAAA,IACH;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACC,eAAW;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,QAEC;AAAA,qBAAW,IAAI,CAAC,OACf;AAAA,YAAC;AAAA;AAAA,cAEC,WAAU;AAAA,cAET;AAAA;AAAA,gBACD;AAAA,kBAAC;AAAA;AAAA,oBACC,SAAS,MAAM,aAAa,EAAE;AAAA,oBAC9B,cAAY,UAAU,EAAE;AAAA,oBACxB,WAAU;AAAA,oBAEV;AAAA,sBAAC;AAAA;AAAA,wBACC,OAAM;AAAA,wBACN,OAAM;AAAA,wBACN,QAAO;AAAA,wBACP,SAAQ;AAAA,wBACR,MAAK;AAAA,wBAEL;AAAA,0BAAC;AAAA;AAAA,4BACC,GAAE;AAAA,4BACF,MAAK;AAAA;AAAA,wBACP;AAAA;AAAA,oBACF;AAAA;AAAA,gBACF;AAAA;AAAA;AAAA,YArBK;AAAA,UAsBP,CACD;AAAA,UAED;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,OAAO;AAAA,cACP;AAAA,cACA,WAAW;AAAA,cACX,WAAU;AAAA;AAAA,UACZ;AAAA;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;AAEA,IAAO,0BAAQ;;;AChFf,IAAAC,gBAAyD;AACzD,IAAAC,0BAAwB;AAiJV,IAAAC,uBAAA;AAhHC,SAAR,qBAAsC;AAAA,EAC3C,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB,kBAAkB;AAAA,EAClB,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,oBAAoB;AAAA,EACpB,WAAW;AAAA,EACX,UAAU;AAAA,EACV,cAAc;AAAA,EACd,aAAa;AAAA,EACb,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,gBAAgB;AAAA,EAChB,mBAAmB;AAAA,EACnB,yBAAyB;AAC3B,GAA8B;AAC5B,QAAM,CAAC,QAAQ,SAAS,QAAI,wBAAS,KAAK;AAC1C,QAAM,CAAC,YAAY,aAAa,QAAI,wBAAS,EAAE;AAC/C,QAAM,kBAAc,sBAAuB,IAAI;AAC/C,QAAM,cAAU,sBAAuB,IAAI;AAC3C,QAAM,uBAAmB,sBAAiC;AAC1D,QAAM,CAAC,WAAW,YAAY,QAAI,wBAAwB,IAAI;AAG9D,QAAM,iBAAiB,QAAQ,KAAK,CAAC,QAAQ,IAAI,OAAO,KAAK,KAAK;AAGlE,QAAM,mBAAe,2BAAY,MAAM;AACrC,QAAI,CAAC,QAAQ,WAAW,aAAa,CAAC,QAAS;AAE/C,UAAM,EAAE,WAAW,cAAc,aAAa,IAAI,QAAQ;AAC1D,QAAI,YAAY,gBAAgB,eAAe,IAAI;AACjD;AAAA,IACF;AAAA,EACF,GAAG,CAAC,WAAW,SAAS,aAAa,CAAC;AAGtC,QAAM,yBAAqB;AAAA,IACzB,CAAC,kBAA0B;AACzB,oBAAc,aAAa;AAE3B,UAAI,UAAU;AACZ,YAAI,iBAAiB,SAAS;AAC5B,uBAAa,iBAAiB,OAAO;AAAA,QACvC;AAEA,yBAAiB,UAAU,WAAW,MAAM;AAC1C,mBAAS,aAAa;AAAA,QACxB,GAAG,gBAAgB;AAAA,MACrB;AAAA,IACF;AAAA,IACA,CAAC,UAAU,gBAAgB;AAAA,EAC7B;AAGA,+BAAU,MAAM;AACd,WAAO,MAAM;AACX,UAAI,iBAAiB,SAAS;AAC5B,qBAAa,iBAAiB,OAAO;AAAA,MACvC;AAAA,IACF;AAAA,EACF,GAAG,CAAC,CAAC;AAGL,QAAM,qBAAqB,MAAM;AAC/B,QAAI,UAAU;AAEZ,aAAO;AAAA,IACT,OAAO;AACL,aAAO,QAAQ;AAAA,QAAO,CAAC,QAAK;AAlHlC;AAmHS,4BAAI,SAAJ,YAAY,IAAI,YAAY,EAAE,SAAS,WAAW,YAAY,CAAC;AAAA;AAAA,MAClE;AAAA,IACF;AAAA,EACF;AAEA,QAAM,kBAAkB,mBAAmB;AAG3C,QAAM,oBAAoB,MAAM;AAC9B,QAAI,kBAAkB,UAAU;AAC9B,UAAI,WAAW,SAAS,iBAAiB;AACvC,eAAO,iBAAiB,CAAC,cAAc,IAAI,CAAC;AAAA,MAC9C;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,QAAM,iBAAiB,kBAAkB;AAGzC,QAAM,uBAAuB,MAAM;AACjC,QAAI,kBAAkB,YAAY,WAAW,SAAS,iBAAiB;AACrE,aACE,+CAAC,SAAI,WAAU,yBACb;AAAA,sDAAC,SAAI,WAAU,sBACb;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,MAAK;AAAA,YACL,QAAO;AAAA,YACP,SAAQ;AAAA,YAER;AAAA,cAAC;AAAA;AAAA,gBACC,eAAc;AAAA,gBACd,gBAAe;AAAA,gBACf,aAAa;AAAA,gBACb,GAAE;AAAA;AAAA,YACJ;AAAA;AAAA,QACF,GACF;AAAA,QACA,+CAAC,OAAE,WAAU,qCAAoC;AAAA;AAAA,UAC/B;AAAA,UAAiB;AAAA,UAChC,oBAAoB,IAAI,cAAc;AAAA,UAAa;AAAA,WACtD;AAAA,QACC,mBAAmB,KAClB,8CAAC,OAAE,WAAU,8BAA6B,uCAE1C;AAAA,SAEJ;AAAA,IAEJ;AAEA,WACE,8CAAC,SAAI,WAAU,mCACZ,WAAC,aAAa,QAAQ,WAAW,KAAK,cACzC;AAAA,EAEJ;AAEA,QAAM,qBAAqB,CAAC,UAAsB;AAChD,QACE,YAAY,WACZ,CAAC,YAAY,QAAQ,SAAS,MAAM,MAAc,GAClD;AACA,gBAAU,KAAK;AAAA,IACjB;AAAA,EACF;AAEA,+BAAU,MAAM;AACd,aAAS,iBAAiB,aAAa,kBAAkB;AACzD,WAAO,MAAM,SAAS,oBAAoB,aAAa,kBAAkB;AAAA,EAC3E,GAAG,CAAC,CAAC;AAGL,+BAAU,MAAM;AACd,QAAI,UAAU,cAAc,UAAU;AACpC,oBAAc,EAAE;AAChB,eAAS,EAAE;AAAA,IACb;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAGX,QAAM,eAAe,MAAM;AACzB,QAAI,CAAC,UAAU;AACb,gBAAU,CAAC,MAAM;AAAA,IACnB;AAAA,EACF;AAEA,SACE,+CAAC,SACC;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,eAAW;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,QACA,OAAO,EAAE,eAAe,QAAQ;AAAA,QAE/B;AAAA;AAAA,IACH;AAAA,IACA,+CAAC,SAAI,KAAK,aAAa,WAAU,YAC/B;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,SAAS;AAAA,UACT,eAAW;AAAA,YACT,mHACE,WACI,mDACA,SACA,qBACA,kBACN;AAAA,YACA;AAAA,UACF;AAAA,UAEA;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAW,WACT,WACI,kBACA,iBACA,kBACA,eACN;AAAA,gBAEC,4DAAgB,SAAQ;AAAA;AAAA,YAC3B;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAW,qCACT,SAAS,eAAe,EAC1B,IAAI,WAAW,kBAAkB,EAAE;AAAA,eAChC,UAAU,UAAU,QAAQ;AAAA;AAAA,gBAG/B;AAAA,kBAAC;AAAA;AAAA,oBACC,WAAU;AAAA,oBACV,OAAM;AAAA,oBACN,QAAO;AAAA,oBACP,SAAQ;AAAA,oBACR,MAAK;AAAA,oBACL,OAAM;AAAA,oBAEN;AAAA,oEAAC,OAAE,UAAS,0BACV;AAAA,wBAAC;AAAA;AAAA,0BACC,GAAE;AAAA,0BACF,MAAK;AAAA;AAAA,sBACP,GACF;AAAA,sBACA,8CAAC,UACC,wDAAC,cAAS,IAAG,oBACX;AAAA,wBAAC;AAAA;AAAA,0BACC,OAAM;AAAA,0BACN,QAAO;AAAA,0BACP,MAAK;AAAA,0BACL,WAAU;AAAA;AAAA,sBACZ,GACF,GACF;AAAA;AAAA;AAAA,gBACF;AAAA;AAAA,YACF;AAAA;AAAA;AAAA,MACF;AAAA,MAEC,UAAU,CAAC,YACV,8CAAC,SAAI,WAAU,2DACb,yDAAC,SAAI,WAAU,+DACZ;AAAA,sBACC,+CAAC,SAAI,WAAU,YACb;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,eAAW;AAAA,gBACT;AAAA,gBACA;AAAA,cACF;AAAA,cACA,OAAO;AAAA,cACP,UAAU,CAAC,MAAM,mBAAmB,EAAE,OAAO,KAAK;AAAA;AAAA,UACpD;AAAA,UACC,CAAC,cACA;AAAA,YAAC;AAAA;AAAA,cACC,eAAW;AAAA,gBACT;AAAA,gBACA;AAAA,cACF;AAAA,cAEC;AAAA;AAAA,UACH;AAAA,UAEF;AAAA,YAAC;AAAA;AAAA,cACC,eAAW;AAAA,gBACT;AAAA,gBACA,gBAAgB,UAAU;AAAA,cAC5B;AAAA,cAEA;AAAA,gBAAC;AAAA;AAAA,kBACC,OAAM;AAAA,kBACN,QAAO;AAAA,kBACP,SAAQ;AAAA,kBACR,MAAK;AAAA,kBACL,OAAM;AAAA,kBAEN;AAAA,oBAAC;AAAA;AAAA,sBACC,GAAE;AAAA,sBACF,MAAK;AAAA;AAAA,kBACP;AAAA;AAAA,cACF;AAAA;AAAA,UACF;AAAA,WACF;AAAA,QAGF;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,YACL,UAAU;AAAA,YACV,cAAc,MAAM,aAAa,SAAS;AAAA,YAC1C,cAAc,MAAM,aAAa,IAAI;AAAA,YACrC,eAAW;AAAA,cACT,6CACE,aAAa,SAAS,EACxB;AAAA,cACA;AAAA,YACF;AAAA,YAEC;AAAA,6BAAe,SAAS,IACrB,eAAe,IAAI,CAAC,QAClB;AAAA,gBAAC;AAAA;AAAA,kBAEC,eAAW;AAAA,oBACT,8DACE,IAAI,OAAO,SAAS,aAAa,OAC7B,8CACA,IAAI,OAAO,SAAS,aAAa,OACjC,iCACA,gBACN;AAAA,oBACA;AAAA,kBACF;AAAA,kBACA,SAAS,MAAM;AACb,6BAAS,IAAI,EAAE;AACf,8BAAU,KAAK;AAAA,kBACjB;AAAA,kBAEC,cAAI;AAAA;AAAA,gBAhBA,IAAI;AAAA,cAiBX,CACD,IACD,qBAAqB;AAAA,cACxB,aAAa,WACZ,8CAAC,SAAI,WAAU,iCACb,yDAAC,SAAI,WAAU,2CACb;AAAA,8DAAC,SAAI,WAAU,qEAAoE;AAAA,gBAClF;AAAA,iBACH,GACF;AAAA;AAAA;AAAA,QAEJ;AAAA,SACF,GACF;AAAA,OAEJ;AAAA,KACF;AAEJ;;;AClXA,IAAAC,0BAAwB;AAuBhB,IAAAC,uBAAA;AAfR,IAAM,kBAAkB,CAAC;AAAA,EACvB;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ;AAAA,EACA;AACF,MAAuB;AACrB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MAEC,eAAK,IAAI,CAAC,MAAM,UACf;AAAA,QAAC;AAAA;AAAA,UAEC,SAAS,MAAM;AACb,oBAAQ,IAAI;AAAA,UACd;AAAA,UACA,eAAW;AAAA,YACT,mDACE,iBAAiB,OACb,+CACA,iCACN,IAAI,QAAQ,IAAI,6BAA6B,EAAE;AAAA,YAC/C;AAAA,UACF;AAAA,UAEC;AAAA;AAAA,QAbI;AAAA,MAcP,CACD;AAAA;AAAA,EACH;AAEJ;AAEA,IAAO,0BAAQ;;;AC5Cf,sBAA0C;AAC1C,8BAAsC;AACtC,IAAAC,0BAAwB;AAoDhB,IAAAC,uBAAA;AA/BR,IAAM,kBAAkB,CAAC;AAAA,EACvB;AAAA,EACA,kBAAkB;AAAA,EAClB;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,aAAa;AAAA,EACb,eAAe;AAAA,EACf,UAAU;AAAA,EACV,SAAS;AAAA,EACT,mBAAmB;AAAA,EACnB,aAAa;AAAA,EACb,YAAY;AAAA,EACZ;AAAA,EACA,WAAW;AAAA,EACX,YAAY;AACd,MAAwB;AACtB,QAAM,iBAAa,6BAAQ,0BAAS,KAAK,CAAC,QAAI,0BAAS,KAAK,IAAI;AAEhE,QAAM,eAAe,CAAC,SAAsB;AAC1C,QAAI,MAAM;AACR,mBAAS,wBAAO,MAAM,YAAY,CAAC;AAAA,IACrC,OAAO;AACL,eAAS,EAAE;AAAA,IACb;AAAA,EACF;AAEA,SACE,+CAAC,SAAI,WAAU,UACZ;AAAA,aACC;AAAA,MAAC;AAAA;AAAA,QACC,eAAW;AAAA,UACT,GAAG,UAAU;AAAA,UACb;AAAA,QACF;AAAA,QAEC;AAAA;AAAA,IACH;AAAA,IAEF,+CAAC,SAAI,WAAU,YACb;AAAA;AAAA,QAAC,wBAAAC;AAAA,QAAA;AAAA,UACC,UAAU;AAAA,UACV,UAAU;AAAA,UACV,SAAS,gBAAgB,oBAAI,KAAK,IAAI;AAAA,UACtC,iBAAiB;AAAA,UACjB,YAAW;AAAA,UACX,eAAW;AAAA,YACT;AAAA,cACE,MAAM,cAAc,YAAY;AAAA,yEAC2B,OAAO,gBAAgB,gBAAgB;AAAA,cAClG,UAAU,KAAK,mBAAmB,EAAE;AAAA,cACpC,kBAAkB,UAAU,EAAE;AAAA;AAAA,YAEhC;AAAA,UACF;AAAA;AAAA,MACF;AAAA,MACC,cAAc;AAAA,MACd,mBACC;AAAA,QAAC;AAAA;AAAA,UACC,eAAW;AAAA,YACT;AAAA,YACA;AAAA,UACF;AAAA,UAEA;AAAA,YAAC;AAAA;AAAA,cACC,OAAM;AAAA,cACN,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,SAAQ;AAAA,cACR,MAAK;AAAA,cAEL;AAAA,gBAAC;AAAA;AAAA,kBACC,GAAE;AAAA,kBACF,MAAK;AAAA;AAAA,cACP;AAAA;AAAA,UACF;AAAA;AAAA,MACF;AAAA,OAEJ;AAAA,KACF;AAEJ;AAEA,IAAO,0BAAQ;;;AC3Gf,IAAAC,mBAAoC;AAEpC,IAAAC,2BAAsC;AACtC,IAAAC,0BAAwB;AA4DhB,IAAAC,uBAAA;AA3CR,IAAM,YAAY,CAAC;AAAA,EACjB;AAAA,EACA,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB;AAAA,EACA,YAAY;AAAA,EACZ,iBAAiB;AAAA,EACjB;AAAA,EACA,WAAW;AAAA,EACX,YAAY;AACd,MAAsB;AACpB,QAAM,aAAa,QAAQ,IAAI,KAAK,KAAK,IAAI;AAE7C,QAAM,eAAe,CAAC,SAAsB;AAC1C,QAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,GAAG;AAClC,eAAS,KAAK,YAAY,CAAC;AAAA,IAC7B;AAAA,EACF;AAEA,QAAM,MAAM,oBAAI,KAAK;AAErB,MAAI;AACJ,MAAI;AAEJ,MAAI,iBAAiB,cAAc;AACjC,UAAM,WAAW,IAAI,KAAK,YAAY;AACtC,kBAAU,6BAAW,QAAQ;AAE7B,YAAI,0BAAQ,QAAQ,GAAG;AACrB,gBAAU;AAAA,IACZ,OAAO;AACL,YAAM,WAAW,IAAI,KAAK,QAAQ;AAClC,eAAS,SAAS,IAAI,IAAI,IAAI,GAAG;AACjC,gBAAU;AAAA,IACZ;AAAA,EACF;AAEA,SACE,+CAAC,SAAI,WAAU,UACZ;AAAA,aACC;AAAA,MAAC;AAAA;AAAA,QACC,eAAW;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,QAEC;AAAA;AAAA,IACH;AAAA,IAEF,+CAAC,SAAI,WAAU,YACb;AAAA;AAAA,QAAC,yBAAAC;AAAA,QAAA;AAAA,UACC,UAAU;AAAA,UACV,UAAU;AAAA,UACV,gBAAc;AAAA,UACd,oBAAkB;AAAA,UAClB,eAAe;AAAA,UACf,aAAY;AAAA,UACZ,SAAS,gBAAgB,oBAAI,KAAK,IAAI;AAAA,UACtC,iBAAiB;AAAA,UACjB,YAAW;AAAA,UACX;AAAA,UACA;AAAA,UACA,eAAW;AAAA,YACT;AAAA;AAAA;AAAA,cAGE,UAAU,KAAK,mBAAmB,gBAAgB;AAAA,cAClD,cAAc,UAAU,EAAE;AAAA;AAAA,YAE5B;AAAA,UACF;AAAA;AAAA,MACF;AAAA,MACC,cAAc;AAAA,MACd,eACC;AAAA,QAAC;AAAA;AAAA,UACC,eAAW;AAAA,YACT;AAAA,YACA;AAAA,UACF;AAAA,UAEA;AAAA,YAAC;AAAA;AAAA,cACC,OAAM;AAAA,cACN,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,SAAS;AAAA,cACT,MAAK;AAAA,cAEL;AAAA,gBAAC;AAAA;AAAA,kBACC,GAAE;AAAA,kBACF,MAAK;AAAA;AAAA,cACP;AAAA;AAAA,UACF;AAAA;AAAA,MACF;AAAA,OAEJ;AAAA,KACF;AAEJ;AAEA,IAAO,oBAAQ;A;;;;;ACzHf,4BAA0B;AAqBhB,IAAAC,uBAAA;AAZV,IAAM,aAAwC,CAAC,EAAE,YAAY,aAAa,cAAc,qBAAqB,EAAE,MAAM;AACnH,SACE;AAAA,IAAC,sBAAAC;AAAA,IAAA;AAAA,MAEC,eACE;AAAA,QAAC;AAAA;AAAA,UACC,OAAM;AAAA,UACN,QAAO;AAAA,UACP,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,OAAM;AAAA,UAEN;AAAA,YAAC;AAAA;AAAA,cACC,GAAE;AAAA,cACF,QAAO;AAAA,cACP,aAAY;AAAA,cACZ,eAAc;AAAA,cACd,gBAAe;AAAA;AAAA,UACjB;AAAA;AAAA,MACF;AAAA,MAEF,WACE;AAAA,QAAC;AAAA;AAAA,UACC,OAAM;AAAA,UACN,QAAO;AAAA,UACP,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,OAAM;AAAA,UAEN;AAAA,YAAC;AAAA;AAAA,cACC,GAAE;AAAA,cACF,QAAO;AAAA,cACP,aAAY;AAAA,cACZ,eAAc;AAAA,cACd,gBAAe;AAAA;AAAA,UACjB;AAAA;AAAA,MACF;AAAA,MAEF,YACE;AAAA,QAAC;AAAA;AAAA,UACC,OAAM;AAAA,UACN,QAAO;AAAA,UACP,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,OAAM;AAAA,UAEN;AAAA,0DAAC,YAAO,IAAG,OAAM,IAAG,KAAI,GAAE,QAAO,MAAK,WAAU;AAAA,YAChD,8CAAC,YAAO,IAAG,KAAI,IAAG,KAAI,GAAE,QAAO,MAAK,WAAU;AAAA,YAC9C,8CAAC,YAAO,IAAG,QAAO,IAAG,KAAI,GAAE,QAAO,MAAK,WAAU;AAAA;AAAA;AAAA,MACnD;AAAA,MAEF,cAAc,CAAC,UAAU,aAAa,MAAM,WAAW,CAAC;AAAA,MACxD;AAAA,MACA,sBAAsB;AAAA,MACtB,WAAW;AAAA,MACX,WAAW,cAAc;AAAA,MACzB,oBAAmB;AAAA,MACnB,eAAc;AAAA,MACd,mBAAkB;AAAA,MAClB,iBAAgB;AAAA,MAChB,qBAAoB;AAAA,MACpB,mBAAkB;AAAA,MAClB,uBAAsB;AAAA,MACtB,eAAc;AAAA,MACd,mBAAkB;AAAA,MAClB,gBAAe;AAAA,MACf,mBAAkB;AAAA;AAAA,IA/Db;AAAA,EAgEP;AAEJ;AAEA,IAAO,qBAAQ;;;ACjFf,IAAAC,0BAAwB;AAoChB,IAAAC,uBAAA;AA/BR,IAAM,cAA0C,CAAC;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,oBAAoB;AAAA,EACpB,kBAAkB;AAAA,EAClB,iBAAiB;AAAA,EACjB,kBAAkB;AAAA,EAClB,qBAAqB,CAAC,YAAY,aAChC,QAAQ,IAAI,YAAY,QAAQ;AAAA,EAClC;AAAA,EACA,uBAAuB;AAAA,EACvB,qBAAqB;AAAA,EACrB,iCAAiC;AAAA,EACjC;AAAA,EACA,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB;AACF,MAAM;AACJ,SACE,+CAAC,SAAI,WAAU,iKACZ;AAAA;AAAA,IACD,+CAAC,SAAI,WAAU,8CACZ;AAAA;AAAA,MACD,8CAAC,UAAK,WAAU,0CAA0C,iBAAM;AAAA,MAC/D,cACC;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UAEV;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,KAAK;AAAA,gBACL,KAAI;AAAA,gBACJ,OAAO;AAAA,gBACP,QAAQ;AAAA,gBACR,WAAU;AAAA;AAAA,YACZ;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,OAAO,EAAE,OAAO,SAAS,YAAY,MAAM;AAAA,gBAE3C;AAAA,gEAAC,SAAI,WAAU,mFAAkF;AAAA,kBAChG;AAAA;AAAA;AAAA,YACH;AAAA;AAAA;AAAA,MACF;AAAA,OAEJ;AAAA,IAEA,+CAAC,SAAI,WAAW,8BAA8B,gBAAgB,IAC3D;AAAA,4BACC;AAAA,QAAC;AAAA;AAAA,UACC,WAAW,8BAA8B,kBAAkB,iBACzD,CAAC,oBAAoB,eAAe,EACtC;AAAA,UAEA;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,KAAK;AAAA,gBACL,KAAI;AAAA,gBACJ,OAAO;AAAA,gBACP,QAAQ;AAAA,gBACR,WAAU;AAAA;AAAA,YACZ;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,OAAO,EAAE,OAAO,SAAS,YAAY,MAAM;AAAA,gBAE3C;AAAA,gEAAC,SAAI,WAAU,kFAAiF;AAAA,kBAC/F;AAAA;AAAA;AAAA,YACH;AAAA;AAAA;AAAA,MACF;AAAA,MAED,eACC,+CAAC,SAAI,WAAU,oCAAmC,SAAQ,aACxD;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,IAAG;AAAA,YACH,IAAG;AAAA,YACH,GAAE;AAAA,YACF,QAAO;AAAA,YACP,aAAY;AAAA;AAAA,QACb;AAAA,QACD;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,MAAK;AAAA,YACL,GAAE;AAAA;AAAA,QACH;AAAA,SACH;AAAA,MAED,YAAY,CAAC,eACZ;AAAA,QAAC;AAAA;AAAA,UACC,WAAW,yEACT,CAAC,oBAAoB,eAAe,EACtC;AAAA,UACA,SAAS,MAAM;AACb,gBAAI,CAAC,kBAAmB;AACxB;AAAA,UACF;AAAA,UACD;AAAA;AAAA,MAED;AAAA,MAED,kBAAkB,mBACjB,8CAAC,SAAI,eAAW,iCAAQ,2BAA2B,cAAc,GAC/D;AAAA,QAAC;AAAA;AAAA,UACC,YAAY;AAAA,UACZ,UAAU;AAAA,UACV,iBAAe;AAAA,UACf,UAAU,CAAC,WAAW,YAAY;AAChC,+BAAmB,WAAW,OAAO;AAAA,UACvC;AAAA,UACA,gBAAe;AAAA,UACf,UAAU;AAAA,UACV;AAAA;AAAA,MACF,GACF;AAAA,MAGA;AAAA,QAAC;AAAA;AAAA,UACC,WAAW,GAAG,iCAAiC,UAAU,QAAQ;AAAA,UAEhE;AAAA;AAAA,MACH;AAAA,MAED,CAAC,gBAAgB,mBAChB;AAAA,QAAC;AAAA;AAAA,UACC,SAAS,MAAM;AACb,gBAAI,CAAC,kBAAmB;AACxB;AAAA,UACF;AAAA,UACA,WAAW,oEACT,CAAC,oBAAoB,eAAe,EACtC;AAAA,cAEE,uBACI,yBACA,uCACN;AAAA,UACD;AAAA;AAAA,MAED;AAAA,OAEJ;AAAA,KACF;AAEJ;AACA,IAAO,sBAAQ;;;AChEX,IAAAC,uBAAA;AAbJ,IAAM,eAA4C,CAAC;AAAA,EACjD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,gBAAgB;AAClB,MAAM;AACJ,QAAM,kBAAkB,MACtB,+CAAC,SAAI,WAAU,wDACb;AAAA,kDAAC,UACC,wDAAC,SAAI,KAAK,gBAAQ,KAAK,WAAW,OAAO,KAAK,QAAQ,KAAK,GAC7D;AAAA,IACA,8CAAC,UAAK,WAAU,yBAAyB,yBAAc;AAAA,KACzD;AAGF,SACE,+CAAC,SAAI,WAAU,6DACb;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,YAAY,gBAAgB;AAAA,QAC5B,sBAAsB,gBAAgB;AAAA,QACtC,mBAAmB,gBAAgB;AAAA,QACnC,OAAO,gBAAgB;AAAA,QACvB,UAAU,gBAAgB;AAAA,QAC1B,cAAc,gBAAgB;AAAA,QAC9B,aAAa,gBAAgB;AAAA,QAC7B,YAAY,gBAAgB;AAAA,QAC5B,gBAAgB,gBAAgB;AAAA,QAChC,mBAAmB,gBAAgB;AAAA,QACnC,gCACE,gBAAgB;AAAA,QAElB,6BACE,gBAAgB;AAAA;AAAA,IAEpB;AAAA,IAEE,+CAAC,SAAI,WAAU,4IAEX;AAAA,qDAAC,WAAM,WAAU,6DACf;AAAA,sDAAC,WAAM,WAAU,cACf,wDAAC,QACE,kBAAQ,IAAI,CAAC,QAAQ,gBAAa;AA9HrD;AA+HoB;AAAA,YAAC;AAAA;AAAA,cAEC,OAAM;AAAA,cACN,WAAW,oBACT,uDAAmB,uBAAsB,SACrC,kBAAkB,oBAClB,UACN,sDACE,OAAO,gBAAgB,eACzB,IAAI,gBAAgB,IAAI,cAAc,EAAE,IACtC,gBAAgB,QAAQ,SAAS,IAAI,cAAc,EACrD;AAAA,cACA,OAAO;AAAA,gBACL,OAAO,OAAO;AAAA,gBACd,eAAe;AAAA,cACjB;AAAA,cACA,SAAS,MACP,OAAO,YAAY,WAAW,OAAO,QAAQ;AAAA,cAG/C;AAAA,gBAAC;AAAA;AAAA,kBACC,WAAW,QACT,OAAO,oBAAoB,iBAC7B,IACE,OAAO,oBACP,OAAO,cAAc,SACjB,OAAO,YACP,EACN;AAAA,kBAEC,iBAAO,aAAa;AAAA;AAAA,oBAEnB,8CAAC,WAAM,MAAK,YAAW,WAAU,kBAAiB;AAAA,sBAElD,gFACE;AAAA;AAAA,sBAAC;AAAA;AAAA,wBACC,WAAW,GACT,OAAO,kBACP,2BACF;AAAA,wBAEC,iBAAO;AAAA;AAAA,oBACV;AAAA,oBACC,OAAO,YACN;AAAA,sBAAC;AAAA;AAAA,wBACC,WAAW,sBACT,YAAO,kBAAP,YAAwB,EAC1B;AAAA,wBAEA;AAAA,0BAAC;AAAA;AAAA,4BACC,OAAM;AAAA,4BACN,QAAO;AAAA,4BACP,SAAQ;AAAA,4BACR,MAAK;AAAA,4BACL,OAAM;AAAA,4BAEN;AAAA,8BAAC;AAAA;AAAA,gCACC,GAAE;AAAA,gCACF,MAAK;AAAA;AAAA,4BACP;AAAA;AAAA,wBACF;AAAA;AAAA,oBACF;AAAA,qBAEJ;AAAA;AAAA,cAEJ;AAAA;AAAA,YAhEK,OAAO;AAAA,UAiEd;AAAA,SACD,GACH,GACF;AAAA,QACC,CAAC,aACA,8CAAC,WAAM,WAAU,qCACd,oBAAU,IAAI,CAAC,MAAM,UACpB,8CAAC,QACE,kBAAQ,IAAI,CAAC,QAAQ,gBACpB;AAAA,UAAC;AAAA;AAAA,YAEC,WAAW,iGACT,gBAAgB,IAAI,cAAc,EACpC,IACE,gBAAgB,QAAQ,SAAS,IAC7B,cACA,EACN;AAAA,YACA,OAAO,EAAE,OAAO,OAAO,OAAO,WAAW,OAAO;AAAA,YAG/C,sBACG,UAAU,MAAM,QAAQ,WAAW,IACnC,KAAK,OAAO,QAA2B;AAAA;AAAA,UAbtC,OAAO;AAAA,QAcd,CACD,KAlBM,KAmBT,CACD,GACH;AAAA,SAEJ;AAAA,OAEA,WAAW,UAAU,WAAW,MAAM,CAAC,aACvC,8CAAC,SAAI,WAAU,sCACb,wDAAC,mBAAgB,GACnB;AAAA,MAED,aACC;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,OAAO,EAAE,aAAa,yBAAyB;AAAA,UAE/C,wDAAC,SAAI,WAAU,+CACb,wDAAC,SAAI,WAAU,iEAAgE,GACjF;AAAA;AAAA,MACF;AAAA,MAED,aAAa,UAAU,SAAS,KAAK,CAAC,aACrC,+CAAC,SAAI,WAAU,wDACb;AAAA,sDAAC,SAAI,WAAU,2BACb;AAAA,UAAC;AAAA;AAAA,YACC,YAAY,WAAW;AAAA,YACvB,aAAa,WAAW;AAAA,YACxB,cAAc,WAAW;AAAA;AAAA,QAC3B,GACF;AAAA,QAEA,+CAAC,SAAI,WAAU,0CACb;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO,EAAE,WAAW,MAAM;AAAA,cAC3B;AAAA;AAAA,UAED;AAAA,UAEA,+CAAC,SAAI,WAAU,YACb;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,OAAO,WAAW;AAAA,gBAClB,UAAU,CAAC,MACT,WAAW,wBAAwB,OAAO,EAAE,OAAO,KAAK,CAAC;AAAA,gBAE3D,WAAU;AAAA,gBACV,OAAO;AAAA,kBACL,aAAa;AAAA,kBACb,UAAU;AAAA,gBACZ;AAAA,gBAEA;AAAA,gEAAC,YAAO,OAAO,IAAI,gBAAE;AAAA,kBACrB,8CAAC,YAAO,OAAO,IAAI,gBAAE;AAAA,kBACrB,8CAAC,YAAO,OAAO,IAAI,gBAAE;AAAA,kBACrB,8CAAC,YAAO,OAAO,KAAK,iBAAG;AAAA;AAAA;AAAA,YACzB;AAAA,YACA,8CAAC,SAAI,WAAU,0HACb;AAAA,cAAC;AAAA;AAAA,gBACC,OAAM;AAAA,gBACN,QAAO;AAAA,gBACP,SAAQ;AAAA,gBACR,MAAK;AAAA,gBACL,OAAM;AAAA,gBAEN;AAAA,kBAAC;AAAA;AAAA,oBACC,GAAE;AAAA,oBACF,MAAK;AAAA;AAAA,gBACP;AAAA;AAAA,YACF,GACF;AAAA,aACF;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO,EAAE,WAAW,MAAM;AAAA;AAAA,UAC3B;AAAA,UACD;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO,EAAE,WAAW,MAAM;AAAA,cAEzB,cACE,WAAW,OAAO,KAAK,WAAW,WAAW,CAChD,MAAM,KAAK;AAAA,gBACT,WAAW,OAAO,WAAW;AAAA,gBAC7B,WAAW;AAAA,cACb,CAAC,OAAO,WAAW,UAAU;AAAA;AAAA,UAC/B;AAAA,WACF;AAAA,SACF;AAAA,OAEJ;AAAA,KAEJ;AAEJ;AAEA,IAAO,uBAAQ;;;AC1Tf,IAAAC,gBAAgE;AAChE,IAAAC,0BAAwB;AAuJpB,IAAAC,uBAAA;AArFJ,IAAM,iBAAgD,CAAC;AAAA,EACrD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,sBAAsB;AAAA,EACtB,gBAAgB;AAAA,EAChB;AAAA,EACA,yBAAyB;AAAA,EACzB;AAAA,EACA,mBAAmB;AAAA,EACnB,eAAe;AAAA,EACf;AAAA,EACA,qBAAqB;AAAA,EACrB,uBAAuB;AAAA,EACvB,aAAa;AACf,MAAM;AACJ,QAAM,eAAW,sBAAyB,IAAI;AAC9C,QAAM,oBAAgB,sBAAuB,IAAI;AACjD,QAAM,CAAC,aAAa,cAAc,QAAI,wBAAiB,CAAC;AAExD,QAAM,sBAAkB,2BAAY,MAAM;AACxC,UAAM,UAAU,SAAS;AACzB,UAAM,eAAe,cAAc;AACnC,QAAI,CAAC,QAAS;AACd,QAAI,cAAc,QAAQ;AAC1B,QAAI,gBAAgB,CAAC,gBAAgB,UAAU,SAAS,KAAK,CAAC,WAAW;AACvE,qBAAe,aAAa;AAAA,IAC9B;AAEA,mBAAe,WAAW;AAAA,EAC5B,GAAG,CAAC,cAAc,UAAU,QAAQ,SAAS,CAAC;AAE9C,+BAAU,MAAM;AACd,UAAM,UAAU,SAAS;AACzB,UAAM,eAAe,cAAc;AACnC,QAAI,CAAC,QAAS;AACd,UAAM,WAAW,IAAI,eAAe,MAAM;AACxC,iBAAW,iBAAiB,CAAC;AAAA,IAC/B,CAAC;AACD,aAAS,QAAQ,OAAO;AACxB,QAAI,gBAAgB,CAAC,gBAAgB,UAAU,SAAS,KAAK,CAAC,WAAW;AACvE,eAAS,QAAQ,YAAY;AAAA,IAC/B;AACA,eAAW,iBAAiB,CAAC;AAC7B,WAAO,MAAM;AACX,eAAS,WAAW;AAAA,IACtB;AAAA,EACF,GAAG,CAAC,iBAAiB,cAAc,UAAU,QAAQ,SAAS,CAAC;AAE/D,+BAAU,MAAM;AACd,UAAM,YAAY,WAAW,MAAM;AACjC,sBAAgB;AAAA,IAClB,GAAG,GAAG;AAEN,WAAO,MAAM,aAAa,SAAS;AAAA,EACrC,GAAG,CAAC,WAAW,MAAM,WAAW,UAAU,eAAe,CAAC;AAE1D,+BAAU,MAAM;AACd,UAAM,UAAU,SAAS;AACzB,UAAM,eAAe,cAAc;AAEnC,QAAI,CAAC,WAAW,CAAC,aAAc;AAE/B,UAAM,eAAe,MAAM;AACzB,YAAM,cAAc,QAAQ,eAAe,aAAa;AACxD,qBAAe,WAAW;AAAA,IAC5B;AAEA,UAAM,WAAW,IAAI,eAAe,YAAY;AAChD,aAAS,QAAQ,OAAO;AACxB,aAAS,QAAQ,YAAY;AAE7B,WAAO,MAAM;AACX,eAAS,WAAW;AAAA,IACtB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,kBAAkB,MACtB;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,6CAA6C,kBAAkB;AAAA,MAE1E;AAAA,sDAAC,UACE,+BACC,qBAEA;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,YACL,KAAK;AAAA,YACL,OAAO;AAAA,YACP,QAAQ;AAAA;AAAA,QACV,GAEJ;AAAA,QACA,8CAAC,UAAK,WAAU,6BAA6B,+BAAoB;AAAA,QACjE,8CAAC,UAAK,WAAU,yBAAyB,yBAAc;AAAA;AAAA;AAAA,EACzD;AAGF,SACE,+CAAC,SAAI,WAAU,6DACb;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,YAAY,gBAAgB;AAAA,QAC5B,sBAAsB,gBAAgB;AAAA,QACtC,mBAAmB,gBAAgB;AAAA,QACnC,OAAO,gBAAgB;AAAA,QACvB,UAAU,gBAAgB;AAAA,QAC1B,cAAc,gBAAgB;AAAA,QAC9B,aAAa,gBAAgB;AAAA,QAC7B,YAAY,gBAAgB;AAAA,QAC5B,gBAAgB,gBAAgB;AAAA,QAChC;AAAA,QACA,mBAAmB,gBAAgB;AAAA,QACnC,iBAAiB,gBAAgB;AAAA,QACjC,gBAAgB,gBAAgB;AAAA,QAChC,iBAAiB,gBAAgB;AAAA,QACjC,oBAAoB,gBAAgB;AAAA,QACpC,oBAAoB,gBAAgB;AAAA,QACpC,sBAAsB,gBAAgB;AAAA,QACtC,oBAAoB,gBAAgB;AAAA,QACpC,kBAAkB,gBAAgB;AAAA,QAClC,gCACE,gBAAgB;AAAA,QAElB,6BACE,gBAAgB;AAAA,QAElB,gBAAgB,gBAAgB;AAAA,QAChC,aAAa,gBAAgB;AAAA;AAAA,IAC/B;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,eAAW;AAAA,UACT,uIACE,gBAAgB,iBAClB;AAAA,UACA;AAAA,QACF;AAAA,QAGE;AAAA,yDAAC,SAAI,WAAU,0CAEX;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,KAAK;AAAA,gBACL,WAAU;AAAA,gBAET;AAAA,mBAAC,wBACA,8CAAC,WAAM,WAAU,cACf,wDAAC,QACE,kBAAQ,IAAI,CAAC,QAAQ,gBAAa;AA7NzD;AA8NwB;AAAA,sBAAC;AAAA;AAAA,wBAEC,OAAM;AAAA,wBACN,WAAW,IACT,4DAAmB,OAAnB,YAAyB,MAC3B,gBACE,uDAAmB,uBAAsB,SACrC,kBAAkB,oBAClB,UACN,sDACE,OAAO,gBAAgB,eACzB,IAAI,gBAAgB,IAAI,cAAc,EAAE,IACtC,gBAAgB,QAAQ,SAAS,IAC7B,cACA,EACN;AAAA,wBACA,OAAO;AAAA,0BACL,OAAO,OAAO;AAAA,0BACd,eAAe;AAAA,wBACjB;AAAA,wBACA,SAAS,MACP,OAAO,YAAY,WAAW,OAAO,QAAQ;AAAA,wBAG/C;AAAA,0BAAC;AAAA;AAAA,4BACC,WAAW,QACT,OAAO,oBAAoB,iBAC7B,IACE,OAAO,oBACP,OAAO,cAAc,SACjB,OAAO,YACP,EACN;AAAA,4BAEC,iBAAO,aAAa,aACnB;AAAA,8BAAC;AAAA;AAAA,gCACC,MAAK;AAAA,gCACL,UACE,4DAAmB,kBAAnB,YAAoC;AAAA,gCAEtC,KAAK,CAAC,UAAU;AAtQhD,sCAAAC;AAuQkC,sCAAI,OAAO;AACT,0CAAM,iBACJA,MAAA,uDAAmB,oBAAnB,OAAAA,MACA;AAAA,kCACJ;AAAA,gCACF;AAAA,gCACA,UAAU,uDAAmB;AAAA,gCAC7B,WAAU;AAAA;AAAA,4BACZ,IAEA,gFACE;AAAA;AAAA,gCAAC;AAAA;AAAA,kCACC,WAAW,GACT,OAAO,kBACP,2BACF,iBACE,OAAO,sBACH,OAAO,sBACP,aACN;AAAA,kCAEC,iBAAO;AAAA;AAAA,8BACV;AAAA,8BACC,OAAO,YACN,8CAAC,UAAK,WAAU,qBACd;AAAA,gCAAC;AAAA;AAAA,kCACC,OAAM;AAAA,kCACN,QAAO;AAAA,kCACP,SAAQ;AAAA,kCACR,MAAK;AAAA,kCACL,OAAM;AAAA,kCAEN;AAAA,oCAAC;AAAA;AAAA,sCACC,GAAE;AAAA,sCACF,MAAK;AAAA;AAAA,kCACP;AAAA;AAAA,8BACF,GACF;AAAA,+BAEJ;AAAA;AAAA,wBAEJ;AAAA;AAAA,sBAjFK,OAAO;AAAA,oBAkFd;AAAA,mBACD,GACH,GACF;AAAA,kBAED,CAAC,aACA,8CAAC,WAAM,WAAU,qCACd,oBAAU,IAAI,CAAC,MAAM,UAAU;AAE9B,0BAAM,WAAW,WAAW,SAAS,MAAM,KAAK,IAAI,CAAC;AAErD,2BACE;AAAA,sBAAC;AAAA;AAAA,wBAEE,GAAG;AAAA,wBACJ,WAAW,SAAS,aAAa;AAAA,wBAEhC,kBAAQ,IAAI,CAAC,QAAQ,gBAAa;AAlU7D;AAmU4B;AAAA,4BAAC;AAAA;AAAA,8BAEC,WAAW,iGACT,gBAAgB,IAAI,cAAc,EACpC,IACE,gBAAgB,QAAQ,SAAS,IAC7B,cACA,EACN;AAAA,8BAEA,UAAU,UAAU,SAAS,IACzB,MACA,wDAAiB,cAAjB,YAA8B,EACpC;AAAA;AAAA,8BAEE,OAAO,EAAE,OAAO,OAAO,OAAO,WAAW,OAAO;AAAA,8BAG/C,sBACG,UAAU,MAAM,QAAQ,WAAW,IACnC,KAAK,OAAO,QAA2B;AAAA;AAAA,4BAnBtC,OAAO;AAAA,0BAoBd;AAAA,yBACD;AAAA;AAAA,sBA3BI;AAAA,oBA4BP;AAAA,kBAEJ,CAAC,GACH;AAAA;AAAA;AAAA,YAEJ;AAAA,aAEA,WAAW,UAAU,WAAW,MAAM,CAAC,aACvC,8CAAC,SAAI,WAAU,sCACb,wDAAC,mBAAgB,GACnB;AAAA,YAED,aACC;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,OAAO,EAAE,aAAa,yBAAyB;AAAA,gBAE/C;AAAA,kBAAC;AAAA;AAAA,oBACC,WAAW,oCAAoC,kBAAkB;AAAA,oBAEjE,wDAAC,SAAI,WAAU,iEAAgE;AAAA;AAAA,gBACjF;AAAA;AAAA,YACF;AAAA,YAED,aACC,UAAU,SAAS,KACnB,CAAC,aACD,CAAC,gBACC;AAAA,cAAC;AAAA;AAAA,gBACC,KAAK;AAAA,gBACL,WAAU;AAAA,gBAEV;AAAA,gEAAC,SAAI,WAAU,2BACb;AAAA,oBAAC;AAAA;AAAA,sBACC,YAAY,WAAW;AAAA,sBACvB,aAAa,WAAW;AAAA,sBACxB,cAAc,WAAW;AAAA,sBACzB,oBAAoB,WAAW;AAAA;AAAA,kBACjC,GACF;AAAA,kBAEA,+CAAC,SAAI,WAAU,0CACb;AAAA;AAAA,sBAAC;AAAA;AAAA,wBACC,WAAU;AAAA,wBACV,OAAO,EAAE,WAAW,MAAM;AAAA,wBAC3B;AAAA;AAAA,oBAED;AAAA,oBAEA,+CAAC,SAAI,WAAU,YACb;AAAA;AAAA,wBAAC;AAAA;AAAA,0BACC,OAAO,WAAW;AAAA,0BAClB,UAAU,CAAC,MACT,WAAW;AAAA,4BACT,OAAO,EAAE,OAAO,KAAK;AAAA,0BACvB;AAAA,0BAEF,WAAU;AAAA,0BACV,OAAO;AAAA,4BACL,aAAa;AAAA,4BACb,UAAU;AAAA,0BACZ;AAAA,0BAEA;AAAA,0EAAC,YAAO,OAAO,IAAI,gBAAE;AAAA,4BACrB,8CAAC,YAAO,OAAO,IAAI,gBAAE;AAAA,4BACrB,8CAAC,YAAO,OAAO,IAAI,gBAAE;AAAA,4BACrB,8CAAC,YAAO,OAAO,KAAK,iBAAG;AAAA;AAAA;AAAA,sBACzB;AAAA,sBACA,8CAAC,SAAI,WAAU,0HACb;AAAA,wBAAC;AAAA;AAAA,0BACC,OAAM;AAAA,0BACN,QAAO;AAAA,0BACP,SAAQ;AAAA,0BACR,MAAK;AAAA,0BACL,OAAM;AAAA,0BAEN;AAAA,4BAAC;AAAA;AAAA,8BACC,GAAE;AAAA,8BACF,MAAK;AAAA;AAAA,0BACP;AAAA;AAAA,sBACF,GACF;AAAA,uBACF;AAAA,oBACA;AAAA,sBAAC;AAAA;AAAA,wBACC,WAAU;AAAA,wBACV,OAAO,EAAE,WAAW,MAAM;AAAA;AAAA,oBAC3B;AAAA,oBACD;AAAA,sBAAC;AAAA;AAAA,wBACC,WAAU;AAAA,wBACV,OAAO,EAAE,WAAW,MAAM;AAAA,wBAEzB,cACE,WAAW,OAAO,KAAK,WAAW,WAAW,CAChD,MAAM,KAAK;AAAA,0BACT,WAAW,OAAO,WAAW;AAAA,0BAC7B,WAAW;AAAA,wBACb,CAAC,OAAO,WAAW,UAAU;AAAA;AAAA,oBAC/B;AAAA,qBACF;AAAA;AAAA;AAAA,YACF;AAAA,aAEN;AAAA,UAEF;AAAA,YAAC;AAAA;AAAA,cACC,WAAW,mCACT,CAAC,mBAAmB,WAAW,EACjC;AAAA,cACA,OAAO;AAAA,gBACL,WAAW,GAAG,eAAe,MAAM,MAAM,WAAW;AAAA,gBACpD,WAAW;AAAA,cACb;AAAA,cAEC,oEAA0B,8CAAC,SAAI;AAAA;AAAA,UAClC;AAAA;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;AAEA,IAAO,yBAAQ;;;ACjdf,IAAAC,gBAAoC;A;;;;;AA2D9B,IAAAC,uBAAA;AAjDN,IAAM,aAAa,CAAC;AAAA,EAClB,UAAU;AAAA,EACV;AAAA,EACA,YAAY;AAAA,EACZ,iBAAiB;AAAA,EACjB,WAAW;AACb,MAAuB;AACrB,QAAM,CAAC,mBAAmB,oBAAoB,QAAI,wBAAS,IAAI;AAC/D,QAAM,CAAC,cAAc,eAAe,QAAI,wBAAS,IAAI;AACrD,QAAM,YACJ,sBAAsB,SAAY,oBAAoB;AAExD,+BAAU,MAAM;AACd,QAAI,CAAC,WAAW;AAEd,YAAM,UAAU,WAAW,MAAM,gBAAgB,KAAK,GAAG,GAAG;AAC5D,aAAO,MAAM,aAAa,OAAO;AAAA,IACnC,OAAO;AACL,sBAAgB,IAAI;AAAA,IACtB;AAAA,EACF,GAAG,CAAC,SAAS,CAAC;AAEd,+BAAU,MAAM;AACd,QAAI,aAAa,iBAAiB,KAAK,WAAW;AAChD,YAAM,QAAQ,WAAW,MAAM;AAC7B,oBAAY;AAAA,MACd,GAAG,cAAc;AAEjB,aAAO,MAAM,aAAa,KAAK;AAAA,IACjC;AAAA,EACF,GAAG,CAAC,WAAW,gBAAgB,SAAS,CAAC;AAEzC,QAAM,cAAc,MAAM;AACxB,QAAI,sBAAsB,QAAW;AACnC,2BAAqB,KAAK;AAAA,IAC5B;AACA,QAAI,SAAS;AACX,cAAQ;AAAA,IACV;AAAA,EACF;AAEA,MAAI,CAAC,aAAc,QAAO;AAE1B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,2EACT,YAAY,gBAAgB,WAC9B;AAAA,MAEA,yDAAC,SAAI,WAAU,wHACb;AAAA,sDAAC,SAAI,WAAU,WAAU;AAAA,QACzB,8CAAC,SAAI,KAAK,iBAAc,KAAI,WAAU,QAAQ,IAAI,OAAO,IAAI;AAAA,QAC7D,8CAAC,OAAE,WAAU,+DACV,mBACH;AAAA,QACA,8CAAC,YAAO,SAAS,aAAa,cAAW,sBACvC;AAAA,UAAC;AAAA;AAAA,YACC,OAAM;AAAA,YACN,OAAM;AAAA,YACN,QAAO;AAAA,YACP,SAAQ;AAAA,YACR,MAAK;AAAA,YAEL;AAAA,cAAC;AAAA;AAAA,gBACC,GAAE;AAAA,gBACF,MAAK;AAAA;AAAA,YACP;AAAA;AAAA,QACF,GACF;AAAA,SACF;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,qBAAQ;;;ACpFf,IAAAC,iBAAoC;A;;;;;AA2D9B,IAAAC,uBAAA;AAjDN,IAAM,eAAe,CAAC;AAAA,EACpB,UAAU;AAAA,EACV;AAAA,EACA,YAAY;AAAA,EACZ,iBAAiB;AAAA,EACjB,WAAW;AACb,MAAyB;AACvB,QAAM,CAAC,mBAAmB,oBAAoB,QAAI,yBAAS,IAAI;AAC/D,QAAM,CAAC,cAAc,eAAe,QAAI,yBAAS,IAAI;AACrD,QAAM,YACJ,sBAAsB,SAAY,oBAAoB;AAExD,gCAAU,MAAM;AACd,QAAI,CAAC,WAAW;AAEd,YAAM,UAAU,WAAW,MAAM,gBAAgB,KAAK,GAAG,GAAG;AAC5D,aAAO,MAAM,aAAa,OAAO;AAAA,IACnC,OAAO;AACL,sBAAgB,IAAI;AAAA,IACtB;AAAA,EACF,GAAG,CAAC,SAAS,CAAC;AAEd,gCAAU,MAAM;AACd,QAAI,aAAa,iBAAiB,KAAK,WAAW;AAChD,YAAM,QAAQ,WAAW,MAAM;AAC7B,oBAAY;AAAA,MACd,GAAG,cAAc;AAEjB,aAAO,MAAM,aAAa,KAAK;AAAA,IACjC;AAAA,EACF,GAAG,CAAC,WAAW,gBAAgB,SAAS,CAAC;AAEzC,QAAM,cAAc,MAAM;AACxB,QAAI,sBAAsB,QAAW;AACnC,2BAAqB,KAAK;AAAA,IAC5B;AACA,QAAI,SAAS;AACX,cAAQ;AAAA,IACV;AAAA,EACF;AAEA,MAAI,CAAC,aAAc,QAAO;AAE1B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,2EACT,YAAY,gBAAgB,WAC9B;AAAA,MAEA,yDAAC,SAAI,WAAU,wHACb;AAAA,sDAAC,SAAI,WAAU,WAAU;AAAA,QACzB,8CAAC,SAAI,KAAK,eAAY,KAAI,WAAU,QAAQ,IAAI,OAAO,IAAI;AAAA,QAC3D,8CAAC,OAAE,WAAU,+DACV,mBACH;AAAA,QACA,8CAAC,YAAO,SAAS,aAAa,cAAW,sBACvC;AAAA,UAAC;AAAA;AAAA,YACC,OAAM;AAAA,YACN,OAAM;AAAA,YACN,QAAO;AAAA,YACP,SAAQ;AAAA,YACR,MAAK;AAAA,YAEL;AAAA,cAAC;AAAA;AAAA,gBACC,GAAE;AAAA,gBACF,MAAK;AAAA;AAAA,YACP;AAAA;AAAA,QACF,GACF;AAAA,SACF;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,uBAAQ;;;ACpFf,IAAAC,0BAAwB;AAsBlB,IAAAC,uBAAA;AAdN,IAAM,SAAS,CAAC;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAmB;AACjB,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,eAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACC,eAAW;AAAA,YACT;AAAA,YACA;AAAA,UACF;AAAA,UAEC;AAAA;AAAA,MACH;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,iBAAQ;;;AClCf,IAAAC,0BAAwB;AAoCpB,IAAAC,uBAAA;AAvBJ,IAAM,QAAQ,CAAC;AAAA,EACb;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA,iBAAiB;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAChB,MAAkB;AAChB,MAAI,CAAC,eAAe,CAAC,OAAQ,QAAO;AAEpC,MAAI,kBAAkB;AACtB,MAAI,SAAS,QAAQ;AACnB,sBAAkB;AAAA,EACpB,WAAW,SAAS,SAAS;AAC3B,sBAAkB;AAAA,EACpB,WAAW,SAAS,UAAU;AAC5B,sBACE;AAAA,EACJ;AAEA,SACE,gFACE;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,eAAW;AAAA,UACT;AAAA,UACA,cAAe,SAAS,UAAU,WAAY;AAAA,UAC9C;AAAA,QACF;AAAA,QACA,SAAS;AAAA,QACT,eAAa,CAAC;AAAA;AAAA,IAChB;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACC,eAAW;AAAA,UACT,yFAAyF,eAAe;AAAA,UACxG,cAAe,SAAS,UAAU,WAAY;AAAA,UAC9C;AAAA,UACA;AAAA,QACF;AAAA,QACA,MAAK;AAAA,QACL,cAAW;AAAA,QAEV;AAAA;AAAA,IACH;AAAA,KACF;AAEJ;AAEA,IAAO,gBAAQ;;;AC/Df,IAAAC,0BAAwB;AAmBpB,IAAAC,uBAAA;AAVJ,IAAM,eAAe,CAAC;AAAA,EACpB;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,cAAc;AAAA,EACd,GAAG;AACL,MAAyB;AACvB,MAAI,CAAC,eAAe,CAAC,OAAQ,QAAO;AAEpC,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,eAAW;AAAA,QACT;AAAA,QACA,SAAS,UAAU;AAAA,QACnB;AAAA,MACF;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;AAEA,IAAO,uBAAQ;;;AChCf,IAAAC,0BAAwB;AAwBlB,IAAAC,uBAAA;AAfN,IAAM,UAAU,CAAC;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAmB;AACjB,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,eAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACE,GAAG;AAAA,UACJ,eAAW;AAAA,YACT;AAAA,YACA;AAAA,YACA,qCAAU;AAAA,UACZ;AAAA,UAEC;AAAA;AAAA,MACH;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,kBAAQ;;;ACrCf,IAAAC,0BAAwB;AASpB,IAAAC,uBAAA;AAFJ,IAAM,MAA0B,CAAC,EAAE,YAAY,IAAI,UAAU,GAAG,KAAK,MAAM;AACzE,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,eAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;AAEA,IAAO,cAAQ;;;ACrBf,IAAAC,0BAAwB;AAapB,IAAAC,uBAAA;AANJ,IAAM,YAAsC,CAAC;AAAA,EAC3C,YAAY;AAAA,EACZ;AAAA,EACA,GAAG;AACL,MAAM;AACJ,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,eAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;AAEA,IAAO,qBAAQ;;;ACzBf,IAAAC,0BAAwB;AAapB,IAAAC,uBAAA;AANJ,IAAM,UAAkC,CAAC;AAAA,EACvC,YAAY;AAAA,EACZ;AAAA,EACA,GAAG;AACL,MAAM;AACJ,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,eAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;AAEA,IAAO,kBAAQ;","names":["import_tailwind_merge","import_jsx_runtime","import_tailwind_merge","import_jsx_runtime","import_tailwind_merge","import_tailwind_merge","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","ChartJS","label","import_tailwind_merge","import_jsx_runtime","import_jsx_runtime","import_react","import_tailwind_merge","import_tailwind_merge","import_jsx_runtime","import_tailwind_merge","import_jsx_runtime","import_jsx_runtime","React","import_tailwind_merge","import_jsx_runtime","import_chart","import_react","import_react_chartjs_2","import_tailwind_merge","import_jsx_runtime","ChartJS","import_chart","import_react","import_react_chartjs_2","import_tailwind_merge","import_jsx_runtime","ChartJS","label","import_tailwind_merge","import_jsx_runtime","import_react","import_tailwind_merge","import_jsx_runtime","isValid","earliestDate","className","import_react","import_tailwind_merge","import_jsx_runtime","_a","import_tailwind_merge","import_jsx_runtime","import_react","import_tailwind_merge","import_jsx_runtime","import_tailwind_merge","import_jsx_runtime","import_tailwind_merge","import_jsx_runtime","DatePicker","import_date_fns","import_react_datepicker","import_tailwind_merge","import_jsx_runtime","DatePicker","import_jsx_runtime","ReactPaginate","import_tailwind_merge","import_jsx_runtime","import_jsx_runtime","import_react","import_tailwind_merge","import_jsx_runtime","_a","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_tailwind_merge","import_jsx_runtime","import_tailwind_merge","import_jsx_runtime","import_tailwind_merge","import_jsx_runtime","import_tailwind_merge","import_jsx_runtime","import_tailwind_merge","import_jsx_runtime","import_tailwind_merge","import_jsx_runtime","import_tailwind_merge","import_jsx_runtime"]}
|