react-admin-crud-manager 1.0.20 → 1.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs.js +23 -23
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.es.js +549 -542
- 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 formData = {},\r\n dependencyKey = \"\",\r\n}) => {\r\n const [open, setOpen] = useState(false);\r\n const [searchTerm, setSearchTerm] = useState(\"\");\r\n const [showAboveState, setShowAboveState] = useState(true);\r\n const dropdownRef = useRef(null);\r\n const searchInputRef = useRef(null);\r\n const [normalizedOptions, setNormalizedOptions] = useState([]);\r\n\r\n let initialVal = value || value === false ? value : defaultValue;\r\n\r\n const normalize = (val) => {\r\n if (val === null || val === undefined || val === \"\") return \"\";\r\n return typeof val === \"boolean\" ? String(val) : String(val ?? \"\");\r\n };\r\n\r\n useEffect(\r\n () => {\r\n const loadOptions = async () => {\r\n if (typeof options === \"function\") {\r\n const result = await options(formData);\r\n setNormalizedOptions(result);\r\n } else {\r\n setNormalizedOptions(options || []);\r\n }\r\n };\r\n\r\n loadOptions();\r\n },\r\n dependencyKey ? [options, formData?.[dependencyKey]] : [options],\r\n ); // ✅ Add dependencyKey if options depend on formData\r\n\r\n const normalizedValue = multiple\r\n ? (initialVal || []).map(normalize)\r\n : normalize(initialVal);\r\n\r\n const filteredOptions = normalizedOptions.filter((option) =>\r\n option.label.toLowerCase().includes(searchTerm.toLowerCase()),\r\n );\r\n\r\n const isSelected = (optionValue) => {\r\n const normalized = normalize(optionValue);\r\n if (multiple) {\r\n return normalizedValue.includes(normalized);\r\n }\r\n return normalized === normalizedValue;\r\n };\r\n\r\n useEffect(() => {\r\n const handleClickOutside = (event) => {\r\n if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {\r\n setOpen(false);\r\n setSearchTerm(\"\");\r\n }\r\n };\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (open && dropdownRef.current) {\r\n const rect = dropdownRef.current.getBoundingClientRect();\r\n const viewportHeight = window.innerHeight;\r\n const spaceBelow = viewportHeight - rect.bottom;\r\n const dropdownHeight = 200;\r\n setShowAboveState(spaceBelow < dropdownHeight);\r\n }\r\n }, [open]);\r\n\r\n useEffect(() => {\r\n if (open && searchInputRef.current) {\r\n searchInputRef.current.focus();\r\n }\r\n }, [open]);\r\n\r\n const handleOptionClick = (optionValue) => {\r\n let finalValue = optionValue;\r\n if (optionValue === \"true\") finalValue = true;\r\n else if (optionValue === \"false\") finalValue = false;\r\n\r\n if (multiple) {\r\n const exists = normalizedValue.includes(normalize(optionValue));\r\n\r\n let newValues;\r\n if (exists) {\r\n newValues = value.filter(\r\n (v) => normalize(v) !== normalize(optionValue),\r\n );\r\n } else {\r\n newValues = [...(value || []), finalValue];\r\n }\r\n\r\n onChange(newValues);\r\n } else {\r\n onChange(finalValue);\r\n setOpen(false);\r\n }\r\n\r\n setSearchTerm(\"\");\r\n };\r\n\r\n const selectedLabels = multiple\r\n ? normalizedOptions\r\n .filter((opt) => isSelected(opt.value))\r\n .map((opt) => opt.label)\r\n .join(\", \")\r\n : normalizedOptions.find((opt) => isSelected(opt.value))?.label;\r\n\r\n useEffect(() => {\r\n if (initialVal || initialVal === false) {\r\n setTimeout(() => {\r\n onChange(initialVal);\r\n }, 100);\r\n }\r\n }, []);\r\n\r\n return (\r\n <div key={name} className={parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n\r\n <div className={`relative ${className}`} ref={dropdownRef}>\r\n <select\r\n name=\"hidden_select_for_validation\"\r\n value={selectedLabels || \"\"}\r\n required={required}\r\n multiple={multiple}\r\n className=\"absolute opacity-0 right-1/2 top-[80%] -translate-x-1/2 -translate-y-1/2 pointer-events-none h-[10px]\"\r\n >\r\n <option hidden value={selectedLabels}>\r\n {selectedLabels}\r\n </option>\r\n </select>\r\n <button\r\n type=\"button\"\r\n onClick={() => !disabled && setOpen(!open)}\r\n disabled={disabled}\r\n className={`w-full h-10 px-3 border border-gray-300 dark:border-gray-600 rounded-md text-left text-sm flex items-center justify-between \r\n ${\r\n !selectedLabels\r\n ? \"text-gray-500 dark:text-gray-400\"\r\n : \"dark:text-white\"\r\n } \r\n ${disabled ? \"opacity-50 cursor-not-allowed\" : \"dark:bg-gray-700\"}`}\r\n >\r\n <span className=\"truncate\">{selectedLabels || placeholder}</span>\r\n\r\n <ChevronDown\r\n className={`w-4 h-4 transition-transform ${\r\n open ? \"rotate-180\" : \"\"\r\n }`}\r\n />\r\n </button>\r\n\r\n {open && (\r\n <div\r\n className={`absolute z-50 w-full border rounded-md bg-white dark:bg-gray-700 shadow-lg \r\n ${showAboveState ? \"bottom-full mb-1\" : \"top-full mt-1\"}`}\r\n >\r\n {search && (\r\n <div className=\"p-2 border-b border-gray-200 dark:border-gray-600\">\r\n <div className=\"relative\">\r\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400\" />\r\n <input\r\n ref={searchInputRef}\r\n type=\"text\"\r\n value={searchTerm}\r\n onChange={(e) => setSearchTerm(e.target.value)}\r\n placeholder=\"Search...\"\r\n className=\"w-full pl-9 pr-3 py-2 text-sm border rounded-md bg-white dark:bg-gray-800 dark:text-white placeholder-gray-500 dark:placeholder-gray-400 focus:outline-none\"\r\n />\r\n </div>\r\n </div>\r\n )}\r\n\r\n <div\r\n className={`max-h-40 overflow-y-auto`}\r\n style={{\r\n maxHeight: dropdownMaxHeight || \"\",\r\n }}\r\n >\r\n {filteredOptions.length > 0 ? (\r\n filteredOptions.map((option) => (\r\n <button\r\n key={String(option.value)}\r\n type=\"button\"\r\n onClick={() => handleOptionClick(String(option.value))}\r\n className={`w-full px-3 py-2 text-left text-sm flex items-center justify-between hover:bg-gray-100 dark:hover:bg-gray-600 \r\n ${\r\n isSelected(option.value)\r\n ? \"bg-blue-50 dark:bg-blue-900/20 text-blue-700 dark:text-blue-300\"\r\n : \"\"\r\n }`}\r\n >\r\n <span>{option.label}</span>\r\n\r\n {multiple && isSelected(option.value) && (\r\n <Check className=\"w-4 h-4\" />\r\n )}\r\n </button>\r\n ))\r\n ) : (\r\n <div className=\"px-3 py-2 text-sm text-gray-500 dark:text-gray-400\">\r\n No options found\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default Select;\r\n","import React from \"react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nconst Switch = ({\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}) => {\r\n const [audio, setAudio] = useState(null);\r\n const [isDragging, setIsDragging] = useState(false);\r\n const inputRef = useRef(null);\r\n\r\n // Sync external value\r\n useEffect(() => {\r\n if (!value) {\r\n cleanupAudio();\r\n setAudio(null);\r\n return;\r\n }\r\n\r\n if (value instanceof File) {\r\n const preview = URL.createObjectURL(value);\r\n setAudio({ file: value, preview });\r\n\r\n return () => {\r\n URL.revokeObjectURL(preview);\r\n };\r\n } else if (typeof value === \"string\") {\r\n setAudio({ preview: value });\r\n } else if (value?.preview) {\r\n setAudio(value);\r\n }\r\n }, [value]);\r\n\r\n // Cleanup function\r\n const cleanupAudio = () => {\r\n if (audio?.preview && audio.preview.startsWith(\"blob:\")) {\r\n URL.revokeObjectURL(audio.preview);\r\n }\r\n };\r\n\r\n const handleFileChange = (files) => {\r\n if (!files || files.length === 0) {\r\n return;\r\n }\r\n\r\n const file = files[0];\r\n const preview = URL.createObjectURL(file);\r\n\r\n // Cleanup previous preview\r\n cleanupAudio();\r\n setAudio({ file, preview });\r\n onChange?.(file);\r\n };\r\n\r\n const removeAudio = (e) => {\r\n if (e) {\r\n e.stopPropagation();\r\n }\r\n\r\n cleanupAudio();\r\n setAudio(null);\r\n onChange?.(null);\r\n\r\n // Reset input value\r\n if (inputRef.current) {\r\n inputRef.current.value = \"\";\r\n }\r\n };\r\n\r\n // Drag events\r\n const handleDragOver = (e) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(true);\r\n };\r\n\r\n const handleDragLeave = (e) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(false);\r\n };\r\n\r\n const handleDrop = (e) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(false);\r\n handleFileChange(e.dataTransfer.files);\r\n };\r\n\r\n const handleButtonClick = () => {\r\n inputRef.current.click();\r\n };\r\n\r\n return (\r\n <div key={name} className={parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n\r\n <div\r\n className={`relative rounded-lg p-2 transition-all ${\r\n isDragging\r\n ? \"border-2 border-dashed border-blue-500 bg-blue-50 dark:bg-blue-900/20\"\r\n : \"border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-800\"\r\n }`}\r\n onDragOver={handleDragOver}\r\n onDragLeave={handleDragLeave}\r\n onDrop={handleDrop}\r\n >\r\n {/* Hidden file input */}\r\n <input\r\n ref={inputRef}\r\n id={id}\r\n type=\"file\"\r\n accept={accept}\r\n onChange={(e) => handleFileChange(e.target.files)}\r\n required={required && !audio}\r\n className=\"absolute opacity-0 right-[50%] top-[80%] -translate-y-1/2 pointer-events-none h-[10px]\"\r\n />\r\n\r\n {/* Content */}\r\n <div\r\n className={`flex items-center space-x-4 transition-all ${\r\n isDragging ? \"opacity-50\" : \"\"\r\n }`}\r\n >\r\n {audio ? (\r\n // Audio player with close button and change button\r\n <div className=\"flex items-center space-x-4\">\r\n {/* Close button */}\r\n <div className=\"relative w-full\">\r\n {!required && (\r\n <button\r\n type=\"button\"\r\n onClick={removeAudio}\r\n className=\"absolute top-0 -right-2 bg-red-500 text-white rounded-full p-1 shadow-lg hover:bg-red-600 transition-colors z-10 focus:outline-none focus:ring-2 focus:ring-red-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800\"\r\n aria-label=\"Remove audio\"\r\n >\r\n <Icon icon=\"mdi:close\" className=\"w-3 h-3\" />\r\n </button>\r\n )}\r\n\r\n {/* Audio player */}\r\n <audio\r\n key={audio.preview}\r\n src={audio.preview}\r\n controls\r\n controlsList=\"nodownload\"\r\n />\r\n </div>\r\n <Button type=\"button\" onClick={handleButtonClick}>\r\n <span>Change Audio File</span>\r\n </Button>\r\n </div>\r\n ) : (\r\n // Empty state with upload button\r\n <div className=\"flex items-center justify-center space-x-4\">\r\n <div className=\"rounded-full bg-gray-100 dark:bg-gray-700 h-20 w-20 flex items-center justify-center\">\r\n <Icon icon=\"mdi:music\" className=\"text-gray-400 w-10 h-10\" />\r\n </div>\r\n\r\n <Button\r\n type=\"button\"\r\n onClick={handleButtonClick}\r\n variant=\"outlined\"\r\n >\r\n <span>Choose Audio File</span>\r\n </Button>\r\n\r\n {/* Drag & drop hint */}\r\n {dragDrop && (\r\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">\r\n or drag and drop your audio file here\r\n </p>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Drag overlay */}\r\n {dragDrop && isDragging && !audio && (\r\n <div className=\"absolute inset-0 flex items-center justify-center pointer-events-none bg-blue-500/10 rounded-lg\">\r\n <span className=\"text-blue-600 dark:text-blue-400 font-semibold text-lg bg-white dark:bg-gray-800 px-4 py-2 rounded-lg shadow-lg\">\r\n Drop audio here\r\n </span>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default AudioPicker;\r\n","import 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 renderCondition,\r\n optionDependencyKey,\r\n } = field;\r\n\r\n let value = formData?.[key];\r\n if (value === undefined || value === null) {\r\n value = \"\";\r\n }\r\n\r\n const finalPlaceholder =\r\n placeholder || (type === \"select\" ? `Select ${label}` : `Enter ${label}`);\r\n\r\n const baseClass =\r\n \"w-full px-3 py-2 rounded-md border border-gray-300 dark:border-gray-600 text-sm focus:outline-none focus:ring-1 focus:ring-blue-200 bg-white text-black dark:bg-gray-700 dark:text-white\";\r\n\r\n if (renderCondition && typeof renderCondition === \"function\") {\r\n const shouldRender = renderCondition(formData);\r\n if (!shouldRender) {\r\n return null;\r\n }\r\n }\r\n\r\n switch (type) {\r\n case \"select\":\r\n return (\r\n <Select\r\n options={options || []}\r\n value={value}\r\n formData={formData}\r\n dependencyKey={optionDependencyKey}\r\n onChange={(val) => handleChange(key, val)}\r\n placeholder={finalPlaceholder}\r\n className={inputClass || \"\"}\r\n search={search}\r\n required={required}\r\n defaultValue={defaultValue}\r\n label={label}\r\n name={key}\r\n disabled={disabled}\r\n parentClass={parentClass}\r\n multiple={multiple}\r\n dropdownMaxHeight={dropdownMaxHeight}\r\n />\r\n );\r\n\r\n case \"checkbox\":\r\n return (\r\n <Checkbox\r\n name={key}\r\n label={label}\r\n options={options || []}\r\n value={value}\r\n onChange={(val) => handleChange(key, val)}\r\n required={required}\r\n parentClass={parentClass}\r\n className={inputClass || \"\"}\r\n multiSelect={multiple}\r\n disabled={disabled}\r\n />\r\n );\r\n\r\n case \"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 Plus,\r\n} from \"lucide-react\";\r\nimport { createPortal } from \"react-dom\";\r\nimport { formatDate, searchLocalData } from \"../../lib/utils\";\r\nimport Button from \"../Button/Button\";\r\nimport FilterDrawer from \"../Filter/FilterDrawer\";\r\nimport Chip from \"../Chip/Chip\";\r\nimport TableSkeleton from \"./components/TableSkeleton\";\r\nimport ImagePreview from \"./components/ImagePreview\";\r\n\r\nconst Table = ({ config, setShowAdd, title, buttonText, description }) => {\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 if (image && image.src instanceof File) {\r\n image = { ...image, src: URL.createObjectURL(image.src) };\r\n }\r\n setTargetImage(image);\r\n setIsOpen(true);\r\n };\r\n\r\n const renderAvatar = (\r\n imageSrc,\r\n imageAlt,\r\n className,\r\n fallback_icon = null,\r\n ) => {\r\n return (\r\n <>\r\n {imageSrc ? (\r\n <img\r\n src={\r\n imageSrc instanceof File\r\n ? URL.createObjectURL(imageSrc)\r\n : imageSrc\r\n }\r\n alt={imageAlt || \"Avatar\"}\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n openPreview({ src: imageSrc, alt: imageAlt });\r\n }}\r\n className={`w-10 h-10 cursor-pointer shrink-0 rounded-full object-cover border border-gray-200 dark:border-gray-700 ${className || \"\"}`}\r\n />\r\n ) : (\r\n <>\r\n {fallback_icon ? (\r\n 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={\r\n audioSrc instanceof File\r\n ? URL.createObjectURL(audioSrc)\r\n : audioSrc\r\n }\r\n controls\r\n src={\r\n audioSrc instanceof File\r\n ? URL.createObjectURL(audioSrc)\r\n : audioSrc\r\n }\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n }}\r\n className={`w-64 cursor-pointer ${className || \"\"}`}\r\n />\r\n ) : (\r\n <>\r\n <div\r\n className={`w-12 h-12 flex items-center shrink-0 justify-center rounded-full border border-gray-300 dark:border-gray-700 bg-gray-200 dark:bg-gray-600 ${className || \"\"}`}\r\n >\r\n <Music className=\"w-6 h-6 text-gray-400 dark:text-gray-400\" />\r\n </div>\r\n </>\r\n )}\r\n </>\r\n );\r\n };\r\n\r\n const renderGroupCell = (row, col) => {\r\n return (\r\n <div className={`flex items-center space-x-4 ${col.className || \"\"}`}>\r\n {col.imageKey\r\n ? renderAvatar(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 {/* header Bar */}\r\n\r\n <div className=\"flex flex-col sm:flex-row sm:justify-between gap-4 mb-3\">\r\n <div>\r\n <h1 className=\"text-2xl font-bold text-gray-900 dark:text-white\">\r\n {title}\r\n </h1>\r\n <p className=\"text-md text-gray-600 dark:text-gray-400\">\r\n {description}\r\n </p>\r\n </div>\r\n <div className=\"flex flex-col justify-end items-end gap-2\">\r\n <Button\r\n onClick={() => setShowAdd(true)}\r\n variant=\"contained\"\r\n color=\"primary\"\r\n >\r\n <Plus className=\"w-4 h-4 mr-2\" />\r\n {buttonText || \"Add New\"}\r\n </Button>\r\n <div className=\"flex justify-end items-center gap-2\">\r\n {search.enabled && (\r\n <div className=\"\">\r\n <div className=\"relative min-w-[300px]\">\r\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400 dark:text-gray-300\" />\r\n <input\r\n type=\"text\"\r\n placeholder={search.placeholder || \"Search...\"}\r\n value={searchTerm}\r\n onChange={(e) => handleSearchChange(e.target.value)}\r\n className=\"w-full h-[36px] pl-9 pr-4 py-3 text-sm border border-gray-300 dark:border-gray-600 rounded-md bg-gray-50 dark:bg-gray-700 text-gray-900 dark:text-white placeholder-gray-500 dark:placeholder-gray-400 focus:outline-none focus:ring-1 focus:ring-blue-300 dark:ring-blue-200 disabled:opacity-50\"\r\n />\r\n </div>\r\n </div>\r\n )}\r\n\r\n {filterConfig && filter.enabled && (\r\n <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 </div>\r\n </div>\r\n {/* =========================== Table =========================== */}\r\n <div className=\"bg-white dark:bg-gray-800 rounded-lg shadow overflow-hidden border border-gray-200 dark:border-gray-700\">\r\n <div className=\"overflow-x-auto\">\r\n <table className=\"min-w-full divide-y divide-gray-200 dark:divide-gray-700\">\r\n <thead className=\"bg-gray-50 dark:bg-gray-700/60\">\r\n <tr>\r\n {table_head.map((col) => (\r\n <th\r\n key={col.key}\r\n className={`px-6 py-4 text-left text-xs font-medium text-black dark:text-white uppercase tracking-wider min-w-max max-w-[180px] truncate ${col.headClass || \"\"}`}\r\n >\r\n {col.title}\r\n </th>\r\n ))}\r\n </tr>\r\n </thead>\r\n\r\n <tbody className=\"bg-white dark:bg-gray-800 divide-y divide-gray-200 dark:divide-gray-700\">\r\n {paginatedData.length === 0 ? (\r\n <tr>\r\n <td\r\n colSpan={table_head.length}\r\n className=\"text-center py-10 text-gray-500 dark:text-gray-400\"\r\n >\r\n {emptyMessage}\r\n </td>\r\n </tr>\r\n ) : (\r\n paginatedData.map((row, index) => (\r\n <tr\r\n key={row.id || row._id || index}\r\n className=\"hover:bg-gray-50 dark:hover:bg-blue-800/10 transition\"\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 if (image && image.src instanceof File) {\r\n image = { ...image, src: URL.createObjectURL(image.src) };\r\n }\r\n setTargetImage(image);\r\n setIsOpen(true);\r\n };\r\n\r\n const 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 instanceof File ? URL.createObjectURL(value) : value}\r\n controls\r\n src={value instanceof File ? URL.createObjectURL(value) : value}\r\n onClick={(e) => e.stopPropagation()}\r\n className=\"shadow-md rounded-full\"\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 instanceof File ? URL.createObjectURL(image) : image}\r\n alt={title}\r\n onClick={() => openPreview({ src: image, alt: title })}\r\n className=\"w-16 h-16 cursor-pointer rounded-full object-cover border-2 border-gray-200 dark:border-gray-700\"\r\n />\r\n ) : fallback_icon ? (\r\n fallback_icon\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 { X } from \"lucide-react\";\r\nimport Table from \"./Table/Table\";\r\nimport Modal from \"./Modal/Modal\";\r\nimport Form from \"./Form/Form\";\r\nimport { Icon } from \"@iconify/react\";\r\nimport { enqueueSnackbar } from \"notistack\";\r\nimport Details from \"./Details/Details\";\r\nimport PropTypes from \"prop-types\";\r\nimport { SnackbarProvider } from \"notistack\";\r\n\r\nconst CrudPage = ({ config }) => {\r\n const {\r\n title,\r\n fetchData = async () => {},\r\n isStaticData = false,\r\n tableConfig = {},\r\n modalConfig = {},\r\n filterConfig,\r\n } = config;\r\n\r\n const [loading, setLoading] = useState(true);\r\n const [formLoading, setFormLoading] = useState(false);\r\n\r\n const [listingData, setListingData] = useState([]);\r\n const [paginationData, setPaginationData] = useState(null);\r\n const [serverSidePaginationData, setServerSidePaginationData] = useState({\r\n search: \"\",\r\n rows_per_page: 50,\r\n current_page: 1,\r\n });\r\n const [filterData, setFilterData] = useState({});\r\n const [changeFilterData, setChangeFilterData] = useState(false);\r\n\r\n const [showAdd, setShowAdd] = useState(false);\r\n const [showEdit, setShowEdit] = useState(false);\r\n const [showDelete, setShowDelete] = useState(false);\r\n const [showView, setShowView] = useState(false);\r\n const [selectedItem, setSelectedItem] = useState(null);\r\n\r\n const handleMenuAction = (action, item) => {\r\n if (action === \"edit\") {\r\n setSelectedItem(item);\r\n setShowEdit(true);\r\n } else if (action === \"view\") {\r\n setSelectedItem(item);\r\n setShowView(true);\r\n } else if (action === \"delete\") {\r\n setSelectedItem(item);\r\n setShowDelete(true);\r\n }\r\n };\r\n\r\n const executeAction = async (\r\n action,\r\n onSuccess,\r\n success_message = \"\",\r\n error_message = \"\",\r\n ) => {\r\n setFormLoading(true);\r\n\r\n try {\r\n const resp = await action?.();\r\n if (success_message || resp.message) {\r\n enqueueSnackbar(success_message || resp.message, {\r\n variant: \"success\",\r\n });\r\n }\r\n onSuccess?.(resp);\r\n } catch (error) {\r\n if (error_message || error.message) {\r\n enqueueSnackbar(error_message || error.message, { variant: \"error\" });\r\n }\r\n } finally {\r\n setFormLoading(false);\r\n }\r\n };\r\n\r\n const handleAddResult = (resp) => {\r\n let newObj = resp.newObject;\r\n if (isStaticData) {\r\n setListingData((prev) => [newObj, ...prev]);\r\n setPaginationData((prev) => ({\r\n ...prev,\r\n current_page: 1,\r\n }));\r\n } else {\r\n setServerSidePaginationData((prev) => ({\r\n ...prev,\r\n current_page: 1,\r\n }));\r\n if (serverSidePaginationData.current_page == 1) {\r\n handleGetListing();\r\n }\r\n }\r\n setShowAdd(false);\r\n };\r\n\r\n const handleEditResult = (resp) => {\r\n let updatedObj = resp.newObject;\r\n let targetObj = resp.targetObject;\r\n if (isStaticData) {\r\n setListingData((prev) =>\r\n prev.map((item) =>\r\n item.id === targetObj.id ? { ...item, ...updatedObj } : item,\r\n ),\r\n );\r\n } else {\r\n handleGetListing();\r\n }\r\n setShowEdit(false);\r\n };\r\n\r\n const handleDeleteResult = (resp) => {\r\n if (!resp) {\r\n setShowDelete(false);\r\n setSelectedItem(null);\r\n return;\r\n }\r\n\r\n if (isStaticData) {\r\n setListingData((prev) =>\r\n prev.filter((item) => item.id !== resp.targetObject.id),\r\n );\r\n } else {\r\n if (\r\n listingData.length == 1 &&\r\n serverSidePaginationData.current_page > 1\r\n ) {\r\n setServerSidePaginationData((prev) => ({\r\n ...prev,\r\n current_page: prev.current_page - 1,\r\n }));\r\n } else {\r\n handleGetListing();\r\n }\r\n }\r\n setShowDelete(false);\r\n setSelectedItem(null);\r\n };\r\n\r\n const handleAddFormSubmit = (formData) =>\r\n executeAction(\r\n () => modalConfig?.addModal?.handleSubmit?.(formData),\r\n handleAddResult,\r\n );\r\n\r\n const handleEditFormSubmit = (formData) =>\r\n executeAction(\r\n () => modalConfig?.editModal?.handleSubmit?.(formData, selectedItem),\r\n handleEditResult,\r\n );\r\n\r\n const handleDeleteConfirm = () =>\r\n executeAction(\r\n () => modalConfig?.deleteModal?.action?.(selectedItem),\r\n handleDeleteResult,\r\n );\r\n\r\n const handleGetListing = async () => {\r\n setLoading(true);\r\n\r\n fetchData?.({ ...serverSidePaginationData, ...filterData })\r\n .then((resp) => {\r\n setListingData(resp.data);\r\n setPaginationData(resp.pagination);\r\n })\r\n .catch((error) => {\r\n enqueueSnackbar(error.message, { variant: \"error\" });\r\n })\r\n .finally(() => {\r\n setLoading(false);\r\n });\r\n };\r\n\r\n const handleFilterData = (data) => {\r\n setFilterData((prev) => ({\r\n ...data,\r\n }));\r\n if (tableConfig?.filter?.useServerSideFilters) {\r\n setChangeFilterData((prev) => !prev);\r\n }\r\n };\r\n\r\n const filterByMatchingFields = (data, filters) => {\r\n return data.filter((item) =>\r\n Object.entries(filters).every(([key, value]) => item[key] === value),\r\n );\r\n };\r\n\r\n const filteredData = useMemo(() => {\r\n if (tableConfig?.filter?.useServerSideFilters) return listingData;\r\n return filterByMatchingFields(listingData, filterData);\r\n }, [listingData, filterData]);\r\n\r\n useEffect(() => {\r\n handleGetListing();\r\n }, [\r\n serverSidePaginationData.search,\r\n serverSidePaginationData.rows_per_page,\r\n serverSidePaginationData.current_page,\r\n changeFilterData,\r\n ]);\r\n\r\n return (\r\n <SnackbarProvider\r\n maxSnack={3}\r\n anchorOrigin={{\r\n vertical: \"bottom\",\r\n horizontal: \"right\",\r\n }}\r\n autoHideDuration={3000}\r\n action={(snackbarKey) => (\r\n <button\r\n onClick={() => {\r\n window.dispatchEvent(\r\n new CustomEvent(\"closeSnackbar\", { detail: snackbarKey }),\r\n );\r\n }}\r\n className=\"p-1 hover:bg-white/20 rounded-full transition-colors duration-200 text-white flex items-center justify-center\"\r\n >\r\n <X className=\"h-4 w-4\" />\r\n </button>\r\n )}\r\n >\r\n <div>\r\n {/* Table */}\r\n <Table\r\n title={title}\r\n setShowAdd={setShowAdd}\r\n description={config.description}\r\n buttonText={config.buttonText}\r\n 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","formData","dependencyKey","open","setOpen","useState","setSearchTerm","showAboveState","setShowAboveState","dropdownRef","useRef","searchInputRef","normalizedOptions","setNormalizedOptions","initialVal","normalize","useEffect","result","normalizedValue","filteredOptions","option","isSelected","optionValue","normalized","handleClickOutside","event","rect","spaceBelow","handleOptionClick","finalValue","exists","newValues","v","selectedLabels","opt","ChevronDown","Search","e","Check","Switch","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","audio","setAudio","cleanupAudio","removeAudio","RenderFields","field","handleChange","rows","inputClass","minLength","renderCondition","optionDependencyKey","finalPlaceholder","baseClass","FilterDrawer","isOpen","onClose","config","onApply","filters","setFilters","handleApply","handleReset","X","BADGE_COLORS","BADGE_VARIANTS","Chip","colorConfig","variantKey","variantClasses","TableSkeleton","columns","_","i","rowIndex","colIndex","ImagePreview","src","alt","setIsOpen","closePreview","handleEsc","Table","setShowAdd","title","buttonText","description","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","Plus","Filter","newLimit","newPage","ChevronLeft","ChevronRight","createPortal","d","Modal","icon","actionButtons","actions","showDefaultClose","footerConfig","hideFooter","onFormSubmit","onCancel","loadingBtn","executeFunction","selectedItem","sizeClasses","btn","resp","Form","onSubmit","initialData","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","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","_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 formData = {},\r\n dependencyKey = \"\",\r\n}) => {\r\n const [open, setOpen] = useState(false);\r\n const [searchTerm, setSearchTerm] = useState(\"\");\r\n const [showAboveState, setShowAboveState] = useState(true);\r\n const dropdownRef = useRef(null);\r\n const searchInputRef = useRef(null);\r\n const [normalizedOptions, setNormalizedOptions] = useState([]);\r\n\r\n let initialVal = value || value === false ? value : defaultValue;\r\n\r\n const normalize = (val) => {\r\n if (val === null || val === undefined || val === \"\") return \"\";\r\n return typeof val === \"boolean\" ? String(val) : String(val ?? \"\");\r\n };\r\n\r\n useEffect(\r\n () => {\r\n const loadOptions = async () => {\r\n if (typeof options === \"function\") {\r\n const result = await options(formData);\r\n setNormalizedOptions(result);\r\n } else {\r\n setNormalizedOptions(options || []);\r\n }\r\n };\r\n\r\n loadOptions();\r\n },\r\n dependencyKey ? [options, formData?.[dependencyKey]] : [options],\r\n ); // ✅ Add dependencyKey if options depend on formData\r\n\r\n const normalizedValue = multiple\r\n ? (initialVal || []).map(normalize)\r\n : normalize(initialVal);\r\n\r\n const filteredOptions = normalizedOptions.filter((option) =>\r\n option.label.toLowerCase().includes(searchTerm.toLowerCase()),\r\n );\r\n\r\n const isSelected = (optionValue) => {\r\n const normalized = normalize(optionValue);\r\n if (multiple) {\r\n return normalizedValue.includes(normalized);\r\n }\r\n return normalized === normalizedValue;\r\n };\r\n\r\n useEffect(() => {\r\n const handleClickOutside = (event) => {\r\n if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {\r\n setOpen(false);\r\n setSearchTerm(\"\");\r\n }\r\n };\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (open && dropdownRef.current) {\r\n const rect = dropdownRef.current.getBoundingClientRect();\r\n const viewportHeight = window.innerHeight;\r\n const spaceBelow = viewportHeight - rect.bottom;\r\n const dropdownHeight = 200;\r\n setShowAboveState(spaceBelow < dropdownHeight);\r\n }\r\n }, [open]);\r\n\r\n useEffect(() => {\r\n if (open && searchInputRef.current) {\r\n searchInputRef.current.focus();\r\n }\r\n }, [open]);\r\n\r\n const handleOptionClick = (optionValue) => {\r\n let finalValue = optionValue;\r\n if (optionValue === \"true\") finalValue = true;\r\n else if (optionValue === \"false\") finalValue = false;\r\n\r\n if (multiple) {\r\n const exists = normalizedValue.includes(normalize(optionValue));\r\n\r\n let newValues;\r\n if (exists) {\r\n newValues = value.filter(\r\n (v) => normalize(v) !== normalize(optionValue),\r\n );\r\n } else {\r\n newValues = [...(value || []), finalValue];\r\n }\r\n\r\n onChange(newValues);\r\n } else {\r\n onChange(finalValue);\r\n setOpen(false);\r\n }\r\n\r\n setSearchTerm(\"\");\r\n };\r\n\r\n const selectedLabels = multiple\r\n ? normalizedOptions\r\n .filter((opt) => isSelected(opt.value))\r\n .map((opt) => opt.label)\r\n .join(\", \")\r\n : normalizedOptions.find((opt) => isSelected(opt.value))?.label;\r\n\r\n useEffect(() => {\r\n if (initialVal || initialVal === false) {\r\n setTimeout(() => {\r\n onChange(initialVal);\r\n }, 100);\r\n }\r\n }, []);\r\n\r\n return (\r\n <div key={name} className={parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n\r\n <div className={`relative ${className}`} ref={dropdownRef}>\r\n <select\r\n name=\"hidden_select_for_validation\"\r\n value={selectedLabels || \"\"}\r\n required={required}\r\n multiple={multiple}\r\n className=\"absolute opacity-0 right-1/2 top-[80%] -translate-x-1/2 -translate-y-1/2 pointer-events-none h-[10px]\"\r\n >\r\n <option hidden value={selectedLabels}>\r\n {selectedLabels}\r\n </option>\r\n </select>\r\n <button\r\n type=\"button\"\r\n onClick={() => !disabled && setOpen(!open)}\r\n disabled={disabled}\r\n className={`w-full h-10 px-3 border border-gray-300 dark:border-gray-600 rounded-md text-left text-sm flex items-center justify-between \r\n ${\r\n !selectedLabels\r\n ? \"text-gray-500 dark:text-gray-400\"\r\n : \"dark:text-white\"\r\n } \r\n ${disabled ? \"opacity-50 cursor-not-allowed\" : \"dark:bg-gray-700\"}`}\r\n >\r\n <span className=\"truncate\">{selectedLabels || placeholder}</span>\r\n\r\n <ChevronDown\r\n className={`w-4 h-4 transition-transform ${\r\n open ? \"rotate-180\" : \"\"\r\n }`}\r\n />\r\n </button>\r\n\r\n {open && (\r\n <div\r\n className={`absolute z-50 w-full border rounded-md bg-white dark:bg-gray-700 shadow-lg \r\n ${showAboveState ? \"bottom-full mb-1\" : \"top-full mt-1\"}`}\r\n >\r\n {search && (\r\n <div className=\"p-2 border-b border-gray-200 dark:border-gray-600\">\r\n <div className=\"relative\">\r\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400\" />\r\n <input\r\n ref={searchInputRef}\r\n type=\"text\"\r\n value={searchTerm}\r\n onChange={(e) => setSearchTerm(e.target.value)}\r\n placeholder=\"Search...\"\r\n className=\"w-full pl-9 pr-3 py-2 text-sm border rounded-md bg-white dark:bg-gray-800 dark:text-white placeholder-gray-500 dark:placeholder-gray-400 focus:outline-none\"\r\n />\r\n </div>\r\n </div>\r\n )}\r\n\r\n <div\r\n className={`max-h-40 overflow-y-auto`}\r\n style={{\r\n maxHeight: dropdownMaxHeight || \"\",\r\n }}\r\n >\r\n {filteredOptions.length > 0 ? (\r\n filteredOptions.map((option) => (\r\n <button\r\n key={String(option.value)}\r\n type=\"button\"\r\n onClick={() => handleOptionClick(String(option.value))}\r\n className={`w-full px-3 py-2 text-left text-sm flex items-center justify-between hover:bg-gray-100 dark:hover:bg-gray-600 \r\n ${\r\n isSelected(option.value)\r\n ? \"bg-blue-50 dark:bg-blue-900/20 text-blue-700 dark:text-blue-300\"\r\n : \"\"\r\n }`}\r\n >\r\n <span>{option.label}</span>\r\n\r\n {multiple && isSelected(option.value) && (\r\n <Check className=\"w-4 h-4\" />\r\n )}\r\n </button>\r\n ))\r\n ) : (\r\n <div className=\"px-3 py-2 text-sm text-gray-500 dark:text-gray-400\">\r\n No options found\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default Select;\r\n","import React from \"react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nconst Switch = ({\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, { useEffect, useState } from \"react\";\r\nimport { Icon } from \"@iconify/react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nconst Input = React.forwardRef(\r\n (\r\n {\r\n label,\r\n required,\r\n parentClass = \"\",\r\n className = \"\",\r\n type = \"text\",\r\n onKeyDown,\r\n negativeNumberAllow = true,\r\n defaultValue = \"\",\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const [showPassword, setShowPassword] = useState(false);\r\n\r\n const handleKeyDown = (e) => {\r\n if (type === \"number\") {\r\n const blockedKeys = [\"e\", \"E\", \"+\"];\r\n\r\n // Block e, E, +\r\n if (blockedKeys.includes(e.key)) {\r\n e.preventDefault();\r\n return;\r\n }\r\n\r\n // Block negative sign if not allowed\r\n if (negativeNumberAllow == false && e.key === \"-\") {\r\n e.preventDefault();\r\n return;\r\n }\r\n\r\n // Block arrow up/down from changing value\r\n if ([\"ArrowUp\", \"ArrowDown\"].includes(e.key)) {\r\n e.preventDefault();\r\n return;\r\n }\r\n }\r\n\r\n onKeyDown?.(e);\r\n };\r\n\r\n const combinedClassName = `\r\n h-10 placeholder-gray-400 dark:placeholder-gray-400\r\n ${type === \"password\" ? \"pr-10\" : \"\"}\r\n ${type === \"number\" ? \"no-spinner\" : \"\"}\r\n ${className}\r\n `.trim();\r\n\r\n useEffect(() => {\r\n if (defaultValue) {\r\n setTimeout(() => {\r\n props.onChange?.({ target: { value: defaultValue } });\r\n }, 100);\r\n }\r\n }, [defaultValue]);\r\n\r\n return (\r\n <>\r\n <div key={props.name} className={parentClass || \"col-span-12\"}>\r\n <InputLabel 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}) => {\r\n const [audio, setAudio] = useState(null);\r\n const [isDragging, setIsDragging] = useState(false);\r\n const inputRef = useRef(null);\r\n\r\n // Sync external value\r\n useEffect(() => {\r\n if (!value) {\r\n cleanupAudio();\r\n setAudio(null);\r\n return;\r\n }\r\n\r\n if (value instanceof File) {\r\n const preview = URL.createObjectURL(value);\r\n setAudio({ file: value, preview });\r\n\r\n return () => {\r\n URL.revokeObjectURL(preview);\r\n };\r\n } else if (typeof value === \"string\") {\r\n setAudio({ preview: value });\r\n } else if (value?.preview) {\r\n setAudio(value);\r\n }\r\n }, [value]);\r\n\r\n // Cleanup function\r\n const cleanupAudio = () => {\r\n if (audio?.preview && audio.preview.startsWith(\"blob:\")) {\r\n URL.revokeObjectURL(audio.preview);\r\n }\r\n };\r\n\r\n const handleFileChange = (files) => {\r\n if (!files || files.length === 0) {\r\n return;\r\n }\r\n\r\n const file = files[0];\r\n const preview = URL.createObjectURL(file);\r\n\r\n // Cleanup previous preview\r\n cleanupAudio();\r\n setAudio({ file, preview });\r\n onChange?.(file);\r\n };\r\n\r\n const removeAudio = (e) => {\r\n if (e) {\r\n e.stopPropagation();\r\n }\r\n\r\n cleanupAudio();\r\n setAudio(null);\r\n onChange?.(null);\r\n\r\n // Reset input value\r\n if (inputRef.current) {\r\n inputRef.current.value = \"\";\r\n }\r\n };\r\n\r\n // Drag events\r\n const handleDragOver = (e) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(true);\r\n };\r\n\r\n const handleDragLeave = (e) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(false);\r\n };\r\n\r\n const handleDrop = (e) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(false);\r\n handleFileChange(e.dataTransfer.files);\r\n };\r\n\r\n const handleButtonClick = () => {\r\n inputRef.current.click();\r\n };\r\n\r\n return (\r\n <div key={name} className={parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n\r\n <div\r\n className={`relative rounded-lg p-2 transition-all ${\r\n isDragging\r\n ? \"border-2 border-dashed border-blue-500 bg-blue-50 dark:bg-blue-900/20\"\r\n : \"border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-800\"\r\n }`}\r\n onDragOver={handleDragOver}\r\n onDragLeave={handleDragLeave}\r\n onDrop={handleDrop}\r\n >\r\n {/* Hidden file input */}\r\n <input\r\n ref={inputRef}\r\n id={id}\r\n type=\"file\"\r\n accept={accept}\r\n onChange={(e) => handleFileChange(e.target.files)}\r\n required={required && !audio}\r\n className=\"absolute opacity-0 right-[50%] top-[80%] -translate-y-1/2 pointer-events-none h-[10px]\"\r\n />\r\n\r\n {/* Content */}\r\n <div\r\n className={`flex items-center space-x-4 transition-all ${\r\n isDragging ? \"opacity-50\" : \"\"\r\n }`}\r\n >\r\n {audio ? (\r\n // Audio player with close button and change button\r\n <div className=\"flex items-center space-x-4\">\r\n {/* Close button */}\r\n <div className=\"relative w-full\">\r\n {!required && (\r\n <button\r\n type=\"button\"\r\n onClick={removeAudio}\r\n className=\"absolute top-0 -right-2 bg-red-500 text-white rounded-full p-1 shadow-lg hover:bg-red-600 transition-colors z-10 focus:outline-none focus:ring-2 focus:ring-red-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800\"\r\n aria-label=\"Remove audio\"\r\n >\r\n <Icon icon=\"mdi:close\" className=\"w-3 h-3\" />\r\n </button>\r\n )}\r\n\r\n {/* Audio player */}\r\n <audio\r\n key={audio.preview}\r\n src={audio.preview}\r\n controls\r\n controlsList=\"nodownload\"\r\n />\r\n </div>\r\n <Button type=\"button\" onClick={handleButtonClick}>\r\n <span>Change Audio File</span>\r\n </Button>\r\n </div>\r\n ) : (\r\n // Empty state with upload button\r\n <div className=\"flex items-center justify-center space-x-4\">\r\n <div className=\"rounded-full bg-gray-100 dark:bg-gray-700 h-20 w-20 flex items-center justify-center\">\r\n <Icon icon=\"mdi:music\" className=\"text-gray-400 w-10 h-10\" />\r\n </div>\r\n\r\n <Button\r\n type=\"button\"\r\n onClick={handleButtonClick}\r\n variant=\"outlined\"\r\n >\r\n <span>Choose Audio File</span>\r\n </Button>\r\n\r\n {/* Drag & drop hint */}\r\n {dragDrop && (\r\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">\r\n or drag and drop your audio file here\r\n </p>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Drag overlay */}\r\n {dragDrop && isDragging && !audio && (\r\n <div className=\"absolute inset-0 flex items-center justify-center pointer-events-none bg-blue-500/10 rounded-lg\">\r\n <span className=\"text-blue-600 dark:text-blue-400 font-semibold text-lg bg-white dark:bg-gray-800 px-4 py-2 rounded-lg shadow-lg\">\r\n Drop audio here\r\n </span>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default AudioPicker;\r\n","import 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 renderCondition,\r\n optionDependencyKey,\r\n } = field;\r\n\r\n let value = formData?.[key];\r\n if (value === undefined || value === null) {\r\n value = \"\";\r\n }\r\n\r\n const finalPlaceholder =\r\n placeholder || (type === \"select\" ? `Select ${label}` : `Enter ${label}`);\r\n\r\n const baseClass =\r\n \"w-full px-3 py-2 rounded-md border border-gray-300 dark:border-gray-600 text-sm focus:outline-none focus:ring-1 focus:ring-blue-200 bg-white text-black dark:bg-gray-700 dark:text-white\";\r\n\r\n if (renderCondition && typeof renderCondition === \"function\") {\r\n const shouldRender = renderCondition(formData);\r\n if (!shouldRender) {\r\n return null;\r\n }\r\n }\r\n\r\n switch (type) {\r\n case \"select\":\r\n return (\r\n <Select\r\n options={options || []}\r\n value={value}\r\n formData={formData}\r\n dependencyKey={optionDependencyKey}\r\n onChange={(val) => handleChange(key, val)}\r\n placeholder={finalPlaceholder}\r\n className={inputClass || \"\"}\r\n search={search}\r\n required={required}\r\n defaultValue={defaultValue}\r\n label={label}\r\n name={key}\r\n disabled={disabled}\r\n parentClass={parentClass}\r\n multiple={multiple}\r\n dropdownMaxHeight={dropdownMaxHeight}\r\n />\r\n );\r\n\r\n case \"checkbox\":\r\n return (\r\n <Checkbox\r\n name={key}\r\n label={label}\r\n options={options || []}\r\n value={value}\r\n onChange={(val) => handleChange(key, val)}\r\n required={required}\r\n parentClass={parentClass}\r\n className={inputClass || \"\"}\r\n multiSelect={multiple}\r\n disabled={disabled}\r\n />\r\n );\r\n\r\n case \"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 defaultValue={defaultValue}\r\n value={value}\r\n onChange={(e) => handleChange(key, e.target.value)}\r\n placeholder={finalPlaceholder}\r\n className={`${baseClass} ${inputClass || \"\"}`}\r\n required={required}\r\n name={key}\r\n minLength={minLength}\r\n label={label}\r\n negativeNumberAllow={negativeNumberAllow}\r\n parentClass={parentClass}\r\n disabled={disabled}\r\n />\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 Plus,\r\n} from \"lucide-react\";\r\nimport { createPortal } from \"react-dom\";\r\nimport { formatDate, searchLocalData } from \"../../lib/utils\";\r\nimport Button from \"../Button/Button\";\r\nimport FilterDrawer from \"../Filter/FilterDrawer\";\r\nimport Chip from \"../Chip/Chip\";\r\nimport TableSkeleton from \"./components/TableSkeleton\";\r\nimport ImagePreview from \"./components/ImagePreview\";\r\n\r\nconst Table = ({ config, setShowAdd, title, buttonText, description }) => {\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 if (image && image.src instanceof File) {\r\n image = { ...image, src: URL.createObjectURL(image.src) };\r\n }\r\n setTargetImage(image);\r\n setIsOpen(true);\r\n };\r\n\r\n const renderAvatar = (\r\n imageSrc,\r\n imageAlt,\r\n className,\r\n fallback_icon = null,\r\n ) => {\r\n return (\r\n <>\r\n {imageSrc ? (\r\n <img\r\n src={\r\n imageSrc instanceof File\r\n ? URL.createObjectURL(imageSrc)\r\n : imageSrc\r\n }\r\n alt={imageAlt || \"Avatar\"}\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n openPreview({ src: imageSrc, alt: imageAlt });\r\n }}\r\n className={`w-10 h-10 cursor-pointer shrink-0 rounded-full object-cover border border-gray-200 dark:border-gray-700 ${className || \"\"}`}\r\n />\r\n ) : (\r\n <>\r\n {fallback_icon ? (\r\n 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={\r\n audioSrc instanceof File\r\n ? URL.createObjectURL(audioSrc)\r\n : audioSrc\r\n }\r\n controls\r\n src={\r\n audioSrc instanceof File\r\n ? URL.createObjectURL(audioSrc)\r\n : audioSrc\r\n }\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n }}\r\n className={`w-64 cursor-pointer ${className || \"\"}`}\r\n />\r\n ) : (\r\n <>\r\n <div\r\n className={`w-12 h-12 flex items-center shrink-0 justify-center rounded-full border border-gray-300 dark:border-gray-700 bg-gray-200 dark:bg-gray-600 ${className || \"\"}`}\r\n >\r\n <Music className=\"w-6 h-6 text-gray-400 dark:text-gray-400\" />\r\n </div>\r\n </>\r\n )}\r\n </>\r\n );\r\n };\r\n\r\n const renderGroupCell = (row, col) => {\r\n return (\r\n <div className={`flex items-center space-x-4 ${col.className || \"\"}`}>\r\n {col.imageKey\r\n ? renderAvatar(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 {/* header Bar */}\r\n\r\n <div className=\"flex flex-col sm:flex-row sm:justify-between gap-4 mb-3\">\r\n <div>\r\n <h1 className=\"text-2xl font-bold text-gray-900 dark:text-white\">\r\n {title}\r\n </h1>\r\n <p className=\"text-md text-gray-600 dark:text-gray-400\">\r\n {description}\r\n </p>\r\n </div>\r\n <div className=\"flex flex-col justify-end items-end gap-2\">\r\n <Button\r\n onClick={() => setShowAdd(true)}\r\n variant=\"contained\"\r\n color=\"primary\"\r\n >\r\n <Plus className=\"w-4 h-4 mr-2\" />\r\n {buttonText || \"Add New\"}\r\n </Button>\r\n <div className=\"flex justify-end items-center gap-2\">\r\n {search.enabled && (\r\n <div className=\"\">\r\n <div className=\"relative min-w-[300px]\">\r\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400 dark:text-gray-300\" />\r\n <input\r\n type=\"text\"\r\n placeholder={search.placeholder || \"Search...\"}\r\n value={searchTerm}\r\n onChange={(e) => handleSearchChange(e.target.value)}\r\n className=\"w-full h-[36px] pl-9 pr-4 py-3 text-sm border border-gray-300 dark:border-gray-600 rounded-md bg-gray-50 dark:bg-gray-700 text-gray-900 dark:text-white placeholder-gray-500 dark:placeholder-gray-400 focus:outline-none focus:ring-1 focus:ring-blue-300 dark:ring-blue-200 disabled:opacity-50\"\r\n />\r\n </div>\r\n </div>\r\n )}\r\n\r\n {filterConfig && filter.enabled && (\r\n <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 </div>\r\n </div>\r\n {/* =========================== Table =========================== */}\r\n <div className=\"bg-white dark:bg-gray-800 rounded-lg shadow overflow-hidden border border-gray-200 dark:border-gray-700\">\r\n <div className=\"overflow-x-auto\">\r\n <table className=\"min-w-full divide-y divide-gray-200 dark:divide-gray-700\">\r\n <thead className=\"bg-gray-50 dark:bg-gray-700/60\">\r\n <tr>\r\n {table_head.map((col) => (\r\n <th\r\n key={col.key}\r\n className={`px-6 py-4 text-left text-xs font-medium text-black dark:text-white uppercase tracking-wider min-w-max max-w-[180px] truncate ${col.headClass || \"\"}`}\r\n >\r\n {col.title}\r\n </th>\r\n ))}\r\n </tr>\r\n </thead>\r\n\r\n <tbody className=\"bg-white dark:bg-gray-800 divide-y divide-gray-200 dark:divide-gray-700\">\r\n {paginatedData.length === 0 ? (\r\n <tr>\r\n <td\r\n colSpan={table_head.length}\r\n className=\"text-center py-10 text-gray-500 dark:text-gray-400\"\r\n >\r\n {emptyMessage}\r\n </td>\r\n </tr>\r\n ) : (\r\n paginatedData.map((row, index) => (\r\n <tr\r\n key={row.id || row._id || index}\r\n className=\"hover:bg-gray-50 dark:hover:bg-blue-800/10 transition\"\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 if (image && image.src instanceof File) {\r\n image = { ...image, src: URL.createObjectURL(image.src) };\r\n }\r\n setTargetImage(image);\r\n setIsOpen(true);\r\n };\r\n\r\n const 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 instanceof File ? URL.createObjectURL(value) : value}\r\n controls\r\n src={value instanceof File ? URL.createObjectURL(value) : value}\r\n onClick={(e) => e.stopPropagation()}\r\n className=\"shadow-md rounded-full\"\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 instanceof File ? URL.createObjectURL(image) : image}\r\n alt={title}\r\n onClick={() => openPreview({ src: image, alt: title })}\r\n className=\"w-16 h-16 cursor-pointer rounded-full object-cover border-2 border-gray-200 dark:border-gray-700\"\r\n />\r\n ) : fallback_icon ? (\r\n fallback_icon\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 { X } from \"lucide-react\";\r\nimport Table from \"./Table/Table\";\r\nimport Modal from \"./Modal/Modal\";\r\nimport Form from \"./Form/Form\";\r\nimport { Icon } from \"@iconify/react\";\r\nimport { enqueueSnackbar } from \"notistack\";\r\nimport Details from \"./Details/Details\";\r\nimport PropTypes from \"prop-types\";\r\nimport { SnackbarProvider } from \"notistack\";\r\n\r\nconst CrudPage = ({ config }) => {\r\n const {\r\n title,\r\n fetchData = async () => {},\r\n isStaticData = false,\r\n tableConfig = {},\r\n modalConfig = {},\r\n filterConfig,\r\n } = config;\r\n\r\n const [loading, setLoading] = useState(true);\r\n const [formLoading, setFormLoading] = useState(false);\r\n\r\n const [listingData, setListingData] = useState([]);\r\n const [paginationData, setPaginationData] = useState(null);\r\n const [serverSidePaginationData, setServerSidePaginationData] = useState({\r\n search: \"\",\r\n rows_per_page: 50,\r\n current_page: 1,\r\n });\r\n const [filterData, setFilterData] = useState({});\r\n const [changeFilterData, setChangeFilterData] = useState(false);\r\n\r\n const [showAdd, setShowAdd] = useState(false);\r\n const [showEdit, setShowEdit] = useState(false);\r\n const [showDelete, setShowDelete] = useState(false);\r\n const [showView, setShowView] = useState(false);\r\n const [selectedItem, setSelectedItem] = useState(null);\r\n\r\n const handleMenuAction = (action, item) => {\r\n if (action === \"edit\") {\r\n setSelectedItem(item);\r\n setShowEdit(true);\r\n } else if (action === \"view\") {\r\n setSelectedItem(item);\r\n setShowView(true);\r\n } else if (action === \"delete\") {\r\n setSelectedItem(item);\r\n setShowDelete(true);\r\n }\r\n };\r\n\r\n const executeAction = async (\r\n action,\r\n onSuccess,\r\n success_message = \"\",\r\n error_message = \"\",\r\n ) => {\r\n setFormLoading(true);\r\n\r\n try {\r\n const resp = await action?.();\r\n if (success_message || resp.message) {\r\n enqueueSnackbar(success_message || resp.message, {\r\n variant: \"success\",\r\n });\r\n }\r\n onSuccess?.(resp);\r\n } catch (error) {\r\n if (error_message || error.message) {\r\n enqueueSnackbar(error_message || error.message, { variant: \"error\" });\r\n }\r\n } finally {\r\n setFormLoading(false);\r\n }\r\n };\r\n\r\n const handleAddResult = (resp) => {\r\n let newObj = resp.newObject;\r\n if (isStaticData) {\r\n setListingData((prev) => [newObj, ...prev]);\r\n setPaginationData((prev) => ({\r\n ...prev,\r\n current_page: 1,\r\n }));\r\n } else {\r\n setServerSidePaginationData((prev) => ({\r\n ...prev,\r\n current_page: 1,\r\n }));\r\n if (serverSidePaginationData.current_page == 1) {\r\n handleGetListing();\r\n }\r\n }\r\n setShowAdd(false);\r\n };\r\n\r\n const handleEditResult = (resp) => {\r\n let updatedObj = resp.newObject;\r\n let targetObj = resp.targetObject;\r\n if (isStaticData) {\r\n setListingData((prev) =>\r\n prev.map((item) =>\r\n item.id === targetObj.id ? { ...item, ...updatedObj } : item,\r\n ),\r\n );\r\n } else {\r\n handleGetListing();\r\n }\r\n setShowEdit(false);\r\n };\r\n\r\n const handleDeleteResult = (resp) => {\r\n if (!resp) {\r\n setShowDelete(false);\r\n setSelectedItem(null);\r\n return;\r\n }\r\n\r\n if (isStaticData) {\r\n setListingData((prev) =>\r\n prev.filter((item) => item.id !== resp.targetObject.id),\r\n );\r\n } else {\r\n if (\r\n listingData.length == 1 &&\r\n serverSidePaginationData.current_page > 1\r\n ) {\r\n setServerSidePaginationData((prev) => ({\r\n ...prev,\r\n current_page: prev.current_page - 1,\r\n }));\r\n } else {\r\n handleGetListing();\r\n }\r\n }\r\n setShowDelete(false);\r\n setSelectedItem(null);\r\n };\r\n\r\n const handleAddFormSubmit = (formData) =>\r\n executeAction(\r\n () => modalConfig?.addModal?.handleSubmit?.(formData),\r\n handleAddResult,\r\n );\r\n\r\n const handleEditFormSubmit = (formData) =>\r\n executeAction(\r\n () => modalConfig?.editModal?.handleSubmit?.(formData, selectedItem),\r\n handleEditResult,\r\n );\r\n\r\n const handleDeleteConfirm = () =>\r\n executeAction(\r\n () => modalConfig?.deleteModal?.action?.(selectedItem),\r\n handleDeleteResult,\r\n );\r\n\r\n const handleGetListing = async () => {\r\n setLoading(true);\r\n\r\n fetchData?.({ ...serverSidePaginationData, ...filterData })\r\n .then((resp) => {\r\n setListingData(resp.data);\r\n setPaginationData(resp.pagination);\r\n })\r\n .catch((error) => {\r\n enqueueSnackbar(error.message, { variant: \"error\" });\r\n })\r\n .finally(() => {\r\n setLoading(false);\r\n });\r\n };\r\n\r\n const handleFilterData = (data) => {\r\n setFilterData((prev) => ({\r\n ...data,\r\n }));\r\n if (tableConfig?.filter?.useServerSideFilters) {\r\n setChangeFilterData((prev) => !prev);\r\n }\r\n };\r\n\r\n const filterByMatchingFields = (data, filters) => {\r\n return data.filter((item) =>\r\n Object.entries(filters).every(([key, value]) => item[key] === value),\r\n );\r\n };\r\n\r\n const filteredData = useMemo(() => {\r\n if (tableConfig?.filter?.useServerSideFilters) return listingData;\r\n return filterByMatchingFields(listingData, filterData);\r\n }, [listingData, filterData]);\r\n\r\n useEffect(() => {\r\n handleGetListing();\r\n }, [\r\n serverSidePaginationData.search,\r\n serverSidePaginationData.rows_per_page,\r\n serverSidePaginationData.current_page,\r\n changeFilterData,\r\n ]);\r\n\r\n return (\r\n <SnackbarProvider\r\n maxSnack={3}\r\n anchorOrigin={{\r\n vertical: \"bottom\",\r\n horizontal: \"right\",\r\n }}\r\n autoHideDuration={3000}\r\n action={(snackbarKey) => (\r\n <button\r\n onClick={() => {\r\n window.dispatchEvent(\r\n new CustomEvent(\"closeSnackbar\", { detail: snackbarKey }),\r\n );\r\n }}\r\n className=\"p-1 hover:bg-white/20 rounded-full transition-colors duration-200 text-white flex items-center justify-center\"\r\n >\r\n <X className=\"h-4 w-4\" />\r\n </button>\r\n )}\r\n >\r\n <div>\r\n {/* Table */}\r\n <Table\r\n title={title}\r\n setShowAdd={setShowAdd}\r\n description={config.description}\r\n buttonText={config.buttonText}\r\n 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","formData","dependencyKey","open","setOpen","useState","setSearchTerm","showAboveState","setShowAboveState","dropdownRef","useRef","searchInputRef","normalizedOptions","setNormalizedOptions","initialVal","normalize","useEffect","result","normalizedValue","filteredOptions","option","isSelected","optionValue","normalized","handleClickOutside","event","rect","spaceBelow","handleOptionClick","finalValue","exists","newValues","v","selectedLabels","opt","ChevronDown","Search","e","Check","Switch","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","audio","setAudio","cleanupAudio","removeAudio","RenderFields","field","handleChange","rows","inputClass","minLength","renderCondition","optionDependencyKey","finalPlaceholder","baseClass","FilterDrawer","isOpen","onClose","config","onApply","filters","setFilters","handleApply","handleReset","X","BADGE_COLORS","BADGE_VARIANTS","Chip","colorConfig","variantKey","variantClasses","TableSkeleton","columns","_","i","rowIndex","colIndex","ImagePreview","src","alt","setIsOpen","closePreview","handleEsc","Table","setShowAdd","title","buttonText","description","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","Plus","Filter","newLimit","newPage","ChevronLeft","ChevronRight","createPortal","d","Modal","icon","actionButtons","actions","showDefaultClose","footerConfig","hideFooter","onFormSubmit","onCancel","loadingBtn","executeFunction","selectedItem","sizeClasses","btn","resp","Form","onSubmit","initialData","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","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","_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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"}
|