react-admin-crud-manager 1.0.12 → 1.0.14

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../src/lib/utils.js","../src/components/Button/Button.jsx","../src/components/Form/components/InputLabel.jsx","../src/components/Form/components/Select.jsx","../src/components/Form/components/Switch.jsx","../src/data/countries.js","../src/components/Form/components/PhoneInput.jsx","../src/components/Form/components/TextArea.jsx","../src/components/Form/components/ImagePicker.jsx","../src/components/Form/components/Input.jsx","../src/components/Form/components/TinyEditor.jsx","../src/components/Form/components/Checkbox.jsx","../src/components/Form/components/RenderFields.jsx","../src/components/Filter/FilterDrawer.jsx","../src/components/Chip/Chip.jsx","../src/components/Table/components/TableSkeleton.jsx","../src/components/Table/components/ImagePreview.jsx","../src/components/Table/Table.jsx","../src/components/Modal/Modal.jsx","../src/components/Form/Form.jsx","../src/components/Details/Details.jsx","../src/components/CrudPage.jsx","../src/index.jsx"],"sourcesContent":["// ======= Format Date : Jan 15, 2024 =======\r\n\r\nexport const formatDate = (dateString, format = \"DD MMM YYYY\") => {\r\n if (!dateString) return \"N/A\";\r\n\r\n const date = new Date(dateString);\r\n if (isNaN(date)) return \"Invalid Date\";\r\n\r\n const pad = (n) => String(n).padStart(2, \"0\");\r\n\r\n const map = {\r\n YYYY: date.getFullYear(),\r\n YY: String(date.getFullYear()).slice(-2),\r\n\r\n MMMM: date.toLocaleString(\"en-US\", { month: \"long\" }),\r\n MMM: date.toLocaleString(\"en-US\", { month: \"short\" }),\r\n MM: pad(date.getMonth() + 1),\r\n M: date.getMonth() + 1,\r\n\r\n DD: pad(date.getDate()),\r\n D: date.getDate(),\r\n\r\n dddd: date.toLocaleString(\"en-US\", { weekday: \"long\" }),\r\n ddd: date.toLocaleString(\"en-US\", { weekday: \"short\" }),\r\n\r\n HH: pad(date.getHours()),\r\n hh: pad(date.getHours() % 12 || 12),\r\n\r\n mm: pad(date.getMinutes()),\r\n ss: pad(date.getSeconds()),\r\n\r\n A: date.getHours() >= 12 ? \"PM\" : \"AM\",\r\n };\r\n\r\n return format.replace(\r\n /YYYY|YY|MMMM|MMM|MM|M|DD|D|dddd|ddd|HH|hh|mm|ss|A/g,\r\n (token) => map[token],\r\n );\r\n};\r\n\r\n// =========== Local Search function ===========\r\nexport const searchLocalData = (data, searchTerm, searchKeys = []) => {\r\n if (!searchTerm?.trim()) return data;\r\n\r\n const lowerSearchTerm = searchTerm.toLowerCase();\r\n\r\n const extractValues = (obj) => {\r\n if (obj == null) return [];\r\n if (typeof obj === \"object\") {\r\n return Object.values(obj).flatMap(extractValues);\r\n }\r\n return [String(obj)];\r\n };\r\n\r\n return data.filter((item) => {\r\n let valuesToSearch = [];\r\n\r\n // ✅ If specific keys are provided → search only in those keys\r\n if (searchKeys.length > 0) {\r\n searchKeys.forEach((key) => {\r\n if (item[key] !== undefined) {\r\n valuesToSearch.push(...extractValues(item[key]));\r\n }\r\n });\r\n } else {\r\n // ✅ Otherwise → search in entire object\r\n valuesToSearch = extractValues(item);\r\n }\r\n\r\n return valuesToSearch.some((val) =>\r\n val.toLowerCase().includes(lowerSearchTerm),\r\n );\r\n });\r\n};\r\n","import React from \"react\";\r\n\r\nconst Button = React.forwardRef(\r\n (\r\n {\r\n className = \"\",\r\n variant = \"contained\",\r\n color = \"default\",\r\n size = \"default\",\r\n fullWidth = false,\r\n children,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const baseStyles =\r\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\";\r\n\r\n const sizes = {\r\n sm: \"h-8 px-3 rounded-md text-sm\",\r\n md: \"h-9 px-4 rounded-md text-sm\",\r\n lg: \"h-11 px-6 rounded-md text-base\",\r\n xl: \"h-12 px-8 rounded-lg text-lg\",\r\n default: \"h-9 px-4 rounded-md text-sm\",\r\n };\r\n\r\n const colorVariants = {\r\n primary: {\r\n contained:\r\n \"bg-primary text-white hover:bg-primary-600 focus:ring-primary-500 shadow-sm\",\r\n outlined:\r\n \"border border-primary bg-transparent text-primary hover:bg-primary-50 focus:ring-primary-500\",\r\n text: \"bg-transparent text-primary hover:bg-primary-50 focus:ring-primary-500\",\r\n },\r\n success: {\r\n contained:\r\n \"bg-green-600 text-white hover:bg-green-700 focus:ring-green-500 shadow-sm\",\r\n outlined:\r\n \"border border-green-600 bg-transparent text-green-600 hover:bg-green-50 focus:ring-green-500\",\r\n text: \"bg-transparent text-green-600 hover:bg-green-50 focus:ring-green-500\",\r\n },\r\n error: {\r\n contained:\r\n \"bg-red-600 text-white hover:bg-red-700 focus:ring-red-500 shadow-sm\",\r\n outlined:\r\n \"border border-red-600 bg-transparent text-red-600 hover:bg-red-50 focus:ring-red-500\",\r\n text: \"bg-transparent text-red-600 hover:bg-red-50 focus:ring-red-500\",\r\n },\r\n default: {\r\n contained:\r\n \"border bg-gray-200 text-gray-800 hover:bg-gray-300 focus:ring-gray-300 shadow-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-100 dark:hover:bg-gray-600 dark:focus:ring-gray-600\",\r\n outlined:\r\n \"border border-gray-300 bg-transparent text-gray-700 hover:bg-gray-100 focus:ring-gray-300 dark:border-gray-600 dark:text-gray-200 dark:hover:bg-gray-700 dark:focus:ring-gray-500\",\r\n text: \"bg-transparent text-gray-700 hover:bg-gray-100 focus:ring-gray-300 dark:text-gray-200 dark:hover:bg-gray-700 dark:focus:ring-gray-500\",\r\n },\r\n };\r\n\r\n const colorStyles =\r\n colorVariants[color]?.[variant] || colorVariants.default.contained;\r\n const sizeStyles = sizes[size];\r\n\r\n const combinedClassName = `\r\n ${baseStyles} \r\n ${colorStyles} \r\n ${sizeStyles} \r\n ${fullWidth ? \"w-full\" : \"\"} \r\n ${className}\r\n `.trim();\r\n\r\n return (\r\n <button\r\n ref={ref}\r\n type={props.type || \"button\"}\r\n className={combinedClassName}\r\n {...props}\r\n >\r\n {children}\r\n </button>\r\n );\r\n },\r\n);\r\n\r\nButton.displayName = \"Button\";\r\n\r\nexport default Button;\r\n","import React from \"react\";\r\n\r\nexport default function InputLabel({ label, required = false }) {\r\n return (\r\n <>\r\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\">\r\n {label}\r\n {required && <span className=\"ml-1\">*</span>}\r\n </label>\r\n </>\r\n );\r\n}\r\n","import React, { useState, useEffect, useRef } from \"react\";\r\nimport { ChevronDown, Search, Check } from \"lucide-react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nconst Select = ({\r\n options = [],\r\n value,\r\n onChange,\r\n placeholder = \"Select option\",\r\n className = \"\",\r\n disabled = false,\r\n search = false,\r\n label = \"\",\r\n required = false,\r\n name = \"\",\r\n parentClass = \"\",\r\n multiple = false, // ✅ NEW\r\n dropdownMaxHeight = \"\",\r\n}) => {\r\n const [open, setOpen] = useState(false);\r\n const [searchTerm, setSearchTerm] = useState(\"\");\r\n const [showAboveState, setShowAboveState] = useState(true);\r\n const dropdownRef = useRef(null);\r\n const searchInputRef = useRef(null);\r\n\r\n const normalize = (val) =>\r\n typeof val === \"boolean\" ? String(val) : String(val ?? \"\");\r\n\r\n const normalizedValue = multiple\r\n ? (value || []).map(normalize)\r\n : normalize(value);\r\n\r\n const filteredOptions = options.filter((option) =>\r\n option.label.toLowerCase().includes(searchTerm.toLowerCase()),\r\n );\r\n\r\n const isSelected = (optionValue) => {\r\n const normalized = normalize(optionValue);\r\n if (multiple) {\r\n return normalizedValue.includes(normalized);\r\n }\r\n return normalized === normalizedValue;\r\n };\r\n\r\n useEffect(() => {\r\n const handleClickOutside = (event) => {\r\n if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {\r\n setOpen(false);\r\n setSearchTerm(\"\");\r\n }\r\n };\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (open && dropdownRef.current) {\r\n const rect = dropdownRef.current.getBoundingClientRect();\r\n const viewportHeight = window.innerHeight;\r\n const spaceBelow = viewportHeight - rect.bottom;\r\n const dropdownHeight = 200;\r\n setShowAboveState(spaceBelow < dropdownHeight);\r\n }\r\n }, [open]);\r\n\r\n useEffect(() => {\r\n if (open && searchInputRef.current) {\r\n searchInputRef.current.focus();\r\n }\r\n }, [open]);\r\n\r\n const handleOptionClick = (optionValue) => {\r\n let finalValue = optionValue;\r\n if (optionValue === \"true\") finalValue = true;\r\n else if (optionValue === \"false\") finalValue = false;\r\n\r\n if (multiple) {\r\n const exists = normalizedValue.includes(normalize(optionValue));\r\n\r\n let newValues;\r\n if (exists) {\r\n newValues = value.filter(\r\n (v) => normalize(v) !== normalize(optionValue),\r\n );\r\n } else {\r\n newValues = [...(value || []), finalValue];\r\n }\r\n\r\n onChange(newValues);\r\n } else {\r\n onChange(finalValue);\r\n setOpen(false);\r\n }\r\n\r\n setSearchTerm(\"\");\r\n };\r\n\r\n const selectedLabels = multiple\r\n ? options\r\n .filter((opt) => isSelected(opt.value))\r\n .map((opt) => opt.label)\r\n .join(\", \")\r\n : options.find((opt) => isSelected(opt.value))?.label;\r\n\r\n return (\r\n <div key={name} className={parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n\r\n <div className={`relative ${className}`} ref={dropdownRef}>\r\n <button\r\n type=\"button\"\r\n onClick={() => !disabled && setOpen(!open)}\r\n disabled={disabled}\r\n className={`w-full h-10 px-3 border border-gray-300 dark:border-gray-600 rounded-md text-left text-sm flex items-center justify-between \r\n ${\r\n !selectedLabels\r\n ? \"text-gray-500 dark:text-gray-400\"\r\n : \"dark:text-white\"\r\n } \r\n ${disabled ? \"opacity-50 cursor-not-allowed\" : \"dark:bg-gray-700\"}`}\r\n >\r\n <span className=\"truncate\">{selectedLabels || placeholder}</span>\r\n\r\n <ChevronDown\r\n className={`w-4 h-4 transition-transform ${\r\n open ? \"rotate-180\" : \"\"\r\n }`}\r\n />\r\n </button>\r\n\r\n {open && (\r\n <div\r\n className={`absolute z-50 w-full border rounded-md bg-white dark:bg-gray-700 shadow-lg \r\n ${showAboveState ? \"bottom-full mb-1\" : \"top-full mt-1\"}`}\r\n >\r\n {search && (\r\n <div className=\"p-2 border-b border-gray-200 dark:border-gray-600\">\r\n <div className=\"relative\">\r\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400\" />\r\n <input\r\n ref={searchInputRef}\r\n type=\"text\"\r\n value={searchTerm}\r\n onChange={(e) => setSearchTerm(e.target.value)}\r\n placeholder=\"Search...\"\r\n className=\"w-full pl-9 pr-3 py-2 text-sm border rounded-md bg-white dark:bg-gray-800 dark:text-white placeholder-gray-500 dark:placeholder-gray-400 focus:outline-none\"\r\n />\r\n </div>\r\n </div>\r\n )}\r\n\r\n <div\r\n className={`max-h-40 overflow-y-auto`}\r\n style={{\r\n maxHeight: dropdownMaxHeight || \"\",\r\n }}\r\n >\r\n {filteredOptions.length > 0 ? (\r\n filteredOptions.map((option) => (\r\n <button\r\n key={String(option.value)}\r\n type=\"button\"\r\n onClick={() => handleOptionClick(String(option.value))}\r\n className={`w-full px-3 py-2 text-left text-sm flex items-center justify-between hover:bg-gray-100 dark:hover:bg-gray-600 \r\n ${\r\n isSelected(option.value)\r\n ? \"bg-blue-50 dark:bg-blue-900/20 text-blue-700 dark:text-blue-300\"\r\n : \"\"\r\n }`}\r\n >\r\n <span>{option.label}</span>\r\n\r\n {multiple && isSelected(option.value) && (\r\n <Check className=\"w-4 h-4\" />\r\n )}\r\n </button>\r\n ))\r\n ) : (\r\n <div className=\"px-3 py-2 text-sm text-gray-500 dark:text-gray-400\">\r\n No options found\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default Select;\r\n","import React from \"react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nconst Switch = ({\r\n value = true,\r\n onChange,\r\n text,\r\n options = [],\r\n label,\r\n required,\r\n name = \"\",\r\n disabled = false,\r\n parentClass = \"\",\r\n}) => {\r\n const radioOptions =\r\n options.length > 0\r\n ? options\r\n : [\r\n { label: \"Active\", value: true },\r\n { label: \"Inactive\", value: false },\r\n ];\r\n\r\n return (\r\n <>\r\n <div key={name} className={parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n <div className=\"flex items-center justify-between h-10 gap-4 bg-gray-100 dark:bg-gray-700 px-3 rounded-md border border-gray-100 dark:border-gray-600\">\r\n {/* Left Text */}\r\n {text && (\r\n <p className=\"text-xs text-gray-600 dark:text-gray-400 flex-shrink overflow-hidden text-ellipsis whitespace-nowrap max-w-[200px]\">\r\n {text}\r\n </p>\r\n )}\r\n\r\n {/* Radio Buttons */}\r\n <div className=\"flex items-center gap-6\">\r\n {radioOptions.map((opt, idx) => (\r\n <label\r\n key={idx}\r\n className=\"flex items-center gap-2 cursor-pointer select-none\"\r\n >\r\n <input\r\n type=\"radio\"\r\n name=\"switch-field\"\r\n required={required && idx === 0}\r\n value={opt.value}\r\n disabled={disabled}\r\n checked={value === opt.value}\r\n onChange={() => onChange(opt.value)}\r\n className=\"w-4 h-4 border-gray-300 cursor-pointer\"\r\n />\r\n <span className=\"text-sm text-gray-700 dark:text-white\">\r\n {opt.label}\r\n </span>\r\n </label>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default Switch;\r\n","export const countries = [\r\n { label: \"Afghanistan\", code: \"AF\", phone: \"93\" },\r\n { label: \"Aland Islands\", code: \"AX\", phone: \"358\" },\r\n { label: \"Albania\", code: \"AL\", phone: \"355\" },\r\n { label: \"Algeria\", code: \"DZ\", phone: \"213\" },\r\n { label: \"American Samoa\", code: \"AS\", phone: \"1\" },\r\n { label: \"Andorra\", code: \"AD\", phone: \"376\" },\r\n { label: \"Angola\", code: \"AO\", phone: \"244\" },\r\n { label: \"Anguilla\", code: \"AI\", phone: \"1\" },\r\n { label: \"Antarctica\", code: \"AQ\", phone: \"672\" },\r\n { label: \"Antigua and Barbuda\", code: \"AG\", phone: \"1\" },\r\n { label: \"Argentina\", code: \"AR\", phone: \"54\" },\r\n { label: \"Armenia\", code: \"AM\", phone: \"374\" },\r\n { label: \"Aruba\", code: \"AW\", phone: \"297\" },\r\n { label: \"Australia\", code: \"AU\", phone: \"61\" },\r\n { label: \"Austria\", code: \"AT\", phone: \"43\" },\r\n { label: \"Azerbaijan\", code: \"AZ\", phone: \"994\" },\r\n { label: \"Bahrain\", code: \"BH\", phone: \"973\" },\r\n { label: \"Bangladesh\", code: \"BD\", phone: \"880\" },\r\n { label: \"Barbados\", code: \"BB\", phone: \"1\" },\r\n { label: \"Belarus\", code: \"BY\", phone: \"375\" },\r\n { label: \"Belgium\", code: \"BE\", phone: \"32\" },\r\n { label: \"Belize\", code: \"BZ\", phone: \"501\" },\r\n { label: \"Benin\", code: \"BJ\", phone: \"229\" },\r\n { label: \"Bermuda\", code: \"BM\", phone: \"1\" },\r\n { label: \"Bhutan\", code: \"BT\", phone: \"975\" },\r\n { label: \"Bolivia\", code: \"BO\", phone: \"591\" },\r\n { label: \"Bonaire, Sint Eustatius and Saba\", code: \"BQ\", phone: \"599\" },\r\n { label: \"Bosnia and Herzegovina\", code: \"BA\", phone: \"387\" },\r\n { label: \"Botswana\", code: \"BW\", phone: \"267\" },\r\n { label: \"Bouvet Island\", code: \"BV\", phone: \"0055\" },\r\n { label: \"Brazil\", code: \"BR\", phone: \"55\" },\r\n { label: \"British Indian Ocean Territory\", code: \"IO\", phone: \"246\" },\r\n { label: \"Brunei\", code: \"BN\", phone: \"673\" },\r\n { label: \"Bulgaria\", code: \"BG\", phone: \"359\" },\r\n { label: \"Burkina Faso\", code: \"BF\", phone: \"226\" },\r\n { label: \"Burundi\", code: \"BI\", phone: \"257\" },\r\n { label: \"Cambodia\", code: \"KH\", phone: \"855\" },\r\n { label: \"Cameroon\", code: \"CM\", phone: \"237\" },\r\n { label: \"Canada\", code: \"CA\", phone: \"1\" },\r\n { label: \"Cape Verde\", code: \"CV\", phone: \"238\" },\r\n { label: \"Cayman Islands\", code: \"KY\", phone: \"1\" },\r\n { label: \"Central African Republic\", code: \"CF\", phone: \"236\" },\r\n { label: \"Chad\", code: \"TD\", phone: \"235\" },\r\n { label: \"Chile\", code: \"CL\", phone: \"56\" },\r\n { label: \"China\", code: \"CN\", phone: \"86\" },\r\n { label: \"Christmas Island\", code: \"CX\", phone: \"61\" },\r\n { label: \"Cocos (Keeling) Islands\", code: \"CC\", phone: \"61\" },\r\n { label: \"Colombia\", code: \"CO\", phone: \"57\" },\r\n { label: \"Comoros\", code: \"KM\", phone: \"269\" },\r\n { label: \"Congo\", code: \"CG\", phone: \"242\" },\r\n { label: \"Cook Islands\", code: \"CK\", phone: \"682\" },\r\n { label: \"Costa Rica\", code: \"CR\", phone: \"506\" },\r\n { label: \"Croatia\", code: \"HR\", phone: \"385\" },\r\n { label: \"Cuba\", code: \"CU\", phone: \"53\" },\r\n { label: \"Curaçao\", code: \"CW\", phone: \"599\" },\r\n { label: \"Cyprus\", code: \"CY\", phone: \"357\" },\r\n { label: \"Czech Republic\", code: \"CZ\", phone: \"420\" },\r\n { label: \"Democratic Republic of the Congo\", code: \"CD\", phone: \"243\" },\r\n { label: \"Denmark\", code: \"DK\", phone: \"45\" },\r\n { label: \"Djibouti\", code: \"DJ\", phone: \"253\" },\r\n { label: \"Dominica\", code: \"DM\", phone: \"1\" },\r\n { label: \"Dominican Republic\", code: \"DO\", phone: \"1\" },\r\n { label: \"Ecuador\", code: \"EC\", phone: \"593\" },\r\n { label: \"Egypt\", code: \"EG\", phone: \"20\" },\r\n { label: \"El Salvador\", code: \"SV\", phone: \"503\" },\r\n { label: \"Equatorial Guinea\", code: \"GQ\", phone: \"240\" },\r\n { label: \"Eritrea\", code: \"ER\", phone: \"291\" },\r\n { label: \"Estonia\", code: \"EE\", phone: \"372\" },\r\n { label: \"Eswatini\", code: \"SZ\", phone: \"268\" },\r\n { label: \"Ethiopia\", code: \"ET\", phone: \"251\" },\r\n { label: \"Falkland Islands\", code: \"FK\", phone: \"500\" },\r\n { label: \"Faroe Islands\", code: \"FO\", phone: \"298\" },\r\n { label: \"Fiji Islands\", code: \"FJ\", phone: \"679\" },\r\n { label: \"Finland\", code: \"FI\", phone: \"358\" },\r\n { label: \"France\", code: \"FR\", phone: \"33\" },\r\n { label: \"French Guiana\", code: \"GF\", phone: \"594\" },\r\n { label: \"French Polynesia\", code: \"PF\", phone: \"689\" },\r\n { label: \"French Southern Territories\", code: \"TF\", phone: \"262\" },\r\n { label: \"Gabon\", code: \"GA\", phone: \"241\" },\r\n { label: \"Georgia\", code: \"GE\", phone: \"995\" },\r\n { label: \"Germany\", code: \"DE\", phone: \"49\" },\r\n { label: \"Ghana\", code: \"GH\", phone: \"233\" },\r\n { label: \"Gibraltar\", code: \"GI\", phone: \"350\" },\r\n { label: \"Greece\", code: \"GR\", phone: \"30\" },\r\n { label: \"Greenland\", code: \"GL\", phone: \"299\" },\r\n { label: \"Grenada\", code: \"GD\", phone: \"1\" },\r\n { label: \"Guadeloupe\", code: \"GP\", phone: \"590\" },\r\n { label: \"Guam\", code: \"GU\", phone: \"1\" },\r\n { label: \"Guatemala\", code: \"GT\", phone: \"502\" },\r\n { label: \"Guernsey\", code: \"GG\", phone: \"44\" },\r\n { label: \"Guinea\", code: \"GN\", phone: \"224\" },\r\n { label: \"Guinea-Bissau\", code: \"GW\", phone: \"245\" },\r\n { label: \"Guyana\", code: \"GY\", phone: \"592\" },\r\n { label: \"Haiti\", code: \"HT\", phone: \"509\" },\r\n { label: \"Heard Island and McDonald Islands\", code: \"HM\", phone: \"672\" },\r\n { label: \"Honduras\", code: \"HN\", phone: \"504\" },\r\n { label: \"Hong Kong S.A.R.\", code: \"HK\", phone: \"852\" },\r\n { label: \"Hungary\", code: \"HU\", phone: \"36\" },\r\n { label: \"Iceland\", code: \"IS\", phone: \"354\" },\r\n { label: \"India\", code: \"IN\", phone: \"91\" },\r\n { label: \"Indonesia\", code: \"ID\", phone: \"62\" },\r\n { label: \"Iran\", code: \"IR\", phone: \"98\" },\r\n { label: \"Iraq\", code: \"IQ\", phone: \"964\" },\r\n { label: \"Ireland\", code: \"IE\", phone: \"353\" },\r\n { label: \"Israel\", code: \"IL\", phone: \"972\" },\r\n { label: \"Italy\", code: \"IT\", phone: \"39\" },\r\n { label: \"Ivory Coast\", code: \"CI\", phone: \"225\" },\r\n { label: \"Jamaica\", code: \"JM\", phone: \"1\" },\r\n { label: \"Japan\", code: \"JP\", phone: \"81\" },\r\n { label: \"Jersey\", code: \"JE\", phone: \"44\" },\r\n { label: \"Jordan\", code: \"JO\", phone: \"962\" },\r\n { label: \"Kazakhstan\", code: \"KZ\", phone: \"7\" },\r\n { label: \"Kenya\", code: \"KE\", phone: \"254\" },\r\n { label: \"Kiribati\", code: \"KI\", phone: \"686\" },\r\n { label: \"Kosovo\", code: \"XK\", phone: \"383\" },\r\n { label: \"Kuwait\", code: \"KW\", phone: \"965\" },\r\n { label: \"Kyrgyzstan\", code: \"KG\", phone: \"996\" },\r\n { label: \"Laos\", code: \"LA\", phone: \"856\" },\r\n { label: \"Latvia\", code: \"LV\", phone: \"371\" },\r\n { label: \"Lebanon\", code: \"LB\", phone: \"961\" },\r\n { label: \"Lesotho\", code: \"LS\", phone: \"266\" },\r\n { label: \"Liberia\", code: \"LR\", phone: \"231\" },\r\n { label: \"Libya\", code: \"LY\", phone: \"218\" },\r\n { label: \"Liechtenstein\", code: \"LI\", phone: \"423\" },\r\n { label: \"Lithuania\", code: \"LT\", phone: \"370\" },\r\n { label: \"Luxembourg\", code: \"LU\", phone: \"352\" },\r\n { label: \"Macau S.A.R.\", code: \"MO\", phone: \"853\" },\r\n { label: \"Madagascar\", code: \"MG\", phone: \"261\" },\r\n { label: \"Malawi\", code: \"MW\", phone: \"265\" },\r\n { label: \"Malaysia\", code: \"MY\", phone: \"60\" },\r\n { label: \"Maldives\", code: \"MV\", phone: \"960\" },\r\n { label: \"Mali\", code: \"ML\", phone: \"223\" },\r\n { label: \"Malta\", code: \"MT\", phone: \"356\" },\r\n { label: \"Man (Isle of)\", code: \"IM\", phone: \"44\" },\r\n { label: \"Marshall Islands\", code: \"MH\", phone: \"692\" },\r\n { label: \"Martinique\", code: \"MQ\", phone: \"596\" },\r\n { label: \"Mauritania\", code: \"MR\", phone: \"222\" },\r\n { label: \"Mauritius\", code: \"MU\", phone: \"230\" },\r\n { label: \"Mayotte\", code: \"YT\", phone: \"262\" },\r\n { label: \"Mexico\", code: \"MX\", phone: \"52\" },\r\n { label: \"Micronesia\", code: \"FM\", phone: \"691\" },\r\n { label: \"Moldova\", code: \"MD\", phone: \"373\" },\r\n { label: \"Monaco\", code: \"MC\", phone: \"377\" },\r\n { label: \"Mongolia\", code: \"MN\", phone: \"976\" },\r\n { label: \"Montenegro\", code: \"ME\", phone: \"382\" },\r\n { label: \"Montserrat\", code: \"MS\", phone: \"1\" },\r\n { label: \"Morocco\", code: \"MA\", phone: \"212\" },\r\n { label: \"Mozambique\", code: \"MZ\", phone: \"258\" },\r\n { label: \"Myanmar\", code: \"MM\", phone: \"95\" },\r\n { label: \"Namibia\", code: \"NA\", phone: \"264\" },\r\n { label: \"Nauru\", code: \"NR\", phone: \"674\" },\r\n { label: \"Nepal\", code: \"NP\", phone: \"977\" },\r\n { label: \"Netherlands\", code: \"NL\", phone: \"31\" },\r\n { label: \"New Caledonia\", code: \"NC\", phone: \"687\" },\r\n { label: \"New Zealand\", code: \"NZ\", phone: \"64\" },\r\n { label: \"Nicaragua\", code: \"NI\", phone: \"505\" },\r\n { label: \"Niger\", code: \"NE\", phone: \"227\" },\r\n { label: \"Nigeria\", code: \"NG\", phone: \"234\" },\r\n { label: \"Niue\", code: \"NU\", phone: \"683\" },\r\n { label: \"Norfolk Island\", code: \"NF\", phone: \"672\" },\r\n { label: \"North Korea\", code: \"KP\", phone: \"850\" },\r\n { label: \"North Macedonia\", code: \"MK\", phone: \"389\" },\r\n { label: \"Northern Mariana Islands\", code: \"MP\", phone: \"1\" },\r\n { label: \"Norway\", code: \"NO\", phone: \"47\" },\r\n { label: \"Oman\", code: \"OM\", phone: \"968\" },\r\n { label: \"Pakistan\", code: \"PK\", phone: \"92\" },\r\n { label: \"Palau\", code: \"PW\", phone: \"680\" },\r\n { label: \"Palestinian Territory Occupied\", code: \"PS\", phone: \"970\" },\r\n { label: \"Panama\", code: \"PA\", phone: \"507\" },\r\n { label: \"Papua New Guinea\", code: \"PG\", phone: \"675\" },\r\n { label: \"Paraguay\", code: \"PY\", phone: \"595\" },\r\n { label: \"Peru\", code: \"PE\", phone: \"51\" },\r\n { label: \"Philippines\", code: \"PH\", phone: \"63\" },\r\n { label: \"Pitcairn Island\", code: \"PN\", phone: \"870\" },\r\n { label: \"Poland\", code: \"PL\", phone: \"48\" },\r\n { label: \"Portugal\", code: \"PT\", phone: \"351\" },\r\n { label: \"Puerto Rico\", code: \"PR\", phone: \"1\" },\r\n { label: \"Qatar\", code: \"QA\", phone: \"974\" },\r\n { label: \"Reunion\", code: \"RE\", phone: \"262\" },\r\n { label: \"Romania\", code: \"RO\", phone: \"40\" },\r\n { label: \"Russia\", code: \"RU\", phone: \"7\" },\r\n { label: \"Rwanda\", code: \"RW\", phone: \"250\" },\r\n { label: \"Saint Helena\", code: \"SH\", phone: \"290\" },\r\n { label: \"Saint Kitts and Nevis\", code: \"KN\", phone: \"1\" },\r\n { label: \"Saint Lucia\", code: \"LC\", phone: \"1\" },\r\n { label: \"Saint Pierre and Miquelon\", code: \"PM\", phone: \"508\" },\r\n { label: \"Saint Vincent and the Grenadines\", code: \"VC\", phone: \"1\" },\r\n { label: \"Saint-Barthelemy\", code: \"BL\", phone: \"590\" },\r\n { label: \"Saint-Martin (French part)\", code: \"MF\", phone: \"590\" },\r\n { label: \"Samoa\", code: \"WS\", phone: \"685\" },\r\n { label: \"San Marino\", code: \"SM\", phone: \"378\" },\r\n { label: \"Sao Tome and Principe\", code: \"ST\", phone: \"239\" },\r\n { label: \"Saudi Arabia\", code: \"SA\", phone: \"966\" },\r\n { label: \"Senegal\", code: \"SN\", phone: \"221\" },\r\n { label: \"Serbia\", code: \"RS\", phone: \"381\" },\r\n { label: \"Seychelles\", code: \"SC\", phone: \"248\" },\r\n { label: \"Sierra Leone\", code: \"SL\", phone: \"232\" },\r\n { label: \"Singapore\", code: \"SG\", phone: \"65\" },\r\n { label: \"Sint Maarten (Dutch part)\", code: \"SX\", phone: \"1721\" },\r\n { label: \"Slovakia\", code: \"SK\", phone: \"421\" },\r\n { label: \"Slovenia\", code: \"SI\", phone: \"386\" },\r\n { label: \"Solomon Islands\", code: \"SB\", phone: \"677\" },\r\n { label: \"Somalia\", code: \"SO\", phone: \"252\" },\r\n { label: \"South Africa\", code: \"ZA\", phone: \"27\" },\r\n { label: \"South Georgia\", code: \"GS\", phone: \"500\" },\r\n { label: \"South Korea\", code: \"KR\", phone: \"82\" },\r\n { label: \"South Sudan\", code: \"SS\", phone: \"211\" },\r\n { label: \"Spain\", code: \"ES\", phone: \"34\" },\r\n { label: \"Sri Lanka\", code: \"LK\", phone: \"94\" },\r\n { label: \"Sudan\", code: \"SD\", phone: \"249\" },\r\n { label: \"Suriname\", code: \"SR\", phone: \"597\" },\r\n { label: \"Svalbard and Jan Mayen Islands\", code: \"SJ\", phone: \"47\" },\r\n { label: \"Sweden\", code: \"SE\", phone: \"46\" },\r\n { label: \"Switzerland\", code: \"CH\", phone: \"41\" },\r\n { label: \"Syria\", code: \"SY\", phone: \"963\" },\r\n { label: \"Taiwan\", code: \"TW\", phone: \"886\" },\r\n { label: \"Tajikistan\", code: \"TJ\", phone: \"992\" },\r\n { label: \"Tanzania\", code: \"TZ\", phone: \"255\" },\r\n { label: \"Thailand\", code: \"TH\", phone: \"66\" },\r\n { label: \"The Bahamas\", code: \"BS\", phone: \"1\" },\r\n { label: \"The Gambia\", code: \"GM\", phone: \"220\" },\r\n { label: \"Timor-Leste\", code: \"TL\", phone: \"670\" },\r\n { label: \"Togo\", code: \"TG\", phone: \"228\" },\r\n { label: \"Tokelau\", code: \"TK\", phone: \"690\" },\r\n { label: \"Tonga\", code: \"TO\", phone: \"676\" },\r\n { label: \"Trinidad and Tobago\", code: \"TT\", phone: \"1\" },\r\n { label: \"Tunisia\", code: \"TN\", phone: \"216\" },\r\n { label: \"Turkey\", code: \"TR\", phone: \"90\" },\r\n { label: \"Turkmenistan\", code: \"TM\", phone: \"993\" },\r\n { label: \"Turks and Caicos Islands\", code: \"TC\", phone: \"1\" },\r\n { label: \"Tuvalu\", code: \"TV\", phone: \"688\" },\r\n { label: \"Uganda\", code: \"UG\", phone: \"256\" },\r\n { label: \"Ukraine\", code: \"UA\", phone: \"380\" },\r\n { label: \"United Arab Emirates\", code: \"AE\", phone: \"971\" },\r\n { label: \"United Kingdom\", code: \"GB\", phone: \"44\" },\r\n { label: \"United States\", code: \"US\", phone: \"1\" },\r\n { label: \"United States Minor Outlying Islands\", code: \"UM\", phone: \"1\" },\r\n { label: \"Uruguay\", code: \"UY\", phone: \"598\" },\r\n { label: \"Uzbekistan\", code: \"UZ\", phone: \"998\" },\r\n { label: \"Vanuatu\", code: \"VU\", phone: \"678\" },\r\n { label: \"Vatican City State (Holy See)\", code: \"VA\", phone: \"379\" },\r\n { label: \"Venezuela\", code: \"VE\", phone: \"58\" },\r\n { label: \"Vietnam\", code: \"VN\", phone: \"84\" },\r\n { label: \"Virgin Islands (British)\", code: \"VG\", phone: \"1\" },\r\n { label: \"Virgin Islands (US)\", code: \"VI\", phone: \"1\" },\r\n { label: \"Wallis and Futuna Islands\", code: \"WF\", phone: \"681\" },\r\n { label: \"Western Sahara\", code: \"EH\", phone: \"212\" },\r\n { label: \"Yemen\", code: \"YE\", phone: \"967\" },\r\n { label: \"Zambia\", code: \"ZM\", phone: \"260\" },\r\n { label: \"Zimbabwe\", code: \"ZW\", phone: \"263\" },\r\n];\r\n","import React, { useState, useEffect, useRef } from \"react\";\r\nimport { countries } from \"../../../data/countries\";\r\nimport { ChevronDown, Search } from \"lucide-react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nexport default function PhoneInput({\r\n label = \"\",\r\n value = \"\",\r\n name = \"\",\r\n parentClass = \"\",\r\n onChange,\r\n disabled = false,\r\n required = false,\r\n placeholder = \"Phone number\",\r\n search = false,\r\n countriesList = false,\r\n defaultCountry = \"\",\r\n}) {\r\n const find_country_with_code = (value) => {\r\n return countries.find((obj) => obj.code == value);\r\n };\r\n\r\n const [selectedCountry, setSelectedCountry] = useState(\r\n find_country_with_code(defaultCountry) || countries[0],\r\n );\r\n const [fullNumber, setFullNumber] = useState(\"\");\r\n const [open, setOpen] = useState(false);\r\n const [searchTerm, setSearchTerm] = useState(\"\");\r\n const dropdownRef = useRef();\r\n\r\n // Match prefix when value starts with +code\r\n useEffect(() => {\r\n if (typeof value === \"string\" && value.startsWith(\"+\")) {\r\n const match = countries\r\n .filter((c) => value.startsWith(\"+\" + c.phone))\r\n .sort((a, b) => b.phone.length - a.phone.length)[0];\r\n if (match) {\r\n setSelectedCountry(match);\r\n setFullNumber(value.replace(\"+\" + match.phone, \"\"));\r\n return;\r\n }\r\n }\r\n setFullNumber(value);\r\n }, [value]);\r\n\r\n const handleNumberChange = (e) => {\r\n const input = e.target.value.replace(/\\D/g, \"\");\r\n setFullNumber(input);\r\n if (selectedCountry && onChange) {\r\n onChange(\"+\" + selectedCountry.phone + input);\r\n }\r\n };\r\n\r\n const handleCountrySelect = (country) => {\r\n setSelectedCountry(country);\r\n if (onChange) onChange(\"+\" + country.phone + fullNumber);\r\n setOpen(false);\r\n setSearchTerm(\"\");\r\n };\r\n\r\n // 🖱️ Close dropdown on outside click\r\n useEffect(() => {\r\n const handleClickOutside = (e) => {\r\n if (dropdownRef.current && !dropdownRef.current.contains(e.target))\r\n setOpen(false);\r\n };\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\r\n }, []);\r\n\r\n const filteredCountries = countries.filter(\r\n (c) =>\r\n c.label.toLowerCase().includes(searchTerm.toLowerCase()) ||\r\n c.phone.includes(searchTerm),\r\n );\r\n\r\n if (!countriesList) {\r\n const handleInputChange = (e) => {\r\n const input = e.target.value.replace(/[^+\\d]/g, \"\");\r\n const formatted = input.startsWith(\"+\")\r\n ? \"+\" + input.replace(/[+]/g, \"\").slice(0)\r\n : input;\r\n onChange(formatted);\r\n };\r\n\r\n return (\r\n <>\r\n <div key={name} className={parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n <input\r\n type=\"text\"\r\n value={value}\r\n onChange={handleInputChange}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n required={required}\r\n className=\"w-full h-10 px-3 text-sm border border-gray-300 dark:border-gray-600 rounded-md \r\n bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 focus:outline-none \r\n focus:ring-1 focus:ring-blue-300 dark:focus:ring-blue-200\"\r\n inputMode=\"tel\"\r\n pattern=\"^\\+\\d{1,15}$\"\r\n />\r\n </div>\r\n </>\r\n );\r\n }\r\n\r\n return (\r\n <>\r\n <div key={name} className={parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n <div className=\"relative \" ref={dropdownRef}>\r\n {/* Input container */}\r\n <div\r\n className={`h-[40px] flex items-center border rounded-md px-2 bg-white dark:bg-gray-700 transition-all\r\n ${\r\n open\r\n ? \"ring-0.5 ring-blue-100 border-blue-300\"\r\n : \"border-gray-300 dark:border-gray-600\"\r\n }\r\n ${disabled ? \"opacity-60 cursor-not-allowed\" : \"\"}`}\r\n >\r\n {/* Flag & dropdown */}\r\n <button\r\n type=\"button\"\r\n disabled={disabled}\r\n onClick={() => setOpen(!open)}\r\n className=\"flex items-center gap-1 pr-2 border-r border-gray-300 dark:border-gray-700 focus:outline-none\"\r\n >\r\n {selectedCountry ? (\r\n <img\r\n src={`https://flagcdn.com/w20/${selectedCountry.code.toLowerCase()}.png`}\r\n alt={selectedCountry.code}\r\n className=\"w-5 h-3 object-cover\"\r\n />\r\n ) : (\r\n <span className=\"text-gray-400 text-xs\">🌐</span>\r\n )}\r\n <ChevronDown className=\"w-3 h-3 text-gray-500\" />\r\n </button>\r\n\r\n {/* Country code */}\r\n {selectedCountry && (\r\n <span className=\"ml-2 text-sm text-gray-700 dark:text-gray-200 whitespace-nowrap\">\r\n +{selectedCountry.phone}\r\n </span>\r\n )}\r\n\r\n {/* Number input */}\r\n <input\r\n type=\"tel\"\r\n value={fullNumber}\r\n onChange={handleNumberChange}\r\n required={required}\r\n disabled={disabled || !selectedCountry}\r\n placeholder={!selectedCountry ? \"Select a country\" : placeholder}\r\n className=\"flex-1 ml-2 bg-transparent outline-none text-sm text-gray-800 dark:text-gray-100 placeholder-gray-400\"\r\n />\r\n\r\n {/* Hidden input for native browser validation */}\r\n <input\r\n type=\"tel\"\r\n required={required}\r\n tabIndex={-1}\r\n readOnly\r\n value={\r\n selectedCountry && fullNumber\r\n ? \"+\" + selectedCountry.phone + fullNumber\r\n : \"\"\r\n }\r\n style={{\r\n position: \"absolute\",\r\n opacity: 0,\r\n pointerEvents: \"none\",\r\n height: 0,\r\n }}\r\n />\r\n </div>\r\n\r\n {/* Dropdown */}\r\n {open && (\r\n <div className=\"absolute top-full left-0 w-full mt-1 border border-gray-300 dark:border-gray-700 rounded-md bg-white dark:bg-gray-700 shadow-lg z-50 max-h-60 overflow-y-auto\">\r\n {search && (\r\n <div className=\"p-2 border-b border-gray-200 dark:border-gray-700\">\r\n <div className=\"relative\">\r\n <Search className=\"absolute left-3 top-1/2 transform -translate-y-1/2 w-4 h-4 text-gray-400\" />\r\n <input\r\n type=\"text\"\r\n value={searchTerm}\r\n onChange={(e) => setSearchTerm(e.target.value)}\r\n placeholder=\"Search country...\"\r\n className=\"w-full pl-9 pr-3 py-2 text-sm border rounded-md bg-white dark:bg-gray-800 dark:text-white placeholder-gray-500 dark:placeholder-gray-400 focus:outline-none \"\r\n />\r\n </div>\r\n </div>\r\n )}\r\n\r\n {filteredCountries.map((c) => (\r\n <button\r\n key={c.code}\r\n type=\"button\"\r\n onClick={() => handleCountrySelect(c)}\r\n className=\"w-full flex items-center gap-2 px-2 py-1 text-sm hover:bg-blue-50 dark:hover:bg-gray-700 text-gray-800 dark:text-gray-100\"\r\n >\r\n <img\r\n src={`https://flagcdn.com/w20/${c.code.toLowerCase()}.png`}\r\n alt={c.code}\r\n className=\"w-5 h-3 object-cover\"\r\n />\r\n <span>\r\n {c.label} (+{c.phone})\r\n </span>\r\n </button>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </>\r\n );\r\n}\r\n","import React, { useState } from \"react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nconst TextArea = React.forwardRef(\r\n ({ className = \"\", label, required, ...props }, ref) => {\r\n const combinedClassName = `\r\n placeholder-gray-400 dark:placeholder-gray-400\r\n ${className}\r\n `.trim();\r\n\r\n return (\r\n <>\r\n <div key={props.name} className={props.parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n <div className=\"relative\">\r\n <textarea\r\n className={combinedClassName}\r\n ref={ref}\r\n required={required}\r\n {...props}\r\n />\r\n </div>\r\n </div>\r\n </>\r\n );\r\n },\r\n);\r\n\r\nTextArea.displayName = \"TextArea\";\r\n\r\nexport { TextArea };\r\n","import { Icon } from \"@iconify/react\";\r\nimport React, { useState, useEffect, useRef } from \"react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nconst ImagePicker = ({\r\n label = \"\",\r\n value = null,\r\n onChange,\r\n required = false,\r\n accept = \"image/*\",\r\n id,\r\n dragDrop = false,\r\n name = \"\",\r\n parentClass = \"\",\r\n}) => {\r\n const [image, setImage] = useState(value);\r\n const [isDragging, setIsDragging] = useState(false);\r\n const inputRef = useRef(null);\r\n\r\n useEffect(() => {\r\n setImage(value);\r\n }, [value]);\r\n\r\n const handleFileChange = (files) => {\r\n if (!files || files.length === 0) {\r\n setImage(null);\r\n onChange?.(null);\r\n return;\r\n }\r\n\r\n const file = files[0];\r\n const preview = URL.createObjectURL(file);\r\n const imgObj = { file, preview };\r\n\r\n setImage(imgObj);\r\n onChange?.(preview);\r\n };\r\n\r\n // Drag events\r\n const handleDragOver = (e) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(true);\r\n };\r\n\r\n const handleDragLeave = (e) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(false);\r\n };\r\n\r\n const handleDrop = (e) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(false);\r\n handleFileChange(e.dataTransfer.files);\r\n };\r\n\r\n return (\r\n <>\r\n <div key={name} className={parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n <div\r\n className={`relative rounded-md p-2 transition-all ${\r\n isDragging\r\n ? \"border border-dashed border-blue-500 bg-blue-50 dark:bg-blue-900\"\r\n : \"border bg-gray-50 dark:bg-gray-700\"\r\n }`}\r\n onDragOver={handleDragOver}\r\n onDragLeave={handleDragLeave}\r\n onDrop={handleDrop}\r\n >\r\n {/* Blur entire content when dragging */}\r\n <div\r\n className={`flex items-center space-x-3 transition-all ${\r\n isDragging ? \"filter blur-sm\" : \"\"\r\n }`}\r\n >\r\n {/* Left: preview clickable */}\r\n <div\r\n className=\"cursor-pointer\"\r\n onClick={() => inputRef.current.click()}\r\n >\r\n {image ? (\r\n <img\r\n src={image.preview || image}\r\n alt=\"preview\"\r\n className=\"object-cover w-20 h-20 rounded-full\"\r\n />\r\n ) : (\r\n <>\r\n <div className=\"rounded-full bg-gray-200 dark:bg-gray-800 h-20 w-20 flex items-center justify-center\">\r\n <Icon\r\n icon=\"ri:image-add-fill\"\r\n className=\"text-gray-400 w-10 h-10\"\r\n />\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n\r\n {/* Right: upload input */}\r\n <input\r\n ref={inputRef}\r\n id={id}\r\n type=\"file\"\r\n accept={accept}\r\n onChange={(e) => handleFileChange(e.target.files)}\r\n required={required && !image}\r\n className=\"inline-flex items-center justify-center p-2 text-gray-400 text-sm file:cursor-pointer\"\r\n />\r\n </div>\r\n\r\n {/* Overlay text */}\r\n {dragDrop && isDragging && (\r\n <div className=\"absolute inset-0 flex items-center justify-center pointer-events-none\">\r\n <span className=\"text-blue-500 font-semibold text-xl\">\r\n Drop here\r\n </span>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default ImagePicker;\r\n","import React, { useState } from \"react\";\r\nimport { Icon } from \"@iconify/react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nconst Input = React.forwardRef(\r\n (\r\n {\r\n label,\r\n required,\r\n parentClass = \"\",\r\n className = \"\",\r\n type = \"text\",\r\n onKeyDown,\r\n negativeNumberAllow = true,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const [showPassword, setShowPassword] = useState(false);\r\n\r\n const handleKeyDown = (e) => {\r\n if (type === \"number\") {\r\n const blockedKeys = [\"e\", \"E\", \"+\"];\r\n\r\n // Block e, E, +\r\n if (blockedKeys.includes(e.key)) {\r\n e.preventDefault();\r\n return;\r\n }\r\n\r\n // Block negative sign if not allowed\r\n if (negativeNumberAllow == false && e.key === \"-\") {\r\n e.preventDefault();\r\n return;\r\n }\r\n\r\n // Block arrow up/down from changing value\r\n if ([\"ArrowUp\", \"ArrowDown\"].includes(e.key)) {\r\n e.preventDefault();\r\n return;\r\n }\r\n }\r\n\r\n onKeyDown?.(e);\r\n };\r\n\r\n const combinedClassName = `\r\n h-10 placeholder-gray-400 dark:placeholder-gray-400\r\n ${type === \"password\" ? \"pr-10\" : \"\"}\r\n ${type === \"number\" ? \"no-spinner\" : \"\"}\r\n ${className}\r\n `.trim();\r\n\r\n return (\r\n <>\r\n <div key={props.name} className={parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n <div className=\"relative\">\r\n <input\r\n type={type === \"password\" && showPassword ? \"text\" : type}\r\n ref={ref}\r\n required={required}\r\n onKeyDown={handleKeyDown}\r\n className={combinedClassName}\r\n {...props}\r\n />\r\n\r\n {type === \"password\" && (\r\n <button\r\n type=\"button\"\r\n tabIndex={-1}\r\n onClick={() => setShowPassword((prev) => !prev)}\r\n className=\"absolute inset-y-0 right-3 flex items-center text-gray-400 hover:text-gray-600 dark:text-gray-400 dark:hover:text-gray-200\"\r\n >\r\n <Icon\r\n icon={\r\n showPassword ? \"mdi:eye-off-outline\" : \"mdi:eye-outline\"\r\n }\r\n className=\"w-5 h-5\"\r\n />\r\n </button>\r\n )}\r\n </div>\r\n </div>\r\n </>\r\n );\r\n },\r\n);\r\n\r\nInput.displayName = \"Input\";\r\n\r\nexport { Input };\r\n","import React from \"react\";\r\nimport { Editor } from \"@tinymce/tinymce-react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nconst TinyEditor = ({\r\n key,\r\n editorKey = \"\",\r\n value = \"\",\r\n onChange,\r\n label = \"\",\r\n required = false,\r\n placeholder = \"\",\r\n parentClass = \"col-span-12\",\r\n height = 400,\r\n inline = false,\r\n disabled = false,\r\n plugins,\r\n toolbar,\r\n menubar = false,\r\n fontFamily = \"Inter, sans-serif\",\r\n initConfig = {},\r\n imageUploadHandler, // ✅ Promise function passed from parent\r\n}) => {\r\n const defaultPlugins = [\r\n \"advlist\",\r\n \"autolink\",\r\n \"lists\",\r\n \"link\",\r\n \"image\",\r\n \"charmap\",\r\n \"preview\",\r\n \"anchor\",\r\n \"searchreplace\",\r\n \"visualblocks\",\r\n \"code\",\r\n \"fullscreen\",\r\n \"insertdatetime\",\r\n \"media\",\r\n \"table\",\r\n \"help\",\r\n \"wordcount\",\r\n ];\r\n\r\n const defaultToolbar =\r\n \"undo redo | blocks | bold italic underline forecolor backcolor | \" +\r\n \"alignleft aligncenter alignright alignjustify | \" +\r\n \"bullist numlist outdent indent | link image media table | \" +\r\n \"removeformat | code fullscreen preview\";\r\n\r\n // ✅ Handle Image Upload via Promise\r\n const handleImageUpload = (blobInfo) => {\r\n return new Promise((resolve, reject) => {\r\n if (!imageUploadHandler) {\r\n // fallback to base64 if no handler provided\r\n resolve(`data:${blobInfo.blob().type};base64,${blobInfo.base64()}`);\r\n return;\r\n }\r\n\r\n imageUploadHandler(blobInfo)\r\n .then((url) => {\r\n if (!url) {\r\n reject(\"Upload failed: No URL returned\");\r\n } else {\r\n resolve(url);\r\n }\r\n })\r\n .catch((error) => {\r\n reject(\r\n typeof error === \"string\"\r\n ? error\r\n : error?.message || \"Image upload failed\",\r\n );\r\n });\r\n });\r\n };\r\n\r\n return (\r\n <div key={key} className={parentClass}>\r\n {label && <InputLabel label={label} required={required} />}\r\n\r\n <Editor\r\n apiKey={editorKey}\r\n value={value}\r\n disabled={disabled}\r\n init={{\r\n height,\r\n inline,\r\n menubar,\r\n branding: false,\r\n statusbar: true,\r\n automatic_uploads: true,\r\n images_upload_handler: handleImageUpload,\r\n plugins: plugins ?? defaultPlugins,\r\n toolbar: toolbar ?? defaultToolbar,\r\n placeholder,\r\n content_style: `\r\n body {\r\n font-family: ${fontFamily};\r\n }\r\n `,\r\n ...initConfig,\r\n }}\r\n onEditorChange={(content) => {\r\n if (onChange) {\r\n onChange(content);\r\n }\r\n }}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nexport default TinyEditor;\r\n","import React from \"react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nconst Checkbox = ({\r\n name = \"\",\r\n label = \"\", // label for single checkbox\r\n options = [], // array of { label, value } for multiple\r\n value = null, // boolean for single, array for multiple, or string for single select\r\n onChange,\r\n disabled = false,\r\n required = false,\r\n parentClass = \"col-span-12\",\r\n className = \"\",\r\n multiSelect = false, // ✅ if true, only one option can be selected (like radio)\r\n}) => {\r\n // Detect if multiple options are present\r\n const multiple = Array.isArray(options) && options.length > 0;\r\n\r\n // Check if a value is selected\r\n const isChecked = (optionValue) => {\r\n if (multiple) {\r\n if (!multiSelect) return value === optionValue;\r\n return Array.isArray(value) && value.includes(optionValue);\r\n }\r\n return Boolean(value);\r\n };\r\n\r\n // Handle change for single checkbox\r\n const handleSingleChange = (e) => {\r\n onChange?.(e.target.checked, name);\r\n };\r\n\r\n // Handle change for multiple checkboxes\r\n const handleMultipleChange = (optionValue, checked) => {\r\n if (!onChange) return;\r\n\r\n if (!multiSelect) {\r\n if (checked) {\r\n onChange(optionValue, name);\r\n } else {\r\n onChange(\"\", name);\r\n }\r\n // Only allow one selected\r\n } else {\r\n const newValue = Array.isArray(value) ? [...value] : [];\r\n if (checked) {\r\n if (!newValue.includes(optionValue)) newValue.push(optionValue);\r\n } else {\r\n const index = newValue.indexOf(optionValue);\r\n if (index > -1) newValue.splice(index, 1);\r\n }\r\n onChange(newValue, name);\r\n }\r\n };\r\n\r\n // ---------------- JSX ----------------\r\n if (multiple) {\r\n // Multiple options\r\n return (\r\n <>\r\n <div className={`${parentClass}`}>\r\n <InputLabel label={label} required={required} />\r\n <div className={`flex flex-col space-y-2`}>\r\n {options.map((opt, idx) => (\r\n <div key={opt.value || opt.label} className=\"flex items-center\">\r\n <input\r\n type=\"checkbox\"\r\n name={name}\r\n value={opt.value}\r\n checked={isChecked(opt.value)}\r\n disabled={disabled || opt.disabled}\r\n required={required && idx === 0}\r\n onChange={(e) =>\r\n handleMultipleChange(opt.value, e.target.checked)\r\n }\r\n key={name}\r\n className={`h-4 w-4 cursor-pointer text-blue-600 border-gray-300 rounded focus:ring-2 focus:ring-blue-500 dark:focus:ring-blue-400 ${className}`}\r\n />\r\n {opt.label && (\r\n <label\r\n htmlFor={name}\r\n className=\"ml-2 text-sm text-gray-700 dark:text-gray-200 select-none\"\r\n >\r\n {opt.label}\r\n </label>\r\n )}\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </>\r\n );\r\n }\r\n\r\n // Single checkbox\r\n return (\r\n <div className={`flex items-center ${parentClass}`}>\r\n <input\r\n type=\"checkbox\"\r\n name={name}\r\n checked={isChecked()}\r\n disabled={disabled}\r\n required={required}\r\n onChange={handleSingleChange}\r\n className={`h-4 w-4 text-blue-600 cursor-pointer border-gray-300 rounded focus:ring-2 focus:ring-blue-500 dark:focus:ring-blue-400 ${className}`}\r\n />\r\n {label && (\r\n <label\r\n htmlFor={name}\r\n className=\"ml-2 text-sm text-gray-700 dark:text-gray-200 select-none\"\r\n >\r\n {label}\r\n </label>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default Checkbox;\r\n","import React from \"react\";\r\nimport Select from \"./Select\";\r\nimport Switch from \"./Switch\";\r\nimport PhoneInput from \"./PhoneInput\";\r\nimport { TextArea } from \"./TextArea\";\r\nimport ImagePicker from \"./ImagePicker\";\r\nimport { Input } from \"./Input\";\r\nimport TinyEditor from \"./TinyEditor\";\r\nimport Checkbox from \"./Checkbox\";\r\n\r\nconst RenderFields = ({ field, formData, handleChange }) => {\r\n const {\r\n key,\r\n label,\r\n type,\r\n options,\r\n placeholder,\r\n rows,\r\n inputClass,\r\n search,\r\n accept,\r\n text,\r\n required = false,\r\n minLength,\r\n dragDrop,\r\n parentClass,\r\n countriesList,\r\n defaultCountry,\r\n multiple,\r\n dropdownMaxHeight,\r\n editorKey,\r\n fontFamily,\r\n disabled,\r\n negativeNumberAllow,\r\n } = field;\r\n\r\n let value = formData?.[key];\r\n if (value === undefined || value === null) {\r\n value = \"\";\r\n }\r\n\r\n const finalPlaceholder =\r\n placeholder || (type === \"select\" ? `Select ${label}` : `Enter ${label}`);\r\n\r\n const baseClass =\r\n \"w-full px-3 py-2 rounded-md border border-gray-300 dark:border-gray-600 text-sm focus:outline-none focus:ring-1 focus:ring-blue-200 bg-white text-black dark:bg-gray-700 dark:text-white\";\r\n\r\n switch (type) {\r\n case \"select\":\r\n return (\r\n <Select\r\n options={options || []}\r\n value={value}\r\n onChange={(val) => handleChange(key, val)}\r\n placeholder={finalPlaceholder}\r\n className={inputClass || \"\"}\r\n search={search}\r\n required={required}\r\n label={label}\r\n name={key}\r\n disabled={disabled}\r\n parentClass={parentClass}\r\n multiple={multiple}\r\n dropdownMaxHeight={dropdownMaxHeight}\r\n />\r\n );\r\n\r\n case \"checkbox\":\r\n return (\r\n <Checkbox\r\n name={key}\r\n label={label}\r\n options={options || []}\r\n value={value}\r\n onChange={(val) => handleChange(key, val)}\r\n required={required}\r\n parentClass={parentClass}\r\n className={inputClass || \"\"}\r\n multiSelect={multiple}\r\n disabled={disabled}\r\n />\r\n );\r\n\r\n case \"switch\":\r\n return (\r\n <Switch\r\n value={value}\r\n onChange={(val) => handleChange(key, val)}\r\n text={text}\r\n options={options || []}\r\n label={label}\r\n required={required}\r\n name={key}\r\n disabled={disabled}\r\n parentClass={parentClass}\r\n />\r\n );\r\n\r\n case \"phone\":\r\n return (\r\n <PhoneInput\r\n value={value}\r\n onChange={(val) => handleChange(key, val)}\r\n countriesList={countriesList}\r\n defaultCountry={defaultCountry}\r\n required={required}\r\n placeholder={finalPlaceholder}\r\n search={search}\r\n label={label}\r\n name={key}\r\n disabled={disabled}\r\n parentClass={parentClass}\r\n />\r\n );\r\n\r\n case \"textarea\":\r\n return (\r\n <TextArea\r\n value={value}\r\n onChange={(e) => handleChange(key, e.target.value)}\r\n placeholder={finalPlaceholder}\r\n rows={rows || 3}\r\n className={`${baseClass} ${inputClass || \"\"}`}\r\n required={required}\r\n name={key}\r\n label={label}\r\n disabled={disabled}\r\n parentClass={parentClass}\r\n />\r\n );\r\n\r\n case \"image\":\r\n return (\r\n <ImagePicker\r\n value={value}\r\n onChange={(imgObj) => handleChange(key, imgObj)}\r\n required={required}\r\n accept={accept || \"image/*\"}\r\n id={`file-${key}`}\r\n dragDrop={dragDrop}\r\n label={label}\r\n name={key}\r\n parentClass={parentClass}\r\n />\r\n );\r\n\r\n case \"tinyEditor\":\r\n return (\r\n <TinyEditor\r\n value={value}\r\n onChange={(newValue) => handleChange(key, newValue)}\r\n required={required}\r\n key={`editor-${key}`}\r\n placeholder={finalPlaceholder}\r\n label={label}\r\n parentClass={parentClass}\r\n fontFamily={fontFamily}\r\n editorKey={editorKey}\r\n disabled={disabled}\r\n />\r\n );\r\n\r\n default:\r\n return (\r\n <Input\r\n type={type || \"text\"}\r\n value={value}\r\n onChange={(e) => handleChange(key, e.target.value)}\r\n placeholder={finalPlaceholder}\r\n className={`${baseClass} ${inputClass || \"\"}`}\r\n required={required}\r\n name={key}\r\n minLength={minLength}\r\n label={label}\r\n negativeNumberAllow={negativeNumberAllow}\r\n parentClass={parentClass}\r\n disabled={disabled}\r\n />\r\n );\r\n }\r\n};\r\n\r\nexport default RenderFields;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { X } from \"lucide-react\";\r\nimport Button from \"../Button/Button\";\r\nimport RenderFields from \"../Form/components/RenderFields\";\r\n\r\nconst FilterDrawer = ({ isOpen, onClose, config, onApply }) => {\r\n const [filters, setFilters] = useState({});\r\n\r\n const handleChange = (key, value) => {\r\n setFilters((prev) => ({ ...prev, [key]: value }));\r\n };\r\n\r\n const handleApply = () => {\r\n onApply?.(filters);\r\n onClose();\r\n };\r\n\r\n const handleReset = () => {\r\n setFilters({});\r\n onApply?.({});\r\n onClose();\r\n };\r\n\r\n return (\r\n <>\r\n {/* Overlay */}\r\n <div\r\n className={`fixed inset-0 bg-black/50 z-40 transition-opacity duration-300 ${\r\n isOpen\r\n ? \"opacity-100 pointer-events-auto\"\r\n : \"opacity-0 pointer-events-none\"\r\n }`}\r\n onClick={onClose}\r\n />\r\n\r\n {/* Drawer */}\r\n <div\r\n className={`fixed top-0 right-0 h-full w-[28rem] bg-white dark:bg-gray-900 shadow-2xl z-50 flex flex-col border-l border-gray-200 dark:border-gray-700\r\n transform transition-transform duration-300 ease-in-out\r\n ${isOpen ? \"translate-x-0\" : \"translate-x-full\"}\r\n `}\r\n >\r\n {/* Header */}\r\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-gray-200 dark:border-gray-700\">\r\n <h2 className=\"text-lg font-semibold text-gray-900 dark:text-white\">\r\n Filters\r\n </h2>\r\n <button\r\n onClick={onClose}\r\n className=\"p-2 hover:bg-gray-100 dark:hover:bg-gray-800 rounded-md transition\"\r\n >\r\n <X className=\"w-5 h-5 text-gray-500 dark:text-gray-400\" />\r\n </button>\r\n </div>\r\n\r\n {/* Content */}\r\n <div className=\"flex-1 overflow-y-auto px-4 py-3\">\r\n {config?.component ? (\r\n <config.component filters={filters} onFilterChange={handleChange} />\r\n ) : (\r\n <div className=\"space-y-4\">\r\n {config?.fields?.map((field) => (\r\n <>\r\n <RenderFields\r\n key={field.key}\r\n field={field}\r\n formData={filters}\r\n handleChange={handleChange}\r\n />\r\n </>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Footer */}\r\n <div className=\"flex gap-2 px-4 py-3 border-t border-gray-200 dark:border-gray-700\">\r\n <Button\r\n onClick={handleApply}\r\n variant=\"contained\"\r\n color=\"primary\"\r\n fullWidth\r\n >\r\n Apply Filters\r\n </Button>\r\n <Button\r\n onClick={handleReset}\r\n variant=\"contained\"\r\n className=\"min-w-[150px]\"\r\n >\r\n Reset\r\n </Button>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default FilterDrawer;\r\n","import React from \"react\";\r\n\r\nconst BADGE_COLORS = {\r\n blue: {\r\n bg: \"bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-300\",\r\n border:\r\n \"border border-blue-300 text-blue-700 dark:border-blue-700 dark:text-blue-300\",\r\n },\r\n teal: {\r\n bg: \"bg-teal-100 text-teal-800 dark:bg-teal-900/30 dark:text-teal-300\",\r\n border:\r\n \"border border-teal-300 text-teal-700 dark:border-teal-700 dark:text-teal-300\",\r\n },\r\n purple: {\r\n bg: \"bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300\",\r\n border:\r\n \"border border-purple-300 text-purple-700 dark:border-purple-700 dark:text-purple-300\",\r\n },\r\n yellow: {\r\n bg: \"bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-300\",\r\n border:\r\n \"border border-yellow-300 text-yellow-700 dark:border-yellow-700 dark:text-yellow-300\",\r\n },\r\n green: {\r\n bg: \"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300\",\r\n border:\r\n \"border border-green-300 text-green-700 dark:border-green-700 dark:text-green-300\",\r\n },\r\n red: {\r\n bg: \"bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-300\",\r\n border:\r\n \"border border-red-300 text-red-700 dark:border-red-700 dark:text-red-300\",\r\n },\r\n gray: {\r\n bg: \"bg-gray-100 text-gray-800 dark:bg-gray-900/30 dark:text-gray-300\",\r\n border:\r\n \"border border-gray-300 text-gray-700 dark:border-gray-700 dark:text-gray-300\",\r\n },\r\n};\r\n\r\nconst BADGE_VARIANTS = {\r\n contained: \"bg\",\r\n outline: \"border !bg-transparent\",\r\n soft: \"bg opacity-90\",\r\n};\r\n\r\nconst Chip = ({\r\n label,\r\n variant = \"contained\", // contained | outline | soft\r\n color = \"green\",\r\n className = \"\",\r\n}) => {\r\n const colorConfig = BADGE_COLORS[color] || BADGE_COLORS.green;\r\n const variantKey = BADGE_VARIANTS[variant] || BADGE_VARIANTS.contained;\r\n\r\n const variantClasses =\r\n variant === \"outline\" ? colorConfig.border : colorConfig.bg;\r\n\r\n return (\r\n <span\r\n className={`inline-flex justify-center items-center rounded-sm text-xs font-semibold px-3 py-1 min-w-[78px]\r\n ${variantClasses}\r\n ${variantKey}\r\n ${className}`}\r\n >\r\n {label}\r\n </span>\r\n );\r\n};\r\n\r\nexport default Chip;\r\n","const TableSkeleton = ({ rows = 5, columns = 5 }) => {\r\n return (\r\n <>\r\n <div className=\"w-full mb-6 inline-flex justify-end items-center\">\r\n <div className=\"h-8 w-80 bg-gray-300 dark:bg-gray-700 rounded animate-pulse\" />\r\n </div>\r\n <div className=\"overflow-hidden rounded-md border border-gray-200 dark:border-gray-800\">\r\n <table className=\"w-full border-collapse\">\r\n <thead>\r\n <tr className=\"bg-gray-50 dark:bg-gray-900\">\r\n {Array.from({ length: columns }).map((_, i) => (\r\n <th key={i} className=\"px-4 py-3\">\r\n <div className=\"h-6 w-24 bg-gray-300 dark:bg-gray-700 rounded animate-pulse inline-flex justify-center items-center\" />\r\n </th>\r\n ))}\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n {Array.from({ length: rows }).map((_, rowIndex) => (\r\n <tr\r\n key={rowIndex}\r\n className=\"border-t border-gray-200 dark:border-gray-800\"\r\n >\r\n {Array.from({ length: columns }).map((_, colIndex) => (\r\n <td key={colIndex} className=\"px-4 py-6\">\r\n <div className=\"h-6 w-full bg-gray-300 dark:bg-gray-700 rounded animate-pulse\" />\r\n </td>\r\n ))}\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default TableSkeleton;\r\n","import { useEffect } from \"react\";\r\nimport { X } from \"lucide-react\";\r\n\r\nconst ImagePreview = ({ src, alt = \"preview\", isOpen, setIsOpen }) => {\r\n const closePreview = () => setIsOpen(false);\r\n\r\n // Handle ESC key + prevent body scroll\r\n useEffect(() => {\r\n const handleEsc = (e) => {\r\n if (e.key === \"Escape\") closePreview();\r\n };\r\n\r\n if (isOpen) {\r\n document.body.style.overflow = \"hidden\";\r\n document.addEventListener(\"keydown\", handleEsc);\r\n }\r\n\r\n return () => {\r\n document.body.style.overflow = \"\";\r\n document.removeEventListener(\"keydown\", handleEsc);\r\n };\r\n }, [isOpen]);\r\n\r\n return (\r\n <>\r\n {/* Fullscreen Preview */}\r\n <div\r\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/70 dark:bg-black/80 \r\n backdrop-blur-sm animate-in fade-in duration-200\"\r\n onClick={closePreview}\r\n >\r\n {/* Close Button */}\r\n <button\r\n onClick={closePreview}\r\n className=\"absolute top-4 right-4 bg-white dark:bg-gray-800 text-gray-800 dark:text-gray-200\r\n hover:bg-gray-100 dark:hover:bg-gray-700 rounded-full p-2 shadow-lg transition\"\r\n >\r\n <X size={20} />\r\n </button>\r\n\r\n {/* Image Container */}\r\n <div\r\n className=\"max-w-5xl w-full px-4 transform transition-all duration-200 scale-95 animate-in zoom-in-95\"\r\n onClick={(e) => e.stopPropagation()}\r\n >\r\n {/* Large Image */}\r\n <img\r\n src={src}\r\n alt={alt}\r\n className=\"w-full max-h-[90vh] object-contain rounded-xl\"\r\n />\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default ImagePreview;\r\n","import React, { useState, useMemo, useRef, useEffect } from \"react\";\r\nimport {\r\n ChevronLeft,\r\n ChevronRight,\r\n Search,\r\n EllipsisVertical,\r\n Filter,\r\n User,\r\n} from \"lucide-react\";\r\nimport { createPortal } from \"react-dom\";\r\nimport { formatDate, searchLocalData } from \"../../lib/utils\";\r\nimport Button from \"../Button/Button\";\r\nimport FilterDrawer from \"../Filter/FilterDrawer\";\r\nimport Chip from \"../Chip/Chip\";\r\nimport TableSkeleton from \"./components/TableSkeleton\";\r\nimport ImagePreview from \"./components/ImagePreview\";\r\n\r\nconst Table = ({ config }) => {\r\n const {\r\n data = [],\r\n table_head = [],\r\n loading = false,\r\n search = {\r\n enabled: false,\r\n placeholder: \"Search...\",\r\n useServerSideSearch: false,\r\n },\r\n filter = {\r\n enabled: false,\r\n useServerSideFilters: false,\r\n },\r\n pagination = {\r\n enabled: false,\r\n rows_per_page: 10,\r\n useServerSidePagination: false,\r\n },\r\n emptyMessage = \"No data available\",\r\n onMenuAction,\r\n setServerSidePaginationData = () => {},\r\n onFilterApply,\r\n filterConfig = null,\r\n } = config;\r\n\r\n const [searchTerm, setSearchTerm] = useState(\"\");\r\n const [activeMenu, setActiveMenu] = useState(null);\r\n const [menuList, setMenuList] = useState([]);\r\n const [menuPosition, setMenuPosition] = useState({});\r\n const [showFilters, setShowFilters] = useState(false);\r\n\r\n // image preview\r\n const [targetImage, setTargetImage] = useState(null);\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const filteredData = useMemo(() => {\r\n if (!search.enabled || !searchTerm.trim()) return data;\r\n if (search.useServerSideSearch) return data;\r\n return searchLocalData(data, searchTerm, search.searchKeys || []);\r\n }, [data, searchTerm, search]);\r\n\r\n const [currentPage, setCurrentPage] = useState(1);\r\n const [pageSize, setPageSize] = useState(pagination?.rows_per_page || 50);\r\n const [totalRecords, setTotalRecords] = useState(filteredData.length || 0);\r\n\r\n const totalPages = pagination?.useServerSidePagination\r\n ? pagination.total_pages\r\n : Math.ceil(filteredData.length / pageSize);\r\n\r\n const paginatedData = useMemo(() => {\r\n if (pagination.useServerSidePagination) return filteredData;\r\n const start = (currentPage - 1) * pageSize;\r\n return filteredData.slice(start, start + pageSize);\r\n }, [filteredData, currentPage, pageSize]);\r\n\r\n const menuRef = useRef(null);\r\n const buttonRefs = useRef({});\r\n const searchTimeoutRef = useRef(null);\r\n\r\n const handleSearchChange = (value) => {\r\n setSearchTerm(value);\r\n setCurrentPage(1);\r\n\r\n if (search.useServerSideSearch) {\r\n if (searchTimeoutRef.current) clearTimeout(searchTimeoutRef.current);\r\n\r\n searchTimeoutRef.current = setTimeout(async () => {\r\n try {\r\n await setServerSidePaginationData((prev) => ({\r\n ...prev,\r\n search: value,\r\n current_page: 1,\r\n }));\r\n } catch (error) {\r\n console.error(\"Search error:\", error);\r\n }\r\n }, 800);\r\n }\r\n };\r\n\r\n const handleActionClick = (action, item, e) => {\r\n e.stopPropagation();\r\n setActiveMenu(null);\r\n onMenuAction?.(action.type, item);\r\n };\r\n\r\n const handleMenuToggle = (itemId, e, menu_list) => {\r\n e.stopPropagation();\r\n setMenuList(menu_list);\r\n const button = e.currentTarget;\r\n buttonRefs.current[itemId] = button;\r\n const rect = button.getBoundingClientRect();\r\n const menuWidth = 192;\r\n const menuHeight = menu_list.length * 40;\r\n const viewportWidth = window.innerWidth;\r\n const viewportHeight = window.innerHeight;\r\n\r\n const openLeft = viewportWidth - rect.right < menuWidth;\r\n const left = openLeft ? rect.left - menuWidth + rect.width : rect.left;\r\n\r\n const openUp =\r\n viewportHeight - rect.bottom < menuHeight && rect.top > menuHeight;\r\n const top = openUp ? rect.top - menuHeight - 2 : rect.bottom + 2;\r\n\r\n setMenuPosition({\r\n top: Math.max(8, Math.min(top, viewportHeight - menuHeight - 8)),\r\n left: Math.max(8, Math.min(left, viewportWidth - menuWidth - 8)),\r\n });\r\n\r\n setActiveMenu(activeMenu === itemId ? null : itemId);\r\n };\r\n\r\n const calculateRowNumber = (index) => {\r\n return (currentPage - 1) * pageSize + index + 1;\r\n };\r\n\r\n const openPreview = (image) => {\r\n setTargetImage(image);\r\n setIsOpen(true);\r\n };\r\n\r\n const renderAvatar = (\r\n imageSrc,\r\n imageAlt,\r\n className,\r\n fallback_icon = null,\r\n ) => {\r\n return (\r\n <>\r\n {imageSrc ? (\r\n <img\r\n src={imageSrc}\r\n alt={imageAlt || \"Avatar\"}\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n openPreview({ src: imageSrc, alt: imageAlt });\r\n }}\r\n className={`w-10 h-10 cursor-pointer rounded-full object-cover border border-gray-200 dark:border-gray-700 ${className || \"\"}`}\r\n />\r\n ) : (\r\n <>\r\n {fallback_icon ? (\r\n fallback_icon\r\n ) : (\r\n <div\r\n className={`w-10 h-10 flex items-center justify-center rounded-full border border-gray-300 dark:border-gray-700 bg-gray-200 dark:bg-gray-600 ${className || \"\"}`}\r\n >\r\n <User className=\"w-6 h-6 text-gray-400 dark:text-gray-400\" />\r\n </div>\r\n )}\r\n </>\r\n )}\r\n </>\r\n );\r\n };\r\n\r\n const renderGroupCell = (row, col) => {\r\n return (\r\n <div className={`flex items-center space-x-4 ${col.className || \"\"}`}>\r\n {col.imageKey\r\n ? renderAvatar(row[col.imageKey], row[col.titleKey], \"group-avatar\")\r\n : \"\"}\r\n <div>\r\n <p className=\"font-medium text-gray-900 dark:text-white group-title\">\r\n {row[col.titleKey] || \"\"}\r\n </p>\r\n <p className=\"text-sm text-gray-500 dark:text-gray-400 group-sub-title\">\r\n {row[col.subtitleKey] || \"\"}\r\n </p>\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n const handleRenderChip = (value, col) => {\r\n let label = String(value);\r\n const variant = col.variant || \"contained\";\r\n let color = col.defaultColor;\r\n\r\n if (col?.chipOptions?.length > 0) {\r\n let chipObj = col?.chipOptions.find((obj) => obj.value == value);\r\n if (chipObj) {\r\n label = chipObj.label;\r\n color = chipObj.color;\r\n }\r\n }\r\n\r\n return (\r\n <Chip\r\n label={label}\r\n variant={variant}\r\n color={color}\r\n className={col.className || \"\"}\r\n />\r\n );\r\n };\r\n\r\n const handleRenderCellValue = (col, row, index) => {\r\n const value = row[col.key];\r\n if (col.type === \"menu_actions\") {\r\n return (\r\n <div className={`text-center ${col.className || \"\"}`}>\r\n <button\r\n ref={(el) => (buttonRefs.current[row.id || row._id] = el)}\r\n onClick={(e) =>\r\n handleMenuToggle(row.id || row._id, e, col.menuList)\r\n }\r\n className=\"p-2 bg-gray-100 dark:bg-gray-700 hover:bg-gray-200 dark:hover:bg-gray-600 rounded-full transition text-gray-700 dark:text-gray-300\"\r\n >\r\n <EllipsisVertical className=\"h-4 w-4\" />\r\n </button>\r\n </div>\r\n );\r\n } else if (col.type === \"index\") {\r\n return (\r\n <span className={col.className || \"\"}>{calculateRowNumber(index)}</span>\r\n );\r\n } else if (col.type === \"group\") {\r\n return renderGroupCell(row, col);\r\n } else if (col.type === \"chip\") {\r\n return <>{handleRenderChip(value, col)}</>;\r\n } else if (col.type === \"date\") {\r\n return (\r\n <span className={col.className || \"\"}>\r\n {formatDate(value, col.format || \"DD MMM YYYY\")}\r\n </span>\r\n );\r\n } else if (col.type === \"avatar\") {\r\n return (\r\n <>{renderAvatar(value, col.alt, col.className, col.fallback_icon)}</>\r\n );\r\n } else {\r\n return <span className={col.className || \"\"}>{value || \"N/A\"}</span>;\r\n }\r\n };\r\n\r\n // handle CLick on cell\r\n\r\n const handleColumnClick = (col, row) => {\r\n if (col.onClickDetails) {\r\n return onMenuAction?.(\"view\", row);\r\n }\r\n\r\n if (typeof col.handleClick === \"function\") {\r\n return col.handleClick(row);\r\n }\r\n };\r\n\r\n // Helper to check if column is clickable\r\n const isColumnClickable = (col) =>\r\n col.onClickDetails || typeof col.handleClick === \"function\";\r\n\r\n // Close menu on scroll -------------------\r\n useEffect(() => {\r\n const handleScroll = () => {\r\n if (activeMenu) setActiveMenu(null);\r\n };\r\n\r\n window.addEventListener(\"scroll\", handleScroll, true);\r\n return () => {\r\n window.removeEventListener(\"scroll\", handleScroll, true);\r\n };\r\n }, [activeMenu]);\r\n\r\n useEffect(() => {\r\n const handleClickOutside = (e) => {\r\n if (menuRef.current && !menuRef.current.contains(e.target)) {\r\n setActiveMenu(null);\r\n }\r\n };\r\n document.addEventListener(\"click\", handleClickOutside);\r\n return () => document.removeEventListener(\"click\", handleClickOutside);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (pagination?.rows_per_page && pagination?.useServerSidePagination) {\r\n setPageSize(pagination?.rows_per_page || 50);\r\n }\r\n\r\n if (pagination.current_page) {\r\n setCurrentPage(pagination.current_page);\r\n }\r\n }, [\r\n pagination.rows_per_page,\r\n pagination?.useServerSidePagination,\r\n pagination.current_page,\r\n ]);\r\n\r\n useEffect(() => {\r\n setTotalRecords(\r\n pagination?.useServerSidePagination\r\n ? pagination.total_records\r\n : filteredData.length,\r\n );\r\n\r\n if (\r\n filteredData.length <= pageSize * (currentPage - 1) &&\r\n !pagination?.useServerSidePagination\r\n ) {\r\n setCurrentPage((prev) => prev - 1 || 1);\r\n }\r\n }, [\r\n filteredData.length,\r\n pagination.total_records,\r\n pagination?.useServerSidePagination,\r\n ]);\r\n\r\n if (loading) return <TableSkeleton rows={6} columns={6} />;\r\n\r\n return (\r\n <>\r\n {/* Search Bar */}\r\n <div className=\"flex justify-end items-center mb-4 gap-2\">\r\n {search.enabled && (\r\n <div className=\"\">\r\n <div className=\"relative min-w-[300px]\">\r\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400 dark:text-gray-300\" />\r\n <input\r\n type=\"text\"\r\n placeholder={search.placeholder || \"Search...\"}\r\n value={searchTerm}\r\n onChange={(e) => handleSearchChange(e.target.value)}\r\n className=\"w-full h-[36px] pl-9 pr-4 py-3 text-sm border border-gray-300 dark:border-gray-600 rounded-md bg-gray-50 dark:bg-gray-700 text-gray-900 dark:text-white placeholder-gray-500 dark:placeholder-gray-400 focus:outline-none focus:ring-1 focus:ring-blue-300 dark:ring-blue-200 disabled:opacity-50\"\r\n />\r\n </div>\r\n </div>\r\n )}\r\n\r\n {filterConfig && filter.enabled && (\r\n <Button onClick={() => setShowFilters(true)} variant=\"contained\">\r\n <Filter className=\"w-4 h-4 mr-2\" />\r\n Filters\r\n </Button>\r\n )}\r\n </div>\r\n\r\n {/* =========================== Table =========================== */}\r\n <div className=\"bg-white dark:bg-gray-800 rounded-lg shadow overflow-hidden border border-gray-200 dark:border-gray-700\">\r\n <div className=\"overflow-x-auto\">\r\n <table className=\"min-w-full divide-y divide-gray-200 dark:divide-gray-700\">\r\n <thead className=\"bg-gray-50 dark:bg-gray-700/60\">\r\n <tr>\r\n {table_head.map((col) => (\r\n <th\r\n key={col.key}\r\n className=\"px-6 py-4 text-left text-xs font-medium text-black dark:text-white uppercase tracking-wider min-w-max max-w-[180px] truncate\"\r\n >\r\n {col.title}\r\n </th>\r\n ))}\r\n </tr>\r\n </thead>\r\n\r\n <tbody className=\"bg-white dark:bg-gray-800 divide-y divide-gray-200 dark:divide-gray-700\">\r\n {paginatedData.length === 0 ? (\r\n <tr>\r\n <td\r\n colSpan={table_head.length}\r\n className=\"text-center py-10 text-gray-500 dark:text-gray-400\"\r\n >\r\n {emptyMessage}\r\n </td>\r\n </tr>\r\n ) : (\r\n paginatedData.map((row, index) => (\r\n <tr\r\n key={row.id || row._id || index}\r\n className=\"hover:bg-gray-50 dark:hover:bg-blue-800/10 transition\"\r\n >\r\n {table_head.map((col) => (\r\n <td\r\n key={col.key}\r\n className={`px-6 py-4 text-sm text-gray-900 dark:text-gray-100 min-w-max max-w-[300px] truncate ${\r\n isColumnClickable(col) ? \"cursor-pointer\" : \"\"\r\n }`}\r\n title={String(row[col.key] ?? \"\")}\r\n onClick={() => handleColumnClick(col, row)}\r\n >\r\n {col.render\r\n ? col.render(row, index)\r\n : handleRenderCellValue(col, row, index)}\r\n </td>\r\n ))}\r\n </tr>\r\n ))\r\n )}\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n {pagination?.enabled && filteredData.length > 0 && (\r\n <div className=\" bg-gray-50 dark:bg-gray-700/60 px-6 py-3 flex flex-wrap items-center justify-between border-t border-gray-200 dark:border-gray-600 gap-3\">\r\n <div className=\"text-sm text-gray-700 dark:text-gray-300\">\r\n Showing {(currentPage - 1) * pageSize + 1} to{\" \"}\r\n {Math.min(currentPage * pageSize, totalRecords)} of {totalRecords}{\" \"}\r\n results\r\n </div>\r\n\r\n <div className=\"flex items-center gap-4\">\r\n {/* Rows per page selector */}\r\n <div className=\"flex items-center gap-2\">\r\n <span className=\"text-sm text-gray-700 dark:text-gray-300\">\r\n Rows per page:\r\n </span>\r\n <select\r\n value={pageSize}\r\n onChange={(e) => {\r\n const newLimit = Number(e.target.value);\r\n setPageSize(newLimit);\r\n setCurrentPage(1);\r\n if (pagination.useServerSidePagination) {\r\n setServerSidePaginationData((prev) => ({\r\n ...prev,\r\n current_page: 1,\r\n rows_per_page: newLimit,\r\n }));\r\n }\r\n }}\r\n className=\"border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800 text-sm rounded-md px-2 py-1 focus:outline-none focus:ring-1 focus:ring-blue-500\"\r\n >\r\n {[2, 10, 25, 50, 100].map((n) => (\r\n <option key={n} value={n}>\r\n {n}\r\n </option>\r\n ))}\r\n </select>\r\n </div>\r\n\r\n {/* ============= Pagination ============= */}\r\n <div className=\"flex items-center gap-2\">\r\n <button\r\n onClick={() => {\r\n if (currentPage > 1) {\r\n const newPage = currentPage - 1;\r\n setCurrentPage(newPage);\r\n if (pagination.useServerSidePagination) {\r\n setServerSidePaginationData((prev) => ({\r\n ...prev,\r\n current_page: newPage,\r\n }));\r\n }\r\n }\r\n }}\r\n disabled={currentPage === 1}\r\n className=\"p-2 hover:bg-gray-200 dark:hover:bg-gray-600 rounded-md transition text-gray-500 dark:text-gray-300 disabled:opacity-50\"\r\n >\r\n <ChevronLeft className=\"h-4 w-4\" />\r\n </button>\r\n\r\n <span className=\"text-sm text-gray-800 dark:text-gray-200\">\r\n Page {currentPage} of {totalPages}\r\n </span>\r\n\r\n <button\r\n onClick={() => {\r\n if (currentPage < totalPages) {\r\n const newPage = currentPage + 1;\r\n setCurrentPage(newPage);\r\n if (pagination.useServerSidePagination) {\r\n setServerSidePaginationData((prev) => ({\r\n ...prev,\r\n current_page: newPage,\r\n }));\r\n }\r\n }\r\n }}\r\n disabled={currentPage === totalPages}\r\n className=\"p-2 hover:bg-gray-200 dark:hover:bg-gray-600 rounded-md transition text-gray-500 dark:text-gray-300 disabled:opacity-50\"\r\n >\r\n <ChevronRight className=\"h-4 w-4\" />\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Portal Menu */}\r\n {activeMenu &&\r\n createPortal(\r\n <div\r\n ref={menuRef}\r\n style={{\r\n position: \"fixed\",\r\n top: `${menuPosition.top}px`,\r\n left: `${menuPosition.left}px`,\r\n zIndex: 9999,\r\n }}\r\n className=\"w-48 bg-white dark:bg-gray-700 rounded-md shadow-lg border border-gray-200 dark:border-gray-600\"\r\n >\r\n {menuList.map((action, i) => (\r\n <button\r\n key={i}\r\n onClick={(e) =>\r\n handleActionClick(\r\n action,\r\n data.find(\r\n (d) => d.id === activeMenu || d._id == activeMenu,\r\n ),\r\n e,\r\n )\r\n }\r\n className={`w-full flex items-center gap-2 px-4 py-2 text-sm text-left hover:bg-gray-100 dark:hover:bg-gray-600 ${\r\n action.variant === \"danger\"\r\n ? \"text-red-600 dark:text-red-500\"\r\n : \"text-gray-700 dark:text-gray-200\"\r\n }`}\r\n >\r\n {action.icon && <span className=\"shrink-0\">{action.icon}</span>}\r\n {action.title}\r\n </button>\r\n ))}\r\n </div>,\r\n document.body,\r\n )}\r\n\r\n {/* Filter Drawer */}\r\n {filterConfig && (\r\n <FilterDrawer\r\n isOpen={showFilters}\r\n onClose={() => setShowFilters(false)}\r\n config={filterConfig}\r\n onApply={onFilterApply}\r\n />\r\n )}\r\n\r\n {isOpen && (\r\n <ImagePreview\r\n src={targetImage.src}\r\n alt={targetImage.alt}\r\n isOpen={isOpen}\r\n setIsOpen={setIsOpen}\r\n />\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default Table;\r\n","import React from \"react\";\r\nimport { X } from \"lucide-react\";\r\nimport Button from \"../Button/Button\";\r\n\r\nconst Modal = ({\r\n isOpen,\r\n onClose,\r\n icon,\r\n title,\r\n children,\r\n size = \"md\",\r\n actionButtons = [],\r\n actions,\r\n showDefaultClose = true,\r\n footerConfig = null,\r\n hideFooter = false,\r\n onFormSubmit = () => {},\r\n onCancel,\r\n loadingBtn = false,\r\n executeFunction = () => {},\r\n selectedItem = null,\r\n}) => {\r\n if (!isOpen) return null;\r\n\r\n // Size classes\r\n const sizeClasses = {\r\n sm: \"max-w-md\",\r\n md: \"max-w-lg\",\r\n lg: \"max-w-2xl\",\r\n xl: \"max-w-4xl\",\r\n full: \"max-w-full\",\r\n };\r\n\r\n return (\r\n <div className=\"fixed inset-0 z-50 flex items-center justify-center p-4\">\r\n {/* Backdrop */}\r\n <div\r\n className=\"fixed inset-0 bg-gray-500 opacity-75\"\r\n onClick={() => onClose()}\r\n ></div>\r\n\r\n {/* Modal container */}\r\n <div\r\n className={`relative bg-white rounded-lg shadow-xl w-full ${\r\n sizeClasses[size] || sizeClasses.md\r\n } max-h-[90vh] flex flex-col dark:bg-gray-800`}\r\n >\r\n {/* Header */}\r\n <div className=\"flex items-center justify-between p-4 border-b border-gray-200 dark:border-gray-700 flex-shrink-0\">\r\n <div className=\"flex items-center gap-1\">\r\n {icon && <span>{icon}</span>}\r\n <h3 className=\"text-lg font-medium text-gray-900 dark:text-white\">\r\n {title}\r\n </h3>\r\n </div>\r\n\r\n <button\r\n onClick={() => onClose()}\r\n className=\"text-gray-400 hover:text-gray-600 dark:hover:text-gray-300\"\r\n >\r\n <X className=\"w-6 h-6\" />\r\n </button>\r\n </div>\r\n\r\n {/* Content */}\r\n <div className=\"flex-1 overflow-y-auto p-4\">{children}</div>\r\n\r\n {/* Footer */}\r\n {/* {!hideFooter && (actions || footerConfig || showDefaultClose) && (\r\n <div className=\"px-4 py-3 flex justify-end gap-3 border-t border-gray-200 dark:border-gray-700 sm:px-6\">\r\n {actions}\r\n\r\n {footerConfig && (\r\n <>\r\n {footerConfig.cancelButton && (\r\n <Button\r\n onClick={() => (onCancel() || onClose())}\r\n disabled={loadingBtn}\r\n variant=\"contained\"\r\n color=\"default\"\r\n >\r\n {footerConfig.cancelText || \"Cancel\"}\r\n </Button>\r\n )}\r\n\r\n {footerConfig.submitButton && (\r\n <Button\r\n onClick={onFormSubmit}\r\n disabled={loadingBtn}\r\n variant=\"contained\"\r\n color={footerConfig.color || \"primary\"}\r\n className=\"min-w-[100px]\"\r\n >\r\n {loadingBtn ? (\r\n <div className=\"flex items-center\">\r\n <div className=\"animate-spin rounded-full h-4 w-4 border-2 border-white/30 border-t-2 border-t-white mr-2\"></div>\r\n {footerConfig.submitText || \"Submit\"}...\r\n </div>\r\n ) : (\r\n footerConfig.submitText || \"Submit\"\r\n )}\r\n </Button>\r\n )}\r\n </>\r\n )}\r\n\r\n {showDefaultClose && !actions && !footerConfig && (\r\n <Button onClick={() => onClose()} variant=\"outlined\">\r\n Close\r\n </Button>\r\n )}\r\n </div>\r\n )} */}\r\n\r\n {actionButtons.length > 0 && (\r\n <div className=\"px-4 py-3 flex justify-end gap-3 border-t border-gray-200 dark:border-gray-700 sm:px-6\">\r\n {actionButtons.map((btn) => (\r\n <Button\r\n onClick={(e) => {\r\n if (btn.type == \"submit\") {\r\n onFormSubmit(e);\r\n } else {\r\n executeFunction(\r\n () => btn?.onClick?.(e, selectedItem),\r\n (resp) => onClose?.(resp),\r\n );\r\n }\r\n }}\r\n disabled={loadingBtn || btn.disabled}\r\n variant={btn.variant || \"contained\"}\r\n color={btn.color || \"primary\"}\r\n className={`min-w-[100px] ${btn.className}`}\r\n type={btn.type || \"button\"}\r\n >\r\n {loadingBtn ? (\r\n <div className=\"flex items-center\">\r\n <div className=\"animate-spin rounded-full h-4 w-4 border-2 border-white/30 border-t-2 border-t-white mr-2\"></div>\r\n {btn.label || \"Submit\"}...\r\n </div>\r\n ) : (\r\n btn.label || \"Submit\"\r\n )}\r\n </Button>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default Modal;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport RenderFields from \"./components/RenderFields\";\r\n\r\nconst Form = ({ config, onSubmit, initialData = {} }) => {\r\n const { formClass = \"grid grid-cols-12 gap-4\", formFields = [] } =\r\n config || {};\r\n\r\n const [formData, setFormData] = useState(initialData);\r\n\r\n useEffect(() => {\r\n setFormData(initialData);\r\n }, []);\r\n\r\n const handleChange = (key, value) => {\r\n setFormData((prev) => ({ ...prev, [key]: value }));\r\n };\r\n\r\n const handleSubmit = (e) => {\r\n e.preventDefault();\r\n const form = e.target;\r\n\r\n if (!form.checkValidity()) {\r\n form.reportValidity();\r\n return;\r\n }\r\n\r\n onSubmit(formData);\r\n };\r\n\r\n return (\r\n <form\r\n id={config.title?.toLowerCase().includes(\"edit\") ? \"editForm\" : \"addForm\"}\r\n onSubmit={handleSubmit}\r\n className={formClass}\r\n noValidate={false} // enables native validation\r\n >\r\n {formFields.map((field) => (\r\n <>\r\n <RenderFields\r\n key={field.key}\r\n field={field}\r\n formData={formData}\r\n handleChange={handleChange}\r\n />\r\n </>\r\n ))}\r\n </form>\r\n );\r\n};\r\n\r\nexport default Form;\r\n","import { User } from \"lucide-react\";\r\nimport React, { useState } from \"react\";\r\nimport Chip from \"../Chip/Chip\";\r\nimport { formatDate } from \"../../lib/utils\";\r\nimport ImagePreview from \"../Table/components/ImagePreview\";\r\n\r\nexport default function Details({ data, config }) {\r\n const { fields, containerClass } = config;\r\n\r\n // image preview\r\n const [targetImage, setTargetImage] = useState(null);\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const openPreview = (image) => {\r\n setTargetImage(image);\r\n setIsOpen(true);\r\n };\r\n\r\n const DetailRow = ({ col }) => {\r\n let Icon = col?.icon;\r\n let label = col.label;\r\n let value = data[col.key];\r\n let type = col.type;\r\n let variant = col.variant || \"outline\";\r\n let color = col.defaultColor;\r\n\r\n if (type == \"chip\" && col.chipOptions.length > 0) {\r\n let chipObj = col?.chipOptions.find((obj) => obj.value == value);\r\n if (chipObj) {\r\n value = chipObj.label;\r\n color = chipObj.color;\r\n }\r\n }\r\n\r\n return (\r\n <div\r\n className={`col-span-12 flex items-center space-x-4 p-4 rounded-xl \r\n bg-gray-100 dark:bg-gray-900 ${col.blockClass}`}\r\n >\r\n {Icon && <div className=\"flex-shrink-0\">{Icon}</div>}\r\n <div className=\"flex-1 min-w-0\">\r\n <p className=\"text-sm font-medium text-gray-500 dark:text-gray-400\">\r\n {label}\r\n </p>\r\n {type == \"chip\" ? (\r\n <>\r\n <Chip\r\n label={value}\r\n variant={variant}\r\n color={color}\r\n className=\"mt-1\"\r\n />\r\n </>\r\n ) : type == \"tinyEditor\" ? (\r\n <p\r\n className=\"mt-1 text-sm text-gray-900 dark:text-white break-words\"\r\n dangerouslySetInnerHTML={{\r\n __html: value,\r\n }}\r\n ></p>\r\n ) : (\r\n <p className=\"mt-1 text-sm text-gray-900 dark:text-white break-words\">\r\n {type == \"date\" ? (\r\n <span>{formatDate(value, col.format || \"DD MMM YYYY\")}</span>\r\n ) : (\r\n value || \"N/A\"\r\n )}\r\n </p>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n const GroupRow = ({ col }) => {\r\n let title = data[col.titleKey];\r\n let subtitle = data[col.subtitleKey];\r\n let image = data[col.imageKey];\r\n let fallback_icon = data[col.fallback_icon];\r\n\r\n return (\r\n <div\r\n className={`col-span-12 flex items-center space-x-4 p-4 rounded-xl \r\n bg-gray-100 dark:bg-gray-900 \r\n ${col.blockClass}`}\r\n >\r\n {image ? (\r\n <img\r\n src={image}\r\n alt={title}\r\n onClick={() => openPreview({ src: image, alt: title })}\r\n className=\"w-16 h-16 cursor-pointer rounded-full object-cover border-2 border-gray-200 dark:border-gray-700\"\r\n />\r\n ) : fallback_icon ? (\r\n fallback_icon\r\n ) : (\r\n <div className=\"w-16 h-16 flex items-center justify-center rounded-full border-2 border-gray-300 dark:border-gray-700 bg-gray-200 dark:bg-gray-600\">\r\n <User className=\"w-8 h-8 text-gray-400\" />\r\n </div>\r\n )}\r\n\r\n <div>\r\n <h3 className=\"text-xl font-semibold text-gray-900 dark:text-white\">\r\n {title}\r\n </h3>\r\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">{subtitle}</p>\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n return (\r\n <>\r\n {isOpen && (\r\n <ImagePreview\r\n src={targetImage.src}\r\n alt={targetImage.alt}\r\n isOpen={isOpen}\r\n setIsOpen={setIsOpen}\r\n />\r\n )}\r\n\r\n <div className={`grid grid-cols-12 gap-4 ${containerClass || \"\"}`}>\r\n {fields.map((col) =>\r\n col.type == \"group\" ? (\r\n <GroupRow col={col} />\r\n ) : (\r\n <DetailRow col={col} />\r\n ),\r\n )}\r\n </div>\r\n </>\r\n );\r\n}\r\n","import React, { useEffect, useMemo, useState } from \"react\";\r\nimport { Plus, X } from \"lucide-react\";\r\nimport Table from \"./Table/Table\";\r\nimport Modal from \"./Modal/Modal\";\r\nimport Form from \"./Form/Form\";\r\nimport Button from \"./Button/Button\";\r\nimport { Icon } from \"@iconify/react\";\r\nimport { enqueueSnackbar } from \"notistack\";\r\nimport Details from \"./Details/Details\";\r\nimport PropTypes from \"prop-types\";\r\nimport { SnackbarProvider } from \"notistack\";\r\n\r\nconst CrudPage = ({ config }) => {\r\n const {\r\n title,\r\n fetchData = async () => {},\r\n isStaticData = false,\r\n tableConfig = {},\r\n modalConfig = {},\r\n filterConfig,\r\n } = config;\r\n\r\n const [loading, setLoading] = useState(true);\r\n const [formLoading, setFormLoading] = useState(false);\r\n\r\n const [listingData, setListingData] = useState([]);\r\n const [paginationData, setPaginationData] = useState(null);\r\n const [serverSidePaginationData, setServerSidePaginationData] = useState({\r\n search: \"\",\r\n rows_per_page: 50,\r\n current_page: 1,\r\n });\r\n const [filterData, setFilterData] = useState({});\r\n const [changeFilterData, setChangeFilterData] = useState(false);\r\n\r\n const [showAdd, setShowAdd] = useState(false);\r\n const [showEdit, setShowEdit] = useState(false);\r\n const [showDelete, setShowDelete] = useState(false);\r\n const [showView, setShowView] = useState(false);\r\n const [selectedItem, setSelectedItem] = useState(null);\r\n\r\n const handleMenuAction = (action, item) => {\r\n if (action === \"edit\") {\r\n setSelectedItem(item);\r\n setShowEdit(true);\r\n } else if (action === \"view\") {\r\n setSelectedItem(item);\r\n setShowView(true);\r\n } else if (action === \"delete\") {\r\n setSelectedItem(item);\r\n setShowDelete(true);\r\n }\r\n };\r\n\r\n const executeAction = async (\r\n action,\r\n onSuccess,\r\n success_message = \"\",\r\n error_message = \"\",\r\n ) => {\r\n setFormLoading(true);\r\n\r\n try {\r\n const resp = await action?.();\r\n if (success_message || resp.message) {\r\n enqueueSnackbar(success_message || resp.message, {\r\n variant: \"success\",\r\n });\r\n }\r\n onSuccess?.(resp);\r\n } catch (error) {\r\n if (error_message || error.message) {\r\n enqueueSnackbar(error_message || error.message, { variant: \"error\" });\r\n }\r\n } finally {\r\n setFormLoading(false);\r\n }\r\n };\r\n\r\n const handleAddResult = (resp) => {\r\n let newObj = resp.newObject;\r\n if (isStaticData) {\r\n setListingData((prev) => [newObj, ...prev]);\r\n setPaginationData((prev) => ({\r\n ...prev,\r\n current_page: 1,\r\n }));\r\n } else {\r\n setServerSidePaginationData((prev) => ({\r\n ...prev,\r\n current_page: 1,\r\n }));\r\n if (serverSidePaginationData.current_page == 1) {\r\n handleGetListing();\r\n }\r\n }\r\n setShowAdd(false);\r\n };\r\n\r\n const handleEditResult = (resp) => {\r\n let updatedObj = resp.newObject;\r\n let targetObj = resp.targetObject;\r\n if (isStaticData) {\r\n setListingData((prev) =>\r\n prev.map((item) =>\r\n item.id === targetObj.id ? { ...item, ...updatedObj } : item,\r\n ),\r\n );\r\n } else {\r\n handleGetListing();\r\n }\r\n setShowEdit(false);\r\n };\r\n\r\n const handleDeleteResult = (resp) => {\r\n if (!resp) {\r\n setShowDelete(false);\r\n setSelectedItem(null);\r\n return;\r\n }\r\n\r\n if (isStaticData) {\r\n setListingData((prev) =>\r\n prev.filter((item) => item.id !== resp.targetObject.id),\r\n );\r\n } else {\r\n if (\r\n listingData.length == 1 &&\r\n serverSidePaginationData.current_page > 1\r\n ) {\r\n setServerSidePaginationData((prev) => ({\r\n ...prev,\r\n current_page: prev.current_page - 1,\r\n }));\r\n } else {\r\n handleGetListing();\r\n }\r\n }\r\n setShowDelete(false);\r\n setSelectedItem(null);\r\n };\r\n\r\n const handleAddFormSubmit = (formData) =>\r\n executeAction(\r\n () => modalConfig?.addModal?.handleSubmit?.(formData),\r\n handleAddResult,\r\n );\r\n\r\n const handleEditFormSubmit = (formData) =>\r\n executeAction(\r\n () => modalConfig?.editModal?.handleSubmit?.(formData, selectedItem),\r\n handleEditResult,\r\n );\r\n\r\n const handleDeleteConfirm = () =>\r\n executeAction(\r\n () => modalConfig?.deleteModal?.action?.(selectedItem),\r\n handleDeleteResult,\r\n );\r\n\r\n const handleGetListing = async () => {\r\n setLoading(true);\r\n\r\n fetchData?.({ ...serverSidePaginationData, ...filterData })\r\n .then((resp) => {\r\n setListingData(resp.data);\r\n setPaginationData(resp.pagination);\r\n })\r\n .catch((error) => {\r\n enqueueSnackbar(error.message, { variant: \"error\" });\r\n })\r\n .finally(() => {\r\n setLoading(false);\r\n });\r\n };\r\n\r\n const handleFilterData = (data) => {\r\n setFilterData((prev) => ({\r\n ...data,\r\n }));\r\n if (tableConfig?.filter?.useServerSideFilters) {\r\n setChangeFilterData((prev) => !prev);\r\n }\r\n };\r\n\r\n const filterByMatchingFields = (data, filters) => {\r\n return data.filter((item) =>\r\n Object.entries(filters).every(([key, value]) => item[key] === value),\r\n );\r\n };\r\n\r\n const filteredData = useMemo(() => {\r\n if (tableConfig?.filter?.useServerSideFilters) return listingData;\r\n return filterByMatchingFields(listingData, filterData);\r\n }, [listingData, filterData]);\r\n\r\n useEffect(() => {\r\n handleGetListing();\r\n }, [\r\n serverSidePaginationData.search,\r\n serverSidePaginationData.rows_per_page,\r\n serverSidePaginationData.current_page,\r\n changeFilterData,\r\n ]);\r\n\r\n return (\r\n <SnackbarProvider\r\n maxSnack={3}\r\n anchorOrigin={{\r\n vertical: \"bottom\",\r\n horizontal: \"right\",\r\n }}\r\n autoHideDuration={3000}\r\n action={(snackbarKey) => (\r\n <button\r\n onClick={() => {\r\n window.dispatchEvent(\r\n new CustomEvent(\"closeSnackbar\", { detail: snackbarKey }),\r\n );\r\n }}\r\n className=\"p-1 hover:bg-white/20 rounded-full transition-colors duration-200 text-white flex items-center justify-center\"\r\n >\r\n <X className=\"h-4 w-4\" />\r\n </button>\r\n )}\r\n >\r\n <div>\r\n {/* Header */}\r\n <div className=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 mb-3\">\r\n <div>\r\n <h1 className=\"text-2xl font-bold text-gray-900 dark:text-white\">\r\n {title}\r\n </h1>\r\n <p className=\"text-md text-gray-600 dark:text-gray-400\">\r\n {config?.description}\r\n </p>\r\n </div>\r\n <div className=\"flex items-center space-x-3\">\r\n <Button\r\n onClick={() => setShowAdd(true)}\r\n variant=\"contained\"\r\n color=\"primary\"\r\n >\r\n <Plus className=\"w-4 h-4 mr-2\" />\r\n {config.buttonText || \"Add New\"}\r\n </Button>\r\n </div>\r\n </div>\r\n\r\n {/* Table */}\r\n <Table\r\n config={{\r\n ...tableConfig,\r\n pagination: {\r\n ...tableConfig.pagination,\r\n ...paginationData,\r\n },\r\n data: filteredData,\r\n setServerSidePaginationData: setServerSidePaginationData,\r\n onMenuAction: handleMenuAction,\r\n filterConfig,\r\n onFilterApply: handleFilterData,\r\n loading,\r\n }}\r\n />\r\n\r\n {/* Add Modal */}\r\n <Modal\r\n isOpen={showAdd}\r\n onClose={() => setShowAdd(false)}\r\n icon={modalConfig.addModal?.icon}\r\n title={modalConfig.addModal?.title || \"Add New\"}\r\n size={modalConfig.addModal?.size || \"md\"}\r\n onFormSubmit={() =>\r\n document.querySelector(\"#addForm\")?.requestSubmit()\r\n }\r\n loadingBtn={formLoading}\r\n actionButtons={modalConfig.addModal.actionButtons}\r\n >\r\n <Form\r\n config={modalConfig?.addModal || []}\r\n onSubmit={handleAddFormSubmit}\r\n initialData={{}}\r\n loading={formLoading}\r\n />\r\n </Modal>\r\n\r\n {/* Edit Modal */}\r\n <Modal\r\n isOpen={showEdit}\r\n onClose={() => setShowEdit(false)}\r\n icon={modalConfig.editModal?.icon}\r\n title={modalConfig.editModal?.title || \"Edit\"}\r\n size={modalConfig.editModal?.size || \"md\"}\r\n onFormSubmit={() =>\r\n document.querySelector(\"#editForm\")?.requestSubmit()\r\n }\r\n actionButtons={modalConfig.editModal.actionButtons}\r\n loadingBtn={formLoading}\r\n >\r\n <Form\r\n config={modalConfig.editModal || []}\r\n onSubmit={handleEditFormSubmit}\r\n initialData={selectedItem}\r\n loading={formLoading}\r\n />\r\n </Modal>\r\n\r\n {/* Delete Modal */}\r\n {showDelete && (\r\n <Modal\r\n isOpen={showDelete}\r\n onClose={(resp) => {\r\n handleDeleteResult(resp);\r\n }}\r\n icon={\r\n modalConfig.deleteModal?.icon || (\r\n <Icon icon=\"ph:warning-bold\" className=\"w-6 h-6 text-red-500\" />\r\n )\r\n }\r\n title={modalConfig.deleteModal?.title || \"Confirm Delete\"}\r\n size={modalConfig.deleteModal?.size || \"md\"}\r\n loading={formLoading}\r\n actionButtons={modalConfig.deleteModal.actionButtons}\r\n executeFunction={executeAction}\r\n selectedItem={selectedItem}\r\n >\r\n <div className=\"flex items-center space-x-2 py-3\">\r\n <div>\r\n <p className=\"text-md text-gray-700 dark:text-white\">\r\n {modalConfig.deleteModal?.confirmText ||\r\n \"Are you sure you want to delete this item?\"}\r\n </p>\r\n {modalConfig.deleteModal?.referenceKey && (\r\n <p className=\"text-md font-semibold text-gray-700 dark:text-white\">\r\n {selectedItem[modalConfig.deleteModal?.referenceKey]}\r\n </p>\r\n )}\r\n </div>\r\n </div>\r\n </Modal>\r\n )}\r\n\r\n {/* View Detail Modal */}\r\n {modalConfig.viewModal && (\r\n <Modal\r\n isOpen={showView}\r\n onClose={() => {\r\n setShowView(false);\r\n setSelectedItem(null);\r\n }}\r\n icon={modalConfig.viewModal?.icon}\r\n title={modalConfig.viewModal?.title || \"View Details\"}\r\n size={modalConfig.viewModal?.size || \"lg\"}\r\n footerConfig={modalConfig?.viewModal.footer}\r\n >\r\n {modalConfig.viewModal?.component ? (\r\n <modalConfig.viewModal.component data={selectedItem} />\r\n ) : (\r\n <Details\r\n data={selectedItem}\r\n config={modalConfig.viewModal || {}}\r\n />\r\n )}\r\n </Modal>\r\n )}\r\n </div>\r\n </SnackbarProvider>\r\n );\r\n};\r\n\r\nconst optionType = PropTypes.shape({\r\n value: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.number,\r\n PropTypes.bool,\r\n ]).isRequired,\r\n label: PropTypes.string.isRequired,\r\n color: PropTypes.string,\r\n});\r\n\r\nconst actionButtonType = PropTypes.shape({\r\n type: PropTypes.string.isRequired,\r\n label: PropTypes.string.isRequired,\r\n color: PropTypes.string,\r\n variant: PropTypes.string,\r\n onClick: PropTypes.func,\r\n});\r\n\r\nconst menuActionType = PropTypes.shape({\r\n title: PropTypes.string.isRequired,\r\n type: PropTypes.string.isRequired,\r\n variant: PropTypes.string,\r\n icon: PropTypes.node,\r\n});\r\n\r\nconst tableHeadType = PropTypes.shape({\r\n key: PropTypes.string.isRequired,\r\n title: PropTypes.string,\r\n type: PropTypes.string,\r\n imageKey: PropTypes.string,\r\n titleKey: PropTypes.string,\r\n subtitleKey: PropTypes.string,\r\n onClickDetails: PropTypes.bool,\r\n variant: PropTypes.string,\r\n chipOptions: PropTypes.arrayOf(optionType),\r\n defaultColor: PropTypes.string,\r\n className: PropTypes.string,\r\n format: PropTypes.string,\r\n menuList: PropTypes.arrayOf(menuActionType),\r\n});\r\n\r\nconst formFieldType = PropTypes.shape({\r\n key: PropTypes.string.isRequired,\r\n label: PropTypes.string,\r\n type: PropTypes.string.isRequired,\r\n required: PropTypes.bool,\r\n minLength: PropTypes.number,\r\n parentClass: PropTypes.string,\r\n search: PropTypes.bool,\r\n multiple: PropTypes.bool,\r\n dropdownMaxHeight: PropTypes.string,\r\n dragDrop: PropTypes.bool,\r\n countriesList: PropTypes.bool,\r\n defaultCountry: PropTypes.string,\r\n placeholder: PropTypes.string,\r\n rows: PropTypes.number,\r\n text: PropTypes.string,\r\n editorKey: PropTypes.string,\r\n options: PropTypes.arrayOf(optionType),\r\n});\r\n\r\nconst viewFieldType = PropTypes.shape({\r\n key: PropTypes.string,\r\n label: PropTypes.string,\r\n type: PropTypes.string,\r\n imageKey: PropTypes.string,\r\n titleKey: PropTypes.string,\r\n subtitleKey: PropTypes.string,\r\n blockClass: PropTypes.string,\r\n icon: PropTypes.node,\r\n variant: PropTypes.string,\r\n chipOptions: PropTypes.arrayOf(optionType),\r\n defaultColor: PropTypes.string,\r\n className: PropTypes.string,\r\n format: PropTypes.string,\r\n});\r\n\r\nCrudPage.propTypes = {\r\n config: PropTypes.shape({\r\n title: PropTypes.string.isRequired,\r\n description: PropTypes.string,\r\n buttonText: PropTypes.string,\r\n fetchData: PropTypes.func.isRequired,\r\n isStaticData: PropTypes.bool,\r\n\r\n /* ================= TABLE CONFIG ================= */\r\n\r\n tableConfig: PropTypes.shape({\r\n table_head: PropTypes.arrayOf(tableHeadType).isRequired,\r\n\r\n search: PropTypes.shape({\r\n enabled: PropTypes.bool,\r\n useServerSideSearch: PropTypes.bool,\r\n searchKeys: PropTypes.arrayOf(PropTypes.string),\r\n }),\r\n\r\n pagination: PropTypes.shape({\r\n enabled: PropTypes.bool,\r\n useServerSidePagination: PropTypes.bool,\r\n }),\r\n\r\n filter: PropTypes.shape({\r\n enabled: PropTypes.bool,\r\n useServerSideFilters: PropTypes.bool,\r\n }),\r\n }).isRequired,\r\n\r\n /* ================= MODAL CONFIG ================= */\r\n\r\n modalConfig: PropTypes.shape({\r\n addModal: PropTypes.shape({\r\n title: PropTypes.string.isRequired,\r\n size: PropTypes.string,\r\n formClass: PropTypes.string,\r\n formFields: PropTypes.arrayOf(formFieldType),\r\n handleSubmit: PropTypes.func.isRequired,\r\n actionButtons: PropTypes.arrayOf(actionButtonType),\r\n }),\r\n\r\n editModal: PropTypes.shape({\r\n title: PropTypes.string.isRequired,\r\n size: PropTypes.string,\r\n formClass: PropTypes.string,\r\n formFields: PropTypes.arrayOf(formFieldType),\r\n handleSubmit: PropTypes.func.isRequired,\r\n actionButtons: PropTypes.arrayOf(actionButtonType),\r\n }),\r\n\r\n deleteModal: PropTypes.shape({\r\n title: PropTypes.string.isRequired,\r\n size: PropTypes.string,\r\n confirmText: PropTypes.string,\r\n referenceKey: PropTypes.string,\r\n actionButtons: PropTypes.arrayOf(actionButtonType),\r\n }),\r\n\r\n viewModal: PropTypes.shape({\r\n title: PropTypes.string.isRequired,\r\n size: PropTypes.string,\r\n\r\n // 👇 This covers your commented code:\r\n component: PropTypes.elementType, // for custom component like TeamMemberDetail\r\n\r\n fields: PropTypes.arrayOf(viewFieldType),\r\n\r\n footer: PropTypes.shape({\r\n cancelButton: PropTypes.bool,\r\n cancelText: PropTypes.string,\r\n }),\r\n }),\r\n }),\r\n\r\n /* ================= FILTER CONFIG ================= */\r\n\r\n filterConfig: PropTypes.shape({\r\n fields: PropTypes.arrayOf(formFieldType),\r\n }),\r\n }).isRequired,\r\n};\r\n\r\nexport default CrudPage;\r\n","import React from \"react\";\r\nimport CrudPage from \"./components/CrudPage\";\r\nimport \"./index.css\";\r\n\r\nexport default function Crud(props) {\r\n return (\r\n <>\r\n <CrudPage config={props.config} />\r\n </>\r\n );\r\n}\r\n"],"names":["formatDate","dateString","format","date","pad","n","map","token","searchLocalData","data","searchTerm","searchKeys","lowerSearchTerm","extractValues","obj","item","valuesToSearch","key","val","Button","React","className","variant","color","size","fullWidth","children","props","ref","baseStyles","sizes","colorVariants","colorStyles","_a","sizeStyles","combinedClassName","jsx","InputLabel","label","required","Fragment","jsxs","Select","options","value","onChange","placeholder","disabled","search","name","parentClass","multiple","dropdownMaxHeight","open","setOpen","useState","setSearchTerm","showAboveState","setShowAboveState","dropdownRef","useRef","searchInputRef","normalize","normalizedValue","filteredOptions","option","isSelected","optionValue","normalized","useEffect","handleClickOutside","event","rect","spaceBelow","handleOptionClick","finalValue","exists","newValues","v","selectedLabels","opt","ChevronDown","Search","e","Check","Switch","text","radioOptions","idx","countries","PhoneInput","countriesList","defaultCountry","find_country_with_code","selectedCountry","setSelectedCountry","fullNumber","setFullNumber","match","c","a","b","handleNumberChange","input","handleCountrySelect","country","filteredCountries","formatted","TextArea","ImagePicker","accept","id","dragDrop","image","setImage","isDragging","setIsDragging","inputRef","handleFileChange","files","file","preview","Icon","Input","type","onKeyDown","negativeNumberAllow","showPassword","setShowPassword","handleKeyDown","prev","TinyEditor","editorKey","height","inline","plugins","toolbar","menubar","fontFamily","initConfig","imageUploadHandler","Editor","blobInfo","resolve","reject","url","error","content","Checkbox","multiSelect","isChecked","handleSingleChange","handleMultipleChange","checked","newValue","index","RenderFields","field","formData","handleChange","rows","inputClass","minLength","finalPlaceholder","baseClass","imgObj","FilterDrawer","isOpen","onClose","config","onApply","filters","setFilters","handleApply","handleReset","X","BADGE_COLORS","BADGE_VARIANTS","Chip","colorConfig","variantKey","variantClasses","TableSkeleton","columns","_","rowIndex","colIndex","ImagePreview","src","alt","setIsOpen","closePreview","handleEsc","Table","table_head","loading","filter","pagination","emptyMessage","onMenuAction","setServerSidePaginationData","onFilterApply","filterConfig","activeMenu","setActiveMenu","menuList","setMenuList","menuPosition","setMenuPosition","showFilters","setShowFilters","targetImage","setTargetImage","filteredData","useMemo","currentPage","setCurrentPage","pageSize","setPageSize","totalRecords","setTotalRecords","totalPages","paginatedData","start","menuRef","buttonRefs","searchTimeoutRef","handleSearchChange","handleActionClick","action","handleMenuToggle","itemId","menu_list","button","menuWidth","menuHeight","viewportWidth","viewportHeight","left","top","calculateRowNumber","openPreview","renderAvatar","imageSrc","imageAlt","fallback_icon","User","renderGroupCell","row","col","handleRenderChip","chipObj","handleRenderCellValue","el","EllipsisVertical","handleColumnClick","isColumnClickable","handleScroll","Filter","newLimit","newPage","ChevronLeft","ChevronRight","createPortal","i","d","Modal","icon","title","actionButtons","actions","showDefaultClose","footerConfig","hideFooter","onFormSubmit","onCancel","loadingBtn","executeFunction","selectedItem","sizeClasses","btn","resp","Form","onSubmit","initialData","formClass","formFields","setFormData","handleSubmit","form","Details","fields","containerClass","DetailRow","GroupRow","subtitle","CrudPage","fetchData","isStaticData","tableConfig","modalConfig","setLoading","formLoading","setFormLoading","listingData","setListingData","paginationData","setPaginationData","serverSidePaginationData","filterData","setFilterData","changeFilterData","setChangeFilterData","showAdd","setShowAdd","showEdit","setShowEdit","showDelete","setShowDelete","showView","setShowView","setSelectedItem","handleMenuAction","executeAction","onSuccess","success_message","error_message","enqueueSnackbar","handleAddResult","newObj","handleGetListing","handleEditResult","updatedObj","targetObj","handleDeleteResult","handleAddFormSubmit","_b","handleEditFormSubmit","handleFilterData","filterByMatchingFields","SnackbarProvider","snackbarKey","Plus","_c","_d","_e","_f","_g","_h","_i","_j","_k","_l","_m","_n","_o","_p","optionType","PropTypes","actionButtonType","menuActionType","tableHeadType","formFieldType","viewFieldType","Crud"],"mappings":"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"}
1
+ {"version":3,"file":"index.es.js","sources":["../src/lib/utils.js","../src/components/Button/Button.jsx","../src/components/Form/components/InputLabel.jsx","../src/components/Form/components/Select.jsx","../src/components/Form/components/Switch.jsx","../src/data/countries.js","../src/components/Form/components/PhoneInput.jsx","../src/components/Form/components/TextArea.jsx","../src/components/Form/components/ImagePicker.jsx","../src/components/Form/components/Input.jsx","../src/components/Form/components/TinyEditor.jsx","../src/components/Form/components/Checkbox.jsx","../src/components/Form/components/AudioPicker.jsx","../src/components/Form/components/RenderFields.jsx","../src/components/Filter/FilterDrawer.jsx","../src/components/Chip/Chip.jsx","../src/components/Table/components/TableSkeleton.jsx","../src/components/Table/components/ImagePreview.jsx","../src/components/Table/Table.jsx","../src/components/Modal/Modal.jsx","../src/components/Form/Form.jsx","../src/components/Details/Details.jsx","../src/components/CrudPage.jsx","../src/index.jsx"],"sourcesContent":["// ======= Format Date : Jan 15, 2024 =======\r\n\r\nexport const formatDate = (dateString, format = \"DD MMM YYYY\") => {\r\n if (!dateString) return \"N/A\";\r\n\r\n const date = new Date(dateString);\r\n if (isNaN(date)) return \"Invalid Date\";\r\n\r\n const pad = (n) => String(n).padStart(2, \"0\");\r\n\r\n const map = {\r\n YYYY: date.getFullYear(),\r\n YY: String(date.getFullYear()).slice(-2),\r\n\r\n MMMM: date.toLocaleString(\"en-US\", { month: \"long\" }),\r\n MMM: date.toLocaleString(\"en-US\", { month: \"short\" }),\r\n MM: pad(date.getMonth() + 1),\r\n M: date.getMonth() + 1,\r\n\r\n DD: pad(date.getDate()),\r\n D: date.getDate(),\r\n\r\n dddd: date.toLocaleString(\"en-US\", { weekday: \"long\" }),\r\n ddd: date.toLocaleString(\"en-US\", { weekday: \"short\" }),\r\n\r\n HH: pad(date.getHours()),\r\n hh: pad(date.getHours() % 12 || 12),\r\n\r\n mm: pad(date.getMinutes()),\r\n ss: pad(date.getSeconds()),\r\n\r\n A: date.getHours() >= 12 ? \"PM\" : \"AM\",\r\n };\r\n\r\n return format.replace(\r\n /YYYY|YY|MMMM|MMM|MM|M|DD|D|dddd|ddd|HH|hh|mm|ss|A/g,\r\n (token) => map[token],\r\n );\r\n};\r\n\r\n// =========== Local Search function ===========\r\nexport const searchLocalData = (data, searchTerm, searchKeys = []) => {\r\n if (!searchTerm?.trim()) return data;\r\n\r\n const lowerSearchTerm = searchTerm.toLowerCase();\r\n\r\n const extractValues = (obj) => {\r\n if (obj == null) return [];\r\n if (typeof obj === \"object\") {\r\n return Object.values(obj).flatMap(extractValues);\r\n }\r\n return [String(obj)];\r\n };\r\n\r\n return data.filter((item) => {\r\n let valuesToSearch = [];\r\n\r\n // ✅ If specific keys are provided → search only in those keys\r\n if (searchKeys.length > 0) {\r\n searchKeys.forEach((key) => {\r\n if (item[key] !== undefined) {\r\n valuesToSearch.push(...extractValues(item[key]));\r\n }\r\n });\r\n } else {\r\n // ✅ Otherwise → search in entire object\r\n valuesToSearch = extractValues(item);\r\n }\r\n\r\n return valuesToSearch.some((val) =>\r\n val.toLowerCase().includes(lowerSearchTerm),\r\n );\r\n });\r\n};\r\n","import React from \"react\";\r\n\r\nconst Button = React.forwardRef(\r\n (\r\n {\r\n className = \"\",\r\n variant = \"contained\",\r\n color = \"default\",\r\n size = \"default\",\r\n fullWidth = false,\r\n children,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const baseStyles =\r\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\";\r\n\r\n const sizes = {\r\n sm: \"h-8 px-3 rounded-md text-sm\",\r\n md: \"h-9 px-4 rounded-md text-sm\",\r\n lg: \"h-11 px-6 rounded-md text-base\",\r\n xl: \"h-12 px-8 rounded-lg text-lg\",\r\n default: \"h-9 px-4 rounded-md text-sm\",\r\n };\r\n\r\n const colorVariants = {\r\n primary: {\r\n contained:\r\n \"bg-primary text-white hover:bg-primary-600 focus:ring-primary-500 shadow-sm\",\r\n outlined:\r\n \"border border-primary bg-transparent text-primary hover:bg-primary-50 focus:ring-primary-500\",\r\n text: \"bg-transparent text-primary hover:bg-primary-50 focus:ring-primary-500\",\r\n },\r\n success: {\r\n contained:\r\n \"bg-green-600 text-white hover:bg-green-700 focus:ring-green-500 shadow-sm\",\r\n outlined:\r\n \"border border-green-600 bg-transparent text-green-600 hover:bg-green-50 focus:ring-green-500\",\r\n text: \"bg-transparent text-green-600 hover:bg-green-50 focus:ring-green-500\",\r\n },\r\n error: {\r\n contained:\r\n \"bg-red-600 text-white hover:bg-red-700 focus:ring-red-500 shadow-sm\",\r\n outlined:\r\n \"border border-red-600 bg-transparent text-red-600 hover:bg-red-50 focus:ring-red-500\",\r\n text: \"bg-transparent text-red-600 hover:bg-red-50 focus:ring-red-500\",\r\n },\r\n default: {\r\n contained:\r\n \"border bg-gray-200 text-gray-800 hover:bg-gray-300 focus:ring-gray-300 shadow-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-100 dark:hover:bg-gray-600 dark:focus:ring-gray-600\",\r\n outlined:\r\n \"border border-gray-300 bg-transparent text-gray-700 hover:bg-gray-100 focus:ring-gray-300 dark:border-gray-600 dark:text-gray-200 dark:hover:bg-gray-700 dark:focus:ring-gray-500\",\r\n text: \"bg-transparent text-gray-700 hover:bg-gray-100 focus:ring-gray-300 dark:text-gray-200 dark:hover:bg-gray-700 dark:focus:ring-gray-500\",\r\n },\r\n };\r\n\r\n const colorStyles =\r\n colorVariants[color]?.[variant] || colorVariants.default.contained;\r\n const sizeStyles = sizes[size];\r\n\r\n const combinedClassName = `\r\n ${baseStyles} \r\n ${colorStyles} \r\n ${sizeStyles} \r\n ${fullWidth ? \"w-full\" : \"\"} \r\n ${className}\r\n `.trim();\r\n\r\n return (\r\n <button\r\n ref={ref}\r\n type={props.type || \"button\"}\r\n className={combinedClassName}\r\n {...props}\r\n >\r\n {children}\r\n </button>\r\n );\r\n },\r\n);\r\n\r\nButton.displayName = \"Button\";\r\n\r\nexport default Button;\r\n","import React from \"react\";\r\n\r\nexport default function InputLabel({ label, required = false }) {\r\n return (\r\n <>\r\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\">\r\n {label}\r\n {required && <span className=\"ml-1\">*</span>}\r\n </label>\r\n </>\r\n );\r\n}\r\n","import React, { useState, useEffect, useRef } from \"react\";\r\nimport { ChevronDown, Search, Check } from \"lucide-react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nconst Select = ({\r\n options = [],\r\n value,\r\n onChange,\r\n placeholder = \"Select option\",\r\n className = \"\",\r\n disabled = false,\r\n search = false,\r\n label = \"\",\r\n required = false,\r\n name = \"\",\r\n parentClass = \"\",\r\n multiple = false, // ✅ NEW\r\n dropdownMaxHeight = \"\",\r\n}) => {\r\n const [open, setOpen] = useState(false);\r\n const [searchTerm, setSearchTerm] = useState(\"\");\r\n const [showAboveState, setShowAboveState] = useState(true);\r\n const dropdownRef = useRef(null);\r\n const searchInputRef = useRef(null);\r\n\r\n const normalize = (val) =>\r\n typeof val === \"boolean\" ? String(val) : String(val ?? \"\");\r\n\r\n const normalizedValue = multiple\r\n ? (value || []).map(normalize)\r\n : normalize(value);\r\n\r\n const filteredOptions = options.filter((option) =>\r\n option.label.toLowerCase().includes(searchTerm.toLowerCase()),\r\n );\r\n\r\n const isSelected = (optionValue) => {\r\n const normalized = normalize(optionValue);\r\n if (multiple) {\r\n return normalizedValue.includes(normalized);\r\n }\r\n return normalized === normalizedValue;\r\n };\r\n\r\n useEffect(() => {\r\n const handleClickOutside = (event) => {\r\n if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {\r\n setOpen(false);\r\n setSearchTerm(\"\");\r\n }\r\n };\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (open && dropdownRef.current) {\r\n const rect = dropdownRef.current.getBoundingClientRect();\r\n const viewportHeight = window.innerHeight;\r\n const spaceBelow = viewportHeight - rect.bottom;\r\n const dropdownHeight = 200;\r\n setShowAboveState(spaceBelow < dropdownHeight);\r\n }\r\n }, [open]);\r\n\r\n useEffect(() => {\r\n if (open && searchInputRef.current) {\r\n searchInputRef.current.focus();\r\n }\r\n }, [open]);\r\n\r\n const handleOptionClick = (optionValue) => {\r\n let finalValue = optionValue;\r\n if (optionValue === \"true\") finalValue = true;\r\n else if (optionValue === \"false\") finalValue = false;\r\n\r\n if (multiple) {\r\n const exists = normalizedValue.includes(normalize(optionValue));\r\n\r\n let newValues;\r\n if (exists) {\r\n newValues = value.filter(\r\n (v) => normalize(v) !== normalize(optionValue),\r\n );\r\n } else {\r\n newValues = [...(value || []), finalValue];\r\n }\r\n\r\n onChange(newValues);\r\n } else {\r\n onChange(finalValue);\r\n setOpen(false);\r\n }\r\n\r\n setSearchTerm(\"\");\r\n };\r\n\r\n const selectedLabels = multiple\r\n ? options\r\n .filter((opt) => isSelected(opt.value))\r\n .map((opt) => opt.label)\r\n .join(\", \")\r\n : options.find((opt) => isSelected(opt.value))?.label;\r\n\r\n return (\r\n <div key={name} className={parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n\r\n <div className={`relative ${className}`} ref={dropdownRef}>\r\n <button\r\n type=\"button\"\r\n onClick={() => !disabled && setOpen(!open)}\r\n disabled={disabled}\r\n className={`w-full h-10 px-3 border border-gray-300 dark:border-gray-600 rounded-md text-left text-sm flex items-center justify-between \r\n ${\r\n !selectedLabels\r\n ? \"text-gray-500 dark:text-gray-400\"\r\n : \"dark:text-white\"\r\n } \r\n ${disabled ? \"opacity-50 cursor-not-allowed\" : \"dark:bg-gray-700\"}`}\r\n >\r\n <span className=\"truncate\">{selectedLabels || placeholder}</span>\r\n\r\n <ChevronDown\r\n className={`w-4 h-4 transition-transform ${\r\n open ? \"rotate-180\" : \"\"\r\n }`}\r\n />\r\n </button>\r\n\r\n {open && (\r\n <div\r\n className={`absolute z-50 w-full border rounded-md bg-white dark:bg-gray-700 shadow-lg \r\n ${showAboveState ? \"bottom-full mb-1\" : \"top-full mt-1\"}`}\r\n >\r\n {search && (\r\n <div className=\"p-2 border-b border-gray-200 dark:border-gray-600\">\r\n <div className=\"relative\">\r\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400\" />\r\n <input\r\n ref={searchInputRef}\r\n type=\"text\"\r\n value={searchTerm}\r\n onChange={(e) => setSearchTerm(e.target.value)}\r\n placeholder=\"Search...\"\r\n className=\"w-full pl-9 pr-3 py-2 text-sm border rounded-md bg-white dark:bg-gray-800 dark:text-white placeholder-gray-500 dark:placeholder-gray-400 focus:outline-none\"\r\n />\r\n </div>\r\n </div>\r\n )}\r\n\r\n <div\r\n className={`max-h-40 overflow-y-auto`}\r\n style={{\r\n maxHeight: dropdownMaxHeight || \"\",\r\n }}\r\n >\r\n {filteredOptions.length > 0 ? (\r\n filteredOptions.map((option) => (\r\n <button\r\n key={String(option.value)}\r\n type=\"button\"\r\n onClick={() => handleOptionClick(String(option.value))}\r\n className={`w-full px-3 py-2 text-left text-sm flex items-center justify-between hover:bg-gray-100 dark:hover:bg-gray-600 \r\n ${\r\n isSelected(option.value)\r\n ? \"bg-blue-50 dark:bg-blue-900/20 text-blue-700 dark:text-blue-300\"\r\n : \"\"\r\n }`}\r\n >\r\n <span>{option.label}</span>\r\n\r\n {multiple && isSelected(option.value) && (\r\n <Check className=\"w-4 h-4\" />\r\n )}\r\n </button>\r\n ))\r\n ) : (\r\n <div className=\"px-3 py-2 text-sm text-gray-500 dark:text-gray-400\">\r\n No options found\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default Select;\r\n","import React from \"react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nconst Switch = ({\r\n value = true,\r\n onChange,\r\n text,\r\n options = [],\r\n label,\r\n required,\r\n name = \"\",\r\n disabled = false,\r\n parentClass = \"\",\r\n}) => {\r\n const radioOptions =\r\n options.length > 0\r\n ? options\r\n : [\r\n { label: \"Active\", value: true },\r\n { label: \"Inactive\", value: false },\r\n ];\r\n\r\n return (\r\n <>\r\n <div key={name} className={parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n <div className=\"flex items-center justify-between h-10 gap-4 bg-gray-100 dark:bg-gray-700 px-3 rounded-md border border-gray-100 dark:border-gray-600\">\r\n {/* Left Text */}\r\n {text && (\r\n <p className=\"text-xs text-gray-600 dark:text-gray-400 flex-shrink overflow-hidden text-ellipsis whitespace-nowrap max-w-[200px]\">\r\n {text}\r\n </p>\r\n )}\r\n\r\n {/* Radio Buttons */}\r\n <div className=\"flex items-center gap-6\">\r\n {radioOptions.map((opt, idx) => (\r\n <label\r\n key={idx}\r\n className=\"flex items-center gap-2 cursor-pointer select-none\"\r\n >\r\n <input\r\n type=\"radio\"\r\n name=\"switch-field\"\r\n required={required && idx === 0}\r\n value={opt.value}\r\n disabled={disabled}\r\n checked={value === opt.value}\r\n onChange={() => onChange(opt.value)}\r\n className=\"w-4 h-4 border-gray-300 cursor-pointer\"\r\n />\r\n <span className=\"text-sm text-gray-700 dark:text-white\">\r\n {opt.label}\r\n </span>\r\n </label>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default Switch;\r\n","export const countries = [\r\n { label: \"Afghanistan\", code: \"AF\", phone: \"93\" },\r\n { label: \"Aland Islands\", code: \"AX\", phone: \"358\" },\r\n { label: \"Albania\", code: \"AL\", phone: \"355\" },\r\n { label: \"Algeria\", code: \"DZ\", phone: \"213\" },\r\n { label: \"American Samoa\", code: \"AS\", phone: \"1\" },\r\n { label: \"Andorra\", code: \"AD\", phone: \"376\" },\r\n { label: \"Angola\", code: \"AO\", phone: \"244\" },\r\n { label: \"Anguilla\", code: \"AI\", phone: \"1\" },\r\n { label: \"Antarctica\", code: \"AQ\", phone: \"672\" },\r\n { label: \"Antigua and Barbuda\", code: \"AG\", phone: \"1\" },\r\n { label: \"Argentina\", code: \"AR\", phone: \"54\" },\r\n { label: \"Armenia\", code: \"AM\", phone: \"374\" },\r\n { label: \"Aruba\", code: \"AW\", phone: \"297\" },\r\n { label: \"Australia\", code: \"AU\", phone: \"61\" },\r\n { label: \"Austria\", code: \"AT\", phone: \"43\" },\r\n { label: \"Azerbaijan\", code: \"AZ\", phone: \"994\" },\r\n { label: \"Bahrain\", code: \"BH\", phone: \"973\" },\r\n { label: \"Bangladesh\", code: \"BD\", phone: \"880\" },\r\n { label: \"Barbados\", code: \"BB\", phone: \"1\" },\r\n { label: \"Belarus\", code: \"BY\", phone: \"375\" },\r\n { label: \"Belgium\", code: \"BE\", phone: \"32\" },\r\n { label: \"Belize\", code: \"BZ\", phone: \"501\" },\r\n { label: \"Benin\", code: \"BJ\", phone: \"229\" },\r\n { label: \"Bermuda\", code: \"BM\", phone: \"1\" },\r\n { label: \"Bhutan\", code: \"BT\", phone: \"975\" },\r\n { label: \"Bolivia\", code: \"BO\", phone: \"591\" },\r\n { label: \"Bonaire, Sint Eustatius and Saba\", code: \"BQ\", phone: \"599\" },\r\n { label: \"Bosnia and Herzegovina\", code: \"BA\", phone: \"387\" },\r\n { label: \"Botswana\", code: \"BW\", phone: \"267\" },\r\n { label: \"Bouvet Island\", code: \"BV\", phone: \"0055\" },\r\n { label: \"Brazil\", code: \"BR\", phone: \"55\" },\r\n { label: \"British Indian Ocean Territory\", code: \"IO\", phone: \"246\" },\r\n { label: \"Brunei\", code: \"BN\", phone: \"673\" },\r\n { label: \"Bulgaria\", code: \"BG\", phone: \"359\" },\r\n { label: \"Burkina Faso\", code: \"BF\", phone: \"226\" },\r\n { label: \"Burundi\", code: \"BI\", phone: \"257\" },\r\n { label: \"Cambodia\", code: \"KH\", phone: \"855\" },\r\n { label: \"Cameroon\", code: \"CM\", phone: \"237\" },\r\n { label: \"Canada\", code: \"CA\", phone: \"1\" },\r\n { label: \"Cape Verde\", code: \"CV\", phone: \"238\" },\r\n { label: \"Cayman Islands\", code: \"KY\", phone: \"1\" },\r\n { label: \"Central African Republic\", code: \"CF\", phone: \"236\" },\r\n { label: \"Chad\", code: \"TD\", phone: \"235\" },\r\n { label: \"Chile\", code: \"CL\", phone: \"56\" },\r\n { label: \"China\", code: \"CN\", phone: \"86\" },\r\n { label: \"Christmas Island\", code: \"CX\", phone: \"61\" },\r\n { label: \"Cocos (Keeling) Islands\", code: \"CC\", phone: \"61\" },\r\n { label: \"Colombia\", code: \"CO\", phone: \"57\" },\r\n { label: \"Comoros\", code: \"KM\", phone: \"269\" },\r\n { label: \"Congo\", code: \"CG\", phone: \"242\" },\r\n { label: \"Cook Islands\", code: \"CK\", phone: \"682\" },\r\n { label: \"Costa Rica\", code: \"CR\", phone: \"506\" },\r\n { label: \"Croatia\", code: \"HR\", phone: \"385\" },\r\n { label: \"Cuba\", code: \"CU\", phone: \"53\" },\r\n { label: \"Curaçao\", code: \"CW\", phone: \"599\" },\r\n { label: \"Cyprus\", code: \"CY\", phone: \"357\" },\r\n { label: \"Czech Republic\", code: \"CZ\", phone: \"420\" },\r\n { label: \"Democratic Republic of the Congo\", code: \"CD\", phone: \"243\" },\r\n { label: \"Denmark\", code: \"DK\", phone: \"45\" },\r\n { label: \"Djibouti\", code: \"DJ\", phone: \"253\" },\r\n { label: \"Dominica\", code: \"DM\", phone: \"1\" },\r\n { label: \"Dominican Republic\", code: \"DO\", phone: \"1\" },\r\n { label: \"Ecuador\", code: \"EC\", phone: \"593\" },\r\n { label: \"Egypt\", code: \"EG\", phone: \"20\" },\r\n { label: \"El Salvador\", code: \"SV\", phone: \"503\" },\r\n { label: \"Equatorial Guinea\", code: \"GQ\", phone: \"240\" },\r\n { label: \"Eritrea\", code: \"ER\", phone: \"291\" },\r\n { label: \"Estonia\", code: \"EE\", phone: \"372\" },\r\n { label: \"Eswatini\", code: \"SZ\", phone: \"268\" },\r\n { label: \"Ethiopia\", code: \"ET\", phone: \"251\" },\r\n { label: \"Falkland Islands\", code: \"FK\", phone: \"500\" },\r\n { label: \"Faroe Islands\", code: \"FO\", phone: \"298\" },\r\n { label: \"Fiji Islands\", code: \"FJ\", phone: \"679\" },\r\n { label: \"Finland\", code: \"FI\", phone: \"358\" },\r\n { label: \"France\", code: \"FR\", phone: \"33\" },\r\n { label: \"French Guiana\", code: \"GF\", phone: \"594\" },\r\n { label: \"French Polynesia\", code: \"PF\", phone: \"689\" },\r\n { label: \"French Southern Territories\", code: \"TF\", phone: \"262\" },\r\n { label: \"Gabon\", code: \"GA\", phone: \"241\" },\r\n { label: \"Georgia\", code: \"GE\", phone: \"995\" },\r\n { label: \"Germany\", code: \"DE\", phone: \"49\" },\r\n { label: \"Ghana\", code: \"GH\", phone: \"233\" },\r\n { label: \"Gibraltar\", code: \"GI\", phone: \"350\" },\r\n { label: \"Greece\", code: \"GR\", phone: \"30\" },\r\n { label: \"Greenland\", code: \"GL\", phone: \"299\" },\r\n { label: \"Grenada\", code: \"GD\", phone: \"1\" },\r\n { label: \"Guadeloupe\", code: \"GP\", phone: \"590\" },\r\n { label: \"Guam\", code: \"GU\", phone: \"1\" },\r\n { label: \"Guatemala\", code: \"GT\", phone: \"502\" },\r\n { label: \"Guernsey\", code: \"GG\", phone: \"44\" },\r\n { label: \"Guinea\", code: \"GN\", phone: \"224\" },\r\n { label: \"Guinea-Bissau\", code: \"GW\", phone: \"245\" },\r\n { label: \"Guyana\", code: \"GY\", phone: \"592\" },\r\n { label: \"Haiti\", code: \"HT\", phone: \"509\" },\r\n { label: \"Heard Island and McDonald Islands\", code: \"HM\", phone: \"672\" },\r\n { label: \"Honduras\", code: \"HN\", phone: \"504\" },\r\n { label: \"Hong Kong S.A.R.\", code: \"HK\", phone: \"852\" },\r\n { label: \"Hungary\", code: \"HU\", phone: \"36\" },\r\n { label: \"Iceland\", code: \"IS\", phone: \"354\" },\r\n { label: \"India\", code: \"IN\", phone: \"91\" },\r\n { label: \"Indonesia\", code: \"ID\", phone: \"62\" },\r\n { label: \"Iran\", code: \"IR\", phone: \"98\" },\r\n { label: \"Iraq\", code: \"IQ\", phone: \"964\" },\r\n { label: \"Ireland\", code: \"IE\", phone: \"353\" },\r\n { label: \"Israel\", code: \"IL\", phone: \"972\" },\r\n { label: \"Italy\", code: \"IT\", phone: \"39\" },\r\n { label: \"Ivory Coast\", code: \"CI\", phone: \"225\" },\r\n { label: \"Jamaica\", code: \"JM\", phone: \"1\" },\r\n { label: \"Japan\", code: \"JP\", phone: \"81\" },\r\n { label: \"Jersey\", code: \"JE\", phone: \"44\" },\r\n { label: \"Jordan\", code: \"JO\", phone: \"962\" },\r\n { label: \"Kazakhstan\", code: \"KZ\", phone: \"7\" },\r\n { label: \"Kenya\", code: \"KE\", phone: \"254\" },\r\n { label: \"Kiribati\", code: \"KI\", phone: \"686\" },\r\n { label: \"Kosovo\", code: \"XK\", phone: \"383\" },\r\n { label: \"Kuwait\", code: \"KW\", phone: \"965\" },\r\n { label: \"Kyrgyzstan\", code: \"KG\", phone: \"996\" },\r\n { label: \"Laos\", code: \"LA\", phone: \"856\" },\r\n { label: \"Latvia\", code: \"LV\", phone: \"371\" },\r\n { label: \"Lebanon\", code: \"LB\", phone: \"961\" },\r\n { label: \"Lesotho\", code: \"LS\", phone: \"266\" },\r\n { label: \"Liberia\", code: \"LR\", phone: \"231\" },\r\n { label: \"Libya\", code: \"LY\", phone: \"218\" },\r\n { label: \"Liechtenstein\", code: \"LI\", phone: \"423\" },\r\n { label: \"Lithuania\", code: \"LT\", phone: \"370\" },\r\n { label: \"Luxembourg\", code: \"LU\", phone: \"352\" },\r\n { label: \"Macau S.A.R.\", code: \"MO\", phone: \"853\" },\r\n { label: \"Madagascar\", code: \"MG\", phone: \"261\" },\r\n { label: \"Malawi\", code: \"MW\", phone: \"265\" },\r\n { label: \"Malaysia\", code: \"MY\", phone: \"60\" },\r\n { label: \"Maldives\", code: \"MV\", phone: \"960\" },\r\n { label: \"Mali\", code: \"ML\", phone: \"223\" },\r\n { label: \"Malta\", code: \"MT\", phone: \"356\" },\r\n { label: \"Man (Isle of)\", code: \"IM\", phone: \"44\" },\r\n { label: \"Marshall Islands\", code: \"MH\", phone: \"692\" },\r\n { label: \"Martinique\", code: \"MQ\", phone: \"596\" },\r\n { label: \"Mauritania\", code: \"MR\", phone: \"222\" },\r\n { label: \"Mauritius\", code: \"MU\", phone: \"230\" },\r\n { label: \"Mayotte\", code: \"YT\", phone: \"262\" },\r\n { label: \"Mexico\", code: \"MX\", phone: \"52\" },\r\n { label: \"Micronesia\", code: \"FM\", phone: \"691\" },\r\n { label: \"Moldova\", code: \"MD\", phone: \"373\" },\r\n { label: \"Monaco\", code: \"MC\", phone: \"377\" },\r\n { label: \"Mongolia\", code: \"MN\", phone: \"976\" },\r\n { label: \"Montenegro\", code: \"ME\", phone: \"382\" },\r\n { label: \"Montserrat\", code: \"MS\", phone: \"1\" },\r\n { label: \"Morocco\", code: \"MA\", phone: \"212\" },\r\n { label: \"Mozambique\", code: \"MZ\", phone: \"258\" },\r\n { label: \"Myanmar\", code: \"MM\", phone: \"95\" },\r\n { label: \"Namibia\", code: \"NA\", phone: \"264\" },\r\n { label: \"Nauru\", code: \"NR\", phone: \"674\" },\r\n { label: \"Nepal\", code: \"NP\", phone: \"977\" },\r\n { label: \"Netherlands\", code: \"NL\", phone: \"31\" },\r\n { label: \"New Caledonia\", code: \"NC\", phone: \"687\" },\r\n { label: \"New Zealand\", code: \"NZ\", phone: \"64\" },\r\n { label: \"Nicaragua\", code: \"NI\", phone: \"505\" },\r\n { label: \"Niger\", code: \"NE\", phone: \"227\" },\r\n { label: \"Nigeria\", code: \"NG\", phone: \"234\" },\r\n { label: \"Niue\", code: \"NU\", phone: \"683\" },\r\n { label: \"Norfolk Island\", code: \"NF\", phone: \"672\" },\r\n { label: \"North Korea\", code: \"KP\", phone: \"850\" },\r\n { label: \"North Macedonia\", code: \"MK\", phone: \"389\" },\r\n { label: \"Northern Mariana Islands\", code: \"MP\", phone: \"1\" },\r\n { label: \"Norway\", code: \"NO\", phone: \"47\" },\r\n { label: \"Oman\", code: \"OM\", phone: \"968\" },\r\n { label: \"Pakistan\", code: \"PK\", phone: \"92\" },\r\n { label: \"Palau\", code: \"PW\", phone: \"680\" },\r\n { label: \"Palestinian Territory Occupied\", code: \"PS\", phone: \"970\" },\r\n { label: \"Panama\", code: \"PA\", phone: \"507\" },\r\n { label: \"Papua New Guinea\", code: \"PG\", phone: \"675\" },\r\n { label: \"Paraguay\", code: \"PY\", phone: \"595\" },\r\n { label: \"Peru\", code: \"PE\", phone: \"51\" },\r\n { label: \"Philippines\", code: \"PH\", phone: \"63\" },\r\n { label: \"Pitcairn Island\", code: \"PN\", phone: \"870\" },\r\n { label: \"Poland\", code: \"PL\", phone: \"48\" },\r\n { label: \"Portugal\", code: \"PT\", phone: \"351\" },\r\n { label: \"Puerto Rico\", code: \"PR\", phone: \"1\" },\r\n { label: \"Qatar\", code: \"QA\", phone: \"974\" },\r\n { label: \"Reunion\", code: \"RE\", phone: \"262\" },\r\n { label: \"Romania\", code: \"RO\", phone: \"40\" },\r\n { label: \"Russia\", code: \"RU\", phone: \"7\" },\r\n { label: \"Rwanda\", code: \"RW\", phone: \"250\" },\r\n { label: \"Saint Helena\", code: \"SH\", phone: \"290\" },\r\n { label: \"Saint Kitts and Nevis\", code: \"KN\", phone: \"1\" },\r\n { label: \"Saint Lucia\", code: \"LC\", phone: \"1\" },\r\n { label: \"Saint Pierre and Miquelon\", code: \"PM\", phone: \"508\" },\r\n { label: \"Saint Vincent and the Grenadines\", code: \"VC\", phone: \"1\" },\r\n { label: \"Saint-Barthelemy\", code: \"BL\", phone: \"590\" },\r\n { label: \"Saint-Martin (French part)\", code: \"MF\", phone: \"590\" },\r\n { label: \"Samoa\", code: \"WS\", phone: \"685\" },\r\n { label: \"San Marino\", code: \"SM\", phone: \"378\" },\r\n { label: \"Sao Tome and Principe\", code: \"ST\", phone: \"239\" },\r\n { label: \"Saudi Arabia\", code: \"SA\", phone: \"966\" },\r\n { label: \"Senegal\", code: \"SN\", phone: \"221\" },\r\n { label: \"Serbia\", code: \"RS\", phone: \"381\" },\r\n { label: \"Seychelles\", code: \"SC\", phone: \"248\" },\r\n { label: \"Sierra Leone\", code: \"SL\", phone: \"232\" },\r\n { label: \"Singapore\", code: \"SG\", phone: \"65\" },\r\n { label: \"Sint Maarten (Dutch part)\", code: \"SX\", phone: \"1721\" },\r\n { label: \"Slovakia\", code: \"SK\", phone: \"421\" },\r\n { label: \"Slovenia\", code: \"SI\", phone: \"386\" },\r\n { label: \"Solomon Islands\", code: \"SB\", phone: \"677\" },\r\n { label: \"Somalia\", code: \"SO\", phone: \"252\" },\r\n { label: \"South Africa\", code: \"ZA\", phone: \"27\" },\r\n { label: \"South Georgia\", code: \"GS\", phone: \"500\" },\r\n { label: \"South Korea\", code: \"KR\", phone: \"82\" },\r\n { label: \"South Sudan\", code: \"SS\", phone: \"211\" },\r\n { label: \"Spain\", code: \"ES\", phone: \"34\" },\r\n { label: \"Sri Lanka\", code: \"LK\", phone: \"94\" },\r\n { label: \"Sudan\", code: \"SD\", phone: \"249\" },\r\n { label: \"Suriname\", code: \"SR\", phone: \"597\" },\r\n { label: \"Svalbard and Jan Mayen Islands\", code: \"SJ\", phone: \"47\" },\r\n { label: \"Sweden\", code: \"SE\", phone: \"46\" },\r\n { label: \"Switzerland\", code: \"CH\", phone: \"41\" },\r\n { label: \"Syria\", code: \"SY\", phone: \"963\" },\r\n { label: \"Taiwan\", code: \"TW\", phone: \"886\" },\r\n { label: \"Tajikistan\", code: \"TJ\", phone: \"992\" },\r\n { label: \"Tanzania\", code: \"TZ\", phone: \"255\" },\r\n { label: \"Thailand\", code: \"TH\", phone: \"66\" },\r\n { label: \"The Bahamas\", code: \"BS\", phone: \"1\" },\r\n { label: \"The Gambia\", code: \"GM\", phone: \"220\" },\r\n { label: \"Timor-Leste\", code: \"TL\", phone: \"670\" },\r\n { label: \"Togo\", code: \"TG\", phone: \"228\" },\r\n { label: \"Tokelau\", code: \"TK\", phone: \"690\" },\r\n { label: \"Tonga\", code: \"TO\", phone: \"676\" },\r\n { label: \"Trinidad and Tobago\", code: \"TT\", phone: \"1\" },\r\n { label: \"Tunisia\", code: \"TN\", phone: \"216\" },\r\n { label: \"Turkey\", code: \"TR\", phone: \"90\" },\r\n { label: \"Turkmenistan\", code: \"TM\", phone: \"993\" },\r\n { label: \"Turks and Caicos Islands\", code: \"TC\", phone: \"1\" },\r\n { label: \"Tuvalu\", code: \"TV\", phone: \"688\" },\r\n { label: \"Uganda\", code: \"UG\", phone: \"256\" },\r\n { label: \"Ukraine\", code: \"UA\", phone: \"380\" },\r\n { label: \"United Arab Emirates\", code: \"AE\", phone: \"971\" },\r\n { label: \"United Kingdom\", code: \"GB\", phone: \"44\" },\r\n { label: \"United States\", code: \"US\", phone: \"1\" },\r\n { label: \"United States Minor Outlying Islands\", code: \"UM\", phone: \"1\" },\r\n { label: \"Uruguay\", code: \"UY\", phone: \"598\" },\r\n { label: \"Uzbekistan\", code: \"UZ\", phone: \"998\" },\r\n { label: \"Vanuatu\", code: \"VU\", phone: \"678\" },\r\n { label: \"Vatican City State (Holy See)\", code: \"VA\", phone: \"379\" },\r\n { label: \"Venezuela\", code: \"VE\", phone: \"58\" },\r\n { label: \"Vietnam\", code: \"VN\", phone: \"84\" },\r\n { label: \"Virgin Islands (British)\", code: \"VG\", phone: \"1\" },\r\n { label: \"Virgin Islands (US)\", code: \"VI\", phone: \"1\" },\r\n { label: \"Wallis and Futuna Islands\", code: \"WF\", phone: \"681\" },\r\n { label: \"Western Sahara\", code: \"EH\", phone: \"212\" },\r\n { label: \"Yemen\", code: \"YE\", phone: \"967\" },\r\n { label: \"Zambia\", code: \"ZM\", phone: \"260\" },\r\n { label: \"Zimbabwe\", code: \"ZW\", phone: \"263\" },\r\n];\r\n","import React, { useState, useEffect, useRef } from \"react\";\r\nimport { countries } from \"../../../data/countries\";\r\nimport { ChevronDown, Search } from \"lucide-react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nexport default function PhoneInput({\r\n label = \"\",\r\n value = \"\",\r\n name = \"\",\r\n parentClass = \"\",\r\n onChange,\r\n disabled = false,\r\n required = false,\r\n placeholder = \"Phone number\",\r\n search = false,\r\n countriesList = false,\r\n defaultCountry = \"\",\r\n}) {\r\n const find_country_with_code = (value) => {\r\n return countries.find((obj) => obj.code == value);\r\n };\r\n\r\n const [selectedCountry, setSelectedCountry] = useState(\r\n find_country_with_code(defaultCountry) || countries[0],\r\n );\r\n const [fullNumber, setFullNumber] = useState(\"\");\r\n const [open, setOpen] = useState(false);\r\n const [searchTerm, setSearchTerm] = useState(\"\");\r\n const dropdownRef = useRef();\r\n\r\n // Match prefix when value starts with +code\r\n useEffect(() => {\r\n if (typeof value === \"string\" && value.startsWith(\"+\")) {\r\n const match = countries\r\n .filter((c) => value.startsWith(\"+\" + c.phone))\r\n .sort((a, b) => b.phone.length - a.phone.length)[0];\r\n if (match) {\r\n setSelectedCountry(match);\r\n setFullNumber(value.replace(\"+\" + match.phone, \"\"));\r\n return;\r\n }\r\n }\r\n setFullNumber(value);\r\n }, [value]);\r\n\r\n const handleNumberChange = (e) => {\r\n const input = e.target.value.replace(/\\D/g, \"\");\r\n setFullNumber(input);\r\n if (selectedCountry && onChange) {\r\n onChange(\"+\" + selectedCountry.phone + input);\r\n }\r\n };\r\n\r\n const handleCountrySelect = (country) => {\r\n setSelectedCountry(country);\r\n if (onChange) onChange(\"+\" + country.phone + fullNumber);\r\n setOpen(false);\r\n setSearchTerm(\"\");\r\n };\r\n\r\n // 🖱️ Close dropdown on outside click\r\n useEffect(() => {\r\n const handleClickOutside = (e) => {\r\n if (dropdownRef.current && !dropdownRef.current.contains(e.target))\r\n setOpen(false);\r\n };\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\r\n }, []);\r\n\r\n const filteredCountries = countries.filter(\r\n (c) =>\r\n c.label.toLowerCase().includes(searchTerm.toLowerCase()) ||\r\n c.phone.includes(searchTerm),\r\n );\r\n\r\n if (!countriesList) {\r\n const handleInputChange = (e) => {\r\n const input = e.target.value.replace(/[^+\\d]/g, \"\");\r\n const formatted = input.startsWith(\"+\")\r\n ? \"+\" + input.replace(/[+]/g, \"\").slice(0)\r\n : input;\r\n onChange(formatted);\r\n };\r\n\r\n return (\r\n <>\r\n <div key={name} className={parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n <input\r\n type=\"text\"\r\n value={value}\r\n onChange={handleInputChange}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n required={required}\r\n className=\"w-full h-10 px-3 text-sm border border-gray-300 dark:border-gray-600 rounded-md \r\n bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 focus:outline-none \r\n focus:ring-1 focus:ring-blue-300 dark:focus:ring-blue-200\"\r\n inputMode=\"tel\"\r\n pattern=\"^\\+\\d{1,15}$\"\r\n />\r\n </div>\r\n </>\r\n );\r\n }\r\n\r\n return (\r\n <>\r\n <div key={name} className={parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n <div className=\"relative \" ref={dropdownRef}>\r\n {/* Input container */}\r\n <div\r\n className={`h-[40px] flex items-center border rounded-md px-2 bg-white dark:bg-gray-700 transition-all\r\n ${\r\n open\r\n ? \"ring-0.5 ring-blue-100 border-blue-300\"\r\n : \"border-gray-300 dark:border-gray-600\"\r\n }\r\n ${disabled ? \"opacity-60 cursor-not-allowed\" : \"\"}`}\r\n >\r\n {/* Flag & dropdown */}\r\n <button\r\n type=\"button\"\r\n disabled={disabled}\r\n onClick={() => setOpen(!open)}\r\n className=\"flex items-center gap-1 pr-2 border-r border-gray-300 dark:border-gray-700 focus:outline-none\"\r\n >\r\n {selectedCountry ? (\r\n <img\r\n src={`https://flagcdn.com/w20/${selectedCountry.code.toLowerCase()}.png`}\r\n alt={selectedCountry.code}\r\n className=\"w-5 h-3 object-cover\"\r\n />\r\n ) : (\r\n <span className=\"text-gray-400 text-xs\">🌐</span>\r\n )}\r\n <ChevronDown className=\"w-3 h-3 text-gray-500\" />\r\n </button>\r\n\r\n {/* Country code */}\r\n {selectedCountry && (\r\n <span className=\"ml-2 text-sm text-gray-700 dark:text-gray-200 whitespace-nowrap\">\r\n +{selectedCountry.phone}\r\n </span>\r\n )}\r\n\r\n {/* Number input */}\r\n <input\r\n type=\"tel\"\r\n value={fullNumber}\r\n onChange={handleNumberChange}\r\n required={required}\r\n disabled={disabled || !selectedCountry}\r\n placeholder={!selectedCountry ? \"Select a country\" : placeholder}\r\n className=\"flex-1 ml-2 bg-transparent outline-none text-sm text-gray-800 dark:text-gray-100 placeholder-gray-400\"\r\n />\r\n\r\n {/* Hidden input for native browser validation */}\r\n <input\r\n type=\"tel\"\r\n required={required}\r\n tabIndex={-1}\r\n readOnly\r\n value={\r\n selectedCountry && fullNumber\r\n ? \"+\" + selectedCountry.phone + fullNumber\r\n : \"\"\r\n }\r\n style={{\r\n position: \"absolute\",\r\n opacity: 0,\r\n pointerEvents: \"none\",\r\n height: 0,\r\n }}\r\n />\r\n </div>\r\n\r\n {/* Dropdown */}\r\n {open && (\r\n <div className=\"absolute top-full left-0 w-full mt-1 border border-gray-300 dark:border-gray-700 rounded-md bg-white dark:bg-gray-700 shadow-lg z-50 max-h-60 overflow-y-auto\">\r\n {search && (\r\n <div className=\"p-2 border-b border-gray-200 dark:border-gray-700\">\r\n <div className=\"relative\">\r\n <Search className=\"absolute left-3 top-1/2 transform -translate-y-1/2 w-4 h-4 text-gray-400\" />\r\n <input\r\n type=\"text\"\r\n value={searchTerm}\r\n onChange={(e) => setSearchTerm(e.target.value)}\r\n placeholder=\"Search country...\"\r\n className=\"w-full pl-9 pr-3 py-2 text-sm border rounded-md bg-white dark:bg-gray-800 dark:text-white placeholder-gray-500 dark:placeholder-gray-400 focus:outline-none \"\r\n />\r\n </div>\r\n </div>\r\n )}\r\n\r\n {filteredCountries.map((c) => (\r\n <button\r\n key={c.code}\r\n type=\"button\"\r\n onClick={() => handleCountrySelect(c)}\r\n className=\"w-full flex items-center gap-2 px-2 py-1 text-sm hover:bg-blue-50 dark:hover:bg-gray-700 text-gray-800 dark:text-gray-100\"\r\n >\r\n <img\r\n src={`https://flagcdn.com/w20/${c.code.toLowerCase()}.png`}\r\n alt={c.code}\r\n className=\"w-5 h-3 object-cover\"\r\n />\r\n <span>\r\n {c.label} (+{c.phone})\r\n </span>\r\n </button>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </>\r\n );\r\n}\r\n","import React, { useState } from \"react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nconst TextArea = React.forwardRef(\r\n ({ className = \"\", label, required, ...props }, ref) => {\r\n const combinedClassName = `\r\n placeholder-gray-400 dark:placeholder-gray-400\r\n ${className}\r\n `.trim();\r\n\r\n return (\r\n <>\r\n <div key={props.name} className={props.parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n <div className=\"relative\">\r\n <textarea\r\n className={combinedClassName}\r\n ref={ref}\r\n required={required}\r\n {...props}\r\n />\r\n </div>\r\n </div>\r\n </>\r\n );\r\n },\r\n);\r\n\r\nTextArea.displayName = \"TextArea\";\r\n\r\nexport { TextArea };\r\n","import { Icon } from \"@iconify/react\";\r\nimport React, { useState, useEffect, useRef } from \"react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nconst ImagePicker = ({\r\n label = \"\",\r\n value = null,\r\n onChange,\r\n required = false,\r\n accept = \"image/*\",\r\n id,\r\n dragDrop = false,\r\n name = \"\",\r\n parentClass = \"\",\r\n}) => {\r\n const [image, setImage] = useState(value);\r\n const [isDragging, setIsDragging] = useState(false);\r\n const inputRef = useRef(null);\r\n\r\n useEffect(() => {\r\n setImage(value instanceof File ? URL.createObjectURL(value) : value);\r\n }, [value]);\r\n\r\n const handleFileChange = (files) => {\r\n if (!files || files.length === 0) {\r\n setImage(null);\r\n onChange?.(null);\r\n return;\r\n }\r\n\r\n const file = files[0];\r\n const preview = URL.createObjectURL(file);\r\n const imgObj = { file, preview };\r\n\r\n setImage(imgObj);\r\n onChange?.(file);\r\n };\r\n\r\n // Drag events\r\n const handleDragOver = (e) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(true);\r\n };\r\n\r\n const handleDragLeave = (e) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(false);\r\n };\r\n\r\n const handleDrop = (e) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(false);\r\n handleFileChange(e.dataTransfer.files);\r\n };\r\n\r\n return (\r\n <>\r\n <div key={name} className={parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n <div\r\n className={`relative rounded-md p-2 transition-all ${\r\n isDragging\r\n ? \"border border-dashed border-blue-500 bg-blue-50 dark:bg-blue-900\"\r\n : \"border bg-gray-50 dark:bg-gray-700\"\r\n }`}\r\n onDragOver={handleDragOver}\r\n onDragLeave={handleDragLeave}\r\n onDrop={handleDrop}\r\n >\r\n {/* Blur entire content when dragging */}\r\n <div\r\n className={`flex items-center space-x-3 transition-all ${\r\n isDragging ? \"filter blur-sm\" : \"\"\r\n }`}\r\n >\r\n {/* Left: preview clickable */}\r\n <div\r\n className=\"cursor-pointer\"\r\n onClick={() => inputRef.current.click()}\r\n >\r\n {image ? (\r\n <img\r\n src={image.preview || image}\r\n alt=\"preview\"\r\n className=\"object-cover w-20 h-20 rounded-full\"\r\n />\r\n ) : (\r\n <>\r\n <div className=\"rounded-full bg-gray-200 dark:bg-gray-800 h-20 w-20 flex items-center justify-center\">\r\n <Icon\r\n icon=\"ri:image-add-fill\"\r\n className=\"text-gray-400 w-10 h-10\"\r\n />\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n\r\n {/* Right: upload input */}\r\n <input\r\n ref={inputRef}\r\n id={id}\r\n type=\"file\"\r\n accept={accept}\r\n onChange={(e) => handleFileChange(e.target.files)}\r\n required={required && !image}\r\n className=\"inline-flex items-center justify-center p-2 text-gray-400 text-sm file:cursor-pointer\"\r\n />\r\n </div>\r\n\r\n {/* Overlay text */}\r\n {dragDrop && isDragging && (\r\n <div className=\"absolute inset-0 flex items-center justify-center pointer-events-none\">\r\n <span className=\"text-blue-500 font-semibold text-xl\">\r\n Drop here\r\n </span>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default ImagePicker;\r\n","import React, { useState } from \"react\";\r\nimport { Icon } from \"@iconify/react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nconst Input = React.forwardRef(\r\n (\r\n {\r\n label,\r\n required,\r\n parentClass = \"\",\r\n className = \"\",\r\n type = \"text\",\r\n onKeyDown,\r\n negativeNumberAllow = true,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const [showPassword, setShowPassword] = useState(false);\r\n\r\n const handleKeyDown = (e) => {\r\n if (type === \"number\") {\r\n const blockedKeys = [\"e\", \"E\", \"+\"];\r\n\r\n // Block e, E, +\r\n if (blockedKeys.includes(e.key)) {\r\n e.preventDefault();\r\n return;\r\n }\r\n\r\n // Block negative sign if not allowed\r\n if (negativeNumberAllow == false && e.key === \"-\") {\r\n e.preventDefault();\r\n return;\r\n }\r\n\r\n // Block arrow up/down from changing value\r\n if ([\"ArrowUp\", \"ArrowDown\"].includes(e.key)) {\r\n e.preventDefault();\r\n return;\r\n }\r\n }\r\n\r\n onKeyDown?.(e);\r\n };\r\n\r\n const combinedClassName = `\r\n h-10 placeholder-gray-400 dark:placeholder-gray-400\r\n ${type === \"password\" ? \"pr-10\" : \"\"}\r\n ${type === \"number\" ? \"no-spinner\" : \"\"}\r\n ${className}\r\n `.trim();\r\n\r\n return (\r\n <>\r\n <div key={props.name} className={parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n <div className=\"relative\">\r\n <input\r\n type={type === \"password\" && showPassword ? \"text\" : type}\r\n ref={ref}\r\n required={required}\r\n onKeyDown={handleKeyDown}\r\n className={combinedClassName}\r\n {...props}\r\n />\r\n\r\n {type === \"password\" && (\r\n <button\r\n type=\"button\"\r\n tabIndex={-1}\r\n onClick={() => setShowPassword((prev) => !prev)}\r\n className=\"absolute inset-y-0 right-3 flex items-center text-gray-400 hover:text-gray-600 dark:text-gray-400 dark:hover:text-gray-200\"\r\n >\r\n <Icon\r\n icon={\r\n showPassword ? \"mdi:eye-off-outline\" : \"mdi:eye-outline\"\r\n }\r\n className=\"w-5 h-5\"\r\n />\r\n </button>\r\n )}\r\n </div>\r\n </div>\r\n </>\r\n );\r\n },\r\n);\r\n\r\nInput.displayName = \"Input\";\r\n\r\nexport { Input };\r\n","import React from \"react\";\r\nimport { Editor } from \"@tinymce/tinymce-react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nconst TinyEditor = ({\r\n key,\r\n editorKey = \"\",\r\n value = \"\",\r\n onChange,\r\n label = \"\",\r\n required = false,\r\n placeholder = \"\",\r\n parentClass = \"col-span-12\",\r\n height = 400,\r\n inline = false,\r\n disabled = false,\r\n plugins,\r\n toolbar,\r\n menubar = false,\r\n fontFamily = \"Inter, sans-serif\",\r\n initConfig = {},\r\n imageUploadHandler, // ✅ Promise function passed from parent\r\n}) => {\r\n const defaultPlugins = [\r\n \"advlist\",\r\n \"autolink\",\r\n \"lists\",\r\n \"link\",\r\n \"image\",\r\n \"charmap\",\r\n \"preview\",\r\n \"anchor\",\r\n \"searchreplace\",\r\n \"visualblocks\",\r\n \"code\",\r\n \"fullscreen\",\r\n \"insertdatetime\",\r\n \"media\",\r\n \"table\",\r\n \"help\",\r\n \"wordcount\",\r\n ];\r\n\r\n const defaultToolbar =\r\n \"undo redo | blocks | bold italic underline forecolor backcolor | \" +\r\n \"alignleft aligncenter alignright alignjustify | \" +\r\n \"bullist numlist outdent indent | link image media table | \" +\r\n \"removeformat | code fullscreen preview\";\r\n\r\n // ✅ Handle Image Upload via Promise\r\n const handleImageUpload = (blobInfo) => {\r\n return new Promise((resolve, reject) => {\r\n if (!imageUploadHandler) {\r\n // fallback to base64 if no handler provided\r\n resolve(`data:${blobInfo.blob().type};base64,${blobInfo.base64()}`);\r\n return;\r\n }\r\n\r\n imageUploadHandler(blobInfo)\r\n .then((url) => {\r\n if (!url) {\r\n reject(\"Upload failed: No URL returned\");\r\n } else {\r\n resolve(url);\r\n }\r\n })\r\n .catch((error) => {\r\n reject(\r\n typeof error === \"string\"\r\n ? error\r\n : error?.message || \"Image upload failed\",\r\n );\r\n });\r\n });\r\n };\r\n\r\n return (\r\n <div key={key} className={parentClass}>\r\n {label && <InputLabel label={label} required={required} />}\r\n\r\n <Editor\r\n apiKey={editorKey}\r\n value={value}\r\n disabled={disabled}\r\n init={{\r\n height,\r\n inline,\r\n menubar,\r\n branding: false,\r\n statusbar: true,\r\n automatic_uploads: true,\r\n images_upload_handler: handleImageUpload,\r\n plugins: plugins ?? defaultPlugins,\r\n toolbar: toolbar ?? defaultToolbar,\r\n placeholder,\r\n content_style: `\r\n body {\r\n font-family: ${fontFamily};\r\n }\r\n `,\r\n ...initConfig,\r\n }}\r\n onEditorChange={(content) => {\r\n if (onChange) {\r\n onChange(content);\r\n }\r\n }}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nexport default TinyEditor;\r\n","import React from \"react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nconst Checkbox = ({\r\n name = \"\",\r\n label = \"\", // label for single checkbox\r\n options = [], // array of { label, value } for multiple\r\n value = null, // boolean for single, array for multiple, or string for single select\r\n onChange,\r\n disabled = false,\r\n required = false,\r\n parentClass = \"col-span-12\",\r\n className = \"\",\r\n multiSelect = false, // ✅ if true, only one option can be selected (like radio)\r\n}) => {\r\n // Detect if multiple options are present\r\n const multiple = Array.isArray(options) && options.length > 0;\r\n\r\n // Check if a value is selected\r\n const isChecked = (optionValue) => {\r\n if (multiple) {\r\n if (!multiSelect) return value === optionValue;\r\n return Array.isArray(value) && value.includes(optionValue);\r\n }\r\n return Boolean(value);\r\n };\r\n\r\n // Handle change for single checkbox\r\n const handleSingleChange = (e) => {\r\n onChange?.(e.target.checked, name);\r\n };\r\n\r\n // Handle change for multiple checkboxes\r\n const handleMultipleChange = (optionValue, checked) => {\r\n if (!onChange) return;\r\n\r\n if (!multiSelect) {\r\n if (checked) {\r\n onChange(optionValue, name);\r\n } else {\r\n onChange(\"\", name);\r\n }\r\n // Only allow one selected\r\n } else {\r\n const newValue = Array.isArray(value) ? [...value] : [];\r\n if (checked) {\r\n if (!newValue.includes(optionValue)) newValue.push(optionValue);\r\n } else {\r\n const index = newValue.indexOf(optionValue);\r\n if (index > -1) newValue.splice(index, 1);\r\n }\r\n onChange(newValue, name);\r\n }\r\n };\r\n\r\n // ---------------- JSX ----------------\r\n if (multiple) {\r\n // Multiple options\r\n return (\r\n <>\r\n <div className={`${parentClass}`}>\r\n <InputLabel label={label} required={required} />\r\n <div className={`flex flex-col space-y-2`}>\r\n {options.map((opt, idx) => (\r\n <div key={opt.value || opt.label} className=\"flex items-center\">\r\n <input\r\n type=\"checkbox\"\r\n name={name}\r\n value={opt.value}\r\n checked={isChecked(opt.value)}\r\n disabled={disabled || opt.disabled}\r\n required={required && idx === 0}\r\n onChange={(e) =>\r\n handleMultipleChange(opt.value, e.target.checked)\r\n }\r\n key={name}\r\n className={`h-4 w-4 cursor-pointer text-blue-600 border-gray-300 rounded focus:ring-2 focus:ring-blue-500 dark:focus:ring-blue-400 ${className}`}\r\n />\r\n {opt.label && (\r\n <label\r\n htmlFor={name}\r\n className=\"ml-2 text-sm text-gray-700 dark:text-gray-200 select-none\"\r\n >\r\n {opt.label}\r\n </label>\r\n )}\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </>\r\n );\r\n }\r\n\r\n // Single checkbox\r\n return (\r\n <div className={`flex items-center ${parentClass}`}>\r\n <input\r\n type=\"checkbox\"\r\n name={name}\r\n checked={isChecked()}\r\n disabled={disabled}\r\n required={required}\r\n onChange={handleSingleChange}\r\n className={`h-4 w-4 text-blue-600 cursor-pointer border-gray-300 rounded focus:ring-2 focus:ring-blue-500 dark:focus:ring-blue-400 ${className}`}\r\n />\r\n {label && (\r\n <label\r\n htmlFor={name}\r\n className=\"ml-2 text-sm text-gray-700 dark:text-gray-200 select-none\"\r\n >\r\n {label}\r\n </label>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default Checkbox;\r\n","import { Icon } from \"@iconify/react\";\r\nimport React, { useState, useEffect, useRef } from \"react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nconst AudioPicker = ({\r\n label = \"\",\r\n value = null,\r\n onChange,\r\n required = false,\r\n accept = \"audio/*\",\r\n id,\r\n dragDrop = false,\r\n name = \"\",\r\n parentClass = \"\",\r\n}) => {\r\n const [audio, setAudio] = useState(null);\r\n const [isDragging, setIsDragging] = useState(false);\r\n const inputRef = useRef(null);\r\n\r\n // Sync external value\r\n useEffect(() => {\r\n if (!value) {\r\n setAudio(null);\r\n return;\r\n }\r\n\r\n if (value instanceof File) {\r\n const preview = URL.createObjectURL(value);\r\n setAudio({ file: value, preview });\r\n\r\n return () => {\r\n URL.revokeObjectURL(preview);\r\n };\r\n } else {\r\n setAudio({ preview: value });\r\n }\r\n }, [value]);\r\n\r\n const handleFileChange = (files) => {\r\n if (!files || files.length === 0) {\r\n if (audio?.preview) {\r\n URL.revokeObjectURL(audio.preview);\r\n }\r\n setAudio(null);\r\n onChange?.(null);\r\n return;\r\n }\r\n\r\n const file = files[0];\r\n const preview = URL.createObjectURL(file);\r\n\r\n // Cleanup previous preview\r\n if (audio?.preview) {\r\n URL.revokeObjectURL(audio.preview);\r\n }\r\n\r\n setAudio({ file, preview });\r\n onChange?.(file);\r\n };\r\n\r\n // Drag Events\r\n const handleDragOver = (e) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(true);\r\n };\r\n\r\n const handleDragLeave = (e) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(false);\r\n };\r\n\r\n const handleDrop = (e) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(false);\r\n handleFileChange(e.dataTransfer.files);\r\n };\r\n\r\n return (\r\n <div key={name} className={parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n\r\n <div\r\n className={`relative rounded-md p-3 transition-all ${\r\n isDragging\r\n ? \"border border-dashed border-blue-500 bg-blue-50 dark:bg-blue-900\"\r\n : \"border bg-gray-50 dark:bg-gray-700\"\r\n }`}\r\n onDragOver={handleDragOver}\r\n onDragLeave={handleDragLeave}\r\n onDrop={handleDrop}\r\n >\r\n <div\r\n className={`flex items-center space-x-4 transition-all ${\r\n isDragging ? \"filter blur-sm\" : \"\"\r\n }`}\r\n >\r\n {/* Audio Preview / Icon */}\r\n <div\r\n className=\"cursor-pointer\"\r\n onClick={() => inputRef.current?.click()}\r\n >\r\n {audio ? (\r\n <audio\r\n key={audio.preview} // 🔥 forces reload when changed\r\n controls\r\n src={audio.preview}\r\n className=\"w-64\"\r\n />\r\n ) : (\r\n <div className=\"rounded-md bg-gray-200 dark:bg-gray-800 h-16 w-16 flex items-center justify-center\">\r\n <Icon\r\n icon=\"mdi:music\"\r\n className=\"text-gray-400 w-8 h-8\"\r\n />\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* File Input */}\r\n <input\r\n ref={inputRef}\r\n id={id}\r\n type=\"file\"\r\n accept={accept}\r\n onChange={(e) => handleFileChange(e.target.files)}\r\n required={required && !audio}\r\n className=\"inline-flex items-center justify-center p-2 text-gray-400 text-sm file:cursor-pointer\"\r\n />\r\n </div>\r\n\r\n {/* Drag Overlay */}\r\n {dragDrop && isDragging && (\r\n <div className=\"absolute inset-0 flex items-center justify-center pointer-events-none\">\r\n <span className=\"text-blue-500 font-semibold text-xl\">\r\n Drop audio here\r\n </span>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default AudioPicker;","import React from \"react\";\r\nimport Select from \"./Select\";\r\nimport Switch from \"./Switch\";\r\nimport PhoneInput from \"./PhoneInput\";\r\nimport { TextArea } from \"./TextArea\";\r\nimport ImagePicker from \"./ImagePicker\";\r\nimport { Input } from \"./Input\";\r\nimport TinyEditor from \"./TinyEditor\";\r\nimport Checkbox from \"./Checkbox\";\r\nimport AudioPicker from \"./AudioPicker\";\r\n\r\nconst RenderFields = ({ field, formData, handleChange }) => {\r\n const {\r\n key,\r\n label,\r\n type,\r\n options,\r\n placeholder,\r\n rows,\r\n inputClass,\r\n search,\r\n accept,\r\n text,\r\n required = false,\r\n minLength,\r\n dragDrop,\r\n parentClass,\r\n countriesList,\r\n defaultCountry,\r\n multiple,\r\n dropdownMaxHeight,\r\n editorKey,\r\n fontFamily,\r\n disabled,\r\n negativeNumberAllow,\r\n } = field;\r\n\r\n let value = formData?.[key];\r\n if (value === undefined || value === null) {\r\n value = \"\";\r\n }\r\n\r\n const finalPlaceholder =\r\n placeholder || (type === \"select\" ? `Select ${label}` : `Enter ${label}`);\r\n\r\n const baseClass =\r\n \"w-full px-3 py-2 rounded-md border border-gray-300 dark:border-gray-600 text-sm focus:outline-none focus:ring-1 focus:ring-blue-200 bg-white text-black dark:bg-gray-700 dark:text-white\";\r\n\r\n switch (type) {\r\n case \"select\":\r\n return (\r\n <Select\r\n options={options || []}\r\n value={value}\r\n onChange={(val) => handleChange(key, val)}\r\n placeholder={finalPlaceholder}\r\n className={inputClass || \"\"}\r\n search={search}\r\n required={required}\r\n label={label}\r\n name={key}\r\n disabled={disabled}\r\n parentClass={parentClass}\r\n multiple={multiple}\r\n dropdownMaxHeight={dropdownMaxHeight}\r\n />\r\n );\r\n\r\n case \"checkbox\":\r\n return (\r\n <Checkbox\r\n name={key}\r\n label={label}\r\n options={options || []}\r\n value={value}\r\n onChange={(val) => handleChange(key, val)}\r\n required={required}\r\n parentClass={parentClass}\r\n className={inputClass || \"\"}\r\n multiSelect={multiple}\r\n disabled={disabled}\r\n />\r\n );\r\n\r\n case \"switch\":\r\n return (\r\n <Switch\r\n value={value}\r\n onChange={(val) => handleChange(key, val)}\r\n text={text}\r\n options={options || []}\r\n label={label}\r\n required={required}\r\n name={key}\r\n disabled={disabled}\r\n parentClass={parentClass}\r\n />\r\n );\r\n\r\n case \"phone\":\r\n return (\r\n <PhoneInput\r\n value={value}\r\n onChange={(val) => handleChange(key, val)}\r\n countriesList={countriesList}\r\n defaultCountry={defaultCountry}\r\n required={required}\r\n placeholder={finalPlaceholder}\r\n search={search}\r\n label={label}\r\n name={key}\r\n disabled={disabled}\r\n parentClass={parentClass}\r\n />\r\n );\r\n\r\n case \"textarea\":\r\n return (\r\n <TextArea\r\n value={value}\r\n onChange={(e) => handleChange(key, e.target.value)}\r\n placeholder={finalPlaceholder}\r\n rows={rows || 3}\r\n className={`${baseClass} ${inputClass || \"\"}`}\r\n required={required}\r\n name={key}\r\n label={label}\r\n disabled={disabled}\r\n parentClass={parentClass}\r\n />\r\n );\r\n\r\n case \"image\":\r\n return (\r\n <ImagePicker\r\n value={value}\r\n onChange={(imgObj) => handleChange(key, imgObj)}\r\n required={required}\r\n accept={accept || \"image/*\"}\r\n id={`file-${key}`}\r\n dragDrop={dragDrop}\r\n label={label}\r\n name={key}\r\n parentClass={parentClass}\r\n />\r\n );\r\n case \"audio\":\r\n return (\r\n <AudioPicker\r\n value={value}\r\n onChange={(audio) => handleChange(key, audio)}\r\n required={required}\r\n accept={accept || \"audio/*\"}\r\n id={`file-${key}`}\r\n dragDrop={dragDrop}\r\n label={label}\r\n name={key}\r\n parentClass={parentClass}\r\n />\r\n );\r\n\r\n case \"tinyEditor\":\r\n return (\r\n <TinyEditor\r\n value={value}\r\n onChange={(newValue) => handleChange(key, newValue)}\r\n required={required}\r\n key={`editor-${key}`}\r\n placeholder={finalPlaceholder}\r\n label={label}\r\n parentClass={parentClass}\r\n fontFamily={fontFamily}\r\n editorKey={editorKey}\r\n disabled={disabled}\r\n />\r\n );\r\n\r\n default:\r\n return (\r\n <Input\r\n type={type || \"text\"}\r\n value={value}\r\n onChange={(e) => handleChange(key, e.target.value)}\r\n placeholder={finalPlaceholder}\r\n className={`${baseClass} ${inputClass || \"\"}`}\r\n required={required}\r\n name={key}\r\n minLength={minLength}\r\n label={label}\r\n negativeNumberAllow={negativeNumberAllow}\r\n parentClass={parentClass}\r\n disabled={disabled}\r\n />\r\n );\r\n }\r\n};\r\n\r\nexport default RenderFields;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { X } from \"lucide-react\";\r\nimport Button from \"../Button/Button\";\r\nimport RenderFields from \"../Form/components/RenderFields\";\r\n\r\nconst FilterDrawer = ({ isOpen, onClose, config, onApply }) => {\r\n const [filters, setFilters] = useState({});\r\n\r\n const handleChange = (key, value) => {\r\n setFilters((prev) => ({ ...prev, [key]: value }));\r\n };\r\n\r\n const handleApply = () => {\r\n onApply?.(filters);\r\n onClose();\r\n };\r\n\r\n const handleReset = () => {\r\n setFilters({});\r\n onApply?.({});\r\n onClose();\r\n };\r\n\r\n return (\r\n <>\r\n {/* Overlay */}\r\n <div\r\n className={`fixed inset-0 bg-black/50 z-40 transition-opacity duration-300 ${\r\n isOpen\r\n ? \"opacity-100 pointer-events-auto\"\r\n : \"opacity-0 pointer-events-none\"\r\n }`}\r\n onClick={onClose}\r\n />\r\n\r\n {/* Drawer */}\r\n <div\r\n className={`fixed top-0 right-0 h-full w-[28rem] bg-white dark:bg-gray-900 shadow-2xl z-50 flex flex-col border-l border-gray-200 dark:border-gray-700\r\n transform transition-transform duration-300 ease-in-out\r\n ${isOpen ? \"translate-x-0\" : \"translate-x-full\"}\r\n `}\r\n >\r\n {/* Header */}\r\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-gray-200 dark:border-gray-700\">\r\n <h2 className=\"text-lg font-semibold text-gray-900 dark:text-white\">\r\n Filters\r\n </h2>\r\n <button\r\n onClick={onClose}\r\n className=\"p-2 hover:bg-gray-100 dark:hover:bg-gray-800 rounded-md transition\"\r\n >\r\n <X className=\"w-5 h-5 text-gray-500 dark:text-gray-400\" />\r\n </button>\r\n </div>\r\n\r\n {/* Content */}\r\n <div className=\"flex-1 overflow-y-auto px-4 py-3\">\r\n {config?.component ? (\r\n <config.component filters={filters} onFilterChange={handleChange} />\r\n ) : (\r\n <div className=\"space-y-4\">\r\n {config?.fields?.map((field) => (\r\n <>\r\n <RenderFields\r\n key={field.key}\r\n field={field}\r\n formData={filters}\r\n handleChange={handleChange}\r\n />\r\n </>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Footer */}\r\n <div className=\"flex gap-2 px-4 py-3 border-t border-gray-200 dark:border-gray-700\">\r\n <Button\r\n onClick={handleApply}\r\n variant=\"contained\"\r\n color=\"primary\"\r\n fullWidth\r\n >\r\n Apply Filters\r\n </Button>\r\n <Button\r\n onClick={handleReset}\r\n variant=\"contained\"\r\n className=\"min-w-[150px]\"\r\n >\r\n Reset\r\n </Button>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default FilterDrawer;\r\n","import React from \"react\";\r\n\r\nconst BADGE_COLORS = {\r\n blue: {\r\n bg: \"bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-300\",\r\n border:\r\n \"border border-blue-300 text-blue-700 dark:border-blue-700 dark:text-blue-300\",\r\n },\r\n teal: {\r\n bg: \"bg-teal-100 text-teal-800 dark:bg-teal-900/30 dark:text-teal-300\",\r\n border:\r\n \"border border-teal-300 text-teal-700 dark:border-teal-700 dark:text-teal-300\",\r\n },\r\n purple: {\r\n bg: \"bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300\",\r\n border:\r\n \"border border-purple-300 text-purple-700 dark:border-purple-700 dark:text-purple-300\",\r\n },\r\n yellow: {\r\n bg: \"bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-300\",\r\n border:\r\n \"border border-yellow-300 text-yellow-700 dark:border-yellow-700 dark:text-yellow-300\",\r\n },\r\n green: {\r\n bg: \"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300\",\r\n border:\r\n \"border border-green-300 text-green-700 dark:border-green-700 dark:text-green-300\",\r\n },\r\n red: {\r\n bg: \"bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-300\",\r\n border:\r\n \"border border-red-300 text-red-700 dark:border-red-700 dark:text-red-300\",\r\n },\r\n gray: {\r\n bg: \"bg-gray-100 text-gray-800 dark:bg-gray-900/30 dark:text-gray-300\",\r\n border:\r\n \"border border-gray-300 text-gray-700 dark:border-gray-700 dark:text-gray-300\",\r\n },\r\n};\r\n\r\nconst BADGE_VARIANTS = {\r\n contained: \"bg\",\r\n outline: \"border !bg-transparent\",\r\n soft: \"bg opacity-90\",\r\n};\r\n\r\nconst Chip = ({\r\n label,\r\n variant = \"contained\", // contained | outline | soft\r\n color = \"green\",\r\n className = \"\",\r\n}) => {\r\n const colorConfig = BADGE_COLORS[color] || BADGE_COLORS.green;\r\n const variantKey = BADGE_VARIANTS[variant] || BADGE_VARIANTS.contained;\r\n\r\n const variantClasses =\r\n variant === \"outline\" ? colorConfig.border : colorConfig.bg;\r\n\r\n return (\r\n <span\r\n className={`inline-flex justify-center items-center rounded-sm text-xs font-semibold px-3 py-1 min-w-[78px]\r\n ${variantClasses}\r\n ${variantKey}\r\n ${className}`}\r\n >\r\n {label}\r\n </span>\r\n );\r\n};\r\n\r\nexport default Chip;\r\n","const TableSkeleton = ({ rows = 5, columns = 5 }) => {\r\n return (\r\n <>\r\n <div className=\"w-full mb-6 inline-flex justify-end items-center\">\r\n <div className=\"h-8 w-80 bg-gray-300 dark:bg-gray-700 rounded animate-pulse\" />\r\n </div>\r\n <div className=\"overflow-hidden rounded-md border border-gray-200 dark:border-gray-800\">\r\n <table className=\"w-full border-collapse\">\r\n <thead>\r\n <tr className=\"bg-gray-50 dark:bg-gray-900\">\r\n {Array.from({ length: columns }).map((_, i) => (\r\n <th key={i} className=\"px-4 py-3\">\r\n <div className=\"h-6 w-24 bg-gray-300 dark:bg-gray-700 rounded animate-pulse inline-flex justify-center items-center\" />\r\n </th>\r\n ))}\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n {Array.from({ length: rows }).map((_, rowIndex) => (\r\n <tr\r\n key={rowIndex}\r\n className=\"border-t border-gray-200 dark:border-gray-800\"\r\n >\r\n {Array.from({ length: columns }).map((_, colIndex) => (\r\n <td key={colIndex} className=\"px-4 py-6\">\r\n <div className=\"h-6 w-full bg-gray-300 dark:bg-gray-700 rounded animate-pulse\" />\r\n </td>\r\n ))}\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default TableSkeleton;\r\n","import { useEffect } from \"react\";\r\nimport { X } from \"lucide-react\";\r\n\r\nconst ImagePreview = ({ src, alt = \"preview\", isOpen, setIsOpen }) => {\r\n const closePreview = () => setIsOpen(false);\r\n\r\n // Handle ESC key + prevent body scroll\r\n useEffect(() => {\r\n const handleEsc = (e) => {\r\n if (e.key === \"Escape\") closePreview();\r\n };\r\n\r\n if (isOpen) {\r\n document.body.style.overflow = \"hidden\";\r\n document.addEventListener(\"keydown\", handleEsc);\r\n }\r\n\r\n return () => {\r\n document.body.style.overflow = \"\";\r\n document.removeEventListener(\"keydown\", handleEsc);\r\n };\r\n }, [isOpen]);\r\n\r\n return (\r\n <>\r\n {/* Fullscreen Preview */}\r\n <div\r\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/70 dark:bg-black/80 \r\n backdrop-blur-sm animate-in fade-in duration-200\"\r\n onClick={closePreview}\r\n >\r\n {/* Close Button */}\r\n <button\r\n onClick={closePreview}\r\n className=\"absolute top-4 right-4 bg-white dark:bg-gray-800 text-gray-800 dark:text-gray-200\r\n hover:bg-gray-100 dark:hover:bg-gray-700 rounded-full p-2 shadow-lg transition\"\r\n >\r\n <X size={20} />\r\n </button>\r\n\r\n {/* Image Container */}\r\n <div\r\n className=\"max-w-5xl w-full px-4 transform transition-all duration-200 scale-95 animate-in zoom-in-95\"\r\n onClick={(e) => e.stopPropagation()}\r\n >\r\n {/* Large Image */}\r\n <img\r\n src={src}\r\n alt={alt}\r\n className=\"w-full max-h-[90vh] object-contain rounded-xl\"\r\n />\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default ImagePreview;\r\n","import React, { useState, useMemo, useRef, useEffect } from \"react\";\r\nimport {\r\n ChevronLeft,\r\n ChevronRight,\r\n Search,\r\n EllipsisVertical,\r\n Filter,\r\n User,\r\n Music,\r\n} from \"lucide-react\";\r\nimport { createPortal } from \"react-dom\";\r\nimport { formatDate, searchLocalData } from \"../../lib/utils\";\r\nimport Button from \"../Button/Button\";\r\nimport FilterDrawer from \"../Filter/FilterDrawer\";\r\nimport Chip from \"../Chip/Chip\";\r\nimport TableSkeleton from \"./components/TableSkeleton\";\r\nimport ImagePreview from \"./components/ImagePreview\";\r\n\r\nconst Table = ({ config }) => {\r\n const {\r\n data = [],\r\n table_head = [],\r\n loading = false,\r\n search = {\r\n enabled: false,\r\n placeholder: \"Search...\",\r\n useServerSideSearch: false,\r\n },\r\n filter = {\r\n enabled: false,\r\n useServerSideFilters: false,\r\n },\r\n pagination = {\r\n enabled: false,\r\n rows_per_page: 10,\r\n useServerSidePagination: false,\r\n },\r\n emptyMessage = \"No data available\",\r\n onMenuAction,\r\n setServerSidePaginationData = () => {},\r\n onFilterApply,\r\n filterConfig = null,\r\n } = config;\r\n\r\n const [searchTerm, setSearchTerm] = useState(\"\");\r\n const [activeMenu, setActiveMenu] = useState(null);\r\n const [menuList, setMenuList] = useState([]);\r\n const [menuPosition, setMenuPosition] = useState({});\r\n const [showFilters, setShowFilters] = useState(false);\r\n\r\n // image preview\r\n const [targetImage, setTargetImage] = useState(null);\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const filteredData = useMemo(() => {\r\n if (!search.enabled || !searchTerm.trim()) return data;\r\n if (search.useServerSideSearch) return data;\r\n return searchLocalData(data, searchTerm, search.searchKeys || []);\r\n }, [data, searchTerm, search]);\r\n\r\n const [currentPage, setCurrentPage] = useState(1);\r\n const [pageSize, setPageSize] = useState(pagination?.rows_per_page || 50);\r\n const [totalRecords, setTotalRecords] = useState(filteredData.length || 0);\r\n\r\n const totalPages = pagination?.useServerSidePagination\r\n ? pagination.total_pages\r\n : Math.ceil(filteredData.length / pageSize);\r\n\r\n const paginatedData = useMemo(() => {\r\n if (pagination.useServerSidePagination) return filteredData;\r\n const start = (currentPage - 1) * pageSize;\r\n return filteredData.slice(start, start + pageSize);\r\n }, [filteredData, currentPage, pageSize]);\r\n\r\n const menuRef = useRef(null);\r\n const buttonRefs = useRef({});\r\n const searchTimeoutRef = useRef(null);\r\n\r\n const handleSearchChange = (value) => {\r\n setSearchTerm(value);\r\n setCurrentPage(1);\r\n\r\n if (search.useServerSideSearch) {\r\n if (searchTimeoutRef.current) clearTimeout(searchTimeoutRef.current);\r\n\r\n searchTimeoutRef.current = setTimeout(async () => {\r\n try {\r\n await setServerSidePaginationData((prev) => ({\r\n ...prev,\r\n search: value,\r\n current_page: 1,\r\n }));\r\n } catch (error) {\r\n console.error(\"Search error:\", error);\r\n }\r\n }, 800);\r\n }\r\n };\r\n\r\n const handleActionClick = (action, item, e) => {\r\n e.stopPropagation();\r\n setActiveMenu(null);\r\n onMenuAction?.(action.type, item);\r\n };\r\n\r\n const handleMenuToggle = (itemId, e, menu_list) => {\r\n e.stopPropagation();\r\n setMenuList(menu_list);\r\n const button = e.currentTarget;\r\n buttonRefs.current[itemId] = button;\r\n const rect = button.getBoundingClientRect();\r\n const menuWidth = 192;\r\n const menuHeight = menu_list.length * 40;\r\n const viewportWidth = window.innerWidth;\r\n const viewportHeight = window.innerHeight;\r\n\r\n const openLeft = viewportWidth - rect.right < menuWidth;\r\n const left = openLeft ? rect.left - menuWidth + rect.width : rect.left;\r\n\r\n const openUp =\r\n viewportHeight - rect.bottom < menuHeight && rect.top > menuHeight;\r\n const top = openUp ? rect.top - menuHeight - 2 : rect.bottom + 2;\r\n\r\n setMenuPosition({\r\n top: Math.max(8, Math.min(top, viewportHeight - menuHeight - 8)),\r\n left: Math.max(8, Math.min(left, viewportWidth - menuWidth - 8)),\r\n });\r\n\r\n setActiveMenu(activeMenu === itemId ? null : itemId);\r\n };\r\n\r\n const calculateRowNumber = (index) => {\r\n return (currentPage - 1) * pageSize + index + 1;\r\n };\r\n\r\n const openPreview = (image) => {\r\n setTargetImage(image);\r\n setIsOpen(true);\r\n };\r\n\r\n const renderAvatar = (\r\n imageSrc,\r\n imageAlt,\r\n className,\r\n fallback_icon = null,\r\n ) => {\r\n return (\r\n <>\r\n {imageSrc ? (\r\n <img\r\n src={imageSrc}\r\n alt={imageAlt || \"Avatar\"}\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n openPreview({ src: imageSrc, alt: imageAlt });\r\n }}\r\n className={`w-10 h-10 cursor-pointer rounded-full object-cover border border-gray-200 dark:border-gray-700 ${className || \"\"}`}\r\n />\r\n ) : (\r\n <>\r\n {fallback_icon ? (\r\n fallback_icon\r\n ) : (\r\n <div\r\n className={`w-10 h-10 flex items-center justify-center rounded-full border border-gray-300 dark:border-gray-700 bg-gray-200 dark:bg-gray-600 ${className || \"\"}`}\r\n >\r\n <User className=\"w-6 h-6 text-gray-400 dark:text-gray-400\" />\r\n </div>\r\n )}\r\n </>\r\n )}\r\n </>\r\n );\r\n };\r\n\r\n const renderAudio = (audioSrc, className) => {\r\n return (\r\n <>\r\n {audioSrc ? (\r\n <audio\r\n key={audioSrc} // 🔥 ensures latest audio reloads\r\n controls\r\n src={audioSrc}\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n }}\r\n className={`w-64 cursor-pointer ${className || \"\"}`}\r\n />\r\n ) : (\r\n <>\r\n <div\r\n className={`w-12 h-12 flex items-center justify-center rounded-full border border-gray-300 dark:border-gray-700 bg-gray-200 dark:bg-gray-600 ${className || \"\"}`}\r\n >\r\n <Music className=\"w-6 h-6 text-gray-400 dark:text-gray-400\" />\r\n </div>\r\n </>\r\n )}\r\n </>\r\n );\r\n };\r\n\r\n const renderGroupCell = (row, col) => {\r\n return (\r\n <div className={`flex items-center space-x-4 ${col.className || \"\"}`}>\r\n {col.imageKey\r\n ? renderAvatar(row[col.imageKey], row[col.titleKey], \"group-avatar\")\r\n : \"\"}\r\n <div>\r\n <p className=\"font-medium text-gray-900 dark:text-white group-title\">\r\n {row[col.titleKey] || \"\"}\r\n </p>\r\n <p className=\"text-sm text-gray-500 dark:text-gray-400 group-sub-title\">\r\n {row[col.subtitleKey] || \"\"}\r\n </p>\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n const handleRenderChip = (value, col) => {\r\n let label = String(value);\r\n const variant = col.variant || \"contained\";\r\n let color = col.defaultColor;\r\n\r\n if (col?.chipOptions?.length > 0) {\r\n let chipObj = col?.chipOptions.find((obj) => obj.value == value);\r\n if (chipObj) {\r\n label = chipObj.label;\r\n color = chipObj.color;\r\n }\r\n }\r\n\r\n return (\r\n <Chip\r\n label={label}\r\n variant={variant}\r\n color={color}\r\n className={col.className || \"\"}\r\n />\r\n );\r\n };\r\n\r\n const handleRenderCellValue = (col, row, index) => {\r\n const value = row[col.key];\r\n if (col.type === \"menu_actions\") {\r\n return (\r\n <div className={`text-center ${col.className || \"\"}`}>\r\n <button\r\n ref={(el) => (buttonRefs.current[row.id || row._id] = el)}\r\n onClick={(e) =>\r\n handleMenuToggle(row.id || row._id, e, col.menuList)\r\n }\r\n className=\"p-2 bg-gray-100 dark:bg-gray-700 hover:bg-gray-200 dark:hover:bg-gray-600 rounded-full transition text-gray-700 dark:text-gray-300\"\r\n >\r\n <EllipsisVertical className=\"h-4 w-4\" />\r\n </button>\r\n </div>\r\n );\r\n } else if (col.type === \"index\") {\r\n return (\r\n <span className={col.className || \"\"}>{calculateRowNumber(index)}</span>\r\n );\r\n } else if (col.type === \"group\") {\r\n return renderGroupCell(row, col);\r\n } else if (col.type === \"chip\") {\r\n return <>{handleRenderChip(value, col)}</>;\r\n } else if (col.type === \"date\") {\r\n return (\r\n <span className={col.className || \"\"}>\r\n {formatDate(value, col.format || \"DD MMM YYYY\")}\r\n </span>\r\n );\r\n } else if (col.type === \"avatar\") {\r\n return (\r\n <>{renderAvatar(value, col.alt, col.className, col.fallback_icon)}</>\r\n );\r\n } else if (col.type === \"audio\") {\r\n return <>{renderAudio(value, col.className)}</>;\r\n } else {\r\n return <span className={col.className || \"\"}>{value || \"N/A\"}</span>;\r\n }\r\n };\r\n\r\n // handle CLick on cell\r\n\r\n const handleColumnClick = (col, row) => {\r\n if (col.onClickDetails) {\r\n return onMenuAction?.(\"view\", row);\r\n }\r\n\r\n if (typeof col.handleClick === \"function\") {\r\n return col.handleClick(row);\r\n }\r\n };\r\n\r\n // Helper to check if column is clickable\r\n const isColumnClickable = (col) =>\r\n col.onClickDetails || typeof col.handleClick === \"function\";\r\n\r\n // Close menu on scroll -------------------\r\n useEffect(() => {\r\n const handleScroll = () => {\r\n if (activeMenu) setActiveMenu(null);\r\n };\r\n\r\n window.addEventListener(\"scroll\", handleScroll, true);\r\n return () => {\r\n window.removeEventListener(\"scroll\", handleScroll, true);\r\n };\r\n }, [activeMenu]);\r\n\r\n useEffect(() => {\r\n const handleClickOutside = (e) => {\r\n if (menuRef.current && !menuRef.current.contains(e.target)) {\r\n setActiveMenu(null);\r\n }\r\n };\r\n document.addEventListener(\"click\", handleClickOutside);\r\n return () => document.removeEventListener(\"click\", handleClickOutside);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (pagination?.rows_per_page && pagination?.useServerSidePagination) {\r\n setPageSize(pagination?.rows_per_page || 50);\r\n }\r\n\r\n if (pagination.current_page) {\r\n setCurrentPage(pagination.current_page);\r\n }\r\n }, [\r\n pagination.rows_per_page,\r\n pagination?.useServerSidePagination,\r\n pagination.current_page,\r\n ]);\r\n\r\n useEffect(() => {\r\n setTotalRecords(\r\n pagination?.useServerSidePagination\r\n ? pagination.total_records\r\n : filteredData.length,\r\n );\r\n\r\n if (\r\n filteredData.length <= pageSize * (currentPage - 1) &&\r\n !pagination?.useServerSidePagination\r\n ) {\r\n setCurrentPage((prev) => prev - 1 || 1);\r\n }\r\n }, [\r\n filteredData.length,\r\n pagination.total_records,\r\n pagination?.useServerSidePagination,\r\n ]);\r\n\r\n if (loading) return <TableSkeleton rows={6} columns={6} />;\r\n\r\n return (\r\n <>\r\n {/* Search Bar */}\r\n <div className=\"flex justify-end items-center mb-4 gap-2\">\r\n {search.enabled && (\r\n <div className=\"\">\r\n <div className=\"relative min-w-[300px]\">\r\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400 dark:text-gray-300\" />\r\n <input\r\n type=\"text\"\r\n placeholder={search.placeholder || \"Search...\"}\r\n value={searchTerm}\r\n onChange={(e) => handleSearchChange(e.target.value)}\r\n className=\"w-full h-[36px] pl-9 pr-4 py-3 text-sm border border-gray-300 dark:border-gray-600 rounded-md bg-gray-50 dark:bg-gray-700 text-gray-900 dark:text-white placeholder-gray-500 dark:placeholder-gray-400 focus:outline-none focus:ring-1 focus:ring-blue-300 dark:ring-blue-200 disabled:opacity-50\"\r\n />\r\n </div>\r\n </div>\r\n )}\r\n\r\n {filterConfig && filter.enabled && (\r\n <Button onClick={() => setShowFilters(true)} variant=\"contained\">\r\n <Filter className=\"w-4 h-4 mr-2\" />\r\n Filters\r\n </Button>\r\n )}\r\n </div>\r\n\r\n {/* =========================== Table =========================== */}\r\n <div className=\"bg-white dark:bg-gray-800 rounded-lg shadow overflow-hidden border border-gray-200 dark:border-gray-700\">\r\n <div className=\"overflow-x-auto\">\r\n <table className=\"min-w-full divide-y divide-gray-200 dark:divide-gray-700\">\r\n <thead className=\"bg-gray-50 dark:bg-gray-700/60\">\r\n <tr>\r\n {table_head.map((col) => (\r\n <th\r\n key={col.key}\r\n className={`px-6 py-4 text-left text-xs font-medium text-black dark:text-white uppercase tracking-wider min-w-max max-w-[180px] truncate ${col.headClass || \"\"}`}\r\n >\r\n {col.title}\r\n </th>\r\n ))}\r\n </tr>\r\n </thead>\r\n\r\n <tbody className=\"bg-white dark:bg-gray-800 divide-y divide-gray-200 dark:divide-gray-700\">\r\n {paginatedData.length === 0 ? (\r\n <tr>\r\n <td\r\n colSpan={table_head.length}\r\n className=\"text-center py-10 text-gray-500 dark:text-gray-400\"\r\n >\r\n {emptyMessage}\r\n </td>\r\n </tr>\r\n ) : (\r\n paginatedData.map((row, index) => (\r\n <tr\r\n key={row.id || row._id || index}\r\n className=\"hover:bg-gray-50 dark:hover:bg-blue-800/10 transition\"\r\n >\r\n {table_head.map((col) => (\r\n <td\r\n key={col.key}\r\n className={`px-6 py-4 text-sm text-gray-900 dark:text-gray-100 min-w-max ${col.type == \"audio\" ? \"\" : \"max-w-[300px]\"} truncate ${\r\n isColumnClickable(col) ? \"cursor-pointer\" : \"\"\r\n }`}\r\n title={String(row[col.key] ?? \"\")}\r\n onClick={() => handleColumnClick(col, row)}\r\n >\r\n {col.render\r\n ? col.render(row, index)\r\n : handleRenderCellValue(col, row, index)}\r\n </td>\r\n ))}\r\n </tr>\r\n ))\r\n )}\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n {pagination?.enabled && filteredData.length > 0 && (\r\n <div className=\" bg-gray-50 dark:bg-gray-700/60 px-6 py-3 flex flex-wrap items-center justify-between border-t border-gray-200 dark:border-gray-600 gap-3\">\r\n <div className=\"text-sm text-gray-700 dark:text-gray-300\">\r\n Showing {(currentPage - 1) * pageSize + 1} to{\" \"}\r\n {Math.min(currentPage * pageSize, totalRecords)} of {totalRecords}{\" \"}\r\n results\r\n </div>\r\n\r\n <div className=\"flex items-center gap-4\">\r\n {/* Rows per page selector */}\r\n <div className=\"flex items-center gap-2\">\r\n <span className=\"text-sm text-gray-700 dark:text-gray-300\">\r\n Rows per page:\r\n </span>\r\n <select\r\n value={pageSize}\r\n onChange={(e) => {\r\n const newLimit = Number(e.target.value);\r\n setPageSize(newLimit);\r\n setCurrentPage(1);\r\n if (pagination.useServerSidePagination) {\r\n setServerSidePaginationData((prev) => ({\r\n ...prev,\r\n current_page: 1,\r\n rows_per_page: newLimit,\r\n }));\r\n }\r\n }}\r\n className=\"border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800 text-sm rounded-md px-2 py-1 focus:outline-none focus:ring-1 focus:ring-blue-500\"\r\n >\r\n {[2, 10, 25, 50, 100].map((n) => (\r\n <option key={n} value={n}>\r\n {n}\r\n </option>\r\n ))}\r\n </select>\r\n </div>\r\n\r\n {/* ============= Pagination ============= */}\r\n <div className=\"flex items-center gap-2\">\r\n <button\r\n onClick={() => {\r\n if (currentPage > 1) {\r\n const newPage = currentPage - 1;\r\n setCurrentPage(newPage);\r\n if (pagination.useServerSidePagination) {\r\n setServerSidePaginationData((prev) => ({\r\n ...prev,\r\n current_page: newPage,\r\n }));\r\n }\r\n }\r\n }}\r\n disabled={currentPage === 1}\r\n className=\"p-2 hover:bg-gray-200 dark:hover:bg-gray-600 rounded-md transition text-gray-500 dark:text-gray-300 disabled:opacity-50\"\r\n >\r\n <ChevronLeft className=\"h-4 w-4\" />\r\n </button>\r\n\r\n <span className=\"text-sm text-gray-800 dark:text-gray-200\">\r\n Page {currentPage} of {totalPages}\r\n </span>\r\n\r\n <button\r\n onClick={() => {\r\n if (currentPage < totalPages) {\r\n const newPage = currentPage + 1;\r\n setCurrentPage(newPage);\r\n if (pagination.useServerSidePagination) {\r\n setServerSidePaginationData((prev) => ({\r\n ...prev,\r\n current_page: newPage,\r\n }));\r\n }\r\n }\r\n }}\r\n disabled={currentPage === totalPages}\r\n className=\"p-2 hover:bg-gray-200 dark:hover:bg-gray-600 rounded-md transition text-gray-500 dark:text-gray-300 disabled:opacity-50\"\r\n >\r\n <ChevronRight className=\"h-4 w-4\" />\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Portal Menu */}\r\n {activeMenu &&\r\n createPortal(\r\n <div\r\n ref={menuRef}\r\n style={{\r\n position: \"fixed\",\r\n top: `${menuPosition.top}px`,\r\n left: `${menuPosition.left}px`,\r\n zIndex: 9999,\r\n }}\r\n className=\"w-48 bg-white dark:bg-gray-700 rounded-md shadow-lg border border-gray-200 dark:border-gray-600\"\r\n >\r\n {menuList.map((action, i) => (\r\n <button\r\n key={i}\r\n onClick={(e) =>\r\n handleActionClick(\r\n action,\r\n data.find(\r\n (d) => d.id === activeMenu || d._id == activeMenu,\r\n ),\r\n e,\r\n )\r\n }\r\n className={`w-full flex items-center gap-2 px-4 py-2 text-sm text-left hover:bg-gray-100 dark:hover:bg-gray-600 ${\r\n action.variant === \"danger\"\r\n ? \"text-red-600 dark:text-red-500\"\r\n : \"text-gray-700 dark:text-gray-200\"\r\n }`}\r\n >\r\n {action.icon && <span className=\"shrink-0\">{action.icon}</span>}\r\n {action.title}\r\n </button>\r\n ))}\r\n </div>,\r\n document.body,\r\n )}\r\n\r\n {/* Filter Drawer */}\r\n {filterConfig && (\r\n <FilterDrawer\r\n isOpen={showFilters}\r\n onClose={() => setShowFilters(false)}\r\n config={filterConfig}\r\n onApply={onFilterApply}\r\n />\r\n )}\r\n\r\n {isOpen && (\r\n <ImagePreview\r\n src={targetImage.src}\r\n alt={targetImage.alt}\r\n isOpen={isOpen}\r\n setIsOpen={setIsOpen}\r\n />\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default Table;\r\n","import React from \"react\";\r\nimport { X } from \"lucide-react\";\r\nimport Button from \"../Button/Button\";\r\n\r\nconst Modal = ({\r\n isOpen,\r\n onClose,\r\n icon,\r\n title,\r\n children,\r\n size = \"md\",\r\n actionButtons = [],\r\n actions,\r\n showDefaultClose = true,\r\n footerConfig = null,\r\n hideFooter = false,\r\n onFormSubmit = () => {},\r\n onCancel,\r\n loadingBtn = false,\r\n executeFunction = () => {},\r\n selectedItem = null,\r\n}) => {\r\n if (!isOpen) return null;\r\n\r\n // Size classes\r\n const sizeClasses = {\r\n sm: \"max-w-md\",\r\n md: \"max-w-lg\",\r\n lg: \"max-w-2xl\",\r\n xl: \"max-w-4xl\",\r\n full: \"max-w-full\",\r\n };\r\n\r\n return (\r\n <div className=\"fixed inset-0 z-50 flex items-center justify-center p-4\">\r\n {/* Backdrop */}\r\n <div\r\n className=\"fixed inset-0 bg-gray-500 opacity-75\"\r\n onClick={() => onClose()}\r\n ></div>\r\n\r\n {/* Modal container */}\r\n <div\r\n className={`relative bg-white rounded-lg shadow-xl w-full ${\r\n sizeClasses[size] || sizeClasses.md\r\n } max-h-[90vh] flex flex-col dark:bg-gray-800`}\r\n >\r\n {/* Header */}\r\n <div className=\"flex items-center justify-between p-4 border-b border-gray-200 dark:border-gray-700 flex-shrink-0\">\r\n <div className=\"flex items-center gap-1\">\r\n {icon && <span>{icon}</span>}\r\n <h3 className=\"text-lg font-medium text-gray-900 dark:text-white\">\r\n {title}\r\n </h3>\r\n </div>\r\n\r\n <button\r\n onClick={() => onClose()}\r\n className=\"text-gray-400 hover:text-gray-600 dark:hover:text-gray-300\"\r\n >\r\n <X className=\"w-6 h-6\" />\r\n </button>\r\n </div>\r\n\r\n {/* Content */}\r\n <div className=\"flex-1 overflow-y-auto p-4\">{children}</div>\r\n\r\n {/* Footer */}\r\n {/* {!hideFooter && (actions || footerConfig || showDefaultClose) && (\r\n <div className=\"px-4 py-3 flex justify-end gap-3 border-t border-gray-200 dark:border-gray-700 sm:px-6\">\r\n {actions}\r\n\r\n {footerConfig && (\r\n <>\r\n {footerConfig.cancelButton && (\r\n <Button\r\n onClick={() => (onCancel() || onClose())}\r\n disabled={loadingBtn}\r\n variant=\"contained\"\r\n color=\"default\"\r\n >\r\n {footerConfig.cancelText || \"Cancel\"}\r\n </Button>\r\n )}\r\n\r\n {footerConfig.submitButton && (\r\n <Button\r\n onClick={onFormSubmit}\r\n disabled={loadingBtn}\r\n variant=\"contained\"\r\n color={footerConfig.color || \"primary\"}\r\n className=\"min-w-[100px]\"\r\n >\r\n {loadingBtn ? (\r\n <div className=\"flex items-center\">\r\n <div className=\"animate-spin rounded-full h-4 w-4 border-2 border-white/30 border-t-2 border-t-white mr-2\"></div>\r\n {footerConfig.submitText || \"Submit\"}...\r\n </div>\r\n ) : (\r\n footerConfig.submitText || \"Submit\"\r\n )}\r\n </Button>\r\n )}\r\n </>\r\n )}\r\n\r\n {showDefaultClose && !actions && !footerConfig && (\r\n <Button onClick={() => onClose()} variant=\"outlined\">\r\n Close\r\n </Button>\r\n )}\r\n </div>\r\n )} */}\r\n\r\n {actionButtons.length > 0 && (\r\n <div className=\"px-4 py-3 flex justify-end gap-3 border-t border-gray-200 dark:border-gray-700 sm:px-6\">\r\n {actionButtons.map((btn) => (\r\n <Button\r\n onClick={(e) => {\r\n if (btn.type == \"submit\") {\r\n onFormSubmit(e);\r\n } else {\r\n executeFunction(\r\n () => btn?.onClick?.(e, selectedItem),\r\n (resp) => onClose?.(resp),\r\n );\r\n }\r\n }}\r\n disabled={loadingBtn || btn.disabled}\r\n variant={btn.variant || \"contained\"}\r\n color={btn.color || \"primary\"}\r\n className={`min-w-[100px] ${btn.className}`}\r\n type={btn.type || \"button\"}\r\n >\r\n {loadingBtn ? (\r\n <div className=\"flex items-center\">\r\n <div className=\"animate-spin rounded-full h-4 w-4 border-2 border-white/30 border-t-2 border-t-white mr-2\"></div>\r\n {btn.label || \"Submit\"}...\r\n </div>\r\n ) : (\r\n btn.label || \"Submit\"\r\n )}\r\n </Button>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default Modal;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport RenderFields from \"./components/RenderFields\";\r\n\r\nconst Form = ({ config, onSubmit, initialData = {} }) => {\r\n const { formClass = \"grid grid-cols-12 gap-4\", formFields = [] } =\r\n config || {};\r\n\r\n const [formData, setFormData] = useState(initialData);\r\n\r\n useEffect(() => {\r\n setFormData(initialData);\r\n }, []);\r\n\r\n const handleChange = (key, value) => {\r\n setFormData((prev) => ({ ...prev, [key]: value }));\r\n };\r\n\r\n const handleSubmit = (e) => {\r\n e.preventDefault();\r\n const form = e.target;\r\n\r\n if (!form.checkValidity()) {\r\n form.reportValidity();\r\n return;\r\n }\r\n\r\n onSubmit(formData);\r\n };\r\n\r\n return (\r\n <form\r\n id={config.title?.toLowerCase().includes(\"edit\") ? \"editForm\" : \"addForm\"}\r\n onSubmit={handleSubmit}\r\n className={formClass}\r\n noValidate={false} // enables native validation\r\n >\r\n {formFields.map((field) => (\r\n <>\r\n <RenderFields\r\n key={field.key}\r\n field={field}\r\n formData={formData}\r\n handleChange={handleChange}\r\n />\r\n </>\r\n ))}\r\n </form>\r\n );\r\n};\r\n\r\nexport default Form;\r\n","import { User } from \"lucide-react\";\r\nimport React, { useState } from \"react\";\r\nimport Chip from \"../Chip/Chip\";\r\nimport { formatDate } from \"../../lib/utils\";\r\nimport ImagePreview from \"../Table/components/ImagePreview\";\r\n\r\nexport default function Details({ data, config }) {\r\n const { fields, containerClass } = config;\r\n\r\n // image preview\r\n const [targetImage, setTargetImage] = useState(null);\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const openPreview = (image) => {\r\n setTargetImage(image);\r\n setIsOpen(true);\r\n };\r\n\r\n const DetailRow = ({ col }) => {\r\n let Icon = col?.icon;\r\n let label = col.label;\r\n let value = data[col.key];\r\n let type = col.type;\r\n let variant = col.variant || \"outline\";\r\n let color = col.defaultColor;\r\n\r\n if (type === \"chip\" && col.chipOptions?.length > 0) {\r\n let chipObj = col?.chipOptions.find((obj) => obj.value == value);\r\n if (chipObj) {\r\n value = chipObj.label;\r\n color = chipObj.color;\r\n }\r\n }\r\n\r\n return (\r\n <div\r\n className={`col-span-12 flex items-center space-x-4 p-4 rounded-xl \r\n bg-gray-100 dark:bg-gray-900 ${col.blockClass || \"\"}`}\r\n >\r\n {Icon && <div className=\"flex-shrink-0\">{Icon}</div>}\r\n\r\n <div className=\"flex-1 min-w-0\">\r\n <p className=\"text-sm font-medium text-gray-500 dark:text-gray-400\">\r\n {label}\r\n </p>\r\n\r\n {/* CHIP */}\r\n {type === \"chip\" ? (\r\n <Chip\r\n label={value}\r\n variant={variant}\r\n color={color}\r\n className=\"mt-1\"\r\n />\r\n ) : /* TINY EDITOR */\r\n type === \"tinyEditor\" ? (\r\n <p\r\n className=\"mt-1 text-sm text-gray-900 dark:text-white break-words\"\r\n dangerouslySetInnerHTML={{\r\n __html: value,\r\n }}\r\n ></p>\r\n ) : type === \"audio\" ? (\r\n value ? (\r\n <audio\r\n key={value} // 🔥 ensures latest audio reload\r\n controls\r\n src={value}\r\n onClick={(e) => e.stopPropagation()}\r\n className=\"shadow-md rounded-full\"\r\n />\r\n ) : (\r\n <p className=\"mt-1 text-sm text-gray-400\">N/A</p>\r\n )\r\n ) : (\r\n /* DEFAULT */\r\n <p className=\"mt-1 text-sm text-gray-900 dark:text-white break-words\">\r\n {type == \"date\" ? (\r\n <span>{formatDate(value, col.format || \"DD MMM YYYY\")}</span>\r\n ) : (\r\n value || \"N/A\"\r\n )}\r\n </p>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n const GroupRow = ({ col }) => {\r\n let title = data[col.titleKey];\r\n let subtitle = data[col.subtitleKey];\r\n let image = data[col.imageKey];\r\n let fallback_icon = data[col.fallback_icon];\r\n\r\n return (\r\n <div\r\n className={`col-span-12 flex items-center space-x-4 p-4 rounded-xl \r\n bg-gray-100 dark:bg-gray-900 \r\n ${col.blockClass}`}\r\n >\r\n {image ? (\r\n <img\r\n src={image}\r\n alt={title}\r\n onClick={() => openPreview({ src: image, alt: title })}\r\n className=\"w-16 h-16 cursor-pointer rounded-full object-cover border-2 border-gray-200 dark:border-gray-700\"\r\n />\r\n ) : fallback_icon ? (\r\n fallback_icon\r\n ) : (\r\n <div className=\"w-16 h-16 flex items-center justify-center rounded-full border-2 border-gray-300 dark:border-gray-700 bg-gray-200 dark:bg-gray-600\">\r\n <User className=\"w-8 h-8 text-gray-400\" />\r\n </div>\r\n )}\r\n\r\n <div>\r\n <h3 className=\"text-xl font-semibold text-gray-900 dark:text-white\">\r\n {title}\r\n </h3>\r\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">{subtitle}</p>\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n return (\r\n <>\r\n {isOpen && (\r\n <ImagePreview\r\n src={targetImage.src}\r\n alt={targetImage.alt}\r\n isOpen={isOpen}\r\n setIsOpen={setIsOpen}\r\n />\r\n )}\r\n\r\n <div className={`grid grid-cols-12 gap-4 ${containerClass || \"\"}`}>\r\n {fields.map((col) =>\r\n col.type == \"group\" ? (\r\n <GroupRow col={col} />\r\n ) : (\r\n <DetailRow col={col} />\r\n ),\r\n )}\r\n </div>\r\n </>\r\n );\r\n}\r\n","import React, { useEffect, useMemo, useState } from \"react\";\r\nimport { Plus, X } from \"lucide-react\";\r\nimport Table from \"./Table/Table\";\r\nimport Modal from \"./Modal/Modal\";\r\nimport Form from \"./Form/Form\";\r\nimport Button from \"./Button/Button\";\r\nimport { Icon } from \"@iconify/react\";\r\nimport { enqueueSnackbar } from \"notistack\";\r\nimport Details from \"./Details/Details\";\r\nimport PropTypes from \"prop-types\";\r\nimport { SnackbarProvider } from \"notistack\";\r\n\r\nconst CrudPage = ({ config }) => {\r\n const {\r\n title,\r\n fetchData = async () => {},\r\n isStaticData = false,\r\n tableConfig = {},\r\n modalConfig = {},\r\n filterConfig,\r\n } = config;\r\n\r\n const [loading, setLoading] = useState(true);\r\n const [formLoading, setFormLoading] = useState(false);\r\n\r\n const [listingData, setListingData] = useState([]);\r\n const [paginationData, setPaginationData] = useState(null);\r\n const [serverSidePaginationData, setServerSidePaginationData] = useState({\r\n search: \"\",\r\n rows_per_page: 50,\r\n current_page: 1,\r\n });\r\n const [filterData, setFilterData] = useState({});\r\n const [changeFilterData, setChangeFilterData] = useState(false);\r\n\r\n const [showAdd, setShowAdd] = useState(false);\r\n const [showEdit, setShowEdit] = useState(false);\r\n const [showDelete, setShowDelete] = useState(false);\r\n const [showView, setShowView] = useState(false);\r\n const [selectedItem, setSelectedItem] = useState(null);\r\n\r\n const handleMenuAction = (action, item) => {\r\n if (action === \"edit\") {\r\n setSelectedItem(item);\r\n setShowEdit(true);\r\n } else if (action === \"view\") {\r\n setSelectedItem(item);\r\n setShowView(true);\r\n } else if (action === \"delete\") {\r\n setSelectedItem(item);\r\n setShowDelete(true);\r\n }\r\n };\r\n\r\n const executeAction = async (\r\n action,\r\n onSuccess,\r\n success_message = \"\",\r\n error_message = \"\",\r\n ) => {\r\n setFormLoading(true);\r\n\r\n try {\r\n const resp = await action?.();\r\n if (success_message || resp.message) {\r\n enqueueSnackbar(success_message || resp.message, {\r\n variant: \"success\",\r\n });\r\n }\r\n onSuccess?.(resp);\r\n } catch (error) {\r\n if (error_message || error.message) {\r\n enqueueSnackbar(error_message || error.message, { variant: \"error\" });\r\n }\r\n } finally {\r\n setFormLoading(false);\r\n }\r\n };\r\n\r\n const handleAddResult = (resp) => {\r\n let newObj = resp.newObject;\r\n if (isStaticData) {\r\n setListingData((prev) => [newObj, ...prev]);\r\n setPaginationData((prev) => ({\r\n ...prev,\r\n current_page: 1,\r\n }));\r\n } else {\r\n setServerSidePaginationData((prev) => ({\r\n ...prev,\r\n current_page: 1,\r\n }));\r\n if (serverSidePaginationData.current_page == 1) {\r\n handleGetListing();\r\n }\r\n }\r\n setShowAdd(false);\r\n };\r\n\r\n const handleEditResult = (resp) => {\r\n let updatedObj = resp.newObject;\r\n let targetObj = resp.targetObject;\r\n if (isStaticData) {\r\n setListingData((prev) =>\r\n prev.map((item) =>\r\n item.id === targetObj.id ? { ...item, ...updatedObj } : item,\r\n ),\r\n );\r\n } else {\r\n handleGetListing();\r\n }\r\n setShowEdit(false);\r\n };\r\n\r\n const handleDeleteResult = (resp) => {\r\n if (!resp) {\r\n setShowDelete(false);\r\n setSelectedItem(null);\r\n return;\r\n }\r\n\r\n if (isStaticData) {\r\n setListingData((prev) =>\r\n prev.filter((item) => item.id !== resp.targetObject.id),\r\n );\r\n } else {\r\n if (\r\n listingData.length == 1 &&\r\n serverSidePaginationData.current_page > 1\r\n ) {\r\n setServerSidePaginationData((prev) => ({\r\n ...prev,\r\n current_page: prev.current_page - 1,\r\n }));\r\n } else {\r\n handleGetListing();\r\n }\r\n }\r\n setShowDelete(false);\r\n setSelectedItem(null);\r\n };\r\n\r\n const handleAddFormSubmit = (formData) =>\r\n executeAction(\r\n () => modalConfig?.addModal?.handleSubmit?.(formData),\r\n handleAddResult,\r\n );\r\n\r\n const handleEditFormSubmit = (formData) =>\r\n executeAction(\r\n () => modalConfig?.editModal?.handleSubmit?.(formData, selectedItem),\r\n handleEditResult,\r\n );\r\n\r\n const handleDeleteConfirm = () =>\r\n executeAction(\r\n () => modalConfig?.deleteModal?.action?.(selectedItem),\r\n handleDeleteResult,\r\n );\r\n\r\n const handleGetListing = async () => {\r\n setLoading(true);\r\n\r\n fetchData?.({ ...serverSidePaginationData, ...filterData })\r\n .then((resp) => {\r\n setListingData(resp.data);\r\n setPaginationData(resp.pagination);\r\n })\r\n .catch((error) => {\r\n enqueueSnackbar(error.message, { variant: \"error\" });\r\n })\r\n .finally(() => {\r\n setLoading(false);\r\n });\r\n };\r\n\r\n const handleFilterData = (data) => {\r\n setFilterData((prev) => ({\r\n ...data,\r\n }));\r\n if (tableConfig?.filter?.useServerSideFilters) {\r\n setChangeFilterData((prev) => !prev);\r\n }\r\n };\r\n\r\n const filterByMatchingFields = (data, filters) => {\r\n return data.filter((item) =>\r\n Object.entries(filters).every(([key, value]) => item[key] === value),\r\n );\r\n };\r\n\r\n const filteredData = useMemo(() => {\r\n if (tableConfig?.filter?.useServerSideFilters) return listingData;\r\n return filterByMatchingFields(listingData, filterData);\r\n }, [listingData, filterData]);\r\n\r\n useEffect(() => {\r\n handleGetListing();\r\n }, [\r\n serverSidePaginationData.search,\r\n serverSidePaginationData.rows_per_page,\r\n serverSidePaginationData.current_page,\r\n changeFilterData,\r\n ]);\r\n\r\n return (\r\n <SnackbarProvider\r\n maxSnack={3}\r\n anchorOrigin={{\r\n vertical: \"bottom\",\r\n horizontal: \"right\",\r\n }}\r\n autoHideDuration={3000}\r\n action={(snackbarKey) => (\r\n <button\r\n onClick={() => {\r\n window.dispatchEvent(\r\n new CustomEvent(\"closeSnackbar\", { detail: snackbarKey }),\r\n );\r\n }}\r\n className=\"p-1 hover:bg-white/20 rounded-full transition-colors duration-200 text-white flex items-center justify-center\"\r\n >\r\n <X className=\"h-4 w-4\" />\r\n </button>\r\n )}\r\n >\r\n <div>\r\n {/* Header */}\r\n <div className=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 mb-3\">\r\n <div>\r\n <h1 className=\"text-2xl font-bold text-gray-900 dark:text-white\">\r\n {title}\r\n </h1>\r\n <p className=\"text-md text-gray-600 dark:text-gray-400\">\r\n {config?.description}\r\n </p>\r\n </div>\r\n <div className=\"flex items-center space-x-3\">\r\n <Button\r\n onClick={() => setShowAdd(true)}\r\n variant=\"contained\"\r\n color=\"primary\"\r\n >\r\n <Plus className=\"w-4 h-4 mr-2\" />\r\n {config.buttonText || \"Add New\"}\r\n </Button>\r\n </div>\r\n </div>\r\n\r\n {/* Table */}\r\n <Table\r\n config={{\r\n ...tableConfig,\r\n pagination: {\r\n ...tableConfig.pagination,\r\n ...paginationData,\r\n },\r\n data: filteredData,\r\n setServerSidePaginationData: setServerSidePaginationData,\r\n onMenuAction: handleMenuAction,\r\n filterConfig,\r\n onFilterApply: handleFilterData,\r\n loading,\r\n }}\r\n />\r\n\r\n {/* Add Modal */}\r\n <Modal\r\n isOpen={showAdd}\r\n onClose={() => setShowAdd(false)}\r\n icon={modalConfig.addModal?.icon}\r\n title={modalConfig.addModal?.title || \"Add New\"}\r\n size={modalConfig.addModal?.size || \"md\"}\r\n onFormSubmit={() =>\r\n document.querySelector(\"#addForm\")?.requestSubmit()\r\n }\r\n loadingBtn={formLoading}\r\n actionButtons={modalConfig.addModal.actionButtons}\r\n >\r\n <Form\r\n config={modalConfig?.addModal || []}\r\n onSubmit={handleAddFormSubmit}\r\n initialData={{}}\r\n loading={formLoading}\r\n />\r\n </Modal>\r\n\r\n {/* Edit Modal */}\r\n <Modal\r\n isOpen={showEdit}\r\n onClose={() => setShowEdit(false)}\r\n icon={modalConfig.editModal?.icon}\r\n title={modalConfig.editModal?.title || \"Edit\"}\r\n size={modalConfig.editModal?.size || \"md\"}\r\n onFormSubmit={() =>\r\n document.querySelector(\"#editForm\")?.requestSubmit()\r\n }\r\n actionButtons={modalConfig.editModal.actionButtons}\r\n loadingBtn={formLoading}\r\n >\r\n <Form\r\n config={modalConfig.editModal || []}\r\n onSubmit={handleEditFormSubmit}\r\n initialData={selectedItem}\r\n loading={formLoading}\r\n />\r\n </Modal>\r\n\r\n {/* Delete Modal */}\r\n {showDelete && (\r\n <Modal\r\n isOpen={showDelete}\r\n onClose={(resp) => {\r\n handleDeleteResult(resp);\r\n }}\r\n icon={\r\n modalConfig.deleteModal?.icon || (\r\n <Icon icon=\"ph:warning-bold\" className=\"w-6 h-6 text-red-500\" />\r\n )\r\n }\r\n title={modalConfig.deleteModal?.title || \"Confirm Delete\"}\r\n size={modalConfig.deleteModal?.size || \"md\"}\r\n loading={formLoading}\r\n actionButtons={modalConfig.deleteModal.actionButtons}\r\n executeFunction={executeAction}\r\n selectedItem={selectedItem}\r\n >\r\n <div className=\"flex items-center space-x-2 py-3\">\r\n <div>\r\n <p className=\"text-md text-gray-700 dark:text-white\">\r\n {modalConfig.deleteModal?.confirmText ||\r\n \"Are you sure you want to delete this item?\"}\r\n </p>\r\n {modalConfig.deleteModal?.referenceKey && (\r\n <p className=\"text-md font-semibold text-gray-700 dark:text-white\">\r\n {selectedItem[modalConfig.deleteModal?.referenceKey]}\r\n </p>\r\n )}\r\n </div>\r\n </div>\r\n </Modal>\r\n )}\r\n\r\n {/* View Detail Modal */}\r\n {modalConfig.viewModal && (\r\n <Modal\r\n isOpen={showView}\r\n onClose={() => {\r\n setShowView(false);\r\n setSelectedItem(null);\r\n }}\r\n icon={modalConfig.viewModal?.icon}\r\n title={modalConfig.viewModal?.title || \"View Details\"}\r\n size={modalConfig.viewModal?.size || \"lg\"}\r\n footerConfig={modalConfig?.viewModal.footer}\r\n >\r\n {modalConfig.viewModal?.component ? (\r\n <modalConfig.viewModal.component data={selectedItem} />\r\n ) : (\r\n <Details\r\n data={selectedItem}\r\n config={modalConfig.viewModal || {}}\r\n />\r\n )}\r\n </Modal>\r\n )}\r\n </div>\r\n </SnackbarProvider>\r\n );\r\n};\r\n\r\nconst optionType = PropTypes.shape({\r\n value: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.number,\r\n PropTypes.bool,\r\n ]).isRequired,\r\n label: PropTypes.string.isRequired,\r\n color: PropTypes.string,\r\n});\r\n\r\nconst actionButtonType = PropTypes.shape({\r\n type: PropTypes.string.isRequired,\r\n label: PropTypes.string.isRequired,\r\n color: PropTypes.string,\r\n variant: PropTypes.string,\r\n onClick: PropTypes.func,\r\n});\r\n\r\nconst menuActionType = PropTypes.shape({\r\n title: PropTypes.string.isRequired,\r\n type: PropTypes.string.isRequired,\r\n variant: PropTypes.string,\r\n icon: PropTypes.node,\r\n});\r\n\r\nconst tableHeadType = PropTypes.shape({\r\n key: PropTypes.string.isRequired,\r\n title: PropTypes.string,\r\n type: PropTypes.string,\r\n imageKey: PropTypes.string,\r\n titleKey: PropTypes.string,\r\n subtitleKey: PropTypes.string,\r\n onClickDetails: PropTypes.bool,\r\n variant: PropTypes.string,\r\n chipOptions: PropTypes.arrayOf(optionType),\r\n defaultColor: PropTypes.string,\r\n className: PropTypes.string,\r\n format: PropTypes.string,\r\n menuList: PropTypes.arrayOf(menuActionType),\r\n});\r\n\r\nconst formFieldType = PropTypes.shape({\r\n key: PropTypes.string.isRequired,\r\n label: PropTypes.string,\r\n type: PropTypes.string.isRequired,\r\n required: PropTypes.bool,\r\n minLength: PropTypes.number,\r\n parentClass: PropTypes.string,\r\n search: PropTypes.bool,\r\n multiple: PropTypes.bool,\r\n dropdownMaxHeight: PropTypes.string,\r\n dragDrop: PropTypes.bool,\r\n countriesList: PropTypes.bool,\r\n defaultCountry: PropTypes.string,\r\n placeholder: PropTypes.string,\r\n rows: PropTypes.number,\r\n text: PropTypes.string,\r\n editorKey: PropTypes.string,\r\n options: PropTypes.arrayOf(optionType),\r\n});\r\n\r\nconst viewFieldType = PropTypes.shape({\r\n key: PropTypes.string,\r\n label: PropTypes.string,\r\n type: PropTypes.string,\r\n imageKey: PropTypes.string,\r\n titleKey: PropTypes.string,\r\n subtitleKey: PropTypes.string,\r\n blockClass: PropTypes.string,\r\n icon: PropTypes.node,\r\n variant: PropTypes.string,\r\n chipOptions: PropTypes.arrayOf(optionType),\r\n defaultColor: PropTypes.string,\r\n className: PropTypes.string,\r\n format: PropTypes.string,\r\n});\r\n\r\nCrudPage.propTypes = {\r\n config: PropTypes.shape({\r\n title: PropTypes.string.isRequired,\r\n description: PropTypes.string,\r\n buttonText: PropTypes.string,\r\n fetchData: PropTypes.func.isRequired,\r\n isStaticData: PropTypes.bool,\r\n\r\n /* ================= TABLE CONFIG ================= */\r\n\r\n tableConfig: PropTypes.shape({\r\n table_head: PropTypes.arrayOf(tableHeadType).isRequired,\r\n\r\n search: PropTypes.shape({\r\n enabled: PropTypes.bool,\r\n useServerSideSearch: PropTypes.bool,\r\n searchKeys: PropTypes.arrayOf(PropTypes.string),\r\n }),\r\n\r\n pagination: PropTypes.shape({\r\n enabled: PropTypes.bool,\r\n useServerSidePagination: PropTypes.bool,\r\n }),\r\n\r\n filter: PropTypes.shape({\r\n enabled: PropTypes.bool,\r\n useServerSideFilters: PropTypes.bool,\r\n }),\r\n }).isRequired,\r\n\r\n /* ================= MODAL CONFIG ================= */\r\n\r\n modalConfig: PropTypes.shape({\r\n addModal: PropTypes.shape({\r\n title: PropTypes.string.isRequired,\r\n size: PropTypes.string,\r\n formClass: PropTypes.string,\r\n formFields: PropTypes.arrayOf(formFieldType),\r\n handleSubmit: PropTypes.func.isRequired,\r\n actionButtons: PropTypes.arrayOf(actionButtonType),\r\n }),\r\n\r\n editModal: PropTypes.shape({\r\n title: PropTypes.string.isRequired,\r\n size: PropTypes.string,\r\n formClass: PropTypes.string,\r\n formFields: PropTypes.arrayOf(formFieldType),\r\n handleSubmit: PropTypes.func.isRequired,\r\n actionButtons: PropTypes.arrayOf(actionButtonType),\r\n }),\r\n\r\n deleteModal: PropTypes.shape({\r\n title: PropTypes.string.isRequired,\r\n size: PropTypes.string,\r\n confirmText: PropTypes.string,\r\n referenceKey: PropTypes.string,\r\n actionButtons: PropTypes.arrayOf(actionButtonType),\r\n }),\r\n\r\n viewModal: PropTypes.shape({\r\n title: PropTypes.string.isRequired,\r\n size: PropTypes.string,\r\n\r\n // 👇 This covers your commented code:\r\n component: PropTypes.elementType, // for custom component like TeamMemberDetail\r\n\r\n fields: PropTypes.arrayOf(viewFieldType),\r\n\r\n footer: PropTypes.shape({\r\n cancelButton: PropTypes.bool,\r\n cancelText: PropTypes.string,\r\n }),\r\n }),\r\n }),\r\n\r\n /* ================= FILTER CONFIG ================= */\r\n\r\n filterConfig: PropTypes.shape({\r\n fields: PropTypes.arrayOf(formFieldType),\r\n }),\r\n }).isRequired,\r\n};\r\n\r\nexport default CrudPage;\r\n","import React, { useEffect } from \"react\";\r\nimport CrudPage from \"./components/CrudPage\";\r\n\r\n// Inject styles dynamically\r\nconst injectStyles = () => {\r\n if (typeof document === \"undefined\") return;\r\n \r\n // Check if styles already loaded\r\n if (document.getElementById(\"react-admin-crud-manager-styles\")) return;\r\n \r\n // Create style tag\r\n const style = document.createElement(\"style\");\r\n style.id = \"react-admin-crud-manager-styles\";\r\n \r\n // Add all CSS rules\r\n const cssRules = `\r\n .no-spinner::-webkit-outer-spin-button,\r\n .no-spinner::-webkit-inner-spin-button {\r\n -webkit-appearance: none;\r\n margin: 0;\r\n }\r\n \r\n .no-spinner {\r\n -moz-appearance: textfield;\r\n }\r\n \r\n .tox.tox-tinymce .tox-edit-area::before {\r\n border: 0 !important;\r\n box-shadow: none !important;\r\n }\r\n `;\r\n \r\n style.textContent = cssRules;\r\n document.head.appendChild(style);\r\n};\r\n\r\nexport default function Crud(props) {\r\n useEffect(() => {\r\n injectStyles();\r\n }, []);\r\n\r\n return (\r\n <>\r\n <CrudPage config={props.config} />\r\n </>\r\n );\r\n}\r\n"],"names":["formatDate","dateString","format","date","pad","n","map","token","searchLocalData","data","searchTerm","searchKeys","lowerSearchTerm","extractValues","obj","item","valuesToSearch","key","val","Button","React","className","variant","color","size","fullWidth","children","props","ref","baseStyles","sizes","colorVariants","colorStyles","_a","sizeStyles","combinedClassName","jsx","InputLabel","label","required","Fragment","jsxs","Select","options","value","onChange","placeholder","disabled","search","name","parentClass","multiple","dropdownMaxHeight","open","setOpen","useState","setSearchTerm","showAboveState","setShowAboveState","dropdownRef","useRef","searchInputRef","normalize","normalizedValue","filteredOptions","option","isSelected","optionValue","normalized","useEffect","handleClickOutside","event","rect","spaceBelow","handleOptionClick","finalValue","exists","newValues","v","selectedLabels","opt","ChevronDown","Search","e","Check","Switch","text","radioOptions","idx","countries","PhoneInput","countriesList","defaultCountry","find_country_with_code","selectedCountry","setSelectedCountry","fullNumber","setFullNumber","match","c","a","b","handleNumberChange","input","handleCountrySelect","country","filteredCountries","formatted","TextArea","ImagePicker","accept","id","dragDrop","image","setImage","isDragging","setIsDragging","inputRef","handleFileChange","files","file","preview","Icon","Input","type","onKeyDown","negativeNumberAllow","showPassword","setShowPassword","handleKeyDown","prev","TinyEditor","editorKey","height","inline","plugins","toolbar","menubar","fontFamily","initConfig","imageUploadHandler","Editor","blobInfo","resolve","reject","url","error","content","Checkbox","multiSelect","isChecked","handleSingleChange","handleMultipleChange","checked","newValue","index","AudioPicker","audio","setAudio","RenderFields","field","formData","handleChange","rows","inputClass","minLength","finalPlaceholder","baseClass","imgObj","FilterDrawer","isOpen","onClose","config","onApply","filters","setFilters","handleApply","handleReset","X","BADGE_COLORS","BADGE_VARIANTS","Chip","colorConfig","variantKey","variantClasses","TableSkeleton","columns","_","i","rowIndex","colIndex","ImagePreview","src","alt","setIsOpen","closePreview","handleEsc","Table","table_head","loading","filter","pagination","emptyMessage","onMenuAction","setServerSidePaginationData","onFilterApply","filterConfig","activeMenu","setActiveMenu","menuList","setMenuList","menuPosition","setMenuPosition","showFilters","setShowFilters","targetImage","setTargetImage","filteredData","useMemo","currentPage","setCurrentPage","pageSize","setPageSize","totalRecords","setTotalRecords","totalPages","paginatedData","start","menuRef","buttonRefs","searchTimeoutRef","handleSearchChange","handleActionClick","action","handleMenuToggle","itemId","menu_list","button","menuWidth","menuHeight","viewportWidth","viewportHeight","left","top","calculateRowNumber","openPreview","renderAvatar","imageSrc","imageAlt","fallback_icon","User","renderAudio","audioSrc","Music","renderGroupCell","row","col","handleRenderChip","chipObj","handleRenderCellValue","el","EllipsisVertical","handleColumnClick","isColumnClickable","handleScroll","Filter","newLimit","newPage","ChevronLeft","ChevronRight","createPortal","d","Modal","icon","title","actionButtons","actions","showDefaultClose","footerConfig","hideFooter","onFormSubmit","onCancel","loadingBtn","executeFunction","selectedItem","sizeClasses","btn","resp","Form","onSubmit","initialData","formClass","formFields","setFormData","handleSubmit","form","Details","fields","containerClass","DetailRow","GroupRow","subtitle","CrudPage","fetchData","isStaticData","tableConfig","modalConfig","setLoading","formLoading","setFormLoading","listingData","setListingData","paginationData","setPaginationData","serverSidePaginationData","filterData","setFilterData","changeFilterData","setChangeFilterData","showAdd","setShowAdd","showEdit","setShowEdit","showDelete","setShowDelete","showView","setShowView","setSelectedItem","handleMenuAction","executeAction","onSuccess","success_message","error_message","enqueueSnackbar","handleAddResult","newObj","handleGetListing","handleEditResult","updatedObj","targetObj","handleDeleteResult","handleAddFormSubmit","_b","handleEditFormSubmit","handleFilterData","filterByMatchingFields","SnackbarProvider","snackbarKey","Plus","_c","_d","_e","_f","_g","_h","_i","_j","_k","_l","_m","_n","_o","_p","optionType","PropTypes","actionButtonType","menuActionType","tableHeadType","formFieldType","viewFieldType","injectStyles","style","cssRules","Crud"],"mappings":";;;;;;;;AAEO,MAAMA,KAAa,CAACC,GAAYC,IAAS,kBAAkB;AAChE,MAAI,CAACD,EAAY,QAAO;AAExB,QAAME,IAAO,IAAI,KAAKF,CAAU;AAChC,MAAI,MAAME,CAAI,EAAG,QAAO;AAExB,QAAMC,IAAM,CAACC,MAAM,OAAOA,CAAC,EAAE,SAAS,GAAG,GAAG,GAEtCC,IAAM;AAAA,IACV,MAAMH,EAAK,YAAW;AAAA,IACtB,IAAI,OAAOA,EAAK,YAAW,CAAE,EAAE,MAAM,EAAE;AAAA,IAEvC,MAAMA,EAAK,eAAe,SAAS,EAAE,OAAO,QAAQ;AAAA,IACpD,KAAKA,EAAK,eAAe,SAAS,EAAE,OAAO,SAAS;AAAA,IACpD,IAAIC,EAAID,EAAK,SAAQ,IAAK,CAAC;AAAA,IAC3B,GAAGA,EAAK,SAAQ,IAAK;AAAA,IAErB,IAAIC,EAAID,EAAK,SAAS;AAAA,IACtB,GAAGA,EAAK,QAAO;AAAA,IAEf,MAAMA,EAAK,eAAe,SAAS,EAAE,SAAS,QAAQ;AAAA,IACtD,KAAKA,EAAK,eAAe,SAAS,EAAE,SAAS,SAAS;AAAA,IAEtD,IAAIC,EAAID,EAAK,UAAU;AAAA,IACvB,IAAIC,EAAID,EAAK,SAAQ,IAAK,MAAM,EAAE;AAAA,IAElC,IAAIC,EAAID,EAAK,YAAY;AAAA,IACzB,IAAIC,EAAID,EAAK,YAAY;AAAA,IAEzB,GAAGA,EAAK,SAAQ,KAAM,KAAK,OAAO;AAAA,EACtC;AAEE,SAAOD,EAAO;AAAA,IACZ;AAAA,IACA,CAACK,MAAUD,EAAIC,CAAK;AAAA,EACxB;AACA,GAGaC,KAAkB,CAACC,GAAMC,GAAYC,IAAa,CAAA,MAAO;AACpE,MAAI,EAACD,KAAA,QAAAA,EAAY,QAAQ,QAAOD;AAEhC,QAAMG,IAAkBF,EAAW,eAE7BG,IAAgB,CAACC,MACjBA,KAAO,OAAa,KACpB,OAAOA,KAAQ,WACV,OAAO,OAAOA,CAAG,EAAE,QAAQD,CAAa,IAE1C,CAAC,OAAOC,CAAG,CAAC;AAGrB,SAAOL,EAAK,OAAO,CAACM,MAAS;AAC3B,QAAIC,IAAiB,CAAA;AAGrB,WAAIL,EAAW,SAAS,IACtBA,EAAW,QAAQ,CAACM,MAAQ;AAC1B,MAAIF,EAAKE,CAAG,MAAM,UAChBD,EAAe,KAAK,GAAGH,EAAcE,EAAKE,CAAG,CAAC,CAAC;AAAA,IAEnD,CAAC,IAGDD,IAAiBH,EAAcE,CAAI,GAG9BC,EAAe;AAAA,MAAK,CAACE,MAC1BA,EAAI,YAAW,EAAG,SAASN,CAAe;AAAA,IAChD;AAAA,EACE,CAAC;AACH,GCvEMO,KAASC,GAAM;AAAA,EACnB,CACE;AAAA,IACE,WAAAC,IAAY;AAAA,IACZ,SAAAC,IAAU;AAAA,IACV,OAAAC,IAAQ;AAAA,IACR,MAAAC,IAAO;AAAA,IACP,WAAAC,IAAY;AAAA,IACZ,UAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELC,MACG;;AACH,UAAMC,IACJ,uQAEIC,IAAQ;AAAA,MACZ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,SAAS;AAAA,IAAA,GAGLC,IAAgB;AAAA,MACpB,SAAS;AAAA,QACP,WACE;AAAA,QACF,UACE;AAAA,QACF,MAAM;AAAA,MAAA;AAAA,MAER,SAAS;AAAA,QACP,WACE;AAAA,QACF,UACE;AAAA,QACF,MAAM;AAAA,MAAA;AAAA,MAER,OAAO;AAAA,QACL,WACE;AAAA,QACF,UACE;AAAA,QACF,MAAM;AAAA,MAAA;AAAA,MAER,SAAS;AAAA,QACP,WACE;AAAA,QACF,UACE;AAAA,QACF,MAAM;AAAA,MAAA;AAAA,IACR,GAGIC,MACJC,IAAAF,EAAcR,CAAK,MAAnB,gBAAAU,EAAuBX,OAAYS,EAAc,QAAQ,WACrDG,IAAaJ,EAAMN,CAAI,GAEvBW,IAAoB;AAAA,QACtBN,CAAU;AAAA,QACVG,CAAW;AAAA,QACXE,CAAU;AAAA,QACVT,IAAY,WAAW,EAAE;AAAA,QACzBJ,CAAS;AAAA,MACX,KAAA;AAEF,WACE,gBAAAe;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAR;AAAA,QACA,MAAMD,EAAM,QAAQ;AAAA,QACpB,WAAWQ;AAAA,QACV,GAAGR;AAAA,QAEH,UAAAD;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AACF;AAEAP,GAAO,cAAc;AChFrB,SAAwBkB,EAAW,EAAE,OAAAC,GAAO,UAAAC,IAAW,MAAS;AAC9D,SACE,gBAAAH,EAAAI,GAAA,EACE,UAAA,gBAAAC,EAAC,SAAA,EAAM,WAAU,mEACd,UAAA;AAAA,IAAAH;AAAA,IACAC,KAAY,gBAAAH,EAAC,QAAA,EAAK,WAAU,QAAO,UAAA,IAAA,CAAC;AAAA,EAAA,EAAA,CACvC,EAAA,CACF;AAEJ;ACPA,MAAMM,KAAS,CAAC;AAAA,EACd,SAAAC,IAAU,CAAA;AAAA,EACV,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,WAAAzB,IAAY;AAAA,EACZ,UAAA0B,IAAW;AAAA,EACX,QAAAC,IAAS;AAAA,EACT,OAAAV,IAAQ;AAAA,EACR,UAAAC,IAAW;AAAA,EACX,MAAAU,IAAO;AAAA,EACP,aAAAC,IAAc;AAAA,EACd,UAAAC,IAAW;AAAA;AAAA,EACX,mBAAAC,IAAoB;AACtB,MAAM;;AACJ,QAAM,CAACC,GAAMC,CAAO,IAAIC,EAAS,EAAK,GAChC,CAAC7C,GAAY8C,CAAa,IAAID,EAAS,EAAE,GACzC,CAACE,GAAgBC,CAAiB,IAAIH,EAAS,EAAI,GACnDI,IAAcC,EAAO,IAAI,GACzBC,IAAiBD,EAAO,IAAI,GAE5BE,IAAY,CAAC5C,MACU,OAA3B,OAAOA,KAAQ,YAAmBA,IAAcA,KAAO,EAAlB,GAEjC6C,IAAkBZ,KACnBP,KAAS,CAAA,GAAI,IAAIkB,CAAS,IAC3BA,EAAUlB,CAAK,GAEboB,IAAkBrB,EAAQ;AAAA,IAAO,CAACsB,MACtCA,EAAO,MAAM,cAAc,SAASvD,EAAW,YAAA,CAAa;AAAA,EAAA,GAGxDwD,IAAa,CAACC,MAAgB;AAClC,UAAMC,IAAaN,EAAUK,CAAW;AACxC,WAAIhB,IACKY,EAAgB,SAASK,CAAU,IAErCA,MAAeL;AAAA,EACxB;AAEA,EAAAM,EAAU,MAAM;AACd,UAAMC,IAAqB,CAACC,MAAU;AACpC,MAAIZ,EAAY,WAAW,CAACA,EAAY,QAAQ,SAASY,EAAM,MAAM,MACnEjB,EAAQ,EAAK,GACbE,EAAc,EAAE;AAAA,IAEpB;AACA,oBAAS,iBAAiB,aAAac,CAAkB,GAClD,MAAM,SAAS,oBAAoB,aAAaA,CAAkB;AAAA,EAC3E,GAAG,CAAA,CAAE,GAELD,EAAU,MAAM;AACd,QAAIhB,KAAQM,EAAY,SAAS;AAC/B,YAAMa,IAAOb,EAAY,QAAQ,sBAAA,GAE3Bc,IADiB,OAAO,cACMD,EAAK;AAEzC,MAAAd,EAAkBe,IADK,GACsB;AAAA,IAC/C;AAAA,EACF,GAAG,CAACpB,CAAI,CAAC,GAETgB,EAAU,MAAM;AACd,IAAIhB,KAAQQ,EAAe,WACzBA,EAAe,QAAQ,MAAA;AAAA,EAE3B,GAAG,CAACR,CAAI,CAAC;AAET,QAAMqB,IAAoB,CAACP,MAAgB;AACzC,QAAIQ,IAAaR;AAIjB,QAHIA,MAAgB,SAAQQ,IAAa,KAChCR,MAAgB,YAASQ,IAAa,KAE3CxB,GAAU;AACZ,YAAMyB,IAASb,EAAgB,SAASD,EAAUK,CAAW,CAAC;AAE9D,UAAIU;AACJ,MAAID,IACFC,IAAYjC,EAAM;AAAA,QAChB,CAACkC,MAAMhB,EAAUgB,CAAC,MAAMhB,EAAUK,CAAW;AAAA,MAAA,IAG/CU,IAAY,CAAC,GAAIjC,KAAS,CAAA,GAAK+B,CAAU,GAG3C9B,EAASgC,CAAS;AAAA,IACpB;AACE,MAAAhC,EAAS8B,CAAU,GACnBrB,EAAQ,EAAK;AAGf,IAAAE,EAAc,EAAE;AAAA,EAClB,GAEMuB,IAAiB5B,IACnBR,EACG,OAAO,CAACqC,MAAQd,EAAWc,EAAI,KAAK,CAAC,EACrC,IAAI,CAACA,MAAQA,EAAI,KAAK,EACtB,KAAK,IAAI,KACZ/C,IAAAU,EAAQ,KAAK,CAACqC,MAAQd,EAAWc,EAAI,KAAK,CAAC,MAA3C,gBAAA/C,EAA8C;AAElD,SACE,gBAAAQ,EAAC,OAAA,EAAe,WAAWS,KAAe,eACxC,UAAA;AAAA,IAAA,gBAAAd,EAACC,GAAA,EAAW,OAAAC,GAAc,UAAAC,EAAA,CAAoB;AAAA,sBAE7C,OAAA,EAAI,WAAW,YAAYlB,CAAS,IAAI,KAAKsC,GAC5C,UAAA;AAAA,MAAA,gBAAAlB;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAS,MAAM,CAACM,KAAYO,EAAQ,CAACD,CAAI;AAAA,UACzC,UAAAN;AAAA,UACA,WAAW;AAAA,YAERgC,IAEG,oBADA,kCAEN;AAAA,YACEhC,IAAW,kCAAkC,kBAAkB;AAAA,UAEjE,UAAA;AAAA,YAAA,gBAAAX,EAAC,QAAA,EAAK,WAAU,YAAY,UAAA2C,KAAkBjC,GAAY;AAAA,YAE1D,gBAAAV;AAAA,cAAC6C;AAAA,cAAA;AAAA,gBACC,WAAW,gCACT5B,IAAO,eAAe,EACxB;AAAA,cAAA;AAAA,YAAA;AAAA,UACF;AAAA,QAAA;AAAA,MAAA;AAAA,MAGDA,KACC,gBAAAZ;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAW;AAAA,cACTgB,IAAiB,qBAAqB,eAAe;AAAA,UAEtD,UAAA;AAAA,YAAAT,uBACE,OAAA,EAAI,WAAU,qDACb,UAAA,gBAAAP,EAAC,OAAA,EAAI,WAAU,YACb,UAAA;AAAA,cAAA,gBAAAL,EAAC8C,IAAA,EAAO,WAAU,iEAAA,CAAiE;AAAA,cACnF,gBAAA9C;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,KAAKyB;AAAA,kBACL,MAAK;AAAA,kBACL,OAAOnD;AAAA,kBACP,UAAU,CAACyE,MAAM3B,EAAc2B,EAAE,OAAO,KAAK;AAAA,kBAC7C,aAAY;AAAA,kBACZ,WAAU;AAAA,gBAAA;AAAA,cAAA;AAAA,YACZ,EAAA,CACF,EAAA,CACF;AAAA,YAGF,gBAAA/C;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAW;AAAA,gBACX,OAAO;AAAA,kBACL,WAAWgB,KAAqB;AAAA,gBAAA;AAAA,gBAGjC,YAAgB,SAAS,IACxBY,EAAgB,IAAI,CAACC,MACnB,gBAAAxB;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBAEC,MAAK;AAAA,oBACL,SAAS,MAAMiC,EAAkB,OAAOT,EAAO,KAAK,CAAC;AAAA,oBACrD,WAAW;AAAA,sBAETC,EAAWD,EAAO,KAAK,IACnB,oEACA,EACN;AAAA,oBAEA,UAAA;AAAA,sBAAA,gBAAA7B,EAAC,QAAA,EAAM,YAAO,MAAA,CAAM;AAAA,sBAEnBe,KAAYe,EAAWD,EAAO,KAAK,KAClC,gBAAA7B,EAACgD,IAAA,EAAM,WAAU,UAAA,CAAU;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAbxB,OAAOnB,EAAO,KAAK;AAAA,gBAAA,CAgB3B,IAED,gBAAA7B,EAAC,OAAA,EAAI,WAAU,sDAAqD,UAAA,mBAAA,CAEpE;AAAA,cAAA;AAAA,YAAA;AAAA,UAEJ;AAAA,QAAA;AAAA,MAAA;AAAA,IACF,EAAA,CAEJ;AAAA,EAAA,EAAA,GAhFQa,CAiFV;AAEJ,GCzLMoC,KAAS,CAAC;AAAA,EACd,OAAAzC,IAAQ;AAAA,EACR,UAAAC;AAAA,EACA,MAAAyC;AAAA,EACA,SAAA3C,IAAU,CAAA;AAAA,EACV,OAAAL;AAAA,EACA,UAAAC;AAAA,EACA,MAAAU,IAAO;AAAA,EACP,UAAAF,IAAW;AAAA,EACX,aAAAG,IAAc;AAChB,MAAM;AACJ,QAAMqC,IACJ5C,EAAQ,SAAS,IACbA,IACA;AAAA,IACE,EAAE,OAAO,UAAU,OAAO,GAAA;AAAA,IAC1B,EAAE,OAAO,YAAY,OAAO,GAAA;AAAA,EAAM;AAG1C,SACE,gBAAAP,EAAAI,GAAA,EACE,UAAA,gBAAAC,EAAC,OAAA,EAAe,WAAWS,KAAe,eACxC,UAAA;AAAA,IAAA,gBAAAd,EAACC,GAAA,EAAW,OAAAC,GAAc,UAAAC,EAAA,CAAoB;AAAA,IAC9C,gBAAAE,EAAC,OAAA,EAAI,WAAU,yIAEZ,UAAA;AAAA,MAAA6C,KACC,gBAAAlD,EAAC,KAAA,EAAE,WAAU,sHACV,UAAAkD,GACH;AAAA,MAIF,gBAAAlD,EAAC,SAAI,WAAU,2BACZ,YAAa,IAAI,CAAC4C,GAAKQ,MACtB,gBAAA/C;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,WAAU;AAAA,UAEV,UAAA;AAAA,YAAA,gBAAAL;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,MAAK;AAAA,gBACL,UAAUG,KAAYiD,MAAQ;AAAA,gBAC9B,OAAOR,EAAI;AAAA,gBACX,UAAAjC;AAAA,gBACA,SAASH,MAAUoC,EAAI;AAAA,gBACvB,UAAU,MAAMnC,EAASmC,EAAI,KAAK;AAAA,gBAClC,WAAU;AAAA,cAAA;AAAA,YAAA;AAAA,YAEZ,gBAAA5C,EAAC,QAAA,EAAK,WAAU,yCACb,YAAI,MAAA,CACP;AAAA,UAAA;AAAA,QAAA;AAAA,QAfKoD;AAAA,MAAA,CAiBR,EAAA,CACH;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,EAAA,GAjCQvC,CAkCV,GACF;AAEJ,GC7DawC,KAAY;AAAA,EACvB,EAAE,OAAO,eAAe,MAAM,MAAM,OAAO,KAAI;AAAA,EAC/C,EAAE,OAAO,iBAAiB,MAAM,MAAM,OAAO,MAAK;AAAA,EAClD,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,MAAK;AAAA,EAC5C,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,MAAK;AAAA,EAC5C,EAAE,OAAO,kBAAkB,MAAM,MAAM,OAAO,IAAG;AAAA,EACjD,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,MAAK;AAAA,EAC5C,EAAE,OAAO,UAAU,MAAM,MAAM,OAAO,MAAK;AAAA,EAC3C,EAAE,OAAO,YAAY,MAAM,MAAM,OAAO,IAAG;AAAA,EAC3C,EAAE,OAAO,cAAc,MAAM,MAAM,OAAO,MAAK;AAAA,EAC/C,EAAE,OAAO,uBAAuB,MAAM,MAAM,OAAO,IAAG;AAAA,EACtD,EAAE,OAAO,aAAa,MAAM,MAAM,OAAO,KAAI;AAAA,EAC7C,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,MAAK;AAAA,EAC5C,EAAE,OAAO,SAAS,MAAM,MAAM,OAAO,MAAK;AAAA,EAC1C,EAAE,OAAO,aAAa,MAAM,MAAM,OAAO,KAAI;AAAA,EAC7C,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,KAAI;AAAA,EAC3C,EAAE,OAAO,cAAc,MAAM,MAAM,OAAO,MAAK;AAAA,EAC/C,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,MAAK;AAAA,EAC5C,EAAE,OAAO,cAAc,MAAM,MAAM,OAAO,MAAK;AAAA,EAC/C,EAAE,OAAO,YAAY,MAAM,MAAM,OAAO,IAAG;AAAA,EAC3C,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,MAAK;AAAA,EAC5C,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,KAAI;AAAA,EAC3C,EAAE,OAAO,UAAU,MAAM,MAAM,OAAO,MAAK;AAAA,EAC3C,EAAE,OAAO,SAAS,MAAM,MAAM,OAAO,MAAK;AAAA,EAC1C,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,IAAG;AAAA,EAC1C,EAAE,OAAO,UAAU,MAAM,MAAM,OAAO,MAAK;AAAA,EAC3C,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,MAAK;AAAA,EAC5C,EAAE,OAAO,oCAAoC,MAAM,MAAM,OAAO,MAAK;AAAA,EACrE,EAAE,OAAO,0BAA0B,MAAM,MAAM,OAAO,MAAK;AAAA,EAC3D,EAAE,OAAO,YAAY,MAAM,MAAM,OAAO,MAAK;AAAA,EAC7C,EAAE,OAAO,iBAAiB,MAAM,MAAM,OAAO,OAAM;AAAA,EACnD,EAAE,OAAO,UAAU,MAAM,MAAM,OAAO,KAAI;AAAA,EAC1C,EAAE,OAAO,kCAAkC,MAAM,MAAM,OAAO,MAAK;AAAA,EACnE,EAAE,OAAO,UAAU,MAAM,MAAM,OAAO,MAAK;AAAA,EAC3C,EAAE,OAAO,YAAY,MAAM,MAAM,OAAO,MAAK;AAAA,EAC7C,EAAE,OAAO,gBAAgB,MAAM,MAAM,OAAO,MAAK;AAAA,EACjD,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,MAAK;AAAA,EAC5C,EAAE,OAAO,YAAY,MAAM,MAAM,OAAO,MAAK;AAAA,EAC7C,EAAE,OAAO,YAAY,MAAM,MAAM,OAAO,MAAK;AAAA,EAC7C,EAAE,OAAO,UAAU,MAAM,MAAM,OAAO,IAAG;AAAA,EACzC,EAAE,OAAO,cAAc,MAAM,MAAM,OAAO,MAAK;AAAA,EAC/C,EAAE,OAAO,kBAAkB,MAAM,MAAM,OAAO,IAAG;AAAA,EACjD,EAAE,OAAO,4BAA4B,MAAM,MAAM,OAAO,MAAK;AAAA,EAC7D,EAAE,OAAO,QAAQ,MAAM,MAAM,OAAO,MAAK;AAAA,EACzC,EAAE,OAAO,SAAS,MAAM,MAAM,OAAO,KAAI;AAAA,EACzC,EAAE,OAAO,SAAS,MAAM,MAAM,OAAO,KAAI;AAAA,EACzC,EAAE,OAAO,oBAAoB,MAAM,MAAM,OAAO,KAAI;AAAA,EACpD,EAAE,OAAO,2BAA2B,MAAM,MAAM,OAAO,KAAI;AAAA,EAC3D,EAAE,OAAO,YAAY,MAAM,MAAM,OAAO,KAAI;AAAA,EAC5C,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,MAAK;AAAA,EAC5C,EAAE,OAAO,SAAS,MAAM,MAAM,OAAO,MAAK;AAAA,EAC1C,EAAE,OAAO,gBAAgB,MAAM,MAAM,OAAO,MAAK;AAAA,EACjD,EAAE,OAAO,cAAc,MAAM,MAAM,OAAO,MAAK;AAAA,EAC/C,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,MAAK;AAAA,EAC5C,EAAE,OAAO,QAAQ,MAAM,MAAM,OAAO,KAAI;AAAA,EACxC,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,MAAK;AAAA,EAC5C,EAAE,OAAO,UAAU,MAAM,MAAM,OAAO,MAAK;AAAA,EAC3C,EAAE,OAAO,kBAAkB,MAAM,MAAM,OAAO,MAAK;AAAA,EACnD,EAAE,OAAO,oCAAoC,MAAM,MAAM,OAAO,MAAK;AAAA,EACrE,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,KAAI;AAAA,EAC3C,EAAE,OAAO,YAAY,MAAM,MAAM,OAAO,MAAK;AAAA,EAC7C,EAAE,OAAO,YAAY,MAAM,MAAM,OAAO,IAAG;AAAA,EAC3C,EAAE,OAAO,sBAAsB,MAAM,MAAM,OAAO,IAAG;AAAA,EACrD,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,MAAK;AAAA,EAC5C,EAAE,OAAO,SAAS,MAAM,MAAM,OAAO,KAAI;AAAA,EACzC,EAAE,OAAO,eAAe,MAAM,MAAM,OAAO,MAAK;AAAA,EAChD,EAAE,OAAO,qBAAqB,MAAM,MAAM,OAAO,MAAK;AAAA,EACtD,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,MAAK;AAAA,EAC5C,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,MAAK;AAAA,EAC5C,EAAE,OAAO,YAAY,MAAM,MAAM,OAAO,MAAK;AAAA,EAC7C,EAAE,OAAO,YAAY,MAAM,MAAM,OAAO,MAAK;AAAA,EAC7C,EAAE,OAAO,oBAAoB,MAAM,MAAM,OAAO,MAAK;AAAA,EACrD,EAAE,OAAO,iBAAiB,MAAM,MAAM,OAAO,MAAK;AAAA,EAClD,EAAE,OAAO,gBAAgB,MAAM,MAAM,OAAO,MAAK;AAAA,EACjD,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,MAAK;AAAA,EAC5C,EAAE,OAAO,UAAU,MAAM,MAAM,OAAO,KAAI;AAAA,EAC1C,EAAE,OAAO,iBAAiB,MAAM,MAAM,OAAO,MAAK;AAAA,EAClD,EAAE,OAAO,oBAAoB,MAAM,MAAM,OAAO,MAAK;AAAA,EACrD,EAAE,OAAO,+BAA+B,MAAM,MAAM,OAAO,MAAK;AAAA,EAChE,EAAE,OAAO,SAAS,MAAM,MAAM,OAAO,MAAK;AAAA,EAC1C,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,MAAK;AAAA,EAC5C,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,KAAI;AAAA,EAC3C,EAAE,OAAO,SAAS,MAAM,MAAM,OAAO,MAAK;AAAA,EAC1C,EAAE,OAAO,aAAa,MAAM,MAAM,OAAO,MAAK;AAAA,EAC9C,EAAE,OAAO,UAAU,MAAM,MAAM,OAAO,KAAI;AAAA,EAC1C,EAAE,OAAO,aAAa,MAAM,MAAM,OAAO,MAAK;AAAA,EAC9C,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,IAAG;AAAA,EAC1C,EAAE,OAAO,cAAc,MAAM,MAAM,OAAO,MAAK;AAAA,EAC/C,EAAE,OAAO,QAAQ,MAAM,MAAM,OAAO,IAAG;AAAA,EACvC,EAAE,OAAO,aAAa,MAAM,MAAM,OAAO,MAAK;AAAA,EAC9C,EAAE,OAAO,YAAY,MAAM,MAAM,OAAO,KAAI;AAAA,EAC5C,EAAE,OAAO,UAAU,MAAM,MAAM,OAAO,MAAK;AAAA,EAC3C,EAAE,OAAO,iBAAiB,MAAM,MAAM,OAAO,MAAK;AAAA,EAClD,EAAE,OAAO,UAAU,MAAM,MAAM,OAAO,MAAK;AAAA,EAC3C,EAAE,OAAO,SAAS,MAAM,MAAM,OAAO,MAAK;AAAA,EAC1C,EAAE,OAAO,qCAAqC,MAAM,MAAM,OAAO,MAAK;AAAA,EACtE,EAAE,OAAO,YAAY,MAAM,MAAM,OAAO,MAAK;AAAA,EAC7C,EAAE,OAAO,oBAAoB,MAAM,MAAM,OAAO,MAAK;AAAA,EACrD,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,KAAI;AAAA,EAC3C,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,MAAK;AAAA,EAC5C,EAAE,OAAO,SAAS,MAAM,MAAM,OAAO,KAAI;AAAA,EACzC,EAAE,OAAO,aAAa,MAAM,MAAM,OAAO,KAAI;AAAA,EAC7C,EAAE,OAAO,QAAQ,MAAM,MAAM,OAAO,KAAI;AAAA,EACxC,EAAE,OAAO,QAAQ,MAAM,MAAM,OAAO,MAAK;AAAA,EACzC,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,MAAK;AAAA,EAC5C,EAAE,OAAO,UAAU,MAAM,MAAM,OAAO,MAAK;AAAA,EAC3C,EAAE,OAAO,SAAS,MAAM,MAAM,OAAO,KAAI;AAAA,EACzC,EAAE,OAAO,eAAe,MAAM,MAAM,OAAO,MAAK;AAAA,EAChD,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,IAAG;AAAA,EAC1C,EAAE,OAAO,SAAS,MAAM,MAAM,OAAO,KAAI;AAAA,EACzC,EAAE,OAAO,UAAU,MAAM,MAAM,OAAO,KAAI;AAAA,EAC1C,EAAE,OAAO,UAAU,MAAM,MAAM,OAAO,MAAK;AAAA,EAC3C,EAAE,OAAO,cAAc,MAAM,MAAM,OAAO,IAAG;AAAA,EAC7C,EAAE,OAAO,SAAS,MAAM,MAAM,OAAO,MAAK;AAAA,EAC1C,EAAE,OAAO,YAAY,MAAM,MAAM,OAAO,MAAK;AAAA,EAC7C,EAAE,OAAO,UAAU,MAAM,MAAM,OAAO,MAAK;AAAA,EAC3C,EAAE,OAAO,UAAU,MAAM,MAAM,OAAO,MAAK;AAAA,EAC3C,EAAE,OAAO,cAAc,MAAM,MAAM,OAAO,MAAK;AAAA,EAC/C,EAAE,OAAO,QAAQ,MAAM,MAAM,OAAO,MAAK;AAAA,EACzC,EAAE,OAAO,UAAU,MAAM,MAAM,OAAO,MAAK;AAAA,EAC3C,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,MAAK;AAAA,EAC5C,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,MAAK;AAAA,EAC5C,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,MAAK;AAAA,EAC5C,EAAE,OAAO,SAAS,MAAM,MAAM,OAAO,MAAK;AAAA,EAC1C,EAAE,OAAO,iBAAiB,MAAM,MAAM,OAAO,MAAK;AAAA,EAClD,EAAE,OAAO,aAAa,MAAM,MAAM,OAAO,MAAK;AAAA,EAC9C,EAAE,OAAO,cAAc,MAAM,MAAM,OAAO,MAAK;AAAA,EAC/C,EAAE,OAAO,gBAAgB,MAAM,MAAM,OAAO,MAAK;AAAA,EACjD,EAAE,OAAO,cAAc,MAAM,MAAM,OAAO,MAAK;AAAA,EAC/C,EAAE,OAAO,UAAU,MAAM,MAAM,OAAO,MAAK;AAAA,EAC3C,EAAE,OAAO,YAAY,MAAM,MAAM,OAAO,KAAI;AAAA,EAC5C,EAAE,OAAO,YAAY,MAAM,MAAM,OAAO,MAAK;AAAA,EAC7C,EAAE,OAAO,QAAQ,MAAM,MAAM,OAAO,MAAK;AAAA,EACzC,EAAE,OAAO,SAAS,MAAM,MAAM,OAAO,MAAK;AAAA,EAC1C,EAAE,OAAO,iBAAiB,MAAM,MAAM,OAAO,KAAI;AAAA,EACjD,EAAE,OAAO,oBAAoB,MAAM,MAAM,OAAO,MAAK;AAAA,EACrD,EAAE,OAAO,cAAc,MAAM,MAAM,OAAO,MAAK;AAAA,EAC/C,EAAE,OAAO,cAAc,MAAM,MAAM,OAAO,MAAK;AAAA,EAC/C,EAAE,OAAO,aAAa,MAAM,MAAM,OAAO,MAAK;AAAA,EAC9C,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,MAAK;AAAA,EAC5C,EAAE,OAAO,UAAU,MAAM,MAAM,OAAO,KAAI;AAAA,EAC1C,EAAE,OAAO,cAAc,MAAM,MAAM,OAAO,MAAK;AAAA,EAC/C,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,MAAK;AAAA,EAC5C,EAAE,OAAO,UAAU,MAAM,MAAM,OAAO,MAAK;AAAA,EAC3C,EAAE,OAAO,YAAY,MAAM,MAAM,OAAO,MAAK;AAAA,EAC7C,EAAE,OAAO,cAAc,MAAM,MAAM,OAAO,MAAK;AAAA,EAC/C,EAAE,OAAO,cAAc,MAAM,MAAM,OAAO,IAAG;AAAA,EAC7C,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,MAAK;AAAA,EAC5C,EAAE,OAAO,cAAc,MAAM,MAAM,OAAO,MAAK;AAAA,EAC/C,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,KAAI;AAAA,EAC3C,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,MAAK;AAAA,EAC5C,EAAE,OAAO,SAAS,MAAM,MAAM,OAAO,MAAK;AAAA,EAC1C,EAAE,OAAO,SAAS,MAAM,MAAM,OAAO,MAAK;AAAA,EAC1C,EAAE,OAAO,eAAe,MAAM,MAAM,OAAO,KAAI;AAAA,EAC/C,EAAE,OAAO,iBAAiB,MAAM,MAAM,OAAO,MAAK;AAAA,EAClD,EAAE,OAAO,eAAe,MAAM,MAAM,OAAO,KAAI;AAAA,EAC/C,EAAE,OAAO,aAAa,MAAM,MAAM,OAAO,MAAK;AAAA,EAC9C,EAAE,OAAO,SAAS,MAAM,MAAM,OAAO,MAAK;AAAA,EAC1C,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,MAAK;AAAA,EAC5C,EAAE,OAAO,QAAQ,MAAM,MAAM,OAAO,MAAK;AAAA,EACzC,EAAE,OAAO,kBAAkB,MAAM,MAAM,OAAO,MAAK;AAAA,EACnD,EAAE,OAAO,eAAe,MAAM,MAAM,OAAO,MAAK;AAAA,EAChD,EAAE,OAAO,mBAAmB,MAAM,MAAM,OAAO,MAAK;AAAA,EACpD,EAAE,OAAO,4BAA4B,MAAM,MAAM,OAAO,IAAG;AAAA,EAC3D,EAAE,OAAO,UAAU,MAAM,MAAM,OAAO,KAAI;AAAA,EAC1C,EAAE,OAAO,QAAQ,MAAM,MAAM,OAAO,MAAK;AAAA,EACzC,EAAE,OAAO,YAAY,MAAM,MAAM,OAAO,KAAI;AAAA,EAC5C,EAAE,OAAO,SAAS,MAAM,MAAM,OAAO,MAAK;AAAA,EAC1C,EAAE,OAAO,kCAAkC,MAAM,MAAM,OAAO,MAAK;AAAA,EACnE,EAAE,OAAO,UAAU,MAAM,MAAM,OAAO,MAAK;AAAA,EAC3C,EAAE,OAAO,oBAAoB,MAAM,MAAM,OAAO,MAAK;AAAA,EACrD,EAAE,OAAO,YAAY,MAAM,MAAM,OAAO,MAAK;AAAA,EAC7C,EAAE,OAAO,QAAQ,MAAM,MAAM,OAAO,KAAI;AAAA,EACxC,EAAE,OAAO,eAAe,MAAM,MAAM,OAAO,KAAI;AAAA,EAC/C,EAAE,OAAO,mBAAmB,MAAM,MAAM,OAAO,MAAK;AAAA,EACpD,EAAE,OAAO,UAAU,MAAM,MAAM,OAAO,KAAI;AAAA,EAC1C,EAAE,OAAO,YAAY,MAAM,MAAM,OAAO,MAAK;AAAA,EAC7C,EAAE,OAAO,eAAe,MAAM,MAAM,OAAO,IAAG;AAAA,EAC9C,EAAE,OAAO,SAAS,MAAM,MAAM,OAAO,MAAK;AAAA,EAC1C,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,MAAK;AAAA,EAC5C,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,KAAI;AAAA,EAC3C,EAAE,OAAO,UAAU,MAAM,MAAM,OAAO,IAAG;AAAA,EACzC,EAAE,OAAO,UAAU,MAAM,MAAM,OAAO,MAAK;AAAA,EAC3C,EAAE,OAAO,gBAAgB,MAAM,MAAM,OAAO,MAAK;AAAA,EACjD,EAAE,OAAO,yBAAyB,MAAM,MAAM,OAAO,IAAG;AAAA,EACxD,EAAE,OAAO,eAAe,MAAM,MAAM,OAAO,IAAG;AAAA,EAC9C,EAAE,OAAO,6BAA6B,MAAM,MAAM,OAAO,MAAK;AAAA,EAC9D,EAAE,OAAO,oCAAoC,MAAM,MAAM,OAAO,IAAG;AAAA,EACnE,EAAE,OAAO,oBAAoB,MAAM,MAAM,OAAO,MAAK;AAAA,EACrD,EAAE,OAAO,8BAA8B,MAAM,MAAM,OAAO,MAAK;AAAA,EAC/D,EAAE,OAAO,SAAS,MAAM,MAAM,OAAO,MAAK;AAAA,EAC1C,EAAE,OAAO,cAAc,MAAM,MAAM,OAAO,MAAK;AAAA,EAC/C,EAAE,OAAO,yBAAyB,MAAM,MAAM,OAAO,MAAK;AAAA,EAC1D,EAAE,OAAO,gBAAgB,MAAM,MAAM,OAAO,MAAK;AAAA,EACjD,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,MAAK;AAAA,EAC5C,EAAE,OAAO,UAAU,MAAM,MAAM,OAAO,MAAK;AAAA,EAC3C,EAAE,OAAO,cAAc,MAAM,MAAM,OAAO,MAAK;AAAA,EAC/C,EAAE,OAAO,gBAAgB,MAAM,MAAM,OAAO,MAAK;AAAA,EACjD,EAAE,OAAO,aAAa,MAAM,MAAM,OAAO,KAAI;AAAA,EAC7C,EAAE,OAAO,6BAA6B,MAAM,MAAM,OAAO,OAAM;AAAA,EAC/D,EAAE,OAAO,YAAY,MAAM,MAAM,OAAO,MAAK;AAAA,EAC7C,EAAE,OAAO,YAAY,MAAM,MAAM,OAAO,MAAK;AAAA,EAC7C,EAAE,OAAO,mBAAmB,MAAM,MAAM,OAAO,MAAK;AAAA,EACpD,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,MAAK;AAAA,EAC5C,EAAE,OAAO,gBAAgB,MAAM,MAAM,OAAO,KAAI;AAAA,EAChD,EAAE,OAAO,iBAAiB,MAAM,MAAM,OAAO,MAAK;AAAA,EAClD,EAAE,OAAO,eAAe,MAAM,MAAM,OAAO,KAAI;AAAA,EAC/C,EAAE,OAAO,eAAe,MAAM,MAAM,OAAO,MAAK;AAAA,EAChD,EAAE,OAAO,SAAS,MAAM,MAAM,OAAO,KAAI;AAAA,EACzC,EAAE,OAAO,aAAa,MAAM,MAAM,OAAO,KAAI;AAAA,EAC7C,EAAE,OAAO,SAAS,MAAM,MAAM,OAAO,MAAK;AAAA,EAC1C,EAAE,OAAO,YAAY,MAAM,MAAM,OAAO,MAAK;AAAA,EAC7C,EAAE,OAAO,kCAAkC,MAAM,MAAM,OAAO,KAAI;AAAA,EAClE,EAAE,OAAO,UAAU,MAAM,MAAM,OAAO,KAAI;AAAA,EAC1C,EAAE,OAAO,eAAe,MAAM,MAAM,OAAO,KAAI;AAAA,EAC/C,EAAE,OAAO,SAAS,MAAM,MAAM,OAAO,MAAK;AAAA,EAC1C,EAAE,OAAO,UAAU,MAAM,MAAM,OAAO,MAAK;AAAA,EAC3C,EAAE,OAAO,cAAc,MAAM,MAAM,OAAO,MAAK;AAAA,EAC/C,EAAE,OAAO,YAAY,MAAM,MAAM,OAAO,MAAK;AAAA,EAC7C,EAAE,OAAO,YAAY,MAAM,MAAM,OAAO,KAAI;AAAA,EAC5C,EAAE,OAAO,eAAe,MAAM,MAAM,OAAO,IAAG;AAAA,EAC9C,EAAE,OAAO,cAAc,MAAM,MAAM,OAAO,MAAK;AAAA,EAC/C,EAAE,OAAO,eAAe,MAAM,MAAM,OAAO,MAAK;AAAA,EAChD,EAAE,OAAO,QAAQ,MAAM,MAAM,OAAO,MAAK;AAAA,EACzC,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,MAAK;AAAA,EAC5C,EAAE,OAAO,SAAS,MAAM,MAAM,OAAO,MAAK;AAAA,EAC1C,EAAE,OAAO,uBAAuB,MAAM,MAAM,OAAO,IAAG;AAAA,EACtD,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,MAAK;AAAA,EAC5C,EAAE,OAAO,UAAU,MAAM,MAAM,OAAO,KAAI;AAAA,EAC1C,EAAE,OAAO,gBAAgB,MAAM,MAAM,OAAO,MAAK;AAAA,EACjD,EAAE,OAAO,4BAA4B,MAAM,MAAM,OAAO,IAAG;AAAA,EAC3D,EAAE,OAAO,UAAU,MAAM,MAAM,OAAO,MAAK;AAAA,EAC3C,EAAE,OAAO,UAAU,MAAM,MAAM,OAAO,MAAK;AAAA,EAC3C,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,MAAK;AAAA,EAC5C,EAAE,OAAO,wBAAwB,MAAM,MAAM,OAAO,MAAK;AAAA,EACzD,EAAE,OAAO,kBAAkB,MAAM,MAAM,OAAO,KAAI;AAAA,EAClD,EAAE,OAAO,iBAAiB,MAAM,MAAM,OAAO,IAAG;AAAA,EAChD,EAAE,OAAO,wCAAwC,MAAM,MAAM,OAAO,IAAG;AAAA,EACvE,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,MAAK;AAAA,EAC5C,EAAE,OAAO,cAAc,MAAM,MAAM,OAAO,MAAK;AAAA,EAC/C,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,MAAK;AAAA,EAC5C,EAAE,OAAO,iCAAiC,MAAM,MAAM,OAAO,MAAK;AAAA,EAClE,EAAE,OAAO,aAAa,MAAM,MAAM,OAAO,KAAI;AAAA,EAC7C,EAAE,OAAO,WAAW,MAAM,MAAM,OAAO,KAAI;AAAA,EAC3C,EAAE,OAAO,4BAA4B,MAAM,MAAM,OAAO,IAAG;AAAA,EAC3D,EAAE,OAAO,uBAAuB,MAAM,MAAM,OAAO,IAAG;AAAA,EACtD,EAAE,OAAO,6BAA6B,MAAM,MAAM,OAAO,MAAK;AAAA,EAC9D,EAAE,OAAO,kBAAkB,MAAM,MAAM,OAAO,MAAK;AAAA,EACnD,EAAE,OAAO,SAAS,MAAM,MAAM,OAAO,MAAK;AAAA,EAC1C,EAAE,OAAO,UAAU,MAAM,MAAM,OAAO,MAAK;AAAA,EAC3C,EAAE,OAAO,YAAY,MAAM,MAAM,OAAO,MAAK;AAC/C;ACtPA,SAAwBC,GAAW;AAAA,EACjC,OAAApD,IAAQ;AAAA,EACR,OAAAM,IAAQ;AAAA,EACR,MAAAK,IAAO;AAAA,EACP,aAAAC,IAAc;AAAA,EACd,UAAAL;AAAA,EACA,UAAAE,IAAW;AAAA,EACX,UAAAR,IAAW;AAAA,EACX,aAAAO,IAAc;AAAA,EACd,QAAAE,IAAS;AAAA,EACT,eAAA2C,IAAgB;AAAA,EAChB,gBAAAC,IAAiB;AACnB,GAAG;AACD,QAAMC,IAAyB,CAACjD,MACvB6C,GAAU,KAAK,CAAC3E,MAAQA,EAAI,QAAQ8B,CAAK,GAG5C,CAACkD,GAAiBC,CAAkB,IAAIxC;AAAA,IAC5CsC,EAAuBD,CAAc,KAAKH,GAAU,CAAC;AAAA,EAAA,GAEjD,CAACO,GAAYC,CAAa,IAAI1C,EAAS,EAAE,GACzC,CAACF,GAAMC,CAAO,IAAIC,EAAS,EAAK,GAChC,CAAC7C,GAAY8C,CAAa,IAAID,EAAS,EAAE,GACzCI,IAAcC,EAAA;AAGpB,EAAAS,EAAU,MAAM;AACd,QAAI,OAAOzB,KAAU,YAAYA,EAAM,WAAW,GAAG,GAAG;AACtD,YAAMsD,IAAQT,GACX,OAAO,CAACU,MAAMvD,EAAM,WAAW,MAAMuD,EAAE,KAAK,CAAC,EAC7C,KAAK,CAACC,GAAGC,MAAMA,EAAE,MAAM,SAASD,EAAE,MAAM,MAAM,EAAE,CAAC;AACpD,UAAIF,GAAO;AACT,QAAAH,EAAmBG,CAAK,GACxBD,EAAcrD,EAAM,QAAQ,MAAMsD,EAAM,OAAO,EAAE,CAAC;AAClD;AAAA,MACF;AAAA,IACF;AACA,IAAAD,EAAcrD,CAAK;AAAA,EACrB,GAAG,CAACA,CAAK,CAAC;AAEV,QAAM0D,IAAqB,CAACnB,MAAM;AAChC,UAAMoB,IAAQpB,EAAE,OAAO,MAAM,QAAQ,OAAO,EAAE;AAC9C,IAAAc,EAAcM,CAAK,GACfT,KAAmBjD,KACrBA,EAAS,MAAMiD,EAAgB,QAAQS,CAAK;AAAA,EAEhD,GAEMC,IAAsB,CAACC,MAAY;AACvC,IAAAV,EAAmBU,CAAO,GACtB5D,KAAUA,EAAS,MAAM4D,EAAQ,QAAQT,CAAU,GACvD1C,EAAQ,EAAK,GACbE,EAAc,EAAE;AAAA,EAClB;AAGA,EAAAa,EAAU,MAAM;AACd,UAAMC,IAAqB,CAACa,MAAM;AAChC,MAAIxB,EAAY,WAAW,CAACA,EAAY,QAAQ,SAASwB,EAAE,MAAM,KAC/D7B,EAAQ,EAAK;AAAA,IACjB;AACA,oBAAS,iBAAiB,aAAagB,CAAkB,GAClD,MAAM,SAAS,oBAAoB,aAAaA,CAAkB;AAAA,EAC3E,GAAG,CAAA,CAAE;AAEL,QAAMoC,IAAoBjB,GAAU;AAAA,IAClC,CAACU,MACCA,EAAE,MAAM,cAAc,SAASzF,EAAW,YAAA,CAAa,KACvDyF,EAAE,MAAM,SAASzF,CAAU;AAAA,EAAA;AAG/B,SAAKiF,IAgCH,gBAAAvD,EAAAI,GAAA,EACE,UAAA,gBAAAC,EAAC,OAAA,EAAe,WAAWS,KAAe,eACxC,UAAA;AAAA,IAAA,gBAAAd,EAACC,GAAA,EAAW,OAAAC,GAAc,UAAAC,EAAA,CAAoB;AAAA,IAC9C,gBAAAE,EAAC,OAAA,EAAI,WAAU,aAAY,KAAKkB,GAE9B,UAAA;AAAA,MAAA,gBAAAlB;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAW;AAAA,IAEnBY,IACI,2CACA,sCACN;AAAA,IACEN,IAAW,kCAAkC,EAAE;AAAA,UAGvC,UAAA;AAAA,YAAA,gBAAAN;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,UAAAM;AAAA,gBACA,SAAS,MAAMO,EAAQ,CAACD,CAAI;AAAA,gBAC5B,WAAU;AAAA,gBAET,UAAA;AAAA,kBAAAyC,IACC,gBAAA1D;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,KAAK,2BAA2B0D,EAAgB,KAAK,aAAa;AAAA,sBAClE,KAAKA,EAAgB;AAAA,sBACrB,WAAU;AAAA,oBAAA;AAAA,kBAAA,IAGZ,gBAAA1D,EAAC,QAAA,EAAK,WAAU,yBAAwB,UAAA,MAAE;AAAA,kBAE5C,gBAAAA,EAAC6C,IAAA,EAAY,WAAU,wBAAA,CAAwB;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAIhDa,KACC,gBAAArD,EAAC,QAAA,EAAK,WAAU,mEAAkE,UAAA;AAAA,cAAA;AAAA,cAC9EqD,EAAgB;AAAA,YAAA,GACpB;AAAA,YAIF,gBAAA1D;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,OAAO4D;AAAA,gBACP,UAAUM;AAAA,gBACV,UAAA/D;AAAA,gBACA,UAAUQ,KAAY,CAAC+C;AAAA,gBACvB,aAAcA,IAAuChD,IAArB;AAAA,gBAChC,WAAU;AAAA,cAAA;AAAA,YAAA;AAAA,YAIZ,gBAAAV;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,UAAAG;AAAA,gBACA,UAAU;AAAA,gBACV,UAAQ;AAAA,gBACR,OACEuD,KAAmBE,IACf,MAAMF,EAAgB,QAAQE,IAC9B;AAAA,gBAEN,OAAO;AAAA,kBACL,UAAU;AAAA,kBACV,SAAS;AAAA,kBACT,eAAe;AAAA,kBACf,QAAQ;AAAA,gBAAA;AAAA,cACV;AAAA,YAAA;AAAA,UACF;AAAA,QAAA;AAAA,MAAA;AAAA,MAID3C,KACC,gBAAAZ,EAAC,OAAA,EAAI,WAAU,iKACZ,UAAA;AAAA,QAAAO,uBACE,OAAA,EAAI,WAAU,qDACb,UAAA,gBAAAP,EAAC,OAAA,EAAI,WAAU,YACb,UAAA;AAAA,UAAA,gBAAAL,EAAC8C,IAAA,EAAO,WAAU,2EAAA,CAA2E;AAAA,UAC7F,gBAAA9C;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,OAAO1B;AAAA,cACP,UAAU,CAACyE,MAAM3B,EAAc2B,EAAE,OAAO,KAAK;AAAA,cAC7C,aAAY;AAAA,cACZ,WAAU;AAAA,YAAA;AAAA,UAAA;AAAA,QACZ,EAAA,CACF,EAAA,CACF;AAAA,QAGDuB,EAAkB,IAAI,CAACP,MACtB,gBAAA1D;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,MAAK;AAAA,YACL,SAAS,MAAM+D,EAAoBL,CAAC;AAAA,YACpC,WAAU;AAAA,YAEV,UAAA;AAAA,cAAA,gBAAA/D;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,KAAK,2BAA2B+D,EAAE,KAAK,aAAa;AAAA,kBACpD,KAAKA,EAAE;AAAA,kBACP,WAAU;AAAA,gBAAA;AAAA,cAAA;AAAA,gCAEX,QAAA,EACE,UAAA;AAAA,gBAAAA,EAAE;AAAA,gBAAM;AAAA,gBAAIA,EAAE;AAAA,gBAAM;AAAA,cAAA,EAAA,CACvB;AAAA,YAAA;AAAA,UAAA;AAAA,UAZKA,EAAE;AAAA,QAAA,CAcV;AAAA,MAAA,EAAA,CACH;AAAA,IAAA,EAAA,CAEJ;AAAA,EAAA,EAAA,GA3GQlD,CA4GV,GACF,IApIE,gBAAAb,EAAAI,GAAA,EACE,UAAA,gBAAAC,EAAC,OAAA,EAAe,WAAWS,KAAe,eACxC,UAAA;AAAA,IAAA,gBAAAd,EAACC,GAAA,EAAW,OAAAC,GAAc,UAAAC,EAAA,CAAoB;AAAA,IAC9C,gBAAAH;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,OAAAQ;AAAA,QACA,UAfkB,CAACuC,MAAM;AAC/B,gBAAMoB,IAAQpB,EAAE,OAAO,MAAM,QAAQ,WAAW,EAAE,GAC5CwB,IAAYJ,EAAM,WAAW,GAAG,IAClC,MAAMA,EAAM,QAAQ,QAAQ,EAAE,EAAE,MAAM,CAAC,IACvCA;AACJ,UAAA1D,EAAS8D,CAAS;AAAA,QACpB;AAAA,QAUQ,aAAA7D;AAAA,QACA,UAAAC;AAAA,QACA,UAAAR;AAAA,QACA,WAAU;AAAA;AAAA;AAAA,QAGV,WAAU;AAAA,QACV,SAAQ;AAAA,MAAA;AAAA,IAAA;AAAA,EACV,EAAA,GAdQU,CAeV,GACF;AAqHN;ACzNA,MAAM2D,KAAWxF,GAAM;AAAA,EACrB,CAAC,EAAE,WAAAC,IAAY,IAAI,OAAAiB,GAAO,UAAAC,GAAU,GAAGZ,EAAA,GAASC,MAAQ;AACtD,UAAMO,IAAoB;AAAA;AAAA,QAEtBd,CAAS;AAAA,MACX,KAAA;AAEF,kCAEI,UAAA,gBAAAoB,EAAC,OAAA,EAAqB,WAAWd,EAAM,eAAe,eACpD,UAAA;AAAA,MAAA,gBAAAS,EAACC,GAAA,EAAW,OAAAC,GAAc,UAAAC,EAAA,CAAoB;AAAA,MAC9C,gBAAAH,EAAC,OAAA,EAAI,WAAU,YACb,UAAA,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWD;AAAA,UACX,KAAAP;AAAA,UACA,UAAAW;AAAA,UACC,GAAGZ;AAAA,QAAA;AAAA,MAAA,EACN,CACF;AAAA,IAAA,KATQA,EAAM,IAUhB,GACF;AAAA,EAEJ;AACF;AAEAiF,GAAS,cAAc;ACxBvB,MAAMC,KAAc,CAAC;AAAA,EACnB,OAAAvE,IAAQ;AAAA,EACR,OAAAM,IAAQ;AAAA,EACR,UAAAC;AAAA,EACA,UAAAN,IAAW;AAAA,EACX,QAAAuE,IAAS;AAAA,EACT,IAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,MAAA/D,IAAO;AAAA,EACP,aAAAC,IAAc;AAChB,MAAM;AACJ,QAAM,CAAC+D,GAAOC,CAAQ,IAAI3D,EAASX,CAAK,GAClC,CAACuE,GAAYC,CAAa,IAAI7D,EAAS,EAAK,GAC5C8D,IAAWzD,EAAO,IAAI;AAE5B,EAAAS,EAAU,MAAM;AACd,IAAA6C,EAAStE,aAAiB,OAAO,IAAI,gBAAgBA,CAAK,IAAIA,CAAK;AAAA,EACrE,GAAG,CAACA,CAAK,CAAC;AAEV,QAAM0E,IAAmB,CAACC,MAAU;AAClC,QAAI,CAACA,KAASA,EAAM,WAAW,GAAG;AAChC,MAAAL,EAAS,IAAI,GACbrE,KAAA,QAAAA,EAAW;AACX;AAAA,IACF;AAEA,UAAM2E,IAAOD,EAAM,CAAC,GACdE,IAAU,IAAI,gBAAgBD,CAAI;AAGxC,IAAAN,EAFe,EAAE,MAAAM,GAAM,SAAAC,EAAA,CAER,GACf5E,KAAA,QAAAA,EAAW2E;AAAA,EACb;AAsBA,SACE,gBAAApF,EAAAI,GAAA,EACE,UAAA,gBAAAC,EAAC,OAAA,EAAe,WAAWS,KAAe,eACxC,UAAA;AAAA,IAAA,gBAAAd,EAACC,GAAA,EAAW,OAAAC,GAAc,UAAAC,EAAA,CAAoB;AAAA,IAC9C,gBAAAE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,2CACT0E,IACI,qEACA,oCACN;AAAA,QACA,YA7Be,CAAChC,MAAM;AAC5B,UAAK6B,MACL7B,EAAE,eAAA,GACFiC,EAAc,EAAI;AAAA,QACpB;AAAA,QA0BQ,aAxBgB,CAACjC,MAAM;AAC7B,UAAK6B,MACL7B,EAAE,eAAA,GACFiC,EAAc,EAAK;AAAA,QACrB;AAAA,QAqBQ,QAnBW,CAACjC,MAAM;AACxB,UAAK6B,MACL7B,EAAE,eAAA,GACFiC,EAAc,EAAK,GACnBE,EAAiBnC,EAAE,aAAa,KAAK;AAAA,QACvC;AAAA,QAiBQ,UAAA;AAAA,UAAA,gBAAA1C;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAW,8CACT0E,IAAa,mBAAmB,EAClC;AAAA,cAGA,UAAA;AAAA,gBAAA,gBAAA/E;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,WAAU;AAAA,oBACV,SAAS,MAAMiF,EAAS,QAAQ,MAAA;AAAA,oBAE/B,UAAAJ,IACC,gBAAA7E;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,KAAK6E,EAAM,WAAWA;AAAA,wBACtB,KAAI;AAAA,wBACJ,WAAU;AAAA,sBAAA;AAAA,oBAAA,IAGZ,gBAAA7E,EAAAI,GAAA,EACE,UAAA,gBAAAJ,EAAC,OAAA,EAAI,WAAU,wFACb,UAAA,gBAAAA;AAAA,sBAACsF;AAAA,sBAAA;AAAA,wBACC,MAAK;AAAA,wBACL,WAAU;AAAA,sBAAA;AAAA,oBAAA,GAEd,EAAA,CACF;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAKJ,gBAAAtF;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,KAAKiF;AAAA,oBACL,IAAAN;AAAA,oBACA,MAAK;AAAA,oBACL,QAAAD;AAAA,oBACA,UAAU,CAAC3B,MAAMmC,EAAiBnC,EAAE,OAAO,KAAK;AAAA,oBAChD,UAAU5C,KAAY,CAAC0E;AAAA,oBACvB,WAAU;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACZ;AAAA,YAAA;AAAA,UAAA;AAAA,UAIDD,KAAYG,KACX,gBAAA/E,EAAC,OAAA,EAAI,WAAU,yEACb,UAAA,gBAAAA,EAAC,QAAA,EAAK,WAAU,uCAAsC,UAAA,YAAA,CAEtD,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAEJ,EAAA,GA7DQa,CA8DV,GACF;AAEJ,GCzHM0E,KAAQvG,GAAM;AAAA,EAClB,CACE;AAAA,IACE,OAAAkB;AAAA,IACA,UAAAC;AAAA,IACA,aAAAW,IAAc;AAAA,IACd,WAAA7B,IAAY;AAAA,IACZ,MAAAuG,IAAO;AAAA,IACP,WAAAC;AAAA,IACA,qBAAAC,IAAsB;AAAA,IACtB,GAAGnG;AAAA,EAAA,GAELC,MACG;AACH,UAAM,CAACmG,GAAcC,CAAe,IAAIzE,EAAS,EAAK,GAEhD0E,IAAgB,CAAC9C,MAAM;AAC3B,UAAIyC,MAAS,UAAU;AAIrB,YAHoB,CAAC,KAAK,KAAK,GAAG,EAGlB,SAASzC,EAAE,GAAG,GAAG;AAC/B,UAAAA,EAAE,eAAA;AACF;AAAA,QACF;AAGA,YAAI2C,KAAuB,MAAS3C,EAAE,QAAQ,KAAK;AACjD,UAAAA,EAAE,eAAA;AACF;AAAA,QACF;AAGA,YAAI,CAAC,WAAW,WAAW,EAAE,SAASA,EAAE,GAAG,GAAG;AAC5C,UAAAA,EAAE,eAAA;AACF;AAAA,QACF;AAAA,MACF;AAEA,MAAA0C,KAAA,QAAAA,EAAY1C;AAAA,IACd,GAEMhD,IAAoB;AAAA;AAAA,QAEtByF,MAAS,aAAa,UAAU,EAAE;AAAA,QAClCA,MAAS,WAAW,eAAe,EAAE;AAAA,QACrCvG,CAAS;AAAA,MACX,KAAA;AAEF,WACE,gBAAAe,EAAAI,GAAA,EACE,UAAA,gBAAAC,EAAC,OAAA,EAAqB,WAAWS,KAAe,eAC9C,UAAA;AAAA,MAAA,gBAAAd,EAACC,GAAA,EAAW,OAAAC,GAAc,UAAAC,EAAA,CAAoB;AAAA,MAC9C,gBAAAE,EAAC,OAAA,EAAI,WAAU,YACb,UAAA;AAAA,QAAA,gBAAAL;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAMwF,MAAS,cAAcG,IAAe,SAASH;AAAA,YACrD,KAAAhG;AAAA,YACA,UAAAW;AAAA,YACA,WAAW0F;AAAA,YACX,WAAW9F;AAAA,YACV,GAAGR;AAAA,UAAA;AAAA,QAAA;AAAA,QAGLiG,MAAS,cACR,gBAAAxF;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,UAAU;AAAA,YACV,SAAS,MAAM4F,EAAgB,CAACE,MAAS,CAACA,CAAI;AAAA,YAC9C,WAAU;AAAA,YAEV,UAAA,gBAAA9F;AAAA,cAACsF;AAAA,cAAA;AAAA,gBACC,MACEK,IAAe,wBAAwB;AAAA,gBAEzC,WAAU;AAAA,cAAA;AAAA,YAAA;AAAA,UACZ;AAAA,QAAA;AAAA,MACF,EAAA,CAEJ;AAAA,IAAA,KA3BQpG,EAAM,IA4BhB,GACF;AAAA,EAEJ;AACF;AAEAgG,GAAM,cAAc;ACrFpB,MAAMQ,KAAa,CAAC;AAAA,EAClB,KAAAlH;AAAA,EACA,WAAAmH,IAAY;AAAA,EACZ,OAAAxF,IAAQ;AAAA,EACR,UAAAC;AAAA,EACA,OAAAP,IAAQ;AAAA,EACR,UAAAC,IAAW;AAAA,EACX,aAAAO,IAAc;AAAA,EACd,aAAAI,IAAc;AAAA,EACd,QAAAmF,IAAS;AAAA,EACT,QAAAC,IAAS;AAAA,EACT,UAAAvF,IAAW;AAAA,EACX,SAAAwF;AAAA,EACA,SAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,YAAAC,IAAa;AAAA,EACb,YAAAC,IAAa,CAAA;AAAA,EACb,oBAAAC;AAAA;AACF,MAuDI,gBAAAnG,EAAC,OAAA,EAAc,WAAWS,GACvB,UAAA;AAAA,EAAAZ,KAAS,gBAAAF,EAACC,GAAA,EAAW,OAAAC,GAAc,UAAAC,EAAA,CAAoB;AAAA,EAExD,gBAAAH;AAAA,IAACyG;AAAA,IAAA;AAAA,MACC,QAAQT;AAAA,MACR,OAAAxF;AAAA,MACA,UAAAG;AAAA,MACA,MAAM;AAAA,QACJ,QAAAsF;AAAA,QACA,QAAAC;AAAA,QACA,SAAAG;AAAA,QACA,UAAU;AAAA,QACV,WAAW;AAAA,QACX,mBAAmB;AAAA,QACnB,uBAzCkB,CAACK,MAClB,IAAI,QAAQ,CAACC,GAASC,MAAW;AACtC,cAAI,CAACJ,GAAoB;AAEvB,YAAAG,EAAQ,QAAQD,EAAS,KAAA,EAAO,IAAI,WAAWA,EAAS,OAAA,CAAQ,EAAE;AAClE;AAAA,UACF;AAEA,UAAAF,EAAmBE,CAAQ,EACxB,KAAK,CAACG,MAAQ;AACb,YAAKA,IAGHF,EAAQE,CAAG,IAFXD,EAAO,gCAAgC;AAAA,UAI3C,CAAC,EACA,MAAM,CAACE,MAAU;AAChB,YAAAF;AAAA,cACE,OAAOE,KAAU,WACbA,KACAA,KAAA,gBAAAA,EAAO,YAAW;AAAA,YAAA;AAAA,UAE1B,CAAC;AAAA,QACL,CAAC;AAAA,QAmBK,SAASX,KArEM;AAAA,UACrB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,QAqDM,SAASC,KAjDf;AAAA,QAkDM,aAAA1F;AAAA,QACA,eAAe;AAAA;AAAA,+BAEM4F,CAAU;AAAA;AAAA;AAAA,QAG/B,GAAGC;AAAA,MAAA;AAAA,MAEL,gBAAgB,CAACQ,MAAY;AAC3B,QAAItG,KACFA,EAASsG,CAAO;AAAA,MAEpB;AAAA,IAAA;AAAA,EAAA;AACF,EAAA,GA9BQlI,CA+BV,GCzGEmI,KAAW,CAAC;AAAA,EAChB,MAAAnG,IAAO;AAAA,EACP,OAAAX,IAAQ;AAAA;AAAA,EACR,SAAAK,IAAU,CAAA;AAAA;AAAA,EACV,OAAAC,IAAQ;AAAA;AAAA,EACR,UAAAC;AAAA,EACA,UAAAE,IAAW;AAAA,EACX,UAAAR,IAAW;AAAA,EACX,aAAAW,IAAc;AAAA,EACd,WAAA7B,IAAY;AAAA,EACZ,aAAAgI,IAAc;AAAA;AAChB,MAAM;AAEJ,QAAMlG,IAAW,MAAM,QAAQR,CAAO,KAAKA,EAAQ,SAAS,GAGtD2G,IAAY,CAACnF,MACbhB,IACGkG,IACE,MAAM,QAAQzG,CAAK,KAAKA,EAAM,SAASuB,CAAW,IADhCvB,MAAUuB,IAG9B,EAAQvB,GAIX2G,IAAqB,CAACpE,MAAM;AAChC,IAAAtC,KAAA,QAAAA,EAAWsC,EAAE,OAAO,SAASlC;AAAA,EAC/B,GAGMuG,IAAuB,CAACrF,GAAasF,MAAY;AACrD,QAAK5G;AAEL,UAAI,CAACwG;AACH,QACExG,EADE4G,IACOtF,IAEA,IAFalB,CAAI;AAAA,WAKvB;AACL,cAAMyG,IAAW,MAAM,QAAQ9G,CAAK,IAAI,CAAC,GAAGA,CAAK,IAAI,CAAA;AACrD,YAAI6G;AACF,UAAKC,EAAS,SAASvF,CAAW,KAAGuF,EAAS,KAAKvF,CAAW;AAAA,aACzD;AACL,gBAAMwF,IAAQD,EAAS,QAAQvF,CAAW;AAC1C,UAAIwF,IAAQ,MAAID,EAAS,OAAOC,GAAO,CAAC;AAAA,QAC1C;AACA,QAAA9G,EAAS6G,GAAUzG,CAAI;AAAA,MACzB;AAAA,EACF;AAGA,SAAIE,2BAIE,UAAA,gBAAAV,EAAC,OAAA,EAAI,WAAW,GAAGS,CAAW,IAC5B,UAAA;AAAA,IAAA,gBAAAd,EAACC,GAAA,EAAW,OAAAC,GAAc,UAAAC,EAAA,CAAoB;AAAA,IAC9C,gBAAAH,EAAC,OAAA,EAAI,WAAW,2BACb,UAAAO,EAAQ,IAAI,CAACqC,GAAKQ,MACjB,gBAAA/C,EAAC,OAAA,EAAiC,WAAU,qBAC1C,UAAA;AAAA,MAAA,gBAAAL;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,MAAAa;AAAA,UACA,OAAO+B,EAAI;AAAA,UACX,SAASsE,EAAUtE,EAAI,KAAK;AAAA,UAC5B,UAAUjC,KAAYiC,EAAI;AAAA,UAC1B,UAAUzC,KAAYiD,MAAQ;AAAA,UAC9B,UAAU,CAACL,MACTqE,EAAqBxE,EAAI,OAAOG,EAAE,OAAO,OAAO;AAAA,UAGlD,WAAW,0HAA0H9D,CAAS;AAAA,QAAA;AAAA,QADzI4B;AAAA,MAAA;AAAA,MAGN+B,EAAI,SACH,gBAAA5C;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAASa;AAAA,UACT,WAAU;AAAA,UAET,UAAA+B,EAAI;AAAA,QAAA;AAAA,MAAA;AAAA,IACP,EAAA,GApBMA,EAAI,SAASA,EAAI,KAsB3B,CACD,EAAA,CACH;AAAA,EAAA,EAAA,CACF,EAAA,CACF,IAMF,gBAAAvC,EAAC,OAAA,EAAI,WAAW,qBAAqBS,CAAW,IAC9C,UAAA;AAAA,IAAA,gBAAAd;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,MAAAa;AAAA,QACA,SAASqG,EAAA;AAAA,QACT,UAAAvG;AAAA,QACA,UAAAR;AAAA,QACA,UAAUgH;AAAA,QACV,WAAW,0HAA0HlI,CAAS;AAAA,MAAA;AAAA,IAAA;AAAA,IAE/IiB,KACC,gBAAAF;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAASa;AAAA,QACT,WAAU;AAAA,QAET,UAAAX;AAAA,MAAA;AAAA,IAAA;AAAA,EACH,GAEJ;AAEJ,GChHMsH,KAAc,CAAC;AAAA,EACnB,OAAAtH,IAAQ;AAAA,EACR,OAAAM,IAAQ;AAAA,EACR,UAAAC;AAAA,EACA,UAAAN,IAAW;AAAA,EACX,QAAAuE,IAAS;AAAA,EACT,IAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,MAAA/D,IAAO;AAAA,EACP,aAAAC,IAAc;AAChB,MAAM;AACJ,QAAM,CAAC2G,GAAOC,CAAQ,IAAIvG,EAAS,IAAI,GACjC,CAAC4D,GAAYC,CAAa,IAAI7D,EAAS,EAAK,GAC5C8D,IAAWzD,EAAO,IAAI;AAG5B,EAAAS,EAAU,MAAM;AACd,QAAI,CAACzB,GAAO;AACV,MAAAkH,EAAS,IAAI;AACb;AAAA,IACF;AAEA,QAAIlH,aAAiB,MAAM;AACzB,YAAM6E,IAAU,IAAI,gBAAgB7E,CAAK;AACzC,aAAAkH,EAAS,EAAE,MAAMlH,GAAO,SAAA6E,EAAA,CAAS,GAE1B,MAAM;AACX,YAAI,gBAAgBA,CAAO;AAAA,MAC7B;AAAA,IACF;AACE,MAAAqC,EAAS,EAAE,SAASlH,GAAO;AAAA,EAE/B,GAAG,CAACA,CAAK,CAAC;AAEV,QAAM0E,IAAmB,CAACC,MAAU;AAClC,QAAI,CAACA,KAASA,EAAM,WAAW,GAAG;AAChC,MAAIsC,KAAA,QAAAA,EAAO,WACT,IAAI,gBAAgBA,EAAM,OAAO,GAEnCC,EAAS,IAAI,GACbjH,KAAA,QAAAA,EAAW;AACX;AAAA,IACF;AAEA,UAAM2E,IAAOD,EAAM,CAAC,GACdE,IAAU,IAAI,gBAAgBD,CAAI;AAGxC,IAAIqC,KAAA,QAAAA,EAAO,WACT,IAAI,gBAAgBA,EAAM,OAAO,GAGnCC,EAAS,EAAE,MAAAtC,GAAM,SAAAC,GAAS,GAC1B5E,KAAA,QAAAA,EAAW2E;AAAA,EACb;AAsBA,SACE,gBAAA/E,EAAC,OAAA,EAAe,WAAWS,KAAe,eACxC,UAAA;AAAA,IAAA,gBAAAd,EAACC,GAAA,EAAW,OAAAC,GAAc,UAAAC,EAAA,CAAoB;AAAA,IAE9C,gBAAAE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,0CACT0E,IACI,qEACA,oCACN;AAAA,QACA,YA7BiB,CAAChC,MAAM;AAC5B,UAAK6B,MACL7B,EAAE,eAAA,GACFiC,EAAc,EAAI;AAAA,QACpB;AAAA,QA0BM,aAxBkB,CAACjC,MAAM;AAC7B,UAAK6B,MACL7B,EAAE,eAAA,GACFiC,EAAc,EAAK;AAAA,QACrB;AAAA,QAqBM,QAnBa,CAACjC,MAAM;AACxB,UAAK6B,MACL7B,EAAE,eAAA,GACFiC,EAAc,EAAK,GACnBE,EAAiBnC,EAAE,aAAa,KAAK;AAAA,QACvC;AAAA,QAgBM,UAAA;AAAA,UAAA,gBAAA1C;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAW,8CACT0E,IAAa,mBAAmB,EAClC;AAAA,cAGA,UAAA;AAAA,gBAAA,gBAAA/E;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,WAAU;AAAA,oBACV,SAAS,MAAA;;AAAM,8BAAAH,IAAAoF,EAAS,YAAT,gBAAApF,EAAkB;AAAA;AAAA,oBAEhC,UAAA4H,IACC,gBAAAzH;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBAEC,UAAQ;AAAA,wBACR,KAAKyH,EAAM;AAAA,wBACX,WAAU;AAAA,sBAAA;AAAA,sBAHLA,EAAM;AAAA,oBAAA,IAMb,gBAAAzH,EAAC,OAAA,EAAI,WAAU,sFACb,UAAA,gBAAAA;AAAA,sBAACsF;AAAA,sBAAA;AAAA,wBACC,MAAK;AAAA,wBACL,WAAU;AAAA,sBAAA;AAAA,oBAAA,EACZ,CACF;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAKJ,gBAAAtF;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,KAAKiF;AAAA,oBACL,IAAAN;AAAA,oBACA,MAAK;AAAA,oBACL,QAAAD;AAAA,oBACA,UAAU,CAAC3B,MAAMmC,EAAiBnC,EAAE,OAAO,KAAK;AAAA,oBAChD,UAAU5C,KAAY,CAACsH;AAAA,oBACvB,WAAU;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACZ;AAAA,YAAA;AAAA,UAAA;AAAA,UAID7C,KAAYG,KACX,gBAAA/E,EAAC,OAAA,EAAI,WAAU,yEACb,UAAA,gBAAAA,EAAC,QAAA,EAAK,WAAU,uCAAsC,UAAA,kBAAA,CAEtD,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAEJ,EAAA,GA5DQa,CA6DV;AAEJ,GCrIM8G,KAAe,CAAC,EAAE,OAAAC,GAAO,UAAAC,GAAU,cAAAC,QAAmB;AAC1D,QAAM;AAAA,IACJ,KAAAjJ;AAAA,IACA,OAAAqB;AAAA,IACA,MAAAsF;AAAA,IACA,SAAAjF;AAAA,IACA,aAAAG;AAAA,IACA,MAAAqH;AAAA,IACA,YAAAC;AAAA,IACA,QAAApH;AAAA,IACA,QAAA8D;AAAA,IACA,MAAAxB;AAAA,IACA,UAAA/C,IAAW;AAAA,IACX,WAAA8H;AAAA,IACA,UAAArD;AAAA,IACA,aAAA9D;AAAA,IACA,eAAAyC;AAAA,IACA,gBAAAC;AAAA,IACA,UAAAzC;AAAA,IACA,mBAAAC;AAAA,IACA,WAAAgF;AAAA,IACA,YAAAM;AAAA,IACA,UAAA3F;AAAA,IACA,qBAAA+E;AAAA,EAAA,IACEkC;AAEJ,MAAIpH,IAAQqH,KAAA,gBAAAA,EAAWhJ;AACvB,EAA2B2B,KAAU,SACnCA,IAAQ;AAGV,QAAM0H,IACJxH,MAAgB8E,MAAS,WAAW,UAAUtF,CAAK,KAAK,SAASA,CAAK,KAElEiI,IACJ;AAEF,UAAQ3C,GAAA;AAAA,IACN,KAAK;AACH,aACE,gBAAAxF;AAAA,QAACM;AAAA,QAAA;AAAA,UACC,SAASC,KAAW,CAAA;AAAA,UACpB,OAAAC;AAAA,UACA,UAAU,CAAC1B,MAAQgJ,EAAajJ,GAAKC,CAAG;AAAA,UACxC,aAAaoJ;AAAA,UACb,WAAWF,KAAc;AAAA,UACzB,QAAApH;AAAA,UACA,UAAAT;AAAA,UACA,OAAAD;AAAA,UACA,MAAMrB;AAAA,UACN,UAAA8B;AAAA,UACA,aAAAG;AAAA,UACA,UAAAC;AAAA,UACA,mBAAAC;AAAA,QAAA;AAAA,MAAA;AAAA,IAIN,KAAK;AACH,aACE,gBAAAhB;AAAA,QAACgH;AAAA,QAAA;AAAA,UACC,MAAMnI;AAAA,UACN,OAAAqB;AAAA,UACA,SAASK,KAAW,CAAA;AAAA,UACpB,OAAAC;AAAA,UACA,UAAU,CAAC1B,MAAQgJ,EAAajJ,GAAKC,CAAG;AAAA,UACxC,UAAAqB;AAAA,UACA,aAAAW;AAAA,UACA,WAAWkH,KAAc;AAAA,UACzB,aAAajH;AAAA,UACb,UAAAJ;AAAA,QAAA;AAAA,MAAA;AAAA,IAIN,KAAK;AACH,aACE,gBAAAX;AAAA,QAACiD;AAAA,QAAA;AAAA,UACC,OAAAzC;AAAA,UACA,UAAU,CAAC1B,MAAQgJ,EAAajJ,GAAKC,CAAG;AAAA,UACxC,MAAAoE;AAAA,UACA,SAAS3C,KAAW,CAAA;AAAA,UACpB,OAAAL;AAAA,UACA,UAAAC;AAAA,UACA,MAAMtB;AAAA,UACN,UAAA8B;AAAA,UACA,aAAAG;AAAA,QAAA;AAAA,MAAA;AAAA,IAIN,KAAK;AACH,aACE,gBAAAd;AAAA,QAACsD;AAAA,QAAA;AAAA,UACC,OAAA9C;AAAA,UACA,UAAU,CAAC1B,MAAQgJ,EAAajJ,GAAKC,CAAG;AAAA,UACxC,eAAAyE;AAAA,UACA,gBAAAC;AAAA,UACA,UAAArD;AAAA,UACA,aAAa+H;AAAA,UACb,QAAAtH;AAAA,UACA,OAAAV;AAAA,UACA,MAAMrB;AAAA,UACN,UAAA8B;AAAA,UACA,aAAAG;AAAA,QAAA;AAAA,MAAA;AAAA,IAIN,KAAK;AACH,aACE,gBAAAd;AAAA,QAACwE;AAAA,QAAA;AAAA,UACC,OAAAhE;AAAA,UACA,UAAU,CAACuC,MAAM+E,EAAajJ,GAAKkE,EAAE,OAAO,KAAK;AAAA,UACjD,aAAamF;AAAA,UACb,MAAMH,KAAQ;AAAA,UACd,WAAW,GAAGI,CAAS,IAAIH,KAAc,EAAE;AAAA,UAC3C,UAAA7H;AAAA,UACA,MAAMtB;AAAA,UACN,OAAAqB;AAAA,UACA,UAAAS;AAAA,UACA,aAAAG;AAAA,QAAA;AAAA,MAAA;AAAA,IAIN,KAAK;AACH,aACE,gBAAAd;AAAA,QAACyE;AAAA,QAAA;AAAA,UACC,OAAAjE;AAAA,UACA,UAAU,CAAC4H,MAAWN,EAAajJ,GAAKuJ,CAAM;AAAA,UAC9C,UAAAjI;AAAA,UACA,QAAQuE,KAAU;AAAA,UAClB,IAAI,QAAQ7F,CAAG;AAAA,UACf,UAAA+F;AAAA,UACA,OAAA1E;AAAA,UACA,MAAMrB;AAAA,UACN,aAAAiC;AAAA,QAAA;AAAA,MAAA;AAAA,IAGN,KAAK;AACH,aACE,gBAAAd;AAAA,QAACwH;AAAA,QAAA;AAAA,UACC,OAAAhH;AAAA,UACA,UAAU,CAACiH,MAAUK,EAAajJ,GAAK4I,CAAK;AAAA,UAC5C,UAAAtH;AAAA,UACA,QAAQuE,KAAU;AAAA,UAClB,IAAI,QAAQ7F,CAAG;AAAA,UACf,UAAA+F;AAAA,UACA,OAAA1E;AAAA,UACA,MAAMrB;AAAA,UACN,aAAAiC;AAAA,QAAA;AAAA,MAAA;AAAA,IAIN,KAAK;AACH,aACE,gBAAAd;AAAA,QAAC+F;AAAA,QAAA;AAAA,UACC,OAAAvF;AAAA,UACA,UAAU,CAAC8G,MAAaQ,EAAajJ,GAAKyI,CAAQ;AAAA,UAClD,UAAAnH;AAAA,UAEA,aAAa+H;AAAA,UACb,OAAAhI;AAAA,UACA,aAAAY;AAAA,UACA,YAAAwF;AAAA,UACA,WAAAN;AAAA,UACA,UAAArF;AAAA,QAAA;AAAA,QANK,UAAU9B,CAAG;AAAA,MAAA;AAAA,IAUxB;AACE,aACE,gBAAAmB;AAAA,QAACuF;AAAA,QAAA;AAAA,UACC,MAAMC,KAAQ;AAAA,UACd,OAAAhF;AAAA,UACA,UAAU,CAACuC,MAAM+E,EAAajJ,GAAKkE,EAAE,OAAO,KAAK;AAAA,UACjD,aAAamF;AAAA,UACb,WAAW,GAAGC,CAAS,IAAIH,KAAc,EAAE;AAAA,UAC3C,UAAA7H;AAAA,UACA,MAAMtB;AAAA,UACN,WAAAoJ;AAAA,UACA,OAAA/H;AAAA,UACA,qBAAAwF;AAAA,UACA,aAAA5E;AAAA,UACA,UAAAH;AAAA,QAAA;AAAA,MAAA;AAAA,EACF;AAGR,GC9LM0H,KAAe,CAAC,EAAE,QAAAC,GAAQ,SAAAC,GAAS,QAAAC,GAAQ,SAAAC,QAAc;;AAC7D,QAAM,CAACC,GAASC,CAAU,IAAIxH,EAAS,CAAA,CAAE,GAEnC2G,IAAe,CAACjJ,GAAK2B,MAAU;AACnC,IAAAmI,EAAW,CAAC7C,OAAU,EAAE,GAAGA,GAAM,CAACjH,CAAG,GAAG2B,EAAA,EAAQ;AAAA,EAClD,GAEMoI,IAAc,MAAM;AACxB,IAAAH,KAAA,QAAAA,EAAUC,IACVH,EAAA;AAAA,EACF,GAEMM,IAAc,MAAM;AACxB,IAAAF,EAAW,CAAA,CAAE,GACbF,KAAA,QAAAA,EAAU,CAAA,IACVF,EAAA;AAAA,EACF;AAEA,SACE,gBAAAlI,EAAAD,GAAA,EAEE,UAAA;AAAA,IAAA,gBAAAJ;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,kEACTsI,IACI,oCACA,+BACN;AAAA,QACA,SAASC;AAAA,MAAA;AAAA,IAAA;AAAA,IAIX,gBAAAlI;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW;AAAA;AAAA,YAEPiI,IAAS,kBAAkB,kBAAkB;AAAA;AAAA,QAIjD,UAAA;AAAA,UAAA,gBAAAjI,EAAC,OAAA,EAAI,WAAU,6FACb,UAAA;AAAA,YAAA,gBAAAL,EAAC,MAAA,EAAG,WAAU,uDAAsD,UAAA,WAEpE;AAAA,YACA,gBAAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,SAASuI;AAAA,gBACT,WAAU;AAAA,gBAEV,UAAA,gBAAAvI,EAAC8I,IAAA,EAAE,WAAU,2CAAA,CAA2C;AAAA,cAAA;AAAA,YAAA;AAAA,UAC1D,GACF;AAAA,UAGA,gBAAA9I,EAAC,SAAI,WAAU,oCACZ,yBAAQ,YACP,gBAAAA,EAACwI,EAAO,WAAP,EAAiB,SAAAE,GAAkB,gBAAgBZ,EAAA,CAAc,IAElE,gBAAA9H,EAAC,OAAA,EAAI,WAAU,aACZ,sCAAQ,6BAAQ,IAAI,CAAC4H,MACpB,gBAAA5H,EAAAI,GAAA,EACE,UAAA,gBAAAJ;AAAA,YAAC2H;AAAA,YAAA;AAAA,cAEC,OAAAC;AAAA,cACA,UAAUc;AAAA,cACV,cAAAZ;AAAA,YAAA;AAAA,YAHKF,EAAM;AAAA,UAAA,GAKf,GACD,CACH,GAEJ;AAAA,UAGA,gBAAAvH,EAAC,OAAA,EAAI,WAAU,sEACb,UAAA;AAAA,YAAA,gBAAAL;AAAA,cAACjB;AAAA,cAAA;AAAA,gBACC,SAAS6J;AAAA,gBACT,SAAQ;AAAA,gBACR,OAAM;AAAA,gBACN,WAAS;AAAA,gBACV,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAGD,gBAAA5I;AAAA,cAACjB;AAAA,cAAA;AAAA,gBACC,SAAS8J;AAAA,gBACT,SAAQ;AAAA,gBACR,WAAU;AAAA,gBACX,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UAED,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ,GC9FME,KAAe;AAAA,EACnB,MAAM;AAAA,IACJ,IAAI;AAAA,IACJ,QACE;AAAA,EAAA;AAAA,EAEJ,MAAM;AAAA,IACJ,IAAI;AAAA,IACJ,QACE;AAAA,EAAA;AAAA,EAEJ,QAAQ;AAAA,IACN,IAAI;AAAA,IACJ,QACE;AAAA,EAAA;AAAA,EAEJ,QAAQ;AAAA,IACN,IAAI;AAAA,IACJ,QACE;AAAA,EAAA;AAAA,EAEJ,OAAO;AAAA,IACL,IAAI;AAAA,IACJ,QACE;AAAA,EAAA;AAAA,EAEJ,KAAK;AAAA,IACH,IAAI;AAAA,IACJ,QACE;AAAA,EAAA;AAAA,EAEJ,MAAM;AAAA,IACJ,IAAI;AAAA,IACJ,QACE;AAAA,EAAA;AAEN,GAEMC,KAAiB;AAAA,EACrB,WAAW;AAAA,EACX,SAAS;AAAA,EACT,MAAM;AACR,GAEMC,KAAO,CAAC;AAAA,EACZ,OAAA/I;AAAA,EACA,SAAAhB,IAAU;AAAA;AAAA,EACV,OAAAC,IAAQ;AAAA,EACR,WAAAF,IAAY;AACd,MAAM;AACJ,QAAMiK,IAAcH,GAAa5J,CAAK,KAAK4J,GAAa,OAClDI,IAAaH,GAAe9J,CAAO,KAAK8J,GAAe,WAEvDI,IACJlK,MAAY,YAAYgK,EAAY,SAASA,EAAY;AAE3D,SACE,gBAAAlJ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,UACPoJ,CAAc;AAAA,UACdD,CAAU;AAAA,UACVlK,CAAS;AAAA,MAEZ,UAAAiB;AAAA,IAAA;AAAA,EAAA;AAGP,GCpEMmJ,KAAgB,CAAC,EAAE,MAAAtB,IAAO,GAAG,SAAAuB,IAAU,QAEzC,gBAAAjJ,EAAAD,GAAA,EACE,UAAA;AAAA,EAAA,gBAAAJ,EAAC,SAAI,WAAU,oDACb,4BAAC,OAAA,EAAI,WAAU,+DAA8D,EAAA,CAC/E;AAAA,oBACC,OAAA,EAAI,WAAU,0EACb,UAAA,gBAAAK,EAAC,SAAA,EAAM,WAAU,0BACf,UAAA;AAAA,IAAA,gBAAAL,EAAC,SAAA,EACC,UAAA,gBAAAA,EAAC,MAAA,EAAG,WAAU,+BACX,UAAA,MAAM,KAAK,EAAE,QAAQsJ,EAAA,CAAS,EAAE,IAAI,CAACC,GAAGC,MACvC,gBAAAxJ,EAAC,MAAA,EAAW,WAAU,aACpB,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,wGAAuG,EAAA,GAD/GwJ,CAET,CACD,EAAA,CACH,GACF;AAAA,IAEA,gBAAAxJ,EAAC,SAAA,EACE,UAAA,MAAM,KAAK,EAAE,QAAQ+H,EAAA,CAAM,EAAE,IAAI,CAACwB,GAAGE,MACpC,gBAAAzJ;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,WAAU;AAAA,QAET,UAAA,MAAM,KAAK,EAAE,QAAQsJ,GAAS,EAAE,IAAI,CAACC,GAAGG,MACvC,gBAAA1J,EAAC,MAAA,EAAkB,WAAU,aAC3B,UAAA,gBAAAA,EAAC,SAAI,WAAU,gEAAA,CAAgE,EAAA,GADxE0J,CAET,CACD;AAAA,MAAA;AAAA,MAPID;AAAA,IAAA,CASR,EAAA,CACH;AAAA,EAAA,EAAA,CACF,EAAA,CACF;AAAA,GACF,GC/BEE,KAAe,CAAC,EAAE,KAAAC,GAAK,KAAAC,IAAM,WAAW,QAAAvB,GAAQ,WAAAwB,QAAgB;AACpE,QAAMC,IAAe,MAAMD,EAAU,EAAK;AAG1C,SAAA7H,EAAU,MAAM;AACd,UAAM+H,IAAY,CAACjH,MAAM;AACvB,MAAIA,EAAE,QAAQ,YAAUgH,EAAA;AAAA,IAC1B;AAEA,WAAIzB,MACF,SAAS,KAAK,MAAM,WAAW,UAC/B,SAAS,iBAAiB,WAAW0B,CAAS,IAGzC,MAAM;AACX,eAAS,KAAK,MAAM,WAAW,IAC/B,SAAS,oBAAoB,WAAWA,CAAS;AAAA,IACnD;AAAA,EACF,GAAG,CAAC1B,CAAM,CAAC,GAGT,gBAAAtI,EAAAI,GAAA,EAEE,UAAA,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA;AAAA,MAEV,SAAS0J;AAAA,MAGT,UAAA;AAAA,QAAA,gBAAA/J;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,SAAS+J;AAAA,YACT,WAAU;AAAA;AAAA,YAGV,UAAA,gBAAA/J,EAAC8I,IAAA,EAAE,MAAM,GAAA,CAAI;AAAA,UAAA;AAAA,QAAA;AAAA,QAIf,gBAAA9I;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,SAAS,CAAC+C,MAAMA,EAAE,gBAAA;AAAA,YAGlB,UAAA,gBAAA/C;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,KAAA4J;AAAA,gBACA,KAAAC;AAAA,gBACA,WAAU;AAAA,cAAA;AAAA,YAAA;AAAA,UACZ;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAAA,GAEJ;AAEJ,GCrCMI,KAAQ,CAAC,EAAE,QAAAzB,QAAa;AAC5B,QAAM;AAAA,IACJ,MAAAnK,IAAO,CAAA;AAAA,IACP,YAAA6L,IAAa,CAAA;AAAA,IACb,SAAAC,IAAU;AAAA,IACV,QAAAvJ,IAAS;AAAA,MACP,SAAS;AAAA,MACT,aAAa;AAAA,MACb,qBAAqB;AAAA,IAAA;AAAA,IAEvB,QAAAwJ,IAAS;AAAA,MACP,SAAS;AAAA,MACT,sBAAsB;AAAA,IAAA;AAAA,IAExB,YAAAC,IAAa;AAAA,MACX,SAAS;AAAA,MACT,eAAe;AAAA,MACf,yBAAyB;AAAA,IAAA;AAAA,IAE3B,cAAAC,IAAe;AAAA,IACf,cAAAC;AAAA,IACA,6BAAAC,IAA8B,MAAM;AAAA,IAAC;AAAA,IACrC,eAAAC;AAAA,IACA,cAAAC,IAAe;AAAA,EAAA,IACblC,GAEE,CAAClK,GAAY8C,CAAa,IAAID,EAAS,EAAE,GACzC,CAACwJ,GAAYC,CAAa,IAAIzJ,EAAS,IAAI,GAC3C,CAAC0J,GAAUC,CAAW,IAAI3J,EAAS,CAAA,CAAE,GACrC,CAAC4J,GAAcC,CAAe,IAAI7J,EAAS,CAAA,CAAE,GAC7C,CAAC8J,GAAaC,CAAc,IAAI/J,EAAS,EAAK,GAG9C,CAACgK,GAAaC,CAAc,IAAIjK,EAAS,IAAI,GAC7C,CAACmH,GAAQwB,CAAS,IAAI3I,EAAS,EAAK,GAEpCkK,IAAeC,GAAQ,MACvB,CAAC1K,EAAO,WAAW,CAACtC,EAAW,KAAA,KAC/BsC,EAAO,sBAA4BvC,IAChCD,GAAgBC,GAAMC,GAAYsC,EAAO,cAAc,CAAA,CAAE,GAC/D,CAACvC,GAAMC,GAAYsC,CAAM,CAAC,GAEvB,CAAC2K,GAAaC,CAAc,IAAIrK,EAAS,CAAC,GAC1C,CAACsK,GAAUC,CAAW,IAAIvK,GAASkJ,KAAA,gBAAAA,EAAY,kBAAiB,EAAE,GAClE,CAACsB,GAAcC,CAAe,IAAIzK,EAASkK,EAAa,UAAU,CAAC,GAEnEQ,KAAaxB,KAAA,QAAAA,EAAY,0BAC3BA,EAAW,cACX,KAAK,KAAKgB,EAAa,SAASI,CAAQ,GAEtCK,KAAgBR,GAAQ,MAAM;AAClC,QAAIjB,EAAW,wBAAyB,QAAOgB;AAC/C,UAAMU,KAASR,IAAc,KAAKE;AAClC,WAAOJ,EAAa,MAAMU,GAAOA,IAAQN,CAAQ;AAAA,EACnD,GAAG,CAACJ,GAAcE,GAAaE,CAAQ,CAAC,GAElCO,KAAUxK,EAAO,IAAI,GACrByK,KAAazK,EAAO,EAAE,GACtB0K,KAAmB1K,EAAO,IAAI,GAE9B2K,KAAqB,CAAC3L,MAAU;AACpC,IAAAY,EAAcZ,CAAK,GACnBgL,EAAe,CAAC,GAEZ5K,EAAO,wBACLsL,GAAiB,WAAS,aAAaA,GAAiB,OAAO,GAEnEA,GAAiB,UAAU,WAAW,YAAY;AAChD,UAAI;AACF,cAAM1B,EAA4B,CAAC1E,OAAU;AAAA,UAC3C,GAAGA;AAAA,UACH,QAAQtF;AAAA,UACR,cAAc;AAAA,QAAA,EACd;AAAA,MACJ,SAASsG,GAAO;AACd,gBAAQ,MAAM,iBAAiBA,CAAK;AAAA,MACtC;AAAA,IACF,GAAG,GAAG;AAAA,EAEV,GAEMsF,KAAoB,CAACC,GAAQ1N,GAAMoE,MAAM;AAC7C,IAAAA,EAAE,gBAAA,GACF6H,EAAc,IAAI,GAClBL,KAAA,QAAAA,EAAe8B,EAAO,MAAM1N;AAAA,EAC9B,GAEM2N,KAAmB,CAACC,GAAQxJ,GAAGyJ,MAAc;AACjD,IAAAzJ,EAAE,gBAAA,GACF+H,EAAY0B,CAAS;AACrB,UAAMC,IAAS1J,EAAE;AACjB,IAAAkJ,GAAW,QAAQM,CAAM,IAAIE;AAC7B,UAAMrK,IAAOqK,EAAO,sBAAA,GACdC,IAAY,KACZC,IAAaH,EAAU,SAAS,IAChCI,IAAgB,OAAO,YACvBC,IAAiB,OAAO,aAGxBC,IADWF,IAAgBxK,EAAK,QAAQsK,IACtBtK,EAAK,OAAOsK,IAAYtK,EAAK,QAAQA,EAAK,MAI5D2K,IADJF,IAAiBzK,EAAK,SAASuK,KAAcvK,EAAK,MAAMuK,IACrCvK,EAAK,MAAMuK,IAAa,IAAIvK,EAAK,SAAS;AAE/D,IAAA4I,EAAgB;AAAA,MACd,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI+B,GAAKF,IAAiBF,IAAa,CAAC,CAAC;AAAA,MAC/D,MAAM,KAAK,IAAI,GAAG,KAAK,IAAIG,GAAMF,IAAgBF,IAAY,CAAC,CAAC;AAAA,IAAA,CAChE,GAED9B,EAAcD,MAAe4B,IAAS,OAAOA,CAAM;AAAA,EACrD,GAEMS,KAAqB,CAACzF,OAClBgE,IAAc,KAAKE,IAAWlE,IAAQ,GAG1C0F,KAAc,CAACpI,MAAU;AAC7B,IAAAuG,EAAevG,CAAK,GACpBiF,EAAU,EAAI;AAAA,EAChB,GAEMoD,KAAe,CACnBC,GACAC,GACAnO,GACAoO,IAAgB,gCAIX,UAAAF,IACC,gBAAAnN;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAKmN;AAAA,MACL,KAAKC,KAAY;AAAA,MACjB,SAAS,CAACrK,MAAM;AACd,QAAAA,EAAE,gBAAA,GACFA,EAAE,eAAA,GACFkK,GAAY,EAAE,KAAKE,GAAU,KAAKC,GAAU;AAAA,MAC9C;AAAA,MACA,WAAW,kGAAkGnO,KAAa,EAAE;AAAA,IAAA;AAAA,EAAA,IAG9H,gBAAAe,EAAAI,GAAA,EACG,UAAAiN,KAGC,gBAAArN;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,oIAAoIf,KAAa,EAAE;AAAA,MAE9J,UAAA,gBAAAe,EAACsN,IAAA,EAAK,WAAU,2CAAA,CAA2C;AAAA,IAAA;AAAA,EAAA,GAGjE,EAAA,CAEJ,GAIEC,KAAc,CAACC,GAAUvO,6BAGxB,UAAAuO,IACC,gBAAAxN;AAAA,IAAC;AAAA,IAAA;AAAA,MAEC,UAAQ;AAAA,MACR,KAAKwN;AAAA,MACL,SAAS,CAACzK,MAAM;AACd,QAAAA,EAAE,gBAAA;AAAA,MACJ;AAAA,MACA,WAAW,uBAAuB9D,KAAa,EAAE;AAAA,IAAA;AAAA,IAN5CuO;AAAA,EAAA,IASP,gBAAAxN,EAAAI,GAAA,EACE,UAAA,gBAAAJ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,oIAAoIf,KAAa,EAAE;AAAA,MAE9J,UAAA,gBAAAe,EAACyN,IAAA,EAAM,WAAU,2CAAA,CAA2C;AAAA,IAAA;AAAA,EAAA,GAEhE,EAAA,CAEJ,GAIEC,KAAkB,CAACC,GAAKC,wBAEzB,OAAA,EAAI,WAAW,+BAA+BA,EAAI,aAAa,EAAE,IAC/D,UAAA;AAAA,IAAAA,EAAI,WACDV,GAAaS,EAAIC,EAAI,QAAQ,GAAGD,EAAIC,EAAI,QAAQ,GAAG,cAAc,IACjE;AAAA,sBACH,OAAA,EACC,UAAA;AAAA,MAAA,gBAAA5N,EAAC,OAAE,WAAU,yDACV,YAAI4N,EAAI,QAAQ,KAAK,IACxB;AAAA,MACA,gBAAA5N,EAAC,OAAE,WAAU,4DACV,YAAI4N,EAAI,WAAW,KAAK,GAAA,CAC3B;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,GACF,GAIEC,KAAmB,CAACrN,GAAOoN,MAAQ;;AACvC,QAAI1N,IAAQ,OAAOM,CAAK;AACxB,UAAMtB,IAAU0O,EAAI,WAAW;AAC/B,QAAIzO,IAAQyO,EAAI;AAEhB,UAAI/N,IAAA+N,KAAA,gBAAAA,EAAK,gBAAL,gBAAA/N,EAAkB,UAAS,GAAG;AAChC,UAAIiO,IAAUF,KAAA,gBAAAA,EAAK,YAAY,KAAK,CAAClP,MAAQA,EAAI,SAAS8B;AAC1D,MAAIsN,MACF5N,IAAQ4N,EAAQ,OAChB3O,IAAQ2O,EAAQ;AAAA,IAEpB;AAEA,WACE,gBAAA9N;AAAA,MAACiJ;AAAA,MAAA;AAAA,QACC,OAAA/I;AAAA,QACA,SAAAhB;AAAA,QACA,OAAAC;AAAA,QACA,WAAWyO,EAAI,aAAa;AAAA,MAAA;AAAA,IAAA;AAAA,EAGlC,GAEMG,KAAwB,CAACH,GAAKD,GAAKpG,MAAU;AACjD,UAAM/G,IAAQmN,EAAIC,EAAI,GAAG;AACzB,WAAIA,EAAI,SAAS,mCAEZ,OAAA,EAAI,WAAW,eAAeA,EAAI,aAAa,EAAE,IAChD,UAAA,gBAAA5N;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAK,CAACgO,MAAQ/B,GAAW,QAAQ0B,EAAI,MAAMA,EAAI,GAAG,IAAIK;AAAA,QACtD,SAAS,CAACjL,MACRuJ,GAAiBqB,EAAI,MAAMA,EAAI,KAAK5K,GAAG6K,EAAI,QAAQ;AAAA,QAErD,WAAU;AAAA,QAEV,UAAA,gBAAA5N,EAACiO,IAAA,EAAiB,WAAU,UAAA,CAAU;AAAA,MAAA;AAAA,IAAA,GAE1C,IAEOL,EAAI,SAAS,UAEpB,gBAAA5N,EAAC,UAAK,WAAW4N,EAAI,aAAa,IAAK,UAAAZ,GAAmBzF,CAAK,EAAA,CAAE,IAE1DqG,EAAI,SAAS,UACfF,GAAgBC,GAAKC,CAAG,IACtBA,EAAI,SAAS,SACf,gBAAA5N,EAAAI,GAAA,EAAG,UAAAyN,GAAiBrN,GAAOoN,CAAG,GAAE,IAC9BA,EAAI,SAAS,SAEpB,gBAAA5N,EAAC,QAAA,EAAK,WAAW4N,EAAI,aAAa,IAC/B,UAAAhQ,GAAW4C,GAAOoN,EAAI,UAAU,aAAa,EAAA,CAChD,IAEOA,EAAI,SAAS,WAEpB,gBAAA5N,EAAAI,GAAA,EAAG,aAAaI,GAAOoN,EAAI,KAAKA,EAAI,WAAWA,EAAI,aAAa,EAAA,CAAE,IAE3DA,EAAI,SAAS,UACf,gBAAA5N,EAAAI,GAAA,EAAG,UAAAmN,GAAY/M,GAAOoN,EAAI,SAAS,GAAE,sBAEpC,QAAA,EAAK,WAAWA,EAAI,aAAa,IAAK,eAAS,OAAM;AAAA,EAEjE,GAIMM,KAAoB,CAACN,GAAKD,MAAQ;AACtC,QAAIC,EAAI;AACN,aAAOrD,KAAA,gBAAAA,EAAe,QAAQoD;AAGhC,QAAI,OAAOC,EAAI,eAAgB;AAC7B,aAAOA,EAAI,YAAYD,CAAG;AAAA,EAE9B,GAGMQ,KAAoB,CAACP,MACzBA,EAAI,kBAAkB,OAAOA,EAAI,eAAgB;AAyDnD,SAtDA3L,EAAU,MAAM;AACd,UAAMmM,IAAe,MAAM;AACzB,MAAIzD,OAA0B,IAAI;AAAA,IACpC;AAEA,kBAAO,iBAAiB,UAAUyD,GAAc,EAAI,GAC7C,MAAM;AACX,aAAO,oBAAoB,UAAUA,GAAc,EAAI;AAAA,IACzD;AAAA,EACF,GAAG,CAACzD,CAAU,CAAC,GAEf1I,EAAU,MAAM;AACd,UAAMC,IAAqB,CAACa,MAAM;AAChC,MAAIiJ,GAAQ,WAAW,CAACA,GAAQ,QAAQ,SAASjJ,EAAE,MAAM,KACvD6H,EAAc,IAAI;AAAA,IAEtB;AACA,oBAAS,iBAAiB,SAAS1I,CAAkB,GAC9C,MAAM,SAAS,oBAAoB,SAASA,CAAkB;AAAA,EACvE,GAAG,CAAA,CAAE,GAELD,EAAU,MAAM;AACd,IAAIoI,KAAA,QAAAA,EAAY,kBAAiBA,KAAA,QAAAA,EAAY,4BAC3CqB,GAAYrB,KAAA,gBAAAA,EAAY,kBAAiB,EAAE,GAGzCA,EAAW,gBACbmB,EAAenB,EAAW,YAAY;AAAA,EAE1C,GAAG;AAAA,IACDA,EAAW;AAAA,IACXA,KAAA,gBAAAA,EAAY;AAAA,IACZA,EAAW;AAAA,EAAA,CACZ,GAEDpI,EAAU,MAAM;AACd,IAAA2J;AAAA,MACEvB,KAAA,QAAAA,EAAY,0BACRA,EAAW,gBACXgB,EAAa;AAAA,IAAA,GAIjBA,EAAa,UAAUI,KAAYF,IAAc,MACjD,EAAClB,KAAA,QAAAA,EAAY,4BAEbmB,EAAe,CAAC1F,MAASA,IAAO,KAAK,CAAC;AAAA,EAE1C,GAAG;AAAA,IACDuF,EAAa;AAAA,IACbhB,EAAW;AAAA,IACXA,KAAA,gBAAAA,EAAY;AAAA,EAAA,CACb,GAEGF,IAAgB,gBAAAnK,EAACqJ,MAAc,MAAM,GAAG,SAAS,GAAG,IAGtD,gBAAAhJ,EAAAD,GAAA,EAEE,UAAA;AAAA,IAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,4CACZ,UAAA;AAAA,MAAAO,EAAO,6BACL,OAAA,EAAI,WAAU,IACb,UAAA,gBAAAP,EAAC,OAAA,EAAI,WAAU,0BACb,UAAA;AAAA,QAAA,gBAAAL,EAAC8C,IAAA,EAAO,WAAU,oFAAA,CAAoF;AAAA,QACtG,gBAAA9C;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,aAAaY,EAAO,eAAe;AAAA,YACnC,OAAOtC;AAAA,YACP,UAAU,CAACyE,MAAMoJ,GAAmBpJ,EAAE,OAAO,KAAK;AAAA,YAClD,WAAU;AAAA,UAAA;AAAA,QAAA;AAAA,MACZ,EAAA,CACF,EAAA,CACF;AAAA,MAGD2H,KAAgBN,EAAO,WACtB,gBAAA/J,EAACtB,IAAA,EAAO,SAAS,MAAMmM,EAAe,EAAI,GAAG,SAAQ,aACnD,UAAA;AAAA,QAAA,gBAAAlL,EAACqO,IAAA,EAAO,WAAU,eAAA,CAAe;AAAA,QAAE;AAAA,MAAA,EAAA,CAErC;AAAA,IAAA,GAEJ;AAAA,IAGA,gBAAAhO,EAAC,OAAA,EAAI,WAAU,2GACb,UAAA;AAAA,MAAA,gBAAAL,EAAC,SAAI,WAAU,mBACb,UAAA,gBAAAK,EAAC,SAAA,EAAM,WAAU,4DACf,UAAA;AAAA,QAAA,gBAAAL,EAAC,SAAA,EAAM,WAAU,kCACf,UAAA,gBAAAA,EAAC,QACE,UAAAkK,EAAW,IAAI,CAAC0D,MACf,gBAAA5N;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,WAAW,gIAAgI4N,EAAI,aAAa,EAAE;AAAA,YAE7J,UAAAA,EAAI;AAAA,UAAA;AAAA,UAHAA,EAAI;AAAA,QAAA,CAKZ,GACH,EAAA,CACF;AAAA,QAEA,gBAAA5N,EAAC,WAAM,WAAU,2EACd,aAAc,WAAW,sBACvB,MAAA,EACC,UAAA,gBAAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,SAASkK,EAAW;AAAA,YACpB,WAAU;AAAA,YAET,UAAAI;AAAA,UAAA;AAAA,QAAA,GAEL,IAEAwB,GAAc,IAAI,CAAC6B,GAAKpG,MACtB,gBAAAvH;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,WAAU;AAAA,YAET,UAAAkK,EAAW,IAAI,CAAC0D,MACf,gBAAA5N;AAAA,cAAC;AAAA,cAAA;AAAA,gBAEC,WAAW,gEAAgE4N,EAAI,QAAQ,UAAU,KAAK,eAAe,aACnHO,GAAkBP,CAAG,IAAI,mBAAmB,EAC9C;AAAA,gBACA,OAAO,OAAOD,EAAIC,EAAI,GAAG,KAAK,EAAE;AAAA,gBAChC,SAAS,MAAMM,GAAkBN,GAAKD,CAAG;AAAA,gBAExC,UAAAC,EAAI,SACDA,EAAI,OAAOD,GAAKpG,CAAK,IACrBwG,GAAsBH,GAAKD,GAAKpG,CAAK;AAAA,cAAA;AAAA,cATpCqG,EAAI;AAAA,YAAA,CAWZ;AAAA,UAAA;AAAA,UAhBID,EAAI,MAAMA,EAAI,OAAOpG;AAAA,QAAA,CAkB7B,EAAA,CAEL;AAAA,MAAA,EAAA,CACF,EAAA,CACF;AAAA,OAEC8C,KAAA,gBAAAA,EAAY,YAAWgB,EAAa,SAAS,KAC5C,gBAAAhL,EAAC,OAAA,EAAI,WAAU,6IACb,UAAA;AAAA,QAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,4CAA2C,UAAA;AAAA,UAAA;AAAA,WAC9CkL,IAAc,KAAKE,IAAW;AAAA,UAAE;AAAA,UAAI;AAAA,UAC7C,KAAK,IAAIF,IAAcE,GAAUE,CAAY;AAAA,UAAE;AAAA,UAAKA;AAAA,UAAc;AAAA,UAAI;AAAA,QAAA,GAEzE;AAAA,QAEA,gBAAAtL,EAAC,OAAA,EAAI,WAAU,2BAEb,UAAA;AAAA,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,YAAA,gBAAAL,EAAC,QAAA,EAAK,WAAU,4CAA2C,UAAA,kBAE3D;AAAA,YACA,gBAAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OAAOyL;AAAA,gBACP,UAAU,CAAC1I,MAAM;AACf,wBAAMuL,IAAW,OAAOvL,EAAE,OAAO,KAAK;AACtC,kBAAA2I,EAAY4C,CAAQ,GACpB9C,EAAe,CAAC,GACZnB,EAAW,2BACbG,EAA4B,CAAC1E,OAAU;AAAA,oBACrC,GAAGA;AAAA,oBACH,cAAc;AAAA,oBACd,eAAewI;AAAA,kBAAA,EACf;AAAA,gBAEN;AAAA,gBACA,WAAU;AAAA,gBAET,WAAC,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,CAACrQ,wBACxB,UAAA,EAAe,OAAOA,GACpB,UAAAA,EAAA,GADUA,CAEb,CACD;AAAA,cAAA;AAAA,YAAA;AAAA,UACH,GACF;AAAA,UAGA,gBAAAoC,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,YAAA,gBAAAL;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,SAAS,MAAM;AACb,sBAAIuL,IAAc,GAAG;AACnB,0BAAMgD,IAAUhD,IAAc;AAC9B,oBAAAC,EAAe+C,CAAO,GAClBlE,EAAW,2BACbG,EAA4B,CAAC1E,OAAU;AAAA,sBACrC,GAAGA;AAAA,sBACH,cAAcyI;AAAA,oBAAA,EACd;AAAA,kBAEN;AAAA,gBACF;AAAA,gBACA,UAAUhD,MAAgB;AAAA,gBAC1B,WAAU;AAAA,gBAEV,UAAA,gBAAAvL,EAACwO,IAAA,EAAY,WAAU,UAAA,CAAU;AAAA,cAAA;AAAA,YAAA;AAAA,YAGnC,gBAAAnO,EAAC,QAAA,EAAK,WAAU,4CAA2C,UAAA;AAAA,cAAA;AAAA,cACnDkL;AAAA,cAAY;AAAA,cAAKM;AAAA,YAAA,GACzB;AAAA,YAEA,gBAAA7L;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,SAAS,MAAM;AACb,sBAAIuL,IAAcM,IAAY;AAC5B,0BAAM0C,IAAUhD,IAAc;AAC9B,oBAAAC,EAAe+C,CAAO,GAClBlE,EAAW,2BACbG,EAA4B,CAAC1E,OAAU;AAAA,sBACrC,GAAGA;AAAA,sBACH,cAAcyI;AAAA,oBAAA,EACd;AAAA,kBAEN;AAAA,gBACF;AAAA,gBACA,UAAUhD,MAAgBM;AAAA,gBAC1B,WAAU;AAAA,gBAEV,UAAA,gBAAA7L,EAACyO,IAAA,EAAa,WAAU,UAAA,CAAU;AAAA,cAAA;AAAA,YAAA;AAAA,UACpC,EAAA,CACF;AAAA,QAAA,EAAA,CACF;AAAA,MAAA,EAAA,CACF;AAAA,IAAA,GAEJ;AAAA,IAGC9D,KACC+D;AAAA,MACE,gBAAA1O;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAKgM;AAAA,UACL,OAAO;AAAA,YACL,UAAU;AAAA,YACV,KAAK,GAAGjB,EAAa,GAAG;AAAA,YACxB,MAAM,GAAGA,EAAa,IAAI;AAAA,YAC1B,QAAQ;AAAA,UAAA;AAAA,UAEV,WAAU;AAAA,UAET,UAAAF,EAAS,IAAI,CAACwB,GAAQ7C,MACrB,gBAAAnJ;AAAA,YAAC;AAAA,YAAA;AAAA,cAEC,SAAS,CAAC0C,MACRqJ;AAAA,gBACEC;AAAA,gBACAhO,EAAK;AAAA,kBACH,CAACsQ,MAAMA,EAAE,OAAOhE,KAAcgE,EAAE,OAAOhE;AAAA,gBAAA;AAAA,gBAEzC5H;AAAA,cAAA;AAAA,cAGJ,WAAW,uGACTsJ,EAAO,YAAY,WACf,mCACA,kCACN;AAAA,cAEC,UAAA;AAAA,gBAAAA,EAAO,QAAQ,gBAAArM,EAAC,QAAA,EAAK,WAAU,YAAY,YAAO,MAAK;AAAA,gBACvDqM,EAAO;AAAA,cAAA;AAAA,YAAA;AAAA,YAjBH7C;AAAA,UAAA,CAmBR;AAAA,QAAA;AAAA,MAAA;AAAA,MAEH,SAAS;AAAA,IAAA;AAAA,IAIZkB,KACC,gBAAA1K;AAAA,MAACqI;AAAA,MAAA;AAAA,QACC,QAAQ4C;AAAA,QACR,SAAS,MAAMC,EAAe,EAAK;AAAA,QACnC,QAAQR;AAAA,QACR,SAASD;AAAA,MAAA;AAAA,IAAA;AAAA,IAIZnC,KACC,gBAAAtI;AAAA,MAAC2J;AAAA,MAAA;AAAA,QACC,KAAKwB,EAAY;AAAA,QACjB,KAAKA,EAAY;AAAA,QACjB,QAAA7C;AAAA,QACA,WAAAwB;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GAEJ;AAEJ,GCpkBM8E,KAAQ,CAAC;AAAA,EACb,QAAAtG;AAAA,EACA,SAAAC;AAAA,EACA,MAAAsG;AAAA,EACA,OAAAC;AAAA,EACA,UAAAxP;AAAA,EACA,MAAAF,IAAO;AAAA,EACP,eAAA2P,IAAgB,CAAA;AAAA,EAChB,SAAAC;AAAA,EACA,kBAAAC,IAAmB;AAAA,EACnB,cAAAC,IAAe;AAAA,EACf,YAAAC,IAAa;AAAA,EACb,cAAAC,IAAe,MAAM;AAAA,EAAC;AAAA,EACtB,UAAAC;AAAA,EACA,YAAAC,IAAa;AAAA,EACb,iBAAAC,IAAkB,MAAM;AAAA,EAAC;AAAA,EACzB,cAAAC,IAAe;AACjB,MAAM;AACJ,MAAI,CAAClH,EAAQ,QAAO;AAGpB,QAAMmH,IAAc;AAAA,IAClB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,MAAM;AAAA,EAAA;AAGR,SACE,gBAAApP,EAAC,OAAA,EAAI,WAAU,2DAEb,UAAA;AAAA,IAAA,gBAAAL;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,SAAS,MAAMuI,EAAA;AAAA,MAAQ;AAAA,IAAA;AAAA,IAIzB,gBAAAlI;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,iDACToP,EAAYrQ,CAAI,KAAKqQ,EAAY,EACnC;AAAA,QAGA,UAAA;AAAA,UAAA,gBAAApP,EAAC,OAAA,EAAI,WAAU,qGACb,UAAA;AAAA,YAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,2BACZ,UAAA;AAAA,cAAAwO,KAAQ,gBAAA7O,EAAC,UAAM,UAAA6O,EAAA,CAAK;AAAA,cACrB,gBAAA7O,EAAC,MAAA,EAAG,WAAU,qDACX,UAAA8O,EAAA,CACH;AAAA,YAAA,GACF;AAAA,YAEA,gBAAA9O;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,SAAS,MAAMuI,EAAA;AAAA,gBACf,WAAU;AAAA,gBAEV,UAAA,gBAAAvI,EAAC8I,IAAA,EAAE,WAAU,UAAA,CAAU;AAAA,cAAA;AAAA,YAAA;AAAA,UACzB,GACF;AAAA,UAGA,gBAAA9I,EAAC,OAAA,EAAI,WAAU,8BAA8B,UAAAV,EAAA,CAAS;AAAA,UAiDrDyP,EAAc,SAAS,KACtB,gBAAA/O,EAAC,OAAA,EAAI,WAAU,0FACZ,UAAA+O,EAAc,IAAI,CAACW,MAClB,gBAAA1P;AAAA,YAACjB;AAAA,YAAA;AAAA,cACC,SAAS,CAACgE,MAAM;AACd,gBAAI2M,EAAI,QAAQ,WACdN,EAAarM,CAAC,IAEdwM;AAAA,kBACE,MAAA;;AAAM,4BAAA1P,IAAA6P,KAAA,gBAAAA,EAAK,YAAL,gBAAA7P,EAAA,KAAA6P,GAAe3M,GAAGyM;AAAA;AAAA,kBACxB,CAACG,MAASpH,KAAA,gBAAAA,EAAUoH;AAAA,gBAAI;AAAA,cAG9B;AAAA,cACA,UAAUL,KAAcI,EAAI;AAAA,cAC5B,SAASA,EAAI,WAAW;AAAA,cACxB,OAAOA,EAAI,SAAS;AAAA,cACpB,WAAW,iBAAiBA,EAAI,SAAS;AAAA,cACzC,MAAMA,EAAI,QAAQ;AAAA,cAEjB,UAAAJ,IACC,gBAAAjP,EAAC,OAAA,EAAI,WAAU,qBACb,UAAA;AAAA,gBAAA,gBAAAL,EAAC,OAAA,EAAI,WAAU,4FAAA,CAA4F;AAAA,gBAC1G0P,EAAI,SAAS;AAAA,gBAAS;AAAA,cAAA,GACzB,IAEAA,EAAI,SAAS;AAAA,YAAA;AAAA,UAAA,CAGlB,EAAA,CACH;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAEJ,GACF;AAEJ,GClJME,KAAO,CAAC,EAAE,QAAApH,GAAQ,UAAAqH,GAAU,aAAAC,IAAc,CAAA,QAAS;;AACvD,QAAM,EAAE,WAAAC,IAAY,2BAA2B,YAAAC,IAAa,CAAA,EAAC,IAC3DxH,KAAU,CAAA,GAEN,CAACX,GAAUoI,CAAW,IAAI9O,EAAS2O,CAAW;AAEpD,EAAA7N,EAAU,MAAM;AACd,IAAAgO,EAAYH,CAAW;AAAA,EACzB,GAAG,CAAA,CAAE;AAEL,QAAMhI,IAAe,CAACjJ,GAAK2B,MAAU;AACnC,IAAAyP,EAAY,CAACnK,OAAU,EAAE,GAAGA,GAAM,CAACjH,CAAG,GAAG2B,EAAA,EAAQ;AAAA,EACnD,GAEM0P,IAAe,CAACnN,MAAM;AAC1B,IAAAA,EAAE,eAAA;AACF,UAAMoN,IAAOpN,EAAE;AAEf,QAAI,CAACoN,EAAK,iBAAiB;AACzB,MAAAA,EAAK,eAAA;AACL;AAAA,IACF;AAEA,IAAAN,EAAShI,CAAQ;AAAA,EACnB;AAEA,SACE,gBAAA7H;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAIH,IAAA2I,EAAO,UAAP,QAAA3I,EAAc,cAAc,SAAS,UAAU,aAAa;AAAA,MAChE,UAAUqQ;AAAA,MACV,WAAWH;AAAA,MACX,YAAY;AAAA,MAEX,UAAAC,EAAW,IAAI,CAACpI,MACf,gBAAA5H,EAAAI,GAAA,EACE,UAAA,gBAAAJ;AAAA,QAAC2H;AAAA,QAAA;AAAA,UAEC,OAAAC;AAAA,UACA,UAAAC;AAAA,UACA,cAAAC;AAAA,QAAA;AAAA,QAHKF,EAAM;AAAA,MAAA,GAKf,CACD;AAAA,IAAA;AAAA,EAAA;AAGP;AC1CA,SAAwBwI,GAAQ,EAAE,MAAA/R,GAAM,QAAAmK,KAAU;AAChD,QAAM,EAAE,QAAA6H,GAAQ,gBAAAC,EAAA,IAAmB9H,GAG7B,CAAC2C,GAAaC,CAAc,IAAIjK,EAAS,IAAI,GAC7C,CAACmH,GAAQwB,CAAS,IAAI3I,EAAS,EAAK,GAEpC8L,IAAc,CAACpI,MAAU;AAC7B,IAAAuG,EAAevG,CAAK,GACpBiF,EAAU,EAAI;AAAA,EAChB,GAEMyG,IAAY,CAAC,EAAE,KAAA3C,QAAU;;AAC7B,QAAItI,IAAOsI,KAAA,gBAAAA,EAAK,MACZ1N,IAAQ0N,EAAI,OACZpN,IAAQnC,EAAKuP,EAAI,GAAG,GACpBpI,IAAOoI,EAAI,MACX1O,IAAU0O,EAAI,WAAW,WACzBzO,IAAQyO,EAAI;AAEhB,QAAIpI,MAAS,YAAU3F,IAAA+N,EAAI,gBAAJ,gBAAA/N,EAAiB,UAAS,GAAG;AAClD,UAAIiO,IAAUF,KAAA,gBAAAA,EAAK,YAAY,KAAK,CAAClP,MAAQA,EAAI,SAAS8B;AAC1D,MAAIsN,MACFtN,IAAQsN,EAAQ,OAChB3O,IAAQ2O,EAAQ;AAAA,IAEpB;AAEA,WACE,gBAAAzN;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW;AAAA,iDAC8BuN,EAAI,cAAc,EAAE;AAAA,QAE5D,UAAA;AAAA,UAAAtI,KAAQ,gBAAAtF,EAAC,OAAA,EAAI,WAAU,iBAAiB,UAAAsF,GAAK;AAAA,UAE9C,gBAAAjF,EAAC,OAAA,EAAI,WAAU,kBACb,UAAA;AAAA,YAAA,gBAAAL,EAAC,KAAA,EAAE,WAAU,wDACV,UAAAE,GACH;AAAA,YAGCsF,MAAS,SACR,gBAAAxF;AAAA,cAACiJ;AAAA,cAAA;AAAA,gBACC,OAAOzI;AAAA,gBACP,SAAAtB;AAAA,gBACA,OAAAC;AAAA,gBACA,WAAU;AAAA,cAAA;AAAA,YAAA;AAAA;AAAA,cAGdqG,MAAS,eACP,gBAAAxF;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAU;AAAA,kBACV,yBAAyB;AAAA,oBACvB,QAAQQ;AAAA,kBAAA;AAAA,gBACV;AAAA,cAAA,IAEAgF,MAAS,UACXhF,IACE,gBAAAR;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBAEC,UAAQ;AAAA,kBACR,KAAKQ;AAAA,kBACL,SAAS,CAACuC,MAAMA,EAAE,gBAAA;AAAA,kBAClB,WAAU;AAAA,gBAAA;AAAA,gBAJLvC;AAAA,cAAA,IAOP,gBAAAR,EAAC,KAAA,EAAE,WAAU,8BAA6B,UAAA,OAAG;AAAA;AAAA,kCAI9C,KAAA,EAAE,WAAU,0DACV,UAAAwF,KAAQ,SACP,gBAAAxF,EAAC,QAAA,EAAM,UAAApC,GAAW4C,GAAOoN,EAAI,UAAU,aAAa,EAAA,CAAE,IAEtDpN,KAAS,MAAA,CAEb;AAAA;AAAA;AAAA,UAAA,EAAA,CAEJ;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN,GAEMgQ,IAAW,CAAC,EAAE,KAAA5C,QAAU;AAC5B,QAAIkB,IAAQzQ,EAAKuP,EAAI,QAAQ,GACzB6C,IAAWpS,EAAKuP,EAAI,WAAW,GAC/B/I,IAAQxG,EAAKuP,EAAI,QAAQ,GACzBP,IAAgBhP,EAAKuP,EAAI,aAAa;AAE1C,WACE,gBAAAvN;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW;AAAA;AAAA,QAEXuN,EAAI,UAAU;AAAA,QAEb,UAAA;AAAA,UAAA/I,IACC,gBAAA7E;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAK6E;AAAA,cACL,KAAKiK;AAAA,cACL,SAAS,MAAM7B,EAAY,EAAE,KAAKpI,GAAO,KAAKiK,GAAO;AAAA,cACrD,WAAU;AAAA,YAAA;AAAA,UAAA,IAEVzB,KAGF,gBAAArN,EAAC,OAAA,EAAI,WAAU,sIACb,UAAA,gBAAAA,EAACsN,IAAA,EAAK,WAAU,wBAAA,CAAwB,EAAA,CAC1C;AAAA,4BAGD,OAAA,EACC,UAAA;AAAA,YAAA,gBAAAtN,EAAC,MAAA,EAAG,WAAU,uDACX,UAAA8O,GACH;AAAA,YACA,gBAAA9O,EAAC,KAAA,EAAE,WAAU,4CAA4C,UAAAyQ,EAAA,CAAS;AAAA,UAAA,EAAA,CACpE;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AAEA,SACE,gBAAApQ,EAAAD,GAAA,EACG,UAAA;AAAA,IAAAkI,KACC,gBAAAtI;AAAA,MAAC2J;AAAA,MAAA;AAAA,QACC,KAAKwB,EAAY;AAAA,QACjB,KAAKA,EAAY;AAAA,QACjB,QAAA7C;AAAA,QACA,WAAAwB;AAAA,MAAA;AAAA,IAAA;AAAA,sBAIH,OAAA,EAAI,WAAW,2BAA2BwG,KAAkB,EAAE,IAC5D,UAAAD,EAAO;AAAA,MAAI,CAACzC,MACXA,EAAI,QAAQ,UACV,gBAAA5N,EAACwQ,GAAA,EAAS,KAAA5C,EAAA,CAAU,IAEpB,gBAAA5N,EAACuQ,GAAA,EAAU,KAAA3C,EAAA,CAAU;AAAA,IAAA,EAEzB,CACF;AAAA,EAAA,GACF;AAEJ;ACxIA,MAAM8C,KAAW,CAAC,EAAE,QAAAlI,QAAa;;AAC/B,QAAM;AAAA,IACJ,OAAAsG;AAAA,IACA,WAAA6B,IAAY,YAAY;AAAA,IAAC;AAAA,IACzB,cAAAC,IAAe;AAAA,IACf,aAAAC,IAAc,CAAA;AAAA,IACd,aAAAC,IAAc,CAAA;AAAA,IACd,cAAApG;AAAA,EAAA,IACElC,GAEE,CAAC2B,GAAS4G,CAAU,IAAI5P,EAAS,EAAI,GACrC,CAAC6P,GAAaC,CAAc,IAAI9P,EAAS,EAAK,GAE9C,CAAC+P,GAAaC,CAAc,IAAIhQ,EAAS,CAAA,CAAE,GAC3C,CAACiQ,GAAgBC,CAAiB,IAAIlQ,EAAS,IAAI,GACnD,CAACmQ,GAA0B9G,CAA2B,IAAIrJ,EAAS;AAAA,IACvE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,cAAc;AAAA,EAAA,CACf,GACK,CAACoQ,GAAYC,CAAa,IAAIrQ,EAAS,CAAA,CAAE,GACzC,CAACsQ,GAAkBC,CAAmB,IAAIvQ,EAAS,EAAK,GAExD,CAACwQ,GAASC,CAAU,IAAIzQ,EAAS,EAAK,GACtC,CAAC0Q,GAAUC,CAAW,IAAI3Q,EAAS,EAAK,GACxC,CAAC4Q,GAAYC,CAAa,IAAI7Q,EAAS,EAAK,GAC5C,CAAC8Q,GAAUC,CAAW,IAAI/Q,EAAS,EAAK,GACxC,CAACqO,GAAc2C,CAAe,IAAIhR,EAAS,IAAI,GAE/CiR,IAAmB,CAAC/F,GAAQ1N,MAAS;AACzC,IAAI0N,MAAW,UACb8F,EAAgBxT,CAAI,GACpBmT,EAAY,EAAI,KACPzF,MAAW,UACpB8F,EAAgBxT,CAAI,GACpBuT,EAAY,EAAI,KACP7F,MAAW,aACpB8F,EAAgBxT,CAAI,GACpBqT,EAAc,EAAI;AAAA,EAEtB,GAEMK,IAAgB,OACpBhG,GACAiG,GACAC,IAAkB,IAClBC,IAAgB,OACb;AACH,IAAAvB,EAAe,EAAI;AAEnB,QAAI;AACF,YAAMtB,IAAO,OAAMtD,KAAA,gBAAAA;AACnB,OAAIkG,KAAmB5C,EAAK,YAC1B8C,GAAgBF,KAAmB5C,EAAK,SAAS;AAAA,QAC/C,SAAS;AAAA,MAAA,CACV,GAEH2C,KAAA,QAAAA,EAAY3C;AAAA,IACd,SAAS7I,GAAO;AACd,OAAI0L,KAAiB1L,EAAM,YACzB2L,GAAgBD,KAAiB1L,EAAM,SAAS,EAAE,SAAS,SAAS;AAAA,IAExE,UAAA;AACE,MAAAmK,EAAe,EAAK;AAAA,IACtB;AAAA,EACF,GAEMyB,KAAkB,CAAC/C,MAAS;AAChC,QAAIgD,IAAShD,EAAK;AAClB,IAAIiB,KACFO,EAAe,CAACrL,MAAS,CAAC6M,GAAQ,GAAG7M,CAAI,CAAC,GAC1CuL,EAAkB,CAACvL,OAAU;AAAA,MAC3B,GAAGA;AAAA,MACH,cAAc;AAAA,IAAA,EACd,MAEF0E,EAA4B,CAAC1E,OAAU;AAAA,MACrC,GAAGA;AAAA,MACH,cAAc;AAAA,IAAA,EACd,GACEwL,EAAyB,gBAAgB,KAC3CsB,GAAA,IAGJhB,EAAW,EAAK;AAAA,EAClB,GAEMiB,KAAmB,CAAClD,MAAS;AACjC,QAAImD,IAAanD,EAAK,WAClBoD,IAAYpD,EAAK;AACrB,IAAIiB,IACFO;AAAA,MAAe,CAACrL,MACdA,EAAK;AAAA,QAAI,CAACnH,MACRA,EAAK,OAAOoU,EAAU,KAAK,EAAE,GAAGpU,GAAM,GAAGmU,MAAenU;AAAA,MAAA;AAAA,IAC1D,IAGFiU,GAAA,GAEFd,EAAY,EAAK;AAAA,EACnB,GAEMkB,KAAqB,CAACrD,MAAS;AACnC,QAAI,CAACA,GAAM;AACT,MAAAqC,EAAc,EAAK,GACnBG,EAAgB,IAAI;AACpB;AAAA,IACF;AAEA,IAAIvB,IACFO;AAAA,MAAe,CAACrL,MACdA,EAAK,OAAO,CAACnH,MAASA,EAAK,OAAOgR,EAAK,aAAa,EAAE;AAAA,IAAA,IAItDuB,EAAY,UAAU,KACtBI,EAAyB,eAAe,IAExC9G,EAA4B,CAAC1E,OAAU;AAAA,MACrC,GAAGA;AAAA,MACH,cAAcA,EAAK,eAAe;AAAA,IAAA,EAClC,IAEF8M,GAAA,GAGJZ,EAAc,EAAK,GACnBG,EAAgB,IAAI;AAAA,EACtB,GAEMc,KAAsB,CAACpL,MAC3BwK;AAAA,IACE,MAAA;;AAAM,cAAAa,KAAArT,IAAAiR,KAAA,gBAAAA,EAAa,aAAb,gBAAAjR,EAAuB,iBAAvB,gBAAAqT,EAAA,KAAArT,GAAsCgI;AAAA;AAAA,IAC5C6K;AAAA,EAAA,GAGES,KAAuB,CAACtL,MAC5BwK;AAAA,IACE,MAAA;;AAAM,cAAAa,KAAArT,IAAAiR,KAAA,gBAAAA,EAAa,cAAb,gBAAAjR,EAAwB,iBAAxB,gBAAAqT,EAAA,KAAArT,GAAuCgI,GAAU2H;AAAA;AAAA,IACvDqD;AAAA,EAAA,GASED,KAAmB,YAAY;AACnC,IAAA7B,EAAW,EAAI,GAEfJ,KAAA,QAAAA,EAAY,EAAE,GAAGW,GAA0B,GAAGC,KAC3C,KAAK,CAAC5B,MAAS;AACd,MAAAwB,EAAexB,EAAK,IAAI,GACxB0B,EAAkB1B,EAAK,UAAU;AAAA,IACnC,GACC,MAAM,CAAC7I,MAAU;AAChB,MAAA2L,GAAgB3L,EAAM,SAAS,EAAE,SAAS,SAAS;AAAA,IACrD,GACC,QAAQ,MAAM;AACb,MAAAiK,EAAW,EAAK;AAAA,IAClB;AAAA,EACJ,GAEMqC,KAAmB,CAAC/U,MAAS;;AACjC,IAAAmT,EAAc,CAAC1L,OAAU;AAAA,MACvB,GAAGzH;AAAA,IAAA,EACH,IACEwB,IAAAgR,KAAA,gBAAAA,EAAa,WAAb,QAAAhR,EAAqB,wBACvB6R,EAAoB,CAAC5L,MAAS,CAACA,CAAI;AAAA,EAEvC,GAEMuN,KAAyB,CAAChV,GAAMqK,MAC7BrK,EAAK;AAAA,IAAO,CAACM,MAClB,OAAO,QAAQ+J,CAAO,EAAE,MAAM,CAAC,CAAC7J,GAAK2B,CAAK,MAAM7B,EAAKE,CAAG,MAAM2B,CAAK;AAAA,EAAA,GAIjE6K,KAAeC,GAAQ,MAAM;;AACjC,YAAIzL,IAAAgR,KAAA,gBAAAA,EAAa,WAAb,QAAAhR,EAAqB,uBAA6BqR,IAC/CmC,GAAuBnC,GAAaK,CAAU;AAAA,EACvD,GAAG,CAACL,GAAaK,CAAU,CAAC;AAE5B,SAAAtP,EAAU,MAAM;AACd,IAAA2Q,GAAA;AAAA,EACF,GAAG;AAAA,IACDtB,EAAyB;AAAA,IACzBA,EAAyB;AAAA,IACzBA,EAAyB;AAAA,IACzBG;AAAA,EAAA,CACD,GAGC,gBAAAzR;AAAA,IAACsT;AAAA,IAAA;AAAA,MACC,UAAU;AAAA,MACV,cAAc;AAAA,QACZ,UAAU;AAAA,QACV,YAAY;AAAA,MAAA;AAAA,MAEd,kBAAkB;AAAA,MAClB,QAAQ,CAACC,MACP,gBAAAvT;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAAS,MAAM;AACb,mBAAO;AAAA,cACL,IAAI,YAAY,iBAAiB,EAAE,QAAQuT,GAAa;AAAA,YAAA;AAAA,UAE5D;AAAA,UACA,WAAU;AAAA,UAEV,UAAA,gBAAAvT,EAAC8I,IAAA,EAAE,WAAU,UAAA,CAAU;AAAA,QAAA;AAAA,MAAA;AAAA,MAI3B,4BAAC,OAAA,EAEC,UAAA;AAAA,QAAA,gBAAAzI,EAAC,OAAA,EAAI,WAAU,2EACb,UAAA;AAAA,UAAA,gBAAAA,EAAC,OAAA,EACC,UAAA;AAAA,YAAA,gBAAAL,EAAC,MAAA,EAAG,WAAU,oDACX,UAAA8O,GACH;AAAA,YACA,gBAAA9O,EAAC,KAAA,EAAE,WAAU,4CACV,iCAAQ,YAAA,CACX;AAAA,UAAA,GACF;AAAA,UACA,gBAAAA,EAAC,OAAA,EAAI,WAAU,+BACb,UAAA,gBAAAK;AAAA,YAACtB;AAAA,YAAA;AAAA,cACC,SAAS,MAAM6S,EAAW,EAAI;AAAA,cAC9B,SAAQ;AAAA,cACR,OAAM;AAAA,cAEN,UAAA;AAAA,gBAAA,gBAAA5R,EAACwT,IAAA,EAAK,WAAU,eAAA,CAAe;AAAA,gBAC9BhL,EAAO,cAAc;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA,EACxB,CACF;AAAA,QAAA,GACF;AAAA,QAGA,gBAAAxI;AAAA,UAACiK;AAAA,UAAA;AAAA,YACC,QAAQ;AAAA,cACN,GAAG4G;AAAA,cACH,YAAY;AAAA,gBACV,GAAGA,EAAY;AAAA,gBACf,GAAGO;AAAA,cAAA;AAAA,cAEL,MAAM/F;AAAA,cACN,6BAAAb;AAAA,cACA,cAAc4H;AAAA,cACd,cAAA1H;AAAA,cACA,eAAe0I;AAAA,cACf,SAAAjJ;AAAA,YAAA;AAAA,UACF;AAAA,QAAA;AAAA,QAIF,gBAAAnK;AAAA,UAAC4O;AAAA,UAAA;AAAA,YACC,QAAQ+C;AAAA,YACR,SAAS,MAAMC,EAAW,EAAK;AAAA,YAC/B,OAAM/R,KAAAiR,EAAY,aAAZ,gBAAAjR,GAAsB;AAAA,YAC5B,SAAOqT,KAAApC,EAAY,aAAZ,gBAAAoC,GAAsB,UAAS;AAAA,YACtC,QAAMO,KAAA3C,EAAY,aAAZ,gBAAA2C,GAAsB,SAAQ;AAAA,YACpC,cAAc,MAAA;;AACZ,sBAAA5T,IAAA,SAAS,cAAc,UAAU,MAAjC,gBAAAA,EAAoC;AAAA;AAAA,YAEtC,YAAYmR;AAAA,YACZ,eAAeF,EAAY,SAAS;AAAA,YAEpC,UAAA,gBAAA9Q;AAAA,cAAC4P;AAAA,cAAA;AAAA,gBACC,SAAQkB,KAAA,gBAAAA,EAAa,aAAY,CAAA;AAAA,gBACjC,UAAUmC;AAAA,gBACV,aAAa,CAAA;AAAA,gBACb,SAASjC;AAAA,cAAA;AAAA,YAAA;AAAA,UACX;AAAA,QAAA;AAAA,QAIF,gBAAAhR;AAAA,UAAC4O;AAAA,UAAA;AAAA,YACC,QAAQiD;AAAA,YACR,SAAS,MAAMC,EAAY,EAAK;AAAA,YAChC,OAAM4B,KAAA5C,EAAY,cAAZ,gBAAA4C,GAAuB;AAAA,YAC7B,SAAOC,KAAA7C,EAAY,cAAZ,gBAAA6C,GAAuB,UAAS;AAAA,YACvC,QAAMC,KAAA9C,EAAY,cAAZ,gBAAA8C,GAAuB,SAAQ;AAAA,YACrC,cAAc,MAAA;;AACZ,sBAAA/T,IAAA,SAAS,cAAc,WAAW,MAAlC,gBAAAA,EAAqC;AAAA;AAAA,YAEvC,eAAeiR,EAAY,UAAU;AAAA,YACrC,YAAYE;AAAA,YAEZ,UAAA,gBAAAhR;AAAA,cAAC4P;AAAA,cAAA;AAAA,gBACC,QAAQkB,EAAY,aAAa,CAAA;AAAA,gBACjC,UAAUqC;AAAA,gBACV,aAAa3D;AAAA,gBACb,SAASwB;AAAA,cAAA;AAAA,YAAA;AAAA,UACX;AAAA,QAAA;AAAA,QAIDe,KACC,gBAAA/R;AAAA,UAAC4O;AAAA,UAAA;AAAA,YACC,QAAQmD;AAAA,YACR,SAAS,CAACpC,MAAS;AACjB,cAAAqD,GAAmBrD,CAAI;AAAA,YACzB;AAAA,YACA,QACEkE,KAAA/C,EAAY,gBAAZ,gBAAA+C,GAAyB,2BACtBvO,IAAA,EAAK,MAAK,mBAAkB,WAAU,uBAAA,CAAuB;AAAA,YAGlE,SAAOwO,KAAAhD,EAAY,gBAAZ,gBAAAgD,GAAyB,UAAS;AAAA,YACzC,QAAMC,IAAAjD,EAAY,gBAAZ,gBAAAiD,EAAyB,SAAQ;AAAA,YACvC,SAAS/C;AAAA,YACT,eAAeF,EAAY,YAAY;AAAA,YACvC,iBAAiBuB;AAAA,YACjB,cAAA7C;AAAA,YAEA,UAAA,gBAAAxP,EAAC,OAAA,EAAI,WAAU,oCACb,4BAAC,OAAA,EACC,UAAA;AAAA,cAAA,gBAAAA,EAAC,OAAE,WAAU,yCACV,YAAAgU,IAAAlD,EAAY,gBAAZ,gBAAAkD,EAAyB,gBACxB,8CACJ;AAAA,gBACCC,IAAAnD,EAAY,gBAAZ,gBAAAmD,EAAyB,iBACxB,gBAAAjU,EAAC,KAAA,EAAE,WAAU,uDACV,UAAAwP,GAAa0E,IAAApD,EAAY,gBAAZ,gBAAAoD,EAAyB,YAAY,EAAA,CACrD;AAAA,YAAA,EAAA,CAEJ,EAAA,CACF;AAAA,UAAA;AAAA,QAAA;AAAA,QAKHpD,EAAY,aACX,gBAAA9Q;AAAA,UAAC4O;AAAA,UAAA;AAAA,YACC,QAAQqD;AAAA,YACR,SAAS,MAAM;AACb,cAAAC,EAAY,EAAK,GACjBC,EAAgB,IAAI;AAAA,YACtB;AAAA,YACA,OAAMgC,IAAArD,EAAY,cAAZ,gBAAAqD,EAAuB;AAAA,YAC7B,SAAOC,IAAAtD,EAAY,cAAZ,gBAAAsD,EAAuB,UAAS;AAAA,YACvC,QAAMC,IAAAvD,EAAY,cAAZ,gBAAAuD,EAAuB,SAAQ;AAAA,YACrC,cAAcvD,KAAA,gBAAAA,EAAa,UAAU;AAAA,YAEpC,WAAAwD,IAAAxD,EAAY,cAAZ,QAAAwD,EAAuB,YACtB,gBAAAtU,EAAC8Q,EAAY,UAAU,WAAtB,EAAgC,MAAMtB,EAAA,CAAc,IAErD,gBAAAxP;AAAA,cAACoQ;AAAA,cAAA;AAAA,gBACC,MAAMZ;AAAA,gBACN,QAAQsB,EAAY,aAAa,CAAA;AAAA,cAAC;AAAA,YAAA;AAAA,UACpC;AAAA,QAAA;AAAA,MAEJ,EAAA,CAEJ;AAAA,IAAA;AAAA,EAAA;AAGN,GAEMyD,KAAaC,EAAU,MAAM;AAAA,EACjC,OAAOA,EAAU,UAAU;AAAA,IACzBA,EAAU;AAAA,IACVA,EAAU;AAAA,IACVA,EAAU;AAAA,EAAA,CACX,EAAE;AAAA,EACH,OAAOA,EAAU,OAAO;AAAA,EACxB,OAAOA,EAAU;AACnB,CAAC,GAEKC,KAAmBD,EAAU,MAAM;AAAA,EACvC,MAAMA,EAAU,OAAO;AAAA,EACvB,OAAOA,EAAU,OAAO;AAAA,EACxB,OAAOA,EAAU;AAAA,EACjB,SAASA,EAAU;AAAA,EACnB,SAASA,EAAU;AACrB,CAAC,GAEKE,KAAiBF,EAAU,MAAM;AAAA,EACrC,OAAOA,EAAU,OAAO;AAAA,EACxB,MAAMA,EAAU,OAAO;AAAA,EACvB,SAASA,EAAU;AAAA,EACnB,MAAMA,EAAU;AAClB,CAAC,GAEKG,KAAgBH,EAAU,MAAM;AAAA,EACpC,KAAKA,EAAU,OAAO;AAAA,EACtB,OAAOA,EAAU;AAAA,EACjB,MAAMA,EAAU;AAAA,EAChB,UAAUA,EAAU;AAAA,EACpB,UAAUA,EAAU;AAAA,EACpB,aAAaA,EAAU;AAAA,EACvB,gBAAgBA,EAAU;AAAA,EAC1B,SAASA,EAAU;AAAA,EACnB,aAAaA,EAAU,QAAQD,EAAU;AAAA,EACzC,cAAcC,EAAU;AAAA,EACxB,WAAWA,EAAU;AAAA,EACrB,QAAQA,EAAU;AAAA,EAClB,UAAUA,EAAU,QAAQE,EAAc;AAC5C,CAAC,GAEKE,KAAgBJ,EAAU,MAAM;AAAA,EACpC,KAAKA,EAAU,OAAO;AAAA,EACtB,OAAOA,EAAU;AAAA,EACjB,MAAMA,EAAU,OAAO;AAAA,EACvB,UAAUA,EAAU;AAAA,EACpB,WAAWA,EAAU;AAAA,EACrB,aAAaA,EAAU;AAAA,EACvB,QAAQA,EAAU;AAAA,EAClB,UAAUA,EAAU;AAAA,EACpB,mBAAmBA,EAAU;AAAA,EAC7B,UAAUA,EAAU;AAAA,EACpB,eAAeA,EAAU;AAAA,EACzB,gBAAgBA,EAAU;AAAA,EAC1B,aAAaA,EAAU;AAAA,EACvB,MAAMA,EAAU;AAAA,EAChB,MAAMA,EAAU;AAAA,EAChB,WAAWA,EAAU;AAAA,EACrB,SAASA,EAAU,QAAQD,EAAU;AACvC,CAAC,GAEKM,KAAgBL,EAAU,MAAM;AAAA,EACpC,KAAKA,EAAU;AAAA,EACf,OAAOA,EAAU;AAAA,EACjB,MAAMA,EAAU;AAAA,EAChB,UAAUA,EAAU;AAAA,EACpB,UAAUA,EAAU;AAAA,EACpB,aAAaA,EAAU;AAAA,EACvB,YAAYA,EAAU;AAAA,EACtB,MAAMA,EAAU;AAAA,EAChB,SAASA,EAAU;AAAA,EACnB,aAAaA,EAAU,QAAQD,EAAU;AAAA,EACzC,cAAcC,EAAU;AAAA,EACxB,WAAWA,EAAU;AAAA,EACrB,QAAQA,EAAU;AACpB,CAAC;AAED9D,GAAS,YAAY;AAAA,EACnB,QAAQ8D,EAAU,MAAM;AAAA,IACtB,OAAOA,EAAU,OAAO;AAAA,IACxB,aAAaA,EAAU;AAAA,IACvB,YAAYA,EAAU;AAAA,IACtB,WAAWA,EAAU,KAAK;AAAA,IAC1B,cAAcA,EAAU;AAAA;AAAA,IAIxB,aAAaA,EAAU,MAAM;AAAA,MAC3B,YAAYA,EAAU,QAAQG,EAAa,EAAE;AAAA,MAE7C,QAAQH,EAAU,MAAM;AAAA,QACtB,SAASA,EAAU;AAAA,QACnB,qBAAqBA,EAAU;AAAA,QAC/B,YAAYA,EAAU,QAAQA,EAAU,MAAM;AAAA,MAAA,CAC/C;AAAA,MAED,YAAYA,EAAU,MAAM;AAAA,QAC1B,SAASA,EAAU;AAAA,QACnB,yBAAyBA,EAAU;AAAA,MAAA,CACpC;AAAA,MAED,QAAQA,EAAU,MAAM;AAAA,QACtB,SAASA,EAAU;AAAA,QACnB,sBAAsBA,EAAU;AAAA,MAAA,CACjC;AAAA,IAAA,CACF,EAAE;AAAA;AAAA,IAIH,aAAaA,EAAU,MAAM;AAAA,MAC3B,UAAUA,EAAU,MAAM;AAAA,QACxB,OAAOA,EAAU,OAAO;AAAA,QACxB,MAAMA,EAAU;AAAA,QAChB,WAAWA,EAAU;AAAA,QACrB,YAAYA,EAAU,QAAQI,EAAa;AAAA,QAC3C,cAAcJ,EAAU,KAAK;AAAA,QAC7B,eAAeA,EAAU,QAAQC,EAAgB;AAAA,MAAA,CAClD;AAAA,MAED,WAAWD,EAAU,MAAM;AAAA,QACzB,OAAOA,EAAU,OAAO;AAAA,QACxB,MAAMA,EAAU;AAAA,QAChB,WAAWA,EAAU;AAAA,QACrB,YAAYA,EAAU,QAAQI,EAAa;AAAA,QAC3C,cAAcJ,EAAU,KAAK;AAAA,QAC7B,eAAeA,EAAU,QAAQC,EAAgB;AAAA,MAAA,CAClD;AAAA,MAED,aAAaD,EAAU,MAAM;AAAA,QAC3B,OAAOA,EAAU,OAAO;AAAA,QACxB,MAAMA,EAAU;AAAA,QAChB,aAAaA,EAAU;AAAA,QACvB,cAAcA,EAAU;AAAA,QACxB,eAAeA,EAAU,QAAQC,EAAgB;AAAA,MAAA,CAClD;AAAA,MAED,WAAWD,EAAU,MAAM;AAAA,QACzB,OAAOA,EAAU,OAAO;AAAA,QACxB,MAAMA,EAAU;AAAA;AAAA,QAGhB,WAAWA,EAAU;AAAA;AAAA,QAErB,QAAQA,EAAU,QAAQK,EAAa;AAAA,QAEvC,QAAQL,EAAU,MAAM;AAAA,UACtB,cAAcA,EAAU;AAAA,UACxB,YAAYA,EAAU;AAAA,QAAA,CACvB;AAAA,MAAA,CACF;AAAA,IAAA,CACF;AAAA;AAAA,IAID,cAAcA,EAAU,MAAM;AAAA,MAC5B,QAAQA,EAAU,QAAQI,EAAa;AAAA,IAAA,CACxC;AAAA,EAAA,CACF,EAAE;AACL;AC7gBA,MAAME,KAAe,MAAM;AAIzB,MAHI,OAAO,WAAa,OAGpB,SAAS,eAAe,iCAAiC,EAAG;AAGhE,QAAMC,IAAQ,SAAS,cAAc,OAAO;AAC5C,EAAAA,EAAM,KAAK;AAGX,QAAMC,IAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiBjB,EAAAD,EAAM,cAAcC,GACpB,SAAS,KAAK,YAAYD,CAAK;AACjC;AAEA,SAAwBE,GAAK1V,GAAO;AAClC,SAAA0C,EAAU,MAAM;AACd,IAAA6S,GAAA;AAAA,EACF,GAAG,CAAA,CAAE,0BAID,UAAA,gBAAA9U,EAAC0Q,IAAA,EAAS,QAAQnR,EAAM,QAAQ,EAAA,CAClC;AAEJ;"}