react-admin-crud-manager 1.0.16 → 1.0.17
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 +9 -9
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.es.js +153 -149
- package/dist/index.es.js.map +1 -1
- 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/Form/components/RenderFields.jsx","../src/components/Filter/FilterDrawer.jsx","../src/components/Chip/Chip.jsx","../src/components/Table/components/TableSkeleton.jsx","../src/components/Table/components/ImagePreview.jsx","../src/components/Table/Table.jsx","../src/components/Modal/Modal.jsx","../src/components/Form/Form.jsx","../src/components/Details/Details.jsx","../src/components/CrudPage.jsx","../src/index.jsx"],"sourcesContent":["// ======= Format Date : Jan 15, 2024 =======\r\n\r\nexport const formatDate = (dateString, format = \"DD MMM YYYY\") => {\r\n if (!dateString) return \"N/A\";\r\n\r\n const date = new Date(dateString);\r\n if (isNaN(date)) return \"Invalid Date\";\r\n\r\n const pad = (n) => String(n).padStart(2, \"0\");\r\n\r\n const map = {\r\n YYYY: date.getFullYear(),\r\n YY: String(date.getFullYear()).slice(-2),\r\n\r\n MMMM: date.toLocaleString(\"en-US\", { month: \"long\" }),\r\n MMM: date.toLocaleString(\"en-US\", { month: \"short\" }),\r\n MM: pad(date.getMonth() + 1),\r\n M: date.getMonth() + 1,\r\n\r\n DD: pad(date.getDate()),\r\n D: date.getDate(),\r\n\r\n dddd: date.toLocaleString(\"en-US\", { weekday: \"long\" }),\r\n ddd: date.toLocaleString(\"en-US\", { weekday: \"short\" }),\r\n\r\n HH: pad(date.getHours()),\r\n hh: pad(date.getHours() % 12 || 12),\r\n\r\n mm: pad(date.getMinutes()),\r\n ss: pad(date.getSeconds()),\r\n\r\n A: date.getHours() >= 12 ? \"PM\" : \"AM\",\r\n };\r\n\r\n return format.replace(\r\n /YYYY|YY|MMMM|MMM|MM|M|DD|D|dddd|ddd|HH|hh|mm|ss|A/g,\r\n (token) => map[token],\r\n );\r\n};\r\n\r\n// =========== Local Search function ===========\r\nexport const searchLocalData = (data, searchTerm, searchKeys = []) => {\r\n if (!searchTerm?.trim()) return data;\r\n\r\n const lowerSearchTerm = searchTerm.toLowerCase();\r\n\r\n const extractValues = (obj) => {\r\n if (obj == null) return [];\r\n if (typeof obj === \"object\") {\r\n return Object.values(obj).flatMap(extractValues);\r\n }\r\n return [String(obj)];\r\n };\r\n\r\n return data.filter((item) => {\r\n let valuesToSearch = [];\r\n\r\n // ✅ If specific keys are provided → search only in those keys\r\n if (searchKeys.length > 0) {\r\n searchKeys.forEach((key) => {\r\n if (item[key] !== undefined) {\r\n valuesToSearch.push(...extractValues(item[key]));\r\n }\r\n });\r\n } else {\r\n // ✅ Otherwise → search in entire object\r\n valuesToSearch = extractValues(item);\r\n }\r\n\r\n return valuesToSearch.some((val) =>\r\n val.toLowerCase().includes(lowerSearchTerm),\r\n );\r\n });\r\n};\r\n","import React from \"react\";\r\n\r\nconst Button = React.forwardRef(\r\n (\r\n {\r\n className = \"\",\r\n variant = \"contained\",\r\n color = \"default\",\r\n size = \"default\",\r\n fullWidth = false,\r\n children,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const baseStyles =\r\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\";\r\n\r\n const sizes = {\r\n sm: \"h-8 px-3 rounded-md text-sm\",\r\n md: \"h-9 px-4 rounded-md text-sm\",\r\n lg: \"h-11 px-6 rounded-md text-base\",\r\n xl: \"h-12 px-8 rounded-lg text-lg\",\r\n default: \"h-9 px-4 rounded-md text-sm\",\r\n };\r\n\r\n const colorVariants = {\r\n primary: {\r\n contained:\r\n \"bg-primary text-white hover:bg-primary-600 focus:ring-primary-500 shadow-sm\",\r\n outlined:\r\n \"border border-primary bg-transparent text-primary hover:bg-primary-50 focus:ring-primary-500\",\r\n text: \"bg-transparent text-primary hover:bg-primary-50 focus:ring-primary-500\",\r\n },\r\n success: {\r\n contained:\r\n \"bg-green-600 text-white hover:bg-green-700 focus:ring-green-500 shadow-sm\",\r\n outlined:\r\n \"border border-green-600 bg-transparent text-green-600 hover:bg-green-50 focus:ring-green-500\",\r\n text: \"bg-transparent text-green-600 hover:bg-green-50 focus:ring-green-500\",\r\n },\r\n error: {\r\n contained:\r\n \"bg-red-600 text-white hover:bg-red-700 focus:ring-red-500 shadow-sm\",\r\n outlined:\r\n \"border border-red-600 bg-transparent text-red-600 hover:bg-red-50 focus:ring-red-500\",\r\n text: \"bg-transparent text-red-600 hover:bg-red-50 focus:ring-red-500\",\r\n },\r\n default: {\r\n contained:\r\n \"border bg-gray-200 text-gray-800 hover:bg-gray-300 focus:ring-gray-300 shadow-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-100 dark:hover:bg-gray-600 dark:focus:ring-gray-600\",\r\n outlined:\r\n \"border border-gray-300 bg-transparent text-gray-700 hover:bg-gray-100 focus:ring-gray-300 dark:border-gray-600 dark:text-gray-200 dark:hover:bg-gray-700 dark:focus:ring-gray-500\",\r\n text: \"bg-transparent text-gray-700 hover:bg-gray-100 focus:ring-gray-300 dark:text-gray-200 dark:hover:bg-gray-700 dark:focus:ring-gray-500\",\r\n },\r\n };\r\n\r\n const colorStyles =\r\n colorVariants[color]?.[variant] || colorVariants.default.contained;\r\n const sizeStyles = sizes[size];\r\n\r\n const combinedClassName = `\r\n ${baseStyles} \r\n ${colorStyles} \r\n ${sizeStyles} \r\n ${fullWidth ? \"w-full\" : \"\"} \r\n ${className}\r\n `.trim();\r\n\r\n return (\r\n <button\r\n ref={ref}\r\n type={props.type || \"button\"}\r\n className={combinedClassName}\r\n {...props}\r\n >\r\n {children}\r\n </button>\r\n );\r\n },\r\n);\r\n\r\nButton.displayName = \"Button\";\r\n\r\nexport default Button;\r\n","import React from \"react\";\r\n\r\nexport default function InputLabel({ label, required = false }) {\r\n return (\r\n <>\r\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\">\r\n {label}\r\n {required && <span className=\"ml-1\">*</span>}\r\n </label>\r\n </>\r\n );\r\n}\r\n","import React, { useState, useEffect, useRef } from \"react\";\r\nimport { ChevronDown, Search, Check } from \"lucide-react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nconst Select = ({\r\n options = [],\r\n value = \"\",\r\n 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}) => {\r\n const [open, setOpen] = useState(false);\r\n const [searchTerm, setSearchTerm] = useState(\"\");\r\n const [showAboveState, setShowAboveState] = useState(true);\r\n const dropdownRef = useRef(null);\r\n const searchInputRef = useRef(null);\r\n\r\n 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 const normalizedValue = multiple\r\n ? (initialVal || []).map(normalize)\r\n : normalize(initialVal);\r\n\r\n const filteredOptions = options.filter((option) =>\r\n option.label.toLowerCase().includes(searchTerm.toLowerCase()),\r\n );\r\n\r\n const isSelected = (optionValue) => {\r\n const normalized = normalize(optionValue);\r\n if (multiple) {\r\n return normalizedValue.includes(normalized);\r\n }\r\n return normalized === normalizedValue;\r\n };\r\n\r\n useEffect(() => {\r\n const handleClickOutside = (event) => {\r\n if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {\r\n setOpen(false);\r\n setSearchTerm(\"\");\r\n }\r\n };\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (open && dropdownRef.current) {\r\n const rect = dropdownRef.current.getBoundingClientRect();\r\n const viewportHeight = window.innerHeight;\r\n const spaceBelow = viewportHeight - rect.bottom;\r\n const dropdownHeight = 200;\r\n setShowAboveState(spaceBelow < dropdownHeight);\r\n }\r\n }, [open]);\r\n\r\n useEffect(() => {\r\n if (open && searchInputRef.current) {\r\n searchInputRef.current.focus();\r\n }\r\n }, [open]);\r\n\r\n const handleOptionClick = (optionValue) => {\r\n let finalValue = optionValue;\r\n if (optionValue === \"true\") finalValue = true;\r\n else if (optionValue === \"false\") finalValue = false;\r\n\r\n if (multiple) {\r\n const exists = normalizedValue.includes(normalize(optionValue));\r\n\r\n let newValues;\r\n if (exists) {\r\n newValues = value.filter(\r\n (v) => normalize(v) !== normalize(optionValue),\r\n );\r\n } else {\r\n newValues = [...(value || []), finalValue];\r\n }\r\n\r\n onChange(newValues);\r\n } else {\r\n onChange(finalValue);\r\n setOpen(false);\r\n }\r\n\r\n setSearchTerm(\"\");\r\n };\r\n\r\n const selectedLabels = multiple\r\n ? options\r\n .filter((opt) => isSelected(opt.value))\r\n .map((opt) => opt.label)\r\n .join(\", \")\r\n : options.find((opt) => isSelected(opt.value))?.label;\r\n\r\n return (\r\n <div key={name} className={parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n\r\n <div className={`relative ${className}`} ref={dropdownRef}>\r\n <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 = ({\r\n value = true,\r\n onChange,\r\n text,\r\n options = [],\r\n label,\r\n required,\r\n name = \"\",\r\n disabled = false,\r\n parentClass = \"\",\r\n}) => {\r\n const radioOptions =\r\n options.length > 0\r\n ? options\r\n : [\r\n { label: \"Active\", value: true },\r\n { label: \"Inactive\", value: false },\r\n ];\r\n\r\n return (\r\n <>\r\n <div key={name} className={parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n <div className=\"flex items-center justify-between h-10 gap-4 bg-gray-100 dark:bg-gray-700 px-3 rounded-md border border-gray-100 dark:border-gray-600\">\r\n {/* Left Text */}\r\n {text && (\r\n <p className=\"text-xs text-gray-600 dark:text-gray-400 flex-shrink overflow-hidden text-ellipsis whitespace-nowrap max-w-[200px]\">\r\n {text}\r\n </p>\r\n )}\r\n\r\n {/* Radio Buttons */}\r\n <div className=\"flex items-center gap-6\">\r\n {radioOptions.map((opt, idx) => (\r\n <label\r\n key={idx}\r\n className=\"flex items-center gap-2 cursor-pointer select-none\"\r\n >\r\n <input\r\n type=\"radio\"\r\n name=\"switch-field\"\r\n required={required && idx === 0}\r\n value={opt.value}\r\n disabled={disabled}\r\n checked={value === opt.value}\r\n onChange={() => onChange(opt.value)}\r\n className=\"w-4 h-4 border-gray-300 cursor-pointer\"\r\n />\r\n <span className=\"text-sm text-gray-700 dark:text-white\">\r\n {opt.label}\r\n </span>\r\n </label>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default Switch;\r\n","export const countries = [\r\n { label: \"Afghanistan\", code: \"AF\", phone: \"93\" },\r\n { label: \"Aland Islands\", code: \"AX\", phone: \"358\" },\r\n { label: \"Albania\", code: \"AL\", phone: \"355\" },\r\n { label: \"Algeria\", code: \"DZ\", phone: \"213\" },\r\n { label: \"American Samoa\", code: \"AS\", phone: \"1\" },\r\n { label: \"Andorra\", code: \"AD\", phone: \"376\" },\r\n { label: \"Angola\", code: \"AO\", phone: \"244\" },\r\n { label: \"Anguilla\", code: \"AI\", phone: \"1\" },\r\n { label: \"Antarctica\", code: \"AQ\", phone: \"672\" },\r\n { label: \"Antigua and Barbuda\", code: \"AG\", phone: \"1\" },\r\n { label: \"Argentina\", code: \"AR\", phone: \"54\" },\r\n { label: \"Armenia\", code: \"AM\", phone: \"374\" },\r\n { label: \"Aruba\", code: \"AW\", phone: \"297\" },\r\n { label: \"Australia\", code: \"AU\", phone: \"61\" },\r\n { label: \"Austria\", code: \"AT\", phone: \"43\" },\r\n { label: \"Azerbaijan\", code: \"AZ\", phone: \"994\" },\r\n { label: \"Bahrain\", code: \"BH\", phone: \"973\" },\r\n { label: \"Bangladesh\", code: \"BD\", phone: \"880\" },\r\n { label: \"Barbados\", code: \"BB\", phone: \"1\" },\r\n { label: \"Belarus\", code: \"BY\", phone: \"375\" },\r\n { label: \"Belgium\", code: \"BE\", phone: \"32\" },\r\n { label: \"Belize\", code: \"BZ\", phone: \"501\" },\r\n { label: \"Benin\", code: \"BJ\", phone: \"229\" },\r\n { label: \"Bermuda\", code: \"BM\", phone: \"1\" },\r\n { label: \"Bhutan\", code: \"BT\", phone: \"975\" },\r\n { label: \"Bolivia\", code: \"BO\", phone: \"591\" },\r\n { label: \"Bonaire, Sint Eustatius and Saba\", code: \"BQ\", phone: \"599\" },\r\n { label: \"Bosnia and Herzegovina\", code: \"BA\", phone: \"387\" },\r\n { label: \"Botswana\", code: \"BW\", phone: \"267\" },\r\n { label: \"Bouvet Island\", code: \"BV\", phone: \"0055\" },\r\n { label: \"Brazil\", code: \"BR\", phone: \"55\" },\r\n { label: \"British Indian Ocean Territory\", code: \"IO\", phone: \"246\" },\r\n { label: \"Brunei\", code: \"BN\", phone: \"673\" },\r\n { label: \"Bulgaria\", code: \"BG\", phone: \"359\" },\r\n { label: \"Burkina Faso\", code: \"BF\", phone: \"226\" },\r\n { label: \"Burundi\", code: \"BI\", phone: \"257\" },\r\n { label: \"Cambodia\", code: \"KH\", phone: \"855\" },\r\n { label: \"Cameroon\", code: \"CM\", phone: \"237\" },\r\n { label: \"Canada\", code: \"CA\", phone: \"1\" },\r\n { label: \"Cape Verde\", code: \"CV\", phone: \"238\" },\r\n { label: \"Cayman Islands\", code: \"KY\", phone: \"1\" },\r\n { label: \"Central African Republic\", code: \"CF\", phone: \"236\" },\r\n { label: \"Chad\", code: \"TD\", phone: \"235\" },\r\n { label: \"Chile\", code: \"CL\", phone: \"56\" },\r\n { label: \"China\", code: \"CN\", phone: \"86\" },\r\n { label: \"Christmas Island\", code: \"CX\", phone: \"61\" },\r\n { label: \"Cocos (Keeling) Islands\", code: \"CC\", phone: \"61\" },\r\n { label: \"Colombia\", code: \"CO\", phone: \"57\" },\r\n { label: \"Comoros\", code: \"KM\", phone: \"269\" },\r\n { label: \"Congo\", code: \"CG\", phone: \"242\" },\r\n { label: \"Cook Islands\", code: \"CK\", phone: \"682\" },\r\n { label: \"Costa Rica\", code: \"CR\", phone: \"506\" },\r\n { label: \"Croatia\", code: \"HR\", phone: \"385\" },\r\n { label: \"Cuba\", code: \"CU\", phone: \"53\" },\r\n { label: \"Curaçao\", code: \"CW\", phone: \"599\" },\r\n { label: \"Cyprus\", code: \"CY\", phone: \"357\" },\r\n { label: \"Czech Republic\", code: \"CZ\", phone: \"420\" },\r\n { label: \"Democratic Republic of the Congo\", code: \"CD\", phone: \"243\" },\r\n { label: \"Denmark\", code: \"DK\", phone: \"45\" },\r\n { label: \"Djibouti\", code: \"DJ\", phone: \"253\" },\r\n { label: \"Dominica\", code: \"DM\", phone: \"1\" },\r\n { label: \"Dominican Republic\", code: \"DO\", phone: \"1\" },\r\n { label: \"Ecuador\", code: \"EC\", phone: \"593\" },\r\n { label: \"Egypt\", code: \"EG\", phone: \"20\" },\r\n { label: \"El Salvador\", code: \"SV\", phone: \"503\" },\r\n { label: \"Equatorial Guinea\", code: \"GQ\", phone: \"240\" },\r\n { label: \"Eritrea\", code: \"ER\", phone: \"291\" },\r\n { label: \"Estonia\", code: \"EE\", phone: \"372\" },\r\n { label: \"Eswatini\", code: \"SZ\", phone: \"268\" },\r\n { label: \"Ethiopia\", code: \"ET\", phone: \"251\" },\r\n { label: \"Falkland Islands\", code: \"FK\", phone: \"500\" },\r\n { label: \"Faroe Islands\", code: \"FO\", phone: \"298\" },\r\n { label: \"Fiji Islands\", code: \"FJ\", phone: \"679\" },\r\n { label: \"Finland\", code: \"FI\", phone: \"358\" },\r\n { label: \"France\", code: \"FR\", phone: \"33\" },\r\n { label: \"French Guiana\", code: \"GF\", phone: \"594\" },\r\n { label: \"French Polynesia\", code: \"PF\", phone: \"689\" },\r\n { label: \"French Southern Territories\", code: \"TF\", phone: \"262\" },\r\n { label: \"Gabon\", code: \"GA\", phone: \"241\" },\r\n { label: \"Georgia\", code: \"GE\", phone: \"995\" },\r\n { label: \"Germany\", code: \"DE\", phone: \"49\" },\r\n { label: \"Ghana\", code: \"GH\", phone: \"233\" },\r\n { label: \"Gibraltar\", code: \"GI\", phone: \"350\" },\r\n { label: \"Greece\", code: \"GR\", phone: \"30\" },\r\n { label: \"Greenland\", code: \"GL\", phone: \"299\" },\r\n { label: \"Grenada\", code: \"GD\", phone: \"1\" },\r\n { label: \"Guadeloupe\", code: \"GP\", phone: \"590\" },\r\n { label: \"Guam\", code: \"GU\", phone: \"1\" },\r\n { label: \"Guatemala\", code: \"GT\", phone: \"502\" },\r\n { label: \"Guernsey\", code: \"GG\", phone: \"44\" },\r\n { label: \"Guinea\", code: \"GN\", phone: \"224\" },\r\n { label: \"Guinea-Bissau\", code: \"GW\", phone: \"245\" },\r\n { label: \"Guyana\", code: \"GY\", phone: \"592\" },\r\n { label: \"Haiti\", code: \"HT\", phone: \"509\" },\r\n { label: \"Heard Island and McDonald Islands\", code: \"HM\", phone: \"672\" },\r\n { label: \"Honduras\", code: \"HN\", phone: \"504\" },\r\n { label: \"Hong Kong S.A.R.\", code: \"HK\", phone: \"852\" },\r\n { label: \"Hungary\", code: \"HU\", phone: \"36\" },\r\n { label: \"Iceland\", code: \"IS\", phone: \"354\" },\r\n { label: \"India\", code: \"IN\", phone: \"91\" },\r\n { label: \"Indonesia\", code: \"ID\", phone: \"62\" },\r\n { label: \"Iran\", code: \"IR\", phone: \"98\" },\r\n { label: \"Iraq\", code: \"IQ\", phone: \"964\" },\r\n { label: \"Ireland\", code: \"IE\", phone: \"353\" },\r\n { label: \"Israel\", code: \"IL\", phone: \"972\" },\r\n { label: \"Italy\", code: \"IT\", phone: \"39\" },\r\n { label: \"Ivory Coast\", code: \"CI\", phone: \"225\" },\r\n { label: \"Jamaica\", code: \"JM\", phone: \"1\" },\r\n { label: \"Japan\", code: \"JP\", phone: \"81\" },\r\n { label: \"Jersey\", code: \"JE\", phone: \"44\" },\r\n { label: \"Jordan\", code: \"JO\", phone: \"962\" },\r\n { label: \"Kazakhstan\", code: \"KZ\", phone: \"7\" },\r\n { label: \"Kenya\", code: \"KE\", phone: \"254\" },\r\n { label: \"Kiribati\", code: \"KI\", phone: \"686\" },\r\n { label: \"Kosovo\", code: \"XK\", phone: \"383\" },\r\n { label: \"Kuwait\", code: \"KW\", phone: \"965\" },\r\n { label: \"Kyrgyzstan\", code: \"KG\", phone: \"996\" },\r\n { label: \"Laos\", code: \"LA\", phone: \"856\" },\r\n { label: \"Latvia\", code: \"LV\", phone: \"371\" },\r\n { label: \"Lebanon\", code: \"LB\", phone: \"961\" },\r\n { label: \"Lesotho\", code: \"LS\", phone: \"266\" },\r\n { label: \"Liberia\", code: \"LR\", phone: \"231\" },\r\n { label: \"Libya\", code: \"LY\", phone: \"218\" },\r\n { label: \"Liechtenstein\", code: \"LI\", phone: \"423\" },\r\n { label: \"Lithuania\", code: \"LT\", phone: \"370\" },\r\n { label: \"Luxembourg\", code: \"LU\", phone: \"352\" },\r\n { label: \"Macau S.A.R.\", code: \"MO\", phone: \"853\" },\r\n { label: \"Madagascar\", code: \"MG\", phone: \"261\" },\r\n { label: \"Malawi\", code: \"MW\", phone: \"265\" },\r\n { label: \"Malaysia\", code: \"MY\", phone: \"60\" },\r\n { label: \"Maldives\", code: \"MV\", phone: \"960\" },\r\n { label: \"Mali\", code: \"ML\", phone: \"223\" },\r\n { label: \"Malta\", code: \"MT\", phone: \"356\" },\r\n { label: \"Man (Isle of)\", code: \"IM\", phone: \"44\" },\r\n { label: \"Marshall Islands\", code: \"MH\", phone: \"692\" },\r\n { label: \"Martinique\", code: \"MQ\", phone: \"596\" },\r\n { label: \"Mauritania\", code: \"MR\", phone: \"222\" },\r\n { label: \"Mauritius\", code: \"MU\", phone: \"230\" },\r\n { label: \"Mayotte\", code: \"YT\", phone: \"262\" },\r\n { label: \"Mexico\", code: \"MX\", phone: \"52\" },\r\n { label: \"Micronesia\", code: \"FM\", phone: \"691\" },\r\n { label: \"Moldova\", code: \"MD\", phone: \"373\" },\r\n { label: \"Monaco\", code: \"MC\", phone: \"377\" },\r\n { label: \"Mongolia\", code: \"MN\", phone: \"976\" },\r\n { label: \"Montenegro\", code: \"ME\", phone: \"382\" },\r\n { label: \"Montserrat\", code: \"MS\", phone: \"1\" },\r\n { label: \"Morocco\", code: \"MA\", phone: \"212\" },\r\n { label: \"Mozambique\", code: \"MZ\", phone: \"258\" },\r\n { label: \"Myanmar\", code: \"MM\", phone: \"95\" },\r\n { label: \"Namibia\", code: \"NA\", phone: \"264\" },\r\n { label: \"Nauru\", code: \"NR\", phone: \"674\" },\r\n { label: \"Nepal\", code: \"NP\", phone: \"977\" },\r\n { label: \"Netherlands\", code: \"NL\", phone: \"31\" },\r\n { label: \"New Caledonia\", code: \"NC\", phone: \"687\" },\r\n { label: \"New Zealand\", code: \"NZ\", phone: \"64\" },\r\n { label: \"Nicaragua\", code: \"NI\", phone: \"505\" },\r\n { label: \"Niger\", code: \"NE\", phone: \"227\" },\r\n { label: \"Nigeria\", code: \"NG\", phone: \"234\" },\r\n { label: \"Niue\", code: \"NU\", phone: \"683\" },\r\n { label: \"Norfolk Island\", code: \"NF\", phone: \"672\" },\r\n { label: \"North Korea\", code: \"KP\", phone: \"850\" },\r\n { label: \"North Macedonia\", code: \"MK\", phone: \"389\" },\r\n { label: \"Northern Mariana Islands\", code: \"MP\", phone: \"1\" },\r\n { label: \"Norway\", code: \"NO\", phone: \"47\" },\r\n { label: \"Oman\", code: \"OM\", phone: \"968\" },\r\n { label: \"Pakistan\", code: \"PK\", phone: \"92\" },\r\n { label: \"Palau\", code: \"PW\", phone: \"680\" },\r\n { label: \"Palestinian Territory Occupied\", code: \"PS\", phone: \"970\" },\r\n { label: \"Panama\", code: \"PA\", phone: \"507\" },\r\n { label: \"Papua New Guinea\", code: \"PG\", phone: \"675\" },\r\n { label: \"Paraguay\", code: \"PY\", phone: \"595\" },\r\n { label: \"Peru\", code: \"PE\", phone: \"51\" },\r\n { label: \"Philippines\", code: \"PH\", phone: \"63\" },\r\n { label: \"Pitcairn Island\", code: \"PN\", phone: \"870\" },\r\n { label: \"Poland\", code: \"PL\", phone: \"48\" },\r\n { label: \"Portugal\", code: \"PT\", phone: \"351\" },\r\n { label: \"Puerto Rico\", code: \"PR\", phone: \"1\" },\r\n { label: \"Qatar\", code: \"QA\", phone: \"974\" },\r\n { label: \"Reunion\", code: \"RE\", phone: \"262\" },\r\n { label: \"Romania\", code: \"RO\", phone: \"40\" },\r\n { label: \"Russia\", code: \"RU\", phone: \"7\" },\r\n { label: \"Rwanda\", code: \"RW\", phone: \"250\" },\r\n { label: \"Saint Helena\", code: \"SH\", phone: \"290\" },\r\n { label: \"Saint Kitts and Nevis\", code: \"KN\", phone: \"1\" },\r\n { label: \"Saint Lucia\", code: \"LC\", phone: \"1\" },\r\n { label: \"Saint Pierre and Miquelon\", code: \"PM\", phone: \"508\" },\r\n { label: \"Saint Vincent and the Grenadines\", code: \"VC\", phone: \"1\" },\r\n { label: \"Saint-Barthelemy\", code: \"BL\", phone: \"590\" },\r\n { label: \"Saint-Martin (French part)\", code: \"MF\", phone: \"590\" },\r\n { label: \"Samoa\", code: \"WS\", phone: \"685\" },\r\n { label: \"San Marino\", code: \"SM\", phone: \"378\" },\r\n { label: \"Sao Tome and Principe\", code: \"ST\", phone: \"239\" },\r\n { label: \"Saudi Arabia\", code: \"SA\", phone: \"966\" },\r\n { label: \"Senegal\", code: \"SN\", phone: \"221\" },\r\n { label: \"Serbia\", code: \"RS\", phone: \"381\" },\r\n { label: \"Seychelles\", code: \"SC\", phone: \"248\" },\r\n { label: \"Sierra Leone\", code: \"SL\", phone: \"232\" },\r\n { label: \"Singapore\", code: \"SG\", phone: \"65\" },\r\n { label: \"Sint Maarten (Dutch part)\", code: \"SX\", phone: \"1721\" },\r\n { label: \"Slovakia\", code: \"SK\", phone: \"421\" },\r\n { label: \"Slovenia\", code: \"SI\", phone: \"386\" },\r\n { label: \"Solomon Islands\", code: \"SB\", phone: \"677\" },\r\n { label: \"Somalia\", code: \"SO\", phone: \"252\" },\r\n { label: \"South Africa\", code: \"ZA\", phone: \"27\" },\r\n { label: \"South Georgia\", code: \"GS\", phone: \"500\" },\r\n { label: \"South Korea\", code: \"KR\", phone: \"82\" },\r\n { label: \"South Sudan\", code: \"SS\", phone: \"211\" },\r\n { label: \"Spain\", code: \"ES\", phone: \"34\" },\r\n { label: \"Sri Lanka\", code: \"LK\", phone: \"94\" },\r\n { label: \"Sudan\", code: \"SD\", phone: \"249\" },\r\n { label: \"Suriname\", code: \"SR\", phone: \"597\" },\r\n { label: \"Svalbard and Jan Mayen Islands\", code: \"SJ\", phone: \"47\" },\r\n { label: \"Sweden\", code: \"SE\", phone: \"46\" },\r\n { label: \"Switzerland\", code: \"CH\", phone: \"41\" },\r\n { label: \"Syria\", code: \"SY\", phone: \"963\" },\r\n { label: \"Taiwan\", code: \"TW\", phone: \"886\" },\r\n { label: \"Tajikistan\", code: \"TJ\", phone: \"992\" },\r\n { label: \"Tanzania\", code: \"TZ\", phone: \"255\" },\r\n { label: \"Thailand\", code: \"TH\", phone: \"66\" },\r\n { label: \"The Bahamas\", code: \"BS\", phone: \"1\" },\r\n { label: \"The Gambia\", code: \"GM\", phone: \"220\" },\r\n { label: \"Timor-Leste\", code: \"TL\", phone: \"670\" },\r\n { label: \"Togo\", code: \"TG\", phone: \"228\" },\r\n { label: \"Tokelau\", code: \"TK\", phone: \"690\" },\r\n { label: \"Tonga\", code: \"TO\", phone: \"676\" },\r\n { label: \"Trinidad and Tobago\", code: \"TT\", phone: \"1\" },\r\n { label: \"Tunisia\", code: \"TN\", phone: \"216\" },\r\n { label: \"Turkey\", code: \"TR\", phone: \"90\" },\r\n { label: \"Turkmenistan\", code: \"TM\", phone: \"993\" },\r\n { label: \"Turks and Caicos Islands\", code: \"TC\", phone: \"1\" },\r\n { label: \"Tuvalu\", code: \"TV\", phone: \"688\" },\r\n { label: \"Uganda\", code: \"UG\", phone: \"256\" },\r\n { label: \"Ukraine\", code: \"UA\", phone: \"380\" },\r\n { label: \"United Arab Emirates\", code: \"AE\", phone: \"971\" },\r\n { label: \"United Kingdom\", code: \"GB\", phone: \"44\" },\r\n { label: \"United States\", code: \"US\", phone: \"1\" },\r\n { label: \"United States Minor Outlying Islands\", code: \"UM\", phone: \"1\" },\r\n { label: \"Uruguay\", code: \"UY\", phone: \"598\" },\r\n { label: \"Uzbekistan\", code: \"UZ\", phone: \"998\" },\r\n { label: \"Vanuatu\", code: \"VU\", phone: \"678\" },\r\n { label: \"Vatican City State (Holy See)\", code: \"VA\", phone: \"379\" },\r\n { label: \"Venezuela\", code: \"VE\", phone: \"58\" },\r\n { label: \"Vietnam\", code: \"VN\", phone: \"84\" },\r\n { label: \"Virgin Islands (British)\", code: \"VG\", phone: \"1\" },\r\n { label: \"Virgin Islands (US)\", code: \"VI\", phone: \"1\" },\r\n { label: \"Wallis and Futuna Islands\", code: \"WF\", phone: \"681\" },\r\n { label: \"Western Sahara\", code: \"EH\", phone: \"212\" },\r\n { label: \"Yemen\", code: \"YE\", phone: \"967\" },\r\n { label: \"Zambia\", code: \"ZM\", phone: \"260\" },\r\n { label: \"Zimbabwe\", code: \"ZW\", phone: \"263\" },\r\n];\r\n","import React, { useState, useEffect, useRef } from \"react\";\r\nimport { countries } from \"../../../data/countries\";\r\nimport { ChevronDown, Search } from \"lucide-react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nexport default function PhoneInput({\r\n label = \"\",\r\n value = \"\",\r\n name = \"\",\r\n parentClass = \"\",\r\n onChange,\r\n disabled = false,\r\n required = false,\r\n placeholder = \"Phone number\",\r\n search = false,\r\n countriesList = false,\r\n defaultCountry = \"\",\r\n}) {\r\n const find_country_with_code = (value) => {\r\n return countries.find((obj) => obj.code == value);\r\n };\r\n\r\n const [selectedCountry, setSelectedCountry] = useState(\r\n find_country_with_code(defaultCountry) || countries[0],\r\n );\r\n const [fullNumber, setFullNumber] = useState(\"\");\r\n const [open, setOpen] = useState(false);\r\n const [searchTerm, setSearchTerm] = useState(\"\");\r\n const dropdownRef = useRef();\r\n\r\n // Match prefix when value starts with +code\r\n useEffect(() => {\r\n if (typeof value === \"string\" && value.startsWith(\"+\")) {\r\n const match = countries\r\n .filter((c) => value.startsWith(\"+\" + c.phone))\r\n .sort((a, b) => b.phone.length - a.phone.length)[0];\r\n if (match) {\r\n setSelectedCountry(match);\r\n setFullNumber(value.replace(\"+\" + match.phone, \"\"));\r\n return;\r\n }\r\n }\r\n setFullNumber(value);\r\n }, [value]);\r\n\r\n const handleNumberChange = (e) => {\r\n const input = e.target.value.replace(/\\D/g, \"\");\r\n setFullNumber(input);\r\n if (selectedCountry && onChange) {\r\n onChange(\"+\" + selectedCountry.phone + input);\r\n }\r\n };\r\n\r\n const handleCountrySelect = (country) => {\r\n setSelectedCountry(country);\r\n if (onChange) onChange(\"+\" + country.phone + fullNumber);\r\n setOpen(false);\r\n setSearchTerm(\"\");\r\n };\r\n\r\n // 🖱️ Close dropdown on outside click\r\n useEffect(() => {\r\n const handleClickOutside = (e) => {\r\n if (dropdownRef.current && !dropdownRef.current.contains(e.target))\r\n setOpen(false);\r\n };\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\r\n }, []);\r\n\r\n const filteredCountries = countries.filter(\r\n (c) =>\r\n c.label.toLowerCase().includes(searchTerm.toLowerCase()) ||\r\n c.phone.includes(searchTerm),\r\n );\r\n\r\n if (!countriesList) {\r\n const handleInputChange = (e) => {\r\n const input = e.target.value.replace(/[^+\\d]/g, \"\");\r\n const formatted = input.startsWith(\"+\")\r\n ? \"+\" + input.replace(/[+]/g, \"\").slice(0)\r\n : input;\r\n onChange(formatted);\r\n };\r\n\r\n return (\r\n <>\r\n <div key={name} className={parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n <input\r\n type=\"text\"\r\n value={value}\r\n onChange={handleInputChange}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n required={required}\r\n className=\"w-full h-10 px-3 text-sm border border-gray-300 dark:border-gray-600 rounded-md \r\n bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 focus:outline-none \r\n focus:ring-1 focus:ring-blue-300 dark:focus:ring-blue-200\"\r\n inputMode=\"tel\"\r\n pattern=\"^\\+\\d{1,15}$\"\r\n />\r\n </div>\r\n </>\r\n );\r\n }\r\n\r\n return (\r\n <>\r\n <div key={name} className={parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n <div className=\"relative \" ref={dropdownRef}>\r\n {/* Input container */}\r\n <div\r\n className={`h-[40px] flex items-center border rounded-md px-2 bg-white dark:bg-gray-700 transition-all\r\n ${\r\n open\r\n ? \"ring-0.5 ring-blue-100 border-blue-300\"\r\n : \"border-gray-300 dark:border-gray-600\"\r\n }\r\n ${disabled ? \"opacity-60 cursor-not-allowed\" : \"\"}`}\r\n >\r\n {/* Flag & dropdown */}\r\n <button\r\n type=\"button\"\r\n disabled={disabled}\r\n onClick={() => setOpen(!open)}\r\n className=\"flex items-center gap-1 pr-2 border-r border-gray-300 dark:border-gray-700 focus:outline-none\"\r\n >\r\n {selectedCountry ? (\r\n <img\r\n src={`https://flagcdn.com/w20/${selectedCountry.code.toLowerCase()}.png`}\r\n alt={selectedCountry.code}\r\n className=\"w-5 h-3 object-cover\"\r\n />\r\n ) : (\r\n <span className=\"text-gray-400 text-xs\">🌐</span>\r\n )}\r\n <ChevronDown className=\"w-3 h-3 text-gray-500\" />\r\n </button>\r\n\r\n {/* Country code */}\r\n {selectedCountry && (\r\n <span className=\"ml-2 text-sm text-gray-700 dark:text-gray-200 whitespace-nowrap\">\r\n +{selectedCountry.phone}\r\n </span>\r\n )}\r\n\r\n {/* Number input */}\r\n <input\r\n type=\"tel\"\r\n value={fullNumber}\r\n onChange={handleNumberChange}\r\n required={required}\r\n disabled={disabled || !selectedCountry}\r\n placeholder={!selectedCountry ? \"Select a country\" : placeholder}\r\n className=\"flex-1 ml-2 bg-transparent outline-none text-sm text-gray-800 dark:text-gray-100 placeholder-gray-400\"\r\n />\r\n\r\n {/* Hidden input for native browser validation */}\r\n <input\r\n type=\"tel\"\r\n required={required}\r\n tabIndex={-1}\r\n readOnly\r\n value={\r\n selectedCountry && fullNumber\r\n ? \"+\" + selectedCountry.phone + fullNumber\r\n : \"\"\r\n }\r\n style={{\r\n position: \"absolute\",\r\n opacity: 0,\r\n pointerEvents: \"none\",\r\n height: 0,\r\n }}\r\n />\r\n </div>\r\n\r\n {/* Dropdown */}\r\n {open && (\r\n <div className=\"absolute top-full left-0 w-full mt-1 border border-gray-300 dark:border-gray-700 rounded-md bg-white dark:bg-gray-700 shadow-lg z-50 max-h-60 overflow-y-auto\">\r\n {search && (\r\n <div className=\"p-2 border-b border-gray-200 dark:border-gray-700\">\r\n <div className=\"relative\">\r\n <Search className=\"absolute left-3 top-1/2 transform -translate-y-1/2 w-4 h-4 text-gray-400\" />\r\n <input\r\n type=\"text\"\r\n value={searchTerm}\r\n onChange={(e) => setSearchTerm(e.target.value)}\r\n placeholder=\"Search country...\"\r\n className=\"w-full pl-9 pr-3 py-2 text-sm border rounded-md bg-white dark:bg-gray-800 dark:text-white placeholder-gray-500 dark:placeholder-gray-400 focus:outline-none \"\r\n />\r\n </div>\r\n </div>\r\n )}\r\n\r\n {filteredCountries.map((c) => (\r\n <button\r\n key={c.code}\r\n type=\"button\"\r\n onClick={() => handleCountrySelect(c)}\r\n className=\"w-full flex items-center gap-2 px-2 py-1 text-sm hover:bg-blue-50 dark:hover:bg-gray-700 text-gray-800 dark:text-gray-100\"\r\n >\r\n <img\r\n src={`https://flagcdn.com/w20/${c.code.toLowerCase()}.png`}\r\n alt={c.code}\r\n className=\"w-5 h-3 object-cover\"\r\n />\r\n <span>\r\n {c.label} (+{c.phone})\r\n </span>\r\n </button>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </>\r\n );\r\n}\r\n","import React, { useState } from \"react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nconst TextArea = React.forwardRef(\r\n ({ className = \"\", label, required, ...props }, ref) => {\r\n const combinedClassName = `\r\n placeholder-gray-400 dark:placeholder-gray-400\r\n ${className}\r\n `.trim();\r\n\r\n return (\r\n <>\r\n <div key={props.name} className={props.parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n <div className=\"relative\">\r\n <textarea\r\n className={combinedClassName}\r\n ref={ref}\r\n required={required}\r\n {...props}\r\n />\r\n </div>\r\n </div>\r\n </>\r\n );\r\n },\r\n);\r\n\r\nTextArea.displayName = \"TextArea\";\r\n\r\nexport { TextArea };\r\n","import { Icon } from \"@iconify/react\";\r\nimport React, { useState, useEffect, useRef } from \"react\";\r\nimport InputLabel from \"./InputLabel\";\r\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, { useState } from \"react\";\r\nimport { Icon } from \"@iconify/react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nconst Input = React.forwardRef(\r\n (\r\n {\r\n label,\r\n required,\r\n parentClass = \"\",\r\n className = \"\",\r\n type = \"text\",\r\n onKeyDown,\r\n negativeNumberAllow = true,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const [showPassword, setShowPassword] = useState(false);\r\n\r\n const handleKeyDown = (e) => {\r\n if (type === \"number\") {\r\n const blockedKeys = [\"e\", \"E\", \"+\"];\r\n\r\n // Block e, E, +\r\n if (blockedKeys.includes(e.key)) {\r\n e.preventDefault();\r\n return;\r\n }\r\n\r\n // Block negative sign if not allowed\r\n if (negativeNumberAllow == false && e.key === \"-\") {\r\n e.preventDefault();\r\n return;\r\n }\r\n\r\n // Block arrow up/down from changing value\r\n if ([\"ArrowUp\", \"ArrowDown\"].includes(e.key)) {\r\n e.preventDefault();\r\n return;\r\n }\r\n }\r\n\r\n onKeyDown?.(e);\r\n };\r\n\r\n const combinedClassName = `\r\n h-10 placeholder-gray-400 dark:placeholder-gray-400\r\n ${type === \"password\" ? \"pr-10\" : \"\"}\r\n ${type === \"number\" ? \"no-spinner\" : \"\"}\r\n ${className}\r\n `.trim();\r\n\r\n return (\r\n <>\r\n <div key={props.name} className={parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n <div className=\"relative\">\r\n <input\r\n type={type === \"password\" && showPassword ? \"text\" : type}\r\n ref={ref}\r\n required={required}\r\n onKeyDown={handleKeyDown}\r\n className={combinedClassName}\r\n {...props}\r\n />\r\n\r\n {type === \"password\" && (\r\n <button\r\n type=\"button\"\r\n tabIndex={-1}\r\n onClick={() => setShowPassword((prev) => !prev)}\r\n className=\"absolute inset-y-0 right-3 flex items-center text-gray-400 hover:text-gray-600 dark:text-gray-400 dark:hover:text-gray-200\"\r\n >\r\n <Icon\r\n icon={\r\n showPassword ? \"mdi:eye-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 buttonComponent: ButtonComponent = null,\r\n buttonProps = {},\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 key={audio.preview} src={audio.preview} controls />\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 React from \"react\";\r\nimport Select from \"./Select\";\r\nimport Switch from \"./Switch\";\r\nimport PhoneInput from \"./PhoneInput\";\r\nimport { TextArea } from \"./TextArea\";\r\nimport ImagePicker from \"./ImagePicker\";\r\nimport { Input } from \"./Input\";\r\nimport TinyEditor from \"./TinyEditor\";\r\nimport Checkbox from \"./Checkbox\";\r\nimport AudioPicker from \"./AudioPicker\";\r\n\r\nconst RenderFields = ({ field, formData, handleChange }) => {\r\n const {\r\n key,\r\n label,\r\n type,\r\n options,\r\n placeholder,\r\n rows,\r\n inputClass,\r\n search,\r\n accept,\r\n text,\r\n required = false,\r\n minLength,\r\n dragDrop,\r\n parentClass,\r\n countriesList,\r\n defaultCountry,\r\n multiple,\r\n dropdownMaxHeight,\r\n editorKey,\r\n fontFamily,\r\n disabled,\r\n negativeNumberAllow,\r\n defaultValue,\r\n } = field;\r\n\r\n let value = formData?.[key];\r\n if (value === undefined || value === null) {\r\n value = \"\";\r\n }\r\n\r\n const finalPlaceholder =\r\n placeholder || (type === \"select\" ? `Select ${label}` : `Enter ${label}`);\r\n\r\n const baseClass =\r\n \"w-full px-3 py-2 rounded-md border border-gray-300 dark:border-gray-600 text-sm focus:outline-none focus:ring-1 focus:ring-blue-200 bg-white text-black dark:bg-gray-700 dark:text-white\";\r\n\r\n switch (type) {\r\n case \"select\":\r\n return (\r\n <Select\r\n options={options || []}\r\n value={value}\r\n onChange={(val) => handleChange(key, val)}\r\n placeholder={finalPlaceholder}\r\n className={inputClass || \"\"}\r\n search={search}\r\n required={required}\r\n 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 \"switch\":\r\n return (\r\n <Switch\r\n value={value}\r\n onChange={(val) => handleChange(key, val)}\r\n text={text}\r\n options={options || []}\r\n label={label}\r\n required={required}\r\n name={key}\r\n disabled={disabled}\r\n parentClass={parentClass}\r\n />\r\n );\r\n\r\n case \"phone\":\r\n return (\r\n <PhoneInput\r\n value={value}\r\n onChange={(val) => handleChange(key, val)}\r\n countriesList={countriesList}\r\n defaultCountry={defaultCountry}\r\n required={required}\r\n placeholder={finalPlaceholder}\r\n search={search}\r\n label={label}\r\n name={key}\r\n disabled={disabled}\r\n parentClass={parentClass}\r\n />\r\n );\r\n\r\n case \"textarea\":\r\n return (\r\n <TextArea\r\n value={value}\r\n onChange={(e) => handleChange(key, e.target.value)}\r\n placeholder={finalPlaceholder}\r\n rows={rows || 3}\r\n className={`${baseClass} ${inputClass || \"\"}`}\r\n required={required}\r\n name={key}\r\n label={label}\r\n disabled={disabled}\r\n parentClass={parentClass}\r\n />\r\n );\r\n\r\n case \"image\":\r\n return (\r\n <ImagePicker\r\n value={value}\r\n onChange={(imgObj) => handleChange(key, imgObj)}\r\n required={required}\r\n accept={accept || \"image/*\"}\r\n id={`file-${key}`}\r\n dragDrop={dragDrop}\r\n label={label}\r\n name={key}\r\n parentClass={parentClass}\r\n />\r\n );\r\n case \"audio\":\r\n return (\r\n <AudioPicker\r\n value={value}\r\n onChange={(audio) => handleChange(key, audio)}\r\n required={required}\r\n accept={accept || \"audio/*\"}\r\n id={`file-${key}`}\r\n dragDrop={dragDrop}\r\n label={label}\r\n name={key}\r\n parentClass={parentClass}\r\n />\r\n );\r\n\r\n case \"tinyEditor\":\r\n return (\r\n <TinyEditor\r\n value={value}\r\n onChange={(newValue) => handleChange(key, newValue)}\r\n required={required}\r\n key={`editor-${key}`}\r\n placeholder={finalPlaceholder}\r\n label={label}\r\n parentClass={parentClass}\r\n fontFamily={fontFamily}\r\n editorKey={editorKey}\r\n disabled={disabled}\r\n />\r\n );\r\n\r\n default:\r\n return (\r\n <Input\r\n type={type || \"text\"}\r\n value={value}\r\n onChange={(e) => handleChange(key, e.target.value)}\r\n placeholder={finalPlaceholder}\r\n className={`${baseClass} ${inputClass || \"\"}`}\r\n required={required}\r\n name={key}\r\n minLength={minLength}\r\n label={label}\r\n negativeNumberAllow={negativeNumberAllow}\r\n parentClass={parentClass}\r\n disabled={disabled}\r\n />\r\n );\r\n }\r\n};\r\n\r\nexport default RenderFields;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { X } from \"lucide-react\";\r\nimport Button from \"../Button/Button\";\r\nimport RenderFields from \"../Form/components/RenderFields\";\r\n\r\nconst FilterDrawer = ({ isOpen, onClose, config, onApply }) => {\r\n const [filters, setFilters] = useState({});\r\n\r\n const handleChange = (key, value) => {\r\n setFilters((prev) => ({ ...prev, [key]: value }));\r\n };\r\n\r\n const handleApply = () => {\r\n onApply?.(filters);\r\n onClose();\r\n };\r\n\r\n const handleReset = () => {\r\n setFilters({});\r\n onApply?.({});\r\n onClose();\r\n };\r\n\r\n return (\r\n <>\r\n {/* Overlay */}\r\n <div\r\n className={`fixed inset-0 bg-black/50 z-40 transition-opacity duration-300 ${\r\n isOpen\r\n ? \"opacity-100 pointer-events-auto\"\r\n : \"opacity-0 pointer-events-none\"\r\n }`}\r\n onClick={onClose}\r\n />\r\n\r\n {/* Drawer */}\r\n <div\r\n className={`fixed top-0 right-0 h-full w-[28rem] bg-white dark:bg-gray-900 shadow-2xl z-50 flex flex-col border-l border-gray-200 dark:border-gray-700\r\n transform transition-transform duration-300 ease-in-out\r\n ${isOpen ? \"translate-x-0\" : \"translate-x-full\"}\r\n `}\r\n >\r\n {/* Header */}\r\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-gray-200 dark:border-gray-700\">\r\n <h2 className=\"text-lg font-semibold text-gray-900 dark:text-white\">\r\n Filters\r\n </h2>\r\n <button\r\n onClick={onClose}\r\n className=\"p-2 hover:bg-gray-100 dark:hover:bg-gray-800 rounded-md transition\"\r\n >\r\n <X className=\"w-5 h-5 text-gray-500 dark:text-gray-400\" />\r\n </button>\r\n </div>\r\n\r\n {/* Content */}\r\n <div className=\"flex-1 overflow-y-auto px-4 py-3\">\r\n {config?.component ? (\r\n <config.component filters={filters} onFilterChange={handleChange} />\r\n ) : (\r\n <div className=\"space-y-4\">\r\n {config?.fields?.map((field) => (\r\n <>\r\n <RenderFields\r\n key={field.key}\r\n field={field}\r\n formData={filters}\r\n handleChange={handleChange}\r\n />\r\n </>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Footer */}\r\n <div className=\"flex gap-2 px-4 py-3 border-t border-gray-200 dark:border-gray-700\">\r\n <Button\r\n onClick={handleApply}\r\n variant=\"contained\"\r\n color=\"primary\"\r\n fullWidth\r\n >\r\n Apply Filters\r\n </Button>\r\n <Button\r\n onClick={handleReset}\r\n variant=\"contained\"\r\n className=\"min-w-[150px]\"\r\n >\r\n Reset\r\n </Button>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default FilterDrawer;\r\n","import React from \"react\";\r\n\r\nconst BADGE_COLORS = {\r\n blue: {\r\n bg: \"bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-300\",\r\n border:\r\n \"border border-blue-300 text-blue-700 dark:border-blue-700 dark:text-blue-300\",\r\n },\r\n teal: {\r\n bg: \"bg-teal-100 text-teal-800 dark:bg-teal-900/30 dark:text-teal-300\",\r\n border:\r\n \"border border-teal-300 text-teal-700 dark:border-teal-700 dark:text-teal-300\",\r\n },\r\n purple: {\r\n bg: \"bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300\",\r\n border:\r\n \"border border-purple-300 text-purple-700 dark:border-purple-700 dark:text-purple-300\",\r\n },\r\n yellow: {\r\n bg: \"bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-300\",\r\n border:\r\n \"border border-yellow-300 text-yellow-700 dark:border-yellow-700 dark:text-yellow-300\",\r\n },\r\n green: {\r\n bg: \"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300\",\r\n border:\r\n \"border border-green-300 text-green-700 dark:border-green-700 dark:text-green-300\",\r\n },\r\n red: {\r\n bg: \"bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-300\",\r\n border:\r\n \"border border-red-300 text-red-700 dark:border-red-700 dark:text-red-300\",\r\n },\r\n gray: {\r\n bg: \"bg-gray-100 text-gray-800 dark:bg-gray-900/30 dark:text-gray-300\",\r\n border:\r\n \"border border-gray-300 text-gray-700 dark:border-gray-700 dark:text-gray-300\",\r\n },\r\n};\r\n\r\nconst BADGE_VARIANTS = {\r\n contained: \"bg\",\r\n outline: \"border !bg-transparent\",\r\n soft: \"bg opacity-90\",\r\n};\r\n\r\nconst Chip = ({\r\n label,\r\n variant = \"contained\", // contained | outline | soft\r\n color = \"green\",\r\n className = \"\",\r\n}) => {\r\n const colorConfig = BADGE_COLORS[color] || BADGE_COLORS.green;\r\n const variantKey = BADGE_VARIANTS[variant] || BADGE_VARIANTS.contained;\r\n\r\n const variantClasses =\r\n variant === \"outline\" ? colorConfig.border : colorConfig.bg;\r\n\r\n return (\r\n <span\r\n className={`inline-flex justify-center items-center rounded-sm text-xs font-semibold px-3 py-1 min-w-[78px]\r\n ${variantClasses}\r\n ${variantKey}\r\n ${className}`}\r\n >\r\n {label}\r\n </span>\r\n );\r\n};\r\n\r\nexport default Chip;\r\n","const TableSkeleton = ({ rows = 5, columns = 5 }) => {\r\n return (\r\n <>\r\n <div className=\"w-full mb-6 inline-flex justify-end items-center\">\r\n <div className=\"h-8 w-80 bg-gray-300 dark:bg-gray-700 rounded animate-pulse\" />\r\n </div>\r\n <div className=\"overflow-hidden rounded-md border border-gray-200 dark:border-gray-800\">\r\n <table className=\"w-full border-collapse\">\r\n <thead>\r\n <tr className=\"bg-gray-50 dark:bg-gray-900\">\r\n {Array.from({ length: columns }).map((_, i) => (\r\n <th key={i} className=\"px-4 py-3\">\r\n <div className=\"h-6 w-24 bg-gray-300 dark:bg-gray-700 rounded animate-pulse inline-flex justify-center items-center\" />\r\n </th>\r\n ))}\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n {Array.from({ length: rows }).map((_, rowIndex) => (\r\n <tr\r\n key={rowIndex}\r\n className=\"border-t border-gray-200 dark:border-gray-800\"\r\n >\r\n {Array.from({ length: columns }).map((_, colIndex) => (\r\n <td key={colIndex} className=\"px-4 py-6\">\r\n <div className=\"h-6 w-full bg-gray-300 dark:bg-gray-700 rounded animate-pulse\" />\r\n </td>\r\n ))}\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default TableSkeleton;\r\n","import { useEffect } from \"react\";\r\nimport { X } from \"lucide-react\";\r\n\r\nconst ImagePreview = ({ src, alt = \"preview\", isOpen, setIsOpen }) => {\r\n const closePreview = () => setIsOpen(false);\r\n\r\n // Handle ESC key + prevent body scroll\r\n useEffect(() => {\r\n const handleEsc = (e) => {\r\n if (e.key === \"Escape\") closePreview();\r\n };\r\n\r\n if (isOpen) {\r\n document.body.style.overflow = \"hidden\";\r\n document.addEventListener(\"keydown\", handleEsc);\r\n }\r\n\r\n return () => {\r\n document.body.style.overflow = \"\";\r\n document.removeEventListener(\"keydown\", handleEsc);\r\n };\r\n }, [isOpen]);\r\n\r\n return (\r\n <>\r\n {/* Fullscreen Preview */}\r\n <div\r\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/70 dark:bg-black/80 \r\n backdrop-blur-sm animate-in fade-in duration-200\"\r\n onClick={closePreview}\r\n >\r\n {/* Close Button */}\r\n <button\r\n onClick={closePreview}\r\n className=\"absolute top-4 right-4 bg-white dark:bg-gray-800 text-gray-800 dark:text-gray-200\r\n hover:bg-gray-100 dark:hover:bg-gray-700 rounded-full p-2 shadow-lg transition\"\r\n >\r\n <X size={20} />\r\n </button>\r\n\r\n {/* Image Container */}\r\n <div\r\n className=\"max-w-5xl w-full px-4 transform transition-all duration-200 scale-95 animate-in zoom-in-95\"\r\n onClick={(e) => e.stopPropagation()}\r\n >\r\n {/* Large Image */}\r\n <img\r\n src={src}\r\n alt={alt}\r\n className=\"w-full max-h-[90vh] object-contain rounded-xl\"\r\n />\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default ImagePreview;\r\n","import React, { useState, useMemo, useRef, useEffect } from \"react\";\r\nimport {\r\n ChevronLeft,\r\n ChevronRight,\r\n Search,\r\n EllipsisVertical,\r\n Filter,\r\n User,\r\n Music,\r\n} from \"lucide-react\";\r\nimport { createPortal } from \"react-dom\";\r\nimport { formatDate, searchLocalData } from \"../../lib/utils\";\r\nimport Button from \"../Button/Button\";\r\nimport FilterDrawer from \"../Filter/FilterDrawer\";\r\nimport Chip from \"../Chip/Chip\";\r\nimport TableSkeleton from \"./components/TableSkeleton\";\r\nimport ImagePreview from \"./components/ImagePreview\";\r\n\r\nconst Table = ({ config }) => {\r\n const {\r\n data = [],\r\n table_head = [],\r\n loading = false,\r\n search = {\r\n enabled: false,\r\n placeholder: \"Search...\",\r\n useServerSideSearch: false,\r\n },\r\n filter = {\r\n enabled: false,\r\n useServerSideFilters: false,\r\n },\r\n pagination = {\r\n enabled: false,\r\n rows_per_page: 10,\r\n useServerSidePagination: false,\r\n },\r\n emptyMessage = \"No data available\",\r\n onMenuAction,\r\n setServerSidePaginationData = () => {},\r\n onFilterApply,\r\n filterConfig = null,\r\n } = config;\r\n\r\n const [searchTerm, setSearchTerm] = useState(\"\");\r\n const [activeMenu, setActiveMenu] = useState(null);\r\n const [menuList, setMenuList] = useState([]);\r\n const [menuPosition, setMenuPosition] = useState({});\r\n const [showFilters, setShowFilters] = useState(false);\r\n\r\n // image preview\r\n const [targetImage, setTargetImage] = useState(null);\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const filteredData = useMemo(() => {\r\n if (!search.enabled || !searchTerm.trim()) return data;\r\n if (search.useServerSideSearch) return data;\r\n return searchLocalData(data, searchTerm, search.searchKeys || []);\r\n }, [data, searchTerm, search]);\r\n\r\n const [currentPage, setCurrentPage] = useState(1);\r\n const [pageSize, setPageSize] = useState(pagination?.rows_per_page || 50);\r\n const [totalRecords, setTotalRecords] = useState(filteredData.length || 0);\r\n\r\n const totalPages = pagination?.useServerSidePagination\r\n ? pagination.total_pages\r\n : Math.ceil(filteredData.length / pageSize);\r\n\r\n const paginatedData = useMemo(() => {\r\n if (pagination.useServerSidePagination) return filteredData;\r\n const start = (currentPage - 1) * pageSize;\r\n return filteredData.slice(start, start + pageSize);\r\n }, [filteredData, currentPage, pageSize]);\r\n\r\n const menuRef = useRef(null);\r\n const buttonRefs = useRef({});\r\n const searchTimeoutRef = useRef(null);\r\n\r\n const handleSearchChange = (value) => {\r\n setSearchTerm(value);\r\n setCurrentPage(1);\r\n\r\n if (search.useServerSideSearch) {\r\n if (searchTimeoutRef.current) clearTimeout(searchTimeoutRef.current);\r\n\r\n searchTimeoutRef.current = setTimeout(async () => {\r\n try {\r\n await setServerSidePaginationData((prev) => ({\r\n ...prev,\r\n search: value,\r\n current_page: 1,\r\n }));\r\n } catch (error) {\r\n console.error(\"Search error:\", error);\r\n }\r\n }, 800);\r\n }\r\n };\r\n\r\n const handleActionClick = (action, item, e) => {\r\n e.stopPropagation();\r\n setActiveMenu(null);\r\n onMenuAction?.(action.type, item);\r\n };\r\n\r\n const handleMenuToggle = (itemId, e, menu_list) => {\r\n e.stopPropagation();\r\n setMenuList(menu_list);\r\n const button = e.currentTarget;\r\n buttonRefs.current[itemId] = button;\r\n const rect = button.getBoundingClientRect();\r\n const menuWidth = 192;\r\n const menuHeight = menu_list.length * 40;\r\n const viewportWidth = window.innerWidth;\r\n const viewportHeight = window.innerHeight;\r\n\r\n const openLeft = viewportWidth - rect.right < menuWidth;\r\n const left = openLeft ? rect.left - menuWidth + rect.width : rect.left;\r\n\r\n const openUp =\r\n viewportHeight - rect.bottom < menuHeight && rect.top > menuHeight;\r\n const top = openUp ? rect.top - menuHeight - 2 : rect.bottom + 2;\r\n\r\n setMenuPosition({\r\n top: Math.max(8, Math.min(top, viewportHeight - menuHeight - 8)),\r\n left: Math.max(8, Math.min(left, viewportWidth - menuWidth - 8)),\r\n });\r\n\r\n setActiveMenu(activeMenu === itemId ? null : itemId);\r\n };\r\n\r\n const calculateRowNumber = (index) => {\r\n return (currentPage - 1) * pageSize + index + 1;\r\n };\r\n\r\n const openPreview = (image) => {\r\n setTargetImage(image);\r\n setIsOpen(true);\r\n };\r\n\r\n const renderAvatar = (\r\n imageSrc,\r\n imageAlt,\r\n className,\r\n fallback_icon = null,\r\n ) => {\r\n return (\r\n <>\r\n {imageSrc ? (\r\n <img\r\n src={imageSrc}\r\n alt={imageAlt || \"Avatar\"}\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n openPreview({ src: imageSrc, alt: imageAlt });\r\n }}\r\n className={`w-10 h-10 cursor-pointer rounded-full object-cover border border-gray-200 dark:border-gray-700 ${className || \"\"}`}\r\n />\r\n ) : (\r\n <>\r\n {fallback_icon ? (\r\n fallback_icon\r\n ) : (\r\n <div\r\n className={`w-10 h-10 flex items-center 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={audioSrc} // 🔥 ensures latest audio reloads\r\n controls\r\n src={audioSrc}\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n }}\r\n className={`w-64 cursor-pointer ${className || \"\"}`}\r\n />\r\n ) : (\r\n <>\r\n <div\r\n className={`w-12 h-12 flex items-center 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(row[col.imageKey], row[col.titleKey], \"group-avatar\")\r\n : \"\"}\r\n <div>\r\n <p className=\"font-medium text-gray-900 dark:text-white group-title\">\r\n {row[col.titleKey] || \"\"}\r\n </p>\r\n <p className=\"text-sm text-gray-500 dark:text-gray-400 group-sub-title\">\r\n {row[col.subtitleKey] || \"\"}\r\n </p>\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n const handleRenderChip = (value, col) => {\r\n let label = String(value);\r\n const variant = col.variant || \"contained\";\r\n let color = col.defaultColor;\r\n\r\n if (col?.chipOptions?.length > 0) {\r\n let chipObj = col?.chipOptions.find((obj) => obj.value == value);\r\n if (chipObj) {\r\n label = chipObj.label;\r\n color = chipObj.color;\r\n }\r\n }\r\n\r\n return (\r\n <Chip\r\n label={label}\r\n variant={variant}\r\n color={color}\r\n className={col.className || \"\"}\r\n />\r\n );\r\n };\r\n\r\n const handleRenderCellValue = (col, row, index) => {\r\n const value = row[col.key];\r\n if (col.type === \"menu_actions\") {\r\n return (\r\n <div className={`text-center ${col.className || \"\"}`}>\r\n <button\r\n ref={(el) => (buttonRefs.current[row.id || row._id] = el)}\r\n onClick={(e) =>\r\n handleMenuToggle(row.id || row._id, e, col.menuList)\r\n }\r\n className=\"p-2 bg-gray-100 dark:bg-gray-700 hover:bg-gray-200 dark:hover:bg-gray-600 rounded-full transition text-gray-700 dark:text-gray-300\"\r\n >\r\n <EllipsisVertical className=\"h-4 w-4\" />\r\n </button>\r\n </div>\r\n );\r\n } else if (col.type === \"index\") {\r\n return (\r\n <span className={col.className || \"\"}>{calculateRowNumber(index)}</span>\r\n );\r\n } else if (col.type === \"group\") {\r\n return renderGroupCell(row, col);\r\n } else if (col.type === \"chip\") {\r\n return <>{handleRenderChip(value, col)}</>;\r\n } else if (col.type === \"date\") {\r\n return (\r\n <span className={col.className || \"\"}>\r\n {formatDate(value, col.format || \"DD MMM YYYY\")}\r\n </span>\r\n );\r\n } else if (col.type === \"avatar\") {\r\n return (\r\n <>\r\n <div className=\"min-w-[40px]\">\r\n {renderAvatar(value, col.alt, col.className, col.fallback_icon)}\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 on cell\r\n\r\n const handleColumnClick = (col, row) => {\r\n if (col.onClickDetails) {\r\n return onMenuAction?.(\"view\", row);\r\n }\r\n\r\n if (typeof col.handleClick === \"function\") {\r\n return col.handleClick(row);\r\n }\r\n };\r\n\r\n // Helper to check if column is clickable\r\n const isColumnClickable = (col) =>\r\n col.onClickDetails || typeof col.handleClick === \"function\";\r\n\r\n // Close menu on scroll -------------------\r\n useEffect(() => {\r\n const handleScroll = () => {\r\n if (activeMenu) setActiveMenu(null);\r\n };\r\n\r\n window.addEventListener(\"scroll\", handleScroll, true);\r\n return () => {\r\n window.removeEventListener(\"scroll\", handleScroll, true);\r\n };\r\n }, [activeMenu]);\r\n\r\n useEffect(() => {\r\n const handleClickOutside = (e) => {\r\n if (menuRef.current && !menuRef.current.contains(e.target)) {\r\n setActiveMenu(null);\r\n }\r\n };\r\n document.addEventListener(\"click\", handleClickOutside);\r\n return () => document.removeEventListener(\"click\", handleClickOutside);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (pagination?.rows_per_page && pagination?.useServerSidePagination) {\r\n setPageSize(pagination?.rows_per_page || 50);\r\n }\r\n\r\n if (pagination.current_page) {\r\n setCurrentPage(pagination.current_page);\r\n }\r\n }, [\r\n pagination.rows_per_page,\r\n pagination?.useServerSidePagination,\r\n pagination.current_page,\r\n ]);\r\n\r\n useEffect(() => {\r\n setTotalRecords(\r\n pagination?.useServerSidePagination\r\n ? pagination.total_records\r\n : filteredData.length,\r\n );\r\n\r\n if (\r\n filteredData.length <= pageSize * (currentPage - 1) &&\r\n !pagination?.useServerSidePagination\r\n ) {\r\n setCurrentPage((prev) => prev - 1 || 1);\r\n }\r\n }, [\r\n filteredData.length,\r\n pagination.total_records,\r\n pagination?.useServerSidePagination,\r\n ]);\r\n\r\n if (loading) return <TableSkeleton rows={6} columns={6} />;\r\n\r\n return (\r\n <>\r\n {/* Search Bar */}\r\n <div className=\"flex justify-end items-center mb-4 gap-2\">\r\n {search.enabled && (\r\n <div className=\"\">\r\n <div className=\"relative min-w-[300px]\">\r\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400 dark:text-gray-300\" />\r\n <input\r\n type=\"text\"\r\n placeholder={search.placeholder || \"Search...\"}\r\n value={searchTerm}\r\n onChange={(e) => handleSearchChange(e.target.value)}\r\n className=\"w-full h-[36px] pl-9 pr-4 py-3 text-sm border border-gray-300 dark:border-gray-600 rounded-md bg-gray-50 dark:bg-gray-700 text-gray-900 dark:text-white placeholder-gray-500 dark:placeholder-gray-400 focus:outline-none focus:ring-1 focus:ring-blue-300 dark:ring-blue-200 disabled:opacity-50\"\r\n />\r\n </div>\r\n </div>\r\n )}\r\n\r\n {filterConfig && filter.enabled && (\r\n <Button onClick={() => setShowFilters(true)} variant=\"contained\">\r\n <Filter className=\"w-4 h-4 mr-2\" />\r\n Filters\r\n </Button>\r\n )}\r\n </div>\r\n\r\n {/* =========================== Table =========================== */}\r\n <div className=\"bg-white dark:bg-gray-800 rounded-lg shadow overflow-hidden border border-gray-200 dark:border-gray-700\">\r\n <div className=\"overflow-x-auto\">\r\n <table className=\"min-w-full divide-y divide-gray-200 dark:divide-gray-700\">\r\n <thead className=\"bg-gray-50 dark:bg-gray-700/60\">\r\n <tr>\r\n {table_head.map((col) => (\r\n <th\r\n key={col.key}\r\n className={`px-6 py-4 text-left text-xs font-medium text-black dark:text-white uppercase tracking-wider min-w-max max-w-[180px] truncate ${col.headClass || \"\"}`}\r\n >\r\n {col.title}\r\n </th>\r\n ))}\r\n </tr>\r\n </thead>\r\n\r\n <tbody className=\"bg-white dark:bg-gray-800 divide-y divide-gray-200 dark:divide-gray-700\">\r\n {paginatedData.length === 0 ? (\r\n <tr>\r\n <td\r\n colSpan={table_head.length}\r\n className=\"text-center py-10 text-gray-500 dark:text-gray-400\"\r\n >\r\n {emptyMessage}\r\n </td>\r\n </tr>\r\n ) : (\r\n paginatedData.map((row, index) => (\r\n <tr\r\n key={row.id || row._id || index}\r\n className=\"hover:bg-gray-50 dark:hover:bg-blue-800/10 transition\"\r\n >\r\n {table_head.map((col) => (\r\n <td\r\n key={col.key}\r\n className={`px-6 py-4 text-sm text-gray-900 dark:text-gray-100 min-w-max ${col.type == \"audio\" ? \"\" : \"max-w-[300px]\"} truncate ${\r\n isColumnClickable(col) ? \"cursor-pointer\" : \"\"\r\n }`}\r\n title={String(row[col.key] ?? \"\")}\r\n onClick={() => handleColumnClick(col, row)}\r\n >\r\n {col.render\r\n ? col.render(row, index)\r\n : handleRenderCellValue(col, row, index)}\r\n </td>\r\n ))}\r\n </tr>\r\n ))\r\n )}\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n {pagination?.enabled && filteredData.length > 0 && (\r\n <div className=\" bg-gray-50 dark:bg-gray-700/60 px-6 py-3 flex flex-wrap items-center justify-between border-t border-gray-200 dark:border-gray-600 gap-3\">\r\n <div className=\"text-sm text-gray-700 dark:text-gray-300\">\r\n Showing {(currentPage - 1) * pageSize + 1} to{\" \"}\r\n {Math.min(currentPage * pageSize, totalRecords)} of {totalRecords}{\" \"}\r\n results\r\n </div>\r\n\r\n <div className=\"flex items-center gap-4\">\r\n {/* Rows per page selector */}\r\n <div className=\"flex items-center gap-2\">\r\n <span className=\"text-sm text-gray-700 dark:text-gray-300\">\r\n Rows per page:\r\n </span>\r\n <select\r\n value={pageSize}\r\n onChange={(e) => {\r\n const newLimit = Number(e.target.value);\r\n setPageSize(newLimit);\r\n setCurrentPage(1);\r\n if (pagination.useServerSidePagination) {\r\n setServerSidePaginationData((prev) => ({\r\n ...prev,\r\n current_page: 1,\r\n rows_per_page: newLimit,\r\n }));\r\n }\r\n }}\r\n className=\"border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800 text-sm rounded-md px-2 py-1 focus:outline-none focus:ring-1 focus:ring-blue-500\"\r\n >\r\n {[2, 10, 25, 50, 100].map((n) => (\r\n <option key={n} value={n}>\r\n {n}\r\n </option>\r\n ))}\r\n </select>\r\n </div>\r\n\r\n {/* ============= Pagination ============= */}\r\n <div className=\"flex items-center gap-2\">\r\n <button\r\n onClick={() => {\r\n if (currentPage > 1) {\r\n const newPage = currentPage - 1;\r\n setCurrentPage(newPage);\r\n if (pagination.useServerSidePagination) {\r\n setServerSidePaginationData((prev) => ({\r\n ...prev,\r\n current_page: newPage,\r\n }));\r\n }\r\n }\r\n }}\r\n disabled={currentPage === 1}\r\n className=\"p-2 hover:bg-gray-200 dark:hover:bg-gray-600 rounded-md transition text-gray-500 dark:text-gray-300 disabled:opacity-50\"\r\n >\r\n <ChevronLeft className=\"h-4 w-4\" />\r\n </button>\r\n\r\n <span className=\"text-sm text-gray-800 dark:text-gray-200\">\r\n Page {currentPage} of {totalPages}\r\n </span>\r\n\r\n <button\r\n onClick={() => {\r\n if (currentPage < totalPages) {\r\n const newPage = currentPage + 1;\r\n setCurrentPage(newPage);\r\n if (pagination.useServerSidePagination) {\r\n setServerSidePaginationData((prev) => ({\r\n ...prev,\r\n current_page: newPage,\r\n }));\r\n }\r\n }\r\n }}\r\n disabled={currentPage === totalPages}\r\n className=\"p-2 hover:bg-gray-200 dark:hover:bg-gray-600 rounded-md transition text-gray-500 dark:text-gray-300 disabled:opacity-50\"\r\n >\r\n <ChevronRight className=\"h-4 w-4\" />\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Portal Menu */}\r\n {activeMenu &&\r\n createPortal(\r\n <div\r\n ref={menuRef}\r\n style={{\r\n position: \"fixed\",\r\n top: `${menuPosition.top}px`,\r\n left: `${menuPosition.left}px`,\r\n zIndex: 9999,\r\n }}\r\n className=\"w-48 bg-white dark:bg-gray-700 rounded-md shadow-lg border border-gray-200 dark:border-gray-600\"\r\n >\r\n {menuList.map((action, i) => (\r\n <button\r\n key={i}\r\n onClick={(e) =>\r\n handleActionClick(\r\n action,\r\n data.find(\r\n (d) => d.id === activeMenu || d._id == activeMenu,\r\n ),\r\n e,\r\n )\r\n }\r\n className={`w-full flex items-center gap-2 px-4 py-2 text-sm text-left hover:bg-gray-100 dark:hover:bg-gray-600 ${\r\n action.variant === \"danger\"\r\n ? \"text-red-600 dark:text-red-500\"\r\n : \"text-gray-700 dark:text-gray-200\"\r\n }`}\r\n >\r\n {action.icon && <span className=\"shrink-0\">{action.icon}</span>}\r\n {action.title}\r\n </button>\r\n ))}\r\n </div>,\r\n document.body,\r\n )}\r\n\r\n {/* Filter Drawer */}\r\n {filterConfig && (\r\n <FilterDrawer\r\n isOpen={showFilters}\r\n onClose={() => setShowFilters(false)}\r\n config={filterConfig}\r\n onApply={onFilterApply}\r\n />\r\n )}\r\n\r\n {isOpen && (\r\n <ImagePreview\r\n src={targetImage.src}\r\n alt={targetImage.alt}\r\n isOpen={isOpen}\r\n setIsOpen={setIsOpen}\r\n />\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default Table;\r\n","import React from \"react\";\r\nimport { X } from \"lucide-react\";\r\nimport Button from \"../Button/Button\";\r\n\r\nconst Modal = ({\r\n isOpen,\r\n onClose,\r\n icon,\r\n title,\r\n children,\r\n size = \"md\",\r\n actionButtons = [],\r\n actions,\r\n showDefaultClose = true,\r\n footerConfig = null,\r\n hideFooter = false,\r\n onFormSubmit = () => {},\r\n onCancel,\r\n loadingBtn = false,\r\n executeFunction = () => {},\r\n selectedItem = null,\r\n}) => {\r\n if (!isOpen) return null;\r\n\r\n // Size classes\r\n const sizeClasses = {\r\n sm: \"max-w-md\",\r\n md: \"max-w-lg\",\r\n lg: \"max-w-2xl\",\r\n xl: \"max-w-4xl\",\r\n full: \"max-w-full\",\r\n };\r\n\r\n return (\r\n <div className=\"fixed inset-0 z-50 flex items-center justify-center p-4\">\r\n {/* Backdrop */}\r\n <div\r\n className=\"fixed inset-0 bg-gray-500 opacity-75\"\r\n onClick={() => onClose()}\r\n ></div>\r\n\r\n {/* Modal container */}\r\n <div\r\n className={`relative bg-white rounded-lg shadow-xl w-full ${\r\n sizeClasses[size] || sizeClasses.md\r\n } max-h-[90vh] flex flex-col dark:bg-gray-800`}\r\n >\r\n {/* Header */}\r\n <div className=\"flex items-center justify-between p-4 border-b border-gray-200 dark:border-gray-700 flex-shrink-0\">\r\n <div className=\"flex items-center gap-1\">\r\n {icon && <span>{icon}</span>}\r\n <h3 className=\"text-lg font-medium text-gray-900 dark:text-white\">\r\n {title}\r\n </h3>\r\n </div>\r\n\r\n <button\r\n onClick={() => onClose()}\r\n className=\"text-gray-400 hover:text-gray-600 dark:hover:text-gray-300\"\r\n >\r\n <X className=\"w-6 h-6\" />\r\n </button>\r\n </div>\r\n\r\n {/* Content */}\r\n <div className=\"flex-1 overflow-y-auto p-4\">{children}</div>\r\n\r\n {/* Footer */}\r\n {/* {!hideFooter && (actions || footerConfig || showDefaultClose) && (\r\n <div className=\"px-4 py-3 flex justify-end gap-3 border-t border-gray-200 dark:border-gray-700 sm:px-6\">\r\n {actions}\r\n\r\n {footerConfig && (\r\n <>\r\n {footerConfig.cancelButton && (\r\n <Button\r\n onClick={() => (onCancel() || onClose())}\r\n disabled={loadingBtn}\r\n variant=\"contained\"\r\n color=\"default\"\r\n >\r\n {footerConfig.cancelText || \"Cancel\"}\r\n </Button>\r\n )}\r\n\r\n {footerConfig.submitButton && (\r\n <Button\r\n onClick={onFormSubmit}\r\n disabled={loadingBtn}\r\n variant=\"contained\"\r\n color={footerConfig.color || \"primary\"}\r\n className=\"min-w-[100px]\"\r\n >\r\n {loadingBtn ? (\r\n <div className=\"flex items-center\">\r\n <div className=\"animate-spin rounded-full h-4 w-4 border-2 border-white/30 border-t-2 border-t-white mr-2\"></div>\r\n {footerConfig.submitText || \"Submit\"}...\r\n </div>\r\n ) : (\r\n footerConfig.submitText || \"Submit\"\r\n )}\r\n </Button>\r\n )}\r\n </>\r\n )}\r\n\r\n {showDefaultClose && !actions && !footerConfig && (\r\n <Button onClick={() => onClose()} variant=\"outlined\">\r\n Close\r\n </Button>\r\n )}\r\n </div>\r\n )} */}\r\n\r\n {actionButtons.length > 0 && (\r\n <div className=\"px-4 py-3 flex justify-end gap-3 border-t border-gray-200 dark:border-gray-700 sm:px-6\">\r\n {actionButtons.map((btn) => (\r\n <Button\r\n onClick={(e) => {\r\n if (btn.type == \"submit\") {\r\n onFormSubmit(e);\r\n } else {\r\n executeFunction(\r\n () => btn?.onClick?.(e, selectedItem),\r\n (resp) => onClose?.(resp),\r\n );\r\n }\r\n }}\r\n disabled={loadingBtn || btn.disabled}\r\n variant={btn.variant || \"contained\"}\r\n color={btn.color || \"primary\"}\r\n className={`min-w-[100px] ${btn.className}`}\r\n type={btn.type || \"button\"}\r\n >\r\n {loadingBtn ? (\r\n <div className=\"flex items-center\">\r\n <div className=\"animate-spin rounded-full h-4 w-4 border-2 border-white/30 border-t-2 border-t-white mr-2\"></div>\r\n {btn.label || \"Submit\"}...\r\n </div>\r\n ) : (\r\n btn.label || \"Submit\"\r\n )}\r\n </Button>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default Modal;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport RenderFields from \"./components/RenderFields\";\r\n\r\nconst Form = ({ config, onSubmit, initialData = {}, type = \"add\" }) => {\r\n const { formClass = \"grid grid-cols-12 gap-4\", formFields = [] } =\r\n config || {};\r\n\r\n const [formData, setFormData] = useState(initialData);\r\n\r\n useEffect(() => {\r\n setFormData(initialData);\r\n }, []);\r\n\r\n const handleChange = (key, value) => {\r\n setFormData((prev) => ({ ...prev, [key]: value }));\r\n };\r\n\r\n const handleSubmit = (e) => {\r\n e.preventDefault();\r\n const form = e.target;\r\n\r\n if (!form.checkValidity()) {\r\n form.reportValidity();\r\n return;\r\n }\r\n\r\n onSubmit(formData);\r\n };\r\n\r\n return (\r\n <form\r\n id={\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 { User } from \"lucide-react\";\r\nimport React, { useState } from \"react\";\r\nimport Chip from \"../Chip/Chip\";\r\nimport { formatDate } from \"../../lib/utils\";\r\nimport ImagePreview from \"../Table/components/ImagePreview\";\r\n\r\nexport default function Details({ data, config }) {\r\n const { fields, containerClass } = config;\r\n\r\n // image preview\r\n const [targetImage, setTargetImage] = useState(null);\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const openPreview = (image) => {\r\n setTargetImage(image);\r\n setIsOpen(true);\r\n };\r\n\r\n const DetailRow = ({ col }) => {\r\n let Icon = col?.icon;\r\n let label = col.label;\r\n let value = data[col.key];\r\n let type = col.type;\r\n let variant = col.variant || \"outline\";\r\n let color = col.defaultColor;\r\n\r\n if (type === \"chip\" && col.chipOptions?.length > 0) {\r\n let chipObj = col?.chipOptions.find((obj) => obj.value == value);\r\n if (chipObj) {\r\n value = chipObj.label;\r\n color = chipObj.color;\r\n }\r\n }\r\n\r\n return (\r\n <div\r\n className={`col-span-12 flex items-center space-x-4 p-4 rounded-xl \r\n bg-gray-100 dark:bg-gray-900 ${col.blockClass || \"\"}`}\r\n >\r\n {Icon && <div className=\"flex-shrink-0\">{Icon}</div>}\r\n\r\n <div className=\"flex-1 min-w-0\">\r\n <p className=\"text-sm font-medium text-gray-500 dark:text-gray-400\">\r\n {label}\r\n </p>\r\n\r\n {/* CHIP */}\r\n {type === \"chip\" ? (\r\n <Chip\r\n label={value}\r\n variant={variant}\r\n color={color}\r\n className=\"mt-1\"\r\n />\r\n ) : /* TINY EDITOR */\r\n type === \"tinyEditor\" ? (\r\n <p\r\n className=\"mt-1 text-sm text-gray-900 dark:text-white break-words\"\r\n dangerouslySetInnerHTML={{\r\n __html: value,\r\n }}\r\n ></p>\r\n ) : type === \"audio\" ? (\r\n value ? (\r\n <audio\r\n key={value} // 🔥 ensures latest audio reload\r\n controls\r\n src={value}\r\n onClick={(e) => e.stopPropagation()}\r\n className=\"shadow-md rounded-full\"\r\n />\r\n ) : (\r\n <p className=\"mt-1 text-sm text-gray-400\">N/A</p>\r\n )\r\n ) : (\r\n /* DEFAULT */\r\n <p className=\"mt-1 text-sm text-gray-900 dark:text-white break-words\">\r\n {type == \"date\" ? (\r\n <span>{formatDate(value, col.format || \"DD MMM YYYY\")}</span>\r\n ) : (\r\n value || \"N/A\"\r\n )}\r\n </p>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n const GroupRow = ({ col }) => {\r\n let title = data[col.titleKey];\r\n let subtitle = data[col.subtitleKey];\r\n let image = data[col.imageKey];\r\n let fallback_icon = data[col.fallback_icon];\r\n\r\n return (\r\n <div\r\n className={`col-span-12 flex items-center space-x-4 p-4 rounded-xl \r\n bg-gray-100 dark:bg-gray-900 \r\n ${col.blockClass}`}\r\n >\r\n {image ? (\r\n <img\r\n src={image}\r\n alt={title}\r\n onClick={() => openPreview({ src: image, alt: title })}\r\n className=\"w-16 h-16 cursor-pointer rounded-full object-cover border-2 border-gray-200 dark:border-gray-700\"\r\n />\r\n ) : fallback_icon ? (\r\n fallback_icon\r\n ) : (\r\n <div className=\"w-16 h-16 flex items-center justify-center rounded-full border-2 border-gray-300 dark:border-gray-700 bg-gray-200 dark:bg-gray-600\">\r\n <User className=\"w-8 h-8 text-gray-400\" />\r\n </div>\r\n )}\r\n\r\n <div>\r\n <h3 className=\"text-xl font-semibold text-gray-900 dark:text-white\">\r\n {title}\r\n </h3>\r\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">{subtitle}</p>\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n return (\r\n <>\r\n {isOpen && (\r\n <ImagePreview\r\n src={targetImage.src}\r\n alt={targetImage.alt}\r\n isOpen={isOpen}\r\n setIsOpen={setIsOpen}\r\n />\r\n )}\r\n\r\n <div className={`grid grid-cols-12 gap-4 ${containerClass || \"\"}`}>\r\n {fields.map((col) =>\r\n col.type == \"group\" ? (\r\n <GroupRow col={col} />\r\n ) : (\r\n <DetailRow col={col} />\r\n ),\r\n )}\r\n </div>\r\n </>\r\n );\r\n}\r\n","import React, { useEffect, useMemo, useState } from \"react\";\r\nimport { Plus, X } from \"lucide-react\";\r\nimport Table from \"./Table/Table\";\r\nimport Modal from \"./Modal/Modal\";\r\nimport Form from \"./Form/Form\";\r\nimport Button from \"./Button/Button\";\r\nimport { Icon } from \"@iconify/react\";\r\nimport { enqueueSnackbar } from \"notistack\";\r\nimport Details from \"./Details/Details\";\r\nimport PropTypes from \"prop-types\";\r\nimport { SnackbarProvider } from \"notistack\";\r\n\r\nconst CrudPage = ({ config }) => {\r\n const {\r\n title,\r\n fetchData = async () => {},\r\n isStaticData = false,\r\n tableConfig = {},\r\n modalConfig = {},\r\n filterConfig,\r\n } = config;\r\n\r\n const [loading, setLoading] = useState(true);\r\n const [formLoading, setFormLoading] = useState(false);\r\n\r\n const [listingData, setListingData] = useState([]);\r\n const [paginationData, setPaginationData] = useState(null);\r\n const [serverSidePaginationData, setServerSidePaginationData] = useState({\r\n search: \"\",\r\n rows_per_page: 50,\r\n current_page: 1,\r\n });\r\n const [filterData, setFilterData] = useState({});\r\n const [changeFilterData, setChangeFilterData] = useState(false);\r\n\r\n const [showAdd, setShowAdd] = useState(false);\r\n const [showEdit, setShowEdit] = useState(false);\r\n const [showDelete, setShowDelete] = useState(false);\r\n const [showView, setShowView] = useState(false);\r\n const [selectedItem, setSelectedItem] = useState(null);\r\n\r\n const handleMenuAction = (action, item) => {\r\n if (action === \"edit\") {\r\n setSelectedItem(item);\r\n setShowEdit(true);\r\n } else if (action === \"view\") {\r\n setSelectedItem(item);\r\n setShowView(true);\r\n } else if (action === \"delete\") {\r\n setSelectedItem(item);\r\n setShowDelete(true);\r\n }\r\n };\r\n\r\n const executeAction = async (\r\n action,\r\n onSuccess,\r\n success_message = \"\",\r\n error_message = \"\",\r\n ) => {\r\n setFormLoading(true);\r\n\r\n try {\r\n const resp = await action?.();\r\n if (success_message || resp.message) {\r\n enqueueSnackbar(success_message || resp.message, {\r\n variant: \"success\",\r\n });\r\n }\r\n onSuccess?.(resp);\r\n } catch (error) {\r\n if (error_message || error.message) {\r\n enqueueSnackbar(error_message || error.message, { variant: \"error\" });\r\n }\r\n } finally {\r\n setFormLoading(false);\r\n }\r\n };\r\n\r\n const handleAddResult = (resp) => {\r\n let newObj = resp.newObject;\r\n if (isStaticData) {\r\n setListingData((prev) => [newObj, ...prev]);\r\n setPaginationData((prev) => ({\r\n ...prev,\r\n current_page: 1,\r\n }));\r\n } else {\r\n setServerSidePaginationData((prev) => ({\r\n ...prev,\r\n current_page: 1,\r\n }));\r\n if (serverSidePaginationData.current_page == 1) {\r\n handleGetListing();\r\n }\r\n }\r\n setShowAdd(false);\r\n };\r\n\r\n const handleEditResult = (resp) => {\r\n let updatedObj = resp.newObject;\r\n let targetObj = resp.targetObject;\r\n if (isStaticData) {\r\n setListingData((prev) =>\r\n prev.map((item) =>\r\n item.id === targetObj.id ? { ...item, ...updatedObj } : item,\r\n ),\r\n );\r\n } else {\r\n handleGetListing();\r\n }\r\n setShowEdit(false);\r\n };\r\n\r\n const handleDeleteResult = (resp) => {\r\n if (!resp) {\r\n setShowDelete(false);\r\n setSelectedItem(null);\r\n return;\r\n }\r\n\r\n if (isStaticData) {\r\n setListingData((prev) =>\r\n prev.filter((item) => item.id !== resp.targetObject.id),\r\n );\r\n } else {\r\n if (\r\n listingData.length == 1 &&\r\n serverSidePaginationData.current_page > 1\r\n ) {\r\n setServerSidePaginationData((prev) => ({\r\n ...prev,\r\n current_page: prev.current_page - 1,\r\n }));\r\n } else {\r\n handleGetListing();\r\n }\r\n }\r\n setShowDelete(false);\r\n setSelectedItem(null);\r\n };\r\n\r\n const handleAddFormSubmit = (formData) =>\r\n executeAction(\r\n () => modalConfig?.addModal?.handleSubmit?.(formData),\r\n handleAddResult,\r\n );\r\n\r\n const handleEditFormSubmit = (formData) =>\r\n executeAction(\r\n () => modalConfig?.editModal?.handleSubmit?.(formData, selectedItem),\r\n handleEditResult,\r\n );\r\n\r\n const handleDeleteConfirm = () =>\r\n executeAction(\r\n () => modalConfig?.deleteModal?.action?.(selectedItem),\r\n handleDeleteResult,\r\n );\r\n\r\n const handleGetListing = async () => {\r\n setLoading(true);\r\n\r\n fetchData?.({ ...serverSidePaginationData, ...filterData })\r\n .then((resp) => {\r\n setListingData(resp.data);\r\n setPaginationData(resp.pagination);\r\n })\r\n .catch((error) => {\r\n enqueueSnackbar(error.message, { variant: \"error\" });\r\n })\r\n .finally(() => {\r\n setLoading(false);\r\n });\r\n };\r\n\r\n const handleFilterData = (data) => {\r\n setFilterData((prev) => ({\r\n ...data,\r\n }));\r\n if (tableConfig?.filter?.useServerSideFilters) {\r\n setChangeFilterData((prev) => !prev);\r\n }\r\n };\r\n\r\n const filterByMatchingFields = (data, filters) => {\r\n return data.filter((item) =>\r\n Object.entries(filters).every(([key, value]) => item[key] === value),\r\n );\r\n };\r\n\r\n const filteredData = useMemo(() => {\r\n if (tableConfig?.filter?.useServerSideFilters) return listingData;\r\n return filterByMatchingFields(listingData, filterData);\r\n }, [listingData, filterData]);\r\n\r\n useEffect(() => {\r\n handleGetListing();\r\n }, [\r\n serverSidePaginationData.search,\r\n serverSidePaginationData.rows_per_page,\r\n serverSidePaginationData.current_page,\r\n changeFilterData,\r\n ]);\r\n\r\n return (\r\n <SnackbarProvider\r\n maxSnack={3}\r\n anchorOrigin={{\r\n vertical: \"bottom\",\r\n horizontal: \"right\",\r\n }}\r\n autoHideDuration={3000}\r\n action={(snackbarKey) => (\r\n <button\r\n onClick={() => {\r\n window.dispatchEvent(\r\n new CustomEvent(\"closeSnackbar\", { detail: snackbarKey }),\r\n );\r\n }}\r\n className=\"p-1 hover:bg-white/20 rounded-full transition-colors duration-200 text-white flex items-center justify-center\"\r\n >\r\n <X className=\"h-4 w-4\" />\r\n </button>\r\n )}\r\n >\r\n <div>\r\n {/* Header */}\r\n <div className=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 mb-3\">\r\n <div>\r\n <h1 className=\"text-2xl font-bold text-gray-900 dark:text-white\">\r\n {title}\r\n </h1>\r\n <p className=\"text-md text-gray-600 dark:text-gray-400\">\r\n {config?.description}\r\n </p>\r\n </div>\r\n <div className=\"flex items-center space-x-3\">\r\n <Button\r\n onClick={() => setShowAdd(true)}\r\n variant=\"contained\"\r\n color=\"primary\"\r\n >\r\n <Plus className=\"w-4 h-4 mr-2\" />\r\n {config.buttonText || \"Add New\"}\r\n </Button>\r\n </div>\r\n </div>\r\n\r\n {/* Table */}\r\n <Table\r\n config={{\r\n ...tableConfig,\r\n pagination: {\r\n ...tableConfig.pagination,\r\n ...paginationData,\r\n },\r\n data: filteredData,\r\n setServerSidePaginationData: setServerSidePaginationData,\r\n onMenuAction: handleMenuAction,\r\n filterConfig,\r\n onFilterApply: handleFilterData,\r\n loading,\r\n }}\r\n />\r\n\r\n {/* Add Modal */}\r\n <Modal\r\n isOpen={showAdd}\r\n onClose={() => {\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 />\r\n </Modal>\r\n\r\n {/* Delete Modal */}\r\n {showDelete && (\r\n <Modal\r\n isOpen={showDelete}\r\n onClose={(resp) => {\r\n handleDeleteResult(resp);\r\n }}\r\n icon={\r\n modalConfig.deleteModal?.icon || (\r\n <Icon icon=\"ph:warning-bold\" className=\"w-6 h-6 text-red-500\" />\r\n )\r\n }\r\n title={modalConfig.deleteModal?.title || \"Confirm Delete\"}\r\n size={modalConfig.deleteModal?.size || \"md\"}\r\n loading={formLoading}\r\n actionButtons={modalConfig.deleteModal.actionButtons}\r\n executeFunction={executeAction}\r\n selectedItem={selectedItem}\r\n >\r\n <div className=\"flex items-center space-x-2 py-3\">\r\n <div>\r\n <p className=\"text-md text-gray-700 dark:text-white\">\r\n {modalConfig.deleteModal?.confirmText ||\r\n \"Are you sure you want to delete this item?\"}\r\n </p>\r\n {modalConfig.deleteModal?.referenceKey && (\r\n <p className=\"text-md font-semibold text-gray-700 dark:text-white\">\r\n {selectedItem[modalConfig.deleteModal?.referenceKey]}\r\n </p>\r\n )}\r\n </div>\r\n </div>\r\n </Modal>\r\n )}\r\n\r\n {/* View Detail Modal */}\r\n {modalConfig.viewModal && (\r\n <Modal\r\n isOpen={showView}\r\n onClose={() => {\r\n setShowView(false);\r\n setSelectedItem(null);\r\n }}\r\n icon={modalConfig.viewModal?.icon}\r\n title={modalConfig.viewModal?.title || \"View Details\"}\r\n size={modalConfig.viewModal?.size || \"lg\"}\r\n footerConfig={modalConfig?.viewModal.footer}\r\n >\r\n {modalConfig.viewModal?.component ? (\r\n <modalConfig.viewModal.component data={selectedItem} />\r\n ) : (\r\n <Details\r\n data={selectedItem}\r\n config={modalConfig.viewModal || {}}\r\n />\r\n )}\r\n </Modal>\r\n )}\r\n </div>\r\n </SnackbarProvider>\r\n );\r\n};\r\n\r\nconst optionType = PropTypes.shape({\r\n value: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.number,\r\n PropTypes.bool,\r\n ]).isRequired,\r\n label: PropTypes.string.isRequired,\r\n color: PropTypes.string,\r\n});\r\n\r\nconst actionButtonType = PropTypes.shape({\r\n type: PropTypes.string.isRequired,\r\n label: PropTypes.string.isRequired,\r\n color: PropTypes.string,\r\n variant: PropTypes.string,\r\n onClick: PropTypes.func,\r\n});\r\n\r\nconst menuActionType = PropTypes.shape({\r\n title: PropTypes.string.isRequired,\r\n type: PropTypes.string.isRequired,\r\n variant: PropTypes.string,\r\n icon: PropTypes.node,\r\n});\r\n\r\nconst tableHeadType = PropTypes.shape({\r\n key: PropTypes.string.isRequired,\r\n title: PropTypes.string,\r\n type: PropTypes.string,\r\n imageKey: PropTypes.string,\r\n titleKey: PropTypes.string,\r\n subtitleKey: PropTypes.string,\r\n onClickDetails: PropTypes.bool,\r\n variant: PropTypes.string,\r\n chipOptions: PropTypes.arrayOf(optionType),\r\n defaultColor: PropTypes.string,\r\n className: PropTypes.string,\r\n format: PropTypes.string,\r\n menuList: PropTypes.arrayOf(menuActionType),\r\n});\r\n\r\nconst formFieldType = PropTypes.shape({\r\n key: PropTypes.string.isRequired,\r\n label: PropTypes.string,\r\n type: PropTypes.string.isRequired,\r\n required: PropTypes.bool,\r\n minLength: PropTypes.number,\r\n parentClass: PropTypes.string,\r\n search: PropTypes.bool,\r\n multiple: PropTypes.bool,\r\n dropdownMaxHeight: PropTypes.string,\r\n dragDrop: PropTypes.bool,\r\n countriesList: PropTypes.bool,\r\n defaultCountry: PropTypes.string,\r\n placeholder: PropTypes.string,\r\n rows: PropTypes.number,\r\n text: PropTypes.string,\r\n editorKey: PropTypes.string,\r\n options: PropTypes.arrayOf(optionType),\r\n});\r\n\r\nconst viewFieldType = PropTypes.shape({\r\n key: PropTypes.string,\r\n label: PropTypes.string,\r\n type: PropTypes.string,\r\n imageKey: PropTypes.string,\r\n titleKey: PropTypes.string,\r\n subtitleKey: PropTypes.string,\r\n blockClass: PropTypes.string,\r\n icon: PropTypes.node,\r\n variant: PropTypes.string,\r\n chipOptions: PropTypes.arrayOf(optionType),\r\n defaultColor: PropTypes.string,\r\n className: PropTypes.string,\r\n format: PropTypes.string,\r\n});\r\n\r\nCrudPage.propTypes = {\r\n config: PropTypes.shape({\r\n title: PropTypes.string.isRequired,\r\n description: PropTypes.string,\r\n buttonText: PropTypes.string,\r\n fetchData: PropTypes.func.isRequired,\r\n isStaticData: PropTypes.bool,\r\n\r\n /* ================= TABLE CONFIG ================= */\r\n\r\n tableConfig: PropTypes.shape({\r\n table_head: PropTypes.arrayOf(tableHeadType).isRequired,\r\n\r\n search: PropTypes.shape({\r\n enabled: PropTypes.bool,\r\n useServerSideSearch: PropTypes.bool,\r\n searchKeys: PropTypes.arrayOf(PropTypes.string),\r\n }),\r\n\r\n pagination: PropTypes.shape({\r\n enabled: PropTypes.bool,\r\n useServerSidePagination: PropTypes.bool,\r\n }),\r\n\r\n filter: PropTypes.shape({\r\n enabled: PropTypes.bool,\r\n useServerSideFilters: PropTypes.bool,\r\n }),\r\n }).isRequired,\r\n\r\n /* ================= MODAL CONFIG ================= */\r\n\r\n modalConfig: PropTypes.shape({\r\n addModal: PropTypes.shape({\r\n title: PropTypes.string.isRequired,\r\n size: PropTypes.string,\r\n formClass: PropTypes.string,\r\n formFields: PropTypes.arrayOf(formFieldType),\r\n handleSubmit: PropTypes.func.isRequired,\r\n actionButtons: PropTypes.arrayOf(actionButtonType),\r\n }),\r\n\r\n editModal: PropTypes.shape({\r\n title: PropTypes.string.isRequired,\r\n size: PropTypes.string,\r\n formClass: PropTypes.string,\r\n formFields: PropTypes.arrayOf(formFieldType),\r\n handleSubmit: PropTypes.func.isRequired,\r\n actionButtons: PropTypes.arrayOf(actionButtonType),\r\n }),\r\n\r\n deleteModal: PropTypes.shape({\r\n title: PropTypes.string.isRequired,\r\n size: PropTypes.string,\r\n confirmText: PropTypes.string,\r\n referenceKey: PropTypes.string,\r\n actionButtons: PropTypes.arrayOf(actionButtonType),\r\n }),\r\n\r\n viewModal: PropTypes.shape({\r\n title: PropTypes.string.isRequired,\r\n size: PropTypes.string,\r\n\r\n // 👇 This covers your commented code:\r\n component: PropTypes.elementType, // for custom component like TeamMemberDetail\r\n\r\n fields: PropTypes.arrayOf(viewFieldType),\r\n\r\n footer: PropTypes.shape({\r\n cancelButton: PropTypes.bool,\r\n cancelText: PropTypes.string,\r\n }),\r\n }),\r\n }),\r\n\r\n /* ================= FILTER CONFIG ================= */\r\n\r\n filterConfig: PropTypes.shape({\r\n fields: PropTypes.arrayOf(formFieldType),\r\n }),\r\n }).isRequired,\r\n};\r\n\r\nexport default CrudPage;\r\n","import React, { useEffect } from \"react\";\r\nimport CrudPage from \"./components/CrudPage\";\r\n\r\n// Inject styles dynamically\r\nconst injectStyles = () => {\r\n if (typeof document === \"undefined\") return;\r\n \r\n // Check if styles already loaded\r\n if (document.getElementById(\"react-admin-crud-manager-styles\")) return;\r\n \r\n // Create style tag\r\n const style = document.createElement(\"style\");\r\n style.id = \"react-admin-crud-manager-styles\";\r\n \r\n // Add all CSS rules\r\n const cssRules = `\r\n .no-spinner::-webkit-outer-spin-button,\r\n .no-spinner::-webkit-inner-spin-button {\r\n -webkit-appearance: none;\r\n margin: 0;\r\n }\r\n \r\n .no-spinner {\r\n -moz-appearance: textfield;\r\n }\r\n \r\n .tox.tox-tinymce .tox-edit-area::before {\r\n border: 0 !important;\r\n box-shadow: none !important;\r\n }\r\n `;\r\n \r\n style.textContent = cssRules;\r\n document.head.appendChild(style);\r\n};\r\n\r\nexport default function Crud(props) {\r\n useEffect(() => {\r\n injectStyles();\r\n }, []);\r\n\r\n return (\r\n <>\r\n <CrudPage config={props.config} />\r\n </>\r\n );\r\n}\r\n"],"names":["formatDate","dateString","format","date","pad","n","map","token","searchLocalData","data","searchTerm","searchKeys","lowerSearchTerm","extractValues","obj","item","valuesToSearch","key","val","Button","React","className","variant","color","size","fullWidth","children","props","ref","baseStyles","sizes","colorVariants","colorStyles","_a","sizeStyles","combinedClassName","jsx","InputLabel","label","required","Fragment","jsxs","Select","options","value","defaultValue","onChange","placeholder","disabled","search","name","parentClass","multiple","dropdownMaxHeight","open","setOpen","useState","setSearchTerm","showAboveState","setShowAboveState","dropdownRef","useRef","searchInputRef","initialVal","normalize","normalizedValue","filteredOptions","option","isSelected","optionValue","normalized","useEffect","handleClickOutside","event","rect","spaceBelow","handleOptionClick","finalValue","exists","newValues","v","selectedLabels","opt","ChevronDown","Search","e","Check","Switch","text","radioOptions","idx","countries","PhoneInput","countriesList","defaultCountry","find_country_with_code","selectedCountry","setSelectedCountry","fullNumber","setFullNumber","match","c","a","b","handleNumberChange","input","handleCountrySelect","country","filteredCountries","formatted","TextArea","ImagePicker","accept","id","dragDrop","image","setImage","isDragging","setIsDragging","inputRef","handleFileChange","files","file","preview","imgObj","removeImage","handleDragOver","handleDragLeave","handleDrop","handleButtonClick","Icon","Input","type","onKeyDown","negativeNumberAllow","showPassword","setShowPassword","handleKeyDown","prev","TinyEditor","editorKey","height","inline","plugins","toolbar","menubar","fontFamily","initConfig","imageUploadHandler","Editor","blobInfo","resolve","reject","url","error","content","Checkbox","multiSelect","isChecked","handleSingleChange","handleMultipleChange","checked","newValue","index","AudioPicker","ButtonComponent","buttonProps","audio","setAudio","cleanupAudio","removeAudio","RenderFields","field","formData","handleChange","rows","inputClass","minLength","finalPlaceholder","baseClass","FilterDrawer","isOpen","onClose","config","onApply","filters","setFilters","handleApply","handleReset","X","BADGE_COLORS","BADGE_VARIANTS","Chip","colorConfig","variantKey","variantClasses","TableSkeleton","columns","_","rowIndex","colIndex","ImagePreview","src","alt","setIsOpen","closePreview","handleEsc","Table","table_head","loading","filter","pagination","emptyMessage","onMenuAction","setServerSidePaginationData","onFilterApply","filterConfig","activeMenu","setActiveMenu","menuList","setMenuList","menuPosition","setMenuPosition","showFilters","setShowFilters","targetImage","setTargetImage","filteredData","useMemo","currentPage","setCurrentPage","pageSize","setPageSize","totalRecords","setTotalRecords","totalPages","paginatedData","start","menuRef","buttonRefs","searchTimeoutRef","handleSearchChange","handleActionClick","action","handleMenuToggle","itemId","menu_list","button","menuWidth","menuHeight","viewportWidth","viewportHeight","left","top","calculateRowNumber","openPreview","renderAvatar","imageSrc","imageAlt","fallback_icon","User","renderAudio","audioSrc","Music","renderGroupCell","row","col","handleRenderChip","chipObj","handleRenderCellValue","el","EllipsisVertical","handleColumnClick","isColumnClickable","handleScroll","Filter","newLimit","newPage","ChevronLeft","ChevronRight","createPortal","i","d","Modal","icon","title","actionButtons","actions","showDefaultClose","footerConfig","hideFooter","onFormSubmit","onCancel","loadingBtn","executeFunction","selectedItem","sizeClasses","btn","resp","Form","onSubmit","initialData","formClass","formFields","setFormData","handleSubmit","form","Details","fields","containerClass","DetailRow","GroupRow","subtitle","CrudPage","fetchData","isStaticData","tableConfig","modalConfig","setLoading","formLoading","setFormLoading","listingData","setListingData","paginationData","setPaginationData","serverSidePaginationData","filterData","setFilterData","changeFilterData","setChangeFilterData","showAdd","setShowAdd","showEdit","setShowEdit","showDelete","setShowDelete","showView","setShowView","setSelectedItem","handleMenuAction","executeAction","onSuccess","success_message","error_message","enqueueSnackbar","handleAddResult","newObj","handleGetListing","handleEditResult","updatedObj","targetObj","handleDeleteResult","handleAddFormSubmit","_b","handleEditFormSubmit","handleFilterData","filterByMatchingFields","SnackbarProvider","snackbarKey","Plus","_c","_d","_e","_f","_g","_h","_i","_j","_k","_l","_m","_n","_o","_p","optionType","PropTypes","actionButtonType","menuActionType","tableHeadType","formFieldType","viewFieldType","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/Form/components/RenderFields.jsx","../src/components/Filter/FilterDrawer.jsx","../src/components/Chip/Chip.jsx","../src/components/Table/components/TableSkeleton.jsx","../src/components/Table/components/ImagePreview.jsx","../src/components/Table/Table.jsx","../src/components/Modal/Modal.jsx","../src/components/Form/Form.jsx","../src/components/Details/Details.jsx","../src/components/CrudPage.jsx","../src/index.jsx"],"sourcesContent":["// ======= Format Date : Jan 15, 2024 =======\r\n\r\nexport const formatDate = (dateString, format = \"DD MMM YYYY\") => {\r\n if (!dateString) return \"N/A\";\r\n\r\n const date = new Date(dateString);\r\n if (isNaN(date)) return \"Invalid Date\";\r\n\r\n const pad = (n) => String(n).padStart(2, \"0\");\r\n\r\n const map = {\r\n YYYY: date.getFullYear(),\r\n YY: String(date.getFullYear()).slice(-2),\r\n\r\n MMMM: date.toLocaleString(\"en-US\", { month: \"long\" }),\r\n MMM: date.toLocaleString(\"en-US\", { month: \"short\" }),\r\n MM: pad(date.getMonth() + 1),\r\n M: date.getMonth() + 1,\r\n\r\n DD: pad(date.getDate()),\r\n D: date.getDate(),\r\n\r\n dddd: date.toLocaleString(\"en-US\", { weekday: \"long\" }),\r\n ddd: date.toLocaleString(\"en-US\", { weekday: \"short\" }),\r\n\r\n HH: pad(date.getHours()),\r\n hh: pad(date.getHours() % 12 || 12),\r\n\r\n mm: pad(date.getMinutes()),\r\n ss: pad(date.getSeconds()),\r\n\r\n A: date.getHours() >= 12 ? \"PM\" : \"AM\",\r\n };\r\n\r\n return format.replace(\r\n /YYYY|YY|MMMM|MMM|MM|M|DD|D|dddd|ddd|HH|hh|mm|ss|A/g,\r\n (token) => map[token],\r\n );\r\n};\r\n\r\n// =========== Local Search function ===========\r\nexport const searchLocalData = (data, searchTerm, searchKeys = []) => {\r\n if (!searchTerm?.trim()) return data;\r\n\r\n const lowerSearchTerm = searchTerm.toLowerCase();\r\n\r\n const extractValues = (obj) => {\r\n if (obj == null) return [];\r\n if (typeof obj === \"object\") {\r\n return Object.values(obj).flatMap(extractValues);\r\n }\r\n return [String(obj)];\r\n };\r\n\r\n return data.filter((item) => {\r\n let valuesToSearch = [];\r\n\r\n // ✅ If specific keys are provided → search only in those keys\r\n if (searchKeys.length > 0) {\r\n searchKeys.forEach((key) => {\r\n if (item[key] !== undefined) {\r\n valuesToSearch.push(...extractValues(item[key]));\r\n }\r\n });\r\n } else {\r\n // ✅ Otherwise → search in entire object\r\n valuesToSearch = extractValues(item);\r\n }\r\n\r\n return valuesToSearch.some((val) =>\r\n val.toLowerCase().includes(lowerSearchTerm),\r\n );\r\n });\r\n};\r\n","import React from \"react\";\r\n\r\nconst Button = React.forwardRef(\r\n (\r\n {\r\n className = \"\",\r\n variant = \"contained\",\r\n color = \"default\",\r\n size = \"default\",\r\n fullWidth = false,\r\n children,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const baseStyles =\r\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\";\r\n\r\n const sizes = {\r\n sm: \"h-8 px-3 rounded-md text-sm\",\r\n md: \"h-9 px-4 rounded-md text-sm\",\r\n lg: \"h-11 px-6 rounded-md text-base\",\r\n xl: \"h-12 px-8 rounded-lg text-lg\",\r\n default: \"h-9 px-4 rounded-md text-sm\",\r\n };\r\n\r\n const colorVariants = {\r\n primary: {\r\n contained:\r\n \"bg-primary text-white hover:bg-primary-600 focus:ring-primary-500 shadow-sm\",\r\n outlined:\r\n \"border border-primary bg-transparent text-primary hover:bg-primary-50 focus:ring-primary-500\",\r\n text: \"bg-transparent text-primary hover:bg-primary-50 focus:ring-primary-500\",\r\n },\r\n success: {\r\n contained:\r\n \"bg-green-600 text-white hover:bg-green-700 focus:ring-green-500 shadow-sm\",\r\n outlined:\r\n \"border border-green-600 bg-transparent text-green-600 hover:bg-green-50 focus:ring-green-500\",\r\n text: \"bg-transparent text-green-600 hover:bg-green-50 focus:ring-green-500\",\r\n },\r\n error: {\r\n contained:\r\n \"bg-red-600 text-white hover:bg-red-700 focus:ring-red-500 shadow-sm\",\r\n outlined:\r\n \"border border-red-600 bg-transparent text-red-600 hover:bg-red-50 focus:ring-red-500\",\r\n text: \"bg-transparent text-red-600 hover:bg-red-50 focus:ring-red-500\",\r\n },\r\n default: {\r\n contained:\r\n \"border bg-gray-200 text-gray-800 hover:bg-gray-300 focus:ring-gray-300 shadow-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-100 dark:hover:bg-gray-600 dark:focus:ring-gray-600\",\r\n outlined:\r\n \"border border-gray-300 bg-transparent text-gray-700 hover:bg-gray-100 focus:ring-gray-300 dark:border-gray-600 dark:text-gray-200 dark:hover:bg-gray-700 dark:focus:ring-gray-500\",\r\n text: \"bg-transparent text-gray-700 hover:bg-gray-100 focus:ring-gray-300 dark:text-gray-200 dark:hover:bg-gray-700 dark:focus:ring-gray-500\",\r\n },\r\n };\r\n\r\n const colorStyles =\r\n colorVariants[color]?.[variant] || colorVariants.default.contained;\r\n const sizeStyles = sizes[size];\r\n\r\n const combinedClassName = `\r\n ${baseStyles} \r\n ${colorStyles} \r\n ${sizeStyles} \r\n ${fullWidth ? \"w-full\" : \"\"} \r\n ${className}\r\n `.trim();\r\n\r\n return (\r\n <button\r\n ref={ref}\r\n type={props.type || \"button\"}\r\n className={combinedClassName}\r\n {...props}\r\n >\r\n {children}\r\n </button>\r\n );\r\n },\r\n);\r\n\r\nButton.displayName = \"Button\";\r\n\r\nexport default Button;\r\n","import React from \"react\";\r\n\r\nexport default function InputLabel({ label, required = false }) {\r\n return (\r\n <>\r\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\">\r\n {label}\r\n {required && <span className=\"ml-1\">*</span>}\r\n </label>\r\n </>\r\n );\r\n}\r\n","import React, { useState, useEffect, useRef } from \"react\";\r\nimport { ChevronDown, Search, Check } from \"lucide-react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nconst Select = ({\r\n options = [],\r\n value = \"\",\r\n 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}) => {\r\n const [open, setOpen] = useState(false);\r\n const [searchTerm, setSearchTerm] = useState(\"\");\r\n const [showAboveState, setShowAboveState] = useState(true);\r\n const dropdownRef = useRef(null);\r\n const searchInputRef = useRef(null);\r\n\r\n 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 const normalizedValue = multiple\r\n ? (initialVal || []).map(normalize)\r\n : normalize(initialVal);\r\n\r\n const filteredOptions = options.filter((option) =>\r\n option.label.toLowerCase().includes(searchTerm.toLowerCase()),\r\n );\r\n\r\n const isSelected = (optionValue) => {\r\n const normalized = normalize(optionValue);\r\n if (multiple) {\r\n return normalizedValue.includes(normalized);\r\n }\r\n return normalized === normalizedValue;\r\n };\r\n\r\n useEffect(() => {\r\n const handleClickOutside = (event) => {\r\n if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {\r\n setOpen(false);\r\n setSearchTerm(\"\");\r\n }\r\n };\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (open && dropdownRef.current) {\r\n const rect = dropdownRef.current.getBoundingClientRect();\r\n const viewportHeight = window.innerHeight;\r\n const spaceBelow = viewportHeight - rect.bottom;\r\n const dropdownHeight = 200;\r\n setShowAboveState(spaceBelow < dropdownHeight);\r\n }\r\n }, [open]);\r\n\r\n useEffect(() => {\r\n if (open && searchInputRef.current) {\r\n searchInputRef.current.focus();\r\n }\r\n }, [open]);\r\n\r\n const handleOptionClick = (optionValue) => {\r\n let finalValue = optionValue;\r\n if (optionValue === \"true\") finalValue = true;\r\n else if (optionValue === \"false\") finalValue = false;\r\n\r\n if (multiple) {\r\n const exists = normalizedValue.includes(normalize(optionValue));\r\n\r\n let newValues;\r\n if (exists) {\r\n newValues = value.filter(\r\n (v) => normalize(v) !== normalize(optionValue),\r\n );\r\n } else {\r\n newValues = [...(value || []), finalValue];\r\n }\r\n\r\n onChange(newValues);\r\n } else {\r\n onChange(finalValue);\r\n setOpen(false);\r\n }\r\n\r\n setSearchTerm(\"\");\r\n };\r\n\r\n const selectedLabels = multiple\r\n ? options\r\n .filter((opt) => isSelected(opt.value))\r\n .map((opt) => opt.label)\r\n .join(\", \")\r\n : options.find((opt) => isSelected(opt.value))?.label;\r\n\r\n 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 = ({\r\n value = true,\r\n onChange,\r\n text,\r\n options = [],\r\n label,\r\n required,\r\n name = \"\",\r\n disabled = false,\r\n parentClass = \"\",\r\n}) => {\r\n const radioOptions =\r\n options.length > 0\r\n ? options\r\n : [\r\n { label: \"Active\", value: true },\r\n { label: \"Inactive\", value: false },\r\n ];\r\n\r\n return (\r\n <>\r\n <div key={name} className={parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n <div className=\"flex items-center justify-between h-10 gap-4 bg-gray-100 dark:bg-gray-700 px-3 rounded-md border border-gray-100 dark:border-gray-600\">\r\n {/* Left Text */}\r\n {text && (\r\n <p className=\"text-xs text-gray-600 dark:text-gray-400 flex-shrink overflow-hidden text-ellipsis whitespace-nowrap max-w-[200px]\">\r\n {text}\r\n </p>\r\n )}\r\n\r\n {/* Radio Buttons */}\r\n <div className=\"flex items-center gap-6\">\r\n {radioOptions.map((opt, idx) => (\r\n <label\r\n key={idx}\r\n className=\"flex items-center gap-2 cursor-pointer select-none\"\r\n >\r\n <input\r\n type=\"radio\"\r\n name=\"switch-field\"\r\n required={required && idx === 0}\r\n value={opt.value}\r\n disabled={disabled}\r\n checked={value === opt.value}\r\n onChange={() => onChange(opt.value)}\r\n className=\"w-4 h-4 border-gray-300 cursor-pointer\"\r\n />\r\n <span className=\"text-sm text-gray-700 dark:text-white\">\r\n {opt.label}\r\n </span>\r\n </label>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default Switch;\r\n","export const countries = [\r\n { label: \"Afghanistan\", code: \"AF\", phone: \"93\" },\r\n { label: \"Aland Islands\", code: \"AX\", phone: \"358\" },\r\n { label: \"Albania\", code: \"AL\", phone: \"355\" },\r\n { label: \"Algeria\", code: \"DZ\", phone: \"213\" },\r\n { label: \"American Samoa\", code: \"AS\", phone: \"1\" },\r\n { label: \"Andorra\", code: \"AD\", phone: \"376\" },\r\n { label: \"Angola\", code: \"AO\", phone: \"244\" },\r\n { label: \"Anguilla\", code: \"AI\", phone: \"1\" },\r\n { label: \"Antarctica\", code: \"AQ\", phone: \"672\" },\r\n { label: \"Antigua and Barbuda\", code: \"AG\", phone: \"1\" },\r\n { label: \"Argentina\", code: \"AR\", phone: \"54\" },\r\n { label: \"Armenia\", code: \"AM\", phone: \"374\" },\r\n { label: \"Aruba\", code: \"AW\", phone: \"297\" },\r\n { label: \"Australia\", code: \"AU\", phone: \"61\" },\r\n { label: \"Austria\", code: \"AT\", phone: \"43\" },\r\n { label: \"Azerbaijan\", code: \"AZ\", phone: \"994\" },\r\n { label: \"Bahrain\", code: \"BH\", phone: \"973\" },\r\n { label: \"Bangladesh\", code: \"BD\", phone: \"880\" },\r\n { label: \"Barbados\", code: \"BB\", phone: \"1\" },\r\n { label: \"Belarus\", code: \"BY\", phone: \"375\" },\r\n { label: \"Belgium\", code: \"BE\", phone: \"32\" },\r\n { label: \"Belize\", code: \"BZ\", phone: \"501\" },\r\n { label: \"Benin\", code: \"BJ\", phone: \"229\" },\r\n { label: \"Bermuda\", code: \"BM\", phone: \"1\" },\r\n { label: \"Bhutan\", code: \"BT\", phone: \"975\" },\r\n { label: \"Bolivia\", code: \"BO\", phone: \"591\" },\r\n { label: \"Bonaire, Sint Eustatius and Saba\", code: \"BQ\", phone: \"599\" },\r\n { label: \"Bosnia and Herzegovina\", code: \"BA\", phone: \"387\" },\r\n { label: \"Botswana\", code: \"BW\", phone: \"267\" },\r\n { label: \"Bouvet Island\", code: \"BV\", phone: \"0055\" },\r\n { label: \"Brazil\", code: \"BR\", phone: \"55\" },\r\n { label: \"British Indian Ocean Territory\", code: \"IO\", phone: \"246\" },\r\n { label: \"Brunei\", code: \"BN\", phone: \"673\" },\r\n { label: \"Bulgaria\", code: \"BG\", phone: \"359\" },\r\n { label: \"Burkina Faso\", code: \"BF\", phone: \"226\" },\r\n { label: \"Burundi\", code: \"BI\", phone: \"257\" },\r\n { label: \"Cambodia\", code: \"KH\", phone: \"855\" },\r\n { label: \"Cameroon\", code: \"CM\", phone: \"237\" },\r\n { label: \"Canada\", code: \"CA\", phone: \"1\" },\r\n { label: \"Cape Verde\", code: \"CV\", phone: \"238\" },\r\n { label: \"Cayman Islands\", code: \"KY\", phone: \"1\" },\r\n { label: \"Central African Republic\", code: \"CF\", phone: \"236\" },\r\n { label: \"Chad\", code: \"TD\", phone: \"235\" },\r\n { label: \"Chile\", code: \"CL\", phone: \"56\" },\r\n { label: \"China\", code: \"CN\", phone: \"86\" },\r\n { label: \"Christmas Island\", code: \"CX\", phone: \"61\" },\r\n { label: \"Cocos (Keeling) Islands\", code: \"CC\", phone: \"61\" },\r\n { label: \"Colombia\", code: \"CO\", phone: \"57\" },\r\n { label: \"Comoros\", code: \"KM\", phone: \"269\" },\r\n { label: \"Congo\", code: \"CG\", phone: \"242\" },\r\n { label: \"Cook Islands\", code: \"CK\", phone: \"682\" },\r\n { label: \"Costa Rica\", code: \"CR\", phone: \"506\" },\r\n { label: \"Croatia\", code: \"HR\", phone: \"385\" },\r\n { label: \"Cuba\", code: \"CU\", phone: \"53\" },\r\n { label: \"Curaçao\", code: \"CW\", phone: \"599\" },\r\n { label: \"Cyprus\", code: \"CY\", phone: \"357\" },\r\n { label: \"Czech Republic\", code: \"CZ\", phone: \"420\" },\r\n { label: \"Democratic Republic of the Congo\", code: \"CD\", phone: \"243\" },\r\n { label: \"Denmark\", code: \"DK\", phone: \"45\" },\r\n { label: \"Djibouti\", code: \"DJ\", phone: \"253\" },\r\n { label: \"Dominica\", code: \"DM\", phone: \"1\" },\r\n { label: \"Dominican Republic\", code: \"DO\", phone: \"1\" },\r\n { label: \"Ecuador\", code: \"EC\", phone: \"593\" },\r\n { label: \"Egypt\", code: \"EG\", phone: \"20\" },\r\n { label: \"El Salvador\", code: \"SV\", phone: \"503\" },\r\n { label: \"Equatorial Guinea\", code: \"GQ\", phone: \"240\" },\r\n { label: \"Eritrea\", code: \"ER\", phone: \"291\" },\r\n { label: \"Estonia\", code: \"EE\", phone: \"372\" },\r\n { label: \"Eswatini\", code: \"SZ\", phone: \"268\" },\r\n { label: \"Ethiopia\", code: \"ET\", phone: \"251\" },\r\n { label: \"Falkland Islands\", code: \"FK\", phone: \"500\" },\r\n { label: \"Faroe Islands\", code: \"FO\", phone: \"298\" },\r\n { label: \"Fiji Islands\", code: \"FJ\", phone: \"679\" },\r\n { label: \"Finland\", code: \"FI\", phone: \"358\" },\r\n { label: \"France\", code: \"FR\", phone: \"33\" },\r\n { label: \"French Guiana\", code: \"GF\", phone: \"594\" },\r\n { label: \"French Polynesia\", code: \"PF\", phone: \"689\" },\r\n { label: \"French Southern Territories\", code: \"TF\", phone: \"262\" },\r\n { label: \"Gabon\", code: \"GA\", phone: \"241\" },\r\n { label: \"Georgia\", code: \"GE\", phone: \"995\" },\r\n { label: \"Germany\", code: \"DE\", phone: \"49\" },\r\n { label: \"Ghana\", code: \"GH\", phone: \"233\" },\r\n { label: \"Gibraltar\", code: \"GI\", phone: \"350\" },\r\n { label: \"Greece\", code: \"GR\", phone: \"30\" },\r\n { label: \"Greenland\", code: \"GL\", phone: \"299\" },\r\n { label: \"Grenada\", code: \"GD\", phone: \"1\" },\r\n { label: \"Guadeloupe\", code: \"GP\", phone: \"590\" },\r\n { label: \"Guam\", code: \"GU\", phone: \"1\" },\r\n { label: \"Guatemala\", code: \"GT\", phone: \"502\" },\r\n { label: \"Guernsey\", code: \"GG\", phone: \"44\" },\r\n { label: \"Guinea\", code: \"GN\", phone: \"224\" },\r\n { label: \"Guinea-Bissau\", code: \"GW\", phone: \"245\" },\r\n { label: \"Guyana\", code: \"GY\", phone: \"592\" },\r\n { label: \"Haiti\", code: \"HT\", phone: \"509\" },\r\n { label: \"Heard Island and McDonald Islands\", code: \"HM\", phone: \"672\" },\r\n { label: \"Honduras\", code: \"HN\", phone: \"504\" },\r\n { label: \"Hong Kong S.A.R.\", code: \"HK\", phone: \"852\" },\r\n { label: \"Hungary\", code: \"HU\", phone: \"36\" },\r\n { label: \"Iceland\", code: \"IS\", phone: \"354\" },\r\n { label: \"India\", code: \"IN\", phone: \"91\" },\r\n { label: \"Indonesia\", code: \"ID\", phone: \"62\" },\r\n { label: \"Iran\", code: \"IR\", phone: \"98\" },\r\n { label: \"Iraq\", code: \"IQ\", phone: \"964\" },\r\n { label: \"Ireland\", code: \"IE\", phone: \"353\" },\r\n { label: \"Israel\", code: \"IL\", phone: \"972\" },\r\n { label: \"Italy\", code: \"IT\", phone: \"39\" },\r\n { label: \"Ivory Coast\", code: \"CI\", phone: \"225\" },\r\n { label: \"Jamaica\", code: \"JM\", phone: \"1\" },\r\n { label: \"Japan\", code: \"JP\", phone: \"81\" },\r\n { label: \"Jersey\", code: \"JE\", phone: \"44\" },\r\n { label: \"Jordan\", code: \"JO\", phone: \"962\" },\r\n { label: \"Kazakhstan\", code: \"KZ\", phone: \"7\" },\r\n { label: \"Kenya\", code: \"KE\", phone: \"254\" },\r\n { label: \"Kiribati\", code: \"KI\", phone: \"686\" },\r\n { label: \"Kosovo\", code: \"XK\", phone: \"383\" },\r\n { label: \"Kuwait\", code: \"KW\", phone: \"965\" },\r\n { label: \"Kyrgyzstan\", code: \"KG\", phone: \"996\" },\r\n { label: \"Laos\", code: \"LA\", phone: \"856\" },\r\n { label: \"Latvia\", code: \"LV\", phone: \"371\" },\r\n { label: \"Lebanon\", code: \"LB\", phone: \"961\" },\r\n { label: \"Lesotho\", code: \"LS\", phone: \"266\" },\r\n { label: \"Liberia\", code: \"LR\", phone: \"231\" },\r\n { label: \"Libya\", code: \"LY\", phone: \"218\" },\r\n { label: \"Liechtenstein\", code: \"LI\", phone: \"423\" },\r\n { label: \"Lithuania\", code: \"LT\", phone: \"370\" },\r\n { label: \"Luxembourg\", code: \"LU\", phone: \"352\" },\r\n { label: \"Macau S.A.R.\", code: \"MO\", phone: \"853\" },\r\n { label: \"Madagascar\", code: \"MG\", phone: \"261\" },\r\n { label: \"Malawi\", code: \"MW\", phone: \"265\" },\r\n { label: \"Malaysia\", code: \"MY\", phone: \"60\" },\r\n { label: \"Maldives\", code: \"MV\", phone: \"960\" },\r\n { label: \"Mali\", code: \"ML\", phone: \"223\" },\r\n { label: \"Malta\", code: \"MT\", phone: \"356\" },\r\n { label: \"Man (Isle of)\", code: \"IM\", phone: \"44\" },\r\n { label: \"Marshall Islands\", code: \"MH\", phone: \"692\" },\r\n { label: \"Martinique\", code: \"MQ\", phone: \"596\" },\r\n { label: \"Mauritania\", code: \"MR\", phone: \"222\" },\r\n { label: \"Mauritius\", code: \"MU\", phone: \"230\" },\r\n { label: \"Mayotte\", code: \"YT\", phone: \"262\" },\r\n { label: \"Mexico\", code: \"MX\", phone: \"52\" },\r\n { label: \"Micronesia\", code: \"FM\", phone: \"691\" },\r\n { label: \"Moldova\", code: \"MD\", phone: \"373\" },\r\n { label: \"Monaco\", code: \"MC\", phone: \"377\" },\r\n { label: \"Mongolia\", code: \"MN\", phone: \"976\" },\r\n { label: \"Montenegro\", code: \"ME\", phone: \"382\" },\r\n { label: \"Montserrat\", code: \"MS\", phone: \"1\" },\r\n { label: \"Morocco\", code: \"MA\", phone: \"212\" },\r\n { label: \"Mozambique\", code: \"MZ\", phone: \"258\" },\r\n { label: \"Myanmar\", code: \"MM\", phone: \"95\" },\r\n { label: \"Namibia\", code: \"NA\", phone: \"264\" },\r\n { label: \"Nauru\", code: \"NR\", phone: \"674\" },\r\n { label: \"Nepal\", code: \"NP\", phone: \"977\" },\r\n { label: \"Netherlands\", code: \"NL\", phone: \"31\" },\r\n { label: \"New Caledonia\", code: \"NC\", phone: \"687\" },\r\n { label: \"New Zealand\", code: \"NZ\", phone: \"64\" },\r\n { label: \"Nicaragua\", code: \"NI\", phone: \"505\" },\r\n { label: \"Niger\", code: \"NE\", phone: \"227\" },\r\n { label: \"Nigeria\", code: \"NG\", phone: \"234\" },\r\n { label: \"Niue\", code: \"NU\", phone: \"683\" },\r\n { label: \"Norfolk Island\", code: \"NF\", phone: \"672\" },\r\n { label: \"North Korea\", code: \"KP\", phone: \"850\" },\r\n { label: \"North Macedonia\", code: \"MK\", phone: \"389\" },\r\n { label: \"Northern Mariana Islands\", code: \"MP\", phone: \"1\" },\r\n { label: \"Norway\", code: \"NO\", phone: \"47\" },\r\n { label: \"Oman\", code: \"OM\", phone: \"968\" },\r\n { label: \"Pakistan\", code: \"PK\", phone: \"92\" },\r\n { label: \"Palau\", code: \"PW\", phone: \"680\" },\r\n { label: \"Palestinian Territory Occupied\", code: \"PS\", phone: \"970\" },\r\n { label: \"Panama\", code: \"PA\", phone: \"507\" },\r\n { label: \"Papua New Guinea\", code: \"PG\", phone: \"675\" },\r\n { label: \"Paraguay\", code: \"PY\", phone: \"595\" },\r\n { label: \"Peru\", code: \"PE\", phone: \"51\" },\r\n { label: \"Philippines\", code: \"PH\", phone: \"63\" },\r\n { label: \"Pitcairn Island\", code: \"PN\", phone: \"870\" },\r\n { label: \"Poland\", code: \"PL\", phone: \"48\" },\r\n { label: \"Portugal\", code: \"PT\", phone: \"351\" },\r\n { label: \"Puerto Rico\", code: \"PR\", phone: \"1\" },\r\n { label: \"Qatar\", code: \"QA\", phone: \"974\" },\r\n { label: \"Reunion\", code: \"RE\", phone: \"262\" },\r\n { label: \"Romania\", code: \"RO\", phone: \"40\" },\r\n { label: \"Russia\", code: \"RU\", phone: \"7\" },\r\n { label: \"Rwanda\", code: \"RW\", phone: \"250\" },\r\n { label: \"Saint Helena\", code: \"SH\", phone: \"290\" },\r\n { label: \"Saint Kitts and Nevis\", code: \"KN\", phone: \"1\" },\r\n { label: \"Saint Lucia\", code: \"LC\", phone: \"1\" },\r\n { label: \"Saint Pierre and Miquelon\", code: \"PM\", phone: \"508\" },\r\n { label: \"Saint Vincent and the Grenadines\", code: \"VC\", phone: \"1\" },\r\n { label: \"Saint-Barthelemy\", code: \"BL\", phone: \"590\" },\r\n { label: \"Saint-Martin (French part)\", code: \"MF\", phone: \"590\" },\r\n { label: \"Samoa\", code: \"WS\", phone: \"685\" },\r\n { label: \"San Marino\", code: \"SM\", phone: \"378\" },\r\n { label: \"Sao Tome and Principe\", code: \"ST\", phone: \"239\" },\r\n { label: \"Saudi Arabia\", code: \"SA\", phone: \"966\" },\r\n { label: \"Senegal\", code: \"SN\", phone: \"221\" },\r\n { label: \"Serbia\", code: \"RS\", phone: \"381\" },\r\n { label: \"Seychelles\", code: \"SC\", phone: \"248\" },\r\n { label: \"Sierra Leone\", code: \"SL\", phone: \"232\" },\r\n { label: \"Singapore\", code: \"SG\", phone: \"65\" },\r\n { label: \"Sint Maarten (Dutch part)\", code: \"SX\", phone: \"1721\" },\r\n { label: \"Slovakia\", code: \"SK\", phone: \"421\" },\r\n { label: \"Slovenia\", code: \"SI\", phone: \"386\" },\r\n { label: \"Solomon Islands\", code: \"SB\", phone: \"677\" },\r\n { label: \"Somalia\", code: \"SO\", phone: \"252\" },\r\n { label: \"South Africa\", code: \"ZA\", phone: \"27\" },\r\n { label: \"South Georgia\", code: \"GS\", phone: \"500\" },\r\n { label: \"South Korea\", code: \"KR\", phone: \"82\" },\r\n { label: \"South Sudan\", code: \"SS\", phone: \"211\" },\r\n { label: \"Spain\", code: \"ES\", phone: \"34\" },\r\n { label: \"Sri Lanka\", code: \"LK\", phone: \"94\" },\r\n { label: \"Sudan\", code: \"SD\", phone: \"249\" },\r\n { label: \"Suriname\", code: \"SR\", phone: \"597\" },\r\n { label: \"Svalbard and Jan Mayen Islands\", code: \"SJ\", phone: \"47\" },\r\n { label: \"Sweden\", code: \"SE\", phone: \"46\" },\r\n { label: \"Switzerland\", code: \"CH\", phone: \"41\" },\r\n { label: \"Syria\", code: \"SY\", phone: \"963\" },\r\n { label: \"Taiwan\", code: \"TW\", phone: \"886\" },\r\n { label: \"Tajikistan\", code: \"TJ\", phone: \"992\" },\r\n { label: \"Tanzania\", code: \"TZ\", phone: \"255\" },\r\n { label: \"Thailand\", code: \"TH\", phone: \"66\" },\r\n { label: \"The Bahamas\", code: \"BS\", phone: \"1\" },\r\n { label: \"The Gambia\", code: \"GM\", phone: \"220\" },\r\n { label: \"Timor-Leste\", code: \"TL\", phone: \"670\" },\r\n { label: \"Togo\", code: \"TG\", phone: \"228\" },\r\n { label: \"Tokelau\", code: \"TK\", phone: \"690\" },\r\n { label: \"Tonga\", code: \"TO\", phone: \"676\" },\r\n { label: \"Trinidad and Tobago\", code: \"TT\", phone: \"1\" },\r\n { label: \"Tunisia\", code: \"TN\", phone: \"216\" },\r\n { label: \"Turkey\", code: \"TR\", phone: \"90\" },\r\n { label: \"Turkmenistan\", code: \"TM\", phone: \"993\" },\r\n { label: \"Turks and Caicos Islands\", code: \"TC\", phone: \"1\" },\r\n { label: \"Tuvalu\", code: \"TV\", phone: \"688\" },\r\n { label: \"Uganda\", code: \"UG\", phone: \"256\" },\r\n { label: \"Ukraine\", code: \"UA\", phone: \"380\" },\r\n { label: \"United Arab Emirates\", code: \"AE\", phone: \"971\" },\r\n { label: \"United Kingdom\", code: \"GB\", phone: \"44\" },\r\n { label: \"United States\", code: \"US\", phone: \"1\" },\r\n { label: \"United States Minor Outlying Islands\", code: \"UM\", phone: \"1\" },\r\n { label: \"Uruguay\", code: \"UY\", phone: \"598\" },\r\n { label: \"Uzbekistan\", code: \"UZ\", phone: \"998\" },\r\n { label: \"Vanuatu\", code: \"VU\", phone: \"678\" },\r\n { label: \"Vatican City State (Holy See)\", code: \"VA\", phone: \"379\" },\r\n { label: \"Venezuela\", code: \"VE\", phone: \"58\" },\r\n { label: \"Vietnam\", code: \"VN\", phone: \"84\" },\r\n { label: \"Virgin Islands (British)\", code: \"VG\", phone: \"1\" },\r\n { label: \"Virgin Islands (US)\", code: \"VI\", phone: \"1\" },\r\n { label: \"Wallis and Futuna Islands\", code: \"WF\", phone: \"681\" },\r\n { label: \"Western Sahara\", code: \"EH\", phone: \"212\" },\r\n { label: \"Yemen\", code: \"YE\", phone: \"967\" },\r\n { label: \"Zambia\", code: \"ZM\", phone: \"260\" },\r\n { label: \"Zimbabwe\", code: \"ZW\", phone: \"263\" },\r\n];\r\n","import React, { useState, useEffect, useRef } from \"react\";\r\nimport { countries } from \"../../../data/countries\";\r\nimport { ChevronDown, Search } from \"lucide-react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nexport default function PhoneInput({\r\n label = \"\",\r\n value = \"\",\r\n name = \"\",\r\n parentClass = \"\",\r\n onChange,\r\n disabled = false,\r\n required = false,\r\n placeholder = \"Phone number\",\r\n search = false,\r\n countriesList = false,\r\n defaultCountry = \"\",\r\n}) {\r\n const find_country_with_code = (value) => {\r\n return countries.find((obj) => obj.code == value);\r\n };\r\n\r\n const [selectedCountry, setSelectedCountry] = useState(\r\n find_country_with_code(defaultCountry) || countries[0],\r\n );\r\n const [fullNumber, setFullNumber] = useState(\"\");\r\n const [open, setOpen] = useState(false);\r\n const [searchTerm, setSearchTerm] = useState(\"\");\r\n const dropdownRef = useRef();\r\n\r\n // Match prefix when value starts with +code\r\n useEffect(() => {\r\n if (typeof value === \"string\" && value.startsWith(\"+\")) {\r\n const match = countries\r\n .filter((c) => value.startsWith(\"+\" + c.phone))\r\n .sort((a, b) => b.phone.length - a.phone.length)[0];\r\n if (match) {\r\n setSelectedCountry(match);\r\n setFullNumber(value.replace(\"+\" + match.phone, \"\"));\r\n return;\r\n }\r\n }\r\n setFullNumber(value);\r\n }, [value]);\r\n\r\n const handleNumberChange = (e) => {\r\n const input = e.target.value.replace(/\\D/g, \"\");\r\n setFullNumber(input);\r\n if (selectedCountry && onChange) {\r\n onChange(\"+\" + selectedCountry.phone + input);\r\n }\r\n };\r\n\r\n const handleCountrySelect = (country) => {\r\n setSelectedCountry(country);\r\n if (onChange) onChange(\"+\" + country.phone + fullNumber);\r\n setOpen(false);\r\n setSearchTerm(\"\");\r\n };\r\n\r\n // 🖱️ Close dropdown on outside click\r\n useEffect(() => {\r\n const handleClickOutside = (e) => {\r\n if (dropdownRef.current && !dropdownRef.current.contains(e.target))\r\n setOpen(false);\r\n };\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\r\n }, []);\r\n\r\n const filteredCountries = countries.filter(\r\n (c) =>\r\n c.label.toLowerCase().includes(searchTerm.toLowerCase()) ||\r\n c.phone.includes(searchTerm),\r\n );\r\n\r\n if (!countriesList) {\r\n const handleInputChange = (e) => {\r\n const input = e.target.value.replace(/[^+\\d]/g, \"\");\r\n const formatted = input.startsWith(\"+\")\r\n ? \"+\" + input.replace(/[+]/g, \"\").slice(0)\r\n : input;\r\n onChange(formatted);\r\n };\r\n\r\n return (\r\n <>\r\n <div key={name} className={parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n <input\r\n type=\"text\"\r\n value={value}\r\n onChange={handleInputChange}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n required={required}\r\n className=\"w-full h-10 px-3 text-sm border border-gray-300 dark:border-gray-600 rounded-md \r\n bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 focus:outline-none \r\n focus:ring-1 focus:ring-blue-300 dark:focus:ring-blue-200\"\r\n inputMode=\"tel\"\r\n pattern=\"^\\+\\d{1,15}$\"\r\n />\r\n </div>\r\n </>\r\n );\r\n }\r\n\r\n return (\r\n <>\r\n <div key={name} className={parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n <div className=\"relative \" ref={dropdownRef}>\r\n {/* Input container */}\r\n <div\r\n className={`h-[40px] flex items-center border rounded-md px-2 bg-white dark:bg-gray-700 transition-all\r\n ${\r\n open\r\n ? \"ring-0.5 ring-blue-100 border-blue-300\"\r\n : \"border-gray-300 dark:border-gray-600\"\r\n }\r\n ${disabled ? \"opacity-60 cursor-not-allowed\" : \"\"}`}\r\n >\r\n {/* Flag & dropdown */}\r\n <button\r\n type=\"button\"\r\n disabled={disabled}\r\n onClick={() => setOpen(!open)}\r\n className=\"flex items-center gap-1 pr-2 border-r border-gray-300 dark:border-gray-700 focus:outline-none\"\r\n >\r\n {selectedCountry ? (\r\n <img\r\n src={`https://flagcdn.com/w20/${selectedCountry.code.toLowerCase()}.png`}\r\n alt={selectedCountry.code}\r\n className=\"w-5 h-3 object-cover\"\r\n />\r\n ) : (\r\n <span className=\"text-gray-400 text-xs\">🌐</span>\r\n )}\r\n <ChevronDown className=\"w-3 h-3 text-gray-500\" />\r\n </button>\r\n\r\n {/* Country code */}\r\n {selectedCountry && (\r\n <span className=\"ml-2 text-sm text-gray-700 dark:text-gray-200 whitespace-nowrap\">\r\n +{selectedCountry.phone}\r\n </span>\r\n )}\r\n\r\n {/* Number input */}\r\n <input\r\n type=\"tel\"\r\n value={fullNumber}\r\n onChange={handleNumberChange}\r\n required={required}\r\n disabled={disabled || !selectedCountry}\r\n placeholder={!selectedCountry ? \"Select a country\" : placeholder}\r\n className=\"flex-1 ml-2 bg-transparent outline-none text-sm text-gray-800 dark:text-gray-100 placeholder-gray-400\"\r\n />\r\n\r\n {/* Hidden input for native browser validation */}\r\n <input\r\n type=\"tel\"\r\n required={required}\r\n tabIndex={-1}\r\n readOnly\r\n value={\r\n selectedCountry && fullNumber\r\n ? \"+\" + selectedCountry.phone + fullNumber\r\n : \"\"\r\n }\r\n style={{\r\n position: \"absolute\",\r\n opacity: 0,\r\n pointerEvents: \"none\",\r\n height: 0,\r\n }}\r\n />\r\n </div>\r\n\r\n {/* Dropdown */}\r\n {open && (\r\n <div className=\"absolute top-full left-0 w-full mt-1 border border-gray-300 dark:border-gray-700 rounded-md bg-white dark:bg-gray-700 shadow-lg z-50 max-h-60 overflow-y-auto\">\r\n {search && (\r\n <div className=\"p-2 border-b border-gray-200 dark:border-gray-700\">\r\n <div className=\"relative\">\r\n <Search className=\"absolute left-3 top-1/2 transform -translate-y-1/2 w-4 h-4 text-gray-400\" />\r\n <input\r\n type=\"text\"\r\n value={searchTerm}\r\n onChange={(e) => setSearchTerm(e.target.value)}\r\n placeholder=\"Search country...\"\r\n className=\"w-full pl-9 pr-3 py-2 text-sm border rounded-md bg-white dark:bg-gray-800 dark:text-white placeholder-gray-500 dark:placeholder-gray-400 focus:outline-none \"\r\n />\r\n </div>\r\n </div>\r\n )}\r\n\r\n {filteredCountries.map((c) => (\r\n <button\r\n key={c.code}\r\n type=\"button\"\r\n onClick={() => handleCountrySelect(c)}\r\n className=\"w-full flex items-center gap-2 px-2 py-1 text-sm hover:bg-blue-50 dark:hover:bg-gray-700 text-gray-800 dark:text-gray-100\"\r\n >\r\n <img\r\n src={`https://flagcdn.com/w20/${c.code.toLowerCase()}.png`}\r\n alt={c.code}\r\n className=\"w-5 h-3 object-cover\"\r\n />\r\n <span>\r\n {c.label} (+{c.phone})\r\n </span>\r\n </button>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </>\r\n );\r\n}\r\n","import React, { useState } from \"react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nconst TextArea = React.forwardRef(\r\n ({ className = \"\", label, required, ...props }, ref) => {\r\n const combinedClassName = `\r\n placeholder-gray-400 dark:placeholder-gray-400\r\n ${className}\r\n `.trim();\r\n\r\n return (\r\n <>\r\n <div key={props.name} className={props.parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n <div className=\"relative\">\r\n <textarea\r\n className={combinedClassName}\r\n ref={ref}\r\n required={required}\r\n {...props}\r\n />\r\n </div>\r\n </div>\r\n </>\r\n );\r\n },\r\n);\r\n\r\nTextArea.displayName = \"TextArea\";\r\n\r\nexport { TextArea };\r\n","import { Icon } from \"@iconify/react\";\r\nimport React, { useState, useEffect, useRef } from \"react\";\r\nimport InputLabel from \"./InputLabel\";\r\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, { useState } from \"react\";\r\nimport { Icon } from \"@iconify/react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nconst Input = React.forwardRef(\r\n (\r\n {\r\n label,\r\n required,\r\n parentClass = \"\",\r\n className = \"\",\r\n type = \"text\",\r\n onKeyDown,\r\n negativeNumberAllow = true,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const [showPassword, setShowPassword] = useState(false);\r\n\r\n const handleKeyDown = (e) => {\r\n if (type === \"number\") {\r\n const blockedKeys = [\"e\", \"E\", \"+\"];\r\n\r\n // Block e, E, +\r\n if (blockedKeys.includes(e.key)) {\r\n e.preventDefault();\r\n return;\r\n }\r\n\r\n // Block negative sign if not allowed\r\n if (negativeNumberAllow == false && e.key === \"-\") {\r\n e.preventDefault();\r\n return;\r\n }\r\n\r\n // Block arrow up/down from changing value\r\n if ([\"ArrowUp\", \"ArrowDown\"].includes(e.key)) {\r\n e.preventDefault();\r\n return;\r\n }\r\n }\r\n\r\n onKeyDown?.(e);\r\n };\r\n\r\n const combinedClassName = `\r\n h-10 placeholder-gray-400 dark:placeholder-gray-400\r\n ${type === \"password\" ? \"pr-10\" : \"\"}\r\n ${type === \"number\" ? \"no-spinner\" : \"\"}\r\n ${className}\r\n `.trim();\r\n\r\n return (\r\n <>\r\n <div key={props.name} className={parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n <div className=\"relative\">\r\n <input\r\n type={type === \"password\" && showPassword ? \"text\" : type}\r\n ref={ref}\r\n required={required}\r\n onKeyDown={handleKeyDown}\r\n className={combinedClassName}\r\n {...props}\r\n />\r\n\r\n {type === \"password\" && (\r\n <button\r\n type=\"button\"\r\n tabIndex={-1}\r\n onClick={() => setShowPassword((prev) => !prev)}\r\n className=\"absolute inset-y-0 right-3 flex items-center text-gray-400 hover:text-gray-600 dark:text-gray-400 dark:hover:text-gray-200\"\r\n >\r\n <Icon\r\n icon={\r\n showPassword ? \"mdi:eye-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 buttonComponent: ButtonComponent = null,\r\n buttonProps = {},\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 key={audio.preview} src={audio.preview} controls />\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 React from \"react\";\r\nimport Select from \"./Select\";\r\nimport Switch from \"./Switch\";\r\nimport PhoneInput from \"./PhoneInput\";\r\nimport { TextArea } from \"./TextArea\";\r\nimport ImagePicker from \"./ImagePicker\";\r\nimport { Input } from \"./Input\";\r\nimport TinyEditor from \"./TinyEditor\";\r\nimport Checkbox from \"./Checkbox\";\r\nimport AudioPicker from \"./AudioPicker\";\r\n\r\nconst RenderFields = ({ field, formData, handleChange }) => {\r\n const {\r\n key,\r\n label,\r\n type,\r\n options,\r\n placeholder,\r\n rows,\r\n inputClass,\r\n search,\r\n accept,\r\n text,\r\n required = false,\r\n minLength,\r\n dragDrop,\r\n parentClass,\r\n countriesList,\r\n defaultCountry,\r\n multiple,\r\n dropdownMaxHeight,\r\n editorKey,\r\n fontFamily,\r\n disabled,\r\n negativeNumberAllow,\r\n defaultValue,\r\n } = field;\r\n\r\n let value = formData?.[key];\r\n if (value === undefined || value === null) {\r\n value = \"\";\r\n }\r\n\r\n const finalPlaceholder =\r\n placeholder || (type === \"select\" ? `Select ${label}` : `Enter ${label}`);\r\n\r\n const baseClass =\r\n \"w-full px-3 py-2 rounded-md border border-gray-300 dark:border-gray-600 text-sm focus:outline-none focus:ring-1 focus:ring-blue-200 bg-white text-black dark:bg-gray-700 dark:text-white\";\r\n\r\n switch (type) {\r\n case \"select\":\r\n return (\r\n <Select\r\n options={options || []}\r\n value={value}\r\n onChange={(val) => handleChange(key, val)}\r\n placeholder={finalPlaceholder}\r\n className={inputClass || \"\"}\r\n search={search}\r\n required={required}\r\n 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 \"switch\":\r\n return (\r\n <Switch\r\n value={value}\r\n onChange={(val) => handleChange(key, val)}\r\n text={text}\r\n options={options || []}\r\n label={label}\r\n required={required}\r\n name={key}\r\n disabled={disabled}\r\n parentClass={parentClass}\r\n />\r\n );\r\n\r\n case \"phone\":\r\n return (\r\n <PhoneInput\r\n value={value}\r\n onChange={(val) => handleChange(key, val)}\r\n countriesList={countriesList}\r\n defaultCountry={defaultCountry}\r\n required={required}\r\n placeholder={finalPlaceholder}\r\n search={search}\r\n label={label}\r\n name={key}\r\n disabled={disabled}\r\n parentClass={parentClass}\r\n />\r\n );\r\n\r\n case \"textarea\":\r\n return (\r\n <TextArea\r\n value={value}\r\n onChange={(e) => handleChange(key, e.target.value)}\r\n placeholder={finalPlaceholder}\r\n rows={rows || 3}\r\n className={`${baseClass} ${inputClass || \"\"}`}\r\n required={required}\r\n name={key}\r\n label={label}\r\n disabled={disabled}\r\n parentClass={parentClass}\r\n />\r\n );\r\n\r\n case \"image\":\r\n return (\r\n <ImagePicker\r\n value={value}\r\n onChange={(imgObj) => handleChange(key, imgObj)}\r\n required={required}\r\n accept={accept || \"image/*\"}\r\n id={`file-${key}`}\r\n dragDrop={dragDrop}\r\n label={label}\r\n name={key}\r\n parentClass={parentClass}\r\n />\r\n );\r\n case \"audio\":\r\n return (\r\n <AudioPicker\r\n value={value}\r\n onChange={(audio) => handleChange(key, audio)}\r\n required={required}\r\n accept={accept || \"audio/*\"}\r\n id={`file-${key}`}\r\n dragDrop={dragDrop}\r\n label={label}\r\n name={key}\r\n parentClass={parentClass}\r\n />\r\n );\r\n\r\n case \"tinyEditor\":\r\n return (\r\n <TinyEditor\r\n value={value}\r\n onChange={(newValue) => handleChange(key, newValue)}\r\n required={required}\r\n key={`editor-${key}`}\r\n placeholder={finalPlaceholder}\r\n label={label}\r\n parentClass={parentClass}\r\n fontFamily={fontFamily}\r\n editorKey={editorKey}\r\n disabled={disabled}\r\n />\r\n );\r\n\r\n default:\r\n return (\r\n <Input\r\n type={type || \"text\"}\r\n value={value}\r\n onChange={(e) => handleChange(key, e.target.value)}\r\n placeholder={finalPlaceholder}\r\n className={`${baseClass} ${inputClass || \"\"}`}\r\n required={required}\r\n name={key}\r\n minLength={minLength}\r\n label={label}\r\n negativeNumberAllow={negativeNumberAllow}\r\n parentClass={parentClass}\r\n disabled={disabled}\r\n />\r\n );\r\n }\r\n};\r\n\r\nexport default RenderFields;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { X } from \"lucide-react\";\r\nimport Button from \"../Button/Button\";\r\nimport RenderFields from \"../Form/components/RenderFields\";\r\n\r\nconst FilterDrawer = ({ isOpen, onClose, config, onApply }) => {\r\n const [filters, setFilters] = useState({});\r\n\r\n const handleChange = (key, value) => {\r\n setFilters((prev) => ({ ...prev, [key]: value }));\r\n };\r\n\r\n const handleApply = () => {\r\n onApply?.(filters);\r\n onClose();\r\n };\r\n\r\n const handleReset = () => {\r\n setFilters({});\r\n onApply?.({});\r\n onClose();\r\n };\r\n\r\n return (\r\n <>\r\n {/* Overlay */}\r\n <div\r\n className={`fixed inset-0 bg-black/50 z-40 transition-opacity duration-300 ${\r\n isOpen\r\n ? \"opacity-100 pointer-events-auto\"\r\n : \"opacity-0 pointer-events-none\"\r\n }`}\r\n onClick={onClose}\r\n />\r\n\r\n {/* Drawer */}\r\n <div\r\n className={`fixed top-0 right-0 h-full w-[28rem] bg-white dark:bg-gray-900 shadow-2xl z-50 flex flex-col border-l border-gray-200 dark:border-gray-700\r\n transform transition-transform duration-300 ease-in-out\r\n ${isOpen ? \"translate-x-0\" : \"translate-x-full\"}\r\n `}\r\n >\r\n {/* Header */}\r\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-gray-200 dark:border-gray-700\">\r\n <h2 className=\"text-lg font-semibold text-gray-900 dark:text-white\">\r\n Filters\r\n </h2>\r\n <button\r\n onClick={onClose}\r\n className=\"p-2 hover:bg-gray-100 dark:hover:bg-gray-800 rounded-md transition\"\r\n >\r\n <X className=\"w-5 h-5 text-gray-500 dark:text-gray-400\" />\r\n </button>\r\n </div>\r\n\r\n {/* Content */}\r\n <div className=\"flex-1 overflow-y-auto px-4 py-3\">\r\n {config?.component ? (\r\n <config.component filters={filters} onFilterChange={handleChange} />\r\n ) : (\r\n <div className=\"space-y-4\">\r\n {config?.fields?.map((field) => (\r\n <>\r\n <RenderFields\r\n key={field.key}\r\n field={field}\r\n formData={filters}\r\n handleChange={handleChange}\r\n />\r\n </>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Footer */}\r\n <div className=\"flex gap-2 px-4 py-3 border-t border-gray-200 dark:border-gray-700\">\r\n <Button\r\n onClick={handleApply}\r\n variant=\"contained\"\r\n color=\"primary\"\r\n fullWidth\r\n >\r\n Apply Filters\r\n </Button>\r\n <Button\r\n onClick={handleReset}\r\n variant=\"contained\"\r\n className=\"min-w-[150px]\"\r\n >\r\n Reset\r\n </Button>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default FilterDrawer;\r\n","import React from \"react\";\r\n\r\nconst BADGE_COLORS = {\r\n blue: {\r\n bg: \"bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-300\",\r\n border:\r\n \"border border-blue-300 text-blue-700 dark:border-blue-700 dark:text-blue-300\",\r\n },\r\n teal: {\r\n bg: \"bg-teal-100 text-teal-800 dark:bg-teal-900/30 dark:text-teal-300\",\r\n border:\r\n \"border border-teal-300 text-teal-700 dark:border-teal-700 dark:text-teal-300\",\r\n },\r\n purple: {\r\n bg: \"bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300\",\r\n border:\r\n \"border border-purple-300 text-purple-700 dark:border-purple-700 dark:text-purple-300\",\r\n },\r\n yellow: {\r\n bg: \"bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-300\",\r\n border:\r\n \"border border-yellow-300 text-yellow-700 dark:border-yellow-700 dark:text-yellow-300\",\r\n },\r\n green: {\r\n bg: \"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300\",\r\n border:\r\n \"border border-green-300 text-green-700 dark:border-green-700 dark:text-green-300\",\r\n },\r\n red: {\r\n bg: \"bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-300\",\r\n border:\r\n \"border border-red-300 text-red-700 dark:border-red-700 dark:text-red-300\",\r\n },\r\n gray: {\r\n bg: \"bg-gray-100 text-gray-800 dark:bg-gray-900/30 dark:text-gray-300\",\r\n border:\r\n \"border border-gray-300 text-gray-700 dark:border-gray-700 dark:text-gray-300\",\r\n },\r\n};\r\n\r\nconst BADGE_VARIANTS = {\r\n contained: \"bg\",\r\n outline: \"border !bg-transparent\",\r\n soft: \"bg opacity-90\",\r\n};\r\n\r\nconst Chip = ({\r\n label,\r\n variant = \"contained\", // contained | outline | soft\r\n color = \"green\",\r\n className = \"\",\r\n}) => {\r\n const colorConfig = BADGE_COLORS[color] || BADGE_COLORS.green;\r\n const variantKey = BADGE_VARIANTS[variant] || BADGE_VARIANTS.contained;\r\n\r\n const variantClasses =\r\n variant === \"outline\" ? colorConfig.border : colorConfig.bg;\r\n\r\n return (\r\n <span\r\n className={`inline-flex justify-center items-center rounded-sm text-xs font-semibold px-3 py-1 min-w-[78px]\r\n ${variantClasses}\r\n ${variantKey}\r\n ${className}`}\r\n >\r\n {label}\r\n </span>\r\n );\r\n};\r\n\r\nexport default Chip;\r\n","const TableSkeleton = ({ rows = 5, columns = 5 }) => {\r\n return (\r\n <>\r\n <div className=\"w-full mb-6 inline-flex justify-end items-center\">\r\n <div className=\"h-8 w-80 bg-gray-300 dark:bg-gray-700 rounded animate-pulse\" />\r\n </div>\r\n <div className=\"overflow-hidden rounded-md border border-gray-200 dark:border-gray-800\">\r\n <table className=\"w-full border-collapse\">\r\n <thead>\r\n <tr className=\"bg-gray-50 dark:bg-gray-900\">\r\n {Array.from({ length: columns }).map((_, i) => (\r\n <th key={i} className=\"px-4 py-3\">\r\n <div className=\"h-6 w-24 bg-gray-300 dark:bg-gray-700 rounded animate-pulse inline-flex justify-center items-center\" />\r\n </th>\r\n ))}\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n {Array.from({ length: rows }).map((_, rowIndex) => (\r\n <tr\r\n key={rowIndex}\r\n className=\"border-t border-gray-200 dark:border-gray-800\"\r\n >\r\n {Array.from({ length: columns }).map((_, colIndex) => (\r\n <td key={colIndex} className=\"px-4 py-6\">\r\n <div className=\"h-6 w-full bg-gray-300 dark:bg-gray-700 rounded animate-pulse\" />\r\n </td>\r\n ))}\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default TableSkeleton;\r\n","import { useEffect } from \"react\";\r\nimport { X } from \"lucide-react\";\r\n\r\nconst ImagePreview = ({ src, alt = \"preview\", isOpen, setIsOpen }) => {\r\n const closePreview = () => setIsOpen(false);\r\n\r\n // Handle ESC key + prevent body scroll\r\n useEffect(() => {\r\n const handleEsc = (e) => {\r\n if (e.key === \"Escape\") closePreview();\r\n };\r\n\r\n if (isOpen) {\r\n document.body.style.overflow = \"hidden\";\r\n document.addEventListener(\"keydown\", handleEsc);\r\n }\r\n\r\n return () => {\r\n document.body.style.overflow = \"\";\r\n document.removeEventListener(\"keydown\", handleEsc);\r\n };\r\n }, [isOpen]);\r\n\r\n return (\r\n <>\r\n {/* Fullscreen Preview */}\r\n <div\r\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/70 dark:bg-black/80 \r\n backdrop-blur-sm animate-in fade-in duration-200\"\r\n onClick={closePreview}\r\n >\r\n {/* Close Button */}\r\n <button\r\n onClick={closePreview}\r\n className=\"absolute top-4 right-4 bg-white dark:bg-gray-800 text-gray-800 dark:text-gray-200\r\n hover:bg-gray-100 dark:hover:bg-gray-700 rounded-full p-2 shadow-lg transition\"\r\n >\r\n <X size={20} />\r\n </button>\r\n\r\n {/* Image Container */}\r\n <div\r\n className=\"max-w-5xl w-full px-4 transform transition-all duration-200 scale-95 animate-in zoom-in-95\"\r\n onClick={(e) => e.stopPropagation()}\r\n >\r\n {/* Large Image */}\r\n <img\r\n src={src}\r\n alt={alt}\r\n className=\"w-full max-h-[90vh] object-contain rounded-xl\"\r\n />\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default ImagePreview;\r\n","import React, { useState, useMemo, useRef, useEffect } from \"react\";\r\nimport {\r\n ChevronLeft,\r\n ChevronRight,\r\n Search,\r\n EllipsisVertical,\r\n Filter,\r\n User,\r\n Music,\r\n} from \"lucide-react\";\r\nimport { createPortal } from \"react-dom\";\r\nimport { formatDate, searchLocalData } from \"../../lib/utils\";\r\nimport Button from \"../Button/Button\";\r\nimport FilterDrawer from \"../Filter/FilterDrawer\";\r\nimport Chip from \"../Chip/Chip\";\r\nimport TableSkeleton from \"./components/TableSkeleton\";\r\nimport ImagePreview from \"./components/ImagePreview\";\r\n\r\nconst Table = ({ config }) => {\r\n const {\r\n data = [],\r\n table_head = [],\r\n loading = false,\r\n search = {\r\n enabled: false,\r\n placeholder: \"Search...\",\r\n useServerSideSearch: false,\r\n },\r\n filter = {\r\n enabled: false,\r\n useServerSideFilters: false,\r\n },\r\n pagination = {\r\n enabled: false,\r\n rows_per_page: 10,\r\n useServerSidePagination: false,\r\n },\r\n emptyMessage = \"No data available\",\r\n onMenuAction,\r\n setServerSidePaginationData = () => {},\r\n onFilterApply,\r\n filterConfig = null,\r\n } = config;\r\n\r\n const [searchTerm, setSearchTerm] = useState(\"\");\r\n const [activeMenu, setActiveMenu] = useState(null);\r\n const [menuList, setMenuList] = useState([]);\r\n const [menuPosition, setMenuPosition] = useState({});\r\n const [showFilters, setShowFilters] = useState(false);\r\n\r\n // image preview\r\n const [targetImage, setTargetImage] = useState(null);\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const filteredData = useMemo(() => {\r\n if (!search.enabled || !searchTerm.trim()) return data;\r\n if (search.useServerSideSearch) return data;\r\n return searchLocalData(data, searchTerm, search.searchKeys || []);\r\n }, [data, searchTerm, search]);\r\n\r\n const [currentPage, setCurrentPage] = useState(1);\r\n const [pageSize, setPageSize] = useState(pagination?.rows_per_page || 50);\r\n const [totalRecords, setTotalRecords] = useState(filteredData.length || 0);\r\n\r\n const totalPages = pagination?.useServerSidePagination\r\n ? pagination.total_pages\r\n : Math.ceil(filteredData.length / pageSize);\r\n\r\n const paginatedData = useMemo(() => {\r\n if (pagination.useServerSidePagination) return filteredData;\r\n const start = (currentPage - 1) * pageSize;\r\n return filteredData.slice(start, start + pageSize);\r\n }, [filteredData, currentPage, pageSize]);\r\n\r\n const menuRef = useRef(null);\r\n const buttonRefs = useRef({});\r\n const searchTimeoutRef = useRef(null);\r\n\r\n const handleSearchChange = (value) => {\r\n setSearchTerm(value);\r\n setCurrentPage(1);\r\n\r\n if (search.useServerSideSearch) {\r\n if (searchTimeoutRef.current) clearTimeout(searchTimeoutRef.current);\r\n\r\n searchTimeoutRef.current = setTimeout(async () => {\r\n try {\r\n await setServerSidePaginationData((prev) => ({\r\n ...prev,\r\n search: value,\r\n current_page: 1,\r\n }));\r\n } catch (error) {\r\n console.error(\"Search error:\", error);\r\n }\r\n }, 800);\r\n }\r\n };\r\n\r\n const handleActionClick = (action, item, e) => {\r\n e.stopPropagation();\r\n setActiveMenu(null);\r\n onMenuAction?.(action.type, item);\r\n };\r\n\r\n const handleMenuToggle = (itemId, e, menu_list) => {\r\n e.stopPropagation();\r\n setMenuList(menu_list);\r\n const button = e.currentTarget;\r\n buttonRefs.current[itemId] = button;\r\n const rect = button.getBoundingClientRect();\r\n const menuWidth = 192;\r\n const menuHeight = menu_list.length * 40;\r\n const viewportWidth = window.innerWidth;\r\n const viewportHeight = window.innerHeight;\r\n\r\n const openLeft = viewportWidth - rect.right < menuWidth;\r\n const left = openLeft ? rect.left - menuWidth + rect.width : rect.left;\r\n\r\n const openUp =\r\n viewportHeight - rect.bottom < menuHeight && rect.top > menuHeight;\r\n const top = openUp ? rect.top - menuHeight - 2 : rect.bottom + 2;\r\n\r\n setMenuPosition({\r\n top: Math.max(8, Math.min(top, viewportHeight - menuHeight - 8)),\r\n left: Math.max(8, Math.min(left, viewportWidth - menuWidth - 8)),\r\n });\r\n\r\n setActiveMenu(activeMenu === itemId ? null : itemId);\r\n };\r\n\r\n const calculateRowNumber = (index) => {\r\n return (currentPage - 1) * pageSize + index + 1;\r\n };\r\n\r\n const openPreview = (image) => {\r\n setTargetImage(image);\r\n setIsOpen(true);\r\n };\r\n\r\n const renderAvatar = (\r\n imageSrc,\r\n imageAlt,\r\n className,\r\n fallback_icon = null,\r\n ) => {\r\n return (\r\n <>\r\n {imageSrc ? (\r\n <img\r\n src={imageSrc}\r\n alt={imageAlt || \"Avatar\"}\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n openPreview({ src: imageSrc, alt: imageAlt });\r\n }}\r\n className={`w-10 h-10 cursor-pointer rounded-full object-cover border border-gray-200 dark:border-gray-700 ${className || \"\"}`}\r\n />\r\n ) : (\r\n <>\r\n {fallback_icon ? (\r\n fallback_icon\r\n ) : (\r\n <div\r\n className={`w-10 h-10 flex items-center 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={audioSrc} // 🔥 ensures latest audio reloads\r\n controls\r\n src={audioSrc}\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n }}\r\n className={`w-64 cursor-pointer ${className || \"\"}`}\r\n />\r\n ) : (\r\n <>\r\n <div\r\n className={`w-12 h-12 flex items-center 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(row[col.imageKey], row[col.titleKey], \"group-avatar\")\r\n : \"\"}\r\n <div>\r\n <p className=\"font-medium text-gray-900 dark:text-white group-title\">\r\n {row[col.titleKey] || \"\"}\r\n </p>\r\n <p className=\"text-sm text-gray-500 dark:text-gray-400 group-sub-title\">\r\n {row[col.subtitleKey] || \"\"}\r\n </p>\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n const handleRenderChip = (value, col) => {\r\n let label = String(value);\r\n const variant = col.variant || \"contained\";\r\n let color = col.defaultColor;\r\n\r\n if (col?.chipOptions?.length > 0) {\r\n let chipObj = col?.chipOptions.find((obj) => obj.value == value);\r\n if (chipObj) {\r\n label = chipObj.label;\r\n color = chipObj.color;\r\n }\r\n }\r\n\r\n return (\r\n <Chip\r\n label={label}\r\n variant={variant}\r\n color={color}\r\n className={col.className || \"\"}\r\n />\r\n );\r\n };\r\n\r\n const handleRenderCellValue = (col, row, index) => {\r\n const value = row[col.key];\r\n if (col.type === \"menu_actions\") {\r\n return (\r\n <div className={`text-center ${col.className || \"\"}`}>\r\n <button\r\n ref={(el) => (buttonRefs.current[row.id || row._id] = el)}\r\n onClick={(e) =>\r\n handleMenuToggle(row.id || row._id, e, col.menuList)\r\n }\r\n className=\"p-2 bg-gray-100 dark:bg-gray-700 hover:bg-gray-200 dark:hover:bg-gray-600 rounded-full transition text-gray-700 dark:text-gray-300\"\r\n >\r\n <EllipsisVertical className=\"h-4 w-4\" />\r\n </button>\r\n </div>\r\n );\r\n } else if (col.type === \"index\") {\r\n return (\r\n <span className={col.className || \"\"}>{calculateRowNumber(index)}</span>\r\n );\r\n } else if (col.type === \"group\") {\r\n return renderGroupCell(row, col);\r\n } else if (col.type === \"chip\") {\r\n return <>{handleRenderChip(value, col)}</>;\r\n } else if (col.type === \"date\") {\r\n return (\r\n <span className={col.className || \"\"}>\r\n {formatDate(value, col.format || \"DD MMM YYYY\")}\r\n </span>\r\n );\r\n } else if (col.type === \"avatar\") {\r\n return (\r\n <>\r\n <div className=\"min-w-[40px]\">\r\n {renderAvatar(value, col.alt, col.className, col.fallback_icon)}\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 on cell\r\n\r\n const handleColumnClick = (col, row) => {\r\n if (col.onClickDetails) {\r\n return onMenuAction?.(\"view\", row);\r\n }\r\n\r\n if (typeof col.handleClick === \"function\") {\r\n return col.handleClick(row);\r\n }\r\n };\r\n\r\n // Helper to check if column is clickable\r\n const isColumnClickable = (col) =>\r\n col.onClickDetails || typeof col.handleClick === \"function\";\r\n\r\n // Close menu on scroll -------------------\r\n useEffect(() => {\r\n const handleScroll = () => {\r\n if (activeMenu) setActiveMenu(null);\r\n };\r\n\r\n window.addEventListener(\"scroll\", handleScroll, true);\r\n return () => {\r\n window.removeEventListener(\"scroll\", handleScroll, true);\r\n };\r\n }, [activeMenu]);\r\n\r\n useEffect(() => {\r\n const handleClickOutside = (e) => {\r\n if (menuRef.current && !menuRef.current.contains(e.target)) {\r\n setActiveMenu(null);\r\n }\r\n };\r\n document.addEventListener(\"click\", handleClickOutside);\r\n return () => document.removeEventListener(\"click\", handleClickOutside);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (pagination?.rows_per_page && pagination?.useServerSidePagination) {\r\n setPageSize(pagination?.rows_per_page || 50);\r\n }\r\n\r\n if (pagination.current_page) {\r\n setCurrentPage(pagination.current_page);\r\n }\r\n }, [\r\n pagination.rows_per_page,\r\n pagination?.useServerSidePagination,\r\n pagination.current_page,\r\n ]);\r\n\r\n useEffect(() => {\r\n setTotalRecords(\r\n pagination?.useServerSidePagination\r\n ? pagination.total_records\r\n : filteredData.length,\r\n );\r\n\r\n if (\r\n filteredData.length <= pageSize * (currentPage - 1) &&\r\n !pagination?.useServerSidePagination\r\n ) {\r\n setCurrentPage((prev) => prev - 1 || 1);\r\n }\r\n }, [\r\n filteredData.length,\r\n pagination.total_records,\r\n pagination?.useServerSidePagination,\r\n ]);\r\n\r\n if (loading) return <TableSkeleton rows={6} columns={6} />;\r\n\r\n return (\r\n <>\r\n {/* Search Bar */}\r\n <div className=\"flex justify-end items-center mb-4 gap-2\">\r\n {search.enabled && (\r\n <div className=\"\">\r\n <div className=\"relative min-w-[300px]\">\r\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400 dark:text-gray-300\" />\r\n <input\r\n type=\"text\"\r\n placeholder={search.placeholder || \"Search...\"}\r\n value={searchTerm}\r\n onChange={(e) => handleSearchChange(e.target.value)}\r\n className=\"w-full h-[36px] pl-9 pr-4 py-3 text-sm border border-gray-300 dark:border-gray-600 rounded-md bg-gray-50 dark:bg-gray-700 text-gray-900 dark:text-white placeholder-gray-500 dark:placeholder-gray-400 focus:outline-none focus:ring-1 focus:ring-blue-300 dark:ring-blue-200 disabled:opacity-50\"\r\n />\r\n </div>\r\n </div>\r\n )}\r\n\r\n {filterConfig && filter.enabled && (\r\n <Button onClick={() => setShowFilters(true)} variant=\"contained\">\r\n <Filter className=\"w-4 h-4 mr-2\" />\r\n Filters\r\n </Button>\r\n )}\r\n </div>\r\n\r\n {/* =========================== Table =========================== */}\r\n <div className=\"bg-white dark:bg-gray-800 rounded-lg shadow overflow-hidden border border-gray-200 dark:border-gray-700\">\r\n <div className=\"overflow-x-auto\">\r\n <table className=\"min-w-full divide-y divide-gray-200 dark:divide-gray-700\">\r\n <thead className=\"bg-gray-50 dark:bg-gray-700/60\">\r\n <tr>\r\n {table_head.map((col) => (\r\n <th\r\n key={col.key}\r\n className={`px-6 py-4 text-left text-xs font-medium text-black dark:text-white uppercase tracking-wider min-w-max max-w-[180px] truncate ${col.headClass || \"\"}`}\r\n >\r\n {col.title}\r\n </th>\r\n ))}\r\n </tr>\r\n </thead>\r\n\r\n <tbody className=\"bg-white dark:bg-gray-800 divide-y divide-gray-200 dark:divide-gray-700\">\r\n {paginatedData.length === 0 ? (\r\n <tr>\r\n <td\r\n colSpan={table_head.length}\r\n className=\"text-center py-10 text-gray-500 dark:text-gray-400\"\r\n >\r\n {emptyMessage}\r\n </td>\r\n </tr>\r\n ) : (\r\n paginatedData.map((row, index) => (\r\n <tr\r\n key={row.id || row._id || index}\r\n className=\"hover:bg-gray-50 dark:hover:bg-blue-800/10 transition\"\r\n >\r\n {table_head.map((col) => (\r\n <td\r\n key={col.key}\r\n className={`px-6 py-4 text-sm text-gray-900 dark:text-gray-100 min-w-max ${col.type == \"audio\" ? \"\" : \"max-w-[300px]\"} truncate ${\r\n isColumnClickable(col) ? \"cursor-pointer\" : \"\"\r\n }`}\r\n title={String(row[col.key] ?? \"\")}\r\n onClick={() => handleColumnClick(col, row)}\r\n >\r\n {col.render\r\n ? col.render(row, index)\r\n : handleRenderCellValue(col, row, index)}\r\n </td>\r\n ))}\r\n </tr>\r\n ))\r\n )}\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n {pagination?.enabled && filteredData.length > 0 && (\r\n <div className=\" bg-gray-50 dark:bg-gray-700/60 px-6 py-3 flex flex-wrap items-center justify-between border-t border-gray-200 dark:border-gray-600 gap-3\">\r\n <div className=\"text-sm text-gray-700 dark:text-gray-300\">\r\n Showing {(currentPage - 1) * pageSize + 1} to{\" \"}\r\n {Math.min(currentPage * pageSize, totalRecords)} of {totalRecords}{\" \"}\r\n results\r\n </div>\r\n\r\n <div className=\"flex items-center gap-4\">\r\n {/* Rows per page selector */}\r\n <div className=\"flex items-center gap-2\">\r\n <span className=\"text-sm text-gray-700 dark:text-gray-300\">\r\n Rows per page:\r\n </span>\r\n <select\r\n value={pageSize}\r\n onChange={(e) => {\r\n const newLimit = Number(e.target.value);\r\n setPageSize(newLimit);\r\n setCurrentPage(1);\r\n if (pagination.useServerSidePagination) {\r\n setServerSidePaginationData((prev) => ({\r\n ...prev,\r\n current_page: 1,\r\n rows_per_page: newLimit,\r\n }));\r\n }\r\n }}\r\n className=\"border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800 text-sm rounded-md px-2 py-1 focus:outline-none focus:ring-1 focus:ring-blue-500\"\r\n >\r\n {[2, 10, 25, 50, 100].map((n) => (\r\n <option key={n} value={n}>\r\n {n}\r\n </option>\r\n ))}\r\n </select>\r\n </div>\r\n\r\n {/* ============= Pagination ============= */}\r\n <div className=\"flex items-center gap-2\">\r\n <button\r\n onClick={() => {\r\n if (currentPage > 1) {\r\n const newPage = currentPage - 1;\r\n setCurrentPage(newPage);\r\n if (pagination.useServerSidePagination) {\r\n setServerSidePaginationData((prev) => ({\r\n ...prev,\r\n current_page: newPage,\r\n }));\r\n }\r\n }\r\n }}\r\n disabled={currentPage === 1}\r\n className=\"p-2 hover:bg-gray-200 dark:hover:bg-gray-600 rounded-md transition text-gray-500 dark:text-gray-300 disabled:opacity-50\"\r\n >\r\n <ChevronLeft className=\"h-4 w-4\" />\r\n </button>\r\n\r\n <span className=\"text-sm text-gray-800 dark:text-gray-200\">\r\n Page {currentPage} of {totalPages}\r\n </span>\r\n\r\n <button\r\n onClick={() => {\r\n if (currentPage < totalPages) {\r\n const newPage = currentPage + 1;\r\n setCurrentPage(newPage);\r\n if (pagination.useServerSidePagination) {\r\n setServerSidePaginationData((prev) => ({\r\n ...prev,\r\n current_page: newPage,\r\n }));\r\n }\r\n }\r\n }}\r\n disabled={currentPage === totalPages}\r\n className=\"p-2 hover:bg-gray-200 dark:hover:bg-gray-600 rounded-md transition text-gray-500 dark:text-gray-300 disabled:opacity-50\"\r\n >\r\n <ChevronRight className=\"h-4 w-4\" />\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Portal Menu */}\r\n {activeMenu &&\r\n createPortal(\r\n <div\r\n ref={menuRef}\r\n style={{\r\n position: \"fixed\",\r\n top: `${menuPosition.top}px`,\r\n left: `${menuPosition.left}px`,\r\n zIndex: 9999,\r\n }}\r\n className=\"w-48 bg-white dark:bg-gray-700 rounded-md shadow-lg border border-gray-200 dark:border-gray-600\"\r\n >\r\n {menuList.map((action, i) => (\r\n <button\r\n key={i}\r\n onClick={(e) =>\r\n handleActionClick(\r\n action,\r\n data.find(\r\n (d) => d.id === activeMenu || d._id == activeMenu,\r\n ),\r\n e,\r\n )\r\n }\r\n className={`w-full flex items-center gap-2 px-4 py-2 text-sm text-left hover:bg-gray-100 dark:hover:bg-gray-600 ${\r\n action.variant === \"danger\"\r\n ? \"text-red-600 dark:text-red-500\"\r\n : \"text-gray-700 dark:text-gray-200\"\r\n }`}\r\n >\r\n {action.icon && <span className=\"shrink-0\">{action.icon}</span>}\r\n {action.title}\r\n </button>\r\n ))}\r\n </div>,\r\n document.body,\r\n )}\r\n\r\n {/* Filter Drawer */}\r\n {filterConfig && (\r\n <FilterDrawer\r\n isOpen={showFilters}\r\n onClose={() => setShowFilters(false)}\r\n config={filterConfig}\r\n onApply={onFilterApply}\r\n />\r\n )}\r\n\r\n {isOpen && (\r\n <ImagePreview\r\n src={targetImage.src}\r\n alt={targetImage.alt}\r\n isOpen={isOpen}\r\n setIsOpen={setIsOpen}\r\n />\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default Table;\r\n","import React from \"react\";\r\nimport { X } from \"lucide-react\";\r\nimport Button from \"../Button/Button\";\r\n\r\nconst Modal = ({\r\n isOpen,\r\n onClose,\r\n icon,\r\n title,\r\n children,\r\n size = \"md\",\r\n actionButtons = [],\r\n actions,\r\n showDefaultClose = true,\r\n footerConfig = null,\r\n hideFooter = false,\r\n onFormSubmit = () => {},\r\n onCancel,\r\n loadingBtn = false,\r\n executeFunction = () => {},\r\n selectedItem = null,\r\n}) => {\r\n if (!isOpen) return null;\r\n\r\n // Size classes\r\n const sizeClasses = {\r\n sm: \"max-w-md\",\r\n md: \"max-w-lg\",\r\n lg: \"max-w-2xl\",\r\n xl: \"max-w-4xl\",\r\n full: \"max-w-full\",\r\n };\r\n\r\n return (\r\n <div className=\"fixed inset-0 z-50 flex items-center justify-center p-4\">\r\n {/* Backdrop */}\r\n <div\r\n className=\"fixed inset-0 bg-gray-500 opacity-75\"\r\n onClick={() => onClose()}\r\n ></div>\r\n\r\n {/* Modal container */}\r\n <div\r\n className={`relative bg-white rounded-lg shadow-xl w-full ${\r\n sizeClasses[size] || sizeClasses.md\r\n } max-h-[90vh] flex flex-col dark:bg-gray-800`}\r\n >\r\n {/* Header */}\r\n <div className=\"flex items-center justify-between p-4 border-b border-gray-200 dark:border-gray-700 flex-shrink-0\">\r\n <div className=\"flex items-center gap-1\">\r\n {icon && <span>{icon}</span>}\r\n <h3 className=\"text-lg font-medium text-gray-900 dark:text-white\">\r\n {title}\r\n </h3>\r\n </div>\r\n\r\n <button\r\n onClick={() => onClose()}\r\n className=\"text-gray-400 hover:text-gray-600 dark:hover:text-gray-300\"\r\n >\r\n <X className=\"w-6 h-6\" />\r\n </button>\r\n </div>\r\n\r\n {/* Content */}\r\n <div className=\"flex-1 overflow-y-auto p-4\">{children}</div>\r\n\r\n {/* Footer */}\r\n {/* {!hideFooter && (actions || footerConfig || showDefaultClose) && (\r\n <div className=\"px-4 py-3 flex justify-end gap-3 border-t border-gray-200 dark:border-gray-700 sm:px-6\">\r\n {actions}\r\n\r\n {footerConfig && (\r\n <>\r\n {footerConfig.cancelButton && (\r\n <Button\r\n onClick={() => (onCancel() || onClose())}\r\n disabled={loadingBtn}\r\n variant=\"contained\"\r\n color=\"default\"\r\n >\r\n {footerConfig.cancelText || \"Cancel\"}\r\n </Button>\r\n )}\r\n\r\n {footerConfig.submitButton && (\r\n <Button\r\n onClick={onFormSubmit}\r\n disabled={loadingBtn}\r\n variant=\"contained\"\r\n color={footerConfig.color || \"primary\"}\r\n className=\"min-w-[100px]\"\r\n >\r\n {loadingBtn ? (\r\n <div className=\"flex items-center\">\r\n <div className=\"animate-spin rounded-full h-4 w-4 border-2 border-white/30 border-t-2 border-t-white mr-2\"></div>\r\n {footerConfig.submitText || \"Submit\"}...\r\n </div>\r\n ) : (\r\n footerConfig.submitText || \"Submit\"\r\n )}\r\n </Button>\r\n )}\r\n </>\r\n )}\r\n\r\n {showDefaultClose && !actions && !footerConfig && (\r\n <Button onClick={() => onClose()} variant=\"outlined\">\r\n Close\r\n </Button>\r\n )}\r\n </div>\r\n )} */}\r\n\r\n {actionButtons.length > 0 && (\r\n <div className=\"px-4 py-3 flex justify-end gap-3 border-t border-gray-200 dark:border-gray-700 sm:px-6\">\r\n {actionButtons.map((btn) => (\r\n <Button\r\n onClick={(e) => {\r\n if (btn.type == \"submit\") {\r\n onFormSubmit(e);\r\n } else {\r\n executeFunction(\r\n () => btn?.onClick?.(e, selectedItem),\r\n (resp) => onClose?.(resp),\r\n );\r\n }\r\n }}\r\n disabled={loadingBtn || btn.disabled}\r\n variant={btn.variant || \"contained\"}\r\n color={btn.color || \"primary\"}\r\n className={`min-w-[100px] ${btn.className}`}\r\n type={btn.type || \"button\"}\r\n >\r\n {loadingBtn ? (\r\n <div className=\"flex items-center\">\r\n <div className=\"animate-spin rounded-full h-4 w-4 border-2 border-white/30 border-t-2 border-t-white mr-2\"></div>\r\n {btn.label || \"Submit\"}...\r\n </div>\r\n ) : (\r\n btn.label || \"Submit\"\r\n )}\r\n </Button>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default Modal;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport RenderFields from \"./components/RenderFields\";\r\n\r\nconst Form = ({ config, onSubmit, initialData = {}, type = \"add\" }) => {\r\n const { formClass = \"grid grid-cols-12 gap-4\", formFields = [] } =\r\n config || {};\r\n\r\n const [formData, setFormData] = useState(initialData);\r\n\r\n useEffect(() => {\r\n setFormData(initialData);\r\n }, []);\r\n\r\n const handleChange = (key, value) => {\r\n setFormData((prev) => ({ ...prev, [key]: value }));\r\n };\r\n\r\n const handleSubmit = (e) => {\r\n e.preventDefault();\r\n const form = e.target;\r\n\r\n if (!form.checkValidity()) {\r\n form.reportValidity();\r\n return;\r\n }\r\n\r\n onSubmit(formData);\r\n };\r\n\r\n return (\r\n <form\r\n id={\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 { User } from \"lucide-react\";\r\nimport React, { useState } from \"react\";\r\nimport Chip from \"../Chip/Chip\";\r\nimport { formatDate } from \"../../lib/utils\";\r\nimport ImagePreview from \"../Table/components/ImagePreview\";\r\n\r\nexport default function Details({ data, config }) {\r\n const { fields, containerClass } = config;\r\n\r\n // image preview\r\n const [targetImage, setTargetImage] = useState(null);\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const openPreview = (image) => {\r\n setTargetImage(image);\r\n setIsOpen(true);\r\n };\r\n\r\n const DetailRow = ({ col }) => {\r\n let Icon = col?.icon;\r\n let label = col.label;\r\n let value = data[col.key];\r\n let type = col.type;\r\n let variant = col.variant || \"outline\";\r\n let color = col.defaultColor;\r\n\r\n if (type === \"chip\" && col.chipOptions?.length > 0) {\r\n let chipObj = col?.chipOptions.find((obj) => obj.value == value);\r\n if (chipObj) {\r\n value = chipObj.label;\r\n color = chipObj.color;\r\n }\r\n }\r\n\r\n return (\r\n <div\r\n className={`col-span-12 flex items-center space-x-4 p-4 rounded-xl \r\n bg-gray-100 dark:bg-gray-900 ${col.blockClass || \"\"}`}\r\n >\r\n {Icon && <div className=\"flex-shrink-0\">{Icon}</div>}\r\n\r\n <div className=\"flex-1 min-w-0\">\r\n <p className=\"text-sm font-medium text-gray-500 dark:text-gray-400\">\r\n {label}\r\n </p>\r\n\r\n {/* CHIP */}\r\n {type === \"chip\" ? (\r\n <Chip\r\n label={value}\r\n variant={variant}\r\n color={color}\r\n className=\"mt-1\"\r\n />\r\n ) : /* TINY EDITOR */\r\n type === \"tinyEditor\" ? (\r\n <p\r\n className=\"mt-1 text-sm text-gray-900 dark:text-white break-words\"\r\n dangerouslySetInnerHTML={{\r\n __html: value,\r\n }}\r\n ></p>\r\n ) : type === \"audio\" ? (\r\n value ? (\r\n <audio\r\n key={value} // 🔥 ensures latest audio reload\r\n controls\r\n src={value}\r\n onClick={(e) => e.stopPropagation()}\r\n className=\"shadow-md rounded-full\"\r\n />\r\n ) : (\r\n <p className=\"mt-1 text-sm text-gray-400\">N/A</p>\r\n )\r\n ) : (\r\n /* DEFAULT */\r\n <p className=\"mt-1 text-sm text-gray-900 dark:text-white break-words\">\r\n {type == \"date\" ? (\r\n <span>{formatDate(value, col.format || \"DD MMM YYYY\")}</span>\r\n ) : (\r\n value || \"N/A\"\r\n )}\r\n </p>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n const GroupRow = ({ col }) => {\r\n let title = data[col.titleKey];\r\n let subtitle = data[col.subtitleKey];\r\n let image = data[col.imageKey];\r\n let fallback_icon = data[col.fallback_icon];\r\n\r\n return (\r\n <div\r\n className={`col-span-12 flex items-center space-x-4 p-4 rounded-xl \r\n bg-gray-100 dark:bg-gray-900 \r\n ${col.blockClass}`}\r\n >\r\n {image ? (\r\n <img\r\n src={image}\r\n alt={title}\r\n onClick={() => openPreview({ src: image, alt: title })}\r\n className=\"w-16 h-16 cursor-pointer rounded-full object-cover border-2 border-gray-200 dark:border-gray-700\"\r\n />\r\n ) : fallback_icon ? (\r\n fallback_icon\r\n ) : (\r\n <div className=\"w-16 h-16 flex items-center justify-center rounded-full border-2 border-gray-300 dark:border-gray-700 bg-gray-200 dark:bg-gray-600\">\r\n <User className=\"w-8 h-8 text-gray-400\" />\r\n </div>\r\n )}\r\n\r\n <div>\r\n <h3 className=\"text-xl font-semibold text-gray-900 dark:text-white\">\r\n {title}\r\n </h3>\r\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">{subtitle}</p>\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n return (\r\n <>\r\n {isOpen && (\r\n <ImagePreview\r\n src={targetImage.src}\r\n alt={targetImage.alt}\r\n isOpen={isOpen}\r\n setIsOpen={setIsOpen}\r\n />\r\n )}\r\n\r\n <div className={`grid grid-cols-12 gap-4 ${containerClass || \"\"}`}>\r\n {fields.map((col) =>\r\n col.type == \"group\" ? (\r\n <GroupRow col={col} />\r\n ) : (\r\n <DetailRow col={col} />\r\n ),\r\n )}\r\n </div>\r\n </>\r\n );\r\n}\r\n","import React, { useEffect, useMemo, useState } from \"react\";\r\nimport { Plus, X } from \"lucide-react\";\r\nimport Table from \"./Table/Table\";\r\nimport Modal from \"./Modal/Modal\";\r\nimport Form from \"./Form/Form\";\r\nimport Button from \"./Button/Button\";\r\nimport { Icon } from \"@iconify/react\";\r\nimport { enqueueSnackbar } from \"notistack\";\r\nimport Details from \"./Details/Details\";\r\nimport PropTypes from \"prop-types\";\r\nimport { SnackbarProvider } from \"notistack\";\r\n\r\nconst CrudPage = ({ config }) => {\r\n const {\r\n title,\r\n fetchData = async () => {},\r\n isStaticData = false,\r\n tableConfig = {},\r\n modalConfig = {},\r\n filterConfig,\r\n } = config;\r\n\r\n const [loading, setLoading] = useState(true);\r\n const [formLoading, setFormLoading] = useState(false);\r\n\r\n const [listingData, setListingData] = useState([]);\r\n const [paginationData, setPaginationData] = useState(null);\r\n const [serverSidePaginationData, setServerSidePaginationData] = useState({\r\n search: \"\",\r\n rows_per_page: 50,\r\n current_page: 1,\r\n });\r\n const [filterData, setFilterData] = useState({});\r\n const [changeFilterData, setChangeFilterData] = useState(false);\r\n\r\n const [showAdd, setShowAdd] = useState(false);\r\n const [showEdit, setShowEdit] = useState(false);\r\n const [showDelete, setShowDelete] = useState(false);\r\n const [showView, setShowView] = useState(false);\r\n const [selectedItem, setSelectedItem] = useState(null);\r\n\r\n const handleMenuAction = (action, item) => {\r\n if (action === \"edit\") {\r\n setSelectedItem(item);\r\n setShowEdit(true);\r\n } else if (action === \"view\") {\r\n setSelectedItem(item);\r\n setShowView(true);\r\n } else if (action === \"delete\") {\r\n setSelectedItem(item);\r\n setShowDelete(true);\r\n }\r\n };\r\n\r\n const executeAction = async (\r\n action,\r\n onSuccess,\r\n success_message = \"\",\r\n error_message = \"\",\r\n ) => {\r\n setFormLoading(true);\r\n\r\n try {\r\n const resp = await action?.();\r\n if (success_message || resp.message) {\r\n enqueueSnackbar(success_message || resp.message, {\r\n variant: \"success\",\r\n });\r\n }\r\n onSuccess?.(resp);\r\n } catch (error) {\r\n if (error_message || error.message) {\r\n enqueueSnackbar(error_message || error.message, { variant: \"error\" });\r\n }\r\n } finally {\r\n setFormLoading(false);\r\n }\r\n };\r\n\r\n const handleAddResult = (resp) => {\r\n let newObj = resp.newObject;\r\n if (isStaticData) {\r\n setListingData((prev) => [newObj, ...prev]);\r\n setPaginationData((prev) => ({\r\n ...prev,\r\n current_page: 1,\r\n }));\r\n } else {\r\n setServerSidePaginationData((prev) => ({\r\n ...prev,\r\n current_page: 1,\r\n }));\r\n if (serverSidePaginationData.current_page == 1) {\r\n handleGetListing();\r\n }\r\n }\r\n setShowAdd(false);\r\n };\r\n\r\n const handleEditResult = (resp) => {\r\n let updatedObj = resp.newObject;\r\n let targetObj = resp.targetObject;\r\n if (isStaticData) {\r\n setListingData((prev) =>\r\n prev.map((item) =>\r\n item.id === targetObj.id ? { ...item, ...updatedObj } : item,\r\n ),\r\n );\r\n } else {\r\n handleGetListing();\r\n }\r\n setShowEdit(false);\r\n };\r\n\r\n const handleDeleteResult = (resp) => {\r\n if (!resp) {\r\n setShowDelete(false);\r\n setSelectedItem(null);\r\n return;\r\n }\r\n\r\n if (isStaticData) {\r\n setListingData((prev) =>\r\n prev.filter((item) => item.id !== resp.targetObject.id),\r\n );\r\n } else {\r\n if (\r\n listingData.length == 1 &&\r\n serverSidePaginationData.current_page > 1\r\n ) {\r\n setServerSidePaginationData((prev) => ({\r\n ...prev,\r\n current_page: prev.current_page - 1,\r\n }));\r\n } else {\r\n handleGetListing();\r\n }\r\n }\r\n setShowDelete(false);\r\n setSelectedItem(null);\r\n };\r\n\r\n const handleAddFormSubmit = (formData) =>\r\n executeAction(\r\n () => modalConfig?.addModal?.handleSubmit?.(formData),\r\n handleAddResult,\r\n );\r\n\r\n const handleEditFormSubmit = (formData) =>\r\n executeAction(\r\n () => modalConfig?.editModal?.handleSubmit?.(formData, selectedItem),\r\n handleEditResult,\r\n );\r\n\r\n const handleDeleteConfirm = () =>\r\n executeAction(\r\n () => modalConfig?.deleteModal?.action?.(selectedItem),\r\n handleDeleteResult,\r\n );\r\n\r\n const handleGetListing = async () => {\r\n setLoading(true);\r\n\r\n fetchData?.({ ...serverSidePaginationData, ...filterData })\r\n .then((resp) => {\r\n setListingData(resp.data);\r\n setPaginationData(resp.pagination);\r\n })\r\n .catch((error) => {\r\n enqueueSnackbar(error.message, { variant: \"error\" });\r\n })\r\n .finally(() => {\r\n setLoading(false);\r\n });\r\n };\r\n\r\n const handleFilterData = (data) => {\r\n setFilterData((prev) => ({\r\n ...data,\r\n }));\r\n if (tableConfig?.filter?.useServerSideFilters) {\r\n setChangeFilterData((prev) => !prev);\r\n }\r\n };\r\n\r\n const filterByMatchingFields = (data, filters) => {\r\n return data.filter((item) =>\r\n Object.entries(filters).every(([key, value]) => item[key] === value),\r\n );\r\n };\r\n\r\n const filteredData = useMemo(() => {\r\n if (tableConfig?.filter?.useServerSideFilters) return listingData;\r\n return filterByMatchingFields(listingData, filterData);\r\n }, [listingData, filterData]);\r\n\r\n useEffect(() => {\r\n handleGetListing();\r\n }, [\r\n serverSidePaginationData.search,\r\n serverSidePaginationData.rows_per_page,\r\n serverSidePaginationData.current_page,\r\n changeFilterData,\r\n ]);\r\n\r\n return (\r\n <SnackbarProvider\r\n maxSnack={3}\r\n anchorOrigin={{\r\n vertical: \"bottom\",\r\n horizontal: \"right\",\r\n }}\r\n autoHideDuration={3000}\r\n action={(snackbarKey) => (\r\n <button\r\n onClick={() => {\r\n window.dispatchEvent(\r\n new CustomEvent(\"closeSnackbar\", { detail: snackbarKey }),\r\n );\r\n }}\r\n className=\"p-1 hover:bg-white/20 rounded-full transition-colors duration-200 text-white flex items-center justify-center\"\r\n >\r\n <X className=\"h-4 w-4\" />\r\n </button>\r\n )}\r\n >\r\n <div>\r\n {/* Header */}\r\n <div className=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 mb-3\">\r\n <div>\r\n <h1 className=\"text-2xl font-bold text-gray-900 dark:text-white\">\r\n {title}\r\n </h1>\r\n <p className=\"text-md text-gray-600 dark:text-gray-400\">\r\n {config?.description}\r\n </p>\r\n </div>\r\n <div className=\"flex items-center space-x-3\">\r\n <Button\r\n onClick={() => setShowAdd(true)}\r\n variant=\"contained\"\r\n color=\"primary\"\r\n >\r\n <Plus className=\"w-4 h-4 mr-2\" />\r\n {config.buttonText || \"Add New\"}\r\n </Button>\r\n </div>\r\n </div>\r\n\r\n {/* Table */}\r\n <Table\r\n config={{\r\n ...tableConfig,\r\n pagination: {\r\n ...tableConfig.pagination,\r\n ...paginationData,\r\n },\r\n data: filteredData,\r\n setServerSidePaginationData: setServerSidePaginationData,\r\n onMenuAction: handleMenuAction,\r\n filterConfig,\r\n onFilterApply: handleFilterData,\r\n loading,\r\n }}\r\n />\r\n\r\n {/* Add Modal */}\r\n <Modal\r\n isOpen={showAdd}\r\n onClose={() => {\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 />\r\n </Modal>\r\n\r\n {/* Delete Modal */}\r\n {showDelete && (\r\n <Modal\r\n isOpen={showDelete}\r\n onClose={(resp) => {\r\n handleDeleteResult(resp);\r\n }}\r\n icon={\r\n modalConfig.deleteModal?.icon || (\r\n <Icon icon=\"ph:warning-bold\" className=\"w-6 h-6 text-red-500\" />\r\n )\r\n }\r\n title={modalConfig.deleteModal?.title || \"Confirm Delete\"}\r\n size={modalConfig.deleteModal?.size || \"md\"}\r\n loading={formLoading}\r\n actionButtons={modalConfig.deleteModal.actionButtons}\r\n executeFunction={executeAction}\r\n selectedItem={selectedItem}\r\n >\r\n <div className=\"flex items-center space-x-2 py-3\">\r\n <div>\r\n <p className=\"text-md text-gray-700 dark:text-white\">\r\n {modalConfig.deleteModal?.confirmText ||\r\n \"Are you sure you want to delete this item?\"}\r\n </p>\r\n {modalConfig.deleteModal?.referenceKey && (\r\n <p className=\"text-md font-semibold text-gray-700 dark:text-white\">\r\n {selectedItem[modalConfig.deleteModal?.referenceKey]}\r\n </p>\r\n )}\r\n </div>\r\n </div>\r\n </Modal>\r\n )}\r\n\r\n {/* View Detail Modal */}\r\n {modalConfig.viewModal && (\r\n <Modal\r\n isOpen={showView}\r\n onClose={() => {\r\n setShowView(false);\r\n setSelectedItem(null);\r\n }}\r\n icon={modalConfig.viewModal?.icon}\r\n title={modalConfig.viewModal?.title || \"View Details\"}\r\n size={modalConfig.viewModal?.size || \"lg\"}\r\n footerConfig={modalConfig?.viewModal.footer}\r\n >\r\n {modalConfig.viewModal?.component ? (\r\n <modalConfig.viewModal.component data={selectedItem} />\r\n ) : (\r\n <Details\r\n data={selectedItem}\r\n config={modalConfig.viewModal || {}}\r\n />\r\n )}\r\n </Modal>\r\n )}\r\n </div>\r\n </SnackbarProvider>\r\n );\r\n};\r\n\r\nconst optionType = PropTypes.shape({\r\n value: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.number,\r\n PropTypes.bool,\r\n ]).isRequired,\r\n label: PropTypes.string.isRequired,\r\n color: PropTypes.string,\r\n});\r\n\r\nconst actionButtonType = PropTypes.shape({\r\n type: PropTypes.string.isRequired,\r\n label: PropTypes.string.isRequired,\r\n color: PropTypes.string,\r\n variant: PropTypes.string,\r\n onClick: PropTypes.func,\r\n});\r\n\r\nconst menuActionType = PropTypes.shape({\r\n title: PropTypes.string.isRequired,\r\n type: PropTypes.string.isRequired,\r\n variant: PropTypes.string,\r\n icon: PropTypes.node,\r\n});\r\n\r\nconst tableHeadType = PropTypes.shape({\r\n key: PropTypes.string.isRequired,\r\n title: PropTypes.string,\r\n type: PropTypes.string,\r\n imageKey: PropTypes.string,\r\n titleKey: PropTypes.string,\r\n subtitleKey: PropTypes.string,\r\n onClickDetails: PropTypes.bool,\r\n variant: PropTypes.string,\r\n chipOptions: PropTypes.arrayOf(optionType),\r\n defaultColor: PropTypes.string,\r\n className: PropTypes.string,\r\n format: PropTypes.string,\r\n menuList: PropTypes.arrayOf(menuActionType),\r\n});\r\n\r\nconst formFieldType = PropTypes.shape({\r\n key: PropTypes.string.isRequired,\r\n label: PropTypes.string,\r\n type: PropTypes.string.isRequired,\r\n required: PropTypes.bool,\r\n minLength: PropTypes.number,\r\n parentClass: PropTypes.string,\r\n search: PropTypes.bool,\r\n multiple: PropTypes.bool,\r\n dropdownMaxHeight: PropTypes.string,\r\n dragDrop: PropTypes.bool,\r\n countriesList: PropTypes.bool,\r\n defaultCountry: PropTypes.string,\r\n placeholder: PropTypes.string,\r\n rows: PropTypes.number,\r\n text: PropTypes.string,\r\n editorKey: PropTypes.string,\r\n options: PropTypes.arrayOf(optionType),\r\n});\r\n\r\nconst viewFieldType = PropTypes.shape({\r\n key: PropTypes.string,\r\n label: PropTypes.string,\r\n type: PropTypes.string,\r\n imageKey: PropTypes.string,\r\n titleKey: PropTypes.string,\r\n subtitleKey: PropTypes.string,\r\n blockClass: PropTypes.string,\r\n icon: PropTypes.node,\r\n variant: PropTypes.string,\r\n chipOptions: PropTypes.arrayOf(optionType),\r\n defaultColor: PropTypes.string,\r\n className: PropTypes.string,\r\n format: PropTypes.string,\r\n});\r\n\r\nCrudPage.propTypes = {\r\n config: PropTypes.shape({\r\n title: PropTypes.string.isRequired,\r\n description: PropTypes.string,\r\n buttonText: PropTypes.string,\r\n fetchData: PropTypes.func.isRequired,\r\n isStaticData: PropTypes.bool,\r\n\r\n /* ================= TABLE CONFIG ================= */\r\n\r\n tableConfig: PropTypes.shape({\r\n table_head: PropTypes.arrayOf(tableHeadType).isRequired,\r\n\r\n search: PropTypes.shape({\r\n enabled: PropTypes.bool,\r\n useServerSideSearch: PropTypes.bool,\r\n searchKeys: PropTypes.arrayOf(PropTypes.string),\r\n }),\r\n\r\n pagination: PropTypes.shape({\r\n enabled: PropTypes.bool,\r\n useServerSidePagination: PropTypes.bool,\r\n }),\r\n\r\n filter: PropTypes.shape({\r\n enabled: PropTypes.bool,\r\n useServerSideFilters: PropTypes.bool,\r\n }),\r\n }).isRequired,\r\n\r\n /* ================= MODAL CONFIG ================= */\r\n\r\n modalConfig: PropTypes.shape({\r\n addModal: PropTypes.shape({\r\n title: PropTypes.string.isRequired,\r\n size: PropTypes.string,\r\n formClass: PropTypes.string,\r\n formFields: PropTypes.arrayOf(formFieldType),\r\n handleSubmit: PropTypes.func.isRequired,\r\n actionButtons: PropTypes.arrayOf(actionButtonType),\r\n }),\r\n\r\n editModal: PropTypes.shape({\r\n title: PropTypes.string.isRequired,\r\n size: PropTypes.string,\r\n formClass: PropTypes.string,\r\n formFields: PropTypes.arrayOf(formFieldType),\r\n handleSubmit: PropTypes.func.isRequired,\r\n actionButtons: PropTypes.arrayOf(actionButtonType),\r\n }),\r\n\r\n deleteModal: PropTypes.shape({\r\n title: PropTypes.string.isRequired,\r\n size: PropTypes.string,\r\n confirmText: PropTypes.string,\r\n referenceKey: PropTypes.string,\r\n actionButtons: PropTypes.arrayOf(actionButtonType),\r\n }),\r\n\r\n viewModal: PropTypes.shape({\r\n title: PropTypes.string.isRequired,\r\n size: PropTypes.string,\r\n\r\n // 👇 This covers your commented code:\r\n component: PropTypes.elementType, // for custom component like TeamMemberDetail\r\n\r\n fields: PropTypes.arrayOf(viewFieldType),\r\n\r\n footer: PropTypes.shape({\r\n cancelButton: PropTypes.bool,\r\n cancelText: PropTypes.string,\r\n }),\r\n }),\r\n }),\r\n\r\n /* ================= FILTER CONFIG ================= */\r\n\r\n filterConfig: PropTypes.shape({\r\n fields: PropTypes.arrayOf(formFieldType),\r\n }),\r\n }).isRequired,\r\n};\r\n\r\nexport default CrudPage;\r\n","import React, { useEffect } from \"react\";\r\nimport CrudPage from \"./components/CrudPage\";\r\n\r\n// Inject styles dynamically\r\nconst injectStyles = () => {\r\n if (typeof document === \"undefined\") return;\r\n \r\n // Check if styles already loaded\r\n if (document.getElementById(\"react-admin-crud-manager-styles\")) return;\r\n \r\n // Create style tag\r\n const style = document.createElement(\"style\");\r\n style.id = \"react-admin-crud-manager-styles\";\r\n \r\n // Add all CSS rules\r\n const cssRules = `\r\n .no-spinner::-webkit-outer-spin-button,\r\n .no-spinner::-webkit-inner-spin-button {\r\n -webkit-appearance: none;\r\n margin: 0;\r\n }\r\n \r\n .no-spinner {\r\n -moz-appearance: textfield;\r\n }\r\n \r\n .tox.tox-tinymce .tox-edit-area::before {\r\n border: 0 !important;\r\n box-shadow: none !important;\r\n }\r\n `;\r\n \r\n style.textContent = cssRules;\r\n document.head.appendChild(style);\r\n};\r\n\r\nexport default function Crud(props) {\r\n useEffect(() => {\r\n injectStyles();\r\n }, []);\r\n\r\n return (\r\n <>\r\n <CrudPage config={props.config} />\r\n </>\r\n );\r\n}\r\n"],"names":["formatDate","dateString","format","date","pad","n","map","token","searchLocalData","data","searchTerm","searchKeys","lowerSearchTerm","extractValues","obj","item","valuesToSearch","key","val","Button","React","className","variant","color","size","fullWidth","children","props","ref","baseStyles","sizes","colorVariants","colorStyles","_a","sizeStyles","combinedClassName","jsx","InputLabel","label","required","Fragment","jsxs","Select","options","value","defaultValue","onChange","placeholder","disabled","search","name","parentClass","multiple","dropdownMaxHeight","open","setOpen","useState","setSearchTerm","showAboveState","setShowAboveState","dropdownRef","useRef","searchInputRef","initialVal","normalize","normalizedValue","filteredOptions","option","isSelected","optionValue","normalized","useEffect","handleClickOutside","event","rect","spaceBelow","handleOptionClick","finalValue","exists","newValues","v","selectedLabels","opt","ChevronDown","Search","e","Check","Switch","text","radioOptions","idx","countries","PhoneInput","countriesList","defaultCountry","find_country_with_code","selectedCountry","setSelectedCountry","fullNumber","setFullNumber","match","c","a","b","handleNumberChange","input","handleCountrySelect","country","filteredCountries","formatted","TextArea","ImagePicker","accept","id","dragDrop","image","setImage","isDragging","setIsDragging","inputRef","handleFileChange","files","file","preview","imgObj","removeImage","handleDragOver","handleDragLeave","handleDrop","handleButtonClick","Icon","Input","type","onKeyDown","negativeNumberAllow","showPassword","setShowPassword","handleKeyDown","prev","TinyEditor","editorKey","height","inline","plugins","toolbar","menubar","fontFamily","initConfig","imageUploadHandler","Editor","blobInfo","resolve","reject","url","error","content","Checkbox","multiSelect","isChecked","handleSingleChange","handleMultipleChange","checked","newValue","index","AudioPicker","ButtonComponent","buttonProps","audio","setAudio","cleanupAudio","removeAudio","RenderFields","field","formData","handleChange","rows","inputClass","minLength","finalPlaceholder","baseClass","FilterDrawer","isOpen","onClose","config","onApply","filters","setFilters","handleApply","handleReset","X","BADGE_COLORS","BADGE_VARIANTS","Chip","colorConfig","variantKey","variantClasses","TableSkeleton","columns","_","rowIndex","colIndex","ImagePreview","src","alt","setIsOpen","closePreview","handleEsc","Table","table_head","loading","filter","pagination","emptyMessage","onMenuAction","setServerSidePaginationData","onFilterApply","filterConfig","activeMenu","setActiveMenu","menuList","setMenuList","menuPosition","setMenuPosition","showFilters","setShowFilters","targetImage","setTargetImage","filteredData","useMemo","currentPage","setCurrentPage","pageSize","setPageSize","totalRecords","setTotalRecords","totalPages","paginatedData","start","menuRef","buttonRefs","searchTimeoutRef","handleSearchChange","handleActionClick","action","handleMenuToggle","itemId","menu_list","button","menuWidth","menuHeight","viewportWidth","viewportHeight","left","top","calculateRowNumber","openPreview","renderAvatar","imageSrc","imageAlt","fallback_icon","User","renderAudio","audioSrc","Music","renderGroupCell","row","col","handleRenderChip","chipObj","handleRenderCellValue","el","EllipsisVertical","handleColumnClick","isColumnClickable","handleScroll","Filter","newLimit","newPage","ChevronLeft","ChevronRight","createPortal","i","d","Modal","icon","title","actionButtons","actions","showDefaultClose","footerConfig","hideFooter","onFormSubmit","onCancel","loadingBtn","executeFunction","selectedItem","sizeClasses","btn","resp","Form","onSubmit","initialData","formClass","formFields","setFormData","handleSubmit","form","Details","fields","containerClass","DetailRow","GroupRow","subtitle","CrudPage","fetchData","isStaticData","tableConfig","modalConfig","setLoading","formLoading","setFormLoading","listingData","setListingData","paginationData","setPaginationData","serverSidePaginationData","filterData","setFilterData","changeFilterData","setChangeFilterData","showAdd","setShowAdd","showEdit","setShowEdit","showDelete","setShowDelete","showView","setShowView","setSelectedItem","handleMenuAction","executeAction","onSuccess","success_message","error_message","enqueueSnackbar","handleAddResult","newObj","handleGetListing","handleEditResult","updatedObj","targetObj","handleDeleteResult","handleAddFormSubmit","_b","handleEditFormSubmit","handleFilterData","filterByMatchingFields","SnackbarProvider","snackbarKey","Plus","_c","_d","_e","_f","_g","_h","_i","_j","_k","_l","_m","_n","_o","_p","optionType","PropTypes","actionButtonType","menuActionType","tableHeadType","formFieldType","viewFieldType","injectStyles","style","cssRules","Crud"],"mappings":"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"}
|