react-admin-crud-manager 1.0.27 → 1.0.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs.js +23 -23
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.es.js +547 -539
- package/dist/index.es.js.map +1 -1
- package/dist/tailwind.css +0 -18
- package/package.json +1 -1
package/dist/index.es.js.map
CHANGED
|
@@ -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/AudioPicker.jsx","../src/components/Table/components/ImagePreview.jsx","../src/components/Details/components/GroupRow.jsx","../src/components/Details/components/CardGroup.jsx","../src/components/Chip/Chip.jsx","../src/components/Details/components/DetailRow.jsx","../src/components/Form/components/Radio.jsx","../src/components/Form/components/RenderFields.jsx","../src/components/Filter/FilterDrawer.jsx","../src/components/Table/components/TableSkeleton.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 { Info } from \"lucide-react\";\r\nimport React from \"react\";\r\n\r\nexport default function InputLabel({ label, required = false, infoText = \"\" }) {\r\n return (\r\n <>\r\n <label className=\"flex 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\r\n {infoText && (\r\n <span className=\"ml-2 relative group inline-flex items-center cursor-pointer\">\r\n <Info className=\"w-4 h-4 text-gray-500 dark:text-gray-400\" />\r\n\r\n {/* Tooltip */}\r\n <span\r\n className=\"absolute left-1/2 top-full mt-2\r\n w-max max-w-xs bg-white text-black dark:bg-black dark:text-white text-xs\r\n rounded px-2 py-1 opacity-0 shadow-lg\r\n group-hover:opacity-100 transition-opacity\r\n duration-200 pointer-events-none z-50\"\r\n >\r\n {infoText}\r\n </span>\r\n </span>\r\n )}\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 defaultValue = \"\",\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 formData = {},\r\n dependencyKey = \"\",\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 const [normalizedOptions, setNormalizedOptions] = useState([]);\r\n\r\n let initialVal = value || value === false ? value : defaultValue;\r\n\r\n const normalize = (val) => {\r\n if (val === null || val === undefined || val === \"\") return \"\";\r\n return typeof val === \"boolean\" ? String(val) : String(val ?? \"\");\r\n };\r\n\r\n useEffect(\r\n () => {\r\n const loadOptions = async () => {\r\n if (typeof options === \"function\") {\r\n const result = await options(formData);\r\n setNormalizedOptions(result);\r\n } else {\r\n setNormalizedOptions(options || []);\r\n }\r\n };\r\n\r\n loadOptions();\r\n },\r\n dependencyKey ? [options, formData?.[dependencyKey]] : [options],\r\n ); // ✅ Add dependencyKey if options depend on formData\r\n\r\n const normalizedValue = multiple\r\n ? (initialVal || []).map(normalize)\r\n : normalize(initialVal);\r\n\r\n const filteredOptions = normalizedOptions.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 ? normalizedOptions\r\n .filter((opt) => isSelected(opt.value))\r\n .map((opt) => opt.label)\r\n .join(\", \")\r\n : normalizedOptions.find((opt) => isSelected(opt.value))?.label;\r\n\r\n useEffect(() => {\r\n if (initialVal || initialVal === false) {\r\n setTimeout(() => {\r\n onChange(initialVal);\r\n }, 100);\r\n }\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 className={`relative ${className}`} ref={dropdownRef}>\r\n <select\r\n name=\"hidden_select_for_validation\"\r\n value={selectedLabels || \"\"}\r\n required={required}\r\n multiple={multiple}\r\n className=\"absolute opacity-0 right-1/2 top-[80%] -translate-x-1/2 -translate-y-1/2 pointer-events-none h-[10px]\"\r\n >\r\n <option hidden value={selectedLabels}>\r\n {selectedLabels}\r\n </option>\r\n </select>\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 = React.forwardRef(\r\n (\r\n {\r\n label,\r\n required,\r\n parentClass = \"col-span-12\",\r\n className = \"\",\r\n value,\r\n onChange,\r\n disabled = false,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n return (\r\n <div className={`flex justify-between ${parentClass}`}>\r\n {label && <InputLabel label={label} required={required} />}\r\n\r\n <label className=\"relative inline-flex items-center cursor-pointer\">\r\n <input\r\n type=\"checkbox\"\r\n ref={ref}\r\n className=\"sr-only peer\"\r\n checked={value}\r\n onChange={(e) => onChange(e.target.checked)}\r\n disabled={disabled}\r\n {...props}\r\n />\r\n\r\n {/* Switch Track */}\r\n <div\r\n className={`\r\n w-11 h-6 bg-gray-200 peer-focus:outline-none\r\n rounded-full peer dark:bg-gray-700\r\n peer-checked:bg-primary-600\r\n peer-disabled:opacity-50 peer-disabled:cursor-not-allowed\r\n transition-colors duration-200\r\n ${className}\r\n `}\r\n ></div>\r\n\r\n {/* Switch Thumb */}\r\n <div\r\n className=\"\r\n absolute left-1 top-1\r\n w-4 h-4 bg-white rounded-full\r\n transition-transform duration-200\r\n peer-checked:translate-x-5\r\n \"\r\n ></div>\r\n </label>\r\n </div>\r\n );\r\n },\r\n);\r\n\r\nSwitch.displayName = \"Switch\";\r\n\r\nexport { 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\nimport Button from \"../../Button/Button\";\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 if (value instanceof File) {\r\n setImage({ file: value, preview: URL.createObjectURL(value) });\r\n } else if (value?.preview) {\r\n setImage(value);\r\n } else {\r\n setImage(value);\r\n }\r\n\r\n // Cleanup function\r\n return () => {\r\n if (image?.preview && image.preview.startsWith(\"blob:\")) {\r\n URL.revokeObjectURL(image.preview);\r\n }\r\n };\r\n }, [value]);\r\n\r\n const handleFileChange = (files) => {\r\n if (!files || files.length === 0) {\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 // Cleanup previous preview\r\n if (image?.preview && image.preview.startsWith(\"blob:\")) {\r\n URL.revokeObjectURL(image.preview);\r\n }\r\n\r\n setImage(imgObj);\r\n onChange?.(file);\r\n };\r\n\r\n const removeImage = (e) => {\r\n if (e) {\r\n e.stopPropagation(); // Prevent triggering the parent click\r\n }\r\n\r\n // Cleanup preview\r\n if (image?.preview && image.preview.startsWith(\"blob:\")) {\r\n URL.revokeObjectURL(image.preview);\r\n }\r\n\r\n setImage(null);\r\n onChange?.(null);\r\n\r\n // Reset input value\r\n if (inputRef.current) {\r\n inputRef.current.value = \"\";\r\n }\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 const handleButtonClick = () => {\r\n inputRef.current.click();\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-2 border-dashed border-blue-500 bg-blue-50 dark:bg-blue-900/20\"\r\n : \"border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-800\"\r\n }`}\r\n onDragOver={handleDragOver}\r\n onDragLeave={handleDragLeave}\r\n onDrop={handleDrop}\r\n >\r\n {/* Hidden 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 && !image}\r\n className=\"absolute opacity-0 right-[50%] top-[80%] -translate-y-1/2 pointer-events-none h-[10px]\"\r\n />\r\n\r\n {/* Content */}\r\n <div\r\n className={`flex items-center space-x-4 transition-all ${\r\n isDragging ? \"opacity-50\" : \"\"\r\n }`}\r\n >\r\n {image ? (\r\n // Image preview with close button\r\n <div className=\"relative group\">\r\n <img\r\n src={image.preview || image}\r\n alt=\"preview\"\r\n className=\"object-cover w-20 h-20 rounded-full shadow-md\"\r\n />\r\n {/* Close button */}\r\n {!required && (\r\n <button\r\n type=\"button\"\r\n onClick={removeImage}\r\n className=\"absolute top-0 -right-2 bg-red-500 text-white rounded-full p-1 shadow-lg hover:bg-red-600 transition-colors focus:outline-none focus:ring-2 focus:ring-red-500 focus:ring-offset-2\"\r\n aria-label=\"Remove image\"\r\n >\r\n <Icon icon=\"mdi:close\" className=\"w-3 h-3\" />\r\n </button>\r\n )}\r\n </div>\r\n ) : (\r\n // Placeholder icon\r\n <div className=\"rounded-full bg-gray-100 dark:bg-gray-700 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 className=\"flex flex-col items-center space-y-1\">\r\n <Button\r\n type=\"button\"\r\n onClick={handleButtonClick}\r\n variant=\"outlined\"\r\n color=\"default\"\r\n >\r\n {image ? \"Change Image\" : \"Select Image\"}\r\n </Button>\r\n\r\n {/* Optional drag & drop hint */}\r\n {dragDrop && !image && (\r\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">\r\n or drag and drop\r\n </p>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Drag overlay text */}\r\n {dragDrop && isDragging && (\r\n <div className=\"absolute inset-0 flex items-center justify-center pointer-events-none bg-blue-500/10 rounded-md\">\r\n <span className=\"text-blue-600 dark:text-blue-400 font-semibold text-lg\">\r\n Drop image 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, { useEffect, 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 defaultValue = \"\",\r\n field = {},\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 useEffect(() => {\r\n if (defaultValue) {\r\n let value = props.value || defaultValue;\r\n setTimeout(() => {\r\n props.onChange?.({ target: { value: value } });\r\n }, 100);\r\n }\r\n }, [defaultValue]);\r\n\r\n return (\r\n <>\r\n <div key={props.name} className={parentClass || \"col-span-12\"}>\r\n <InputLabel\r\n label={label}\r\n required={required}\r\n infoText={field.infoText}\r\n />\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-outline\" : \"mdi:eye-off-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\nimport Button from \"../../Button/Button\";\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 cleanupAudio();\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 if (typeof value === \"string\") {\r\n setAudio({ preview: value });\r\n } else if (value?.preview) {\r\n setAudio(value);\r\n }\r\n }, [value]);\r\n\r\n // Cleanup function\r\n const cleanupAudio = () => {\r\n if (audio?.preview && audio.preview.startsWith(\"blob:\")) {\r\n URL.revokeObjectURL(audio.preview);\r\n }\r\n };\r\n\r\n const handleFileChange = (files) => {\r\n if (!files || files.length === 0) {\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 cleanupAudio();\r\n setAudio({ file, preview });\r\n onChange?.(file);\r\n };\r\n\r\n const removeAudio = (e) => {\r\n if (e) {\r\n e.stopPropagation();\r\n }\r\n\r\n cleanupAudio();\r\n setAudio(null);\r\n onChange?.(null);\r\n\r\n // Reset input value\r\n if (inputRef.current) {\r\n inputRef.current.value = \"\";\r\n }\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 const handleButtonClick = () => {\r\n inputRef.current.click();\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-lg p-2 transition-all ${\r\n isDragging\r\n ? \"border-2 border-dashed border-blue-500 bg-blue-50 dark:bg-blue-900/20\"\r\n : \"border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-800\"\r\n }`}\r\n onDragOver={handleDragOver}\r\n onDragLeave={handleDragLeave}\r\n onDrop={handleDrop}\r\n >\r\n {/* Hidden 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=\"absolute opacity-0 right-[50%] top-[80%] -translate-y-1/2 pointer-events-none h-[10px]\"\r\n />\r\n\r\n {/* Content */}\r\n <div\r\n className={`flex items-center space-x-4 transition-all ${\r\n isDragging ? \"opacity-50\" : \"\"\r\n }`}\r\n >\r\n {audio ? (\r\n // Audio player with close button and change button\r\n <div className=\"flex items-center space-x-4\">\r\n {/* Close button */}\r\n <div className=\"relative w-full\">\r\n {!required && (\r\n <button\r\n type=\"button\"\r\n onClick={removeAudio}\r\n className=\"absolute top-0 -right-2 bg-red-500 text-white rounded-full p-1 shadow-lg hover:bg-red-600 transition-colors z-10 focus:outline-none focus:ring-2 focus:ring-red-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800\"\r\n aria-label=\"Remove audio\"\r\n >\r\n <Icon icon=\"mdi:close\" className=\"w-3 h-3\" />\r\n </button>\r\n )}\r\n\r\n {/* Audio player */}\r\n <audio\r\n key={audio.preview}\r\n src={audio.preview}\r\n controls\r\n controlsList=\"nodownload\"\r\n />\r\n </div>\r\n <Button type=\"button\" onClick={handleButtonClick}>\r\n <span>Change Audio File</span>\r\n </Button>\r\n </div>\r\n ) : (\r\n // Empty state with upload button\r\n <div className=\"flex items-center justify-center space-x-4\">\r\n <div className=\"rounded-full bg-gray-100 dark:bg-gray-700 h-20 w-20 flex items-center justify-center\">\r\n <Icon icon=\"mdi:music\" className=\"text-gray-400 w-10 h-10\" />\r\n </div>\r\n\r\n <Button\r\n type=\"button\"\r\n onClick={handleButtonClick}\r\n variant=\"outlined\"\r\n >\r\n <span>Choose Audio File</span>\r\n </Button>\r\n\r\n {/* Drag & drop hint */}\r\n {dragDrop && (\r\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">\r\n or drag and drop your audio file here\r\n </p>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Drag overlay */}\r\n {dragDrop && isDragging && !audio && (\r\n <div className=\"absolute inset-0 flex items-center justify-center pointer-events-none bg-blue-500/10 rounded-lg\">\r\n <span className=\"text-blue-600 dark:text-blue-400 font-semibold text-lg bg-white dark:bg-gray-800 px-4 py-2 rounded-lg shadow-lg\">\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;\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 { User } from \"lucide-react\";\r\nimport React, { useState } from \"react\";\r\nimport ImagePreview from \"../../Table/components/ImagePreview\";\r\n\r\nconst GroupRow = ({ col, data }) => {\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 = col.fallback_icon;\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 if (image && image.src instanceof File) {\r\n image = { ...image, src: URL.createObjectURL(image.src) };\r\n }\r\n setTargetImage(image);\r\n setIsOpen(true);\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\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 instanceof File ? URL.createObjectURL(image) : 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 instanceof Function ? (\r\n fallback_icon(data)\r\n ) : (\r\n fallback_icon\r\n )\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\r\nexport default GroupRow;\r\n","import { User } from \"lucide-react\";\r\nimport React, { useState } from \"react\";\r\nimport ImagePreview from \"../../Table/components/ImagePreview\";\r\n\r\nconst CardGroup = ({ col, data }) => {\r\n let title = data[col.titleKey];\r\n let subtitle = data[col.subtitleKey];\r\n let image = data[col.imageKey];\r\n let label = col.label;\r\n let Icon = col?.icon;\r\n let fallback_icon = col.fallback_icon;\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 if (image && image.src instanceof File) {\r\n image = { ...image, src: URL.createObjectURL(image.src) };\r\n }\r\n setTargetImage(image);\r\n setIsOpen(true);\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\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 {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 <div className=\"flex items-center\">\r\n {image ? (\r\n <img\r\n src={image instanceof File ? URL.createObjectURL(image) : image}\r\n alt={title}\r\n onClick={() => openPreview({ src: image, alt: title })}\r\n className=\"w-8 h-8 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 instanceof Function ? (\r\n fallback_icon(data)\r\n ) : (\r\n fallback_icon\r\n )\r\n ) : (\r\n <div className=\"w-8 h-8 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-6 h-6 text-gray-400\" />\r\n </div>\r\n )}\r\n\r\n <div className=\"ml-2\">\r\n <p className=\"mb-0 text-sm text-gray-900 dark:text-white break-words\">\r\n {title}\r\n </p>\r\n <p className=\"text-xs text-gray-500 dark:text-gray-400\">\r\n {subtitle}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\nexport default CardGroup;\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","import React from \"react\";\r\nimport Chip from \"../../Chip/Chip\";\r\nimport { formatDate } from \"../../../lib/utils\";\r\n\r\nconst DetailRow = ({ col, data }) => {\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 instanceof File ? URL.createObjectURL(value) : value}\r\n controls\r\n src={value instanceof File ? URL.createObjectURL(value) : value}\r\n onClick={(e) => e.stopPropagation()}\r\n className=\"shadow-md rounded-full mt-1\"\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\nexport default DetailRow;\r\n","import React from \"react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nconst Radio = ({\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 Radio;\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\nimport AudioPicker from \"./AudioPicker\";\r\nimport GroupRow from \"../../Details/components/GroupRow\";\r\nimport CardGroup from \"../../Details/components/CardGroup\";\r\nimport DetailRow from \"../../Details/components/DetailRow\";\r\nimport Radio from \"./Radio\";\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 defaultValue,\r\n renderCondition,\r\n optionDependencyKey,\r\n pattern,\r\n renderType,\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 if (renderCondition && typeof renderCondition === \"function\") {\r\n const shouldRender = renderCondition(formData);\r\n if (!shouldRender) {\r\n return null;\r\n }\r\n }\r\n\r\n if (renderType && renderType == \"details\") {\r\n switch (type) {\r\n case \"group\":\r\n return <GroupRow col={field} data={formData} />;\r\n case \"cardGroup\":\r\n return <CardGroup col={field} data={formData} />;\r\n default:\r\n return <DetailRow col={field} data={formData} />;\r\n }\r\n }\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 formData={formData}\r\n dependencyKey={optionDependencyKey}\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 defaultValue={defaultValue}\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 \"radio\":\r\n return (\r\n <Radio\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 \"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 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 field={field}\r\n type={type || \"text\"}\r\n defaultValue={defaultValue}\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 pattern={pattern}\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 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 {isOpen && (\r\n <div className=\"flex-1 overflow-y-auto px-4 py-3\">\r\n {config?.component ? (\r\n <config.component\r\n filters={filters}\r\n onFilterChange={handleChange}\r\n />\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\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","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 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 Plus,\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 = ({\r\n config,\r\n setShowAdd,\r\n title,\r\n buttonText,\r\n description,\r\n showAddButton,\r\n}) => {\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 rowClick = 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 const [appliedFilters, setAppliedFilters] = useState({});\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 if (image && image.src instanceof File) {\r\n image = { ...image, src: URL.createObjectURL(image.src) };\r\n }\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 row = null,\r\n ) => {\r\n return (\r\n <>\r\n {imageSrc ? (\r\n <img\r\n src={\r\n imageSrc instanceof File\r\n ? URL.createObjectURL(imageSrc)\r\n : imageSrc\r\n }\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 shrink-0 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 typeof fallback_icon === \"function\" ? (\r\n fallback_icon(row)\r\n ) : (\r\n fallback_icon\r\n )\r\n ) : (\r\n <div\r\n className={`w-10 h-10 flex items-center shrink-0 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={\r\n audioSrc instanceof File\r\n ? URL.createObjectURL(audioSrc)\r\n : audioSrc\r\n }\r\n controls\r\n src={\r\n audioSrc instanceof File\r\n ? URL.createObjectURL(audioSrc)\r\n : audioSrc\r\n }\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 shrink-0 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(\r\n row[col.imageKey],\r\n row[col.titleKey],\r\n \"group-avatar\",\r\n col.fallback_icon,\r\n row,\r\n )\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 <>\r\n <div className=\"min-w-[40px]\">\r\n {renderAvatar(\r\n value,\r\n col.alt,\r\n col.className,\r\n col.fallback_icon,\r\n row,\r\n )}\r\n </div>\r\n </>\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\r\n const handleRowClick = (row) => {\r\n if (typeof rowClick === \"function\") {\r\n return rowClick(row);\r\n }\r\n if (rowClick) {\r\n return onMenuAction?.(\"view\", row);\r\n }\r\n };\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 row is clickable\r\n const isRowClickable = () => rowClick || typeof rowClick === \"function\";\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 return (\r\n <>\r\n {/* header Bar */}\r\n\r\n {loading ? (\r\n <TableSkeleton rows={6} columns={6} />\r\n ) : (\r\n <>\r\n <div className=\"flex flex-col sm:flex-row 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 {description}\r\n </p>\r\n </div>\r\n <div className=\"flex flex-col justify-end items-end gap-2\">\r\n {showAddButton && (\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 {buttonText || \"Add New\"}\r\n </Button>\r\n )}\r\n <div className=\"flex justify-end items-center 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 // add red dot if filter are applied\r\n <div className=\"relative\">\r\n <Button\r\n onClick={() => setShowFilters(true)}\r\n variant=\"contained\"\r\n >\r\n <Filter className=\"w-4 h-4 mr-2\" />\r\n Filters\r\n </Button>\r\n {Object.keys(appliedFilters).length > 0 && (\r\n <span className=\"absolute top-1 right-1 w-2 h-2 bg-red-500 rounded-full\"></span>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </div>\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 ${isRowClickable() ? \"cursor-pointer\" : \"\"}`}\r\n onClick={(e) => {\r\n isRowClickable() && handleRowClick(row);\r\n }}\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={(e) => {\r\n if (isColumnClickable(col)) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n handleColumnClick(col, row);\r\n }\r\n }}\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{\" \"}\r\n {totalRecords} 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 )}\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={(filters) => {\r\n setAppliedFilters(filters);\r\n onFilterApply?.(filters);\r\n }}\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\nimport { enqueueSnackbar } from \"notistack\";\r\n\r\nconst Form = ({\r\n config,\r\n onSubmit,\r\n initialData = {},\r\n fetchRowDetails,\r\n type = \"add\",\r\n}) => {\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 const [dataLoading, setDataLoading] = useState(true);\r\n\r\n const handleGetDetails = async () => {\r\n fetchRowDetails?.(initialData)\r\n .then((resp) => {\r\n setFormData(resp.data);\r\n })\r\n .catch((error) => {\r\n enqueueSnackbar(error.message, { variant: \"error\" });\r\n })\r\n .finally(() => {\r\n setDataLoading(false);\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n if (fetchRowDetails instanceof Function) {\r\n handleGetDetails();\r\n } else {\r\n setFormData(initialData);\r\n setDataLoading(false);\r\n }\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 if (dataLoading) {\r\n return (\r\n // spinner loader\r\n <div className=\"flex items-center justify-center h-64\">\r\n <div\r\n className={`rounded-full border-4 border-blue-500 border-t-gray-200 animate-spin w-8 h-8 border-4`}\r\n style={{\r\n borderTopColor: \"border-primary-500\",\r\n }}\r\n />\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <form\r\n id={\r\n type == \"add\" ? \"addForm\" : type == \"edit\" ? \"editForm\" : \"defaultForm\"\r\n }\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 React, { useEffect, useState } from \"react\";\r\nimport DetailRow from \"./components/DetailRow\";\r\nimport CardGroup from \"./components/CardGroup\";\r\nimport GroupRow from \"./components/GroupRow\";\r\nimport { enqueueSnackbar } from \"notistack\";\r\n\r\nexport default function Details({ data, config, fetchRowDetails }) {\r\n const { fields, containerClass } = config;\r\n\r\n const [detailsData, setDetailsData] = useState(data);\r\n\r\n const [dataLoading, setDataLoading] = useState(true);\r\n\r\n const handleGetDetails = async () => {\r\n fetchRowDetails?.(data)\r\n .then((resp) => {\r\n setDetailsData(resp.data);\r\n })\r\n .catch((error) => {\r\n enqueueSnackbar(error.message, { variant: \"error\" });\r\n })\r\n .finally(() => {\r\n setDataLoading(false);\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n if (fetchRowDetails instanceof Function) {\r\n handleGetDetails();\r\n } else {\r\n setDetailsData(data);\r\n setDataLoading(false);\r\n }\r\n }, []);\r\n\r\n if (dataLoading) {\r\n return (\r\n // spinner loader\r\n <div className=\"flex items-center justify-center h-64\">\r\n <div\r\n className={`rounded-full border-4 border-blue-500 border-t-gray-200 animate-spin w-8 h-8 border-4`}\r\n style={{\r\n borderTopColor: \"border-primary-500\",\r\n }}\r\n />\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <>\r\n <div className={`grid grid-cols-12 gap-4 ${containerClass || \"\"}`}>\r\n {fields.map((col) => {\r\n if (\r\n col.renderCondition &&\r\n typeof col.renderCondition === \"function\"\r\n ) {\r\n const shouldRender = col.renderCondition(detailsData);\r\n if (!shouldRender) {\r\n return null;\r\n }\r\n }\r\n return col.type == \"group\" ? (\r\n <GroupRow col={col} data={detailsData} />\r\n ) : col.type == \"cardGroup\" ? (\r\n <CardGroup col={col} data={detailsData} />\r\n ) : (\r\n <DetailRow col={col} data={detailsData} />\r\n );\r\n })}\r\n </div>\r\n </>\r\n );\r\n}\r\n","import React, { useEffect, useMemo, useState } from \"react\";\r\nimport { X } from \"lucide-react\";\r\nimport Table from \"./Table/Table\";\r\nimport Modal from \"./Modal/Modal\";\r\nimport Form from \"./Form/Form\";\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 fetchRowDetails = null,\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 {/* Table */}\r\n <Table\r\n title={title}\r\n setShowAdd={setShowAdd}\r\n description={config.description}\r\n buttonText={config.buttonText}\r\n showAddButton={!!modalConfig.addModal}\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={() => {\r\n if (!formLoading) {\r\n setShowAdd(false);\r\n }\r\n }}\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 type=\"add\"\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={() => {\r\n if (!formLoading) {\r\n setShowEdit(false);\r\n }\r\n }}\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 type=\"edit\"\r\n loading={formLoading}\r\n fetchRowDetails={fetchRowDetails}\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 fetchRowDetails={fetchRowDetails}\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","infoText","Fragment","jsxs","Info","Select","options","value","defaultValue","onChange","placeholder","disabled","search","name","parentClass","multiple","dropdownMaxHeight","formData","dependencyKey","open","setOpen","useState","setSearchTerm","showAboveState","setShowAboveState","dropdownRef","useRef","searchInputRef","normalizedOptions","setNormalizedOptions","initialVal","normalize","useEffect","result","normalizedValue","filteredOptions","option","isSelected","optionValue","normalized","handleClickOutside","event","rect","spaceBelow","handleOptionClick","finalValue","exists","newValues","v","selectedLabels","opt","ChevronDown","Search","e","Check","Switch","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","imgObj","removeImage","handleDragOver","handleDragLeave","handleDrop","handleButtonClick","Icon","Input","type","onKeyDown","negativeNumberAllow","field","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","idx","AudioPicker","audio","setAudio","cleanupAudio","removeAudio","ImagePreview","src","alt","isOpen","setIsOpen","closePreview","handleEsc","X","GroupRow","col","title","subtitle","fallback_icon","targetImage","setTargetImage","openPreview","User","CardGroup","BADGE_COLORS","BADGE_VARIANTS","Chip","colorConfig","variantKey","variantClasses","DetailRow","chipObj","Radio","text","radioOptions","RenderFields","handleChange","rows","inputClass","minLength","renderCondition","optionDependencyKey","pattern","renderType","finalPlaceholder","baseClass","FilterDrawer","onClose","config","onApply","filters","setFilters","handleApply","handleReset","TableSkeleton","columns","_","i","rowIndex","colIndex","Table","setShowAdd","buttonText","description","showAddButton","table_head","loading","filter","pagination","emptyMessage","onMenuAction","setServerSidePaginationData","onFilterApply","filterConfig","rowClick","activeMenu","setActiveMenu","menuList","setMenuList","menuPosition","setMenuPosition","showFilters","setShowFilters","appliedFilters","setAppliedFilters","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","renderAvatar","imageSrc","imageAlt","row","renderAudio","audioSrc","Music","renderGroupCell","handleRenderChip","handleRenderCellValue","el","EllipsisVertical","handleRowClick","handleColumnClick","isRowClickable","isColumnClickable","handleScroll","Plus","Filter","newLimit","newPage","ChevronLeft","ChevronRight","createPortal","d","Modal","icon","actionButtons","actions","showDefaultClose","footerConfig","hideFooter","onFormSubmit","onCancel","loadingBtn","executeFunction","selectedItem","sizeClasses","btn","resp","Form","onSubmit","initialData","fetchRowDetails","formClass","formFields","setFormData","dataLoading","setDataLoading","handleGetDetails","enqueueSnackbar","handleSubmit","form","Details","fields","containerClass","detailsData","setDetailsData","CrudPage","fetchData","isStaticData","tableConfig","modalConfig","setLoading","formLoading","setFormLoading","listingData","setListingData","paginationData","setPaginationData","serverSidePaginationData","filterData","setFilterData","changeFilterData","setChangeFilterData","showAdd","showEdit","setShowEdit","showDelete","setShowDelete","showView","setShowView","setSelectedItem","handleMenuAction","executeAction","onSuccess","success_message","error_message","handleAddResult","newObj","handleGetListing","handleEditResult","updatedObj","targetObj","handleDeleteResult","handleAddFormSubmit","_b","handleEditFormSubmit","handleFilterData","filterByMatchingFields","SnackbarProvider","snackbarKey","_c","_d","_e","_f","_g","_h","_i","_j","_k","_l","_m","_n","_o","_p","_q","_r","_s","optionType","PropTypes","actionButtonType","menuActionType","tableHeadType","formFieldType","viewFieldType","injectStyles","style","cssRules","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/Table/components/ImagePreview.jsx","../src/components/Details/components/GroupRow.jsx","../src/components/Details/components/CardGroup.jsx","../src/components/Chip/Chip.jsx","../src/components/Details/components/DetailRow.jsx","../src/components/Form/components/Radio.jsx","../src/components/Form/components/RenderFields.jsx","../src/components/Filter/FilterDrawer.jsx","../src/components/Table/components/TableSkeleton.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/OptionalSnackbarProvider.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 { Info } from \"lucide-react\";\r\nimport React from \"react\";\r\n\r\nexport default function InputLabel({ label, required = false, infoText = \"\" }) {\r\n return (\r\n <>\r\n <label className=\"flex 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\r\n {infoText && (\r\n <span className=\"ml-2 relative group inline-flex items-center cursor-pointer\">\r\n <Info className=\"w-4 h-4 text-gray-500 dark:text-gray-400\" />\r\n\r\n {/* Tooltip */}\r\n <span\r\n className=\"absolute left-1/2 top-full mt-2\r\n w-max max-w-xs bg-white text-black dark:bg-black dark:text-white text-xs\r\n rounded px-2 py-1 opacity-0 shadow-lg\r\n group-hover:opacity-100 transition-opacity\r\n duration-200 pointer-events-none z-50\"\r\n >\r\n {infoText}\r\n </span>\r\n </span>\r\n )}\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 defaultValue = \"\",\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 formData = {},\r\n dependencyKey = \"\",\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 const [normalizedOptions, setNormalizedOptions] = useState([]);\r\n\r\n let initialVal = value || value === false ? value : defaultValue;\r\n\r\n const normalize = (val) => {\r\n if (val === null || val === undefined || val === \"\") return \"\";\r\n return typeof val === \"boolean\" ? String(val) : String(val ?? \"\");\r\n };\r\n\r\n useEffect(\r\n () => {\r\n const loadOptions = async () => {\r\n if (typeof options === \"function\") {\r\n const result = await options(formData);\r\n setNormalizedOptions(result);\r\n } else {\r\n setNormalizedOptions(options || []);\r\n }\r\n };\r\n\r\n loadOptions();\r\n },\r\n dependencyKey ? [options, formData?.[dependencyKey]] : [options],\r\n ); // ✅ Add dependencyKey if options depend on formData\r\n\r\n const normalizedValue = multiple\r\n ? (initialVal || []).map(normalize)\r\n : normalize(initialVal);\r\n\r\n const filteredOptions = normalizedOptions.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 ? normalizedOptions\r\n .filter((opt) => isSelected(opt.value))\r\n .map((opt) => opt.label)\r\n .join(\", \")\r\n : normalizedOptions.find((opt) => isSelected(opt.value))?.label;\r\n\r\n useEffect(() => {\r\n if (initialVal || initialVal === false) {\r\n setTimeout(() => {\r\n onChange(initialVal);\r\n }, 100);\r\n }\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 className={`relative ${className}`} ref={dropdownRef}>\r\n <select\r\n name=\"hidden_select_for_validation\"\r\n value={selectedLabels || \"\"}\r\n required={required}\r\n multiple={multiple}\r\n className=\"absolute opacity-0 right-1/2 top-[80%] -translate-x-1/2 -translate-y-1/2 pointer-events-none h-[10px]\"\r\n >\r\n <option hidden value={selectedLabels}>\r\n {selectedLabels}\r\n </option>\r\n </select>\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 = React.forwardRef(\r\n (\r\n {\r\n label,\r\n required,\r\n parentClass = \"col-span-12\",\r\n className = \"\",\r\n value,\r\n onChange,\r\n disabled = false,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n return (\r\n <div className={`flex justify-between ${parentClass}`}>\r\n {label && <InputLabel label={label} required={required} />}\r\n\r\n <label className=\"relative inline-flex items-center cursor-pointer\">\r\n <input\r\n type=\"checkbox\"\r\n ref={ref}\r\n className=\"sr-only peer\"\r\n checked={value}\r\n onChange={(e) => onChange(e.target.checked)}\r\n disabled={disabled}\r\n {...props}\r\n />\r\n\r\n {/* Switch Track */}\r\n <div\r\n className={`\r\n w-11 h-6 bg-gray-200 peer-focus:outline-none\r\n rounded-full peer dark:bg-gray-700\r\n peer-checked:bg-primary-600\r\n peer-disabled:opacity-50 peer-disabled:cursor-not-allowed\r\n transition-colors duration-200\r\n ${className}\r\n `}\r\n ></div>\r\n\r\n {/* Switch Thumb */}\r\n <div\r\n className=\"\r\n absolute left-1 top-1\r\n w-4 h-4 bg-white rounded-full\r\n transition-transform duration-200\r\n peer-checked:translate-x-5\r\n \"\r\n ></div>\r\n </label>\r\n </div>\r\n );\r\n },\r\n);\r\n\r\nSwitch.displayName = \"Switch\";\r\n\r\nexport { 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\nimport Button from \"../../Button/Button\";\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 if (value instanceof File) {\r\n setImage({ file: value, preview: URL.createObjectURL(value) });\r\n } else if (value?.preview) {\r\n setImage(value);\r\n } else {\r\n setImage(value);\r\n }\r\n\r\n // Cleanup function\r\n return () => {\r\n if (image?.preview && image.preview.startsWith(\"blob:\")) {\r\n URL.revokeObjectURL(image.preview);\r\n }\r\n };\r\n }, [value]);\r\n\r\n const handleFileChange = (files) => {\r\n if (!files || files.length === 0) {\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 // Cleanup previous preview\r\n if (image?.preview && image.preview.startsWith(\"blob:\")) {\r\n URL.revokeObjectURL(image.preview);\r\n }\r\n\r\n setImage(imgObj);\r\n onChange?.(file);\r\n };\r\n\r\n const removeImage = (e) => {\r\n if (e) {\r\n e.stopPropagation(); // Prevent triggering the parent click\r\n }\r\n\r\n // Cleanup preview\r\n if (image?.preview && image.preview.startsWith(\"blob:\")) {\r\n URL.revokeObjectURL(image.preview);\r\n }\r\n\r\n setImage(null);\r\n onChange?.(null);\r\n\r\n // Reset input value\r\n if (inputRef.current) {\r\n inputRef.current.value = \"\";\r\n }\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 const handleButtonClick = () => {\r\n inputRef.current.click();\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-2 border-dashed border-blue-500 bg-blue-50 dark:bg-blue-900/20\"\r\n : \"border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-800\"\r\n }`}\r\n onDragOver={handleDragOver}\r\n onDragLeave={handleDragLeave}\r\n onDrop={handleDrop}\r\n >\r\n {/* Hidden 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 && !image}\r\n className=\"absolute opacity-0 right-[50%] top-[80%] -translate-y-1/2 pointer-events-none h-[10px]\"\r\n />\r\n\r\n {/* Content */}\r\n <div\r\n className={`flex items-center space-x-4 transition-all ${\r\n isDragging ? \"opacity-50\" : \"\"\r\n }`}\r\n >\r\n {image ? (\r\n // Image preview with close button\r\n <div className=\"relative group\">\r\n <img\r\n src={image.preview || image}\r\n alt=\"preview\"\r\n className=\"object-cover w-20 h-20 rounded-full shadow-md\"\r\n />\r\n {/* Close button */}\r\n {!required && (\r\n <button\r\n type=\"button\"\r\n onClick={removeImage}\r\n className=\"absolute top-0 -right-2 bg-red-500 text-white rounded-full p-1 shadow-lg hover:bg-red-600 transition-colors focus:outline-none focus:ring-2 focus:ring-red-500 focus:ring-offset-2\"\r\n aria-label=\"Remove image\"\r\n >\r\n <Icon icon=\"mdi:close\" className=\"w-3 h-3\" />\r\n </button>\r\n )}\r\n </div>\r\n ) : (\r\n // Placeholder icon\r\n <div className=\"rounded-full bg-gray-100 dark:bg-gray-700 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 className=\"flex flex-col items-center space-y-1\">\r\n <Button\r\n type=\"button\"\r\n onClick={handleButtonClick}\r\n variant=\"outlined\"\r\n color=\"default\"\r\n >\r\n {image ? \"Change Image\" : \"Select Image\"}\r\n </Button>\r\n\r\n {/* Optional drag & drop hint */}\r\n {dragDrop && !image && (\r\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">\r\n or drag and drop\r\n </p>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Drag overlay text */}\r\n {dragDrop && isDragging && (\r\n <div className=\"absolute inset-0 flex items-center justify-center pointer-events-none bg-blue-500/10 rounded-md\">\r\n <span className=\"text-blue-600 dark:text-blue-400 font-semibold text-lg\">\r\n Drop image 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, { useEffect, 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 defaultValue = \"\",\r\n field = {},\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 useEffect(() => {\r\n if (defaultValue) {\r\n let value = props.value || defaultValue;\r\n setTimeout(() => {\r\n props.onChange?.({ target: { value: value } });\r\n }, 100);\r\n }\r\n }, [defaultValue]);\r\n\r\n return (\r\n <>\r\n <div key={props.name} className={parentClass || \"col-span-12\"}>\r\n <InputLabel\r\n label={label}\r\n required={required}\r\n infoText={field.infoText}\r\n />\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-outline\" : \"mdi:eye-off-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\nimport Button from \"../../Button/Button\";\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 cleanupAudio();\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 if (typeof value === \"string\") {\r\n setAudio({ preview: value });\r\n } else if (value?.preview) {\r\n setAudio(value);\r\n }\r\n }, [value]);\r\n\r\n // Cleanup function\r\n const cleanupAudio = () => {\r\n if (audio?.preview && audio.preview.startsWith(\"blob:\")) {\r\n URL.revokeObjectURL(audio.preview);\r\n }\r\n };\r\n\r\n const handleFileChange = (files) => {\r\n if (!files || files.length === 0) {\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 cleanupAudio();\r\n setAudio({ file, preview });\r\n onChange?.(file);\r\n };\r\n\r\n const removeAudio = (e) => {\r\n if (e) {\r\n e.stopPropagation();\r\n }\r\n\r\n cleanupAudio();\r\n setAudio(null);\r\n onChange?.(null);\r\n\r\n // Reset input value\r\n if (inputRef.current) {\r\n inputRef.current.value = \"\";\r\n }\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 const handleButtonClick = () => {\r\n inputRef.current.click();\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-lg p-2 transition-all ${\r\n isDragging\r\n ? \"border-2 border-dashed border-blue-500 bg-blue-50 dark:bg-blue-900/20\"\r\n : \"border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-800\"\r\n }`}\r\n onDragOver={handleDragOver}\r\n onDragLeave={handleDragLeave}\r\n onDrop={handleDrop}\r\n >\r\n {/* Hidden 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=\"absolute opacity-0 right-[50%] top-[80%] -translate-y-1/2 pointer-events-none h-[10px]\"\r\n />\r\n\r\n {/* Content */}\r\n <div\r\n className={`flex items-center space-x-4 transition-all ${\r\n isDragging ? \"opacity-50\" : \"\"\r\n }`}\r\n >\r\n {audio ? (\r\n // Audio player with close button and change button\r\n <div className=\"flex items-center space-x-4\">\r\n {/* Close button */}\r\n <div className=\"relative w-full\">\r\n {!required && (\r\n <button\r\n type=\"button\"\r\n onClick={removeAudio}\r\n className=\"absolute top-0 -right-2 bg-red-500 text-white rounded-full p-1 shadow-lg hover:bg-red-600 transition-colors z-10 focus:outline-none focus:ring-2 focus:ring-red-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800\"\r\n aria-label=\"Remove audio\"\r\n >\r\n <Icon icon=\"mdi:close\" className=\"w-3 h-3\" />\r\n </button>\r\n )}\r\n\r\n {/* Audio player */}\r\n <audio\r\n key={audio.preview}\r\n src={audio.preview}\r\n controls\r\n controlsList=\"nodownload\"\r\n />\r\n </div>\r\n <Button type=\"button\" onClick={handleButtonClick}>\r\n <span>Change Audio File</span>\r\n </Button>\r\n </div>\r\n ) : (\r\n // Empty state with upload button\r\n <div className=\"flex items-center justify-center space-x-4\">\r\n <div className=\"rounded-full bg-gray-100 dark:bg-gray-700 h-20 w-20 flex items-center justify-center\">\r\n <Icon icon=\"mdi:music\" className=\"text-gray-400 w-10 h-10\" />\r\n </div>\r\n\r\n <Button\r\n type=\"button\"\r\n onClick={handleButtonClick}\r\n variant=\"outlined\"\r\n >\r\n <span>Choose Audio File</span>\r\n </Button>\r\n\r\n {/* Drag & drop hint */}\r\n {dragDrop && (\r\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">\r\n or drag and drop your audio file here\r\n </p>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Drag overlay */}\r\n {dragDrop && isDragging && !audio && (\r\n <div className=\"absolute inset-0 flex items-center justify-center pointer-events-none bg-blue-500/10 rounded-lg\">\r\n <span className=\"text-blue-600 dark:text-blue-400 font-semibold text-lg bg-white dark:bg-gray-800 px-4 py-2 rounded-lg shadow-lg\">\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;\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 { User } from \"lucide-react\";\r\nimport React, { useState } from \"react\";\r\nimport ImagePreview from \"../../Table/components/ImagePreview\";\r\n\r\nconst GroupRow = ({ col, data }) => {\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 = col.fallback_icon;\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 if (image && image.src instanceof File) {\r\n image = { ...image, src: URL.createObjectURL(image.src) };\r\n }\r\n setTargetImage(image);\r\n setIsOpen(true);\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\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 instanceof File ? URL.createObjectURL(image) : 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 instanceof Function ? (\r\n fallback_icon(data)\r\n ) : (\r\n fallback_icon\r\n )\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\r\nexport default GroupRow;\r\n","import { User } from \"lucide-react\";\r\nimport React, { useState } from \"react\";\r\nimport ImagePreview from \"../../Table/components/ImagePreview\";\r\n\r\nconst CardGroup = ({ col, data }) => {\r\n let title = data[col.titleKey];\r\n let subtitle = data[col.subtitleKey];\r\n let image = data[col.imageKey];\r\n let label = col.label;\r\n let Icon = col?.icon;\r\n let fallback_icon = col.fallback_icon;\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 if (image && image.src instanceof File) {\r\n image = { ...image, src: URL.createObjectURL(image.src) };\r\n }\r\n setTargetImage(image);\r\n setIsOpen(true);\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\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 {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 <div className=\"flex items-center\">\r\n {image ? (\r\n <img\r\n src={image instanceof File ? URL.createObjectURL(image) : image}\r\n alt={title}\r\n onClick={() => openPreview({ src: image, alt: title })}\r\n className=\"w-8 h-8 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 instanceof Function ? (\r\n fallback_icon(data)\r\n ) : (\r\n fallback_icon\r\n )\r\n ) : (\r\n <div className=\"w-8 h-8 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-6 h-6 text-gray-400\" />\r\n </div>\r\n )}\r\n\r\n <div className=\"ml-2\">\r\n <p className=\"mb-0 text-sm text-gray-900 dark:text-white break-words\">\r\n {title}\r\n </p>\r\n <p className=\"text-xs text-gray-500 dark:text-gray-400\">\r\n {subtitle}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\nexport default CardGroup;\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","import React from \"react\";\r\nimport Chip from \"../../Chip/Chip\";\r\nimport { formatDate } from \"../../../lib/utils\";\r\n\r\nconst DetailRow = ({ col, data }) => {\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 instanceof File ? URL.createObjectURL(value) : value}\r\n controls\r\n src={value instanceof File ? URL.createObjectURL(value) : value}\r\n onClick={(e) => e.stopPropagation()}\r\n className=\"shadow-md rounded-full mt-1\"\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\nexport default DetailRow;\r\n","import React from \"react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nconst Radio = ({\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 Radio;\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\nimport AudioPicker from \"./AudioPicker\";\r\nimport GroupRow from \"../../Details/components/GroupRow\";\r\nimport CardGroup from \"../../Details/components/CardGroup\";\r\nimport DetailRow from \"../../Details/components/DetailRow\";\r\nimport Radio from \"./Radio\";\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 defaultValue,\r\n renderCondition,\r\n optionDependencyKey,\r\n pattern,\r\n renderType,\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 if (renderCondition && typeof renderCondition === \"function\") {\r\n const shouldRender = renderCondition(formData);\r\n if (!shouldRender) {\r\n return null;\r\n }\r\n }\r\n\r\n if (renderType && renderType == \"details\") {\r\n switch (type) {\r\n case \"group\":\r\n return <GroupRow col={field} data={formData} />;\r\n case \"cardGroup\":\r\n return <CardGroup col={field} data={formData} />;\r\n default:\r\n return <DetailRow col={field} data={formData} />;\r\n }\r\n }\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 formData={formData}\r\n dependencyKey={optionDependencyKey}\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 defaultValue={defaultValue}\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 \"radio\":\r\n return (\r\n <Radio\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 \"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 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 field={field}\r\n type={type || \"text\"}\r\n defaultValue={defaultValue}\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 pattern={pattern}\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 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 {isOpen && (\r\n <div className=\"flex-1 overflow-y-auto px-4 py-3\">\r\n {config?.component ? (\r\n <config.component\r\n filters={filters}\r\n onFilterChange={handleChange}\r\n />\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\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","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 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 Plus,\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 = ({\r\n config,\r\n setShowAdd,\r\n title,\r\n buttonText,\r\n description,\r\n showAddButton,\r\n}) => {\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 rowClick = 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 const [appliedFilters, setAppliedFilters] = useState({});\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 if (image && image.src instanceof File) {\r\n image = { ...image, src: URL.createObjectURL(image.src) };\r\n }\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 row = null,\r\n ) => {\r\n return (\r\n <>\r\n {imageSrc ? (\r\n <img\r\n src={\r\n imageSrc instanceof File\r\n ? URL.createObjectURL(imageSrc)\r\n : imageSrc\r\n }\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 shrink-0 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 typeof fallback_icon === \"function\" ? (\r\n fallback_icon(row)\r\n ) : (\r\n fallback_icon\r\n )\r\n ) : (\r\n <div\r\n className={`w-10 h-10 flex items-center shrink-0 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={\r\n audioSrc instanceof File\r\n ? URL.createObjectURL(audioSrc)\r\n : audioSrc\r\n }\r\n controls\r\n src={\r\n audioSrc instanceof File\r\n ? URL.createObjectURL(audioSrc)\r\n : audioSrc\r\n }\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 shrink-0 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(\r\n row[col.imageKey],\r\n row[col.titleKey],\r\n \"group-avatar\",\r\n col.fallback_icon,\r\n row,\r\n )\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 <>\r\n <div className=\"min-w-[40px]\">\r\n {renderAvatar(\r\n value,\r\n col.alt,\r\n col.className,\r\n col.fallback_icon,\r\n row,\r\n )}\r\n </div>\r\n </>\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\r\n const handleRowClick = (row) => {\r\n if (typeof rowClick === \"function\") {\r\n return rowClick(row);\r\n }\r\n if (rowClick) {\r\n return onMenuAction?.(\"view\", row);\r\n }\r\n };\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 row is clickable\r\n const isRowClickable = () => rowClick || typeof rowClick === \"function\";\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 return (\r\n <>\r\n {/* header Bar */}\r\n\r\n {loading ? (\r\n <TableSkeleton rows={6} columns={6} />\r\n ) : (\r\n <>\r\n <div className=\"flex flex-col sm:flex-row 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 {description}\r\n </p>\r\n </div>\r\n <div className=\"flex flex-col justify-end items-end gap-2\">\r\n {showAddButton && (\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 {buttonText || \"Add New\"}\r\n </Button>\r\n )}\r\n <div className=\"flex justify-end items-center 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 // add red dot if filter are applied\r\n <div className=\"relative\">\r\n <Button\r\n onClick={() => setShowFilters(true)}\r\n variant=\"contained\"\r\n >\r\n <Filter className=\"w-4 h-4 mr-2\" />\r\n Filters\r\n </Button>\r\n {Object.keys(appliedFilters).length > 0 && (\r\n <span className=\"absolute top-1 right-1 w-2 h-2 bg-red-500 rounded-full\"></span>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </div>\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 ${isRowClickable() ? \"cursor-pointer\" : \"\"}`}\r\n onClick={(e) => {\r\n isRowClickable() && handleRowClick(row);\r\n }}\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={(e) => {\r\n if (isColumnClickable(col)) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n handleColumnClick(col, row);\r\n }\r\n }}\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{\" \"}\r\n {totalRecords} 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 )}\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={(filters) => {\r\n setAppliedFilters(filters);\r\n onFilterApply?.(filters);\r\n }}\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\nimport { enqueueSnackbar } from \"notistack\";\r\n\r\nconst Form = ({\r\n config,\r\n onSubmit,\r\n initialData = {},\r\n fetchRowDetails,\r\n type = \"add\",\r\n}) => {\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 const [dataLoading, setDataLoading] = useState(true);\r\n\r\n const handleGetDetails = async () => {\r\n fetchRowDetails?.(initialData)\r\n .then((resp) => {\r\n setFormData(resp.data);\r\n })\r\n .catch((error) => {\r\n enqueueSnackbar(error.message, { variant: \"error\" });\r\n })\r\n .finally(() => {\r\n setDataLoading(false);\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n if (fetchRowDetails instanceof Function) {\r\n handleGetDetails();\r\n } else {\r\n setFormData(initialData);\r\n setDataLoading(false);\r\n }\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 if (dataLoading) {\r\n return (\r\n // spinner loader\r\n <div className=\"flex items-center justify-center h-64\">\r\n <div\r\n className={`rounded-full border-4 border-blue-500 border-t-gray-200 animate-spin w-8 h-8 border-4`}\r\n style={{\r\n borderTopColor: \"border-primary-500\",\r\n }}\r\n />\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <form\r\n id={\r\n type == \"add\" ? \"addForm\" : type == \"edit\" ? \"editForm\" : \"defaultForm\"\r\n }\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 React, { useEffect, useState } from \"react\";\r\nimport DetailRow from \"./components/DetailRow\";\r\nimport CardGroup from \"./components/CardGroup\";\r\nimport GroupRow from \"./components/GroupRow\";\r\nimport { enqueueSnackbar } from \"notistack\";\r\n\r\nexport default function Details({ data, config, fetchRowDetails }) {\r\n const { fields, containerClass } = config;\r\n\r\n const [detailsData, setDetailsData] = useState(data);\r\n\r\n const [dataLoading, setDataLoading] = useState(true);\r\n\r\n const handleGetDetails = async () => {\r\n fetchRowDetails?.(data)\r\n .then((resp) => {\r\n setDetailsData(resp.data);\r\n })\r\n .catch((error) => {\r\n enqueueSnackbar(error.message, { variant: \"error\" });\r\n })\r\n .finally(() => {\r\n setDataLoading(false);\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n if (fetchRowDetails instanceof Function) {\r\n handleGetDetails();\r\n } else {\r\n setDetailsData(data);\r\n setDataLoading(false);\r\n }\r\n }, []);\r\n\r\n if (dataLoading) {\r\n return (\r\n // spinner loader\r\n <div className=\"flex items-center justify-center h-64\">\r\n <div\r\n className={`rounded-full border-4 border-blue-500 border-t-gray-200 animate-spin w-8 h-8 border-4`}\r\n style={{\r\n borderTopColor: \"border-primary-500\",\r\n }}\r\n />\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <>\r\n <div className={`grid grid-cols-12 gap-4 ${containerClass || \"\"}`}>\r\n {fields.map((col) => {\r\n if (\r\n col.renderCondition &&\r\n typeof col.renderCondition === \"function\"\r\n ) {\r\n const shouldRender = col.renderCondition(detailsData);\r\n if (!shouldRender) {\r\n return null;\r\n }\r\n }\r\n return col.type == \"group\" ? (\r\n <GroupRow col={col} data={detailsData} />\r\n ) : col.type == \"cardGroup\" ? (\r\n <CardGroup col={col} data={detailsData} />\r\n ) : (\r\n <DetailRow col={col} data={detailsData} />\r\n );\r\n })}\r\n </div>\r\n </>\r\n );\r\n}\r\n","import React, { useEffect, useMemo, useState } from \"react\";\r\nimport Table from \"./Table/Table\";\r\nimport Modal from \"./Modal/Modal\";\r\nimport Form from \"./Form/Form\";\r\nimport { Icon } from \"@iconify/react\";\r\nimport { enqueueSnackbar } from \"notistack\";\r\nimport Details from \"./Details/Details\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nconst CrudPage = ({ config }) => {\r\n const {\r\n title,\r\n fetchData = async () => {},\r\n fetchRowDetails = null,\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 <div>\r\n {/* Table */}\r\n <Table\r\n title={title}\r\n setShowAdd={setShowAdd}\r\n description={config.description}\r\n buttonText={config.buttonText}\r\n showAddButton={!!modalConfig.addModal}\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={() => {\r\n if (!formLoading) {\r\n setShowAdd(false);\r\n }\r\n }}\r\n icon={modalConfig.addModal?.icon}\r\n title={modalConfig.addModal?.title || \"Add New\"}\r\n size={modalConfig.addModal?.size || \"md\"}\r\n onFormSubmit={() => document.querySelector(\"#addForm\")?.requestSubmit()}\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 type=\"add\"\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={() => {\r\n if (!formLoading) {\r\n setShowEdit(false);\r\n }\r\n }}\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 type=\"edit\"\r\n loading={formLoading}\r\n fetchRowDetails={fetchRowDetails}\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 fetchRowDetails={fetchRowDetails}\r\n config={modalConfig.viewModal || {}}\r\n />\r\n )}\r\n </Modal>\r\n )}\r\n </div>\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 { SnackbarProvider, useSnackbar } from \"notistack\";\r\nimport { X } from \"lucide-react\";\r\n\r\nfunction InnerCheck({ children }) {\r\n useSnackbar(); // If this works, provider exists\r\n return children;\r\n}\r\n\r\nexport default function OptionalSnackbarProvider({ children }) {\r\n try {\r\n return <InnerCheck>{children}</InnerCheck>;\r\n } catch (error) {\r\n return (\r\n <SnackbarProvider\r\n anchorOrigin={{\r\n vertical: \"bottom\",\r\n horizontal: \"right\",\r\n }}\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 maxSnack={3}\r\n autoHideDuration={3000}\r\n >\r\n {children}\r\n </SnackbarProvider>\r\n );\r\n }\r\n}\r\n","import React, { useEffect } from \"react\";\r\nimport CrudPage from \"./components/CrudPage\";\r\nimport OptionalSnackbarProvider from \"./OptionalSnackbarProvider\";\r\n\r\nconst injectStyles = () => {\r\n if (typeof document === \"undefined\") return;\r\n if (document.getElementById(\"react-admin-crud-manager-styles\")) return;\r\n\r\n const style = document.createElement(\"style\");\r\n style.id = \"react-admin-crud-manager-styles\";\r\n style.textContent = `\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 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 <OptionalSnackbarProvider>\r\n <CrudPage config={props.config} />\r\n </OptionalSnackbarProvider>\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","infoText","Fragment","jsxs","Info","Select","options","value","defaultValue","onChange","placeholder","disabled","search","name","parentClass","multiple","dropdownMaxHeight","formData","dependencyKey","open","setOpen","useState","setSearchTerm","showAboveState","setShowAboveState","dropdownRef","useRef","searchInputRef","normalizedOptions","setNormalizedOptions","initialVal","normalize","useEffect","result","normalizedValue","filteredOptions","option","isSelected","optionValue","normalized","handleClickOutside","event","rect","spaceBelow","handleOptionClick","finalValue","exists","newValues","v","selectedLabels","opt","ChevronDown","Search","e","Check","Switch","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","imgObj","removeImage","handleDragOver","handleDragLeave","handleDrop","handleButtonClick","Icon","Input","type","onKeyDown","negativeNumberAllow","field","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","idx","AudioPicker","audio","setAudio","cleanupAudio","removeAudio","ImagePreview","src","alt","isOpen","setIsOpen","closePreview","handleEsc","X","GroupRow","col","title","subtitle","fallback_icon","targetImage","setTargetImage","openPreview","User","CardGroup","BADGE_COLORS","BADGE_VARIANTS","Chip","colorConfig","variantKey","variantClasses","DetailRow","chipObj","Radio","text","radioOptions","RenderFields","handleChange","rows","inputClass","minLength","renderCondition","optionDependencyKey","pattern","renderType","finalPlaceholder","baseClass","FilterDrawer","onClose","config","onApply","filters","setFilters","handleApply","handleReset","TableSkeleton","columns","_","i","rowIndex","colIndex","Table","setShowAdd","buttonText","description","showAddButton","table_head","loading","filter","pagination","emptyMessage","onMenuAction","setServerSidePaginationData","onFilterApply","filterConfig","rowClick","activeMenu","setActiveMenu","menuList","setMenuList","menuPosition","setMenuPosition","showFilters","setShowFilters","appliedFilters","setAppliedFilters","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","renderAvatar","imageSrc","imageAlt","row","renderAudio","audioSrc","Music","renderGroupCell","handleRenderChip","handleRenderCellValue","el","EllipsisVertical","handleRowClick","handleColumnClick","isRowClickable","isColumnClickable","handleScroll","Plus","Filter","newLimit","newPage","ChevronLeft","ChevronRight","createPortal","d","Modal","icon","actionButtons","actions","showDefaultClose","footerConfig","hideFooter","onFormSubmit","onCancel","loadingBtn","executeFunction","selectedItem","sizeClasses","btn","resp","Form","onSubmit","initialData","fetchRowDetails","formClass","formFields","setFormData","dataLoading","setDataLoading","handleGetDetails","enqueueSnackbar","handleSubmit","form","Details","fields","containerClass","detailsData","setDetailsData","CrudPage","fetchData","isStaticData","tableConfig","modalConfig","setLoading","formLoading","setFormLoading","listingData","setListingData","paginationData","setPaginationData","serverSidePaginationData","filterData","setFilterData","changeFilterData","setChangeFilterData","showAdd","showEdit","setShowEdit","showDelete","setShowDelete","showView","setShowView","setSelectedItem","handleMenuAction","executeAction","onSuccess","success_message","error_message","handleAddResult","newObj","handleGetListing","handleEditResult","updatedObj","targetObj","handleDeleteResult","handleAddFormSubmit","_b","handleEditFormSubmit","handleFilterData","filterByMatchingFields","_c","_d","_e","_f","_g","_h","_i","_j","_k","_l","_m","_n","_o","_p","_q","_r","_s","optionType","PropTypes","actionButtonType","menuActionType","tableHeadType","formFieldType","viewFieldType","InnerCheck","useSnackbar","OptionalSnackbarProvider","SnackbarProvider","snackbarKey","injectStyles","style","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,IAASC,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,EAAO,cAAc;AC/ErB,SAAwBkB,EAAW,EAAE,OAAAC,GAAO,UAAAC,IAAW,IAAO,UAAAC,IAAW,MAAM;AAC7E,SACE,gBAAAJ,EAAAK,GAAA,EACE,UAAA,gBAAAC,EAAC,SAAA,EAAM,WAAU,kEACd,UAAA;AAAA,IAAAJ;AAAA,IACAC,KAAY,gBAAAH,EAAC,QAAA,EAAK,WAAU,QAAO,UAAA,KAAC;AAAA,IAEpCI,KACC,gBAAAE,EAAC,QAAA,EAAK,WAAU,+DACd,UAAA;AAAA,MAAA,gBAAAN,EAACO,IAAA,EAAK,WAAU,2CAAA,CAA2C;AAAA,MAG3D,gBAAAP;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA;AAAA;AAAA;AAAA;AAAA,UAMT,UAAAI;AAAA,QAAA;AAAA,MAAA;AAAA,IACH,EAAA,CACF;AAAA,EAAA,EAAA,CAEJ,EAAA,CACF;AAEJ;ACzBA,MAAMI,KAAS,CAAC;AAAA,EACd,SAAAC,IAAU,CAAA;AAAA,EACV,OAAAC,IAAQ;AAAA,EACR,cAAAC,IAAe;AAAA,EACf,UAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,WAAA5B,IAAY;AAAA,EACZ,UAAA6B,IAAW;AAAA,EACX,QAAAC,IAAS;AAAA,EACT,OAAAb,IAAQ;AAAA,EACR,UAAAC,IAAW;AAAA,EACX,MAAAa,IAAO;AAAA,EACP,aAAAC,IAAc;AAAA,EACd,UAAAC,IAAW;AAAA;AAAA,EACX,mBAAAC,IAAoB;AAAA,EACpB,UAAAC,IAAW,CAAA;AAAA,EACX,eAAAC,IAAgB;AAClB,MAAM;;AACJ,QAAM,CAACC,GAAMC,CAAO,IAAIC,EAAS,EAAK,GAChC,CAAClD,GAAYmD,CAAa,IAAID,EAAS,EAAE,GACzC,CAACE,GAAgBC,CAAiB,IAAIH,EAAS,EAAI,GACnDI,IAAcC,EAAO,IAAI,GACzBC,IAAiBD,EAAO,IAAI,GAC5B,CAACE,GAAmBC,CAAoB,IAAIR,EAAS,CAAA,CAAE;AAE7D,MAAIS,IAAavB,KAASA,MAAU,KAAQA,IAAQC;AAEpD,QAAMuB,IAAY,CAACpD,MACbA,KAAQ,QAA6BA,MAAQ,KAAW,KAC1B,OAA3B,OAAOA,KAAQ,YAAmBA,IAAcA,KAAO,EAAlB;AAG9C,EAAAqD;AAAA,IACE,MAAM;AAUJ,OAToB,YAAY;AAC9B,YAAI,OAAO1B,KAAY,YAAY;AACjC,gBAAM2B,IAAS,MAAM3B,EAAQW,CAAQ;AACrC,UAAAY,EAAqBI,CAAM;AAAA,QAC7B;AACE,UAAAJ,EAAqBvB,KAAW,EAAE;AAAA,MAEtC,GAEA;AAAA,IACF;AAAA,IACAY,IAAgB,CAACZ,GAASW,KAAA,gBAAAA,EAAWC,EAAc,IAAI,CAACZ,CAAO;AAAA,EAAA;AAGjE,QAAM4B,IAAkBnB,KACnBe,KAAc,CAAA,GAAI,IAAIC,CAAS,IAChCA,EAAUD,CAAU,GAElBK,IAAkBP,EAAkB;AAAA,IAAO,CAACQ,MAChDA,EAAO,MAAM,cAAc,SAASjE,EAAW,YAAA,CAAa;AAAA,EAAA,GAGxDkE,IAAa,CAACC,MAAgB;AAClC,UAAMC,IAAaR,EAAUO,CAAW;AACxC,WAAIvB,IACKmB,EAAgB,SAASK,CAAU,IAErCA,MAAeL;AAAA,EACxB;AAEA,EAAAF,EAAU,MAAM;AACd,UAAMQ,IAAqB,CAACC,MAAU;AACpC,MAAIhB,EAAY,WAAW,CAACA,EAAY,QAAQ,SAASgB,EAAM,MAAM,MACnErB,EAAQ,EAAK,GACbE,EAAc,EAAE;AAAA,IAEpB;AACA,oBAAS,iBAAiB,aAAakB,CAAkB,GAClD,MAAM,SAAS,oBAAoB,aAAaA,CAAkB;AAAA,EAC3E,GAAG,CAAA,CAAE,GAELR,EAAU,MAAM;AACd,QAAIb,KAAQM,EAAY,SAAS;AAC/B,YAAMiB,IAAOjB,EAAY,QAAQ,sBAAA,GAE3BkB,IADiB,OAAO,cACMD,EAAK;AAEzC,MAAAlB,EAAkBmB,IADK,GACsB;AAAA,IAC/C;AAAA,EACF,GAAG,CAACxB,CAAI,CAAC,GAETa,EAAU,MAAM;AACd,IAAIb,KAAQQ,EAAe,WACzBA,EAAe,QAAQ,MAAA;AAAA,EAE3B,GAAG,CAACR,CAAI,CAAC;AAET,QAAMyB,IAAoB,CAACN,MAAgB;AACzC,QAAIO,IAAaP;AAIjB,QAHIA,MAAgB,SAAQO,IAAa,KAChCP,MAAgB,YAASO,IAAa,KAE3C9B,GAAU;AACZ,YAAM+B,IAASZ,EAAgB,SAASH,EAAUO,CAAW,CAAC;AAE9D,UAAIS;AACJ,MAAID,IACFC,IAAYxC,EAAM;AAAA,QAChB,CAACyC,OAAMjB,EAAUiB,EAAC,MAAMjB,EAAUO,CAAW;AAAA,MAAA,IAG/CS,IAAY,CAAC,GAAIxC,KAAS,CAAA,GAAKsC,CAAU,GAG3CpC,EAASsC,CAAS;AAAA,IACpB;AACE,MAAAtC,EAASoC,CAAU,GACnBzB,EAAQ,EAAK;AAGf,IAAAE,EAAc,EAAE;AAAA,EAClB,GAEM2B,IAAiBlC,IACnBa,EACG,OAAO,CAACsB,MAAQb,EAAWa,EAAI,KAAK,CAAC,EACrC,IAAI,CAACA,MAAQA,EAAI,KAAK,EACtB,KAAK,IAAI,KACZxD,IAAAkC,EAAkB,KAAK,CAACsB,MAAQb,EAAWa,EAAI,KAAK,CAAC,MAArD,gBAAAxD,EAAwD;AAE5D,SAAAsC,EAAU,MAAM;AACd,KAAIF,KAAcA,MAAe,OAC/B,WAAW,MAAM;AACf,MAAArB,EAASqB,CAAU;AAAA,IACrB,GAAG,GAAG;AAAA,EAEV,GAAG,CAAA,CAAE,GAGH,gBAAA3B,EAAC,OAAA,EAAe,WAAWW,KAAe,eACxC,UAAA;AAAA,IAAA,gBAAAjB,EAACC,GAAA,EAAW,OAAAC,GAAc,UAAAC,EAAA,CAAoB;AAAA,sBAE7C,OAAA,EAAI,WAAW,YAAYlB,CAAS,IAAI,KAAK2C,GAC5C,UAAA;AAAA,MAAA,gBAAA5B;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,OAAOoD,KAAkB;AAAA,UACzB,UAAAjD;AAAA,UACA,UAAAe;AAAA,UACA,WAAU;AAAA,UAEV,4BAAC,UAAA,EAAO,QAAM,IAAC,OAAOkC,GACnB,UAAAA,EAAA,CACH;AAAA,QAAA;AAAA,MAAA;AAAA,MAEF,gBAAA9C;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAS,MAAM,CAACQ,KAAYS,EAAQ,CAACD,CAAI;AAAA,UACzC,UAAAR;AAAA,UACA,WAAW;AAAA,YAERsC,IAEG,oBADA,kCAEN;AAAA,YACEtC,IAAW,kCAAkC,kBAAkB;AAAA,UAEjE,UAAA;AAAA,YAAA,gBAAAd,EAAC,QAAA,EAAK,WAAU,YAAY,UAAAoD,KAAkBvC,GAAY;AAAA,YAE1D,gBAAAb;AAAA,cAACsD;AAAA,cAAA;AAAA,gBACC,WAAW,gCACThC,IAAO,eAAe,EACxB;AAAA,cAAA;AAAA,YAAA;AAAA,UACF;AAAA,QAAA;AAAA,MAAA;AAAA,MAGDA,KACC,gBAAAhB;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAW;AAAA,cACToB,IAAiB,qBAAqB,eAAe;AAAA,UAEtD,UAAA;AAAA,YAAAX,uBACE,OAAA,EAAI,WAAU,qDACb,UAAA,gBAAAT,EAAC,OAAA,EAAI,WAAU,YACb,UAAA;AAAA,cAAA,gBAAAN,EAACuD,IAAA,EAAO,WAAU,iEAAA,CAAiE;AAAA,cACnF,gBAAAvD;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,KAAK8B;AAAA,kBACL,MAAK;AAAA,kBACL,OAAOxD;AAAA,kBACP,UAAU,CAACkF,MAAM/B,EAAc+B,EAAE,OAAO,KAAK;AAAA,kBAC7C,aAAY;AAAA,kBACZ,WAAU;AAAA,gBAAA;AAAA,cAAA;AAAA,YACZ,EAAA,CACF,EAAA,CACF;AAAA,YAGF,gBAAAxD;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAW;AAAA,gBACX,OAAO;AAAA,kBACL,WAAWmB,KAAqB;AAAA,gBAAA;AAAA,gBAGjC,YAAgB,SAAS,IACxBmB,EAAgB,IAAI,CAACC,MACnB,gBAAAjC;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBAEC,MAAK;AAAA,oBACL,SAAS,MAAMyC,EAAkB,OAAOR,EAAO,KAAK,CAAC;AAAA,oBACrD,WAAW;AAAA,sBAETC,EAAWD,EAAO,KAAK,IACnB,oEACA,EACN;AAAA,oBAEA,UAAA;AAAA,sBAAA,gBAAAvC,EAAC,QAAA,EAAM,YAAO,MAAA,CAAM;AAAA,sBAEnBkB,KAAYsB,EAAWD,EAAO,KAAK,KAClC,gBAAAvC,EAACyD,IAAA,EAAM,WAAU,UAAA,CAAU;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAbxB,OAAOlB,EAAO,KAAK;AAAA,gBAAA,CAgB3B,IAED,gBAAAvC,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,GA3FQgB,CA4FV;AAEJ,GCpOM0C,KAAS1E,GAAM;AAAA,EACnB,CACE;AAAA,IACE,OAAAkB;AAAA,IACA,UAAAC;AAAA,IACA,aAAAc,IAAc;AAAA,IACd,WAAAhC,IAAY;AAAA,IACZ,OAAAyB;AAAA,IACA,UAAAE;AAAA,IACA,UAAAE,IAAW;AAAA,IACX,GAAGvB;AAAA,EAAA,GAELC,MAGE,gBAAAc,EAAC,OAAA,EAAI,WAAW,wBAAwBW,CAAW,IAChD,UAAA;AAAA,IAAAf,KAAS,gBAAAF,EAACC,GAAA,EAAW,OAAAC,GAAc,UAAAC,EAAA,CAAoB;AAAA,IAExD,gBAAAG,EAAC,SAAA,EAAM,WAAU,oDACf,UAAA;AAAA,MAAA,gBAAAN;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,KAAAR;AAAA,UACA,WAAU;AAAA,UACV,SAASkB;AAAA,UACT,UAAU,CAAC8C,MAAM5C,EAAS4C,EAAE,OAAO,OAAO;AAAA,UAC1C,UAAA1C;AAAA,UACC,GAAGvB;AAAA,QAAA;AAAA,MAAA;AAAA,MAIN,gBAAAS;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAMPf,CAAS;AAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAKf,gBAAAe;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAMX,EAAA,CACH;AAAA,EAAA,GACF;AAGN;AAEA0D,GAAO,cAAc;AC3Dd,MAAMC,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,OAAA1D,IAAQ;AAAA,EACR,OAAAQ,IAAQ;AAAA,EACR,MAAAM,IAAO;AAAA,EACP,aAAAC,IAAc;AAAA,EACd,UAAAL;AAAA,EACA,UAAAE,IAAW;AAAA,EACX,UAAAX,IAAW;AAAA,EACX,aAAAU,IAAc;AAAA,EACd,QAAAE,IAAS;AAAA,EACT,eAAA8C,IAAgB;AAAA,EAChB,gBAAAC,IAAiB;AACnB,GAAG;AACD,QAAMC,IAAyB,CAACrD,MACvBiD,GAAU,KAAK,CAACjF,MAAQA,EAAI,QAAQgC,CAAK,GAG5C,CAACsD,GAAiBC,CAAkB,IAAIzC;AAAA,IAC5CuC,EAAuBD,CAAc,KAAKH,GAAU,CAAC;AAAA,EAAA,GAEjD,CAACO,GAAYC,CAAa,IAAI3C,EAAS,EAAE,GACzC,CAACF,GAAMC,CAAO,IAAIC,EAAS,EAAK,GAChC,CAAClD,GAAYmD,CAAa,IAAID,EAAS,EAAE,GACzCI,IAAcC,EAAA;AAGpB,EAAAM,EAAU,MAAM;AACd,QAAI,OAAOzB,KAAU,YAAYA,EAAM,WAAW,GAAG,GAAG;AACtD,YAAM0D,IAAQT,GACX,OAAO,CAACU,MAAM3D,EAAM,WAAW,MAAM2D,EAAE,KAAK,CAAC,EAC7C,KAAK,CAACC,GAAGC,MAAMA,EAAE,MAAM,SAASD,EAAE,MAAM,MAAM,EAAE,CAAC;AACpD,UAAIF,GAAO;AACT,QAAAH,EAAmBG,CAAK,GACxBD,EAAczD,EAAM,QAAQ,MAAM0D,EAAM,OAAO,EAAE,CAAC;AAClD;AAAA,MACF;AAAA,IACF;AACA,IAAAD,EAAczD,CAAK;AAAA,EACrB,GAAG,CAACA,CAAK,CAAC;AAEV,QAAM8D,IAAqB,CAAChB,MAAM;AAChC,UAAMiB,IAAQjB,EAAE,OAAO,MAAM,QAAQ,OAAO,EAAE;AAC9C,IAAAW,EAAcM,CAAK,GACfT,KAAmBpD,KACrBA,EAAS,MAAMoD,EAAgB,QAAQS,CAAK;AAAA,EAEhD,GAEMC,IAAsB,CAACC,MAAY;AACvC,IAAAV,EAAmBU,CAAO,GACtB/D,KAAUA,EAAS,MAAM+D,EAAQ,QAAQT,CAAU,GACvD3C,EAAQ,EAAK,GACbE,EAAc,EAAE;AAAA,EAClB;AAGA,EAAAU,EAAU,MAAM;AACd,UAAMQ,IAAqB,CAACa,MAAM;AAChC,MAAI5B,EAAY,WAAW,CAACA,EAAY,QAAQ,SAAS4B,EAAE,MAAM,KAC/DjC,EAAQ,EAAK;AAAA,IACjB;AACA,oBAAS,iBAAiB,aAAaoB,CAAkB,GAClD,MAAM,SAAS,oBAAoB,aAAaA,CAAkB;AAAA,EAC3E,GAAG,CAAA,CAAE;AAEL,QAAMiC,IAAoBjB,GAAU;AAAA,IAClC,CAACU,MACCA,EAAE,MAAM,cAAc,SAAS/F,EAAW,YAAA,CAAa,KACvD+F,EAAE,MAAM,SAAS/F,CAAU;AAAA,EAAA;AAG/B,SAAKuF,IAgCH,gBAAA7D,EAAAK,GAAA,EACE,UAAA,gBAAAC,EAAC,OAAA,EAAe,WAAWW,KAAe,eACxC,UAAA;AAAA,IAAA,gBAAAjB,EAACC,GAAA,EAAW,OAAAC,GAAc,UAAAC,EAAA,CAAoB;AAAA,IAC9C,gBAAAG,EAAC,OAAA,EAAI,WAAU,aAAY,KAAKsB,GAE9B,UAAA;AAAA,MAAA,gBAAAtB;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAW;AAAA,IAEnBgB,IACI,2CACA,sCACN;AAAA,IACER,IAAW,kCAAkC,EAAE;AAAA,UAGvC,UAAA;AAAA,YAAA,gBAAAR;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,UAAAQ;AAAA,gBACA,SAAS,MAAMS,EAAQ,CAACD,CAAI;AAAA,gBAC5B,WAAU;AAAA,gBAET,UAAA;AAAA,kBAAA0C,IACC,gBAAAhE;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,KAAK,2BAA2BgE,EAAgB,KAAK,aAAa;AAAA,sBAClE,KAAKA,EAAgB;AAAA,sBACrB,WAAU;AAAA,oBAAA;AAAA,kBAAA,IAGZ,gBAAAhE,EAAC,QAAA,EAAK,WAAU,yBAAwB,UAAA,MAAE;AAAA,kBAE5C,gBAAAA,EAACsD,IAAA,EAAY,WAAU,wBAAA,CAAwB;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAIhDU,KACC,gBAAA1D,EAAC,QAAA,EAAK,WAAU,mEAAkE,UAAA;AAAA,cAAA;AAAA,cAC9E0D,EAAgB;AAAA,YAAA,GACpB;AAAA,YAIF,gBAAAhE;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,OAAOkE;AAAA,gBACP,UAAUM;AAAA,gBACV,UAAArE;AAAA,gBACA,UAAUW,KAAY,CAACkD;AAAA,gBACvB,aAAcA,IAAuCnD,IAArB;AAAA,gBAChC,WAAU;AAAA,cAAA;AAAA,YAAA;AAAA,YAIZ,gBAAAb;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,UAAAG;AAAA,gBACA,UAAU;AAAA,gBACV,UAAQ;AAAA,gBACR,OACE6D,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,MAID5C,KACC,gBAAAhB,EAAC,OAAA,EAAI,WAAU,iKACZ,UAAA;AAAA,QAAAS,uBACE,OAAA,EAAI,WAAU,qDACb,UAAA,gBAAAT,EAAC,OAAA,EAAI,WAAU,YACb,UAAA;AAAA,UAAA,gBAAAN,EAACuD,IAAA,EAAO,WAAU,2EAAA,CAA2E;AAAA,UAC7F,gBAAAvD;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,OAAO1B;AAAA,cACP,UAAU,CAACkF,MAAM/B,EAAc+B,EAAE,OAAO,KAAK;AAAA,cAC7C,aAAY;AAAA,cACZ,WAAU;AAAA,YAAA;AAAA,UAAA;AAAA,QACZ,EAAA,CACF,EAAA,CACF;AAAA,QAGDoB,EAAkB,IAAI,CAACP,MACtB,gBAAA/D;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,MAAK;AAAA,YACL,SAAS,MAAMoE,EAAoBL,CAAC;AAAA,YACpC,WAAU;AAAA,YAEV,UAAA;AAAA,cAAA,gBAAArE;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,KAAK,2BAA2BqE,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,GA3GQrD,CA4GV,GACF,IApIE,gBAAAhB,EAAAK,GAAA,EACE,UAAA,gBAAAC,EAAC,OAAA,EAAe,WAAWW,KAAe,eACxC,UAAA;AAAA,IAAA,gBAAAjB,EAACC,GAAA,EAAW,OAAAC,GAAc,UAAAC,EAAA,CAAoB;AAAA,IAC9C,gBAAAH;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,OAAAU;AAAA,QACA,UAfkB,CAAC8C,MAAM;AAC/B,gBAAMiB,IAAQjB,EAAE,OAAO,MAAM,QAAQ,WAAW,EAAE,GAC5CqB,IAAYJ,EAAM,WAAW,GAAG,IAClC,MAAMA,EAAM,QAAQ,QAAQ,EAAE,EAAE,MAAM,CAAC,IACvCA;AACJ,UAAA7D,EAASiE,CAAS;AAAA,QACpB;AAAA,QAUQ,aAAAhE;AAAA,QACA,UAAAC;AAAA,QACA,UAAAX;AAAA,QACA,WAAU;AAAA;AAAA;AAAA,QAGV,WAAU;AAAA,QACV,SAAQ;AAAA,MAAA;AAAA,IAAA;AAAA,EACV,EAAA,GAdQa,CAeV,GACF;AAqHN;ACzNA,MAAM8D,KAAW9F,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,gBAAAqB,EAAC,OAAA,EAAqB,WAAWf,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;AAEAuF,GAAS,cAAc;ACvBvB,MAAMC,KAAc,CAAC;AAAA,EACnB,OAAA7E,IAAQ;AAAA,EACR,OAAAQ,IAAQ;AAAA,EACR,UAAAE;AAAA,EACA,UAAAT,IAAW;AAAA,EACX,QAAA6E,IAAS;AAAA,EACT,IAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,MAAAlE,IAAO;AAAA,EACP,aAAAC,IAAc;AAChB,MAAM;AACJ,QAAM,CAACkE,GAAOC,CAAQ,IAAI5D,EAASd,CAAK,GAClC,CAAC2E,GAAYC,CAAa,IAAI9D,EAAS,EAAK,GAC5C+D,IAAW1D,EAAO,IAAI;AAE5B,EAAAM,EAAU,OACJzB,aAAiB,OACnB0E,EAAS,EAAE,MAAM1E,GAAO,SAAS,IAAI,gBAAgBA,CAAK,GAAG,KACpDA,KAAA,QAAAA,EAAO,SAChB0E,EAAS1E,CAAK,IAMT,MAAM;AACX,IAAIyE,KAAA,QAAAA,EAAO,WAAWA,EAAM,QAAQ,WAAW,OAAO,KACpD,IAAI,gBAAgBA,EAAM,OAAO;AAAA,EAErC,IACC,CAACzE,CAAK,CAAC;AAEV,QAAM8E,IAAmB,CAACC,MAAU;AAClC,QAAI,CAACA,KAASA,EAAM,WAAW;AAC7B;AAGF,UAAMC,IAAOD,EAAM,CAAC,GACdE,IAAU,IAAI,gBAAgBD,CAAI,GAClCE,IAAS,EAAE,MAAAF,GAAM,SAAAC,EAAA;AAGvB,IAAIR,KAAA,QAAAA,EAAO,WAAWA,EAAM,QAAQ,WAAW,OAAO,KACpD,IAAI,gBAAgBA,EAAM,OAAO,GAGnCC,EAASQ,CAAM,GACfhF,KAAA,QAAAA,EAAW8E;AAAA,EACb,GAEMG,IAAc,CAACrC,MAAM;AACzB,IAAIA,KACFA,EAAE,gBAAA,GAIA2B,KAAA,QAAAA,EAAO,WAAWA,EAAM,QAAQ,WAAW,OAAO,KACpD,IAAI,gBAAgBA,EAAM,OAAO,GAGnCC,EAAS,IAAI,GACbxE,KAAA,QAAAA,EAAW,OAGP2E,EAAS,YACXA,EAAS,QAAQ,QAAQ;AAAA,EAE7B,GAGMO,IAAiB,CAACtC,MAAM;AAC5B,IAAK0B,MACL1B,EAAE,eAAA,GACF8B,EAAc,EAAI;AAAA,EACpB,GAEMS,IAAkB,CAACvC,MAAM;AAC7B,IAAK0B,MACL1B,EAAE,eAAA,GACF8B,EAAc,EAAK;AAAA,EACrB,GAEMU,IAAa,CAACxC,MAAM;AACxB,IAAK0B,MACL1B,EAAE,eAAA,GACF8B,EAAc,EAAK,GACnBE,EAAiBhC,EAAE,aAAa,KAAK;AAAA,EACvC,GAEMyC,IAAoB,MAAM;AAC9B,IAAAV,EAAS,QAAQ,MAAA;AAAA,EACnB;AAEA,SACE,gBAAAvF,EAAAK,GAAA,EACE,UAAA,gBAAAC,EAAC,OAAA,EAAe,WAAWW,KAAe,eACxC,UAAA;AAAA,IAAA,gBAAAjB,EAACC,GAAA,EAAW,OAAAC,GAAc,UAAAC,EAAA,CAAoB;AAAA,IAC9C,gBAAAG;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,0CACT+E,IACI,0EACA,uEACN;AAAA,QACA,YAAYS;AAAA,QACZ,aAAaC;AAAA,QACb,QAAQC;AAAA,QAGR,UAAA;AAAA,UAAA,gBAAAhG;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAKuF;AAAA,cACL,IAAAN;AAAA,cACA,MAAK;AAAA,cACL,QAAAD;AAAA,cACA,UAAU,CAACxB,MAAMgC,EAAiBhC,EAAE,OAAO,KAAK;AAAA,cAChD,UAAUrD,KAAY,CAACgF;AAAA,cACvB,WAAU;AAAA,YAAA;AAAA,UAAA;AAAA,UAIZ,gBAAA7E;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAW,8CACT+E,IAAa,eAAe,EAC9B;AAAA,cAEC,UAAA;AAAA,gBAAAF;AAAA;AAAA,kBAEC,gBAAA7E,EAAC,OAAA,EAAI,WAAU,kBACb,UAAA;AAAA,oBAAA,gBAAAN;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,KAAKmF,EAAM,WAAWA;AAAA,wBACtB,KAAI;AAAA,wBACJ,WAAU;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAGX,CAAChF,KACA,gBAAAH;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,MAAK;AAAA,wBACL,SAAS6F;AAAA,wBACT,WAAU;AAAA,wBACV,cAAW;AAAA,wBAEX,UAAA,gBAAA7F,EAACkG,IAAA,EAAK,MAAK,aAAY,WAAU,UAAA,CAAU;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAC7C,EAAA,CAEJ;AAAA;AAAA;AAAA,kBAGA,gBAAAlG,EAAC,OAAA,EAAI,WAAU,wFACb,UAAA,gBAAAA;AAAA,oBAACkG;AAAA,oBAAA;AAAA,sBACC,MAAK;AAAA,sBACL,WAAU;AAAA,oBAAA;AAAA,kBAAA,EACZ,CACF;AAAA;AAAA,gBAGF,gBAAA5F,EAAC,OAAA,EAAI,WAAU,wCACb,UAAA;AAAA,kBAAA,gBAAAN;AAAA,oBAACjB;AAAA,oBAAA;AAAA,sBACC,MAAK;AAAA,sBACL,SAASkH;AAAA,sBACT,SAAQ;AAAA,sBACR,OAAM;AAAA,sBAEL,cAAQ,iBAAiB;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAI3Bf,KAAY,CAACC,uBACX,KAAA,EAAE,WAAU,4CAA2C,UAAA,mBAAA,CAExD;AAAA,gBAAA,EAAA,CAEJ;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAIDD,KAAYG,KACX,gBAAArF,EAAC,OAAA,EAAI,WAAU,mGACb,UAAA,gBAAAA,EAAC,QAAA,EAAK,WAAU,0DAAyD,UAAA,kBAAA,CAEzE,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAEJ,EAAA,GAtFQgB,CAuFV,GACF;AAEJ,GC1LMmF,KAAQnH,GAAM;AAAA,EAClB,CACE;AAAA,IACE,OAAAkB;AAAA,IACA,UAAAC;AAAA,IACA,aAAAc,IAAc;AAAA,IACd,WAAAhC,IAAY;AAAA,IACZ,MAAAmH,IAAO;AAAA,IACP,WAAAC;AAAA,IACA,qBAAAC,IAAsB;AAAA,IACtB,cAAA3F,IAAe;AAAA,IACf,OAAA4F,IAAQ,CAAA;AAAA,IACR,GAAGhH;AAAA,EAAA,GAELC,MACG;AACH,UAAM,CAACgH,GAAcC,CAAe,IAAIjF,EAAS,EAAK,GAEhDkF,IAAgB,CAAClD,MAAM;AAC3B,UAAI4C,MAAS,UAAU;AAIrB,YAHoB,CAAC,KAAK,KAAK,GAAG,EAGlB,SAAS5C,EAAE,GAAG,GAAG;AAC/B,UAAAA,EAAE,eAAA;AACF;AAAA,QACF;AAGA,YAAI8C,KAAuB,MAAS9C,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,MAAA6C,KAAA,QAAAA,EAAY7C;AAAA,IACd,GAEMzD,IAAoB;AAAA;AAAA,QAEtBqG,MAAS,aAAa,UAAU,EAAE;AAAA,QAClCA,MAAS,WAAW,eAAe,EAAE;AAAA,QACrCnH,CAAS;AAAA,MACX,KAAA;AAEF,WAAAkD,EAAU,MAAM;AACd,UAAIxB,GAAc;AAChB,YAAID,IAAQnB,EAAM,SAASoB;AAC3B,mBAAW,MAAM;;AACf,WAAAd,IAAAN,EAAM,aAAN,QAAAM,EAAA,KAAAN,GAAiB,EAAE,QAAQ,EAAE,OAAAmB,EAAA;QAC/B,GAAG,GAAG;AAAA,MACR;AAAA,IACF,GAAG,CAACC,CAAY,CAAC,GAGf,gBAAAX,EAAAK,GAAA,EACE,UAAA,gBAAAC,EAAC,OAAA,EAAqB,WAAWW,KAAe,eAC9C,UAAA;AAAA,MAAA,gBAAAjB;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,OAAAC;AAAA,UACA,UAAAC;AAAA,UACA,UAAUoG,EAAM;AAAA,QAAA;AAAA,MAAA;AAAA,MAElB,gBAAAjG,EAAC,OAAA,EAAI,WAAU,YACb,UAAA;AAAA,QAAA,gBAAAN;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAMoG,MAAS,cAAcI,IAAe,SAASJ;AAAA,YACrD,KAAA5G;AAAA,YACA,UAAAW;AAAA,YACA,WAAWuG;AAAA,YACX,WAAW3G;AAAA,YACV,GAAGR;AAAA,UAAA;AAAA,QAAA;AAAA,QAGL6G,MAAS,cACR,gBAAApG;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,UAAU;AAAA,YACV,SAAS,MAAMyG,EAAgB,CAACE,MAAS,CAACA,CAAI;AAAA,YAC9C,WAAU;AAAA,YAEV,UAAA,gBAAA3G;AAAA,cAACkG;AAAA,cAAA;AAAA,gBACC,MACEM,IAAe,oBAAoB;AAAA,gBAErC,WAAU;AAAA,cAAA;AAAA,YAAA;AAAA,UACZ;AAAA,QAAA;AAAA,MACF,EAAA,CAEJ;AAAA,IAAA,KA/BQjH,EAAM,IAgChB,GACF;AAAA,EAEJ;AACF;AAEA4G,GAAM,cAAc;ACpGpB,MAAMS,KAAa,CAAC;AAAA,EAClB,KAAA/H;AAAA,EACA,WAAAgI,IAAY;AAAA,EACZ,OAAAnG,IAAQ;AAAA,EACR,UAAAE;AAAA,EACA,OAAAV,IAAQ;AAAA,EACR,UAAAC,IAAW;AAAA,EACX,aAAAU,IAAc;AAAA,EACd,aAAAI,IAAc;AAAA,EACd,QAAA6F,IAAS;AAAA,EACT,QAAAC,IAAS;AAAA,EACT,UAAAjG,IAAW;AAAA,EACX,SAAAkG;AAAA,EACA,SAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,YAAAC,IAAa;AAAA,EACb,YAAAC,IAAa,CAAA;AAAA,EACb,oBAAAC;AAAA;AACF,MAuDI,gBAAA/G,EAAC,OAAA,EAAc,WAAWW,GACvB,UAAA;AAAA,EAAAf,KAAS,gBAAAF,EAACC,GAAA,EAAW,OAAAC,GAAc,UAAAC,EAAA,CAAoB;AAAA,EAExD,gBAAAH;AAAA,IAACsH;AAAA,IAAA;AAAA,MACC,QAAQT;AAAA,MACR,OAAAnG;AAAA,MACA,UAAAI;AAAA,MACA,MAAM;AAAA,QACJ,QAAAgG;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,aAAApG;AAAA,QACA,eAAe;AAAA;AAAA,+BAEMsG,CAAU;AAAA;AAAA;AAAA,QAG/B,GAAGC;AAAA,MAAA;AAAA,MAEL,gBAAgB,CAACQ,MAAY;AAC3B,QAAIhH,KACFA,EAASgH,CAAO;AAAA,MAEpB;AAAA,IAAA;AAAA,EAAA;AACF,EAAA,GA9BQ/I,CA+BV,GCzGEgJ,KAAW,CAAC;AAAA,EAChB,MAAA7G,IAAO;AAAA,EACP,OAAAd,IAAQ;AAAA;AAAA,EACR,SAAAO,IAAU,CAAA;AAAA;AAAA,EACV,OAAAC,IAAQ;AAAA;AAAA,EACR,UAAAE;AAAA,EACA,UAAAE,IAAW;AAAA,EACX,UAAAX,IAAW;AAAA,EACX,aAAAc,IAAc;AAAA,EACd,WAAAhC,IAAY;AAAA,EACZ,aAAA6I,IAAc;AAAA;AAChB,MAAM;AAEJ,QAAM5G,IAAW,MAAM,QAAQT,CAAO,KAAKA,EAAQ,SAAS,GAGtDsH,IAAY,CAACtF,MACbvB,IACG4G,IACE,MAAM,QAAQpH,CAAK,KAAKA,EAAM,SAAS+B,CAAW,IADhC/B,MAAU+B,IAG9B,EAAQ/B,GAIXsH,IAAqB,CAACxE,MAAM;AAChC,IAAA5C,KAAA,QAAAA,EAAW4C,EAAE,OAAO,SAASxC;AAAA,EAC/B,GAGMiH,IAAuB,CAACxF,GAAayF,MAAY;AACrD,QAAKtH;AAEL,UAAI,CAACkH;AACH,QACElH,EADEsH,IACOzF,IAEA,IAFazB,CAAI;AAAA,WAKvB;AACL,cAAMmH,IAAW,MAAM,QAAQzH,CAAK,IAAI,CAAC,GAAGA,CAAK,IAAI,CAAA;AACrD,YAAIwH;AACF,UAAKC,EAAS,SAAS1F,CAAW,KAAG0F,EAAS,KAAK1F,CAAW;AAAA,aACzD;AACL,gBAAM2F,IAAQD,EAAS,QAAQ1F,CAAW;AAC1C,UAAI2F,IAAQ,MAAID,EAAS,OAAOC,GAAO,CAAC;AAAA,QAC1C;AACA,QAAAxH,EAASuH,GAAUnH,CAAI;AAAA,MACzB;AAAA,EACF;AAGA,SAAIE,2BAIE,UAAA,gBAAAZ,EAAC,OAAA,EAAI,WAAW,GAAGW,CAAW,IAC5B,UAAA;AAAA,IAAA,gBAAAjB,EAACC,GAAA,EAAW,OAAAC,GAAc,UAAAC,EAAA,CAAoB;AAAA,IAC9C,gBAAAH,EAAC,OAAA,EAAI,WAAW,2BACb,UAAAS,EAAQ,IAAI,CAAC4C,GAAKgF,MACjB,gBAAA/H,EAAC,OAAA,EAAiC,WAAU,qBAC1C,UAAA;AAAA,MAAA,gBAAAN;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,MAAAgB;AAAA,UACA,OAAOqC,EAAI;AAAA,UACX,SAAS0E,EAAU1E,EAAI,KAAK;AAAA,UAC5B,UAAUvC,KAAYuC,EAAI;AAAA,UAC1B,UAAUlD,KAAYkI,MAAQ;AAAA,UAC9B,UAAU,CAAC7E,MACTyE,EAAqB5E,EAAI,OAAOG,EAAE,OAAO,OAAO;AAAA,UAGlD,WAAW,0HAA0HvE,CAAS;AAAA,QAAA;AAAA,QADzI+B;AAAA,MAAA;AAAA,MAGNqC,EAAI,SACH,gBAAArD;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAASgB;AAAA,UACT,WAAU;AAAA,UAET,UAAAqC,EAAI;AAAA,QAAA;AAAA,MAAA;AAAA,IACP,EAAA,GApBMA,EAAI,SAASA,EAAI,KAsB3B,CACD,EAAA,CACH;AAAA,EAAA,EAAA,CACF,EAAA,CACF,IAMF,gBAAA/C,EAAC,OAAA,EAAI,WAAW,qBAAqBW,CAAW,IAC9C,UAAA;AAAA,IAAA,gBAAAjB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,MAAAgB;AAAA,QACA,SAAS+G,EAAA;AAAA,QACT,UAAAjH;AAAA,QACA,UAAAX;AAAA,QACA,UAAU6H;AAAA,QACV,WAAW,0HAA0H/I,CAAS;AAAA,MAAA;AAAA,IAAA;AAAA,IAE/IiB,KACC,gBAAAF;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAASgB;AAAA,QACT,WAAU;AAAA,QAET,UAAAd;AAAA,MAAA;AAAA,IAAA;AAAA,EACH,GAEJ;AAEJ,GC/GMoI,KAAc,CAAC;AAAA,EACnB,OAAApI,IAAQ;AAAA,EACR,OAAAQ,IAAQ;AAAA,EACR,UAAAE;AAAA,EACA,UAAAT,IAAW;AAAA,EACX,QAAA6E,IAAS;AAAA,EACT,IAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,MAAAlE,IAAO;AAAA,EACP,aAAAC,IAAc;AAChB,MAAM;AACJ,QAAM,CAACsH,GAAOC,CAAQ,IAAIhH,EAAS,IAAI,GACjC,CAAC6D,GAAYC,CAAa,IAAI9D,EAAS,EAAK,GAC5C+D,IAAW1D,EAAO,IAAI;AAG5B,EAAAM,EAAU,MAAM;AACd,QAAI,CAACzB,GAAO;AACV,MAAA+H,EAAA,GACAD,EAAS,IAAI;AACb;AAAA,IACF;AAEA,QAAI9H,aAAiB,MAAM;AACzB,YAAMiF,IAAU,IAAI,gBAAgBjF,CAAK;AACzC,aAAA8H,EAAS,EAAE,MAAM9H,GAAO,SAAAiF,EAAA,CAAS,GAE1B,MAAM;AACX,YAAI,gBAAgBA,CAAO;AAAA,MAC7B;AAAA,IACF,MAAA,CAAW,OAAOjF,KAAU,WAC1B8H,EAAS,EAAE,SAAS9H,GAAO,IAClBA,KAAA,QAAAA,EAAO,WAChB8H,EAAS9H,CAAK;AAAA,EAElB,GAAG,CAACA,CAAK,CAAC;AAGV,QAAM+H,IAAe,MAAM;AACzB,IAAIF,KAAA,QAAAA,EAAO,WAAWA,EAAM,QAAQ,WAAW,OAAO,KACpD,IAAI,gBAAgBA,EAAM,OAAO;AAAA,EAErC,GAEM/C,IAAmB,CAACC,MAAU;AAClC,QAAI,CAACA,KAASA,EAAM,WAAW;AAC7B;AAGF,UAAMC,IAAOD,EAAM,CAAC,GACdE,IAAU,IAAI,gBAAgBD,CAAI;AAGxC,IAAA+C,EAAA,GACAD,EAAS,EAAE,MAAA9C,GAAM,SAAAC,GAAS,GAC1B/E,KAAA,QAAAA,EAAW8E;AAAA,EACb,GAEMgD,IAAc,CAAClF,MAAM;AACzB,IAAIA,KACFA,EAAE,gBAAA,GAGJiF,EAAA,GACAD,EAAS,IAAI,GACb5H,KAAA,QAAAA,EAAW,OAGP2E,EAAS,YACXA,EAAS,QAAQ,QAAQ;AAAA,EAE7B,GAGMO,IAAiB,CAACtC,MAAM;AAC5B,IAAK0B,MACL1B,EAAE,eAAA,GACF8B,EAAc,EAAI;AAAA,EACpB,GAEMS,IAAkB,CAACvC,MAAM;AAC7B,IAAK0B,MACL1B,EAAE,eAAA,GACF8B,EAAc,EAAK;AAAA,EACrB,GAEMU,IAAa,CAACxC,MAAM;AACxB,IAAK0B,MACL1B,EAAE,eAAA,GACF8B,EAAc,EAAK,GACnBE,EAAiBhC,EAAE,aAAa,KAAK;AAAA,EACvC,GAEMyC,IAAoB,MAAM;AAC9B,IAAAV,EAAS,QAAQ,MAAA;AAAA,EACnB;AAEA,SACE,gBAAAjF,EAAC,OAAA,EAAe,WAAWW,KAAe,eACxC,UAAA;AAAA,IAAA,gBAAAjB,EAACC,GAAA,EAAW,OAAAC,GAAc,UAAAC,EAAA,CAAoB;AAAA,IAE9C,gBAAAG;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,0CACT+E,IACI,0EACA,uEACN;AAAA,QACA,YAAYS;AAAA,QACZ,aAAaC;AAAA,QACb,QAAQC;AAAA,QAGR,UAAA;AAAA,UAAA,gBAAAhG;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAKuF;AAAA,cACL,IAAAN;AAAA,cACA,MAAK;AAAA,cACL,QAAAD;AAAA,cACA,UAAU,CAACxB,MAAMgC,EAAiBhC,EAAE,OAAO,KAAK;AAAA,cAChD,UAAUrD,KAAY,CAACoI;AAAA,cACvB,WAAU;AAAA,YAAA;AAAA,UAAA;AAAA,UAIZ,gBAAAvI;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAW,8CACTqF,IAAa,eAAe,EAC9B;AAAA,cAEC,UAAAkD;AAAA;AAAA,gBAEC,gBAAAjI,EAAC,OAAA,EAAI,WAAU,+BAEb,UAAA;AAAA,kBAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,mBACZ,UAAA;AAAA,oBAAA,CAACH,KACA,gBAAAH;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,MAAK;AAAA,wBACL,SAAS0I;AAAA,wBACT,WAAU;AAAA,wBACV,cAAW;AAAA,wBAEX,UAAA,gBAAA1I,EAACkG,IAAA,EAAK,MAAK,aAAY,WAAU,UAAA,CAAU;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAK/C,gBAAAlG;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBAEC,KAAKuI,EAAM;AAAA,wBACX,UAAQ;AAAA,wBACR,cAAa;AAAA,sBAAA;AAAA,sBAHRA,EAAM;AAAA,oBAAA;AAAA,kBAIb,GACF;AAAA,kBACA,gBAAAvI,EAACjB,KAAO,MAAK,UAAS,SAASkH,GAC7B,UAAA,gBAAAjG,EAAC,QAAA,EAAK,UAAA,oBAAA,CAAiB,EAAA,CACzB;AAAA,gBAAA,EAAA,CACF;AAAA;AAAA;AAAA,gBAGA,gBAAAM,EAAC,OAAA,EAAI,WAAU,8CACb,UAAA;AAAA,kBAAA,gBAAAN,EAAC,OAAA,EAAI,WAAU,wFACb,UAAA,gBAAAA,EAACkG,MAAK,MAAK,aAAY,WAAU,0BAAA,CAA0B,EAAA,CAC7D;AAAA,kBAEA,gBAAAlG;AAAA,oBAACjB;AAAA,oBAAA;AAAA,sBACC,MAAK;AAAA,sBACL,SAASkH;AAAA,sBACT,SAAQ;AAAA,sBAER,UAAA,gBAAAjG,EAAC,UAAK,UAAA,oBAAA,CAAiB;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAIxBkF,KACC,gBAAAlF,EAAC,KAAA,EAAE,WAAU,4CAA2C,UAAA,wCAAA,CAExD;AAAA,gBAAA,EAAA,CAEJ;AAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAKHkF,KAAYG,KAAc,CAACkD,KAC1B,gBAAAvI,EAAC,OAAA,EAAI,WAAU,mGACb,UAAA,gBAAAA,EAAC,QAAA,EAAK,WAAU,mHAAkH,6BAElI,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAEJ,EAAA,GA3FQgB,CA4FV;AAEJ,GClMM2H,KAAe,CAAC,EAAE,KAAAC,GAAK,KAAAC,IAAM,WAAW,QAAAC,GAAQ,WAAAC,QAAgB;AACpE,QAAMC,IAAe,MAAMD,EAAU,EAAK;AAG1C,SAAA5G,EAAU,MAAM;AACd,UAAM8G,IAAY,CAACzF,MAAM;AACvB,MAAIA,EAAE,QAAQ,YAAUwF,EAAA;AAAA,IAC1B;AAEA,WAAIF,MACF,SAAS,KAAK,MAAM,WAAW,UAC/B,SAAS,iBAAiB,WAAWG,CAAS,IAGzC,MAAM;AACX,eAAS,KAAK,MAAM,WAAW,IAC/B,SAAS,oBAAoB,WAAWA,CAAS;AAAA,IACnD;AAAA,EACF,GAAG,CAACH,CAAM,CAAC,GAGT,gBAAA9I,EAAAK,GAAA,EAEE,UAAA,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA;AAAA,MAEV,SAAS0I;AAAA,MAGT,UAAA;AAAA,QAAA,gBAAAhJ;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,SAASgJ;AAAA,YACT,WAAU;AAAA;AAAA,YAGV,UAAA,gBAAAhJ,EAACkJ,IAAA,EAAE,MAAM,GAAA,CAAI;AAAA,UAAA;AAAA,QAAA;AAAA,QAIf,gBAAAlJ;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,SAAS,CAACwD,MAAMA,EAAE,gBAAA;AAAA,YAGlB,UAAA,gBAAAxD;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,KAAA4I;AAAA,gBACA,KAAAC;AAAA,gBACA,WAAU;AAAA,cAAA;AAAA,YAAA;AAAA,UACZ;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAAA,GAEJ;AAEJ,GCnDMM,KAAW,CAAC,EAAE,KAAAC,GAAK,MAAA/K,QAAW;AAClC,MAAIgL,IAAQhL,EAAK+K,EAAI,QAAQ,GACzBE,IAAWjL,EAAK+K,EAAI,WAAW,GAC/BjE,IAAQ9G,EAAK+K,EAAI,QAAQ,GACzBG,IAAgBH,EAAI;AAGxB,QAAM,CAACI,GAAaC,CAAc,IAAIjI,EAAS,IAAI,GAC7C,CAACsH,GAAQC,CAAS,IAAIvH,EAAS,EAAK,GAEpCkI,IAAc,CAACvE,MAAU;AAC7B,IAAIA,KAASA,EAAM,eAAe,SAChCA,IAAQ,EAAE,GAAGA,GAAO,KAAK,IAAI,gBAAgBA,EAAM,GAAG,EAAA,IAExDsE,EAAetE,CAAK,GACpB4D,EAAU,EAAI;AAAA,EAChB;AAEA,SACE,gBAAAzI,EAAAD,GAAA,EACG,UAAA;AAAA,IAAAyI,KACC,gBAAA9I;AAAA,MAAC2I;AAAA,MAAA;AAAA,QACC,KAAKa,EAAY;AAAA,QACjB,KAAKA,EAAY;AAAA,QACjB,QAAAV;AAAA,QACA,WAAAC;AAAA,MAAA;AAAA,IAAA;AAAA,IAIJ,gBAAAzI;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW;AAAA;AAAA,QAEX8I,EAAI,UAAU;AAAA,QAEb,UAAA;AAAA,UAAAjE,IACC,gBAAAnF;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAKmF,aAAiB,OAAO,IAAI,gBAAgBA,CAAK,IAAIA;AAAA,cAC1D,KAAKkE;AAAA,cACL,SAAS,MAAMK,EAAY,EAAE,KAAKvE,GAAO,KAAKkE,GAAO;AAAA,cACrD,WAAU;AAAA,YAAA;AAAA,UAAA,IAEVE,IACFA,aAAyB,WACvBA,EAAclL,CAAI,IAElBkL,IAGF,gBAAAvJ,EAAC,OAAA,EAAI,WAAU,sIACb,UAAA,gBAAAA,EAAC2J,IAAA,EAAK,WAAU,yBAAwB,GAC1C;AAAA,4BAGD,OAAA,EACC,UAAA;AAAA,YAAA,gBAAA3J,EAAC,MAAA,EAAG,WAAU,uDACX,UAAAqJ,GACH;AAAA,YACA,gBAAArJ,EAAC,KAAA,EAAE,WAAU,4CAA4C,UAAAsJ,EAAA,CAAS;AAAA,UAAA,EAAA,CACpE;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ,GC9DMM,KAAY,CAAC,EAAE,KAAAR,GAAK,MAAA/K,QAAW;AACnC,MAAIgL,IAAQhL,EAAK+K,EAAI,QAAQ,GACzBE,IAAWjL,EAAK+K,EAAI,WAAW,GAC/BjE,IAAQ9G,EAAK+K,EAAI,QAAQ,GACzBlJ,IAAQkJ,EAAI,OACZlD,IAAOkD,KAAA,gBAAAA,EAAK,MACZG,IAAgBH,EAAI;AAGxB,QAAM,CAACI,GAAaC,CAAc,IAAIjI,EAAS,IAAI,GAC7C,CAACsH,GAAQC,CAAS,IAAIvH,EAAS,EAAK,GAEpCkI,IAAc,CAACvE,MAAU;AAC7B,IAAIA,KAASA,EAAM,eAAe,SAChCA,IAAQ,EAAE,GAAGA,GAAO,KAAK,IAAI,gBAAgBA,EAAM,GAAG,EAAA,IAExDsE,EAAetE,CAAK,GACpB4D,EAAU,EAAI;AAAA,EAChB;AAEA,SACE,gBAAAzI,EAAAD,GAAA,EACG,UAAA;AAAA,IAAAyI,KACC,gBAAA9I;AAAA,MAAC2I;AAAA,MAAA;AAAA,QACC,KAAKa,EAAY;AAAA,QACjB,KAAKA,EAAY;AAAA,QACjB,QAAAV;AAAA,QACA,WAAAC;AAAA,MAAA;AAAA,IAAA;AAAA,IAIJ,gBAAAzI;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW;AAAA;AAAA,QAEX8I,EAAI,UAAU;AAAA,QAEb,UAAA;AAAA,UAAAlD,KAAQ,gBAAAlG,EAAC,OAAA,EAAI,WAAU,iBAAiB,UAAAkG,GAAK;AAAA,UAE9C,gBAAA5F,EAAC,OAAA,EAAI,WAAU,kBACb,UAAA;AAAA,YAAA,gBAAAN,EAAC,KAAA,EAAE,WAAU,wDACV,UAAAE,GACH;AAAA,YAEA,gBAAAI,EAAC,OAAA,EAAI,WAAU,qBACZ,UAAA;AAAA,cAAA6E,IACC,gBAAAnF;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,KAAKmF,aAAiB,OAAO,IAAI,gBAAgBA,CAAK,IAAIA;AAAA,kBAC1D,KAAKkE;AAAA,kBACL,SAAS,MAAMK,EAAY,EAAE,KAAKvE,GAAO,KAAKkE,GAAO;AAAA,kBACrD,WAAU;AAAA,gBAAA;AAAA,cAAA,IAEVE,IACFA,aAAyB,WACvBA,EAAclL,CAAI,IAElBkL,IAGF,gBAAAvJ,EAAC,OAAA,EAAI,WAAU,oIACb,UAAA,gBAAAA,EAAC2J,IAAA,EAAK,WAAU,yBAAwB,GAC1C;AAAA,cAGF,gBAAArJ,EAAC,OAAA,EAAI,WAAU,QACb,UAAA;AAAA,gBAAA,gBAAAN,EAAC,KAAA,EAAE,WAAU,0DACV,UAAAqJ,GACH;AAAA,gBACA,gBAAArJ,EAAC,KAAA,EAAE,WAAU,4CACV,UAAAsJ,EAAA,CACH;AAAA,cAAA,EAAA,CACF;AAAA,YAAA,EAAA,CACF;AAAA,UAAA,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ,GC9EMO,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,OAAA7J;AAAA,EACA,SAAAhB,IAAU;AAAA;AAAA,EACV,OAAAC,IAAQ;AAAA,EACR,WAAAF,IAAY;AACd,MAAM;AACJ,QAAM+K,IAAcH,GAAa1K,CAAK,KAAK0K,GAAa,OAClDI,IAAaH,GAAe5K,CAAO,KAAK4K,GAAe,WAEvDI,IACJhL,MAAY,YAAY8K,EAAY,SAASA,EAAY;AAE3D,SACE,gBAAAhK;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,UACPkK,CAAc;AAAA,UACdD,CAAU;AAAA,UACVhL,CAAS;AAAA,MAEZ,UAAAiB;AAAA,IAAA;AAAA,EAAA;AAGP,GChEMiK,KAAY,CAAC,EAAE,KAAAf,GAAK,MAAA/K,QAAW;;AACnC,MAAI6H,IAAOkD,KAAA,gBAAAA,EAAK,MACZlJ,IAAQkJ,EAAI,OACZ1I,IAAQrC,EAAK+K,EAAI,GAAG,GACpBhD,IAAOgD,EAAI,MACXlK,IAAUkK,EAAI,WAAW,WACzBjK,IAAQiK,EAAI;AAEhB,MAAIhD,MAAS,YAAUvG,IAAAuJ,EAAI,gBAAJ,gBAAAvJ,EAAiB,UAAS,GAAG;AAClD,QAAIuK,IAAUhB,KAAA,gBAAAA,EAAK,YAAY,KAAK,CAAC1K,MAAQA,EAAI,SAASgC;AAC1D,IAAI0J,MACF1J,IAAQ0J,EAAQ,OAChBjL,IAAQiL,EAAQ;AAAA,EAEpB;AAEA,SACE,gBAAA9J;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,iDACgC8I,EAAI,cAAc,EAAE;AAAA,MAE9D,UAAA;AAAA,QAAAlD,KAAQ,gBAAAlG,EAAC,OAAA,EAAI,WAAU,iBAAiB,UAAAkG,GAAK;AAAA,QAE9C,gBAAA5F,EAAC,OAAA,EAAI,WAAU,kBACb,UAAA;AAAA,UAAA,gBAAAN,EAAC,KAAA,EAAE,WAAU,wDACV,UAAAE,GACH;AAAA,UAGCkG,MAAS,SACR,gBAAApG;AAAA,YAAC+J;AAAA,YAAA;AAAA,cACC,OAAOrJ;AAAA,cACP,SAAAxB;AAAA,cACA,OAAAC;AAAA,cACA,WAAU;AAAA,YAAA;AAAA,UAAA;AAAA;AAAA,YAGdiH,MAAS,eACP,gBAAApG;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,yBAAyB;AAAA,kBACvB,QAAQU;AAAA,gBAAA;AAAA,cACV;AAAA,YAAA,IAEA0F,MAAS,UACX1F,IACE,gBAAAV;AAAA,cAAC;AAAA,cAAA;AAAA,gBAEC,UAAQ;AAAA,gBACR,KAAKU,aAAiB,OAAO,IAAI,gBAAgBA,CAAK,IAAIA;AAAA,gBAC1D,SAAS,CAAC8C,MAAMA,EAAE,gBAAA;AAAA,gBAClB,WAAU;AAAA,cAAA;AAAA,cAJL9C,aAAiB,OAAO,IAAI,gBAAgBA,CAAK,IAAIA;AAAA,YAAA,IAO5D,gBAAAV,EAAC,KAAA,EAAE,WAAU,8BAA6B,UAAA,OAAG;AAAA;AAAA,gCAI9C,KAAA,EAAE,WAAU,0DACV,UAAAoG,KAAQ,SACP,gBAAApG,EAAC,QAAA,EAAM,UAAApC,GAAW8C,GAAO0I,EAAI,UAAU,aAAa,EAAA,CAAE,IAEtD1I,KAAS,MAAA,CAEb;AAAA;AAAA;AAAA,QAAA,EAAA,CAEJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN,GCtEM2J,KAAQ,CAAC;AAAA,EACb,OAAA3J,IAAQ;AAAA,EACR,UAAAE;AAAA,EACA,MAAA0J;AAAA,EACA,SAAA7J,IAAU,CAAA;AAAA,EACV,OAAAP;AAAA,EACA,UAAAC;AAAA,EACA,MAAAa,IAAO;AAAA,EACP,UAAAF,IAAW;AAAA,EACX,aAAAG,IAAc;AAChB,MAAM;AACJ,QAAMsJ,IACJ9J,EAAQ,SAAS,IACbA,IACA;AAAA,IACE,EAAE,OAAO,UAAU,OAAO,GAAA;AAAA,IAC1B,EAAE,OAAO,YAAY,OAAO,GAAA;AAAA,EAAM;AAG1C,SACE,gBAAAT,EAAAK,GAAA,EACE,UAAA,gBAAAC,EAAC,OAAA,EAAe,WAAWW,KAAe,eACxC,UAAA;AAAA,IAAA,gBAAAjB,EAACC,GAAA,EAAW,OAAAC,GAAc,UAAAC,EAAA,CAAoB;AAAA,IAC9C,gBAAAG,EAAC,OAAA,EAAI,WAAU,yIAEZ,UAAA;AAAA,MAAAgK,KACC,gBAAAtK,EAAC,KAAA,EAAE,WAAU,sHACV,UAAAsK,GACH;AAAA,MAIF,gBAAAtK,EAAC,SAAI,WAAU,2BACZ,YAAa,IAAI,CAACqD,GAAKgF,MACtB,gBAAA/H;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,WAAU;AAAA,UAEV,UAAA;AAAA,YAAA,gBAAAN;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,MAAK;AAAA,gBACL,UAAUG,KAAYkI,MAAQ;AAAA,gBAC9B,OAAOhF,EAAI;AAAA,gBACX,UAAAvC;AAAA,gBACA,SAASJ,MAAU2C,EAAI;AAAA,gBACvB,UAAU,MAAMzC,EAASyC,EAAI,KAAK;AAAA,gBAClC,WAAU;AAAA,cAAA;AAAA,YAAA;AAAA,YAEZ,gBAAArD,EAAC,QAAA,EAAK,WAAU,yCACb,YAAI,MAAA,CACP;AAAA,UAAA;AAAA,QAAA;AAAA,QAfKqI;AAAA,MAAA,CAiBR,EAAA,CACH;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,EAAA,GAjCQrH,CAkCV,GACF;AAEJ,GC9CMwJ,KAAe,CAAC,EAAE,OAAAjE,GAAO,UAAAnF,GAAU,cAAAqJ,QAAmB;AAC1D,QAAM;AAAA,IACJ,KAAA5L;AAAA,IACA,OAAAqB;AAAA,IACA,MAAAkG;AAAA,IACA,SAAA3F;AAAA,IACA,aAAAI;AAAA,IACA,MAAA6J;AAAA,IACA,YAAAC;AAAA,IACA,QAAA5J;AAAA,IACA,QAAAiE;AAAA,IACA,MAAAsF;AAAA,IACA,UAAAnK,IAAW;AAAA,IACX,WAAAyK;AAAA,IACA,UAAA1F;AAAA,IACA,aAAAjE;AAAA,IACA,eAAA4C;AAAA,IACA,gBAAAC;AAAA,IACA,UAAA5C;AAAA,IACA,mBAAAC;AAAA,IACA,WAAA0F;AAAA,IACA,YAAAM;AAAA,IACA,UAAArG;AAAA,IACA,qBAAAwF;AAAA,IACA,cAAA3F;AAAA,IACA,iBAAAkK;AAAA,IACA,qBAAAC;AAAA,IACA,SAAAC;AAAA,IACA,YAAAC;AAAA,EAAA,IACEzE;AAEJ,MAAI7F,IAAQU,KAAA,gBAAAA,EAAWvC;AACvB,EAA2B6B,KAAU,SACnCA,IAAQ;AAGV,QAAMuK,IACJpK,MAAgBuF,MAAS,WAAW,UAAUlG,CAAK,KAAK,SAASA,CAAK,KAElEgL,IACJ;AAEF,MAAIL,KAAmB,OAAOA,KAAoB,cAE5C,CADiBA,EAAgBzJ,CAAQ;AAE3C,WAAO;AAIX,MAAI4J,KAAcA,KAAc;AAC9B,YAAQ5E,GAAA;AAAA,MACN,KAAK;AACH,eAAO,gBAAApG,EAACmJ,IAAA,EAAS,KAAK5C,GAAO,MAAMnF,GAAU;AAAA,MAC/C,KAAK;AACH,eAAO,gBAAApB,EAAC4J,IAAA,EAAU,KAAKrD,GAAO,MAAMnF,GAAU;AAAA,MAChD;AACE,eAAO,gBAAApB,EAACmK,IAAA,EAAU,KAAK5D,GAAO,MAAMnF,GAAU;AAAA,IAAA;AAIpD,UAAQgF,GAAA;AAAA,IACN,KAAK;AACH,aACE,gBAAApG;AAAA,QAACQ;AAAA,QAAA;AAAA,UACC,SAASC,KAAW,CAAA;AAAA,UACpB,OAAAC;AAAA,UACA,UAAAU;AAAA,UACA,eAAe0J;AAAA,UACf,UAAU,CAAChM,MAAQ2L,EAAa5L,GAAKC,CAAG;AAAA,UACxC,aAAamM;AAAA,UACb,WAAWN,KAAc;AAAA,UACzB,QAAA5J;AAAA,UACA,UAAAZ;AAAA,UACA,cAAAQ;AAAA,UACA,OAAAT;AAAA,UACA,MAAMrB;AAAA,UACN,UAAAiC;AAAA,UACA,aAAAG;AAAA,UACA,UAAAC;AAAA,UACA,mBAAAC;AAAA,QAAA;AAAA,MAAA;AAAA,IAIN,KAAK;AACH,aACE,gBAAAnB;AAAA,QAAC6H;AAAA,QAAA;AAAA,UACC,MAAMhJ;AAAA,UACN,OAAAqB;AAAA,UACA,SAASO,KAAW,CAAA;AAAA,UACpB,OAAAC;AAAA,UACA,UAAU,CAAC5B,MAAQ2L,EAAa5L,GAAKC,CAAG;AAAA,UACxC,UAAAqB;AAAA,UACA,aAAAc;AAAA,UACA,WAAW0J,KAAc;AAAA,UACzB,aAAazJ;AAAA,UACb,UAAAJ;AAAA,QAAA;AAAA,MAAA;AAAA,IAIN,KAAK;AACH,aACE,gBAAAd;AAAA,QAACqK;AAAA,QAAA;AAAA,UACC,OAAA3J;AAAA,UACA,UAAU,CAAC5B,MAAQ2L,EAAa5L,GAAKC,CAAG;AAAA,UACxC,MAAAwL;AAAA,UACA,SAAS7J,KAAW,CAAA;AAAA,UACpB,OAAAP;AAAA,UACA,UAAAC;AAAA,UACA,MAAMtB;AAAA,UACN,UAAAiC;AAAA,UACA,aAAAG;AAAA,QAAA;AAAA,MAAA;AAAA,IAIN,KAAK;AACH,aACE,gBAAAjB;AAAA,QAAC0D;AAAA,QAAA;AAAA,UACC,OAAAhD;AAAA,UACA,UAAU,CAAC5B,MAAQ2L,EAAa5L,GAAKC,CAAG;AAAA,UACxC,MAAAwL;AAAA,UACA,SAAS7J,KAAW,CAAA;AAAA,UACpB,OAAAP;AAAA,UACA,UAAAC;AAAA,UACA,MAAMtB;AAAA,UACN,UAAAiC;AAAA,UACA,aAAAG;AAAA,QAAA;AAAA,MAAA;AAAA,IAGN,KAAK;AACH,aACE,gBAAAjB;AAAA,QAAC4D;AAAA,QAAA;AAAA,UACC,OAAAlD;AAAA,UACA,UAAU,CAAC5B,MAAQ2L,EAAa5L,GAAKC,CAAG;AAAA,UACxC,eAAA+E;AAAA,UACA,gBAAAC;AAAA,UACA,UAAA3D;AAAA,UACA,aAAa8K;AAAA,UACb,QAAAlK;AAAA,UACA,OAAAb;AAAA,UACA,MAAMrB;AAAA,UACN,UAAAiC;AAAA,UACA,aAAAG;AAAA,QAAA;AAAA,MAAA;AAAA,IAIN,KAAK;AACH,aACE,gBAAAjB;AAAA,QAAC8E;AAAA,QAAA;AAAA,UACC,OAAApE;AAAA,UACA,UAAU,CAAC8C,MAAMiH,EAAa5L,GAAK2E,EAAE,OAAO,KAAK;AAAA,UACjD,aAAayH;AAAA,UACb,MAAMP,KAAQ;AAAA,UACd,WAAW,GAAGQ,CAAS,IAAIP,KAAc,EAAE;AAAA,UAC3C,UAAAxK;AAAA,UACA,MAAMtB;AAAA,UACN,OAAAqB;AAAA,UACA,UAAAY;AAAA,UACA,aAAAG;AAAA,QAAA;AAAA,MAAA;AAAA,IAIN,KAAK;AACH,aACE,gBAAAjB;AAAA,QAAC+E;AAAA,QAAA;AAAA,UACC,OAAArE;AAAA,UACA,UAAU,CAACkF,MAAW6E,EAAa5L,GAAK+G,CAAM;AAAA,UAC9C,UAAAzF;AAAA,UACA,QAAQ6E,KAAU;AAAA,UAClB,IAAI,QAAQnG,CAAG;AAAA,UACf,UAAAqG;AAAA,UACA,OAAAhF;AAAA,UACA,MAAMrB;AAAA,UACN,aAAAoC;AAAA,QAAA;AAAA,MAAA;AAAA,IAGN,KAAK;AACH,aACE,gBAAAjB;AAAA,QAACsI;AAAA,QAAA;AAAA,UACC,OAAA5H;AAAA,UACA,UAAU,CAAC6H,MAAUkC,EAAa5L,GAAK0J,CAAK;AAAA,UAC5C,UAAApI;AAAA,UACA,QAAQ6E,KAAU;AAAA,UAClB,IAAI,QAAQnG,CAAG;AAAA,UACf,UAAAqG;AAAA,UACA,OAAAhF;AAAA,UACA,MAAMrB;AAAA,UACN,aAAAoC;AAAA,QAAA;AAAA,MAAA;AAAA,IAIN,KAAK;AACH,aACE,gBAAAjB;AAAA,QAAC4G;AAAA,QAAA;AAAA,UACC,OAAAlG;AAAA,UACA,UAAU,CAACyH,MAAasC,EAAa5L,GAAKsJ,CAAQ;AAAA,UAClD,UAAAhI;AAAA,UAEA,aAAa8K;AAAA,UACb,OAAA/K;AAAA,UACA,aAAAe;AAAA,UACA,YAAAkG;AAAA,UACA,WAAAN;AAAA,UACA,UAAA/F;AAAA,QAAA;AAAA,QANK,UAAUjC,CAAG;AAAA,MAAA;AAAA,IAUxB;AACE,aACE,gBAAAmB;AAAA,QAACmG;AAAA,QAAA;AAAA,UACC,OAAAI;AAAA,UACA,MAAMH,KAAQ;AAAA,UACd,cAAAzF;AAAA,UACA,OAAAD;AAAA,UACA,UAAU,CAAC8C,MAAMiH,EAAa5L,GAAK2E,EAAE,OAAO,KAAK;AAAA,UACjD,aAAayH;AAAA,UACb,WAAW,GAAGC,CAAS,IAAIP,KAAc,EAAE;AAAA,UAC3C,UAAAxK;AAAA,UACA,MAAMtB;AAAA,UACN,WAAA+L;AAAA,UACA,OAAA1K;AAAA,UACA,qBAAAoG;AAAA,UACA,aAAArF;AAAA,UACA,UAAAH;AAAA,UACA,SAAAiK;AAAA,QAAA;AAAA,MAAA;AAAA,EACF;AAGR,GC7OMI,KAAe,CAAC,EAAE,QAAArC,GAAQ,SAAAsC,GAAS,QAAAC,GAAQ,SAAAC,QAAc;;AAC7D,QAAM,CAACC,GAASC,CAAU,IAAIhK,EAAS,CAAA,CAAE,GACnCiJ,IAAe,CAAC5L,GAAK6B,MAAU;AACnC,IAAA8K,EAAW,CAAC7E,OAAU,EAAE,GAAGA,GAAM,CAAC9H,CAAG,GAAG6B,EAAA,EAAQ;AAAA,EAClD,GAEM+K,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,gBAAA9K,EAAAD,GAAA,EAEE,UAAA;AAAA,IAAA,gBAAAL;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,kEACT8I,IACI,oCACA,+BACN;AAAA,QACA,SAASsC;AAAA,MAAA;AAAA,IAAA;AAAA,IAIX,gBAAA9K;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW;AAAA;AAAA,YAEPwI,IAAS,kBAAkB,kBAAkB;AAAA;AAAA,QAIjD,UAAA;AAAA,UAAA,gBAAAxI,EAAC,OAAA,EAAI,WAAU,6FACb,UAAA;AAAA,YAAA,gBAAAN,EAAC,MAAA,EAAG,WAAU,uDAAsD,UAAA,WAEpE;AAAA,YACA,gBAAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,SAASoL;AAAA,gBACT,WAAU;AAAA,gBAEV,UAAA,gBAAApL,EAACkJ,IAAA,EAAE,WAAU,2CAAA,CAA2C;AAAA,cAAA;AAAA,YAAA;AAAA,UAC1D,GACF;AAAA,UAGCJ,KACC,gBAAA9I,EAAC,OAAA,EAAI,WAAU,oCACZ,yBAAQ,YACP,gBAAAA;AAAA,YAACqL,EAAO;AAAA,YAAP;AAAA,cACC,SAAAE;AAAA,cACA,gBAAgBd;AAAA,YAAA;AAAA,UAAA,IAGlB,gBAAAzK,EAAC,OAAA,EAAI,WAAU,aACZ,sCAAQ,6BAAQ,IAAI,CAACuG,MACpB,gBAAAvG,EAAAK,GAAA,EACE,UAAA,gBAAAL;AAAA,YAACwK;AAAA,YAAA;AAAA,cAEC,OAAAjE;AAAA,cACA,UAAUgF;AAAA,cACV,cAAAd;AAAA,YAAA;AAAA,YAHKlE,EAAM;AAAA,UAAA,GAKf,GACD,CACH,GAEJ;AAAA,UAIF,gBAAAjG,EAAC,OAAA,EAAI,WAAU,sEACb,UAAA;AAAA,YAAA,gBAAAN;AAAA,cAACjB;AAAA,cAAA;AAAA,gBACC,SAAS0M;AAAA,gBACT,SAAQ;AAAA,gBACR,OAAM;AAAA,gBACN,WAAS;AAAA,gBACV,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAGD,gBAAAzL;AAAA,cAACjB;AAAA,cAAA;AAAA,gBACC,SAAS2M;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,GCpGMC,KAAgB,CAAC,EAAE,MAAAjB,IAAO,GAAG,SAAAkB,IAAU,QAEzC,gBAAAtL,EAAAD,GAAA,EACE,UAAA;AAAA,EAAA,gBAAAL,EAAC,SAAI,WAAU,oDACb,4BAAC,OAAA,EAAI,WAAU,+DAA8D,EAAA,CAC/E;AAAA,oBACC,OAAA,EAAI,WAAU,0EACb,UAAA,gBAAAM,EAAC,SAAA,EAAM,WAAU,0BACf,UAAA;AAAA,IAAA,gBAAAN,EAAC,SAAA,EACC,UAAA,gBAAAA,EAAC,MAAA,EAAG,WAAU,+BACX,UAAA,MAAM,KAAK,EAAE,QAAQ4L,EAAA,CAAS,EAAE,IAAI,CAACC,GAAGC,MACvC,gBAAA9L,EAAC,MAAA,EAAW,WAAU,aACpB,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,wGAAuG,EAAA,GAD/G8L,CAET,CACD,EAAA,CACH,GACF;AAAA,IAEA,gBAAA9L,EAAC,SAAA,EACE,UAAA,MAAM,KAAK,EAAE,QAAQ0K,EAAA,CAAM,EAAE,IAAI,CAACmB,GAAGE,MACpC,gBAAA/L;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,WAAU;AAAA,QAET,UAAA,MAAM,KAAK,EAAE,QAAQ4L,GAAS,EAAE,IAAI,CAACC,GAAGG,MACvC,gBAAAhM,EAAC,MAAA,EAAkB,WAAU,aAC3B,UAAA,gBAAAA,EAAC,SAAI,WAAU,gEAAA,CAAgE,EAAA,GADxEgM,CAET,CACD;AAAA,MAAA;AAAA,MAPID;AAAA,IAAA,CASR,EAAA,CACH;AAAA,EAAA,EAAA,CACF,EAAA,CACF;AAAA,GACF,GCfEE,KAAQ,CAAC;AAAA,EACb,QAAAZ;AAAA,EACA,YAAAa;AAAA,EACA,OAAA7C;AAAA,EACA,YAAA8C;AAAA,EACA,aAAAC;AAAA,EACA,eAAAC;AACF,MAAM;AACJ,QAAM;AAAA,IACJ,MAAAhO,IAAO,CAAA;AAAA,IACP,YAAAiO,IAAa,CAAA;AAAA,IACb,SAAAC,IAAU;AAAA,IACV,QAAAxL,IAAS;AAAA,MACP,SAAS;AAAA,MACT,aAAa;AAAA,MACb,qBAAqB;AAAA,IAAA;AAAA,IAEvB,QAAAyL,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,IACf,UAAAC,IAAW;AAAA,EAAA,IACT1B,GAEE,CAAC/M,GAAYmD,CAAa,IAAID,EAAS,EAAE,GACzC,CAACwL,GAAYC,CAAa,IAAIzL,EAAS,IAAI,GAC3C,CAAC0L,GAAUC,CAAW,IAAI3L,EAAS,CAAA,CAAE,GACrC,CAAC4L,GAAcC,CAAe,IAAI7L,EAAS,CAAA,CAAE,GAC7C,CAAC8L,GAAaC,CAAc,IAAI/L,EAAS,EAAK,GAC9C,CAACgM,GAAgBC,CAAiB,IAAIjM,EAAS,CAAA,CAAE,GAGjD,CAACgI,GAAaC,CAAc,IAAIjI,EAAS,IAAI,GAC7C,CAACsH,GAAQC,CAAS,IAAIvH,EAAS,EAAK,GAEpCkM,IAAeC,GAAQ,MACvB,CAAC5M,EAAO,WAAW,CAACzC,EAAW,KAAA,KAC/ByC,EAAO,sBAA4B1C,IAChCD,GAAgBC,GAAMC,GAAYyC,EAAO,cAAc,CAAA,CAAE,GAC/D,CAAC1C,GAAMC,GAAYyC,CAAM,CAAC,GAEvB,CAAC6M,GAAaC,CAAc,IAAIrM,EAAS,CAAC,GAC1C,CAACsM,GAAUC,EAAW,IAAIvM,GAASiL,KAAA,gBAAAA,EAAY,kBAAiB,EAAE,GAClE,CAACuB,IAAcC,EAAe,IAAIzM,EAASkM,EAAa,UAAU,CAAC,GAEnEQ,KAAazB,KAAA,QAAAA,EAAY,0BAC3BA,EAAW,cACX,KAAK,KAAKiB,EAAa,SAASI,CAAQ,GAEtCK,KAAgBR,GAAQ,MAAM;AAClC,QAAIlB,EAAW,wBAAyB,QAAOiB;AAC/C,UAAMU,KAASR,IAAc,KAAKE;AAClC,WAAOJ,EAAa,MAAMU,GAAOA,IAAQN,CAAQ;AAAA,EACnD,GAAG,CAACJ,GAAcE,GAAaE,CAAQ,CAAC,GAElCO,KAAUxM,EAAO,IAAI,GACrByM,KAAazM,EAAO,EAAE,GACtB0M,KAAmB1M,EAAO,IAAI,GAE9B2M,KAAqB,CAAC9N,MAAU;AACpC,IAAAe,EAAcf,CAAK,GACnBmN,EAAe,CAAC,GAEZ9M,EAAO,wBACLwN,GAAiB,WAAS,aAAaA,GAAiB,OAAO,GAEnEA,GAAiB,UAAU,WAAW,YAAY;AAChD,UAAI;AACF,cAAM3B,EAA4B,CAACjG,OAAU;AAAA,UAC3C,GAAGA;AAAA,UACH,QAAQjG;AAAA,UACR,cAAc;AAAA,QAAA,EACd;AAAA,MACJ,SAASiH,GAAO;AACd,gBAAQ,MAAM,iBAAiBA,CAAK;AAAA,MACtC;AAAA,IACF,GAAG,GAAG;AAAA,EAEV,GAEM8G,KAAoB,CAACC,GAAQ/P,GAAM6E,MAAM;AAC7C,IAAAA,EAAE,gBAAA,GACFyJ,EAAc,IAAI,GAClBN,KAAA,QAAAA,EAAe+B,EAAO,MAAM/P;AAAA,EAC9B,GAEMgQ,KAAmB,CAACC,GAAQpL,GAAGqL,MAAc;AACjD,IAAArL,EAAE,gBAAA,GACF2J,EAAY0B,CAAS;AACrB,UAAMC,IAAStL,EAAE;AACjB,IAAA8K,GAAW,QAAQM,CAAM,IAAIE;AAC7B,UAAMjM,IAAOiM,EAAO,sBAAA,GACdC,IAAY,KACZC,IAAaH,EAAU,SAAS,IAChCI,KAAgB,OAAO,YACvBC,KAAiB,OAAO,aAGxBC,KADWF,KAAgBpM,EAAK,QAAQkM,IACtBlM,EAAK,OAAOkM,IAAYlM,EAAK,QAAQA,EAAK,MAI5DuM,KADJF,KAAiBrM,EAAK,SAASmM,KAAcnM,EAAK,MAAMmM,IACrCnM,EAAK,MAAMmM,IAAa,IAAInM,EAAK,SAAS;AAE/D,IAAAwK,EAAgB;AAAA,MACd,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI+B,IAAKF,KAAiBF,IAAa,CAAC,CAAC;AAAA,MAC/D,MAAM,KAAK,IAAI,GAAG,KAAK,IAAIG,IAAMF,KAAgBF,IAAY,CAAC,CAAC;AAAA,IAAA,CAChE,GAED9B,EAAcD,MAAe4B,IAAS,OAAOA,CAAM;AAAA,EACrD,GAEMS,KAAqB,CAACjH,OAClBwF,IAAc,KAAKE,IAAW1F,IAAQ,GAG1CsB,KAAc,CAACvE,MAAU;AAC7B,IAAIA,KAASA,EAAM,eAAe,SAChCA,IAAQ,EAAE,GAAGA,GAAO,KAAK,IAAI,gBAAgBA,EAAM,GAAG,EAAA,IAExDsE,EAAetE,CAAK,GACpB4D,EAAU,EAAI;AAAA,EAChB,GAEMuG,KAAe,CACnBC,GACAC,GACAvQ,GACAsK,IAAgB,MAChBkG,IAAM,gCAID,UAAAF,IACC,gBAAAvP;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KACEuP,aAAoB,OAChB,IAAI,gBAAgBA,CAAQ,IAC5BA;AAAA,MAEN,KAAKC,KAAY;AAAA,MACjB,SAAS,CAAChM,MAAM;AACd,QAAAA,EAAE,gBAAA,GACFA,EAAE,eAAA,GACFkG,GAAY,EAAE,KAAK6F,GAAU,KAAKC,GAAU;AAAA,MAC9C;AAAA,MACA,WAAW,2GAA2GvQ,KAAa,EAAE;AAAA,IAAA;AAAA,EAAA,2BAIpI,UAAAsK,IACC,OAAOA,KAAkB,aACvBA,EAAckG,CAAG,IAEjBlG,IAGF,gBAAAvJ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,6IAA6If,KAAa,EAAE;AAAA,MAEvK,UAAA,gBAAAe,EAAC2J,IAAA,EAAK,WAAU,2CAAA,CAA2C;AAAA,IAAA;AAAA,EAAA,GAGjE,EAAA,CAEJ,GAIE+F,KAAc,CAACC,GAAU1Q,6BAGxB,UAAA0Q,IACC,gBAAA3P;AAAA,IAAC;AAAA,IAAA;AAAA,MAMC,UAAQ;AAAA,MACR,KACE2P,aAAoB,OAChB,IAAI,gBAAgBA,CAAQ,IAC5BA;AAAA,MAEN,SAAS,CAACnM,MAAM;AACd,QAAAA,EAAE,gBAAA;AAAA,MACJ;AAAA,MACA,WAAW,uBAAuBvE,KAAa,EAAE;AAAA,IAAA;AAAA,IAb/C0Q,aAAoB,OAChB,IAAI,gBAAgBA,CAAQ,IAC5BA;AAAA,EAAA,IAcR,gBAAA3P,EAAAK,GAAA,EACE,UAAA,gBAAAL;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,6IAA6If,KAAa,EAAE;AAAA,MAEvK,UAAA,gBAAAe,EAAC4P,IAAA,EAAM,WAAU,2CAAA,CAA2C;AAAA,IAAA;AAAA,EAAA,GAEhE,EAAA,CAEJ,GAIEC,KAAkB,CAACJ,GAAKrG,wBAEzB,OAAA,EAAI,WAAW,+BAA+BA,EAAI,aAAa,EAAE,IAC/D,UAAA;AAAA,IAAAA,EAAI,WACDkG;AAAA,MACEG,EAAIrG,EAAI,QAAQ;AAAA,MAChBqG,EAAIrG,EAAI,QAAQ;AAAA,MAChB;AAAA,MACAA,EAAI;AAAA,MACJqG;AAAA,IAAA,IAEF;AAAA,sBACH,OAAA,EACC,UAAA;AAAA,MAAA,gBAAAzP,EAAC,OAAE,WAAU,yDACV,YAAIoJ,EAAI,QAAQ,KAAK,IACxB;AAAA,MACA,gBAAApJ,EAAC,OAAE,WAAU,4DACV,YAAIoJ,EAAI,WAAW,KAAK,GAAA,CAC3B;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,GACF,GAIE0G,KAAmB,CAACpP,GAAO0I,MAAQ;;AACvC,QAAIlJ,IAAQ,OAAOQ,CAAK;AACxB,UAAMxB,IAAUkK,EAAI,WAAW;AAC/B,QAAIjK,IAAQiK,EAAI;AAEhB,UAAIvJ,IAAAuJ,KAAA,gBAAAA,EAAK,gBAAL,gBAAAvJ,EAAkB,UAAS,GAAG;AAChC,UAAIuK,IAAUhB,KAAA,gBAAAA,EAAK,YAAY,KAAK,CAAC1K,OAAQA,GAAI,SAASgC;AAC1D,MAAI0J,MACFlK,IAAQkK,EAAQ,OAChBjL,IAAQiL,EAAQ;AAAA,IAEpB;AAEA,WACE,gBAAApK;AAAA,MAAC+J;AAAA,MAAA;AAAA,QACC,OAAA7J;AAAA,QACA,SAAAhB;AAAA,QACA,OAAAC;AAAA,QACA,WAAWiK,EAAI,aAAa;AAAA,MAAA;AAAA,IAAA;AAAA,EAGlC,GAEM2G,KAAwB,CAAC3G,GAAKqG,GAAKrH,MAAU;AACjD,UAAM1H,IAAQ+O,EAAIrG,EAAI,GAAG;AACzB,WAAIA,EAAI,SAAS,mCAEZ,OAAA,EAAI,WAAW,eAAeA,EAAI,aAAa,EAAE,IAChD,UAAA,gBAAApJ;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAK,CAACgQ,MAAQ1B,GAAW,QAAQmB,EAAI,MAAMA,EAAI,GAAG,IAAIO;AAAA,QACtD,SAAS,CAACxM,MACRmL,GAAiBc,EAAI,MAAMA,EAAI,KAAKjM,GAAG4F,EAAI,QAAQ;AAAA,QAErD,WAAU;AAAA,QAEV,UAAA,gBAAApJ,EAACiQ,IAAA,EAAiB,WAAU,UAAA,CAAU;AAAA,MAAA;AAAA,IAAA,GAE1C,IAEO7G,EAAI,SAAS,UAEpB,gBAAApJ,EAAC,UAAK,WAAWoJ,EAAI,aAAa,IAAK,UAAAiG,GAAmBjH,CAAK,EAAA,CAAE,IAE1DgB,EAAI,SAAS,UACfyG,GAAgBJ,GAAKrG,CAAG,IACtBA,EAAI,SAAS,SACf,gBAAApJ,EAAAK,GAAA,EAAG,UAAAyP,GAAiBpP,GAAO0I,CAAG,GAAE,IAC9BA,EAAI,SAAS,SAEpB,gBAAApJ,EAAC,QAAA,EAAK,WAAWoJ,EAAI,aAAa,IAC/B,UAAAxL,GAAW8C,GAAO0I,EAAI,UAAU,aAAa,EAAA,CAChD,IAEOA,EAAI,SAAS,WAEpB,gBAAApJ,EAAAK,GAAA,EACE,UAAA,gBAAAL,EAAC,OAAA,EAAI,WAAU,gBACZ,UAAAsP;AAAA,MACC5O;AAAA,MACA0I,EAAI;AAAA,MACJA,EAAI;AAAA,MACJA,EAAI;AAAA,MACJqG;AAAA,IAAA,GAEJ,EAAA,CACF,IAEOrG,EAAI,SAAS,UACf,gBAAApJ,EAAAK,GAAA,EAAG,UAAAqP,GAAYhP,GAAO0I,EAAI,SAAS,GAAE,sBAEpC,QAAA,EAAK,WAAWA,EAAI,aAAa,IAAK,eAAS,OAAM;AAAA,EAEjE,GAGM8G,KAAiB,CAACT,MAAQ;AAC9B,QAAI,OAAO1C,KAAa;AACtB,aAAOA,EAAS0C,CAAG;AAErB,QAAI1C;AACF,aAAOJ,KAAA,gBAAAA,EAAe,QAAQ8C;AAAA,EAElC,GAEMU,KAAoB,CAAC/G,GAAKqG,MAAQ;AACtC,QAAIrG,EAAI;AACN,aAAOuD,KAAA,gBAAAA,EAAe,QAAQ8C;AAGhC,QAAI,OAAOrG,EAAI,eAAgB;AAC7B,aAAOA,EAAI,YAAYqG,CAAG;AAAA,EAE9B,GAGMW,KAAiB,MAAMrD,KAAY,OAAOA,KAAa,YAEvDsD,KAAoB,CAACjH,MACzBA,EAAI,kBAAkB,OAAOA,EAAI,eAAgB;AAGnD,SAAAjH,EAAU,MAAM;AACd,UAAMmO,IAAe,MAAM;AACzB,MAAItD,OAA0B,IAAI;AAAA,IACpC;AAEA,kBAAO,iBAAiB,UAAUsD,GAAc,EAAI,GAC7C,MAAM;AACX,aAAO,oBAAoB,UAAUA,GAAc,EAAI;AAAA,IACzD;AAAA,EACF,GAAG,CAACtD,CAAU,CAAC,GAEf7K,EAAU,MAAM;AACd,UAAMQ,IAAqB,CAACa,MAAM;AAChC,MAAI6K,GAAQ,WAAW,CAACA,GAAQ,QAAQ,SAAS7K,EAAE,MAAM,KACvDyJ,EAAc,IAAI;AAAA,IAEtB;AACA,oBAAS,iBAAiB,SAAStK,CAAkB,GAC9C,MAAM,SAAS,oBAAoB,SAASA,CAAkB;AAAA,EACvE,GAAG,CAAA,CAAE,GAELR,EAAU,MAAM;AACd,IAAIsK,KAAA,QAAAA,EAAY,kBAAiBA,KAAA,QAAAA,EAAY,4BAC3CsB,IAAYtB,KAAA,gBAAAA,EAAY,kBAAiB,EAAE,GAGzCA,EAAW,gBACboB,EAAepB,EAAW,YAAY;AAAA,EAE1C,GAAG;AAAA,IACDA,EAAW;AAAA,IACXA,KAAA,gBAAAA,EAAY;AAAA,IACZA,EAAW;AAAA,EAAA,CACZ,GAEDtK,EAAU,MAAM;AACd,IAAA8L;AAAA,MACExB,KAAA,QAAAA,EAAY,0BACRA,EAAW,gBACXiB,EAAa;AAAA,IAAA,GAIjBA,EAAa,UAAUI,KAAYF,IAAc,MACjD,EAACnB,KAAA,QAAAA,EAAY,4BAEboB,EAAe,CAAClH,MAASA,IAAO,KAAK,CAAC;AAAA,EAE1C,GAAG;AAAA,IACD+G,EAAa;AAAA,IACbjB,EAAW;AAAA,IACXA,KAAA,gBAAAA,EAAY;AAAA,EAAA,CACb,GAGC,gBAAAnM,EAAAD,GAAA,EAGG,UAAA;AAAA,IAAAkM,sBACEZ,IAAA,EAAc,MAAM,GAAG,SAAS,EAAA,CAAG,IAEpC,gBAAArL,EAAAD,GAAA,EACE,UAAA;AAAA,MAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,2DACb,UAAA;AAAA,QAAA,gBAAAA,EAAC,OAAA,EACC,UAAA;AAAA,UAAA,gBAAAN,EAAC,MAAA,EAAG,WAAU,oDACX,UAAAqJ,GACH;AAAA,UACA,gBAAArJ,EAAC,KAAA,EAAE,WAAU,4CACV,UAAAoM,EAAA,CACH;AAAA,QAAA,GACF;AAAA,QACA,gBAAA9L,EAAC,OAAA,EAAI,WAAU,6CACZ,UAAA;AAAA,UAAA+L,KACC,gBAAA/L;AAAA,YAACvB;AAAA,YAAA;AAAA,cACC,SAAS,MAAMmN,EAAW,EAAI;AAAA,cAC9B,SAAQ;AAAA,cACR,OAAM;AAAA,cAEN,UAAA;AAAA,gBAAA,gBAAAlM,EAACuQ,IAAA,EAAK,WAAU,eAAA,CAAe;AAAA,gBAC9BpE,KAAc;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAGnB,gBAAA7L,EAAC,OAAA,EAAI,WAAU,uCACZ,UAAA;AAAA,YAAAS,EAAO,6BACL,OAAA,EAAI,WAAU,IACb,UAAA,gBAAAT,EAAC,OAAA,EAAI,WAAU,0BACb,UAAA;AAAA,cAAA,gBAAAN,EAACuD,IAAA,EAAO,WAAU,oFAAA,CAAoF;AAAA,cACtG,gBAAAvD;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,aAAae,EAAO,eAAe;AAAA,kBACnC,OAAOzC;AAAA,kBACP,UAAU,CAACkF,MAAMgL,GAAmBhL,EAAE,OAAO,KAAK;AAAA,kBAClD,WAAU;AAAA,gBAAA;AAAA,cAAA;AAAA,YACZ,EAAA,CACF,EAAA,CACF;AAAA,YAGDsJ,KAAgBN,EAAO;AAAA,YAEtB,gBAAAlM,EAAC,OAAA,EAAI,WAAU,YACb,UAAA;AAAA,cAAA,gBAAAA;AAAA,gBAACvB;AAAA,gBAAA;AAAA,kBACC,SAAS,MAAMwO,EAAe,EAAI;AAAA,kBAClC,SAAQ;AAAA,kBAER,UAAA;AAAA,oBAAA,gBAAAvN,EAACwQ,IAAA,EAAO,WAAU,eAAA,CAAe;AAAA,oBAAE;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,cAGpC,OAAO,KAAKhD,CAAc,EAAE,SAAS,KACpC,gBAAAxN,EAAC,QAAA,EAAK,WAAU,yDAAA,CAAyD;AAAA,YAAA,EAAA,CAE7E;AAAA,UAAA,EAAA,CAEJ;AAAA,QAAA,EAAA,CACF;AAAA,MAAA,GACF;AAAA,MAEA,gBAAAM,EAAC,OAAA,EAAI,WAAU,2GACb,UAAA;AAAA,QAAA,gBAAAN,EAAC,SAAI,WAAU,mBACb,UAAA,gBAAAM,EAAC,SAAA,EAAM,WAAU,4DACf,UAAA;AAAA,UAAA,gBAAAN,EAAC,SAAA,EAAM,WAAU,kCACf,UAAA,gBAAAA,EAAC,QACE,UAAAsM,EAAW,IAAI,CAAClD,MACf,gBAAApJ;AAAA,YAAC;AAAA,YAAA;AAAA,cAEC,WAAW,gIAAgIoJ,EAAI,aAAa,EAAE;AAAA,cAE7J,UAAAA,EAAI;AAAA,YAAA;AAAA,YAHAA,EAAI;AAAA,UAAA,CAKZ,GACH,EAAA,CACF;AAAA,UAEA,gBAAApJ,EAAC,WAAM,WAAU,2EACd,aAAc,WAAW,sBACvB,MAAA,EACC,UAAA,gBAAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,SAASsM,EAAW;AAAA,cACpB,WAAU;AAAA,cAET,UAAAI;AAAA,YAAA;AAAA,UAAA,GAEL,IAEAyB,GAAc,IAAI,CAACsB,GAAKrH,MACtB,gBAAApI;AAAA,YAAC;AAAA,YAAA;AAAA,cAEC,WAAW,yDAAyDoQ,GAAA,IAAmB,mBAAmB,EAAE;AAAA,cAC5G,SAAS,CAAC5M,MAAM;AACd,gBAAA4M,GAAA,KAAoBF,GAAeT,CAAG;AAAA,cACxC;AAAA,cAEC,UAAAnD,EAAW,IAAI,CAAClD,MACf,gBAAApJ;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBAEC,WAAW,gEAAgEoJ,EAAI,QAAQ,UAAU,KAAK,eAAe,aACnHiH,GAAkBjH,CAAG,IAAI,mBAAmB,EAC9C;AAAA,kBACA,OAAO,OAAOqG,EAAIrG,EAAI,GAAG,KAAK,EAAE;AAAA,kBAChC,SAAS,CAAC5F,MAAM;AACd,oBAAI6M,GAAkBjH,CAAG,MACvB5F,EAAE,gBAAA,GACFA,EAAE,eAAA,GACF2M,GAAkB/G,GAAKqG,CAAG;AAAA,kBAE9B;AAAA,kBAEC,UAAArG,EAAI,SACDA,EAAI,OAAOqG,GAAKrH,CAAK,IACrB2H,GAAsB3G,GAAKqG,GAAKrH,CAAK;AAAA,gBAAA;AAAA,gBAfpCgB,EAAI;AAAA,cAAA,CAiBZ;AAAA,YAAA;AAAA,YAzBIqG,EAAI,MAAMA,EAAI,OAAOrH;AAAA,UAAA,CA2B7B,EAAA,CAEL;AAAA,QAAA,EAAA,CACF,EAAA,CACF;AAAA,SAECqE,KAAA,gBAAAA,EAAY,YAAWiB,EAAa,SAAS,KAC5C,gBAAApN,EAAC,OAAA,EAAI,WAAU,6IACb,UAAA;AAAA,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,4CAA2C,UAAA;AAAA,YAAA;AAAA,aAC9CsN,IAAc,KAAKE,IAAW;AAAA,YAAE;AAAA,YAAI;AAAA,YAC7C,KAAK,IAAIF,IAAcE,GAAUE,EAAY;AAAA,YAAE;AAAA,YAAI;AAAA,YACnDA;AAAA,YAAa;AAAA,UAAA,GAChB;AAAA,UAEA,gBAAA1N,EAAC,OAAA,EAAI,WAAU,2BAEb,UAAA;AAAA,YAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,cAAA,gBAAAN,EAAC,QAAA,EAAK,WAAU,4CAA2C,UAAA,kBAE3D;AAAA,cACA,gBAAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,OAAO8N;AAAA,kBACP,UAAU,CAACtK,MAAM;AACf,0BAAMiN,IAAW,OAAOjN,EAAE,OAAO,KAAK;AACtC,oBAAAuK,GAAY0C,CAAQ,GACpB5C,EAAe,CAAC,GACZpB,EAAW,2BACbG,EAA4B,CAACjG,OAAU;AAAA,sBACrC,GAAGA;AAAA,sBACH,cAAc;AAAA,sBACd,eAAe8J;AAAA,oBAAA,EACf;AAAA,kBAEN;AAAA,kBACA,WAAU;AAAA,kBAET,WAAC,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,CAACxS,wBACxB,UAAA,EAAe,OAAOA,GACpB,UAAAA,EAAA,GADUA,CAEb,CACD;AAAA,gBAAA;AAAA,cAAA;AAAA,YACH,GACF;AAAA,YAGA,gBAAAqC,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,cAAA,gBAAAN;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,SAAS,MAAM;AACb,wBAAI4N,IAAc,GAAG;AACnB,4BAAM8C,IAAU9C,IAAc;AAC9B,sBAAAC,EAAe6C,CAAO,GAClBjE,EAAW,2BACbG,EAA4B,CAACjG,OAAU;AAAA,wBACrC,GAAGA;AAAA,wBACH,cAAc+J;AAAA,sBAAA,EACd;AAAA,oBAEN;AAAA,kBACF;AAAA,kBACA,UAAU9C,MAAgB;AAAA,kBAC1B,WAAU;AAAA,kBAEV,UAAA,gBAAA5N,EAAC2Q,IAAA,EAAY,WAAU,UAAA,CAAU;AAAA,gBAAA;AAAA,cAAA;AAAA,cAGnC,gBAAArQ,EAAC,QAAA,EAAK,WAAU,4CAA2C,UAAA;AAAA,gBAAA;AAAA,gBACnDsN;AAAA,gBAAY;AAAA,gBAAKM;AAAA,cAAA,GACzB;AAAA,cAEA,gBAAAlO;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,SAAS,MAAM;AACb,wBAAI4N,IAAcM,IAAY;AAC5B,4BAAMwC,IAAU9C,IAAc;AAC9B,sBAAAC,EAAe6C,CAAO,GAClBjE,EAAW,2BACbG,EAA4B,CAACjG,OAAU;AAAA,wBACrC,GAAGA;AAAA,wBACH,cAAc+J;AAAA,sBAAA,EACd;AAAA,oBAEN;AAAA,kBACF;AAAA,kBACA,UAAU9C,MAAgBM;AAAA,kBAC1B,WAAU;AAAA,kBAEV,UAAA,gBAAAlO,EAAC4Q,IAAA,EAAa,WAAU,UAAA,CAAU;AAAA,gBAAA;AAAA,cAAA;AAAA,YACpC,EAAA,CACF;AAAA,UAAA,EAAA,CACF;AAAA,QAAA,EAAA,CACF;AAAA,MAAA,EAAA,CAEJ;AAAA,IAAA,GACF;AAAA,IAID5D,KACC6D;AAAA,MACE,gBAAA7Q;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAKqO;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,GAAQ5C,MACrB,gBAAAxL;AAAA,YAAC;AAAA,YAAA;AAAA,cAEC,SAAS,CAACkD,MACRiL;AAAA,gBACEC;AAAA,gBACArQ,EAAK;AAAA,kBACH,CAACyS,MAAMA,EAAE,OAAO9D,KAAc8D,EAAE,OAAO9D;AAAA,gBAAA;AAAA,gBAEzCxJ;AAAA,cAAA;AAAA,cAGJ,WAAW,uGACTkL,EAAO,YAAY,WACf,mCACA,kCACN;AAAA,cAEC,UAAA;AAAA,gBAAAA,EAAO,QAAQ,gBAAA1O,EAAC,QAAA,EAAK,WAAU,YAAY,YAAO,MAAK;AAAA,gBACvD0O,EAAO;AAAA,cAAA;AAAA,YAAA;AAAA,YAjBH5C;AAAA,UAAA,CAmBR;AAAA,QAAA;AAAA,MAAA;AAAA,MAEH,SAAS;AAAA,IAAA;AAAA,IAIZgB,KACC,gBAAA9M;AAAA,MAACmL;AAAA,MAAA;AAAA,QACC,QAAQmC;AAAA,QACR,SAAS,MAAMC,EAAe,EAAK;AAAA,QACnC,QAAQT;AAAA,QACR,SAAS,CAACvB,MAAY;AACpB,UAAAkC,EAAkBlC,CAAO,GACzBsB,KAAA,QAAAA,EAAgBtB;AAAA,QAClB;AAAA,MAAA;AAAA,IAAA;AAAA,IAIHzC,KACC,gBAAA9I;AAAA,MAAC2I;AAAA,MAAA;AAAA,QACC,KAAKa,EAAY;AAAA,QACjB,KAAKA,EAAY;AAAA,QACjB,QAAAV;AAAA,QACA,WAAAC;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GAEJ;AAEJ,GC3qBMgI,KAAQ,CAAC;AAAA,EACb,QAAAjI;AAAA,EACA,SAAAsC;AAAA,EACA,MAAA4F;AAAA,EACA,OAAA3H;AAAA,EACA,UAAA/J;AAAA,EACA,MAAAF,IAAO;AAAA,EACP,eAAA6R,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,CAAC5I,EAAQ,QAAO;AAGpB,QAAM6I,IAAc;AAAA,IAClB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,MAAM;AAAA,EAAA;AAGR,SACE,gBAAArR,EAAC,OAAA,EAAI,WAAU,2DAEb,UAAA;AAAA,IAAA,gBAAAN;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,SAAS,MAAMoL,EAAA;AAAA,MAAQ;AAAA,IAAA;AAAA,IAIzB,gBAAA9K;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,iDACTqR,EAAYvS,CAAI,KAAKuS,EAAY,EACnC;AAAA,QAGA,UAAA;AAAA,UAAA,gBAAArR,EAAC,OAAA,EAAI,WAAU,qGACb,UAAA;AAAA,YAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,2BACZ,UAAA;AAAA,cAAA0Q,KAAQ,gBAAAhR,EAAC,UAAM,UAAAgR,EAAA,CAAK;AAAA,cACrB,gBAAAhR,EAAC,MAAA,EAAG,WAAU,qDACX,UAAAqJ,EAAA,CACH;AAAA,YAAA,GACF;AAAA,YAEA,gBAAArJ;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,SAAS,MAAMoL,EAAA;AAAA,gBACf,WAAU;AAAA,gBAEV,UAAA,gBAAApL,EAACkJ,IAAA,EAAE,WAAU,UAAA,CAAU;AAAA,cAAA;AAAA,YAAA;AAAA,UACzB,GACF;AAAA,UAGA,gBAAAlJ,EAAC,OAAA,EAAI,WAAU,8BAA8B,UAAAV,EAAA,CAAS;AAAA,UAiDrD2R,EAAc,SAAS,KACtB,gBAAAjR,EAAC,OAAA,EAAI,WAAU,0FACZ,UAAAiR,EAAc,IAAI,CAACW,MAClB,gBAAA5R;AAAA,YAACjB;AAAA,YAAA;AAAA,cACC,SAAS,CAACyE,MAAM;AACd,gBAAIoO,EAAI,QAAQ,WACdN,EAAa9N,CAAC,IAEdiO;AAAA,kBACE,MAAA;;AAAM,4BAAA5R,IAAA+R,KAAA,gBAAAA,EAAK,YAAL,gBAAA/R,EAAA,KAAA+R,GAAepO,GAAGkO;AAAA;AAAA,kBACxB,CAACG,MAASzG,KAAA,gBAAAA,EAAUyG;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,gBAAAlR,EAAC,OAAA,EAAI,WAAU,qBACb,UAAA;AAAA,gBAAA,gBAAAN,EAAC,OAAA,EAAI,WAAU,4FAAA,CAA4F;AAAA,gBAC1G4R,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,GCjJME,KAAO,CAAC;AAAA,EACZ,QAAAzG;AAAA,EACA,UAAA0G;AAAA,EACA,aAAAC,IAAc,CAAA;AAAA,EACd,iBAAAC;AAAA,EACA,MAAA7L,IAAO;AACT,MAAM;AACJ,QAAM,EAAE,WAAA8L,IAAY,2BAA2B,YAAAC,IAAa,CAAA,EAAC,IAC3D9G,KAAU,CAAA,GAEN,CAACjK,GAAUgR,CAAW,IAAI5Q,EAASwQ,CAAW,GAE9C,CAACK,GAAaC,CAAc,IAAI9Q,EAAS,EAAI,GAE7C+Q,IAAmB,YAAY;AACnC,IAAAN,KAAA,QAAAA,EAAkBD,GACf,KAAK,CAACH,MAAS;AACd,MAAAO,EAAYP,EAAK,IAAI;AAAA,IACvB,GACC,MAAM,CAAClK,MAAU;AAChB,MAAA6K,GAAgB7K,EAAM,SAAS,EAAE,SAAS,SAAS;AAAA,IACrD,GACC,QAAQ,MAAM;AACb,MAAA2K,EAAe,EAAK;AAAA,IACtB;AAAA,EACJ;AAEA,EAAAnQ,EAAU,MAAM;AACd,IAAI8P,aAA2B,WAC7BM,EAAA,KAEAH,EAAYJ,CAAW,GACvBM,EAAe,EAAK;AAAA,EAExB,GAAG,CAAA,CAAE;AAEL,QAAM7H,IAAe,CAAC5L,GAAK6B,MAAU;AACnC,IAAA0R,EAAY,CAACzL,OAAU,EAAE,GAAGA,GAAM,CAAC9H,CAAG,GAAG6B,EAAA,EAAQ;AAAA,EACnD,GAEM+R,IAAe,CAACjP,MAAM;AAC1B,IAAAA,EAAE,eAAA;AACF,UAAMkP,IAAOlP,EAAE;AAEf,QAAI,CAACkP,EAAK,iBAAiB;AACzB,MAAAA,EAAK,eAAA;AACL;AAAA,IACF;AAEA,IAAAX,EAAS3Q,CAAQ;AAAA,EACnB;AAEA,SAAIiR;AAAA;AAAA,IAGA,gBAAArS,EAAC,OAAA,EAAI,WAAU,yCACb,UAAA,gBAAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW;AAAA,QACX,OAAO;AAAA,UACL,gBAAgB;AAAA,QAAA;AAAA,MAClB;AAAA,IAAA,EACF,CACF;AAAA,MAKF,gBAAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,IACEoG,KAAQ,QAAQ,YAAYA,KAAQ,SAAS,aAAa;AAAA,MAE5D,UAAUqM;AAAA,MACV,WAAWP;AAAA,MACX,YAAY;AAAA,MAEX,UAAAC,EAAW,IAAI,CAAC5L,MACf,gBAAAvG,EAAAK,GAAA,EACE,UAAA,gBAAAL;AAAA,QAACwK;AAAA,QAAA;AAAA,UAEC,OAAAjE;AAAA,UACA,UAAAnF;AAAA,UACA,cAAAqJ;AAAA,QAAA;AAAA,QAHKlE,EAAM;AAAA,MAAA,GAKf,CACD;AAAA,IAAA;AAAA,EAAA;AAGP;ACrFA,SAAwBoM,GAAQ,EAAE,MAAAtU,GAAM,QAAAgN,GAAQ,iBAAA4G,KAAmB;AACjE,QAAM,EAAE,QAAAW,GAAQ,gBAAAC,EAAA,IAAmBxH,GAE7B,CAACyH,GAAaC,CAAc,IAAIvR,EAASnD,CAAI,GAE7C,CAACgU,GAAaC,CAAc,IAAI9Q,EAAS,EAAI,GAE7C+Q,IAAmB,YAAY;AACnC,IAAAN,KAAA,QAAAA,EAAkB5T,GACf,KAAK,CAACwT,MAAS;AACd,MAAAkB,EAAelB,EAAK,IAAI;AAAA,IAC1B,GACC,MAAM,CAAClK,MAAU;AAChB,MAAA6K,GAAgB7K,EAAM,SAAS,EAAE,SAAS,SAAS;AAAA,IACrD,GACC,QAAQ,MAAM;AACb,MAAA2K,EAAe,EAAK;AAAA,IACtB;AAAA,EACJ;AAWA,SATAnQ,EAAU,MAAM;AACd,IAAI8P,aAA2B,WAC7BM,EAAA,KAEAQ,EAAe1U,CAAI,GACnBiU,EAAe,EAAK;AAAA,EAExB,GAAG,CAAA,CAAE,GAEDD;AAAA;AAAA,IAGA,gBAAArS,EAAC,OAAA,EAAI,WAAU,yCACb,UAAA,gBAAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW;AAAA,QACX,OAAO;AAAA,UACL,gBAAgB;AAAA,QAAA;AAAA,MAClB;AAAA,IAAA,EACF,CACF;AAAA,MAKF,gBAAAA,EAAAK,GAAA,EACE,UAAA,gBAAAL,EAAC,OAAA,EAAI,WAAW,2BAA2B6S,KAAkB,EAAE,IAC5D,UAAAD,EAAO,IAAI,CAACxJ,MAETA,EAAI,mBACJ,OAAOA,EAAI,mBAAoB,cAG3B,CADiBA,EAAI,gBAAgB0J,CAAW,IAE3C,OAGJ1J,EAAI,QAAQ,UACjB,gBAAApJ,EAACmJ,MAAS,KAAAC,GAAU,MAAM0J,EAAA,CAAa,IACrC1J,EAAI,QAAQ,cACd,gBAAApJ,EAAC4J,IAAA,EAAU,KAAAR,GAAU,MAAM0J,EAAA,CAAa,IAExC,gBAAA9S,EAACmK,IAAA,EAAU,KAAAf,GAAU,MAAM0J,EAAA,CAAa,CAE3C,GACH,GACF;AAEJ;AChEA,MAAME,KAAW,CAAC,EAAE,QAAA3H,QAAa;;AAC/B,QAAM;AAAA,IACJ,OAAAhC;AAAA,IACA,WAAA4J,IAAY,YAAY;AAAA,IAAC;AAAA,IACzB,iBAAAhB,IAAkB;AAAA,IAClB,cAAAiB,IAAe;AAAA,IACf,aAAAC,IAAc,CAAA;AAAA,IACd,aAAAC,IAAc,CAAA;AAAA,IACd,cAAAtG;AAAA,EAAA,IACEzB,GAEE,CAACkB,GAAS8G,CAAU,IAAI7R,EAAS,EAAI,GACrC,CAAC8R,GAAaC,CAAc,IAAI/R,EAAS,EAAK,GAE9C,CAACgS,GAAaC,CAAc,IAAIjS,EAAS,CAAA,CAAE,GAC3C,CAACkS,GAAgBC,CAAiB,IAAInS,EAAS,IAAI,GACnD,CAACoS,GAA0BhH,CAA2B,IAAIpL,EAAS;AAAA,IACvE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,cAAc;AAAA,EAAA,CACf,GACK,CAACqS,GAAYC,CAAa,IAAItS,EAAS,CAAA,CAAE,GACzC,CAACuS,GAAkBC,CAAmB,IAAIxS,EAAS,EAAK,GAExD,CAACyS,GAAS/H,CAAU,IAAI1K,EAAS,EAAK,GACtC,CAAC0S,GAAUC,CAAW,IAAI3S,EAAS,EAAK,GACxC,CAAC4S,GAAYC,CAAa,IAAI7S,EAAS,EAAK,GAC5C,CAAC8S,GAAUC,CAAW,IAAI/S,EAAS,EAAK,GACxC,CAACkQ,GAAc8C,CAAe,IAAIhT,EAAS,IAAI,GAE/CiT,IAAmB,CAAC/F,GAAQ/P,MAAS;AACzC,IAAI+P,MAAW,UACb8F,EAAgB7V,CAAI,GACpBwV,EAAY,EAAI,KACPzF,MAAW,UACpB8F,EAAgB7V,CAAI,GACpB4V,EAAY,EAAI,KACP7F,MAAW,aACpB8F,EAAgB7V,CAAI,GACpB0V,EAAc,EAAI;AAAA,EAEtB,GAEMK,IAAgB,OACpBhG,GACAiG,GACAC,IAAkB,IAClBC,IAAgB,OACb;AACH,IAAAtB,EAAe,EAAI;AAEnB,QAAI;AACF,YAAM1B,IAAO,OAAMnD,KAAA,gBAAAA;AACnB,OAAIkG,KAAmB/C,EAAK,YAC1BW,GAAgBoC,KAAmB/C,EAAK,SAAS;AAAA,QAC/C,SAAS;AAAA,MAAA,CACV,GAEH8C,KAAA,QAAAA,EAAY9C;AAAA,IACd,SAASlK,GAAO;AACd,OAAIkN,KAAiBlN,EAAM,YACzB6K,GAAgBqC,KAAiBlN,EAAM,SAAS,EAAE,SAAS,SAAS;AAAA,IAExE,UAAA;AACE,MAAA4L,EAAe,EAAK;AAAA,IACtB;AAAA,EACF,GAEMuB,IAAkB,CAACjD,MAAS;AAChC,QAAIkD,IAASlD,EAAK;AAClB,IAAIqB,KACFO,EAAe,CAAC9M,MAAS,CAACoO,GAAQ,GAAGpO,CAAI,CAAC,GAC1CgN,EAAkB,CAAChN,OAAU;AAAA,MAC3B,GAAGA;AAAA,MACH,cAAc;AAAA,IAAA,EACd,MAEFiG,EAA4B,CAACjG,OAAU;AAAA,MACrC,GAAGA;AAAA,MACH,cAAc;AAAA,IAAA,EACd,GACEiN,EAAyB,gBAAgB,KAC3CoB,GAAA,IAGJ9I,EAAW,EAAK;AAAA,EAClB,GAEM+I,IAAmB,CAACpD,MAAS;AACjC,QAAIqD,IAAarD,EAAK,WAClBsD,IAAYtD,EAAK;AACrB,IAAIqB,IACFO;AAAA,MAAe,CAAC9M,MACdA,EAAK;AAAA,QAAI,CAAChI,MACRA,EAAK,OAAOwW,EAAU,KAAK,EAAE,GAAGxW,GAAM,GAAGuW,MAAevW;AAAA,MAAA;AAAA,IAC1D,IAGFqW,GAAA,GAEFb,EAAY,EAAK;AAAA,EACnB,GAEMiB,IAAqB,CAACvD,MAAS;AACnC,QAAI,CAACA,GAAM;AACT,MAAAwC,EAAc,EAAK,GACnBG,EAAgB,IAAI;AACpB;AAAA,IACF;AAEA,IAAItB,IACFO;AAAA,MAAe,CAAC9M,MACdA,EAAK,OAAO,CAAChI,MAASA,EAAK,OAAOkT,EAAK,aAAa,EAAE;AAAA,IAAA,IAItD2B,EAAY,UAAU,KACtBI,EAAyB,eAAe,IAExChH,EAA4B,CAACjG,OAAU;AAAA,MACrC,GAAGA;AAAA,MACH,cAAcA,EAAK,eAAe;AAAA,IAAA,EAClC,IAEFqO,GAAA,GAGJX,EAAc,EAAK,GACnBG,EAAgB,IAAI;AAAA,EACtB,GAEMa,IAAsB,CAACjU,MAC3BsT;AAAA,IACE,MAAA;;AAAM,cAAAY,KAAAzV,IAAAuT,KAAA,gBAAAA,EAAa,aAAb,gBAAAvT,EAAuB,iBAAvB,gBAAAyV,EAAA,KAAAzV,GAAsCuB;AAAA;AAAA,IAC5C0T;AAAA,EAAA,GAGES,KAAuB,CAACnU,MAC5BsT;AAAA,IACE,MAAA;;AAAM,cAAAY,KAAAzV,IAAAuT,KAAA,gBAAAA,EAAa,cAAb,gBAAAvT,EAAwB,iBAAxB,gBAAAyV,EAAA,KAAAzV,GAAuCuB,GAAUsQ;AAAA;AAAA,IACvDuD;AAAA,EAAA,GASED,KAAmB,YAAY;AACnC,IAAA3B,EAAW,EAAI,GAEfJ,KAAA,QAAAA,EAAY,EAAE,GAAGW,GAA0B,GAAGC,KAC3C,KAAK,CAAChC,MAAS;AACd,MAAA4B,EAAe5B,EAAK,IAAI,GACxB8B,EAAkB9B,EAAK,UAAU;AAAA,IACnC,GACC,MAAM,CAAClK,MAAU;AAChB,MAAA6K,GAAgB7K,EAAM,SAAS,EAAE,SAAS,SAAS;AAAA,IACrD,GACC,QAAQ,MAAM;AACb,MAAA0L,EAAW,EAAK;AAAA,IAClB;AAAA,EACJ,GAEMmC,KAAmB,CAACnX,MAAS;;AACjC,IAAAyV,EAAc,CAACnN,OAAU;AAAA,MACvB,GAAGtI;AAAA,IAAA,EACH,IACEwB,IAAAsT,KAAA,gBAAAA,EAAa,WAAb,QAAAtT,EAAqB,wBACvBmU,EAAoB,CAACrN,MAAS,CAACA,CAAI;AAAA,EAEvC,GAEM8O,KAAyB,CAACpX,GAAMkN,MAC7BlN,EAAK;AAAA,IAAO,CAACM,MAClB,OAAO,QAAQ4M,CAAO,EAAE,MAAM,CAAC,CAAC1M,GAAK6B,CAAK,MAAM/B,EAAKE,CAAG,MAAM6B,CAAK;AAAA,EAAA,GAIjEgN,KAAeC,GAAQ,MAAM;;AACjC,YAAI9N,IAAAsT,KAAA,gBAAAA,EAAa,WAAb,QAAAtT,EAAqB,uBAA6B2T,IAC/CiC,GAAuBjC,GAAaK,CAAU;AAAA,EACvD,GAAG,CAACL,GAAaK,CAAU,CAAC;AAE5B,SAAA1R,EAAU,MAAM;AACd,IAAA6S,GAAA;AAAA,EACF,GAAG;AAAA,IACDpB,EAAyB;AAAA,IACzBA,EAAyB;AAAA,IACzBA,EAAyB;AAAA,IACzBG;AAAA,EAAA,CACD,qBAGE,OAAA,EAEC,UAAA;AAAA,IAAA,gBAAA/T;AAAA,MAACiM;AAAA,MAAA;AAAA,QACC,OAAA5C;AAAA,QACA,YAAA6C;AAAA,QACA,aAAab,EAAO;AAAA,QACpB,YAAYA,EAAO;AAAA,QACnB,eAAe,CAAC,CAAC+H,EAAY;AAAA,QAC7B,QAAQ;AAAA,UACN,GAAGD;AAAA,UACH,YAAY;AAAA,YACV,GAAGA,EAAY;AAAA,YACf,GAAGO;AAAA,UAAA;AAAA,UAEL,MAAMhG;AAAA,UACN,6BAAAd;AAAA,UACA,cAAc6H;AAAA,UACd,cAAA3H;AAAA,UACA,eAAe0I;AAAA,UACf,SAAAjJ;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,IAIF,gBAAAvM;AAAA,MAAC+Q;AAAA,MAAA;AAAA,QACC,QAAQkD;AAAA,QACR,SAAS,MAAM;AACb,UAAKX,KACHpH,EAAW,EAAK;AAAA,QAEpB;AAAA,QACA,OAAMrM,KAAAuT,EAAY,aAAZ,gBAAAvT,GAAsB;AAAA,QAC5B,SAAOyV,KAAAlC,EAAY,aAAZ,gBAAAkC,GAAsB,UAAS;AAAA,QACtC,QAAMI,KAAAtC,EAAY,aAAZ,gBAAAsC,GAAsB,SAAQ;AAAA,QACpC,cAAc,MAAA;;AAAM,kBAAA7V,IAAA,SAAS,cAAc,UAAU,MAAjC,gBAAAA,EAAoC;AAAA;AAAA,QACxD,YAAYyT;AAAA,QACZ,iBAAeqC,KAAAvC,KAAA,gBAAAA,EAAa,aAAb,gBAAAuC,GAAuB,kBAAiB,CAAA;AAAA,QAEvD,UAAA,gBAAA3V;AAAA,UAAC8R;AAAA,UAAA;AAAA,YACC,SAAQsB,KAAA,gBAAAA,EAAa,aAAY,CAAA;AAAA,YACjC,UAAUiC;AAAA,YACV,aAAa,CAAA;AAAA,YACb,MAAK;AAAA,YACL,SAAS/B;AAAA,UAAA;AAAA,QAAA;AAAA,MACX;AAAA,IAAA;AAAA,IAIF,gBAAAtT;AAAA,MAAC+Q;AAAA,MAAA;AAAA,QACC,QAAQmD;AAAA,QACR,SAAS,MAAM;AACb,UAAKZ,KACHa,EAAY,EAAK;AAAA,QAErB;AAAA,QACA,OAAMyB,KAAAxC,EAAY,cAAZ,gBAAAwC,GAAuB;AAAA,QAC7B,SAAOC,KAAAzC,EAAY,cAAZ,gBAAAyC,GAAuB,UAAS;AAAA,QACvC,QAAMC,KAAA1C,EAAY,cAAZ,gBAAA0C,GAAuB,SAAQ;AAAA,QACrC,cAAc,MAAA;;AACZ,kBAAAjW,IAAA,SAAS,cAAc,WAAW,MAAlC,gBAAAA,EAAqC;AAAA;AAAA,QAEvC,iBAAekW,KAAA3C,KAAA,gBAAAA,EAAa,cAAb,gBAAA2C,GAAwB,kBAAiB,CAAA;AAAA,QACxD,YAAYzC;AAAA,QAEZ,UAAA,gBAAAtT;AAAA,UAAC8R;AAAA,UAAA;AAAA,YACC,QAAQsB,EAAY,aAAa,CAAA;AAAA,YACjC,UAAUmC;AAAA,YACV,aAAa7D;AAAA,YACb,MAAK;AAAA,YACL,SAAS4B;AAAA,YACT,iBAAArB;AAAA,UAAA;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,IAIDmC,KACC,gBAAApU;AAAA,MAAC+Q;AAAA,MAAA;AAAA,QACC,QAAQqD;AAAA,QACR,SAAS,CAACvC,MAAS;AACjB,UAAAuD,EAAmBvD,CAAI;AAAA,QACzB;AAAA,QACA,QACEmE,KAAA5C,EAAY,gBAAZ,gBAAA4C,GAAyB,2BACtB9P,IAAA,EAAK,MAAK,mBAAkB,WAAU,uBAAA,CAAuB;AAAA,QAGlE,SAAO+P,KAAA7C,EAAY,gBAAZ,gBAAA6C,GAAyB,UAAS;AAAA,QACzC,QAAMC,KAAA9C,EAAY,gBAAZ,gBAAA8C,GAAyB,SAAQ;AAAA,QACvC,SAAS5C;AAAA,QACT,iBAAe6C,KAAA/C,KAAA,gBAAAA,EAAa,gBAAb,gBAAA+C,GAA0B,kBAAiB,CAAA;AAAA,QAC1D,iBAAiBzB;AAAA,QACjB,cAAAhD;AAAA,QAEA,UAAA,gBAAA1R,EAAC,OAAA,EAAI,WAAU,oCACb,4BAAC,OAAA,EACC,UAAA;AAAA,UAAA,gBAAAA,EAAC,OAAE,WAAU,yCACV,YAAAoW,KAAAhD,EAAY,gBAAZ,gBAAAgD,GAAyB,gBACxB,8CACJ;AAAA,YACCC,KAAAjD,EAAY,gBAAZ,gBAAAiD,GAAyB,iBACxB,gBAAArW,EAAC,KAAA,EAAE,WAAU,uDACV,UAAA0R,GAAa4E,KAAAlD,EAAY,gBAAZ,gBAAAkD,GAAyB,YAAY,EAAA,CACrD;AAAA,QAAA,EAAA,CAEJ,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,IAKHlD,EAAY,aACX,gBAAApT;AAAA,MAAC+Q;AAAA,MAAA;AAAA,QACC,QAAQuD;AAAA,QACR,SAAS,MAAM;AACb,UAAAC,EAAY,EAAK,GACjBC,EAAgB,IAAI;AAAA,QACtB;AAAA,QACA,OAAM+B,KAAAnD,EAAY,cAAZ,gBAAAmD,GAAuB;AAAA,QAC7B,SAAOC,KAAApD,EAAY,cAAZ,gBAAAoD,GAAuB,UAAS;AAAA,QACvC,QAAMC,IAAArD,EAAY,cAAZ,gBAAAqD,EAAuB,SAAQ;AAAA,QACrC,cAAcrD,KAAA,gBAAAA,EAAa,UAAU;AAAA,QAEpC,WAAAsD,IAAAtD,EAAY,cAAZ,QAAAsD,EAAuB,YACtB,gBAAA1W,EAACoT,EAAY,UAAU,WAAtB,EAAgC,MAAM1B,EAAA,CAAc,IAErD,gBAAA1R;AAAA,UAAC2S;AAAA,UAAA;AAAA,YACC,MAAMjB;AAAA,YACN,iBAAAO;AAAA,YACA,QAAQmB,EAAY,aAAa,CAAA;AAAA,UAAC;AAAA,QAAA;AAAA,MACpC;AAAA,IAAA;AAAA,EAEJ,GAEJ;AAEJ,GAEMuD,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;AAED5D,GAAS,YAAY;AAAA,EACnB,QAAQ4D,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;AC/eA,SAASE,GAAW,EAAE,UAAA5X,KAAY;AAChC,SAAA6X,GAAA,GACO7X;AACT;AAEA,SAAwB8X,GAAyB,EAAE,UAAA9X,KAAY;AAC7D,MAAI;AACF,WAAO,gBAAAU,EAACkX,MAAY,UAAA5X,GAAS;AAAA,EAC/B,QAAgB;AACd,WACE,gBAAAU;AAAA,MAACqX;AAAA,MAAA;AAAA,QACC,cAAc;AAAA,UACZ,UAAU;AAAA,UACV,YAAY;AAAA,QAAA;AAAA,QAEd,QAAQ,CAACC,MACP,gBAAAtX;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,SAAS,MAAM;AACb,qBAAO;AAAA,gBACL,IAAI,YAAY,iBAAiB,EAAE,QAAQsX,GAAa;AAAA,cAAA;AAAA,YAE5D;AAAA,YACA,WAAU;AAAA,YAEV,UAAA,gBAAAtX,EAACkJ,IAAA,EAAE,WAAU,UAAA,CAAU;AAAA,UAAA;AAAA,QAAA;AAAA,QAG3B,UAAU;AAAA,QACV,kBAAkB;AAAA,QAEjB,UAAA5J;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AACF;AClCA,MAAMiY,KAAe,MAAM;AAEzB,MADI,OAAO,WAAa,OACpB,SAAS,eAAe,iCAAiC,EAAG;AAEhE,QAAMC,IAAQ,SAAS,cAAc,OAAO;AAC5C,EAAAA,EAAM,KAAK,mCACXA,EAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAgBpB,SAAS,KAAK,YAAYA,CAAK;AACjC;AAEA,SAAwBC,GAAKlY,GAAO;AAClC,SAAA4C,EAAU,MAAM;AACd,IAAAoV,GAAA;AAAA,EACF,GAAG,CAAA,CAAE,qBAGFH,IAAA,EACC,UAAA,gBAAApX,EAACgT,MAAS,QAAQzT,EAAM,QAAQ,EAAA,CAClC;AAEJ;"}
|