react-admin-crud-manager 1.0.5 → 1.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../node_modules/react/cjs/react-jsx-runtime.production.js","../node_modules/react/cjs/react-jsx-runtime.development.js","../node_modules/react/jsx-runtime.js","../src/lib/utils.js","../src/components/Button/Button.jsx","../src/components/Form/components/InputLabel.jsx","../src/components/Form/components/Select.jsx","../src/components/Form/components/Switch.jsx","../src/data/countries.js","../src/components/Form/components/PhoneInput.jsx","../src/components/Form/components/TextArea.jsx","../src/components/Form/components/ImagePicker.jsx","../src/components/Form/components/Input.jsx","../src/components/Form/components/TinyEditor.jsx","../src/components/Form/components/Checkbox.jsx","../src/components/Form/components/RenderFields.jsx","../src/components/Filter/FilterDrawer.jsx","../src/components/Chip/Chip.jsx","../src/components/Table/components/TableSkeleton.jsx","../src/components/Table/components/ImagePreview.jsx","../src/components/Table/Table.jsx","../src/components/Modal/Modal.jsx","../src/components/Form/Form.jsx","../src/components/Details/Details.jsx","../src/components/CrudPage.jsx","../src/index.jsx"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return type.displayName || \"Context\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(type, key, props, owner, debugStack, debugTask) {\n var refProp = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== refProp ? refProp : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n debugStack,\n debugTask\n ) {\n var children = config.children;\n if (void 0 !== children)\n if (isStaticChildren)\n if (isArrayImpl(children)) {\n for (\n isStaticChildren = 0;\n isStaticChildren < children.length;\n isStaticChildren++\n )\n validateChildKeys(children[isStaticChildren]);\n Object.freeze && Object.freeze(children);\n } else\n console.error(\n \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n );\n else validateChildKeys(children);\n if (hasOwnProperty.call(config, \"key\")) {\n children = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return \"key\" !== k;\n });\n isStaticChildren =\n 0 < keys.length\n ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n : \"{key: someKey}\";\n didWarnAboutKeySpread[children + isStaticChildren] ||\n ((keys =\n 0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n console.error(\n 'A props object containing a \"key\" prop is being spread into JSX:\\n let props = %s;\\n <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n let props = %s;\\n <%s key={someKey} {...props} />',\n isStaticChildren,\n children,\n keys,\n children\n ),\n (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n }\n children = null;\n void 0 !== maybeKey &&\n (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n children &&\n defineKeyPropWarningGetter(\n maybeKey,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(\n type,\n children,\n maybeKey,\n getOwner(),\n debugStack,\n debugTask\n );\n }\n function validateChildKeys(node) {\n isValidElement(node)\n ? node._store && (node._store.validated = 1)\n : \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_LAZY_TYPE &&\n (\"fulfilled\" === node._payload.status\n ? isValidElement(node._payload.value) &&\n node._payload.value._store &&\n (node._payload.value._store.validated = 1)\n : node._store && (node._store.validated = 1));\n }\n function isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n }\n var React = require(\"react\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n isArrayImpl = Array.isArray,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n React = {\n react_stack_bottom_frame: function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(\n React,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutKeySpread = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsx = function (type, config, maybeKey) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !1,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n exports.jsxs = function (type, config, maybeKey) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !0,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","// ======= 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-blue-600 text-white hover:bg-blue-700 focus:ring-blue-500 shadow-sm\",\r\n outlined:\r\n \"border border-blue-600 bg-transparent text-blue-600 hover:bg-blue-50 focus:ring-blue-500\",\r\n text: \"bg-transparent text-blue-600 hover:bg-blue-50 focus:ring-blue-500\",\r\n },\r\n success: {\r\n contained:\r\n \"bg-green-600 text-white hover:bg-green-700 focus:ring-green-500 shadow-sm\",\r\n outlined:\r\n \"border border-green-600 bg-transparent text-green-600 hover:bg-green-50 focus:ring-green-500\",\r\n text: \"bg-transparent text-green-600 hover:bg-green-50 focus:ring-green-500\",\r\n },\r\n error: {\r\n contained:\r\n \"bg-red-600 text-white hover:bg-red-700 focus:ring-red-500 shadow-sm\",\r\n outlined:\r\n \"border border-red-600 bg-transparent text-red-600 hover:bg-red-50 focus:ring-red-500\",\r\n text: \"bg-transparent text-red-600 hover:bg-red-50 focus:ring-red-500\",\r\n },\r\n default: {\r\n contained:\r\n \"border bg-gray-200 text-gray-800 hover:bg-gray-300 focus:ring-gray-300 shadow-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-100 dark:hover:bg-gray-600 dark:focus:ring-gray-600\",\r\n outlined:\r\n \"border border-gray-300 bg-transparent text-gray-700 hover:bg-gray-100 focus:ring-gray-300 dark:border-gray-600 dark:text-gray-200 dark:hover:bg-gray-700 dark:focus:ring-gray-500\",\r\n text: \"bg-transparent text-gray-700 hover:bg-gray-100 focus:ring-gray-300 dark:text-gray-200 dark:hover:bg-gray-700 dark:focus:ring-gray-500\",\r\n },\r\n };\r\n\r\n const colorStyles =\r\n colorVariants[color]?.[variant] || colorVariants.default.contained;\r\n const sizeStyles = sizes[size];\r\n\r\n const combinedClassName = `\r\n ${baseStyles} \r\n ${colorStyles} \r\n ${sizeStyles} \r\n ${fullWidth ? \"w-full\" : \"\"} \r\n ${className}\r\n `.trim();\r\n\r\n return (\r\n <button\r\n ref={ref}\r\n type={props.type || \"button\"}\r\n className={combinedClassName}\r\n {...props}\r\n >\r\n {children}\r\n </button>\r\n );\r\n }\r\n);\r\n\r\nButton.displayName = \"Button\";\r\n\r\nexport default Button;\r\n","import React from \"react\";\r\n\r\nexport default function InputLabel({ label, required = false }) {\r\n return (\r\n <>\r\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\">\r\n {label}\r\n {required && <span className=\"ml-1\">*</span>}\r\n </label>\r\n </>\r\n );\r\n}\r\n","import React, { useState, useEffect, useRef } from \"react\";\r\nimport { ChevronDown, Search, Check } from \"lucide-react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nconst Select = ({\r\n options = [],\r\n value,\r\n onChange,\r\n placeholder = \"Select option\",\r\n className = \"\",\r\n disabled = false,\r\n search = false,\r\n label = \"\",\r\n required = false,\r\n name = \"\",\r\n parentClass = \"\",\r\n multiple = false, // ✅ NEW\r\n dropdownMaxHeight = \"\",\r\n}) => {\r\n const [open, setOpen] = useState(false);\r\n const [searchTerm, setSearchTerm] = useState(\"\");\r\n const [showAboveState, setShowAboveState] = useState(true);\r\n const dropdownRef = useRef(null);\r\n const searchInputRef = useRef(null);\r\n\r\n const normalize = (val) =>\r\n typeof val === \"boolean\" ? String(val) : String(val ?? \"\");\r\n\r\n const normalizedValue = multiple\r\n ? (value || []).map(normalize)\r\n : normalize(value);\r\n\r\n const filteredOptions = options.filter((option) =>\r\n option.label.toLowerCase().includes(searchTerm.toLowerCase()),\r\n );\r\n\r\n const isSelected = (optionValue) => {\r\n const normalized = normalize(optionValue);\r\n if (multiple) {\r\n return normalizedValue.includes(normalized);\r\n }\r\n return normalized === normalizedValue;\r\n };\r\n\r\n useEffect(() => {\r\n const handleClickOutside = (event) => {\r\n if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {\r\n setOpen(false);\r\n setSearchTerm(\"\");\r\n }\r\n };\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (open && dropdownRef.current) {\r\n const rect = dropdownRef.current.getBoundingClientRect();\r\n const viewportHeight = window.innerHeight;\r\n const spaceBelow = viewportHeight - rect.bottom;\r\n const dropdownHeight = 200;\r\n setShowAboveState(spaceBelow < dropdownHeight);\r\n }\r\n }, [open]);\r\n\r\n useEffect(() => {\r\n if (open && searchInputRef.current) {\r\n searchInputRef.current.focus();\r\n }\r\n }, [open]);\r\n\r\n const handleOptionClick = (optionValue) => {\r\n let finalValue = optionValue;\r\n if (optionValue === \"true\") finalValue = true;\r\n else if (optionValue === \"false\") finalValue = false;\r\n\r\n if (multiple) {\r\n const exists = normalizedValue.includes(normalize(optionValue));\r\n\r\n let newValues;\r\n if (exists) {\r\n newValues = value.filter(\r\n (v) => normalize(v) !== normalize(optionValue),\r\n );\r\n } else {\r\n newValues = [...(value || []), finalValue];\r\n }\r\n\r\n onChange(newValues);\r\n } else {\r\n onChange(finalValue);\r\n setOpen(false);\r\n }\r\n\r\n setSearchTerm(\"\");\r\n };\r\n\r\n const selectedLabels = multiple\r\n ? options\r\n .filter((opt) => isSelected(opt.value))\r\n .map((opt) => opt.label)\r\n .join(\", \")\r\n : options.find((opt) => isSelected(opt.value))?.label;\r\n\r\n return (\r\n <div key={name} className={parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n\r\n <div className={`relative ${className}`} ref={dropdownRef}>\r\n <button\r\n type=\"button\"\r\n onClick={() => !disabled && setOpen(!open)}\r\n disabled={disabled}\r\n className={`w-full h-10 px-3 border border-gray-300 dark:border-gray-600 rounded-md text-left text-sm flex items-center justify-between \r\n ${\r\n !selectedLabels\r\n ? \"text-gray-500 dark:text-gray-400\"\r\n : \"dark:text-white\"\r\n } \r\n ${disabled ? \"opacity-50 cursor-not-allowed\" : \"dark:bg-gray-700\"}`}\r\n >\r\n <span className=\"truncate\">{selectedLabels || placeholder}</span>\r\n\r\n <ChevronDown\r\n className={`w-4 h-4 transition-transform ${\r\n open ? \"rotate-180\" : \"\"\r\n }`}\r\n />\r\n </button>\r\n\r\n {open && (\r\n <div\r\n className={`absolute z-50 w-full border rounded-md bg-white dark:bg-gray-700 shadow-lg \r\n ${showAboveState ? \"bottom-full mb-1\" : \"top-full mt-1\"}`}\r\n >\r\n {search && (\r\n <div className=\"p-2 border-b border-gray-200 dark:border-gray-600\">\r\n <div className=\"relative\">\r\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400\" />\r\n <input\r\n ref={searchInputRef}\r\n type=\"text\"\r\n value={searchTerm}\r\n onChange={(e) => setSearchTerm(e.target.value)}\r\n placeholder=\"Search...\"\r\n className=\"w-full pl-9 pr-3 py-2 text-sm border rounded-md bg-white dark:bg-gray-800 dark:text-white placeholder-gray-500 dark:placeholder-gray-400 focus:outline-none\"\r\n />\r\n </div>\r\n </div>\r\n )}\r\n\r\n <div\r\n className={`max-h-40 overflow-y-auto`}\r\n style={{\r\n maxHeight: dropdownMaxHeight || \"\",\r\n }}\r\n >\r\n {filteredOptions.length > 0 ? (\r\n filteredOptions.map((option) => (\r\n <button\r\n key={String(option.value)}\r\n type=\"button\"\r\n onClick={() => handleOptionClick(String(option.value))}\r\n className={`w-full px-3 py-2 text-left text-sm flex items-center justify-between hover:bg-gray-100 dark:hover:bg-gray-600 \r\n ${\r\n isSelected(option.value)\r\n ? \"bg-blue-50 dark:bg-blue-900/20 text-blue-700 dark:text-blue-300\"\r\n : \"\"\r\n }`}\r\n >\r\n <span>{option.label}</span>\r\n\r\n {multiple && isSelected(option.value) && (\r\n <Check className=\"w-4 h-4\" />\r\n )}\r\n </button>\r\n ))\r\n ) : (\r\n <div className=\"px-3 py-2 text-sm text-gray-500 dark:text-gray-400\">\r\n No options found\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default Select;\r\n","import React from \"react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nconst Switch = ({\r\n value = true,\r\n onChange,\r\n text,\r\n options = [],\r\n label,\r\n required,\r\n name = \"\",\r\n disabled = false,\r\n parentClass = \"\",\r\n}) => {\r\n const radioOptions =\r\n options.length > 0\r\n ? options\r\n : [\r\n { label: \"Active\", value: true },\r\n { label: \"Inactive\", value: false },\r\n ];\r\n\r\n return (\r\n <>\r\n <div key={name} className={parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n <div className=\"flex items-center justify-between h-10 gap-4 bg-gray-100 dark:bg-gray-700 px-3 rounded-md border border-gray-100 dark:border-gray-600\">\r\n {/* Left Text */}\r\n {text && (\r\n <p className=\"text-xs text-gray-600 dark:text-gray-400 flex-shrink overflow-hidden text-ellipsis whitespace-nowrap max-w-[200px]\">\r\n {text}\r\n </p>\r\n )}\r\n\r\n {/* Radio Buttons */}\r\n <div className=\"flex items-center gap-6\">\r\n {radioOptions.map((opt, idx) => (\r\n <label\r\n key={idx}\r\n className=\"flex items-center gap-2 cursor-pointer select-none\"\r\n >\r\n <input\r\n type=\"radio\"\r\n name=\"switch-field\"\r\n required={required && idx === 0}\r\n value={opt.value}\r\n disabled={disabled}\r\n checked={value === opt.value}\r\n onChange={() => onChange(opt.value)}\r\n className=\"w-4 h-4 border-gray-300 cursor-pointer\"\r\n />\r\n <span className=\"text-sm text-gray-700 dark:text-white\">\r\n {opt.label}\r\n </span>\r\n </label>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default Switch;\r\n","export const countries = [\r\n { label: \"Afghanistan\", code: \"AF\", phone: \"93\" },\r\n { label: \"Aland Islands\", code: \"AX\", phone: \"358\" },\r\n { label: \"Albania\", code: \"AL\", phone: \"355\" },\r\n { label: \"Algeria\", code: \"DZ\", phone: \"213\" },\r\n { label: \"American Samoa\", code: \"AS\", phone: \"1\" },\r\n { label: \"Andorra\", code: \"AD\", phone: \"376\" },\r\n { label: \"Angola\", code: \"AO\", phone: \"244\" },\r\n { label: \"Anguilla\", code: \"AI\", phone: \"1\" },\r\n { label: \"Antarctica\", code: \"AQ\", phone: \"672\" },\r\n { label: \"Antigua and Barbuda\", code: \"AG\", phone: \"1\" },\r\n { label: \"Argentina\", code: \"AR\", phone: \"54\" },\r\n { label: \"Armenia\", code: \"AM\", phone: \"374\" },\r\n { label: \"Aruba\", code: \"AW\", phone: \"297\" },\r\n { label: \"Australia\", code: \"AU\", phone: \"61\" },\r\n { label: \"Austria\", code: \"AT\", phone: \"43\" },\r\n { label: \"Azerbaijan\", code: \"AZ\", phone: \"994\" },\r\n { label: \"Bahrain\", code: \"BH\", phone: \"973\" },\r\n { label: \"Bangladesh\", code: \"BD\", phone: \"880\" },\r\n { label: \"Barbados\", code: \"BB\", phone: \"1\" },\r\n { label: \"Belarus\", code: \"BY\", phone: \"375\" },\r\n { label: \"Belgium\", code: \"BE\", phone: \"32\" },\r\n { label: \"Belize\", code: \"BZ\", phone: \"501\" },\r\n { label: \"Benin\", code: \"BJ\", phone: \"229\" },\r\n { label: \"Bermuda\", code: \"BM\", phone: \"1\" },\r\n { label: \"Bhutan\", code: \"BT\", phone: \"975\" },\r\n { label: \"Bolivia\", code: \"BO\", phone: \"591\" },\r\n { label: \"Bonaire, Sint Eustatius and Saba\", code: \"BQ\", phone: \"599\" },\r\n { label: \"Bosnia and Herzegovina\", code: \"BA\", phone: \"387\" },\r\n { label: \"Botswana\", code: \"BW\", phone: \"267\" },\r\n { label: \"Bouvet Island\", code: \"BV\", phone: \"0055\" },\r\n { label: \"Brazil\", code: \"BR\", phone: \"55\" },\r\n { label: \"British Indian Ocean Territory\", code: \"IO\", phone: \"246\" },\r\n { label: \"Brunei\", code: \"BN\", phone: \"673\" },\r\n { label: \"Bulgaria\", code: \"BG\", phone: \"359\" },\r\n { label: \"Burkina Faso\", code: \"BF\", phone: \"226\" },\r\n { label: \"Burundi\", code: \"BI\", phone: \"257\" },\r\n { label: \"Cambodia\", code: \"KH\", phone: \"855\" },\r\n { label: \"Cameroon\", code: \"CM\", phone: \"237\" },\r\n { label: \"Canada\", code: \"CA\", phone: \"1\" },\r\n { label: \"Cape Verde\", code: \"CV\", phone: \"238\" },\r\n { label: \"Cayman Islands\", code: \"KY\", phone: \"1\" },\r\n { label: \"Central African Republic\", code: \"CF\", phone: \"236\" },\r\n { label: \"Chad\", code: \"TD\", phone: \"235\" },\r\n { label: \"Chile\", code: \"CL\", phone: \"56\" },\r\n { label: \"China\", code: \"CN\", phone: \"86\" },\r\n { label: \"Christmas Island\", code: \"CX\", phone: \"61\" },\r\n { label: \"Cocos (Keeling) Islands\", code: \"CC\", phone: \"61\" },\r\n { label: \"Colombia\", code: \"CO\", phone: \"57\" },\r\n { label: \"Comoros\", code: \"KM\", phone: \"269\" },\r\n { label: \"Congo\", code: \"CG\", phone: \"242\" },\r\n { label: \"Cook Islands\", code: \"CK\", phone: \"682\" },\r\n { label: \"Costa Rica\", code: \"CR\", phone: \"506\" },\r\n { label: \"Croatia\", code: \"HR\", phone: \"385\" },\r\n { label: \"Cuba\", code: \"CU\", phone: \"53\" },\r\n { label: \"Curaçao\", code: \"CW\", phone: \"599\" },\r\n { label: \"Cyprus\", code: \"CY\", phone: \"357\" },\r\n { label: \"Czech Republic\", code: \"CZ\", phone: \"420\" },\r\n { label: \"Democratic Republic of the Congo\", code: \"CD\", phone: \"243\" },\r\n { label: \"Denmark\", code: \"DK\", phone: \"45\" },\r\n { label: \"Djibouti\", code: \"DJ\", phone: \"253\" },\r\n { label: \"Dominica\", code: \"DM\", phone: \"1\" },\r\n { label: \"Dominican Republic\", code: \"DO\", phone: \"1\" },\r\n { label: \"Ecuador\", code: \"EC\", phone: \"593\" },\r\n { label: \"Egypt\", code: \"EG\", phone: \"20\" },\r\n { label: \"El Salvador\", code: \"SV\", phone: \"503\" },\r\n { label: \"Equatorial Guinea\", code: \"GQ\", phone: \"240\" },\r\n { label: \"Eritrea\", code: \"ER\", phone: \"291\" },\r\n { label: \"Estonia\", code: \"EE\", phone: \"372\" },\r\n { label: \"Eswatini\", code: \"SZ\", phone: \"268\" },\r\n { label: \"Ethiopia\", code: \"ET\", phone: \"251\" },\r\n { label: \"Falkland Islands\", code: \"FK\", phone: \"500\" },\r\n { label: \"Faroe Islands\", code: \"FO\", phone: \"298\" },\r\n { label: \"Fiji Islands\", code: \"FJ\", phone: \"679\" },\r\n { label: \"Finland\", code: \"FI\", phone: \"358\" },\r\n { label: \"France\", code: \"FR\", phone: \"33\" },\r\n { label: \"French Guiana\", code: \"GF\", phone: \"594\" },\r\n { label: \"French Polynesia\", code: \"PF\", phone: \"689\" },\r\n { label: \"French Southern Territories\", code: \"TF\", phone: \"262\" },\r\n { label: \"Gabon\", code: \"GA\", phone: \"241\" },\r\n { label: \"Georgia\", code: \"GE\", phone: \"995\" },\r\n { label: \"Germany\", code: \"DE\", phone: \"49\" },\r\n { label: \"Ghana\", code: \"GH\", phone: \"233\" },\r\n { label: \"Gibraltar\", code: \"GI\", phone: \"350\" },\r\n { label: \"Greece\", code: \"GR\", phone: \"30\" },\r\n { label: \"Greenland\", code: \"GL\", phone: \"299\" },\r\n { label: \"Grenada\", code: \"GD\", phone: \"1\" },\r\n { label: \"Guadeloupe\", code: \"GP\", phone: \"590\" },\r\n { label: \"Guam\", code: \"GU\", phone: \"1\" },\r\n { label: \"Guatemala\", code: \"GT\", phone: \"502\" },\r\n { label: \"Guernsey\", code: \"GG\", phone: \"44\" },\r\n { label: \"Guinea\", code: \"GN\", phone: \"224\" },\r\n { label: \"Guinea-Bissau\", code: \"GW\", phone: \"245\" },\r\n { label: \"Guyana\", code: \"GY\", phone: \"592\" },\r\n { label: \"Haiti\", code: \"HT\", phone: \"509\" },\r\n { label: \"Heard Island and McDonald Islands\", code: \"HM\", phone: \"672\" },\r\n { label: \"Honduras\", code: \"HN\", phone: \"504\" },\r\n { label: \"Hong Kong S.A.R.\", code: \"HK\", phone: \"852\" },\r\n { label: \"Hungary\", code: \"HU\", phone: \"36\" },\r\n { label: \"Iceland\", code: \"IS\", phone: \"354\" },\r\n { label: \"India\", code: \"IN\", phone: \"91\" },\r\n { label: \"Indonesia\", code: \"ID\", phone: \"62\" },\r\n { label: \"Iran\", code: \"IR\", phone: \"98\" },\r\n { label: \"Iraq\", code: \"IQ\", phone: \"964\" },\r\n { label: \"Ireland\", code: \"IE\", phone: \"353\" },\r\n { label: \"Israel\", code: \"IL\", phone: \"972\" },\r\n { label: \"Italy\", code: \"IT\", phone: \"39\" },\r\n { label: \"Ivory Coast\", code: \"CI\", phone: \"225\" },\r\n { label: \"Jamaica\", code: \"JM\", phone: \"1\" },\r\n { label: \"Japan\", code: \"JP\", phone: \"81\" },\r\n { label: \"Jersey\", code: \"JE\", phone: \"44\" },\r\n { label: \"Jordan\", code: \"JO\", phone: \"962\" },\r\n { label: \"Kazakhstan\", code: \"KZ\", phone: \"7\" },\r\n { label: \"Kenya\", code: \"KE\", phone: \"254\" },\r\n { label: \"Kiribati\", code: \"KI\", phone: \"686\" },\r\n { label: \"Kosovo\", code: \"XK\", phone: \"383\" },\r\n { label: \"Kuwait\", code: \"KW\", phone: \"965\" },\r\n { label: \"Kyrgyzstan\", code: \"KG\", phone: \"996\" },\r\n { label: \"Laos\", code: \"LA\", phone: \"856\" },\r\n { label: \"Latvia\", code: \"LV\", phone: \"371\" },\r\n { label: \"Lebanon\", code: \"LB\", phone: \"961\" },\r\n { label: \"Lesotho\", code: \"LS\", phone: \"266\" },\r\n { label: \"Liberia\", code: \"LR\", phone: \"231\" },\r\n { label: \"Libya\", code: \"LY\", phone: \"218\" },\r\n { label: \"Liechtenstein\", code: \"LI\", phone: \"423\" },\r\n { label: \"Lithuania\", code: \"LT\", phone: \"370\" },\r\n { label: \"Luxembourg\", code: \"LU\", phone: \"352\" },\r\n { label: \"Macau S.A.R.\", code: \"MO\", phone: \"853\" },\r\n { label: \"Madagascar\", code: \"MG\", phone: \"261\" },\r\n { label: \"Malawi\", code: \"MW\", phone: \"265\" },\r\n { label: \"Malaysia\", code: \"MY\", phone: \"60\" },\r\n { label: \"Maldives\", code: \"MV\", phone: \"960\" },\r\n { label: \"Mali\", code: \"ML\", phone: \"223\" },\r\n { label: \"Malta\", code: \"MT\", phone: \"356\" },\r\n { label: \"Man (Isle of)\", code: \"IM\", phone: \"44\" },\r\n { label: \"Marshall Islands\", code: \"MH\", phone: \"692\" },\r\n { label: \"Martinique\", code: \"MQ\", phone: \"596\" },\r\n { label: \"Mauritania\", code: \"MR\", phone: \"222\" },\r\n { label: \"Mauritius\", code: \"MU\", phone: \"230\" },\r\n { label: \"Mayotte\", code: \"YT\", phone: \"262\" },\r\n { label: \"Mexico\", code: \"MX\", phone: \"52\" },\r\n { label: \"Micronesia\", code: \"FM\", phone: \"691\" },\r\n { label: \"Moldova\", code: \"MD\", phone: \"373\" },\r\n { label: \"Monaco\", code: \"MC\", phone: \"377\" },\r\n { label: \"Mongolia\", code: \"MN\", phone: \"976\" },\r\n { label: \"Montenegro\", code: \"ME\", phone: \"382\" },\r\n { label: \"Montserrat\", code: \"MS\", phone: \"1\" },\r\n { label: \"Morocco\", code: \"MA\", phone: \"212\" },\r\n { label: \"Mozambique\", code: \"MZ\", phone: \"258\" },\r\n { label: \"Myanmar\", code: \"MM\", phone: \"95\" },\r\n { label: \"Namibia\", code: \"NA\", phone: \"264\" },\r\n { label: \"Nauru\", code: \"NR\", phone: \"674\" },\r\n { label: \"Nepal\", code: \"NP\", phone: \"977\" },\r\n { label: \"Netherlands\", code: \"NL\", phone: \"31\" },\r\n { label: \"New Caledonia\", code: \"NC\", phone: \"687\" },\r\n { label: \"New Zealand\", code: \"NZ\", phone: \"64\" },\r\n { label: \"Nicaragua\", code: \"NI\", phone: \"505\" },\r\n { label: \"Niger\", code: \"NE\", phone: \"227\" },\r\n { label: \"Nigeria\", code: \"NG\", phone: \"234\" },\r\n { label: \"Niue\", code: \"NU\", phone: \"683\" },\r\n { label: \"Norfolk Island\", code: \"NF\", phone: \"672\" },\r\n { label: \"North Korea\", code: \"KP\", phone: \"850\" },\r\n { label: \"North Macedonia\", code: \"MK\", phone: \"389\" },\r\n { label: \"Northern Mariana Islands\", code: \"MP\", phone: \"1\" },\r\n { label: \"Norway\", code: \"NO\", phone: \"47\" },\r\n { label: \"Oman\", code: \"OM\", phone: \"968\" },\r\n { label: \"Pakistan\", code: \"PK\", phone: \"92\" },\r\n { label: \"Palau\", code: \"PW\", phone: \"680\" },\r\n { label: \"Palestinian Territory Occupied\", code: \"PS\", phone: \"970\" },\r\n { label: \"Panama\", code: \"PA\", phone: \"507\" },\r\n { label: \"Papua New Guinea\", code: \"PG\", phone: \"675\" },\r\n { label: \"Paraguay\", code: \"PY\", phone: \"595\" },\r\n { label: \"Peru\", code: \"PE\", phone: \"51\" },\r\n { label: \"Philippines\", code: \"PH\", phone: \"63\" },\r\n { label: \"Pitcairn Island\", code: \"PN\", phone: \"870\" },\r\n { label: \"Poland\", code: \"PL\", phone: \"48\" },\r\n { label: \"Portugal\", code: \"PT\", phone: \"351\" },\r\n { label: \"Puerto Rico\", code: \"PR\", phone: \"1\" },\r\n { label: \"Qatar\", code: \"QA\", phone: \"974\" },\r\n { label: \"Reunion\", code: \"RE\", phone: \"262\" },\r\n { label: \"Romania\", code: \"RO\", phone: \"40\" },\r\n { label: \"Russia\", code: \"RU\", phone: \"7\" },\r\n { label: \"Rwanda\", code: \"RW\", phone: \"250\" },\r\n { label: \"Saint Helena\", code: \"SH\", phone: \"290\" },\r\n { label: \"Saint Kitts and Nevis\", code: \"KN\", phone: \"1\" },\r\n { label: \"Saint Lucia\", code: \"LC\", phone: \"1\" },\r\n { label: \"Saint Pierre and Miquelon\", code: \"PM\", phone: \"508\" },\r\n { label: \"Saint Vincent and the Grenadines\", code: \"VC\", phone: \"1\" },\r\n { label: \"Saint-Barthelemy\", code: \"BL\", phone: \"590\" },\r\n { label: \"Saint-Martin (French part)\", code: \"MF\", phone: \"590\" },\r\n { label: \"Samoa\", code: \"WS\", phone: \"685\" },\r\n { label: \"San Marino\", code: \"SM\", phone: \"378\" },\r\n { label: \"Sao Tome and Principe\", code: \"ST\", phone: \"239\" },\r\n { label: \"Saudi Arabia\", code: \"SA\", phone: \"966\" },\r\n { label: \"Senegal\", code: \"SN\", phone: \"221\" },\r\n { label: \"Serbia\", code: \"RS\", phone: \"381\" },\r\n { label: \"Seychelles\", code: \"SC\", phone: \"248\" },\r\n { label: \"Sierra Leone\", code: \"SL\", phone: \"232\" },\r\n { label: \"Singapore\", code: \"SG\", phone: \"65\" },\r\n { label: \"Sint Maarten (Dutch part)\", code: \"SX\", phone: \"1721\" },\r\n { label: \"Slovakia\", code: \"SK\", phone: \"421\" },\r\n { label: \"Slovenia\", code: \"SI\", phone: \"386\" },\r\n { label: \"Solomon Islands\", code: \"SB\", phone: \"677\" },\r\n { label: \"Somalia\", code: \"SO\", phone: \"252\" },\r\n { label: \"South Africa\", code: \"ZA\", phone: \"27\" },\r\n { label: \"South Georgia\", code: \"GS\", phone: \"500\" },\r\n { label: \"South Korea\", code: \"KR\", phone: \"82\" },\r\n { label: \"South Sudan\", code: \"SS\", phone: \"211\" },\r\n { label: \"Spain\", code: \"ES\", phone: \"34\" },\r\n { label: \"Sri Lanka\", code: \"LK\", phone: \"94\" },\r\n { label: \"Sudan\", code: \"SD\", phone: \"249\" },\r\n { label: \"Suriname\", code: \"SR\", phone: \"597\" },\r\n { label: \"Svalbard and Jan Mayen Islands\", code: \"SJ\", phone: \"47\" },\r\n { label: \"Sweden\", code: \"SE\", phone: \"46\" },\r\n { label: \"Switzerland\", code: \"CH\", phone: \"41\" },\r\n { label: \"Syria\", code: \"SY\", phone: \"963\" },\r\n { label: \"Taiwan\", code: \"TW\", phone: \"886\" },\r\n { label: \"Tajikistan\", code: \"TJ\", phone: \"992\" },\r\n { label: \"Tanzania\", code: \"TZ\", phone: \"255\" },\r\n { label: \"Thailand\", code: \"TH\", phone: \"66\" },\r\n { label: \"The Bahamas\", code: \"BS\", phone: \"1\" },\r\n { label: \"The Gambia\", code: \"GM\", phone: \"220\" },\r\n { label: \"Timor-Leste\", code: \"TL\", phone: \"670\" },\r\n { label: \"Togo\", code: \"TG\", phone: \"228\" },\r\n { label: \"Tokelau\", code: \"TK\", phone: \"690\" },\r\n { label: \"Tonga\", code: \"TO\", phone: \"676\" },\r\n { label: \"Trinidad and Tobago\", code: \"TT\", phone: \"1\" },\r\n { label: \"Tunisia\", code: \"TN\", phone: \"216\" },\r\n { label: \"Turkey\", code: \"TR\", phone: \"90\" },\r\n { label: \"Turkmenistan\", code: \"TM\", phone: \"993\" },\r\n { label: \"Turks and Caicos Islands\", code: \"TC\", phone: \"1\" },\r\n { label: \"Tuvalu\", code: \"TV\", phone: \"688\" },\r\n { label: \"Uganda\", code: \"UG\", phone: \"256\" },\r\n { label: \"Ukraine\", code: \"UA\", phone: \"380\" },\r\n { label: \"United Arab Emirates\", code: \"AE\", phone: \"971\" },\r\n { label: \"United Kingdom\", code: \"GB\", phone: \"44\" },\r\n { label: \"United States\", code: \"US\", phone: \"1\" },\r\n { label: \"United States Minor Outlying Islands\", code: \"UM\", phone: \"1\" },\r\n { label: \"Uruguay\", code: \"UY\", phone: \"598\" },\r\n { label: \"Uzbekistan\", code: \"UZ\", phone: \"998\" },\r\n { label: \"Vanuatu\", code: \"VU\", phone: \"678\" },\r\n { label: \"Vatican City State (Holy See)\", code: \"VA\", phone: \"379\" },\r\n { label: \"Venezuela\", code: \"VE\", phone: \"58\" },\r\n { label: \"Vietnam\", code: \"VN\", phone: \"84\" },\r\n { label: \"Virgin Islands (British)\", code: \"VG\", phone: \"1\" },\r\n { label: \"Virgin Islands (US)\", code: \"VI\", phone: \"1\" },\r\n { label: \"Wallis and Futuna Islands\", code: \"WF\", phone: \"681\" },\r\n { label: \"Western Sahara\", code: \"EH\", phone: \"212\" },\r\n { label: \"Yemen\", code: \"YE\", phone: \"967\" },\r\n { label: \"Zambia\", code: \"ZM\", phone: \"260\" },\r\n { label: \"Zimbabwe\", code: \"ZW\", phone: \"263\" },\r\n];\r\n","import React, { useState, useEffect, useRef } from \"react\";\r\nimport { countries } from \"../../../data/countries\";\r\nimport { ChevronDown, Search } from \"lucide-react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nexport default function PhoneInput({\r\n label = \"\",\r\n value = \"\",\r\n name = \"\",\r\n parentClass = \"\",\r\n onChange,\r\n disabled = false,\r\n required = false,\r\n placeholder = \"Phone number\",\r\n search = false,\r\n countriesList = false,\r\n defaultCountry = \"\",\r\n}) {\r\n const find_country_with_code = (value) => {\r\n return countries.find((obj) => obj.code == value);\r\n };\r\n\r\n const [selectedCountry, setSelectedCountry] = useState(\r\n find_country_with_code(defaultCountry) || countries[0],\r\n );\r\n const [fullNumber, setFullNumber] = useState(\"\");\r\n const [open, setOpen] = useState(false);\r\n const [searchTerm, setSearchTerm] = useState(\"\");\r\n const dropdownRef = useRef();\r\n\r\n // Match prefix when value starts with +code\r\n useEffect(() => {\r\n if (typeof value === \"string\" && value.startsWith(\"+\")) {\r\n const match = countries\r\n .filter((c) => value.startsWith(\"+\" + c.phone))\r\n .sort((a, b) => b.phone.length - a.phone.length)[0];\r\n if (match) {\r\n setSelectedCountry(match);\r\n setFullNumber(value.replace(\"+\" + match.phone, \"\"));\r\n return;\r\n }\r\n }\r\n setFullNumber(value);\r\n }, [value]);\r\n\r\n const handleNumberChange = (e) => {\r\n const input = e.target.value.replace(/\\D/g, \"\");\r\n setFullNumber(input);\r\n if (selectedCountry && onChange) {\r\n onChange(\"+\" + selectedCountry.phone + input);\r\n }\r\n };\r\n\r\n const handleCountrySelect = (country) => {\r\n setSelectedCountry(country);\r\n if (onChange) onChange(\"+\" + country.phone + fullNumber);\r\n setOpen(false);\r\n setSearchTerm(\"\");\r\n };\r\n\r\n // 🖱️ Close dropdown on outside click\r\n useEffect(() => {\r\n const handleClickOutside = (e) => {\r\n if (dropdownRef.current && !dropdownRef.current.contains(e.target))\r\n setOpen(false);\r\n };\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\r\n }, []);\r\n\r\n const filteredCountries = countries.filter(\r\n (c) =>\r\n c.label.toLowerCase().includes(searchTerm.toLowerCase()) ||\r\n c.phone.includes(searchTerm),\r\n );\r\n\r\n if (!countriesList) {\r\n const handleInputChange = (e) => {\r\n const input = e.target.value.replace(/[^+\\d]/g, \"\");\r\n const formatted = input.startsWith(\"+\")\r\n ? \"+\" + input.replace(/[+]/g, \"\").slice(0)\r\n : input;\r\n onChange(formatted);\r\n };\r\n\r\n return (\r\n <>\r\n <div key={name} className={parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n <input\r\n type=\"text\"\r\n value={value}\r\n onChange={handleInputChange}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n required={required}\r\n className=\"w-full h-10 px-3 text-sm border border-gray-300 dark:border-gray-600 rounded-md \r\n bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 focus:outline-none \r\n focus:ring-1 focus:ring-blue-300 dark:focus:ring-blue-200\"\r\n inputMode=\"tel\"\r\n pattern=\"^\\+\\d{1,15}$\"\r\n />\r\n </div>\r\n </>\r\n );\r\n }\r\n\r\n return (\r\n <>\r\n <div key={name} className={parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n <div className=\"relative \" ref={dropdownRef}>\r\n {/* Input container */}\r\n <div\r\n className={`h-[40px] flex items-center border rounded-md px-2 bg-white dark:bg-gray-700 transition-all\r\n ${\r\n open\r\n ? \"ring-0.5 ring-blue-100 border-blue-300\"\r\n : \"border-gray-300 dark:border-gray-600\"\r\n }\r\n ${disabled ? \"opacity-60 cursor-not-allowed\" : \"\"}`}\r\n >\r\n {/* Flag & dropdown */}\r\n <button\r\n type=\"button\"\r\n disabled={disabled}\r\n onClick={() => setOpen(!open)}\r\n className=\"flex items-center gap-1 pr-2 border-r border-gray-300 dark:border-gray-700 focus:outline-none\"\r\n >\r\n {selectedCountry ? (\r\n <img\r\n src={`https://flagcdn.com/w20/${selectedCountry.code.toLowerCase()}.png`}\r\n alt={selectedCountry.code}\r\n className=\"w-5 h-3 object-cover\"\r\n />\r\n ) : (\r\n <span className=\"text-gray-400 text-xs\">🌐</span>\r\n )}\r\n <ChevronDown className=\"w-3 h-3 text-gray-500\" />\r\n </button>\r\n\r\n {/* Country code */}\r\n {selectedCountry && (\r\n <span className=\"ml-2 text-sm text-gray-700 dark:text-gray-200 whitespace-nowrap\">\r\n +{selectedCountry.phone}\r\n </span>\r\n )}\r\n\r\n {/* Number input */}\r\n <input\r\n type=\"tel\"\r\n value={fullNumber}\r\n onChange={handleNumberChange}\r\n required={required}\r\n disabled={disabled || !selectedCountry}\r\n placeholder={!selectedCountry ? \"Select a country\" : placeholder}\r\n className=\"flex-1 ml-2 bg-transparent outline-none text-sm text-gray-800 dark:text-gray-100 placeholder-gray-400\"\r\n />\r\n\r\n {/* Hidden input for native browser validation */}\r\n <input\r\n type=\"tel\"\r\n required={required}\r\n tabIndex={-1}\r\n readOnly\r\n value={\r\n selectedCountry && fullNumber\r\n ? \"+\" + selectedCountry.phone + fullNumber\r\n : \"\"\r\n }\r\n style={{\r\n position: \"absolute\",\r\n opacity: 0,\r\n pointerEvents: \"none\",\r\n height: 0,\r\n }}\r\n />\r\n </div>\r\n\r\n {/* Dropdown */}\r\n {open && (\r\n <div className=\"absolute top-full left-0 w-full mt-1 border border-gray-300 dark:border-gray-700 rounded-md bg-white dark:bg-gray-700 shadow-lg z-50 max-h-60 overflow-y-auto\">\r\n {search && (\r\n <div className=\"p-2 border-b border-gray-200 dark:border-gray-700\">\r\n <div className=\"relative\">\r\n <Search className=\"absolute left-3 top-1/2 transform -translate-y-1/2 w-4 h-4 text-gray-400\" />\r\n <input\r\n type=\"text\"\r\n value={searchTerm}\r\n onChange={(e) => setSearchTerm(e.target.value)}\r\n placeholder=\"Search country...\"\r\n className=\"w-full pl-9 pr-3 py-2 text-sm border rounded-md bg-white dark:bg-gray-800 dark:text-white placeholder-gray-500 dark:placeholder-gray-400 focus:outline-none \"\r\n />\r\n </div>\r\n </div>\r\n )}\r\n\r\n {filteredCountries.map((c) => (\r\n <button\r\n key={c.code}\r\n type=\"button\"\r\n onClick={() => handleCountrySelect(c)}\r\n className=\"w-full flex items-center gap-2 px-2 py-1 text-sm hover:bg-blue-50 dark:hover:bg-gray-700 text-gray-800 dark:text-gray-100\"\r\n >\r\n <img\r\n src={`https://flagcdn.com/w20/${c.code.toLowerCase()}.png`}\r\n alt={c.code}\r\n className=\"w-5 h-3 object-cover\"\r\n />\r\n <span>\r\n {c.label} (+{c.phone})\r\n </span>\r\n </button>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </>\r\n );\r\n}\r\n","import React, { useState } from \"react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nconst TextArea = React.forwardRef(\r\n ({ className = \"\", label, required, ...props }, ref) => {\r\n const combinedClassName = `\r\n placeholder-gray-400 dark:placeholder-gray-400\r\n ${className}\r\n `.trim();\r\n\r\n return (\r\n <>\r\n <div key={props.name} className={props.parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n <div className=\"relative\">\r\n <textarea\r\n className={combinedClassName}\r\n ref={ref}\r\n required={required}\r\n {...props}\r\n />\r\n </div>\r\n </div>\r\n </>\r\n );\r\n },\r\n);\r\n\r\nTextArea.displayName = \"TextArea\";\r\n\r\nexport { TextArea };\r\n","import { Icon } from \"@iconify/react\";\r\nimport React, { useState, useEffect, useRef } from \"react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nconst ImagePicker = ({\r\n label = \"\",\r\n value = null,\r\n onChange,\r\n required = false,\r\n accept = \"image/*\",\r\n id,\r\n dragDrop = false,\r\n name = \"\",\r\n parentClass = \"\",\r\n}) => {\r\n const [image, setImage] = useState(value);\r\n const [isDragging, setIsDragging] = useState(false);\r\n const inputRef = useRef(null);\r\n\r\n useEffect(() => {\r\n setImage(value);\r\n }, [value]);\r\n\r\n const handleFileChange = (files) => {\r\n if (!files || files.length === 0) {\r\n setImage(null);\r\n onChange?.(null);\r\n return;\r\n }\r\n\r\n const file = files[0];\r\n const preview = URL.createObjectURL(file);\r\n const imgObj = { file, preview };\r\n\r\n setImage(imgObj);\r\n onChange?.(preview);\r\n };\r\n\r\n // Drag events\r\n const handleDragOver = (e) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(true);\r\n };\r\n\r\n const handleDragLeave = (e) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(false);\r\n };\r\n\r\n const handleDrop = (e) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(false);\r\n handleFileChange(e.dataTransfer.files);\r\n };\r\n\r\n return (\r\n <>\r\n <div key={name} className={parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n <div\r\n className={`relative rounded-md p-2 transition-all ${\r\n isDragging\r\n ? \"border border-dashed border-blue-500 bg-blue-50 dark:bg-blue-900\"\r\n : \"border bg-gray-50 dark:bg-gray-700\"\r\n }`}\r\n onDragOver={handleDragOver}\r\n onDragLeave={handleDragLeave}\r\n onDrop={handleDrop}\r\n >\r\n {/* Blur entire content when dragging */}\r\n <div\r\n className={`flex items-center space-x-3 transition-all ${\r\n isDragging ? \"filter blur-sm\" : \"\"\r\n }`}\r\n >\r\n {/* Left: preview clickable */}\r\n <div\r\n className=\"cursor-pointer\"\r\n onClick={() => inputRef.current.click()}\r\n >\r\n {image ? (\r\n <img\r\n src={image.preview || image}\r\n alt=\"preview\"\r\n className=\"object-cover w-20 h-20 rounded-full\"\r\n />\r\n ) : (\r\n <>\r\n <div className=\"rounded-full bg-gray-200 dark:bg-gray-800 h-20 w-20 flex items-center justify-center\">\r\n <Icon\r\n icon=\"ri:image-add-fill\"\r\n className=\"text-gray-400 w-10 h-10\"\r\n />\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n\r\n {/* Right: upload input */}\r\n <input\r\n ref={inputRef}\r\n id={id}\r\n type=\"file\"\r\n accept={accept}\r\n onChange={(e) => handleFileChange(e.target.files)}\r\n required={required && !image}\r\n className=\"inline-flex items-center justify-center p-2 text-gray-400 text-sm file:cursor-pointer\"\r\n />\r\n </div>\r\n\r\n {/* Overlay text */}\r\n {dragDrop && isDragging && (\r\n <div className=\"absolute inset-0 flex items-center justify-center pointer-events-none\">\r\n <span className=\"text-blue-500 font-semibold text-xl\">\r\n Drop here\r\n </span>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default ImagePicker;\r\n","import React, { useState } from \"react\";\r\nimport { Icon } from \"@iconify/react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nconst Input = React.forwardRef(\r\n (\r\n {\r\n label,\r\n required,\r\n parentClass = \"\",\r\n className = \"\",\r\n type = \"text\",\r\n onKeyDown,\r\n ...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\" && [\"e\", \"E\"].includes(e.key)) {\r\n e.preventDefault();\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 ${className}\r\n `.trim();\r\n\r\n return (\r\n <>\r\n <div key={props.name} className={parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n <div className=\"relative\">\r\n <input\r\n type={type === \"password\" && showPassword ? \"text\" : type}\r\n ref={ref}\r\n required={required}\r\n onKeyDown={handleKeyDown}\r\n className={combinedClassName}\r\n {...props}\r\n />\r\n\r\n {type === \"password\" && (\r\n <button\r\n type=\"button\"\r\n tabIndex={-1}\r\n onClick={() => setShowPassword((prev) => !prev)}\r\n className=\"absolute inset-y-0 right-3 flex items-center text-gray-400 hover:text-gray-600 dark:text-gray-400 dark:hover:text-gray-200\"\r\n >\r\n <Icon\r\n icon={\r\n showPassword ? \"mdi:eye-off-outline\" : \"mdi:eye-outline\"\r\n }\r\n className=\"w-5 h-5\"\r\n />\r\n </button>\r\n )}\r\n </div>\r\n </div>\r\n </>\r\n );\r\n },\r\n);\r\n\r\nInput.displayName = \"Input\";\r\n\r\nexport { Input };\r\n","import React from \"react\";\r\nimport { Editor } from \"@tinymce/tinymce-react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nconst TinyEditor = ({\r\n key,\r\n editorKey = \"\",\r\n value = \"\",\r\n onChange,\r\n label = \"\",\r\n required = false,\r\n placeholder = \"\",\r\n parentClass = \"col-span-12\",\r\n height = 400,\r\n inline = false,\r\n disabled = false,\r\n plugins,\r\n toolbar,\r\n menubar = false,\r\n fontFamily = \"Inter, sans-serif\",\r\n initConfig = {},\r\n imageUploadHandler, // ✅ Promise function passed from parent\r\n}) => {\r\n const defaultPlugins = [\r\n \"advlist\",\r\n \"autolink\",\r\n \"lists\",\r\n \"link\",\r\n \"image\",\r\n \"charmap\",\r\n \"preview\",\r\n \"anchor\",\r\n \"searchreplace\",\r\n \"visualblocks\",\r\n \"code\",\r\n \"fullscreen\",\r\n \"insertdatetime\",\r\n \"media\",\r\n \"table\",\r\n \"help\",\r\n \"wordcount\",\r\n ];\r\n\r\n const defaultToolbar =\r\n \"undo redo | blocks | bold italic underline forecolor backcolor | \" +\r\n \"alignleft aligncenter alignright alignjustify | \" +\r\n \"bullist numlist outdent indent | link image media table | \" +\r\n \"removeformat | code fullscreen preview\";\r\n\r\n // ✅ Handle Image Upload via Promise\r\n const handleImageUpload = (blobInfo) => {\r\n return new Promise((resolve, reject) => {\r\n if (!imageUploadHandler) {\r\n // fallback to base64 if no handler provided\r\n resolve(`data:${blobInfo.blob().type};base64,${blobInfo.base64()}`);\r\n return;\r\n }\r\n\r\n imageUploadHandler(blobInfo)\r\n .then((url) => {\r\n if (!url) {\r\n reject(\"Upload failed: No URL returned\");\r\n } else {\r\n resolve(url);\r\n }\r\n })\r\n .catch((error) => {\r\n reject(\r\n typeof error === \"string\"\r\n ? error\r\n : error?.message || \"Image upload failed\",\r\n );\r\n });\r\n });\r\n };\r\n\r\n return (\r\n <div key={key} className={parentClass}>\r\n {label && <InputLabel label={label} required={required} />}\r\n\r\n <Editor\r\n apiKey={editorKey}\r\n value={value}\r\n disabled={disabled}\r\n init={{\r\n height,\r\n inline,\r\n menubar,\r\n branding: false,\r\n statusbar: true,\r\n automatic_uploads: true,\r\n images_upload_handler: handleImageUpload,\r\n plugins: plugins ?? defaultPlugins,\r\n toolbar: toolbar ?? defaultToolbar,\r\n placeholder,\r\n content_style: `\r\n body {\r\n font-family: ${fontFamily};\r\n }\r\n `,\r\n ...initConfig,\r\n }}\r\n onEditorChange={(content) => {\r\n if (onChange) {\r\n onChange(content);\r\n }\r\n }}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nexport default TinyEditor;\r\n","import React from \"react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nconst Checkbox = ({\r\n name = \"\",\r\n label = \"\", // label for single checkbox\r\n options = [], // array of { label, value } for multiple\r\n value = null, // boolean for single, array for multiple, or string for single select\r\n onChange,\r\n disabled = false,\r\n required = false,\r\n parentClass = \"col-span-12\",\r\n className = \"\",\r\n multiSelect = false, // ✅ if true, only one option can be selected (like radio)\r\n}) => {\r\n // Detect if multiple options are present\r\n const multiple = Array.isArray(options) && options.length > 0;\r\n\r\n // Check if a value is selected\r\n const isChecked = (optionValue) => {\r\n if (multiple) {\r\n if (!multiSelect) return value === optionValue;\r\n return Array.isArray(value) && value.includes(optionValue);\r\n }\r\n return Boolean(value);\r\n };\r\n\r\n // Handle change for single checkbox\r\n const handleSingleChange = (e) => {\r\n onChange?.(e.target.checked, name);\r\n };\r\n\r\n // Handle change for multiple checkboxes\r\n const handleMultipleChange = (optionValue, checked) => {\r\n if (!onChange) return;\r\n\r\n if (!multiSelect) {\r\n if (checked) {\r\n onChange(optionValue, name);\r\n } else {\r\n onChange(\"\", name);\r\n }\r\n // Only allow one selected\r\n } else {\r\n const newValue = Array.isArray(value) ? [...value] : [];\r\n if (checked) {\r\n if (!newValue.includes(optionValue)) newValue.push(optionValue);\r\n } else {\r\n const index = newValue.indexOf(optionValue);\r\n if (index > -1) newValue.splice(index, 1);\r\n }\r\n onChange(newValue, name);\r\n }\r\n };\r\n\r\n // ---------------- JSX ----------------\r\n if (multiple) {\r\n // Multiple options\r\n return (\r\n <>\r\n <div className={`${parentClass}`}>\r\n <InputLabel label={label} required={required} />\r\n <div className={`flex flex-col space-y-2`}>\r\n {options.map((opt, idx) => (\r\n <div key={opt.value || opt.label} className=\"flex items-center\">\r\n <input\r\n type=\"checkbox\"\r\n name={name}\r\n value={opt.value}\r\n checked={isChecked(opt.value)}\r\n disabled={disabled || opt.disabled}\r\n required={required && idx === 0}\r\n onChange={(e) =>\r\n handleMultipleChange(opt.value, e.target.checked)\r\n }\r\n key={name}\r\n className={`h-4 w-4 cursor-pointer text-blue-600 border-gray-300 rounded focus:ring-2 focus:ring-blue-500 dark:focus:ring-blue-400 ${className}`}\r\n />\r\n {opt.label && (\r\n <label\r\n htmlFor={name}\r\n className=\"ml-2 text-sm text-gray-700 dark:text-gray-200 select-none\"\r\n >\r\n {opt.label}\r\n </label>\r\n )}\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </>\r\n );\r\n }\r\n\r\n // Single checkbox\r\n return (\r\n <div className={`flex items-center ${parentClass}`}>\r\n <input\r\n type=\"checkbox\"\r\n name={name}\r\n checked={isChecked()}\r\n disabled={disabled}\r\n required={required}\r\n onChange={handleSingleChange}\r\n className={`h-4 w-4 text-blue-600 cursor-pointer border-gray-300 rounded focus:ring-2 focus:ring-blue-500 dark:focus:ring-blue-400 ${className}`}\r\n />\r\n {label && (\r\n <label\r\n htmlFor={name}\r\n className=\"ml-2 text-sm text-gray-700 dark:text-gray-200 select-none\"\r\n >\r\n {label}\r\n </label>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default Checkbox;\r\n","import React from \"react\";\r\nimport Select from \"./Select\";\r\nimport Switch from \"./Switch\";\r\nimport PhoneInput from \"./PhoneInput\";\r\nimport { TextArea } from \"./TextArea\";\r\nimport ImagePicker from \"./ImagePicker\";\r\nimport { Input } from \"./Input\";\r\nimport TinyEditor from \"./TinyEditor\";\r\nimport Checkbox from \"./Checkbox\";\r\n\r\nconst RenderFields = ({ field, formData, handleChange }) => {\r\n const {\r\n key,\r\n label,\r\n type,\r\n options,\r\n placeholder,\r\n rows,\r\n inputClass,\r\n search,\r\n accept,\r\n text,\r\n required = false,\r\n minLength,\r\n dragDrop,\r\n parentClass,\r\n countriesList,\r\n defaultCountry,\r\n multiple,\r\n dropdownMaxHeight,\r\n editorKey,\r\n fontFamily,\r\n disabled,\r\n } = field;\r\n\r\n let value = formData?.[key];\r\n if (value === undefined || value === null) {\r\n value = \"\";\r\n }\r\n\r\n const finalPlaceholder =\r\n placeholder || (type === \"select\" ? `Select ${label}` : `Enter ${label}`);\r\n\r\n const baseClass =\r\n \"w-full px-3 py-2 rounded-md border border-gray-300 dark:border-gray-600 text-sm focus:outline-none focus:ring-1 focus:ring-blue-200 bg-white text-black dark:bg-gray-700 dark:text-white\";\r\n\r\n switch (type) {\r\n case \"select\":\r\n return (\r\n <Select\r\n options={options || []}\r\n value={value}\r\n onChange={(val) => handleChange(key, val)}\r\n placeholder={finalPlaceholder}\r\n className={inputClass || \"\"}\r\n search={search}\r\n required={required}\r\n label={label}\r\n name={key}\r\n disabled={disabled}\r\n parentClass={parentClass}\r\n multiple={multiple}\r\n dropdownMaxHeight={dropdownMaxHeight}\r\n />\r\n );\r\n\r\n case \"checkbox\":\r\n return (\r\n <Checkbox\r\n name={key}\r\n label={label}\r\n options={options || []}\r\n value={value}\r\n onChange={(val) => handleChange(key, val)}\r\n required={required}\r\n parentClass={parentClass}\r\n className={inputClass || \"\"}\r\n multiSelect={multiple}\r\n disabled={disabled}\r\n />\r\n );\r\n\r\n case \"switch\":\r\n return (\r\n <Switch\r\n value={value}\r\n onChange={(val) => handleChange(key, val)}\r\n text={text}\r\n options={options || []}\r\n label={label}\r\n required={required}\r\n name={key}\r\n disabled={disabled}\r\n parentClass={parentClass}\r\n />\r\n );\r\n\r\n case \"phone\":\r\n return (\r\n <PhoneInput\r\n value={value}\r\n onChange={(val) => handleChange(key, val)}\r\n countriesList={countriesList}\r\n defaultCountry={defaultCountry}\r\n required={required}\r\n placeholder={finalPlaceholder}\r\n search={search}\r\n label={label}\r\n name={key}\r\n disabled={disabled}\r\n parentClass={parentClass}\r\n />\r\n );\r\n\r\n case \"textarea\":\r\n return (\r\n <TextArea\r\n value={value}\r\n onChange={(e) => handleChange(key, e.target.value)}\r\n placeholder={finalPlaceholder}\r\n rows={rows || 3}\r\n className={`${baseClass} ${inputClass || \"\"}`}\r\n required={required}\r\n name={key}\r\n label={label}\r\n disabled={disabled}\r\n parentClass={parentClass}\r\n />\r\n );\r\n\r\n case \"image\":\r\n return (\r\n <ImagePicker\r\n value={value}\r\n onChange={(imgObj) => handleChange(key, imgObj)}\r\n required={required}\r\n accept={accept || \"image/*\"}\r\n id={`file-${key}`}\r\n dragDrop={dragDrop}\r\n label={label}\r\n name={key}\r\n parentClass={parentClass}\r\n />\r\n );\r\n\r\n case \"tinyEditor\":\r\n return (\r\n <TinyEditor\r\n value={value}\r\n onChange={(newValue) => handleChange(key, newValue)}\r\n required={required}\r\n key={`editor-${key}`}\r\n placeholder={finalPlaceholder}\r\n label={label}\r\n parentClass={parentClass}\r\n fontFamily={fontFamily}\r\n editorKey={editorKey}\r\n disabled={disabled}\r\n />\r\n );\r\n\r\n default:\r\n return (\r\n <Input\r\n type={type || \"text\"}\r\n value={value}\r\n onChange={(e) => handleChange(key, e.target.value)}\r\n placeholder={finalPlaceholder}\r\n className={`${baseClass} ${inputClass || \"\"}`}\r\n required={required}\r\n name={key}\r\n minLength={minLength}\r\n label={label}\r\n parentClass={parentClass}\r\n disabled={disabled}\r\n />\r\n );\r\n }\r\n};\r\n\r\nexport default RenderFields;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { X } from \"lucide-react\";\r\nimport Button from \"../Button/Button\";\r\nimport RenderFields from \"../Form/components/RenderFields\";\r\n\r\nconst FilterDrawer = ({ isOpen, onClose, config, onApply }) => {\r\n const [filters, setFilters] = useState({});\r\n\r\n const handleChange = (key, value) => {\r\n setFilters((prev) => ({ ...prev, [key]: value }));\r\n };\r\n\r\n const handleApply = () => {\r\n onApply?.(filters);\r\n onClose();\r\n };\r\n\r\n const handleReset = () => {\r\n setFilters({});\r\n onApply?.({});\r\n onClose();\r\n };\r\n\r\n return (\r\n <>\r\n {/* Overlay */}\r\n <div\r\n className={`fixed inset-0 bg-black/50 z-40 transition-opacity duration-300 ${\r\n isOpen\r\n ? \"opacity-100 pointer-events-auto\"\r\n : \"opacity-0 pointer-events-none\"\r\n }`}\r\n onClick={onClose}\r\n />\r\n\r\n {/* Drawer */}\r\n <div\r\n className={`fixed top-0 right-0 h-full w-[28rem] bg-white dark:bg-gray-900 shadow-2xl z-50 flex flex-col border-l border-gray-200 dark:border-gray-700\r\n transform transition-transform duration-300 ease-in-out\r\n ${isOpen ? \"translate-x-0\" : \"translate-x-full\"}\r\n `}\r\n >\r\n {/* Header */}\r\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-gray-200 dark:border-gray-700\">\r\n <h2 className=\"text-lg font-semibold text-gray-900 dark:text-white\">\r\n Filters\r\n </h2>\r\n <button\r\n onClick={onClose}\r\n className=\"p-2 hover:bg-gray-100 dark:hover:bg-gray-800 rounded-md transition\"\r\n >\r\n <X className=\"w-5 h-5 text-gray-500 dark:text-gray-400\" />\r\n </button>\r\n </div>\r\n\r\n {/* Content */}\r\n <div className=\"flex-1 overflow-y-auto px-4 py-3\">\r\n {config?.component ? (\r\n <config.component filters={filters} onFilterChange={handleChange} />\r\n ) : (\r\n <div className=\"space-y-4\">\r\n {config?.fields?.map((field) => (\r\n <>\r\n <RenderFields\r\n key={field.key}\r\n field={field}\r\n formData={filters}\r\n handleChange={handleChange}\r\n />\r\n </>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Footer */}\r\n <div className=\"flex gap-2 px-4 py-3 border-t border-gray-200 dark:border-gray-700\">\r\n <Button\r\n onClick={handleApply}\r\n variant=\"contained\"\r\n color=\"primary\"\r\n fullWidth\r\n >\r\n Apply Filters\r\n </Button>\r\n <Button\r\n onClick={handleReset}\r\n variant=\"contained\"\r\n className=\"min-w-[150px]\"\r\n >\r\n Reset\r\n </Button>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default FilterDrawer;\r\n","import React from \"react\";\r\n\r\nconst BADGE_COLORS = {\r\n blue: {\r\n bg: \"bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-300\",\r\n border:\r\n \"border border-blue-300 text-blue-700 dark:border-blue-700 dark:text-blue-300\",\r\n },\r\n teal: {\r\n bg: \"bg-teal-100 text-teal-800 dark:bg-teal-900/30 dark:text-teal-300\",\r\n border:\r\n \"border border-teal-300 text-teal-700 dark:border-teal-700 dark:text-teal-300\",\r\n },\r\n purple: {\r\n bg: \"bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300\",\r\n border:\r\n \"border border-purple-300 text-purple-700 dark:border-purple-700 dark:text-purple-300\",\r\n },\r\n yellow: {\r\n bg: \"bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-300\",\r\n border:\r\n \"border border-yellow-300 text-yellow-700 dark:border-yellow-700 dark:text-yellow-300\",\r\n },\r\n green: {\r\n bg: \"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300\",\r\n border:\r\n \"border border-green-300 text-green-700 dark:border-green-700 dark:text-green-300\",\r\n },\r\n red: {\r\n bg: \"bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-300\",\r\n border:\r\n \"border border-red-300 text-red-700 dark:border-red-700 dark:text-red-300\",\r\n },\r\n gray: {\r\n bg: \"bg-gray-100 text-gray-800 dark:bg-gray-900/30 dark:text-gray-300\",\r\n border:\r\n \"border border-gray-300 text-gray-700 dark:border-gray-700 dark:text-gray-300\",\r\n },\r\n};\r\n\r\nconst BADGE_VARIANTS = {\r\n contained: \"bg\",\r\n outline: \"border !bg-transparent\",\r\n soft: \"bg opacity-90\",\r\n};\r\n\r\nconst Chip = ({\r\n label,\r\n variant = \"contained\", // contained | outline | soft\r\n color = \"green\",\r\n className = \"\",\r\n}) => {\r\n const colorConfig = BADGE_COLORS[color] || BADGE_COLORS.green;\r\n const variantKey = BADGE_VARIANTS[variant] || BADGE_VARIANTS.contained;\r\n\r\n const variantClasses =\r\n variant === \"outline\" ? colorConfig.border : colorConfig.bg;\r\n\r\n return (\r\n <span\r\n className={`inline-flex justify-center items-center rounded-sm text-xs font-semibold px-3 py-1 min-w-[78px]\r\n ${variantClasses}\r\n ${variantKey}\r\n ${className}`}\r\n >\r\n {label}\r\n </span>\r\n );\r\n};\r\n\r\nexport default Chip;\r\n","const TableSkeleton = ({ rows = 5, columns = 5 }) => {\r\n return (\r\n <>\r\n <div className=\"w-full mb-6 inline-flex justify-end items-center\">\r\n <div className=\"h-8 w-80 bg-gray-300 dark:bg-gray-700 rounded animate-pulse\" />\r\n </div>\r\n <div className=\"overflow-hidden rounded-md border border-gray-200 dark:border-gray-800\">\r\n <table className=\"w-full border-collapse\">\r\n <thead>\r\n <tr className=\"bg-gray-50 dark:bg-gray-900\">\r\n {Array.from({ length: columns }).map((_, i) => (\r\n <th key={i} className=\"px-4 py-3\">\r\n <div className=\"h-6 w-24 bg-gray-300 dark:bg-gray-700 rounded animate-pulse inline-flex justify-center items-center\" />\r\n </th>\r\n ))}\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n {Array.from({ length: rows }).map((_, rowIndex) => (\r\n <tr\r\n key={rowIndex}\r\n className=\"border-t border-gray-200 dark:border-gray-800\"\r\n >\r\n {Array.from({ length: columns }).map((_, colIndex) => (\r\n <td key={colIndex} className=\"px-4 py-6\">\r\n <div className=\"h-6 w-full bg-gray-300 dark:bg-gray-700 rounded animate-pulse\" />\r\n </td>\r\n ))}\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default TableSkeleton;\r\n","import { useEffect } from \"react\";\r\nimport { X } from \"lucide-react\";\r\n\r\nconst ImagePreview = ({ src, alt = \"preview\", isOpen, setIsOpen }) => {\r\n const closePreview = () => setIsOpen(false);\r\n\r\n // Handle ESC key + prevent body scroll\r\n useEffect(() => {\r\n const handleEsc = (e) => {\r\n if (e.key === \"Escape\") closePreview();\r\n };\r\n\r\n if (isOpen) {\r\n document.body.style.overflow = \"hidden\";\r\n document.addEventListener(\"keydown\", handleEsc);\r\n }\r\n\r\n return () => {\r\n document.body.style.overflow = \"\";\r\n document.removeEventListener(\"keydown\", handleEsc);\r\n };\r\n }, [isOpen]);\r\n\r\n return (\r\n <>\r\n {/* Fullscreen Preview */}\r\n <div\r\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/70 dark:bg-black/80 \r\n backdrop-blur-sm animate-in fade-in duration-200\"\r\n onClick={closePreview}\r\n >\r\n {/* Close Button */}\r\n <button\r\n onClick={closePreview}\r\n className=\"absolute top-4 right-4 bg-white dark:bg-gray-800 text-gray-800 dark:text-gray-200\r\n hover:bg-gray-100 dark:hover:bg-gray-700 rounded-full p-2 shadow-lg transition\"\r\n >\r\n <X size={20} />\r\n </button>\r\n\r\n {/* Image Container */}\r\n <div\r\n className=\"max-w-5xl w-full px-4 transform transition-all duration-200 scale-95 animate-in zoom-in-95\"\r\n onClick={(e) => e.stopPropagation()}\r\n >\r\n {/* Large Image */}\r\n <img\r\n src={src}\r\n alt={alt}\r\n className=\"w-full max-h-[90vh] object-contain rounded-xl\"\r\n />\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default ImagePreview;\r\n","import React, { useState, useMemo, useRef, useEffect } from \"react\";\r\nimport {\r\n ChevronLeft,\r\n ChevronRight,\r\n Search,\r\n EllipsisVertical,\r\n Filter,\r\n User,\r\n} from \"lucide-react\";\r\nimport { createPortal } from \"react-dom\";\r\nimport { formatDate, searchLocalData } from \"../../lib/utils\";\r\nimport Button from \"../Button/Button\";\r\nimport FilterDrawer from \"../Filter/FilterDrawer\";\r\nimport Chip from \"../Chip/Chip\";\r\nimport TableSkeleton from \"./components/TableSkeleton\";\r\nimport ImagePreview from \"./components/ImagePreview\";\r\n\r\nconst Table = ({ config }) => {\r\n const {\r\n data = [],\r\n table_head = [],\r\n loading = false,\r\n search = {\r\n enabled: false,\r\n placeholder: \"Search...\",\r\n useServerSideSearch: false,\r\n },\r\n filter = {\r\n enabled: false,\r\n useServerSideFilters: false,\r\n },\r\n pagination = {\r\n enabled: false,\r\n rows_per_page: 10,\r\n useServerSidePagination: false,\r\n },\r\n emptyMessage = \"No data available\",\r\n onMenuAction,\r\n setServerSidePaginationData = () => {},\r\n onFilterApply,\r\n filterConfig = null,\r\n } = config;\r\n\r\n const [searchTerm, setSearchTerm] = useState(\"\");\r\n const [activeMenu, setActiveMenu] = useState(null);\r\n const [menuList, setMenuList] = useState([]);\r\n const [menuPosition, setMenuPosition] = useState({});\r\n const [showFilters, setShowFilters] = useState(false);\r\n\r\n // image preview\r\n const [targetImage, setTargetImage] = useState(null);\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const filteredData = useMemo(() => {\r\n if (!search.enabled || !searchTerm.trim()) return data;\r\n if (search.useServerSideSearch) return data;\r\n return searchLocalData(data, searchTerm, search.searchKeys || []);\r\n }, [data, searchTerm, search]);\r\n\r\n const [currentPage, setCurrentPage] = useState(1);\r\n const [pageSize, setPageSize] = useState(pagination?.rows_per_page || 50);\r\n const [totalRecords, setTotalRecords] = useState(filteredData.length || 0);\r\n\r\n const totalPages = pagination?.useServerSidePagination\r\n ? pagination.total_pages\r\n : Math.ceil(filteredData.length / pageSize);\r\n\r\n const paginatedData = useMemo(() => {\r\n if (pagination.useServerSidePagination) return filteredData;\r\n const start = (currentPage - 1) * pageSize;\r\n return filteredData.slice(start, start + pageSize);\r\n }, [filteredData, currentPage, pageSize]);\r\n\r\n const menuRef = useRef(null);\r\n const buttonRefs = useRef({});\r\n const searchTimeoutRef = useRef(null);\r\n\r\n const handleSearchChange = (value) => {\r\n setSearchTerm(value);\r\n setCurrentPage(1);\r\n\r\n if (search.useServerSideSearch) {\r\n if (searchTimeoutRef.current) clearTimeout(searchTimeoutRef.current);\r\n\r\n searchTimeoutRef.current = setTimeout(async () => {\r\n try {\r\n await setServerSidePaginationData((prev) => ({\r\n ...prev,\r\n search: value,\r\n current_page: 1,\r\n }));\r\n } catch (error) {\r\n console.error(\"Search error:\", error);\r\n }\r\n }, 800);\r\n }\r\n };\r\n\r\n const handleActionClick = (action, item, e) => {\r\n e.stopPropagation();\r\n setActiveMenu(null);\r\n onMenuAction?.(action.type, item);\r\n };\r\n\r\n const handleMenuToggle = (itemId, e, menu_list) => {\r\n e.stopPropagation();\r\n setMenuList(menu_list);\r\n const button = e.currentTarget;\r\n buttonRefs.current[itemId] = button;\r\n const rect = button.getBoundingClientRect();\r\n const menuWidth = 192;\r\n const menuHeight = menu_list.length * 40;\r\n const viewportWidth = window.innerWidth;\r\n const viewportHeight = window.innerHeight;\r\n\r\n const openLeft = viewportWidth - rect.right < menuWidth;\r\n const left = openLeft ? rect.left - menuWidth + rect.width : rect.left;\r\n\r\n const openUp =\r\n viewportHeight - rect.bottom < menuHeight && rect.top > menuHeight;\r\n const top = openUp ? rect.top - menuHeight - 2 : rect.bottom + 2;\r\n\r\n setMenuPosition({\r\n top: Math.max(8, Math.min(top, viewportHeight - menuHeight - 8)),\r\n left: Math.max(8, Math.min(left, viewportWidth - menuWidth - 8)),\r\n });\r\n\r\n setActiveMenu(activeMenu === itemId ? null : itemId);\r\n };\r\n\r\n const calculateRowNumber = (index) => {\r\n return (currentPage - 1) * pageSize + index + 1;\r\n };\r\n\r\n const openPreview = (image) => {\r\n setTargetImage(image);\r\n setIsOpen(true);\r\n };\r\n\r\n const renderAvatar = (\r\n imageSrc,\r\n imageAlt,\r\n className,\r\n fallback_icon = null,\r\n ) => {\r\n return (\r\n <>\r\n {imageSrc ? (\r\n <img\r\n src={imageSrc}\r\n alt={imageAlt || \"Avatar\"}\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n openPreview({ src: imageSrc, alt: imageAlt });\r\n }}\r\n className={`w-10 h-10 cursor-pointer rounded-full object-cover border border-gray-200 dark:border-gray-700 ${className || \"\"}`}\r\n />\r\n ) : (\r\n <>\r\n {fallback_icon ? (\r\n fallback_icon\r\n ) : (\r\n <div\r\n className={`w-10 h-10 flex items-center justify-center rounded-full border border-gray-300 dark:border-gray-700 bg-gray-200 dark:bg-gray-600 ${className || \"\"}`}\r\n >\r\n <User className=\"w-6 h-6 text-gray-400 dark:text-gray-400\" />\r\n </div>\r\n )}\r\n </>\r\n )}\r\n </>\r\n );\r\n };\r\n\r\n const renderGroupCell = (row, col) => {\r\n return (\r\n <div className={`flex items-center space-x-4 ${col.className || \"\"}`}>\r\n {col.imageKey\r\n ? renderAvatar(row[col.imageKey], row[col.titleKey], \"group-avatar\")\r\n : \"\"}\r\n <div>\r\n <p className=\"font-medium text-gray-900 dark:text-white group-title\">\r\n {row[col.titleKey] || \"\"}\r\n </p>\r\n <p className=\"text-sm text-gray-500 dark:text-gray-400 group-sub-title\">\r\n {row[col.subtitleKey] || \"\"}\r\n </p>\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n const handleRenderChip = (value, col) => {\r\n let label = String(value);\r\n const variant = col.variant || \"contained\";\r\n let color = col.defaultColor;\r\n\r\n if (col?.chipOptions?.length > 0) {\r\n let chipObj = col?.chipOptions.find((obj) => obj.value == value);\r\n if (chipObj) {\r\n label = chipObj.label;\r\n color = chipObj.color;\r\n }\r\n }\r\n\r\n return (\r\n <Chip\r\n label={label}\r\n variant={variant}\r\n color={color}\r\n className={col.className || \"\"}\r\n />\r\n );\r\n };\r\n\r\n const handleRenderCellValue = (col, row, index) => {\r\n const value = row[col.key];\r\n if (col.type === \"menu_actions\") {\r\n return (\r\n <div className={`text-center ${col.className || \"\"}`}>\r\n <button\r\n ref={(el) => (buttonRefs.current[row.id] = el)}\r\n onClick={(e) => handleMenuToggle(row.id, e, col.menuList)}\r\n className=\"p-2 bg-gray-100 dark:bg-gray-700 hover:bg-gray-200 dark:hover:bg-gray-600 rounded-full transition text-gray-700 dark:text-gray-300\"\r\n >\r\n <EllipsisVertical className=\"h-4 w-4\" />\r\n </button>\r\n </div>\r\n );\r\n } else if (col.type === \"index\") {\r\n return (\r\n <span className={col.className || \"\"}>{calculateRowNumber(index)}</span>\r\n );\r\n } else if (col.type === \"group\") {\r\n return renderGroupCell(row, col);\r\n } else if (col.type === \"chip\") {\r\n return <>{handleRenderChip(value, col)}</>;\r\n } else if (col.type === \"date\") {\r\n return (\r\n <span className={col.className || \"\"}>\r\n {formatDate(value, col.format || \"DD MMM YYYY\")}\r\n </span>\r\n );\r\n } else if (col.type === \"avatar\") {\r\n return (\r\n <>{renderAvatar(value, col.alt, col.className, col.fallback_icon)}</>\r\n );\r\n } else {\r\n return <span className={col.className || \"\"}>{value || \"N/A\"}</span>;\r\n }\r\n };\r\n\r\n // handle CLick on cell\r\n\r\n const handleColumnClick = (col, row) => {\r\n if (col.onClickDetails) {\r\n return onMenuAction?.(\"view\", row);\r\n }\r\n\r\n if (typeof col.handleClick === \"function\") {\r\n return col.handleClick(row);\r\n }\r\n };\r\n\r\n // Helper to check if column is clickable\r\n const isColumnClickable = (col) =>\r\n col.onClickDetails || typeof col.handleClick === \"function\";\r\n\r\n // Close menu on scroll -------------------\r\n useEffect(() => {\r\n const handleScroll = () => {\r\n if (activeMenu) setActiveMenu(null);\r\n };\r\n\r\n window.addEventListener(\"scroll\", handleScroll, true);\r\n return () => {\r\n window.removeEventListener(\"scroll\", handleScroll, true);\r\n };\r\n }, [activeMenu]);\r\n\r\n useEffect(() => {\r\n const handleClickOutside = (e) => {\r\n if (menuRef.current && !menuRef.current.contains(e.target)) {\r\n setActiveMenu(null);\r\n }\r\n };\r\n document.addEventListener(\"click\", handleClickOutside);\r\n return () => document.removeEventListener(\"click\", handleClickOutside);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (pagination?.rows_per_page && pagination?.useServerSidePagination) {\r\n setPageSize(pagination?.rows_per_page || 50);\r\n }\r\n\r\n if (pagination.current_page) {\r\n setCurrentPage(pagination.current_page);\r\n }\r\n }, [\r\n pagination.rows_per_page,\r\n pagination?.useServerSidePagination,\r\n pagination.current_page,\r\n ]);\r\n\r\n useEffect(() => {\r\n setTotalRecords(\r\n pagination?.useServerSidePagination\r\n ? pagination.total_records\r\n : filteredData.length,\r\n );\r\n\r\n if (\r\n filteredData.length <= pageSize * (currentPage - 1) &&\r\n !pagination?.useServerSidePagination\r\n ) {\r\n setCurrentPage((prev) => prev - 1 || 1);\r\n }\r\n }, [\r\n filteredData.length,\r\n pagination.total_records,\r\n pagination?.useServerSidePagination,\r\n ]);\r\n\r\n if (loading) return <TableSkeleton rows={6} columns={6} />;\r\n\r\n return (\r\n <>\r\n {/* Search Bar */}\r\n <div className=\"flex justify-end items-center mb-6 gap-2\">\r\n {search.enabled && (\r\n <div className=\"\">\r\n <div className=\"relative min-w-[300px]\">\r\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400 dark:text-gray-300\" />\r\n <input\r\n type=\"text\"\r\n placeholder={search.placeholder || \"Search...\"}\r\n value={searchTerm}\r\n onChange={(e) => handleSearchChange(e.target.value)}\r\n className=\"w-full h-[36px] pl-9 pr-4 py-3 text-sm border border-gray-300 dark:border-gray-600 rounded-md bg-gray-50 dark:bg-gray-700 text-gray-900 dark:text-white placeholder-gray-500 dark:placeholder-gray-400 focus:outline-none focus:ring-1 focus:ring-blue-300 dark:ring-blue-200 disabled:opacity-50\"\r\n />\r\n </div>\r\n </div>\r\n )}\r\n\r\n {filterConfig && filter.enabled && (\r\n <Button onClick={() => setShowFilters(true)} variant=\"contained\">\r\n <Filter className=\"w-4 h-4 mr-2\" />\r\n Filters\r\n </Button>\r\n )}\r\n </div>\r\n\r\n {/* =========================== Table =========================== */}\r\n <div className=\"bg-white dark:bg-gray-800 rounded-lg shadow overflow-hidden border border-gray-200 dark:border-gray-700\">\r\n <div className=\"overflow-x-auto\">\r\n <table className=\"min-w-full divide-y divide-gray-200 dark:divide-gray-700\">\r\n <thead className=\"bg-gray-50 dark:bg-gray-700/60\">\r\n <tr>\r\n {table_head.map((col) => (\r\n <th\r\n key={col.key}\r\n className=\"px-6 py-4 text-left text-xs font-medium text-black dark:text-white uppercase tracking-wider min-w-max max-w-[180px] truncate\"\r\n >\r\n {col.title}\r\n </th>\r\n ))}\r\n </tr>\r\n </thead>\r\n\r\n <tbody className=\"bg-white dark:bg-gray-800 divide-y divide-gray-200 dark:divide-gray-700\">\r\n {paginatedData.length === 0 ? (\r\n <tr>\r\n <td\r\n colSpan={table_head.length}\r\n className=\"text-center py-10 text-gray-500 dark:text-gray-400\"\r\n >\r\n {emptyMessage}\r\n </td>\r\n </tr>\r\n ) : (\r\n paginatedData.map((row, index) => (\r\n <tr\r\n key={row.id || index}\r\n className=\"hover:bg-gray-50 dark:hover:bg-blue-800/10 transition\"\r\n >\r\n {table_head.map((col) => (\r\n <td\r\n key={col.key}\r\n className={`px-6 py-4 text-sm text-gray-900 dark:text-gray-100 min-w-max max-w-[300px] truncate ${\r\n isColumnClickable(col) ? \"cursor-pointer\" : \"\"\r\n }`}\r\n title={String(row[col.key] ?? \"\")}\r\n onClick={() => handleColumnClick(col, row)}\r\n >\r\n {col.render\r\n ? col.render(row, index)\r\n : handleRenderCellValue(col, row, index)}\r\n </td>\r\n ))}\r\n </tr>\r\n ))\r\n )}\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n {pagination?.enabled && filteredData.length > 0 && (\r\n <div className=\" bg-gray-50 dark:bg-gray-700/60 px-6 py-3 flex flex-wrap items-center justify-between border-t border-gray-200 dark:border-gray-600 gap-3\">\r\n <div className=\"text-sm text-gray-700 dark:text-gray-300\">\r\n Showing {(currentPage - 1) * pageSize + 1} to{\" \"}\r\n {Math.min(currentPage * pageSize, totalRecords)} of {totalRecords}{\" \"}\r\n results\r\n </div>\r\n\r\n <div className=\"flex items-center gap-4\">\r\n {/* Rows per page selector */}\r\n <div className=\"flex items-center gap-2\">\r\n <span className=\"text-sm text-gray-700 dark:text-gray-300\">\r\n Rows per page:\r\n </span>\r\n <select\r\n value={pageSize}\r\n onChange={(e) => {\r\n const newLimit = Number(e.target.value);\r\n setPageSize(newLimit);\r\n setCurrentPage(1);\r\n if (pagination.useServerSidePagination) {\r\n setServerSidePaginationData((prev) => ({\r\n ...prev,\r\n current_page: 1,\r\n rows_per_page: newLimit,\r\n }));\r\n }\r\n }}\r\n className=\"border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800 text-sm rounded-md px-2 py-1 focus:outline-none focus:ring-1 focus:ring-blue-500\"\r\n >\r\n {[2, 10, 25, 50, 100].map((n) => (\r\n <option key={n} value={n}>\r\n {n}\r\n </option>\r\n ))}\r\n </select>\r\n </div>\r\n\r\n {/* ============= Pagination ============= */}\r\n <div className=\"flex items-center gap-2\">\r\n <button\r\n onClick={() => {\r\n if (currentPage > 1) {\r\n const newPage = currentPage - 1;\r\n setCurrentPage(newPage);\r\n if (pagination.useServerSidePagination) {\r\n setServerSidePaginationData((prev) => ({\r\n ...prev,\r\n current_page: newPage,\r\n }));\r\n }\r\n }\r\n }}\r\n disabled={currentPage === 1}\r\n className=\"p-2 hover:bg-gray-200 dark:hover:bg-gray-600 rounded-md transition text-gray-500 dark:text-gray-300 disabled:opacity-50\"\r\n >\r\n <ChevronLeft className=\"h-4 w-4\" />\r\n </button>\r\n\r\n <span className=\"text-sm text-gray-800 dark:text-gray-200\">\r\n Page {currentPage} of {totalPages}\r\n </span>\r\n\r\n <button\r\n onClick={() => {\r\n if (currentPage < totalPages) {\r\n const newPage = currentPage + 1;\r\n setCurrentPage(newPage);\r\n if (pagination.useServerSidePagination) {\r\n setServerSidePaginationData((prev) => ({\r\n ...prev,\r\n current_page: newPage,\r\n }));\r\n }\r\n }\r\n }}\r\n disabled={currentPage === totalPages}\r\n className=\"p-2 hover:bg-gray-200 dark:hover:bg-gray-600 rounded-md transition text-gray-500 dark:text-gray-300 disabled:opacity-50\"\r\n >\r\n <ChevronRight className=\"h-4 w-4\" />\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Portal Menu */}\r\n {activeMenu &&\r\n createPortal(\r\n <div\r\n ref={menuRef}\r\n style={{\r\n position: \"fixed\",\r\n top: `${menuPosition.top}px`,\r\n left: `${menuPosition.left}px`,\r\n zIndex: 9999,\r\n }}\r\n className=\"w-48 bg-white dark:bg-gray-700 rounded-md shadow-lg border border-gray-200 dark:border-gray-600\"\r\n >\r\n {menuList.map((action, i) => (\r\n <button\r\n key={i}\r\n onClick={(e) =>\r\n handleActionClick(\r\n action,\r\n data.find((d) => d.id === activeMenu),\r\n e,\r\n )\r\n }\r\n className={`w-full flex items-center gap-2 px-4 py-2 text-sm text-left hover:bg-gray-100 dark:hover:bg-gray-600 ${\r\n action.variant === \"danger\"\r\n ? \"text-red-600 dark:text-red-500\"\r\n : \"text-gray-700 dark:text-gray-200\"\r\n }`}\r\n >\r\n {action.icon && <span className=\"shrink-0\">{action.icon}</span>}\r\n {action.title}\r\n </button>\r\n ))}\r\n </div>,\r\n document.body,\r\n )}\r\n\r\n {/* Filter Drawer */}\r\n {filterConfig && (\r\n <FilterDrawer\r\n isOpen={showFilters}\r\n onClose={() => setShowFilters(false)}\r\n config={filterConfig}\r\n onApply={onFilterApply}\r\n />\r\n )}\r\n\r\n {isOpen && (\r\n <ImagePreview\r\n src={targetImage.src}\r\n alt={targetImage.alt}\r\n isOpen={isOpen}\r\n setIsOpen={setIsOpen}\r\n />\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default Table;\r\n","import React from \"react\";\r\nimport { X } from \"lucide-react\";\r\nimport Button from \"../Button/Button\";\r\n\r\nconst Modal = ({\r\n isOpen,\r\n onClose,\r\n icon,\r\n title,\r\n children,\r\n size = \"md\",\r\n actionButtons = [],\r\n actions,\r\n showDefaultClose = true,\r\n footerConfig = null,\r\n hideFooter = false,\r\n onFormSubmit = () => {},\r\n onCancel,\r\n loadingBtn = false,\r\n executeFunction = () => {},\r\n selectedItem = null,\r\n}) => {\r\n if (!isOpen) return null;\r\n\r\n // Size classes\r\n const sizeClasses = {\r\n sm: \"max-w-md\",\r\n md: \"max-w-lg\",\r\n lg: \"max-w-2xl\",\r\n xl: \"max-w-4xl\",\r\n full: \"max-w-full\",\r\n };\r\n\r\n return (\r\n <div className=\"fixed inset-0 z-50 flex items-center justify-center p-4\">\r\n {/* Backdrop */}\r\n <div\r\n className=\"fixed inset-0 bg-gray-500 opacity-75\"\r\n onClick={() => onClose()}\r\n ></div>\r\n\r\n {/* Modal container */}\r\n <div\r\n className={`relative bg-white rounded-lg shadow-xl w-full ${\r\n sizeClasses[size] || sizeClasses.md\r\n } max-h-[90vh] flex flex-col dark:bg-gray-800`}\r\n >\r\n {/* Header */}\r\n <div className=\"flex items-center justify-between p-4 border-b border-gray-200 dark:border-gray-700 flex-shrink-0\">\r\n <div className=\"flex items-center gap-1\">\r\n {icon && <span>{icon}</span>}\r\n <h3 className=\"text-lg font-medium text-gray-900 dark:text-white\">\r\n {title}\r\n </h3>\r\n </div>\r\n\r\n <button\r\n onClick={() => onClose()}\r\n className=\"text-gray-400 hover:text-gray-600 dark:hover:text-gray-300\"\r\n >\r\n <X className=\"w-6 h-6\" />\r\n </button>\r\n </div>\r\n\r\n {/* Content */}\r\n <div className=\"flex-1 overflow-y-auto p-4\">{children}</div>\r\n\r\n {/* Footer */}\r\n {/* {!hideFooter && (actions || footerConfig || showDefaultClose) && (\r\n <div className=\"px-4 py-3 flex justify-end gap-3 border-t border-gray-200 dark:border-gray-700 sm:px-6\">\r\n {actions}\r\n\r\n {footerConfig && (\r\n <>\r\n {footerConfig.cancelButton && (\r\n <Button\r\n onClick={() => (onCancel() || onClose())}\r\n disabled={loadingBtn}\r\n variant=\"contained\"\r\n color=\"default\"\r\n >\r\n {footerConfig.cancelText || \"Cancel\"}\r\n </Button>\r\n )}\r\n\r\n {footerConfig.submitButton && (\r\n <Button\r\n onClick={onFormSubmit}\r\n disabled={loadingBtn}\r\n variant=\"contained\"\r\n color={footerConfig.color || \"primary\"}\r\n className=\"min-w-[100px]\"\r\n >\r\n {loadingBtn ? (\r\n <div className=\"flex items-center\">\r\n <div className=\"animate-spin rounded-full h-4 w-4 border-2 border-white/30 border-t-2 border-t-white mr-2\"></div>\r\n {footerConfig.submitText || \"Submit\"}...\r\n </div>\r\n ) : (\r\n footerConfig.submitText || \"Submit\"\r\n )}\r\n </Button>\r\n )}\r\n </>\r\n )}\r\n\r\n {showDefaultClose && !actions && !footerConfig && (\r\n <Button onClick={() => onClose()} variant=\"outlined\">\r\n Close\r\n </Button>\r\n )}\r\n </div>\r\n )} */}\r\n\r\n {actionButtons.length > 0 && (\r\n <div className=\"px-4 py-3 flex justify-end gap-3 border-t border-gray-200 dark:border-gray-700 sm:px-6\">\r\n {actionButtons.map((btn) => (\r\n <Button\r\n onClick={(e) => {\r\n if (btn.type == \"submit\") {\r\n onFormSubmit(e);\r\n } else {\r\n executeFunction(\r\n () => btn?.onClick?.(e, selectedItem),\r\n (resp) => onClose?.(resp),\r\n );\r\n }\r\n }}\r\n disabled={loadingBtn || btn.disabled}\r\n variant={btn.variant || \"contained\"}\r\n color={btn.color || \"primary\"}\r\n className={`min-w-[100px] ${btn.className}`}\r\n type={btn.type || \"button\"}\r\n >\r\n {loadingBtn ? (\r\n <div className=\"flex items-center\">\r\n <div className=\"animate-spin rounded-full h-4 w-4 border-2 border-white/30 border-t-2 border-t-white mr-2\"></div>\r\n {btn.label || \"Submit\"}...\r\n </div>\r\n ) : (\r\n btn.label || \"Submit\"\r\n )}\r\n </Button>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default Modal;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport RenderFields from \"./components/RenderFields\";\r\n\r\nconst Form = ({ config, onSubmit, initialData = {} }) => {\r\n const { formClass = \"grid grid-cols-12 gap-4\", formFields = [] } =\r\n config || {};\r\n\r\n const [formData, setFormData] = useState(initialData);\r\n\r\n useEffect(() => {\r\n setFormData(initialData);\r\n }, []);\r\n\r\n const handleChange = (key, value) => {\r\n setFormData((prev) => ({ ...prev, [key]: value }));\r\n };\r\n\r\n const handleSubmit = (e) => {\r\n e.preventDefault();\r\n const form = e.target;\r\n\r\n if (!form.checkValidity()) {\r\n form.reportValidity();\r\n return;\r\n }\r\n\r\n onSubmit(formData);\r\n };\r\n\r\n return (\r\n <form\r\n id={config.title?.toLowerCase().includes(\"edit\") ? \"editForm\" : \"addForm\"}\r\n onSubmit={handleSubmit}\r\n className={formClass}\r\n noValidate={false} // enables native validation\r\n >\r\n {formFields.map((field) => (\r\n <>\r\n <RenderFields\r\n key={field.key}\r\n field={field}\r\n formData={formData}\r\n handleChange={handleChange}\r\n />\r\n </>\r\n ))}\r\n </form>\r\n );\r\n};\r\n\r\nexport default Form;\r\n","import { User } from \"lucide-react\";\r\nimport React, { useState } from \"react\";\r\nimport Chip from \"../Chip/Chip\";\r\nimport { formatDate } from \"../../lib/utils\";\r\nimport ImagePreview from \"../Table/components/ImagePreview\";\r\n\r\nexport default function Details({ data, config }) {\r\n const { fields, containerClass } = config;\r\n\r\n // image preview\r\n const [targetImage, setTargetImage] = useState(null);\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const openPreview = (image) => {\r\n setTargetImage(image);\r\n setIsOpen(true);\r\n };\r\n\r\n const DetailRow = ({ col }) => {\r\n let Icon = col?.icon;\r\n let label = col.label;\r\n let value = data[col.key];\r\n let type = col.type;\r\n let variant = col.variant || \"outline\";\r\n let color = col.defaultColor;\r\n\r\n if (type == \"chip\" && col.chipOptions.length > 0) {\r\n let chipObj = col?.chipOptions.find((obj) => obj.value == value);\r\n if (chipObj) {\r\n value = chipObj.label;\r\n color = chipObj.color;\r\n }\r\n }\r\n\r\n return (\r\n <div\r\n className={`col-span-12 flex items-center space-x-4 p-4 rounded-xl \r\n bg-gray-100 dark:bg-gray-900 ${col.blockClass}`}\r\n >\r\n {Icon && <div className=\"flex-shrink-0\">{Icon}</div>}\r\n <div className=\"flex-1 min-w-0\">\r\n <p className=\"text-sm font-medium text-gray-500 dark:text-gray-400\">\r\n {label}\r\n </p>\r\n {type == \"chip\" ? (\r\n <>\r\n <Chip\r\n label={value}\r\n variant={variant}\r\n color={color}\r\n className=\"mt-1\"\r\n />\r\n </>\r\n ) : type == \"tinyEditor\" ? (\r\n <p\r\n className=\"mt-1 text-sm text-gray-900 dark:text-white break-words\"\r\n dangerouslySetInnerHTML={{\r\n __html: value,\r\n }}\r\n ></p>\r\n ) : (\r\n <p className=\"mt-1 text-sm text-gray-900 dark:text-white break-words\">\r\n {type == \"date\" ? (\r\n <span>{formatDate(value, col.format || \"DD MMM YYYY\")}</span>\r\n ) : (\r\n value || \"N/A\"\r\n )}\r\n </p>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n const GroupRow = ({ col }) => {\r\n let title = data[col.titleKey];\r\n let subtitle = data[col.subtitleKey];\r\n let image = data[col.imageKey];\r\n let fallback_icon = data[col.fallback_icon];\r\n\r\n return (\r\n <div\r\n className={`col-span-12 flex items-center space-x-4 p-4 rounded-xl \r\n bg-gray-100 dark:bg-gray-900 \r\n ${col.blockClass}`}\r\n >\r\n {image ? (\r\n <img\r\n src={image}\r\n alt={title}\r\n onClick={() => openPreview({ src: image, alt: title })}\r\n className=\"w-16 h-16 cursor-pointer rounded-full object-cover border-2 border-gray-200 dark:border-gray-700\"\r\n />\r\n ) : fallback_icon ? (\r\n fallback_icon\r\n ) : (\r\n <div className=\"w-16 h-16 flex items-center justify-center rounded-full border-2 border-gray-300 dark:border-gray-700 bg-gray-200 dark:bg-gray-600\">\r\n <User className=\"w-8 h-8 text-gray-400\" />\r\n </div>\r\n )}\r\n\r\n <div>\r\n <h3 className=\"text-xl font-semibold text-gray-900 dark:text-white\">\r\n {title}\r\n </h3>\r\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">{subtitle}</p>\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n return (\r\n <>\r\n {isOpen && (\r\n <ImagePreview\r\n src={targetImage.src}\r\n alt={targetImage.alt}\r\n isOpen={isOpen}\r\n setIsOpen={setIsOpen}\r\n />\r\n )}\r\n\r\n <div className={`grid grid-cols-12 gap-4 ${containerClass || \"\"}`}>\r\n {fields.map((col) =>\r\n col.type == \"group\" ? (\r\n <GroupRow col={col} />\r\n ) : (\r\n <DetailRow col={col} />\r\n ),\r\n )}\r\n </div>\r\n </>\r\n );\r\n}\r\n","import React, { useEffect, useMemo, useState } from \"react\";\r\nimport { Plus, X } from \"lucide-react\";\r\nimport Table from \"./Table/Table\";\r\nimport Modal from \"./Modal/Modal\";\r\nimport Form from \"./Form/Form\";\r\nimport Button from \"./Button/Button\";\r\nimport { Icon } from \"@iconify/react\";\r\nimport { enqueueSnackbar } from \"notistack\";\r\nimport Details from \"./Details/Details\";\r\nimport PropTypes from \"prop-types\";\r\nimport { SnackbarProvider } from \"notistack\";\r\n\r\nconst CrudPage = ({ config }) => {\r\n const {\r\n title,\r\n fetchData = async () => {},\r\n isStaticData = false,\r\n tableConfig = {},\r\n modalConfig = {},\r\n filterConfig,\r\n } = config;\r\n\r\n const [loading, setLoading] = useState(true);\r\n const [formLoading, setFormLoading] = useState(false);\r\n\r\n const [listingData, setListingData] = useState([]);\r\n const [paginationData, setPaginationData] = useState(null);\r\n const [serverSidePaginationData, setServerSidePaginationData] = useState({\r\n search: \"\",\r\n rows_per_page: 50,\r\n current_page: 1,\r\n });\r\n const [filterData, setFilterData] = useState({});\r\n const [changeFilterData, setChangeFilterData] = useState(false);\r\n\r\n const [showAdd, setShowAdd] = useState(false);\r\n const [showEdit, setShowEdit] = useState(false);\r\n const [showDelete, setShowDelete] = useState(false);\r\n const [showView, setShowView] = useState(false);\r\n const [selectedItem, setSelectedItem] = useState(null);\r\n\r\n const handleMenuAction = (action, item) => {\r\n if (action === \"edit\") {\r\n setSelectedItem(item);\r\n setShowEdit(true);\r\n } else if (action === \"view\") {\r\n setSelectedItem(item);\r\n setShowView(true);\r\n } else if (action === \"delete\") {\r\n setSelectedItem(item);\r\n setShowDelete(true);\r\n }\r\n };\r\n\r\n const executeAction = async (\r\n action,\r\n onSuccess,\r\n success_message = \"\",\r\n error_message = \"\",\r\n ) => {\r\n setFormLoading(true);\r\n\r\n try {\r\n const resp = await action?.();\r\n if (success_message || resp.message) {\r\n enqueueSnackbar(success_message || resp.message, {\r\n variant: \"success\",\r\n });\r\n }\r\n onSuccess?.(resp);\r\n } catch (error) {\r\n if (error_message || error.message) {\r\n enqueueSnackbar(error_message || error.message, { variant: \"error\" });\r\n }\r\n } finally {\r\n setFormLoading(false);\r\n }\r\n };\r\n\r\n const handleAddResult = (resp) => {\r\n let newObj = resp.newObject;\r\n if (isStaticData) {\r\n setListingData((prev) => [newObj, ...prev]);\r\n setPaginationData((prev) => ({\r\n ...prev,\r\n current_page: 1,\r\n }));\r\n } else {\r\n setServerSidePaginationData((prev) => ({\r\n ...prev,\r\n current_page: 1,\r\n }));\r\n if (serverSidePaginationData.current_page == 1) {\r\n handleGetListing();\r\n }\r\n }\r\n setShowAdd(false);\r\n };\r\n\r\n const handleEditResult = (resp) => {\r\n let updatedObj = resp.newObject;\r\n let targetObj = resp.targetObject;\r\n if (isStaticData) {\r\n setListingData((prev) =>\r\n prev.map((item) =>\r\n item.id === targetObj.id ? { ...item, ...updatedObj } : item,\r\n ),\r\n );\r\n } else {\r\n handleGetListing();\r\n }\r\n setShowEdit(false);\r\n };\r\n\r\n const handleDeleteResult = (resp) => {\r\n if (!resp) {\r\n setShowDelete(false);\r\n setSelectedItem(null);\r\n return;\r\n }\r\n\r\n if (isStaticData) {\r\n setListingData((prev) =>\r\n prev.filter((item) => item.id !== resp.targetObject.id),\r\n );\r\n } else {\r\n if (\r\n listingData.length == 1 &&\r\n serverSidePaginationData.current_page > 1\r\n ) {\r\n setServerSidePaginationData((prev) => ({\r\n ...prev,\r\n current_page: prev.current_page - 1,\r\n }));\r\n } else {\r\n handleGetListing();\r\n }\r\n }\r\n setShowDelete(false);\r\n setSelectedItem(null);\r\n };\r\n\r\n const handleAddFormSubmit = (formData) =>\r\n executeAction(\r\n () => modalConfig?.addModal?.handleSubmit?.(formData),\r\n handleAddResult,\r\n );\r\n\r\n const handleEditFormSubmit = (formData) =>\r\n executeAction(\r\n () => modalConfig?.editModal?.handleSubmit?.(formData, selectedItem),\r\n handleEditResult,\r\n );\r\n\r\n const handleDeleteConfirm = () =>\r\n executeAction(\r\n () => modalConfig?.deleteModal?.action?.(selectedItem),\r\n handleDeleteResult,\r\n );\r\n\r\n const handleGetListing = async () => {\r\n setLoading(true);\r\n\r\n fetchData?.({ ...serverSidePaginationData, ...filterData })\r\n .then((resp) => {\r\n setListingData(resp.data);\r\n setPaginationData(resp.pagination);\r\n })\r\n .catch((error) => {\r\n enqueueSnackbar(error.message, { variant: \"error\" });\r\n })\r\n .finally(() => {\r\n setLoading(false);\r\n });\r\n };\r\n\r\n const handleFilterData = (data) => {\r\n setFilterData((prev) => ({\r\n ...data,\r\n }));\r\n if (tableConfig?.filter?.useServerSideFilters) {\r\n setChangeFilterData((prev) => !prev);\r\n }\r\n };\r\n\r\n const filterByMatchingFields = (data, filters) => {\r\n return data.filter((item) =>\r\n Object.entries(filters).every(([key, value]) => item[key] === value),\r\n );\r\n };\r\n\r\n const filteredData = useMemo(() => {\r\n if (tableConfig?.filter?.useServerSideFilters) return data;\r\n return filterByMatchingFields(listingData, filterData);\r\n }, [listingData, filterData]);\r\n\r\n useEffect(() => {\r\n handleGetListing();\r\n }, [\r\n serverSidePaginationData.search,\r\n serverSidePaginationData.rows_per_page,\r\n serverSidePaginationData.current_page,\r\n changeFilterData,\r\n ]);\r\n\r\n return (\r\n <SnackbarProvider\r\n maxSnack={3}\r\n anchorOrigin={{\r\n vertical: \"bottom\",\r\n horizontal: \"right\",\r\n }}\r\n autoHideDuration={3000}\r\n action={(snackbarKey) => (\r\n <button\r\n onClick={() => {\r\n window.dispatchEvent(\r\n new CustomEvent(\"closeSnackbar\", { detail: snackbarKey }),\r\n );\r\n }}\r\n className=\"p-1 hover:bg-white/20 rounded-full transition-colors duration-200 text-white flex items-center justify-center\"\r\n >\r\n <X className=\"h-4 w-4\" />\r\n </button>\r\n )}\r\n >\r\n <div>\r\n {/* Header */}\r\n <div className=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 mb-6\">\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 mt-2\">\r\n {config?.description}\r\n </p>\r\n </div>\r\n <div className=\"flex items-center space-x-3\">\r\n <Button\r\n onClick={() => setShowAdd(true)}\r\n variant=\"contained\"\r\n color=\"primary\"\r\n >\r\n <Plus className=\"w-4 h-4 mr-2\" />\r\n {config.buttonText || \"Add New\"}\r\n </Button>\r\n </div>\r\n </div>\r\n\r\n {/* Table */}\r\n <Table\r\n config={{\r\n ...tableConfig,\r\n pagination: {\r\n ...tableConfig.pagination,\r\n ...paginationData,\r\n },\r\n data: filteredData,\r\n setServerSidePaginationData: setServerSidePaginationData,\r\n onMenuAction: handleMenuAction,\r\n filterConfig,\r\n onFilterApply: handleFilterData,\r\n loading,\r\n }}\r\n />\r\n\r\n {/* Add Modal */}\r\n <Modal\r\n isOpen={showAdd}\r\n onClose={() => setShowAdd(false)}\r\n icon={modalConfig.addModal?.icon}\r\n title={modalConfig.addModal?.title || \"Add New\"}\r\n size={modalConfig.addModal?.size || \"md\"}\r\n onFormSubmit={() =>\r\n document.querySelector(\"#addForm\")?.requestSubmit()\r\n }\r\n loadingBtn={formLoading}\r\n actionButtons={modalConfig.addModal.actionButtons}\r\n >\r\n <Form\r\n config={modalConfig?.addModal || []}\r\n onSubmit={handleAddFormSubmit}\r\n initialData={{}}\r\n loading={formLoading}\r\n />\r\n </Modal>\r\n\r\n {/* Edit Modal */}\r\n <Modal\r\n isOpen={showEdit}\r\n onClose={() => setShowEdit(false)}\r\n icon={modalConfig.editModal?.icon}\r\n title={modalConfig.editModal?.title || \"Edit\"}\r\n size={modalConfig.editModal?.size || \"md\"}\r\n onFormSubmit={() =>\r\n document.querySelector(\"#editForm\")?.requestSubmit()\r\n }\r\n actionButtons={modalConfig.editModal.actionButtons}\r\n loadingBtn={formLoading}\r\n >\r\n <Form\r\n config={modalConfig.editModal || []}\r\n onSubmit={handleEditFormSubmit}\r\n initialData={selectedItem}\r\n loading={formLoading}\r\n />\r\n </Modal>\r\n\r\n {/* Delete Modal */}\r\n {showDelete && (\r\n <Modal\r\n isOpen={showDelete}\r\n onClose={(resp) => {\r\n handleDeleteResult(resp);\r\n }}\r\n icon={\r\n modalConfig.deleteModal?.icon || (\r\n <Icon icon=\"ph:warning-bold\" className=\"w-6 h-6 text-red-500\" />\r\n )\r\n }\r\n title={modalConfig.deleteModal?.title || \"Confirm Delete\"}\r\n size={modalConfig.deleteModal?.size || \"md\"}\r\n loading={formLoading}\r\n actionButtons={modalConfig.deleteModal.actionButtons}\r\n executeFunction={executeAction}\r\n selectedItem={selectedItem}\r\n >\r\n <div className=\"flex items-center space-x-2 py-3\">\r\n <div>\r\n <p className=\"text-md text-gray-700 dark:text-white\">\r\n {modalConfig.deleteModal?.confirmText ||\r\n \"Are you sure you want to delete this item?\"}\r\n </p>\r\n {modalConfig.deleteModal?.referenceKey && (\r\n <p className=\"text-md font-semibold text-gray-700 dark:text-white\">\r\n {selectedItem[modalConfig.deleteModal?.referenceKey]}\r\n </p>\r\n )}\r\n </div>\r\n </div>\r\n </Modal>\r\n )}\r\n\r\n {/* View Detail Modal */}\r\n {modalConfig.viewModal && (\r\n <Modal\r\n isOpen={showView}\r\n onClose={() => {\r\n setShowView(false);\r\n setSelectedItem(null);\r\n }}\r\n icon={modalConfig.viewModal?.icon}\r\n title={modalConfig.viewModal?.title || \"View Details\"}\r\n size={modalConfig.viewModal?.size || \"lg\"}\r\n footerConfig={modalConfig?.viewModal.footer}\r\n >\r\n {modalConfig.viewModal?.component ? (\r\n <modalConfig.viewModal.component data={selectedItem} />\r\n ) : (\r\n <Details\r\n data={selectedItem}\r\n config={modalConfig.viewModal || {}}\r\n />\r\n )}\r\n </Modal>\r\n )}\r\n </div>\r\n </SnackbarProvider>\r\n );\r\n};\r\n\r\nconst optionType = PropTypes.shape({\r\n value: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.number,\r\n PropTypes.bool,\r\n ]).isRequired,\r\n label: PropTypes.string.isRequired,\r\n color: PropTypes.string,\r\n});\r\n\r\nconst actionButtonType = PropTypes.shape({\r\n type: PropTypes.string.isRequired,\r\n label: PropTypes.string.isRequired,\r\n color: PropTypes.string,\r\n variant: PropTypes.string,\r\n onClick: PropTypes.func,\r\n});\r\n\r\nconst menuActionType = PropTypes.shape({\r\n title: PropTypes.string.isRequired,\r\n type: PropTypes.string.isRequired,\r\n variant: PropTypes.string,\r\n icon: PropTypes.node,\r\n});\r\n\r\nconst tableHeadType = PropTypes.shape({\r\n key: PropTypes.string.isRequired,\r\n title: PropTypes.string,\r\n type: PropTypes.string,\r\n imageKey: PropTypes.string,\r\n titleKey: PropTypes.string,\r\n subtitleKey: PropTypes.string,\r\n onClickDetails: PropTypes.bool,\r\n variant: PropTypes.string,\r\n chipOptions: PropTypes.arrayOf(optionType),\r\n defaultColor: PropTypes.string,\r\n className: PropTypes.string,\r\n format: PropTypes.string,\r\n menuList: PropTypes.arrayOf(menuActionType),\r\n});\r\n\r\nconst formFieldType = PropTypes.shape({\r\n key: PropTypes.string.isRequired,\r\n label: PropTypes.string,\r\n type: PropTypes.string.isRequired,\r\n required: PropTypes.bool,\r\n minLength: PropTypes.number,\r\n parentClass: PropTypes.string,\r\n search: PropTypes.bool,\r\n multiple: PropTypes.bool,\r\n dropdownMaxHeight: PropTypes.string,\r\n dragDrop: PropTypes.bool,\r\n countriesList: PropTypes.bool,\r\n defaultCountry: PropTypes.string,\r\n placeholder: PropTypes.string,\r\n rows: PropTypes.number,\r\n text: PropTypes.string,\r\n editorKey: PropTypes.string,\r\n options: PropTypes.arrayOf(optionType),\r\n});\r\n\r\nconst viewFieldType = PropTypes.shape({\r\n key: PropTypes.string,\r\n label: PropTypes.string,\r\n type: PropTypes.string,\r\n imageKey: PropTypes.string,\r\n titleKey: PropTypes.string,\r\n subtitleKey: PropTypes.string,\r\n blockClass: PropTypes.string,\r\n icon: PropTypes.node,\r\n variant: PropTypes.string,\r\n chipOptions: PropTypes.arrayOf(optionType),\r\n defaultColor: PropTypes.string,\r\n className: PropTypes.string,\r\n format: PropTypes.string,\r\n});\r\n\r\nCrudPage.propTypes = {\r\n config: PropTypes.shape({\r\n title: PropTypes.string.isRequired,\r\n description: PropTypes.string,\r\n buttonText: PropTypes.string,\r\n fetchData: PropTypes.func.isRequired,\r\n isStaticData: PropTypes.bool,\r\n\r\n /* ================= TABLE CONFIG ================= */\r\n\r\n tableConfig: PropTypes.shape({\r\n table_head: PropTypes.arrayOf(tableHeadType).isRequired,\r\n\r\n search: PropTypes.shape({\r\n enabled: PropTypes.bool,\r\n useServerSideSearch: PropTypes.bool,\r\n searchKeys: PropTypes.arrayOf(PropTypes.string),\r\n }),\r\n\r\n pagination: PropTypes.shape({\r\n enabled: PropTypes.bool,\r\n useServerSidePagination: PropTypes.bool,\r\n }),\r\n\r\n filter: PropTypes.shape({\r\n enabled: PropTypes.bool,\r\n useServerSideFilters: PropTypes.bool,\r\n }),\r\n }).isRequired,\r\n\r\n /* ================= MODAL CONFIG ================= */\r\n\r\n modalConfig: PropTypes.shape({\r\n addModal: PropTypes.shape({\r\n title: PropTypes.string.isRequired,\r\n size: PropTypes.string,\r\n formClass: PropTypes.string,\r\n formFields: PropTypes.arrayOf(formFieldType),\r\n handleSubmit: PropTypes.func.isRequired,\r\n actionButtons: PropTypes.arrayOf(actionButtonType),\r\n }),\r\n\r\n editModal: PropTypes.shape({\r\n title: PropTypes.string.isRequired,\r\n size: PropTypes.string,\r\n formClass: PropTypes.string,\r\n formFields: PropTypes.arrayOf(formFieldType),\r\n handleSubmit: PropTypes.func.isRequired,\r\n actionButtons: PropTypes.arrayOf(actionButtonType),\r\n }),\r\n\r\n deleteModal: PropTypes.shape({\r\n title: PropTypes.string.isRequired,\r\n size: PropTypes.string,\r\n confirmText: PropTypes.string,\r\n referenceKey: PropTypes.string,\r\n actionButtons: PropTypes.arrayOf(actionButtonType),\r\n }),\r\n\r\n viewModal: PropTypes.shape({\r\n title: PropTypes.string.isRequired,\r\n size: PropTypes.string,\r\n\r\n // 👇 This covers your commented code:\r\n component: PropTypes.elementType, // for custom component like TeamMemberDetail\r\n\r\n fields: PropTypes.arrayOf(viewFieldType),\r\n\r\n footer: PropTypes.shape({\r\n cancelButton: PropTypes.bool,\r\n cancelText: PropTypes.string,\r\n }),\r\n }),\r\n }),\r\n\r\n /* ================= FILTER CONFIG ================= */\r\n\r\n filterConfig: PropTypes.shape({\r\n fields: PropTypes.arrayOf(formFieldType),\r\n }),\r\n }).isRequired,\r\n};\r\n\r\nexport default CrudPage;\r\n","import React from \"react\";\r\nimport CrudPage from \"./components/CrudPage\";\r\nimport \"./index.css\";\r\n\r\nexport default function Crud(props) {\r\n console.info(props, \"props passed\");\r\n return (\r\n <>\r\n <CrudPage config={props.config} />\r\n </>\r\n );\r\n}\r\n"],"names":["REACT_ELEMENT_TYPE","REACT_FRAGMENT_TYPE","jsxProd","type","config","maybeKey","key","propName","reactJsxRuntime_production","getComponentNameFromType","REACT_CLIENT_REFERENCE","REACT_PROFILER_TYPE","REACT_STRICT_MODE_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_ACTIVITY_TYPE","REACT_PORTAL_TYPE","REACT_CONTEXT_TYPE","REACT_CONSUMER_TYPE","REACT_FORWARD_REF_TYPE","innerType","REACT_MEMO_TYPE","REACT_LAZY_TYPE","testStringCoercion","value","checkKeyStringCoercion","JSCompiler_inline_result","JSCompiler_temp_const","JSCompiler_inline_result$jscomp$0","getTaskName","name","getOwner","dispatcher","ReactSharedInternals","UnknownOwner","hasValidKey","hasOwnProperty","getter","defineKeyPropWarningGetter","props","displayName","warnAboutAccessingKey","specialPropKeyWarningShown","elementRefGetterWithDeprecationWarning","componentName","didWarnAboutElementRef","ReactElement","owner","debugStack","debugTask","refProp","jsxDEVImpl","isStaticChildren","children","isArrayImpl","validateChildKeys","keys","k","didWarnAboutKeySpread","node","isValidElement","object","React","require$$0","createTask","callStackForError","unknownOwnerDebugStack","unknownOwnerDebugTask","reactJsxRuntime_development","trackActualOwner","jsxRuntimeModule","require$$1","formatDate","dateString","format","date","pad","n","map","token","searchLocalData","data","searchTerm","searchKeys","lowerSearchTerm","extractValues","obj","item","valuesToSearch","val","Button","className","variant","color","size","fullWidth","ref","baseStyles","sizes","colorVariants","colorStyles","_a","sizeStyles","combinedClassName","jsx","InputLabel","label","required","Fragment","jsxs","Select","options","onChange","placeholder","disabled","search","parentClass","multiple","dropdownMaxHeight","open","setOpen","useState","setSearchTerm","showAboveState","setShowAboveState","dropdownRef","useRef","searchInputRef","normalize","normalizedValue","filteredOptions","option","isSelected","optionValue","normalized","useEffect","handleClickOutside","event","rect","spaceBelow","handleOptionClick","finalValue","exists","newValues","v","selectedLabels","opt","ChevronDown","Search","e","Check","Switch","text","radioOptions","idx","countries","PhoneInput","countriesList","defaultCountry","find_country_with_code","selectedCountry","setSelectedCountry","fullNumber","setFullNumber","match","c","a","b","handleNumberChange","input","handleCountrySelect","country","filteredCountries","handleInputChange","formatted","TextArea","ImagePicker","accept","id","dragDrop","image","setImage","isDragging","setIsDragging","inputRef","handleFileChange","files","file","preview","handleDragOver","handleDragLeave","handleDrop","Icon","Input","onKeyDown","showPassword","setShowPassword","handleKeyDown","prev","TinyEditor","editorKey","height","inline","plugins","toolbar","menubar","fontFamily","initConfig","imageUploadHandler","defaultPlugins","defaultToolbar","handleImageUpload","blobInfo","resolve","reject","url","error","Editor","content","Checkbox","multiSelect","isChecked","handleSingleChange","handleMultipleChange","checked","newValue","index","RenderFields","field","formData","handleChange","rows","inputClass","minLength","finalPlaceholder","baseClass","imgObj","FilterDrawer","isOpen","onClose","onApply","filters","setFilters","handleApply","handleReset","X","BADGE_COLORS","BADGE_VARIANTS","Chip","colorConfig","variantKey","variantClasses","TableSkeleton","columns","_","rowIndex","colIndex","ImagePreview","src","alt","setIsOpen","closePreview","handleEsc","Table","table_head","loading","filter","pagination","emptyMessage","onMenuAction","setServerSidePaginationData","onFilterApply","filterConfig","activeMenu","setActiveMenu","menuList","setMenuList","menuPosition","setMenuPosition","showFilters","setShowFilters","targetImage","setTargetImage","filteredData","useMemo","currentPage","setCurrentPage","pageSize","setPageSize","totalRecords","setTotalRecords","totalPages","paginatedData","start","menuRef","buttonRefs","searchTimeoutRef","handleSearchChange","handleActionClick","action","handleMenuToggle","itemId","menu_list","button","menuWidth","menuHeight","viewportWidth","viewportHeight","left","top","calculateRowNumber","openPreview","renderAvatar","imageSrc","imageAlt","fallback_icon","User","renderGroupCell","row","col","handleRenderChip","chipObj","handleRenderCellValue","el","EllipsisVertical","handleColumnClick","isColumnClickable","handleScroll","Filter","newLimit","newPage","ChevronLeft","ChevronRight","createPortal","i","d","Modal","icon","title","actionButtons","actions","showDefaultClose","footerConfig","hideFooter","onFormSubmit","onCancel","loadingBtn","executeFunction","selectedItem","sizeClasses","btn","resp","Form","onSubmit","initialData","formClass","formFields","setFormData","handleSubmit","form","Details","fields","containerClass","DetailRow","GroupRow","subtitle","CrudPage","fetchData","isStaticData","tableConfig","modalConfig","setLoading","formLoading","setFormLoading","listingData","setListingData","paginationData","setPaginationData","serverSidePaginationData","filterData","setFilterData","changeFilterData","setChangeFilterData","showAdd","setShowAdd","showEdit","setShowEdit","showDelete","setShowDelete","showView","setShowView","setSelectedItem","handleMenuAction","executeAction","onSuccess","success_message","error_message","enqueueSnackbar","handleAddResult","newObj","handleGetListing","handleEditResult","updatedObj","targetObj","handleDeleteResult","handleAddFormSubmit","_b","handleEditFormSubmit","handleFilterData","filterByMatchingFields","SnackbarProvider","snackbarKey","Plus","_c","_d","_e","_f","_g","_h","_i","_j","_k","_l","_m","_n","_o","_p","optionType","PropTypes","actionButtonType","menuActionType","tableHeadType","formFieldType","viewFieldType","Crud"],"mappings":"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","x_google_ignoreList":[0,1,2]}
1
+ {"version":3,"file":"index.es.js","sources":["../node_modules/react/cjs/react-jsx-runtime.production.js","../node_modules/react/cjs/react-jsx-runtime.development.js","../node_modules/react/jsx-runtime.js","../src/lib/utils.js","../src/components/Button/Button.jsx","../src/components/Form/components/InputLabel.jsx","../src/components/Form/components/Select.jsx","../src/components/Form/components/Switch.jsx","../src/data/countries.js","../src/components/Form/components/PhoneInput.jsx","../src/components/Form/components/TextArea.jsx","../src/components/Form/components/ImagePicker.jsx","../src/components/Form/components/Input.jsx","../src/components/Form/components/TinyEditor.jsx","../src/components/Form/components/Checkbox.jsx","../src/components/Form/components/RenderFields.jsx","../src/components/Filter/FilterDrawer.jsx","../src/components/Chip/Chip.jsx","../src/components/Table/components/TableSkeleton.jsx","../src/components/Table/components/ImagePreview.jsx","../src/components/Table/Table.jsx","../src/components/Modal/Modal.jsx","../src/components/Form/Form.jsx","../src/components/Details/Details.jsx","../src/components/CrudPage.jsx","../src/index.jsx"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return type.displayName || \"Context\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(type, key, props, owner, debugStack, debugTask) {\n var refProp = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== refProp ? refProp : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n debugStack,\n debugTask\n ) {\n var children = config.children;\n if (void 0 !== children)\n if (isStaticChildren)\n if (isArrayImpl(children)) {\n for (\n isStaticChildren = 0;\n isStaticChildren < children.length;\n isStaticChildren++\n )\n validateChildKeys(children[isStaticChildren]);\n Object.freeze && Object.freeze(children);\n } else\n console.error(\n \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n );\n else validateChildKeys(children);\n if (hasOwnProperty.call(config, \"key\")) {\n children = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return \"key\" !== k;\n });\n isStaticChildren =\n 0 < keys.length\n ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n : \"{key: someKey}\";\n didWarnAboutKeySpread[children + isStaticChildren] ||\n ((keys =\n 0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n console.error(\n 'A props object containing a \"key\" prop is being spread into JSX:\\n let props = %s;\\n <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n let props = %s;\\n <%s key={someKey} {...props} />',\n isStaticChildren,\n children,\n keys,\n children\n ),\n (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n }\n children = null;\n void 0 !== maybeKey &&\n (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n children &&\n defineKeyPropWarningGetter(\n maybeKey,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(\n type,\n children,\n maybeKey,\n getOwner(),\n debugStack,\n debugTask\n );\n }\n function validateChildKeys(node) {\n isValidElement(node)\n ? node._store && (node._store.validated = 1)\n : \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_LAZY_TYPE &&\n (\"fulfilled\" === node._payload.status\n ? isValidElement(node._payload.value) &&\n node._payload.value._store &&\n (node._payload.value._store.validated = 1)\n : node._store && (node._store.validated = 1));\n }\n function isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n }\n var React = require(\"react\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n isArrayImpl = Array.isArray,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n React = {\n react_stack_bottom_frame: function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(\n React,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutKeySpread = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsx = function (type, config, maybeKey) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !1,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n exports.jsxs = function (type, config, maybeKey) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !0,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","// ======= 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-blue-600 text-white hover:bg-blue-700 focus:ring-blue-500 shadow-sm\",\r\n outlined:\r\n \"border border-blue-600 bg-transparent text-blue-600 hover:bg-blue-50 focus:ring-blue-500\",\r\n text: \"bg-transparent text-blue-600 hover:bg-blue-50 focus:ring-blue-500\",\r\n },\r\n success: {\r\n contained:\r\n \"bg-green-600 text-white hover:bg-green-700 focus:ring-green-500 shadow-sm\",\r\n outlined:\r\n \"border border-green-600 bg-transparent text-green-600 hover:bg-green-50 focus:ring-green-500\",\r\n text: \"bg-transparent text-green-600 hover:bg-green-50 focus:ring-green-500\",\r\n },\r\n error: {\r\n contained:\r\n \"bg-red-600 text-white hover:bg-red-700 focus:ring-red-500 shadow-sm\",\r\n outlined:\r\n \"border border-red-600 bg-transparent text-red-600 hover:bg-red-50 focus:ring-red-500\",\r\n text: \"bg-transparent text-red-600 hover:bg-red-50 focus:ring-red-500\",\r\n },\r\n default: {\r\n contained:\r\n \"border bg-gray-200 text-gray-800 hover:bg-gray-300 focus:ring-gray-300 shadow-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-100 dark:hover:bg-gray-600 dark:focus:ring-gray-600\",\r\n outlined:\r\n \"border border-gray-300 bg-transparent text-gray-700 hover:bg-gray-100 focus:ring-gray-300 dark:border-gray-600 dark:text-gray-200 dark:hover:bg-gray-700 dark:focus:ring-gray-500\",\r\n text: \"bg-transparent text-gray-700 hover:bg-gray-100 focus:ring-gray-300 dark:text-gray-200 dark:hover:bg-gray-700 dark:focus:ring-gray-500\",\r\n },\r\n };\r\n\r\n const colorStyles =\r\n colorVariants[color]?.[variant] || colorVariants.default.contained;\r\n const sizeStyles = sizes[size];\r\n\r\n const combinedClassName = `\r\n ${baseStyles} \r\n ${colorStyles} \r\n ${sizeStyles} \r\n ${fullWidth ? \"w-full\" : \"\"} \r\n ${className}\r\n `.trim();\r\n\r\n return (\r\n <button\r\n ref={ref}\r\n type={props.type || \"button\"}\r\n className={combinedClassName}\r\n {...props}\r\n >\r\n {children}\r\n </button>\r\n );\r\n }\r\n);\r\n\r\nButton.displayName = \"Button\";\r\n\r\nexport default Button;\r\n","import React from \"react\";\r\n\r\nexport default function InputLabel({ label, required = false }) {\r\n return (\r\n <>\r\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\">\r\n {label}\r\n {required && <span className=\"ml-1\">*</span>}\r\n </label>\r\n </>\r\n );\r\n}\r\n","import React, { useState, useEffect, useRef } from \"react\";\r\nimport { ChevronDown, Search, Check } from \"lucide-react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nconst Select = ({\r\n options = [],\r\n value,\r\n onChange,\r\n placeholder = \"Select option\",\r\n className = \"\",\r\n disabled = false,\r\n search = false,\r\n label = \"\",\r\n required = false,\r\n name = \"\",\r\n parentClass = \"\",\r\n multiple = false, // ✅ NEW\r\n dropdownMaxHeight = \"\",\r\n}) => {\r\n const [open, setOpen] = useState(false);\r\n const [searchTerm, setSearchTerm] = useState(\"\");\r\n const [showAboveState, setShowAboveState] = useState(true);\r\n const dropdownRef = useRef(null);\r\n const searchInputRef = useRef(null);\r\n\r\n const normalize = (val) =>\r\n typeof val === \"boolean\" ? String(val) : String(val ?? \"\");\r\n\r\n const normalizedValue = multiple\r\n ? (value || []).map(normalize)\r\n : normalize(value);\r\n\r\n const filteredOptions = options.filter((option) =>\r\n option.label.toLowerCase().includes(searchTerm.toLowerCase()),\r\n );\r\n\r\n const isSelected = (optionValue) => {\r\n const normalized = normalize(optionValue);\r\n if (multiple) {\r\n return normalizedValue.includes(normalized);\r\n }\r\n return normalized === normalizedValue;\r\n };\r\n\r\n useEffect(() => {\r\n const handleClickOutside = (event) => {\r\n if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {\r\n setOpen(false);\r\n setSearchTerm(\"\");\r\n }\r\n };\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (open && dropdownRef.current) {\r\n const rect = dropdownRef.current.getBoundingClientRect();\r\n const viewportHeight = window.innerHeight;\r\n const spaceBelow = viewportHeight - rect.bottom;\r\n const dropdownHeight = 200;\r\n setShowAboveState(spaceBelow < dropdownHeight);\r\n }\r\n }, [open]);\r\n\r\n useEffect(() => {\r\n if (open && searchInputRef.current) {\r\n searchInputRef.current.focus();\r\n }\r\n }, [open]);\r\n\r\n const handleOptionClick = (optionValue) => {\r\n let finalValue = optionValue;\r\n if (optionValue === \"true\") finalValue = true;\r\n else if (optionValue === \"false\") finalValue = false;\r\n\r\n if (multiple) {\r\n const exists = normalizedValue.includes(normalize(optionValue));\r\n\r\n let newValues;\r\n if (exists) {\r\n newValues = value.filter(\r\n (v) => normalize(v) !== normalize(optionValue),\r\n );\r\n } else {\r\n newValues = [...(value || []), finalValue];\r\n }\r\n\r\n onChange(newValues);\r\n } else {\r\n onChange(finalValue);\r\n setOpen(false);\r\n }\r\n\r\n setSearchTerm(\"\");\r\n };\r\n\r\n const selectedLabels = multiple\r\n ? options\r\n .filter((opt) => isSelected(opt.value))\r\n .map((opt) => opt.label)\r\n .join(\", \")\r\n : options.find((opt) => isSelected(opt.value))?.label;\r\n\r\n return (\r\n <div key={name} className={parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n\r\n <div className={`relative ${className}`} ref={dropdownRef}>\r\n <button\r\n type=\"button\"\r\n onClick={() => !disabled && setOpen(!open)}\r\n disabled={disabled}\r\n className={`w-full h-10 px-3 border border-gray-300 dark:border-gray-600 rounded-md text-left text-sm flex items-center justify-between \r\n ${\r\n !selectedLabels\r\n ? \"text-gray-500 dark:text-gray-400\"\r\n : \"dark:text-white\"\r\n } \r\n ${disabled ? \"opacity-50 cursor-not-allowed\" : \"dark:bg-gray-700\"}`}\r\n >\r\n <span className=\"truncate\">{selectedLabels || placeholder}</span>\r\n\r\n <ChevronDown\r\n className={`w-4 h-4 transition-transform ${\r\n open ? \"rotate-180\" : \"\"\r\n }`}\r\n />\r\n </button>\r\n\r\n {open && (\r\n <div\r\n className={`absolute z-50 w-full border rounded-md bg-white dark:bg-gray-700 shadow-lg \r\n ${showAboveState ? \"bottom-full mb-1\" : \"top-full mt-1\"}`}\r\n >\r\n {search && (\r\n <div className=\"p-2 border-b border-gray-200 dark:border-gray-600\">\r\n <div className=\"relative\">\r\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400\" />\r\n <input\r\n ref={searchInputRef}\r\n type=\"text\"\r\n value={searchTerm}\r\n onChange={(e) => setSearchTerm(e.target.value)}\r\n placeholder=\"Search...\"\r\n className=\"w-full pl-9 pr-3 py-2 text-sm border rounded-md bg-white dark:bg-gray-800 dark:text-white placeholder-gray-500 dark:placeholder-gray-400 focus:outline-none\"\r\n />\r\n </div>\r\n </div>\r\n )}\r\n\r\n <div\r\n className={`max-h-40 overflow-y-auto`}\r\n style={{\r\n maxHeight: dropdownMaxHeight || \"\",\r\n }}\r\n >\r\n {filteredOptions.length > 0 ? (\r\n filteredOptions.map((option) => (\r\n <button\r\n key={String(option.value)}\r\n type=\"button\"\r\n onClick={() => handleOptionClick(String(option.value))}\r\n className={`w-full px-3 py-2 text-left text-sm flex items-center justify-between hover:bg-gray-100 dark:hover:bg-gray-600 \r\n ${\r\n isSelected(option.value)\r\n ? \"bg-blue-50 dark:bg-blue-900/20 text-blue-700 dark:text-blue-300\"\r\n : \"\"\r\n }`}\r\n >\r\n <span>{option.label}</span>\r\n\r\n {multiple && isSelected(option.value) && (\r\n <Check className=\"w-4 h-4\" />\r\n )}\r\n </button>\r\n ))\r\n ) : (\r\n <div className=\"px-3 py-2 text-sm text-gray-500 dark:text-gray-400\">\r\n No options found\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default Select;\r\n","import React from \"react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nconst Switch = ({\r\n value = true,\r\n onChange,\r\n text,\r\n options = [],\r\n label,\r\n required,\r\n name = \"\",\r\n disabled = false,\r\n parentClass = \"\",\r\n}) => {\r\n const radioOptions =\r\n options.length > 0\r\n ? options\r\n : [\r\n { label: \"Active\", value: true },\r\n { label: \"Inactive\", value: false },\r\n ];\r\n\r\n return (\r\n <>\r\n <div key={name} className={parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n <div className=\"flex items-center justify-between h-10 gap-4 bg-gray-100 dark:bg-gray-700 px-3 rounded-md border border-gray-100 dark:border-gray-600\">\r\n {/* Left Text */}\r\n {text && (\r\n <p className=\"text-xs text-gray-600 dark:text-gray-400 flex-shrink overflow-hidden text-ellipsis whitespace-nowrap max-w-[200px]\">\r\n {text}\r\n </p>\r\n )}\r\n\r\n {/* Radio Buttons */}\r\n <div className=\"flex items-center gap-6\">\r\n {radioOptions.map((opt, idx) => (\r\n <label\r\n key={idx}\r\n className=\"flex items-center gap-2 cursor-pointer select-none\"\r\n >\r\n <input\r\n type=\"radio\"\r\n name=\"switch-field\"\r\n required={required && idx === 0}\r\n value={opt.value}\r\n disabled={disabled}\r\n checked={value === opt.value}\r\n onChange={() => onChange(opt.value)}\r\n className=\"w-4 h-4 border-gray-300 cursor-pointer\"\r\n />\r\n <span className=\"text-sm text-gray-700 dark:text-white\">\r\n {opt.label}\r\n </span>\r\n </label>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default Switch;\r\n","export const countries = [\r\n { label: \"Afghanistan\", code: \"AF\", phone: \"93\" },\r\n { label: \"Aland Islands\", code: \"AX\", phone: \"358\" },\r\n { label: \"Albania\", code: \"AL\", phone: \"355\" },\r\n { label: \"Algeria\", code: \"DZ\", phone: \"213\" },\r\n { label: \"American Samoa\", code: \"AS\", phone: \"1\" },\r\n { label: \"Andorra\", code: \"AD\", phone: \"376\" },\r\n { label: \"Angola\", code: \"AO\", phone: \"244\" },\r\n { label: \"Anguilla\", code: \"AI\", phone: \"1\" },\r\n { label: \"Antarctica\", code: \"AQ\", phone: \"672\" },\r\n { label: \"Antigua and Barbuda\", code: \"AG\", phone: \"1\" },\r\n { label: \"Argentina\", code: \"AR\", phone: \"54\" },\r\n { label: \"Armenia\", code: \"AM\", phone: \"374\" },\r\n { label: \"Aruba\", code: \"AW\", phone: \"297\" },\r\n { label: \"Australia\", code: \"AU\", phone: \"61\" },\r\n { label: \"Austria\", code: \"AT\", phone: \"43\" },\r\n { label: \"Azerbaijan\", code: \"AZ\", phone: \"994\" },\r\n { label: \"Bahrain\", code: \"BH\", phone: \"973\" },\r\n { label: \"Bangladesh\", code: \"BD\", phone: \"880\" },\r\n { label: \"Barbados\", code: \"BB\", phone: \"1\" },\r\n { label: \"Belarus\", code: \"BY\", phone: \"375\" },\r\n { label: \"Belgium\", code: \"BE\", phone: \"32\" },\r\n { label: \"Belize\", code: \"BZ\", phone: \"501\" },\r\n { label: \"Benin\", code: \"BJ\", phone: \"229\" },\r\n { label: \"Bermuda\", code: \"BM\", phone: \"1\" },\r\n { label: \"Bhutan\", code: \"BT\", phone: \"975\" },\r\n { label: \"Bolivia\", code: \"BO\", phone: \"591\" },\r\n { label: \"Bonaire, Sint Eustatius and Saba\", code: \"BQ\", phone: \"599\" },\r\n { label: \"Bosnia and Herzegovina\", code: \"BA\", phone: \"387\" },\r\n { label: \"Botswana\", code: \"BW\", phone: \"267\" },\r\n { label: \"Bouvet Island\", code: \"BV\", phone: \"0055\" },\r\n { label: \"Brazil\", code: \"BR\", phone: \"55\" },\r\n { label: \"British Indian Ocean Territory\", code: \"IO\", phone: \"246\" },\r\n { label: \"Brunei\", code: \"BN\", phone: \"673\" },\r\n { label: \"Bulgaria\", code: \"BG\", phone: \"359\" },\r\n { label: \"Burkina Faso\", code: \"BF\", phone: \"226\" },\r\n { label: \"Burundi\", code: \"BI\", phone: \"257\" },\r\n { label: \"Cambodia\", code: \"KH\", phone: \"855\" },\r\n { label: \"Cameroon\", code: \"CM\", phone: \"237\" },\r\n { label: \"Canada\", code: \"CA\", phone: \"1\" },\r\n { label: \"Cape Verde\", code: \"CV\", phone: \"238\" },\r\n { label: \"Cayman Islands\", code: \"KY\", phone: \"1\" },\r\n { label: \"Central African Republic\", code: \"CF\", phone: \"236\" },\r\n { label: \"Chad\", code: \"TD\", phone: \"235\" },\r\n { label: \"Chile\", code: \"CL\", phone: \"56\" },\r\n { label: \"China\", code: \"CN\", phone: \"86\" },\r\n { label: \"Christmas Island\", code: \"CX\", phone: \"61\" },\r\n { label: \"Cocos (Keeling) Islands\", code: \"CC\", phone: \"61\" },\r\n { label: \"Colombia\", code: \"CO\", phone: \"57\" },\r\n { label: \"Comoros\", code: \"KM\", phone: \"269\" },\r\n { label: \"Congo\", code: \"CG\", phone: \"242\" },\r\n { label: \"Cook Islands\", code: \"CK\", phone: \"682\" },\r\n { label: \"Costa Rica\", code: \"CR\", phone: \"506\" },\r\n { label: \"Croatia\", code: \"HR\", phone: \"385\" },\r\n { label: \"Cuba\", code: \"CU\", phone: \"53\" },\r\n { label: \"Curaçao\", code: \"CW\", phone: \"599\" },\r\n { label: \"Cyprus\", code: \"CY\", phone: \"357\" },\r\n { label: \"Czech Republic\", code: \"CZ\", phone: \"420\" },\r\n { label: \"Democratic Republic of the Congo\", code: \"CD\", phone: \"243\" },\r\n { label: \"Denmark\", code: \"DK\", phone: \"45\" },\r\n { label: \"Djibouti\", code: \"DJ\", phone: \"253\" },\r\n { label: \"Dominica\", code: \"DM\", phone: \"1\" },\r\n { label: \"Dominican Republic\", code: \"DO\", phone: \"1\" },\r\n { label: \"Ecuador\", code: \"EC\", phone: \"593\" },\r\n { label: \"Egypt\", code: \"EG\", phone: \"20\" },\r\n { label: \"El Salvador\", code: \"SV\", phone: \"503\" },\r\n { label: \"Equatorial Guinea\", code: \"GQ\", phone: \"240\" },\r\n { label: \"Eritrea\", code: \"ER\", phone: \"291\" },\r\n { label: \"Estonia\", code: \"EE\", phone: \"372\" },\r\n { label: \"Eswatini\", code: \"SZ\", phone: \"268\" },\r\n { label: \"Ethiopia\", code: \"ET\", phone: \"251\" },\r\n { label: \"Falkland Islands\", code: \"FK\", phone: \"500\" },\r\n { label: \"Faroe Islands\", code: \"FO\", phone: \"298\" },\r\n { label: \"Fiji Islands\", code: \"FJ\", phone: \"679\" },\r\n { label: \"Finland\", code: \"FI\", phone: \"358\" },\r\n { label: \"France\", code: \"FR\", phone: \"33\" },\r\n { label: \"French Guiana\", code: \"GF\", phone: \"594\" },\r\n { label: \"French Polynesia\", code: \"PF\", phone: \"689\" },\r\n { label: \"French Southern Territories\", code: \"TF\", phone: \"262\" },\r\n { label: \"Gabon\", code: \"GA\", phone: \"241\" },\r\n { label: \"Georgia\", code: \"GE\", phone: \"995\" },\r\n { label: \"Germany\", code: \"DE\", phone: \"49\" },\r\n { label: \"Ghana\", code: \"GH\", phone: \"233\" },\r\n { label: \"Gibraltar\", code: \"GI\", phone: \"350\" },\r\n { label: \"Greece\", code: \"GR\", phone: \"30\" },\r\n { label: \"Greenland\", code: \"GL\", phone: \"299\" },\r\n { label: \"Grenada\", code: \"GD\", phone: \"1\" },\r\n { label: \"Guadeloupe\", code: \"GP\", phone: \"590\" },\r\n { label: \"Guam\", code: \"GU\", phone: \"1\" },\r\n { label: \"Guatemala\", code: \"GT\", phone: \"502\" },\r\n { label: \"Guernsey\", code: \"GG\", phone: \"44\" },\r\n { label: \"Guinea\", code: \"GN\", phone: \"224\" },\r\n { label: \"Guinea-Bissau\", code: \"GW\", phone: \"245\" },\r\n { label: \"Guyana\", code: \"GY\", phone: \"592\" },\r\n { label: \"Haiti\", code: \"HT\", phone: \"509\" },\r\n { label: \"Heard Island and McDonald Islands\", code: \"HM\", phone: \"672\" },\r\n { label: \"Honduras\", code: \"HN\", phone: \"504\" },\r\n { label: \"Hong Kong S.A.R.\", code: \"HK\", phone: \"852\" },\r\n { label: \"Hungary\", code: \"HU\", phone: \"36\" },\r\n { label: \"Iceland\", code: \"IS\", phone: \"354\" },\r\n { label: \"India\", code: \"IN\", phone: \"91\" },\r\n { label: \"Indonesia\", code: \"ID\", phone: \"62\" },\r\n { label: \"Iran\", code: \"IR\", phone: \"98\" },\r\n { label: \"Iraq\", code: \"IQ\", phone: \"964\" },\r\n { label: \"Ireland\", code: \"IE\", phone: \"353\" },\r\n { label: \"Israel\", code: \"IL\", phone: \"972\" },\r\n { label: \"Italy\", code: \"IT\", phone: \"39\" },\r\n { label: \"Ivory Coast\", code: \"CI\", phone: \"225\" },\r\n { label: \"Jamaica\", code: \"JM\", phone: \"1\" },\r\n { label: \"Japan\", code: \"JP\", phone: \"81\" },\r\n { label: \"Jersey\", code: \"JE\", phone: \"44\" },\r\n { label: \"Jordan\", code: \"JO\", phone: \"962\" },\r\n { label: \"Kazakhstan\", code: \"KZ\", phone: \"7\" },\r\n { label: \"Kenya\", code: \"KE\", phone: \"254\" },\r\n { label: \"Kiribati\", code: \"KI\", phone: \"686\" },\r\n { label: \"Kosovo\", code: \"XK\", phone: \"383\" },\r\n { label: \"Kuwait\", code: \"KW\", phone: \"965\" },\r\n { label: \"Kyrgyzstan\", code: \"KG\", phone: \"996\" },\r\n { label: \"Laos\", code: \"LA\", phone: \"856\" },\r\n { label: \"Latvia\", code: \"LV\", phone: \"371\" },\r\n { label: \"Lebanon\", code: \"LB\", phone: \"961\" },\r\n { label: \"Lesotho\", code: \"LS\", phone: \"266\" },\r\n { label: \"Liberia\", code: \"LR\", phone: \"231\" },\r\n { label: \"Libya\", code: \"LY\", phone: \"218\" },\r\n { label: \"Liechtenstein\", code: \"LI\", phone: \"423\" },\r\n { label: \"Lithuania\", code: \"LT\", phone: \"370\" },\r\n { label: \"Luxembourg\", code: \"LU\", phone: \"352\" },\r\n { label: \"Macau S.A.R.\", code: \"MO\", phone: \"853\" },\r\n { label: \"Madagascar\", code: \"MG\", phone: \"261\" },\r\n { label: \"Malawi\", code: \"MW\", phone: \"265\" },\r\n { label: \"Malaysia\", code: \"MY\", phone: \"60\" },\r\n { label: \"Maldives\", code: \"MV\", phone: \"960\" },\r\n { label: \"Mali\", code: \"ML\", phone: \"223\" },\r\n { label: \"Malta\", code: \"MT\", phone: \"356\" },\r\n { label: \"Man (Isle of)\", code: \"IM\", phone: \"44\" },\r\n { label: \"Marshall Islands\", code: \"MH\", phone: \"692\" },\r\n { label: \"Martinique\", code: \"MQ\", phone: \"596\" },\r\n { label: \"Mauritania\", code: \"MR\", phone: \"222\" },\r\n { label: \"Mauritius\", code: \"MU\", phone: \"230\" },\r\n { label: \"Mayotte\", code: \"YT\", phone: \"262\" },\r\n { label: \"Mexico\", code: \"MX\", phone: \"52\" },\r\n { label: \"Micronesia\", code: \"FM\", phone: \"691\" },\r\n { label: \"Moldova\", code: \"MD\", phone: \"373\" },\r\n { label: \"Monaco\", code: \"MC\", phone: \"377\" },\r\n { label: \"Mongolia\", code: \"MN\", phone: \"976\" },\r\n { label: \"Montenegro\", code: \"ME\", phone: \"382\" },\r\n { label: \"Montserrat\", code: \"MS\", phone: \"1\" },\r\n { label: \"Morocco\", code: \"MA\", phone: \"212\" },\r\n { label: \"Mozambique\", code: \"MZ\", phone: \"258\" },\r\n { label: \"Myanmar\", code: \"MM\", phone: \"95\" },\r\n { label: \"Namibia\", code: \"NA\", phone: \"264\" },\r\n { label: \"Nauru\", code: \"NR\", phone: \"674\" },\r\n { label: \"Nepal\", code: \"NP\", phone: \"977\" },\r\n { label: \"Netherlands\", code: \"NL\", phone: \"31\" },\r\n { label: \"New Caledonia\", code: \"NC\", phone: \"687\" },\r\n { label: \"New Zealand\", code: \"NZ\", phone: \"64\" },\r\n { label: \"Nicaragua\", code: \"NI\", phone: \"505\" },\r\n { label: \"Niger\", code: \"NE\", phone: \"227\" },\r\n { label: \"Nigeria\", code: \"NG\", phone: \"234\" },\r\n { label: \"Niue\", code: \"NU\", phone: \"683\" },\r\n { label: \"Norfolk Island\", code: \"NF\", phone: \"672\" },\r\n { label: \"North Korea\", code: \"KP\", phone: \"850\" },\r\n { label: \"North Macedonia\", code: \"MK\", phone: \"389\" },\r\n { label: \"Northern Mariana Islands\", code: \"MP\", phone: \"1\" },\r\n { label: \"Norway\", code: \"NO\", phone: \"47\" },\r\n { label: \"Oman\", code: \"OM\", phone: \"968\" },\r\n { label: \"Pakistan\", code: \"PK\", phone: \"92\" },\r\n { label: \"Palau\", code: \"PW\", phone: \"680\" },\r\n { label: \"Palestinian Territory Occupied\", code: \"PS\", phone: \"970\" },\r\n { label: \"Panama\", code: \"PA\", phone: \"507\" },\r\n { label: \"Papua New Guinea\", code: \"PG\", phone: \"675\" },\r\n { label: \"Paraguay\", code: \"PY\", phone: \"595\" },\r\n { label: \"Peru\", code: \"PE\", phone: \"51\" },\r\n { label: \"Philippines\", code: \"PH\", phone: \"63\" },\r\n { label: \"Pitcairn Island\", code: \"PN\", phone: \"870\" },\r\n { label: \"Poland\", code: \"PL\", phone: \"48\" },\r\n { label: \"Portugal\", code: \"PT\", phone: \"351\" },\r\n { label: \"Puerto Rico\", code: \"PR\", phone: \"1\" },\r\n { label: \"Qatar\", code: \"QA\", phone: \"974\" },\r\n { label: \"Reunion\", code: \"RE\", phone: \"262\" },\r\n { label: \"Romania\", code: \"RO\", phone: \"40\" },\r\n { label: \"Russia\", code: \"RU\", phone: \"7\" },\r\n { label: \"Rwanda\", code: \"RW\", phone: \"250\" },\r\n { label: \"Saint Helena\", code: \"SH\", phone: \"290\" },\r\n { label: \"Saint Kitts and Nevis\", code: \"KN\", phone: \"1\" },\r\n { label: \"Saint Lucia\", code: \"LC\", phone: \"1\" },\r\n { label: \"Saint Pierre and Miquelon\", code: \"PM\", phone: \"508\" },\r\n { label: \"Saint Vincent and the Grenadines\", code: \"VC\", phone: \"1\" },\r\n { label: \"Saint-Barthelemy\", code: \"BL\", phone: \"590\" },\r\n { label: \"Saint-Martin (French part)\", code: \"MF\", phone: \"590\" },\r\n { label: \"Samoa\", code: \"WS\", phone: \"685\" },\r\n { label: \"San Marino\", code: \"SM\", phone: \"378\" },\r\n { label: \"Sao Tome and Principe\", code: \"ST\", phone: \"239\" },\r\n { label: \"Saudi Arabia\", code: \"SA\", phone: \"966\" },\r\n { label: \"Senegal\", code: \"SN\", phone: \"221\" },\r\n { label: \"Serbia\", code: \"RS\", phone: \"381\" },\r\n { label: \"Seychelles\", code: \"SC\", phone: \"248\" },\r\n { label: \"Sierra Leone\", code: \"SL\", phone: \"232\" },\r\n { label: \"Singapore\", code: \"SG\", phone: \"65\" },\r\n { label: \"Sint Maarten (Dutch part)\", code: \"SX\", phone: \"1721\" },\r\n { label: \"Slovakia\", code: \"SK\", phone: \"421\" },\r\n { label: \"Slovenia\", code: \"SI\", phone: \"386\" },\r\n { label: \"Solomon Islands\", code: \"SB\", phone: \"677\" },\r\n { label: \"Somalia\", code: \"SO\", phone: \"252\" },\r\n { label: \"South Africa\", code: \"ZA\", phone: \"27\" },\r\n { label: \"South Georgia\", code: \"GS\", phone: \"500\" },\r\n { label: \"South Korea\", code: \"KR\", phone: \"82\" },\r\n { label: \"South Sudan\", code: \"SS\", phone: \"211\" },\r\n { label: \"Spain\", code: \"ES\", phone: \"34\" },\r\n { label: \"Sri Lanka\", code: \"LK\", phone: \"94\" },\r\n { label: \"Sudan\", code: \"SD\", phone: \"249\" },\r\n { label: \"Suriname\", code: \"SR\", phone: \"597\" },\r\n { label: \"Svalbard and Jan Mayen Islands\", code: \"SJ\", phone: \"47\" },\r\n { label: \"Sweden\", code: \"SE\", phone: \"46\" },\r\n { label: \"Switzerland\", code: \"CH\", phone: \"41\" },\r\n { label: \"Syria\", code: \"SY\", phone: \"963\" },\r\n { label: \"Taiwan\", code: \"TW\", phone: \"886\" },\r\n { label: \"Tajikistan\", code: \"TJ\", phone: \"992\" },\r\n { label: \"Tanzania\", code: \"TZ\", phone: \"255\" },\r\n { label: \"Thailand\", code: \"TH\", phone: \"66\" },\r\n { label: \"The Bahamas\", code: \"BS\", phone: \"1\" },\r\n { label: \"The Gambia\", code: \"GM\", phone: \"220\" },\r\n { label: \"Timor-Leste\", code: \"TL\", phone: \"670\" },\r\n { label: \"Togo\", code: \"TG\", phone: \"228\" },\r\n { label: \"Tokelau\", code: \"TK\", phone: \"690\" },\r\n { label: \"Tonga\", code: \"TO\", phone: \"676\" },\r\n { label: \"Trinidad and Tobago\", code: \"TT\", phone: \"1\" },\r\n { label: \"Tunisia\", code: \"TN\", phone: \"216\" },\r\n { label: \"Turkey\", code: \"TR\", phone: \"90\" },\r\n { label: \"Turkmenistan\", code: \"TM\", phone: \"993\" },\r\n { label: \"Turks and Caicos Islands\", code: \"TC\", phone: \"1\" },\r\n { label: \"Tuvalu\", code: \"TV\", phone: \"688\" },\r\n { label: \"Uganda\", code: \"UG\", phone: \"256\" },\r\n { label: \"Ukraine\", code: \"UA\", phone: \"380\" },\r\n { label: \"United Arab Emirates\", code: \"AE\", phone: \"971\" },\r\n { label: \"United Kingdom\", code: \"GB\", phone: \"44\" },\r\n { label: \"United States\", code: \"US\", phone: \"1\" },\r\n { label: \"United States Minor Outlying Islands\", code: \"UM\", phone: \"1\" },\r\n { label: \"Uruguay\", code: \"UY\", phone: \"598\" },\r\n { label: \"Uzbekistan\", code: \"UZ\", phone: \"998\" },\r\n { label: \"Vanuatu\", code: \"VU\", phone: \"678\" },\r\n { label: \"Vatican City State (Holy See)\", code: \"VA\", phone: \"379\" },\r\n { label: \"Venezuela\", code: \"VE\", phone: \"58\" },\r\n { label: \"Vietnam\", code: \"VN\", phone: \"84\" },\r\n { label: \"Virgin Islands (British)\", code: \"VG\", phone: \"1\" },\r\n { label: \"Virgin Islands (US)\", code: \"VI\", phone: \"1\" },\r\n { label: \"Wallis and Futuna Islands\", code: \"WF\", phone: \"681\" },\r\n { label: \"Western Sahara\", code: \"EH\", phone: \"212\" },\r\n { label: \"Yemen\", code: \"YE\", phone: \"967\" },\r\n { label: \"Zambia\", code: \"ZM\", phone: \"260\" },\r\n { label: \"Zimbabwe\", code: \"ZW\", phone: \"263\" },\r\n];\r\n","import React, { useState, useEffect, useRef } from \"react\";\r\nimport { countries } from \"../../../data/countries\";\r\nimport { ChevronDown, Search } from \"lucide-react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nexport default function PhoneInput({\r\n label = \"\",\r\n value = \"\",\r\n name = \"\",\r\n parentClass = \"\",\r\n onChange,\r\n disabled = false,\r\n required = false,\r\n placeholder = \"Phone number\",\r\n search = false,\r\n countriesList = false,\r\n defaultCountry = \"\",\r\n}) {\r\n const find_country_with_code = (value) => {\r\n return countries.find((obj) => obj.code == value);\r\n };\r\n\r\n const [selectedCountry, setSelectedCountry] = useState(\r\n find_country_with_code(defaultCountry) || countries[0],\r\n );\r\n const [fullNumber, setFullNumber] = useState(\"\");\r\n const [open, setOpen] = useState(false);\r\n const [searchTerm, setSearchTerm] = useState(\"\");\r\n const dropdownRef = useRef();\r\n\r\n // Match prefix when value starts with +code\r\n useEffect(() => {\r\n if (typeof value === \"string\" && value.startsWith(\"+\")) {\r\n const match = countries\r\n .filter((c) => value.startsWith(\"+\" + c.phone))\r\n .sort((a, b) => b.phone.length - a.phone.length)[0];\r\n if (match) {\r\n setSelectedCountry(match);\r\n setFullNumber(value.replace(\"+\" + match.phone, \"\"));\r\n return;\r\n }\r\n }\r\n setFullNumber(value);\r\n }, [value]);\r\n\r\n const handleNumberChange = (e) => {\r\n const input = e.target.value.replace(/\\D/g, \"\");\r\n setFullNumber(input);\r\n if (selectedCountry && onChange) {\r\n onChange(\"+\" + selectedCountry.phone + input);\r\n }\r\n };\r\n\r\n const handleCountrySelect = (country) => {\r\n setSelectedCountry(country);\r\n if (onChange) onChange(\"+\" + country.phone + fullNumber);\r\n setOpen(false);\r\n setSearchTerm(\"\");\r\n };\r\n\r\n // 🖱️ Close dropdown on outside click\r\n useEffect(() => {\r\n const handleClickOutside = (e) => {\r\n if (dropdownRef.current && !dropdownRef.current.contains(e.target))\r\n setOpen(false);\r\n };\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\r\n }, []);\r\n\r\n const filteredCountries = countries.filter(\r\n (c) =>\r\n c.label.toLowerCase().includes(searchTerm.toLowerCase()) ||\r\n c.phone.includes(searchTerm),\r\n );\r\n\r\n if (!countriesList) {\r\n const handleInputChange = (e) => {\r\n const input = e.target.value.replace(/[^+\\d]/g, \"\");\r\n const formatted = input.startsWith(\"+\")\r\n ? \"+\" + input.replace(/[+]/g, \"\").slice(0)\r\n : input;\r\n onChange(formatted);\r\n };\r\n\r\n return (\r\n <>\r\n <div key={name} className={parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n <input\r\n type=\"text\"\r\n value={value}\r\n onChange={handleInputChange}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n required={required}\r\n className=\"w-full h-10 px-3 text-sm border border-gray-300 dark:border-gray-600 rounded-md \r\n bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 focus:outline-none \r\n focus:ring-1 focus:ring-blue-300 dark:focus:ring-blue-200\"\r\n inputMode=\"tel\"\r\n pattern=\"^\\+\\d{1,15}$\"\r\n />\r\n </div>\r\n </>\r\n );\r\n }\r\n\r\n return (\r\n <>\r\n <div key={name} className={parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n <div className=\"relative \" ref={dropdownRef}>\r\n {/* Input container */}\r\n <div\r\n className={`h-[40px] flex items-center border rounded-md px-2 bg-white dark:bg-gray-700 transition-all\r\n ${\r\n open\r\n ? \"ring-0.5 ring-blue-100 border-blue-300\"\r\n : \"border-gray-300 dark:border-gray-600\"\r\n }\r\n ${disabled ? \"opacity-60 cursor-not-allowed\" : \"\"}`}\r\n >\r\n {/* Flag & dropdown */}\r\n <button\r\n type=\"button\"\r\n disabled={disabled}\r\n onClick={() => setOpen(!open)}\r\n className=\"flex items-center gap-1 pr-2 border-r border-gray-300 dark:border-gray-700 focus:outline-none\"\r\n >\r\n {selectedCountry ? (\r\n <img\r\n src={`https://flagcdn.com/w20/${selectedCountry.code.toLowerCase()}.png`}\r\n alt={selectedCountry.code}\r\n className=\"w-5 h-3 object-cover\"\r\n />\r\n ) : (\r\n <span className=\"text-gray-400 text-xs\">🌐</span>\r\n )}\r\n <ChevronDown className=\"w-3 h-3 text-gray-500\" />\r\n </button>\r\n\r\n {/* Country code */}\r\n {selectedCountry && (\r\n <span className=\"ml-2 text-sm text-gray-700 dark:text-gray-200 whitespace-nowrap\">\r\n +{selectedCountry.phone}\r\n </span>\r\n )}\r\n\r\n {/* Number input */}\r\n <input\r\n type=\"tel\"\r\n value={fullNumber}\r\n onChange={handleNumberChange}\r\n required={required}\r\n disabled={disabled || !selectedCountry}\r\n placeholder={!selectedCountry ? \"Select a country\" : placeholder}\r\n className=\"flex-1 ml-2 bg-transparent outline-none text-sm text-gray-800 dark:text-gray-100 placeholder-gray-400\"\r\n />\r\n\r\n {/* Hidden input for native browser validation */}\r\n <input\r\n type=\"tel\"\r\n required={required}\r\n tabIndex={-1}\r\n readOnly\r\n value={\r\n selectedCountry && fullNumber\r\n ? \"+\" + selectedCountry.phone + fullNumber\r\n : \"\"\r\n }\r\n style={{\r\n position: \"absolute\",\r\n opacity: 0,\r\n pointerEvents: \"none\",\r\n height: 0,\r\n }}\r\n />\r\n </div>\r\n\r\n {/* Dropdown */}\r\n {open && (\r\n <div className=\"absolute top-full left-0 w-full mt-1 border border-gray-300 dark:border-gray-700 rounded-md bg-white dark:bg-gray-700 shadow-lg z-50 max-h-60 overflow-y-auto\">\r\n {search && (\r\n <div className=\"p-2 border-b border-gray-200 dark:border-gray-700\">\r\n <div className=\"relative\">\r\n <Search className=\"absolute left-3 top-1/2 transform -translate-y-1/2 w-4 h-4 text-gray-400\" />\r\n <input\r\n type=\"text\"\r\n value={searchTerm}\r\n onChange={(e) => setSearchTerm(e.target.value)}\r\n placeholder=\"Search country...\"\r\n className=\"w-full pl-9 pr-3 py-2 text-sm border rounded-md bg-white dark:bg-gray-800 dark:text-white placeholder-gray-500 dark:placeholder-gray-400 focus:outline-none \"\r\n />\r\n </div>\r\n </div>\r\n )}\r\n\r\n {filteredCountries.map((c) => (\r\n <button\r\n key={c.code}\r\n type=\"button\"\r\n onClick={() => handleCountrySelect(c)}\r\n className=\"w-full flex items-center gap-2 px-2 py-1 text-sm hover:bg-blue-50 dark:hover:bg-gray-700 text-gray-800 dark:text-gray-100\"\r\n >\r\n <img\r\n src={`https://flagcdn.com/w20/${c.code.toLowerCase()}.png`}\r\n alt={c.code}\r\n className=\"w-5 h-3 object-cover\"\r\n />\r\n <span>\r\n {c.label} (+{c.phone})\r\n </span>\r\n </button>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </>\r\n );\r\n}\r\n","import React, { useState } from \"react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nconst TextArea = React.forwardRef(\r\n ({ className = \"\", label, required, ...props }, ref) => {\r\n const combinedClassName = `\r\n placeholder-gray-400 dark:placeholder-gray-400\r\n ${className}\r\n `.trim();\r\n\r\n return (\r\n <>\r\n <div key={props.name} className={props.parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n <div className=\"relative\">\r\n <textarea\r\n className={combinedClassName}\r\n ref={ref}\r\n required={required}\r\n {...props}\r\n />\r\n </div>\r\n </div>\r\n </>\r\n );\r\n },\r\n);\r\n\r\nTextArea.displayName = \"TextArea\";\r\n\r\nexport { TextArea };\r\n","import { Icon } from \"@iconify/react\";\r\nimport React, { useState, useEffect, useRef } from \"react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nconst ImagePicker = ({\r\n label = \"\",\r\n value = null,\r\n onChange,\r\n required = false,\r\n accept = \"image/*\",\r\n id,\r\n dragDrop = false,\r\n name = \"\",\r\n parentClass = \"\",\r\n}) => {\r\n const [image, setImage] = useState(value);\r\n const [isDragging, setIsDragging] = useState(false);\r\n const inputRef = useRef(null);\r\n\r\n useEffect(() => {\r\n setImage(value);\r\n }, [value]);\r\n\r\n const handleFileChange = (files) => {\r\n if (!files || files.length === 0) {\r\n setImage(null);\r\n onChange?.(null);\r\n return;\r\n }\r\n\r\n const file = files[0];\r\n const preview = URL.createObjectURL(file);\r\n const imgObj = { file, preview };\r\n\r\n setImage(imgObj);\r\n onChange?.(preview);\r\n };\r\n\r\n // Drag events\r\n const handleDragOver = (e) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(true);\r\n };\r\n\r\n const handleDragLeave = (e) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(false);\r\n };\r\n\r\n const handleDrop = (e) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(false);\r\n handleFileChange(e.dataTransfer.files);\r\n };\r\n\r\n return (\r\n <>\r\n <div key={name} className={parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n <div\r\n className={`relative rounded-md p-2 transition-all ${\r\n isDragging\r\n ? \"border border-dashed border-blue-500 bg-blue-50 dark:bg-blue-900\"\r\n : \"border bg-gray-50 dark:bg-gray-700\"\r\n }`}\r\n onDragOver={handleDragOver}\r\n onDragLeave={handleDragLeave}\r\n onDrop={handleDrop}\r\n >\r\n {/* Blur entire content when dragging */}\r\n <div\r\n className={`flex items-center space-x-3 transition-all ${\r\n isDragging ? \"filter blur-sm\" : \"\"\r\n }`}\r\n >\r\n {/* Left: preview clickable */}\r\n <div\r\n className=\"cursor-pointer\"\r\n onClick={() => inputRef.current.click()}\r\n >\r\n {image ? (\r\n <img\r\n src={image.preview || image}\r\n alt=\"preview\"\r\n className=\"object-cover w-20 h-20 rounded-full\"\r\n />\r\n ) : (\r\n <>\r\n <div className=\"rounded-full bg-gray-200 dark:bg-gray-800 h-20 w-20 flex items-center justify-center\">\r\n <Icon\r\n icon=\"ri:image-add-fill\"\r\n className=\"text-gray-400 w-10 h-10\"\r\n />\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n\r\n {/* Right: upload input */}\r\n <input\r\n ref={inputRef}\r\n id={id}\r\n type=\"file\"\r\n accept={accept}\r\n onChange={(e) => handleFileChange(e.target.files)}\r\n required={required && !image}\r\n className=\"inline-flex items-center justify-center p-2 text-gray-400 text-sm file:cursor-pointer\"\r\n />\r\n </div>\r\n\r\n {/* Overlay text */}\r\n {dragDrop && isDragging && (\r\n <div className=\"absolute inset-0 flex items-center justify-center pointer-events-none\">\r\n <span className=\"text-blue-500 font-semibold text-xl\">\r\n Drop here\r\n </span>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default ImagePicker;\r\n","import React, { useState } from \"react\";\r\nimport { Icon } from \"@iconify/react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nconst Input = React.forwardRef(\r\n (\r\n {\r\n label,\r\n required,\r\n parentClass = \"\",\r\n className = \"\",\r\n type = \"text\",\r\n onKeyDown,\r\n ...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\" && [\"e\", \"E\"].includes(e.key)) {\r\n e.preventDefault();\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 ${className}\r\n `.trim();\r\n\r\n return (\r\n <>\r\n <div key={props.name} className={parentClass || \"col-span-12\"}>\r\n <InputLabel label={label} required={required} />\r\n <div className=\"relative\">\r\n <input\r\n type={type === \"password\" && showPassword ? \"text\" : type}\r\n ref={ref}\r\n required={required}\r\n onKeyDown={handleKeyDown}\r\n className={combinedClassName}\r\n {...props}\r\n />\r\n\r\n {type === \"password\" && (\r\n <button\r\n type=\"button\"\r\n tabIndex={-1}\r\n onClick={() => setShowPassword((prev) => !prev)}\r\n className=\"absolute inset-y-0 right-3 flex items-center text-gray-400 hover:text-gray-600 dark:text-gray-400 dark:hover:text-gray-200\"\r\n >\r\n <Icon\r\n icon={\r\n showPassword ? \"mdi:eye-off-outline\" : \"mdi:eye-outline\"\r\n }\r\n className=\"w-5 h-5\"\r\n />\r\n </button>\r\n )}\r\n </div>\r\n </div>\r\n </>\r\n );\r\n },\r\n);\r\n\r\nInput.displayName = \"Input\";\r\n\r\nexport { Input };\r\n","import React from \"react\";\r\nimport { Editor } from \"@tinymce/tinymce-react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nconst TinyEditor = ({\r\n key,\r\n editorKey = \"\",\r\n value = \"\",\r\n onChange,\r\n label = \"\",\r\n required = false,\r\n placeholder = \"\",\r\n parentClass = \"col-span-12\",\r\n height = 400,\r\n inline = false,\r\n disabled = false,\r\n plugins,\r\n toolbar,\r\n menubar = false,\r\n fontFamily = \"Inter, sans-serif\",\r\n initConfig = {},\r\n imageUploadHandler, // ✅ Promise function passed from parent\r\n}) => {\r\n const defaultPlugins = [\r\n \"advlist\",\r\n \"autolink\",\r\n \"lists\",\r\n \"link\",\r\n \"image\",\r\n \"charmap\",\r\n \"preview\",\r\n \"anchor\",\r\n \"searchreplace\",\r\n \"visualblocks\",\r\n \"code\",\r\n \"fullscreen\",\r\n \"insertdatetime\",\r\n \"media\",\r\n \"table\",\r\n \"help\",\r\n \"wordcount\",\r\n ];\r\n\r\n const defaultToolbar =\r\n \"undo redo | blocks | bold italic underline forecolor backcolor | \" +\r\n \"alignleft aligncenter alignright alignjustify | \" +\r\n \"bullist numlist outdent indent | link image media table | \" +\r\n \"removeformat | code fullscreen preview\";\r\n\r\n // ✅ Handle Image Upload via Promise\r\n const handleImageUpload = (blobInfo) => {\r\n return new Promise((resolve, reject) => {\r\n if (!imageUploadHandler) {\r\n // fallback to base64 if no handler provided\r\n resolve(`data:${blobInfo.blob().type};base64,${blobInfo.base64()}`);\r\n return;\r\n }\r\n\r\n imageUploadHandler(blobInfo)\r\n .then((url) => {\r\n if (!url) {\r\n reject(\"Upload failed: No URL returned\");\r\n } else {\r\n resolve(url);\r\n }\r\n })\r\n .catch((error) => {\r\n reject(\r\n typeof error === \"string\"\r\n ? error\r\n : error?.message || \"Image upload failed\",\r\n );\r\n });\r\n });\r\n };\r\n\r\n return (\r\n <div key={key} className={parentClass}>\r\n {label && <InputLabel label={label} required={required} />}\r\n\r\n <Editor\r\n apiKey={editorKey}\r\n value={value}\r\n disabled={disabled}\r\n init={{\r\n height,\r\n inline,\r\n menubar,\r\n branding: false,\r\n statusbar: true,\r\n automatic_uploads: true,\r\n images_upload_handler: handleImageUpload,\r\n plugins: plugins ?? defaultPlugins,\r\n toolbar: toolbar ?? defaultToolbar,\r\n placeholder,\r\n content_style: `\r\n body {\r\n font-family: ${fontFamily};\r\n }\r\n `,\r\n ...initConfig,\r\n }}\r\n onEditorChange={(content) => {\r\n if (onChange) {\r\n onChange(content);\r\n }\r\n }}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nexport default TinyEditor;\r\n","import React from \"react\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\nconst Checkbox = ({\r\n name = \"\",\r\n label = \"\", // label for single checkbox\r\n options = [], // array of { label, value } for multiple\r\n value = null, // boolean for single, array for multiple, or string for single select\r\n onChange,\r\n disabled = false,\r\n required = false,\r\n parentClass = \"col-span-12\",\r\n className = \"\",\r\n multiSelect = false, // ✅ if true, only one option can be selected (like radio)\r\n}) => {\r\n // Detect if multiple options are present\r\n const multiple = Array.isArray(options) && options.length > 0;\r\n\r\n // Check if a value is selected\r\n const isChecked = (optionValue) => {\r\n if (multiple) {\r\n if (!multiSelect) return value === optionValue;\r\n return Array.isArray(value) && value.includes(optionValue);\r\n }\r\n return Boolean(value);\r\n };\r\n\r\n // Handle change for single checkbox\r\n const handleSingleChange = (e) => {\r\n onChange?.(e.target.checked, name);\r\n };\r\n\r\n // Handle change for multiple checkboxes\r\n const handleMultipleChange = (optionValue, checked) => {\r\n if (!onChange) return;\r\n\r\n if (!multiSelect) {\r\n if (checked) {\r\n onChange(optionValue, name);\r\n } else {\r\n onChange(\"\", name);\r\n }\r\n // Only allow one selected\r\n } else {\r\n const newValue = Array.isArray(value) ? [...value] : [];\r\n if (checked) {\r\n if (!newValue.includes(optionValue)) newValue.push(optionValue);\r\n } else {\r\n const index = newValue.indexOf(optionValue);\r\n if (index > -1) newValue.splice(index, 1);\r\n }\r\n onChange(newValue, name);\r\n }\r\n };\r\n\r\n // ---------------- JSX ----------------\r\n if (multiple) {\r\n // Multiple options\r\n return (\r\n <>\r\n <div className={`${parentClass}`}>\r\n <InputLabel label={label} required={required} />\r\n <div className={`flex flex-col space-y-2`}>\r\n {options.map((opt, idx) => (\r\n <div key={opt.value || opt.label} className=\"flex items-center\">\r\n <input\r\n type=\"checkbox\"\r\n name={name}\r\n value={opt.value}\r\n checked={isChecked(opt.value)}\r\n disabled={disabled || opt.disabled}\r\n required={required && idx === 0}\r\n onChange={(e) =>\r\n handleMultipleChange(opt.value, e.target.checked)\r\n }\r\n key={name}\r\n className={`h-4 w-4 cursor-pointer text-blue-600 border-gray-300 rounded focus:ring-2 focus:ring-blue-500 dark:focus:ring-blue-400 ${className}`}\r\n />\r\n {opt.label && (\r\n <label\r\n htmlFor={name}\r\n className=\"ml-2 text-sm text-gray-700 dark:text-gray-200 select-none\"\r\n >\r\n {opt.label}\r\n </label>\r\n )}\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </>\r\n );\r\n }\r\n\r\n // Single checkbox\r\n return (\r\n <div className={`flex items-center ${parentClass}`}>\r\n <input\r\n type=\"checkbox\"\r\n name={name}\r\n checked={isChecked()}\r\n disabled={disabled}\r\n required={required}\r\n onChange={handleSingleChange}\r\n className={`h-4 w-4 text-blue-600 cursor-pointer border-gray-300 rounded focus:ring-2 focus:ring-blue-500 dark:focus:ring-blue-400 ${className}`}\r\n />\r\n {label && (\r\n <label\r\n htmlFor={name}\r\n className=\"ml-2 text-sm text-gray-700 dark:text-gray-200 select-none\"\r\n >\r\n {label}\r\n </label>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default Checkbox;\r\n","import React from \"react\";\r\nimport Select from \"./Select\";\r\nimport Switch from \"./Switch\";\r\nimport PhoneInput from \"./PhoneInput\";\r\nimport { TextArea } from \"./TextArea\";\r\nimport ImagePicker from \"./ImagePicker\";\r\nimport { Input } from \"./Input\";\r\nimport TinyEditor from \"./TinyEditor\";\r\nimport Checkbox from \"./Checkbox\";\r\n\r\nconst RenderFields = ({ field, formData, handleChange }) => {\r\n const {\r\n key,\r\n label,\r\n type,\r\n options,\r\n placeholder,\r\n rows,\r\n inputClass,\r\n search,\r\n accept,\r\n text,\r\n required = false,\r\n minLength,\r\n dragDrop,\r\n parentClass,\r\n countriesList,\r\n defaultCountry,\r\n multiple,\r\n dropdownMaxHeight,\r\n editorKey,\r\n fontFamily,\r\n disabled,\r\n } = field;\r\n\r\n let value = formData?.[key];\r\n if (value === undefined || value === null) {\r\n value = \"\";\r\n }\r\n\r\n const finalPlaceholder =\r\n placeholder || (type === \"select\" ? `Select ${label}` : `Enter ${label}`);\r\n\r\n const baseClass =\r\n \"w-full px-3 py-2 rounded-md border border-gray-300 dark:border-gray-600 text-sm focus:outline-none focus:ring-1 focus:ring-blue-200 bg-white text-black dark:bg-gray-700 dark:text-white\";\r\n\r\n switch (type) {\r\n case \"select\":\r\n return (\r\n <Select\r\n options={options || []}\r\n value={value}\r\n onChange={(val) => handleChange(key, val)}\r\n placeholder={finalPlaceholder}\r\n className={inputClass || \"\"}\r\n search={search}\r\n required={required}\r\n label={label}\r\n name={key}\r\n disabled={disabled}\r\n parentClass={parentClass}\r\n multiple={multiple}\r\n dropdownMaxHeight={dropdownMaxHeight}\r\n />\r\n );\r\n\r\n case \"checkbox\":\r\n return (\r\n <Checkbox\r\n name={key}\r\n label={label}\r\n options={options || []}\r\n value={value}\r\n onChange={(val) => handleChange(key, val)}\r\n required={required}\r\n parentClass={parentClass}\r\n className={inputClass || \"\"}\r\n multiSelect={multiple}\r\n disabled={disabled}\r\n />\r\n );\r\n\r\n case \"switch\":\r\n return (\r\n <Switch\r\n value={value}\r\n onChange={(val) => handleChange(key, val)}\r\n text={text}\r\n options={options || []}\r\n label={label}\r\n required={required}\r\n name={key}\r\n disabled={disabled}\r\n parentClass={parentClass}\r\n />\r\n );\r\n\r\n case \"phone\":\r\n return (\r\n <PhoneInput\r\n value={value}\r\n onChange={(val) => handleChange(key, val)}\r\n countriesList={countriesList}\r\n defaultCountry={defaultCountry}\r\n required={required}\r\n placeholder={finalPlaceholder}\r\n search={search}\r\n label={label}\r\n name={key}\r\n disabled={disabled}\r\n parentClass={parentClass}\r\n />\r\n );\r\n\r\n case \"textarea\":\r\n return (\r\n <TextArea\r\n value={value}\r\n onChange={(e) => handleChange(key, e.target.value)}\r\n placeholder={finalPlaceholder}\r\n rows={rows || 3}\r\n className={`${baseClass} ${inputClass || \"\"}`}\r\n required={required}\r\n name={key}\r\n label={label}\r\n disabled={disabled}\r\n parentClass={parentClass}\r\n />\r\n );\r\n\r\n case \"image\":\r\n return (\r\n <ImagePicker\r\n value={value}\r\n onChange={(imgObj) => handleChange(key, imgObj)}\r\n required={required}\r\n accept={accept || \"image/*\"}\r\n id={`file-${key}`}\r\n dragDrop={dragDrop}\r\n label={label}\r\n name={key}\r\n parentClass={parentClass}\r\n />\r\n );\r\n\r\n case \"tinyEditor\":\r\n return (\r\n <TinyEditor\r\n value={value}\r\n onChange={(newValue) => handleChange(key, newValue)}\r\n required={required}\r\n key={`editor-${key}`}\r\n placeholder={finalPlaceholder}\r\n label={label}\r\n parentClass={parentClass}\r\n fontFamily={fontFamily}\r\n editorKey={editorKey}\r\n disabled={disabled}\r\n />\r\n );\r\n\r\n default:\r\n return (\r\n <Input\r\n type={type || \"text\"}\r\n value={value}\r\n onChange={(e) => handleChange(key, e.target.value)}\r\n placeholder={finalPlaceholder}\r\n className={`${baseClass} ${inputClass || \"\"}`}\r\n required={required}\r\n name={key}\r\n minLength={minLength}\r\n label={label}\r\n parentClass={parentClass}\r\n disabled={disabled}\r\n />\r\n );\r\n }\r\n};\r\n\r\nexport default RenderFields;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { X } from \"lucide-react\";\r\nimport Button from \"../Button/Button\";\r\nimport RenderFields from \"../Form/components/RenderFields\";\r\n\r\nconst FilterDrawer = ({ isOpen, onClose, config, onApply }) => {\r\n const [filters, setFilters] = useState({});\r\n\r\n const handleChange = (key, value) => {\r\n setFilters((prev) => ({ ...prev, [key]: value }));\r\n };\r\n\r\n const handleApply = () => {\r\n onApply?.(filters);\r\n onClose();\r\n };\r\n\r\n const handleReset = () => {\r\n setFilters({});\r\n onApply?.({});\r\n onClose();\r\n };\r\n\r\n return (\r\n <>\r\n {/* Overlay */}\r\n <div\r\n className={`fixed inset-0 bg-black/50 z-40 transition-opacity duration-300 ${\r\n isOpen\r\n ? \"opacity-100 pointer-events-auto\"\r\n : \"opacity-0 pointer-events-none\"\r\n }`}\r\n onClick={onClose}\r\n />\r\n\r\n {/* Drawer */}\r\n <div\r\n className={`fixed top-0 right-0 h-full w-[28rem] bg-white dark:bg-gray-900 shadow-2xl z-50 flex flex-col border-l border-gray-200 dark:border-gray-700\r\n transform transition-transform duration-300 ease-in-out\r\n ${isOpen ? \"translate-x-0\" : \"translate-x-full\"}\r\n `}\r\n >\r\n {/* Header */}\r\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-gray-200 dark:border-gray-700\">\r\n <h2 className=\"text-lg font-semibold text-gray-900 dark:text-white\">\r\n Filters\r\n </h2>\r\n <button\r\n onClick={onClose}\r\n className=\"p-2 hover:bg-gray-100 dark:hover:bg-gray-800 rounded-md transition\"\r\n >\r\n <X className=\"w-5 h-5 text-gray-500 dark:text-gray-400\" />\r\n </button>\r\n </div>\r\n\r\n {/* Content */}\r\n <div className=\"flex-1 overflow-y-auto px-4 py-3\">\r\n {config?.component ? (\r\n <config.component filters={filters} onFilterChange={handleChange} />\r\n ) : (\r\n <div className=\"space-y-4\">\r\n {config?.fields?.map((field) => (\r\n <>\r\n <RenderFields\r\n key={field.key}\r\n field={field}\r\n formData={filters}\r\n handleChange={handleChange}\r\n />\r\n </>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Footer */}\r\n <div className=\"flex gap-2 px-4 py-3 border-t border-gray-200 dark:border-gray-700\">\r\n <Button\r\n onClick={handleApply}\r\n variant=\"contained\"\r\n color=\"primary\"\r\n fullWidth\r\n >\r\n Apply Filters\r\n </Button>\r\n <Button\r\n onClick={handleReset}\r\n variant=\"contained\"\r\n className=\"min-w-[150px]\"\r\n >\r\n Reset\r\n </Button>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default FilterDrawer;\r\n","import React from \"react\";\r\n\r\nconst BADGE_COLORS = {\r\n blue: {\r\n bg: \"bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-300\",\r\n border:\r\n \"border border-blue-300 text-blue-700 dark:border-blue-700 dark:text-blue-300\",\r\n },\r\n teal: {\r\n bg: \"bg-teal-100 text-teal-800 dark:bg-teal-900/30 dark:text-teal-300\",\r\n border:\r\n \"border border-teal-300 text-teal-700 dark:border-teal-700 dark:text-teal-300\",\r\n },\r\n purple: {\r\n bg: \"bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300\",\r\n border:\r\n \"border border-purple-300 text-purple-700 dark:border-purple-700 dark:text-purple-300\",\r\n },\r\n yellow: {\r\n bg: \"bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-300\",\r\n border:\r\n \"border border-yellow-300 text-yellow-700 dark:border-yellow-700 dark:text-yellow-300\",\r\n },\r\n green: {\r\n bg: \"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300\",\r\n border:\r\n \"border border-green-300 text-green-700 dark:border-green-700 dark:text-green-300\",\r\n },\r\n red: {\r\n bg: \"bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-300\",\r\n border:\r\n \"border border-red-300 text-red-700 dark:border-red-700 dark:text-red-300\",\r\n },\r\n gray: {\r\n bg: \"bg-gray-100 text-gray-800 dark:bg-gray-900/30 dark:text-gray-300\",\r\n border:\r\n \"border border-gray-300 text-gray-700 dark:border-gray-700 dark:text-gray-300\",\r\n },\r\n};\r\n\r\nconst BADGE_VARIANTS = {\r\n contained: \"bg\",\r\n outline: \"border !bg-transparent\",\r\n soft: \"bg opacity-90\",\r\n};\r\n\r\nconst Chip = ({\r\n label,\r\n variant = \"contained\", // contained | outline | soft\r\n color = \"green\",\r\n className = \"\",\r\n}) => {\r\n const colorConfig = BADGE_COLORS[color] || BADGE_COLORS.green;\r\n const variantKey = BADGE_VARIANTS[variant] || BADGE_VARIANTS.contained;\r\n\r\n const variantClasses =\r\n variant === \"outline\" ? colorConfig.border : colorConfig.bg;\r\n\r\n return (\r\n <span\r\n className={`inline-flex justify-center items-center rounded-sm text-xs font-semibold px-3 py-1 min-w-[78px]\r\n ${variantClasses}\r\n ${variantKey}\r\n ${className}`}\r\n >\r\n {label}\r\n </span>\r\n );\r\n};\r\n\r\nexport default Chip;\r\n","const TableSkeleton = ({ rows = 5, columns = 5 }) => {\r\n return (\r\n <>\r\n <div className=\"w-full mb-6 inline-flex justify-end items-center\">\r\n <div className=\"h-8 w-80 bg-gray-300 dark:bg-gray-700 rounded animate-pulse\" />\r\n </div>\r\n <div className=\"overflow-hidden rounded-md border border-gray-200 dark:border-gray-800\">\r\n <table className=\"w-full border-collapse\">\r\n <thead>\r\n <tr className=\"bg-gray-50 dark:bg-gray-900\">\r\n {Array.from({ length: columns }).map((_, i) => (\r\n <th key={i} className=\"px-4 py-3\">\r\n <div className=\"h-6 w-24 bg-gray-300 dark:bg-gray-700 rounded animate-pulse inline-flex justify-center items-center\" />\r\n </th>\r\n ))}\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n {Array.from({ length: rows }).map((_, rowIndex) => (\r\n <tr\r\n key={rowIndex}\r\n className=\"border-t border-gray-200 dark:border-gray-800\"\r\n >\r\n {Array.from({ length: columns }).map((_, colIndex) => (\r\n <td key={colIndex} className=\"px-4 py-6\">\r\n <div className=\"h-6 w-full bg-gray-300 dark:bg-gray-700 rounded animate-pulse\" />\r\n </td>\r\n ))}\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default TableSkeleton;\r\n","import { useEffect } from \"react\";\r\nimport { X } from \"lucide-react\";\r\n\r\nconst ImagePreview = ({ src, alt = \"preview\", isOpen, setIsOpen }) => {\r\n const closePreview = () => setIsOpen(false);\r\n\r\n // Handle ESC key + prevent body scroll\r\n useEffect(() => {\r\n const handleEsc = (e) => {\r\n if (e.key === \"Escape\") closePreview();\r\n };\r\n\r\n if (isOpen) {\r\n document.body.style.overflow = \"hidden\";\r\n document.addEventListener(\"keydown\", handleEsc);\r\n }\r\n\r\n return () => {\r\n document.body.style.overflow = \"\";\r\n document.removeEventListener(\"keydown\", handleEsc);\r\n };\r\n }, [isOpen]);\r\n\r\n return (\r\n <>\r\n {/* Fullscreen Preview */}\r\n <div\r\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/70 dark:bg-black/80 \r\n backdrop-blur-sm animate-in fade-in duration-200\"\r\n onClick={closePreview}\r\n >\r\n {/* Close Button */}\r\n <button\r\n onClick={closePreview}\r\n className=\"absolute top-4 right-4 bg-white dark:bg-gray-800 text-gray-800 dark:text-gray-200\r\n hover:bg-gray-100 dark:hover:bg-gray-700 rounded-full p-2 shadow-lg transition\"\r\n >\r\n <X size={20} />\r\n </button>\r\n\r\n {/* Image Container */}\r\n <div\r\n className=\"max-w-5xl w-full px-4 transform transition-all duration-200 scale-95 animate-in zoom-in-95\"\r\n onClick={(e) => e.stopPropagation()}\r\n >\r\n {/* Large Image */}\r\n <img\r\n src={src}\r\n alt={alt}\r\n className=\"w-full max-h-[90vh] object-contain rounded-xl\"\r\n />\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default ImagePreview;\r\n","import React, { useState, useMemo, useRef, useEffect } from \"react\";\r\nimport {\r\n ChevronLeft,\r\n ChevronRight,\r\n Search,\r\n EllipsisVertical,\r\n Filter,\r\n User,\r\n} from \"lucide-react\";\r\nimport { createPortal } from \"react-dom\";\r\nimport { formatDate, searchLocalData } from \"../../lib/utils\";\r\nimport Button from \"../Button/Button\";\r\nimport FilterDrawer from \"../Filter/FilterDrawer\";\r\nimport Chip from \"../Chip/Chip\";\r\nimport TableSkeleton from \"./components/TableSkeleton\";\r\nimport ImagePreview from \"./components/ImagePreview\";\r\n\r\nconst Table = ({ config }) => {\r\n const {\r\n data = [],\r\n table_head = [],\r\n loading = false,\r\n search = {\r\n enabled: false,\r\n placeholder: \"Search...\",\r\n useServerSideSearch: false,\r\n },\r\n filter = {\r\n enabled: false,\r\n useServerSideFilters: false,\r\n },\r\n pagination = {\r\n enabled: false,\r\n rows_per_page: 10,\r\n useServerSidePagination: false,\r\n },\r\n emptyMessage = \"No data available\",\r\n onMenuAction,\r\n setServerSidePaginationData = () => {},\r\n onFilterApply,\r\n filterConfig = null,\r\n } = config;\r\n\r\n const [searchTerm, setSearchTerm] = useState(\"\");\r\n const [activeMenu, setActiveMenu] = useState(null);\r\n const [menuList, setMenuList] = useState([]);\r\n const [menuPosition, setMenuPosition] = useState({});\r\n const [showFilters, setShowFilters] = useState(false);\r\n\r\n // image preview\r\n const [targetImage, setTargetImage] = useState(null);\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const filteredData = useMemo(() => {\r\n if (!search.enabled || !searchTerm.trim()) return data;\r\n if (search.useServerSideSearch) return data;\r\n return searchLocalData(data, searchTerm, search.searchKeys || []);\r\n }, [data, searchTerm, search]);\r\n\r\n const [currentPage, setCurrentPage] = useState(1);\r\n const [pageSize, setPageSize] = useState(pagination?.rows_per_page || 50);\r\n const [totalRecords, setTotalRecords] = useState(filteredData.length || 0);\r\n\r\n const totalPages = pagination?.useServerSidePagination\r\n ? pagination.total_pages\r\n : Math.ceil(filteredData.length / pageSize);\r\n\r\n const paginatedData = useMemo(() => {\r\n if (pagination.useServerSidePagination) return filteredData;\r\n const start = (currentPage - 1) * pageSize;\r\n return filteredData.slice(start, start + pageSize);\r\n }, [filteredData, currentPage, pageSize]);\r\n\r\n const menuRef = useRef(null);\r\n const buttonRefs = useRef({});\r\n const searchTimeoutRef = useRef(null);\r\n\r\n const handleSearchChange = (value) => {\r\n setSearchTerm(value);\r\n setCurrentPage(1);\r\n\r\n if (search.useServerSideSearch) {\r\n if (searchTimeoutRef.current) clearTimeout(searchTimeoutRef.current);\r\n\r\n searchTimeoutRef.current = setTimeout(async () => {\r\n try {\r\n await setServerSidePaginationData((prev) => ({\r\n ...prev,\r\n search: value,\r\n current_page: 1,\r\n }));\r\n } catch (error) {\r\n console.error(\"Search error:\", error);\r\n }\r\n }, 800);\r\n }\r\n };\r\n\r\n const handleActionClick = (action, item, e) => {\r\n e.stopPropagation();\r\n setActiveMenu(null);\r\n onMenuAction?.(action.type, item);\r\n };\r\n\r\n const handleMenuToggle = (itemId, e, menu_list) => {\r\n e.stopPropagation();\r\n setMenuList(menu_list);\r\n const button = e.currentTarget;\r\n buttonRefs.current[itemId] = button;\r\n const rect = button.getBoundingClientRect();\r\n const menuWidth = 192;\r\n const menuHeight = menu_list.length * 40;\r\n const viewportWidth = window.innerWidth;\r\n const viewportHeight = window.innerHeight;\r\n\r\n const openLeft = viewportWidth - rect.right < menuWidth;\r\n const left = openLeft ? rect.left - menuWidth + rect.width : rect.left;\r\n\r\n const openUp =\r\n viewportHeight - rect.bottom < menuHeight && rect.top > menuHeight;\r\n const top = openUp ? rect.top - menuHeight - 2 : rect.bottom + 2;\r\n\r\n setMenuPosition({\r\n top: Math.max(8, Math.min(top, viewportHeight - menuHeight - 8)),\r\n left: Math.max(8, Math.min(left, viewportWidth - menuWidth - 8)),\r\n });\r\n\r\n setActiveMenu(activeMenu === itemId ? null : itemId);\r\n };\r\n\r\n const calculateRowNumber = (index) => {\r\n return (currentPage - 1) * pageSize + index + 1;\r\n };\r\n\r\n const openPreview = (image) => {\r\n setTargetImage(image);\r\n setIsOpen(true);\r\n };\r\n\r\n const renderAvatar = (\r\n imageSrc,\r\n imageAlt,\r\n className,\r\n fallback_icon = null,\r\n ) => {\r\n return (\r\n <>\r\n {imageSrc ? (\r\n <img\r\n src={imageSrc}\r\n alt={imageAlt || \"Avatar\"}\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n openPreview({ src: imageSrc, alt: imageAlt });\r\n }}\r\n className={`w-10 h-10 cursor-pointer rounded-full object-cover border border-gray-200 dark:border-gray-700 ${className || \"\"}`}\r\n />\r\n ) : (\r\n <>\r\n {fallback_icon ? (\r\n fallback_icon\r\n ) : (\r\n <div\r\n className={`w-10 h-10 flex items-center justify-center rounded-full border border-gray-300 dark:border-gray-700 bg-gray-200 dark:bg-gray-600 ${className || \"\"}`}\r\n >\r\n <User className=\"w-6 h-6 text-gray-400 dark:text-gray-400\" />\r\n </div>\r\n )}\r\n </>\r\n )}\r\n </>\r\n );\r\n };\r\n\r\n const renderGroupCell = (row, col) => {\r\n return (\r\n <div className={`flex items-center space-x-4 ${col.className || \"\"}`}>\r\n {col.imageKey\r\n ? renderAvatar(row[col.imageKey], row[col.titleKey], \"group-avatar\")\r\n : \"\"}\r\n <div>\r\n <p className=\"font-medium text-gray-900 dark:text-white group-title\">\r\n {row[col.titleKey] || \"\"}\r\n </p>\r\n <p className=\"text-sm text-gray-500 dark:text-gray-400 group-sub-title\">\r\n {row[col.subtitleKey] || \"\"}\r\n </p>\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n const handleRenderChip = (value, col) => {\r\n let label = String(value);\r\n const variant = col.variant || \"contained\";\r\n let color = col.defaultColor;\r\n\r\n if (col?.chipOptions?.length > 0) {\r\n let chipObj = col?.chipOptions.find((obj) => obj.value == value);\r\n if (chipObj) {\r\n label = chipObj.label;\r\n color = chipObj.color;\r\n }\r\n }\r\n\r\n return (\r\n <Chip\r\n label={label}\r\n variant={variant}\r\n color={color}\r\n className={col.className || \"\"}\r\n />\r\n );\r\n };\r\n\r\n const handleRenderCellValue = (col, row, index) => {\r\n const value = row[col.key];\r\n if (col.type === \"menu_actions\") {\r\n return (\r\n <div className={`text-center ${col.className || \"\"}`}>\r\n <button\r\n ref={(el) => (buttonRefs.current[row.id] = el)}\r\n onClick={(e) => handleMenuToggle(row.id, e, col.menuList)}\r\n className=\"p-2 bg-gray-100 dark:bg-gray-700 hover:bg-gray-200 dark:hover:bg-gray-600 rounded-full transition text-gray-700 dark:text-gray-300\"\r\n >\r\n <EllipsisVertical className=\"h-4 w-4\" />\r\n </button>\r\n </div>\r\n );\r\n } else if (col.type === \"index\") {\r\n return (\r\n <span className={col.className || \"\"}>{calculateRowNumber(index)}</span>\r\n );\r\n } else if (col.type === \"group\") {\r\n return renderGroupCell(row, col);\r\n } else if (col.type === \"chip\") {\r\n return <>{handleRenderChip(value, col)}</>;\r\n } else if (col.type === \"date\") {\r\n return (\r\n <span className={col.className || \"\"}>\r\n {formatDate(value, col.format || \"DD MMM YYYY\")}\r\n </span>\r\n );\r\n } else if (col.type === \"avatar\") {\r\n return (\r\n <>{renderAvatar(value, col.alt, col.className, col.fallback_icon)}</>\r\n );\r\n } else {\r\n return <span className={col.className || \"\"}>{value || \"N/A\"}</span>;\r\n }\r\n };\r\n\r\n // handle CLick on cell\r\n\r\n const handleColumnClick = (col, row) => {\r\n if (col.onClickDetails) {\r\n return onMenuAction?.(\"view\", row);\r\n }\r\n\r\n if (typeof col.handleClick === \"function\") {\r\n return col.handleClick(row);\r\n }\r\n };\r\n\r\n // Helper to check if column is clickable\r\n const isColumnClickable = (col) =>\r\n col.onClickDetails || typeof col.handleClick === \"function\";\r\n\r\n // Close menu on scroll -------------------\r\n useEffect(() => {\r\n const handleScroll = () => {\r\n if (activeMenu) setActiveMenu(null);\r\n };\r\n\r\n window.addEventListener(\"scroll\", handleScroll, true);\r\n return () => {\r\n window.removeEventListener(\"scroll\", handleScroll, true);\r\n };\r\n }, [activeMenu]);\r\n\r\n useEffect(() => {\r\n const handleClickOutside = (e) => {\r\n if (menuRef.current && !menuRef.current.contains(e.target)) {\r\n setActiveMenu(null);\r\n }\r\n };\r\n document.addEventListener(\"click\", handleClickOutside);\r\n return () => document.removeEventListener(\"click\", handleClickOutside);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (pagination?.rows_per_page && pagination?.useServerSidePagination) {\r\n setPageSize(pagination?.rows_per_page || 50);\r\n }\r\n\r\n if (pagination.current_page) {\r\n setCurrentPage(pagination.current_page);\r\n }\r\n }, [\r\n pagination.rows_per_page,\r\n pagination?.useServerSidePagination,\r\n pagination.current_page,\r\n ]);\r\n\r\n useEffect(() => {\r\n setTotalRecords(\r\n pagination?.useServerSidePagination\r\n ? pagination.total_records\r\n : filteredData.length,\r\n );\r\n\r\n if (\r\n filteredData.length <= pageSize * (currentPage - 1) &&\r\n !pagination?.useServerSidePagination\r\n ) {\r\n setCurrentPage((prev) => prev - 1 || 1);\r\n }\r\n }, [\r\n filteredData.length,\r\n pagination.total_records,\r\n pagination?.useServerSidePagination,\r\n ]);\r\n\r\n if (loading) return <TableSkeleton rows={6} columns={6} />;\r\n\r\n return (\r\n <>\r\n {/* Search Bar */}\r\n <div className=\"flex justify-end items-center mb-6 gap-2\">\r\n {search.enabled && (\r\n <div className=\"\">\r\n <div className=\"relative min-w-[300px]\">\r\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400 dark:text-gray-300\" />\r\n <input\r\n type=\"text\"\r\n placeholder={search.placeholder || \"Search...\"}\r\n value={searchTerm}\r\n onChange={(e) => handleSearchChange(e.target.value)}\r\n className=\"w-full h-[36px] pl-9 pr-4 py-3 text-sm border border-gray-300 dark:border-gray-600 rounded-md bg-gray-50 dark:bg-gray-700 text-gray-900 dark:text-white placeholder-gray-500 dark:placeholder-gray-400 focus:outline-none focus:ring-1 focus:ring-blue-300 dark:ring-blue-200 disabled:opacity-50\"\r\n />\r\n </div>\r\n </div>\r\n )}\r\n\r\n {filterConfig && filter.enabled && (\r\n <Button onClick={() => setShowFilters(true)} variant=\"contained\">\r\n <Filter className=\"w-4 h-4 mr-2\" />\r\n Filters\r\n </Button>\r\n )}\r\n </div>\r\n\r\n {/* =========================== Table =========================== */}\r\n <div className=\"bg-white dark:bg-gray-800 rounded-lg shadow overflow-hidden border border-gray-200 dark:border-gray-700\">\r\n <div className=\"overflow-x-auto\">\r\n <table className=\"min-w-full divide-y divide-gray-200 dark:divide-gray-700\">\r\n <thead className=\"bg-gray-50 dark:bg-gray-700/60\">\r\n <tr>\r\n {table_head.map((col) => (\r\n <th\r\n key={col.key}\r\n className=\"px-6 py-4 text-left text-xs font-medium text-black dark:text-white uppercase tracking-wider min-w-max max-w-[180px] truncate\"\r\n >\r\n {col.title}\r\n </th>\r\n ))}\r\n </tr>\r\n </thead>\r\n\r\n <tbody className=\"bg-white dark:bg-gray-800 divide-y divide-gray-200 dark:divide-gray-700\">\r\n {paginatedData.length === 0 ? (\r\n <tr>\r\n <td\r\n colSpan={table_head.length}\r\n className=\"text-center py-10 text-gray-500 dark:text-gray-400\"\r\n >\r\n {emptyMessage}\r\n </td>\r\n </tr>\r\n ) : (\r\n paginatedData.map((row, index) => (\r\n <tr\r\n key={row.id || index}\r\n className=\"hover:bg-gray-50 dark:hover:bg-blue-800/10 transition\"\r\n >\r\n {table_head.map((col) => (\r\n <td\r\n key={col.key}\r\n className={`px-6 py-4 text-sm text-gray-900 dark:text-gray-100 min-w-max max-w-[300px] truncate ${\r\n isColumnClickable(col) ? \"cursor-pointer\" : \"\"\r\n }`}\r\n title={String(row[col.key] ?? \"\")}\r\n onClick={() => handleColumnClick(col, row)}\r\n >\r\n {col.render\r\n ? col.render(row, index)\r\n : handleRenderCellValue(col, row, index)}\r\n </td>\r\n ))}\r\n </tr>\r\n ))\r\n )}\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n {pagination?.enabled && filteredData.length > 0 && (\r\n <div className=\" bg-gray-50 dark:bg-gray-700/60 px-6 py-3 flex flex-wrap items-center justify-between border-t border-gray-200 dark:border-gray-600 gap-3\">\r\n <div className=\"text-sm text-gray-700 dark:text-gray-300\">\r\n Showing {(currentPage - 1) * pageSize + 1} to{\" \"}\r\n {Math.min(currentPage * pageSize, totalRecords)} of {totalRecords}{\" \"}\r\n results\r\n </div>\r\n\r\n <div className=\"flex items-center gap-4\">\r\n {/* Rows per page selector */}\r\n <div className=\"flex items-center gap-2\">\r\n <span className=\"text-sm text-gray-700 dark:text-gray-300\">\r\n Rows per page:\r\n </span>\r\n <select\r\n value={pageSize}\r\n onChange={(e) => {\r\n const newLimit = Number(e.target.value);\r\n setPageSize(newLimit);\r\n setCurrentPage(1);\r\n if (pagination.useServerSidePagination) {\r\n setServerSidePaginationData((prev) => ({\r\n ...prev,\r\n current_page: 1,\r\n rows_per_page: newLimit,\r\n }));\r\n }\r\n }}\r\n className=\"border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800 text-sm rounded-md px-2 py-1 focus:outline-none focus:ring-1 focus:ring-blue-500\"\r\n >\r\n {[2, 10, 25, 50, 100].map((n) => (\r\n <option key={n} value={n}>\r\n {n}\r\n </option>\r\n ))}\r\n </select>\r\n </div>\r\n\r\n {/* ============= Pagination ============= */}\r\n <div className=\"flex items-center gap-2\">\r\n <button\r\n onClick={() => {\r\n if (currentPage > 1) {\r\n const newPage = currentPage - 1;\r\n setCurrentPage(newPage);\r\n if (pagination.useServerSidePagination) {\r\n setServerSidePaginationData((prev) => ({\r\n ...prev,\r\n current_page: newPage,\r\n }));\r\n }\r\n }\r\n }}\r\n disabled={currentPage === 1}\r\n className=\"p-2 hover:bg-gray-200 dark:hover:bg-gray-600 rounded-md transition text-gray-500 dark:text-gray-300 disabled:opacity-50\"\r\n >\r\n <ChevronLeft className=\"h-4 w-4\" />\r\n </button>\r\n\r\n <span className=\"text-sm text-gray-800 dark:text-gray-200\">\r\n Page {currentPage} of {totalPages}\r\n </span>\r\n\r\n <button\r\n onClick={() => {\r\n if (currentPage < totalPages) {\r\n const newPage = currentPage + 1;\r\n setCurrentPage(newPage);\r\n if (pagination.useServerSidePagination) {\r\n setServerSidePaginationData((prev) => ({\r\n ...prev,\r\n current_page: newPage,\r\n }));\r\n }\r\n }\r\n }}\r\n disabled={currentPage === totalPages}\r\n className=\"p-2 hover:bg-gray-200 dark:hover:bg-gray-600 rounded-md transition text-gray-500 dark:text-gray-300 disabled:opacity-50\"\r\n >\r\n <ChevronRight className=\"h-4 w-4\" />\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Portal Menu */}\r\n {activeMenu &&\r\n createPortal(\r\n <div\r\n ref={menuRef}\r\n style={{\r\n position: \"fixed\",\r\n top: `${menuPosition.top}px`,\r\n left: `${menuPosition.left}px`,\r\n zIndex: 9999,\r\n }}\r\n className=\"w-48 bg-white dark:bg-gray-700 rounded-md shadow-lg border border-gray-200 dark:border-gray-600\"\r\n >\r\n {menuList.map((action, i) => (\r\n <button\r\n key={i}\r\n onClick={(e) =>\r\n handleActionClick(\r\n action,\r\n data.find((d) => d.id === activeMenu),\r\n e,\r\n )\r\n }\r\n className={`w-full flex items-center gap-2 px-4 py-2 text-sm text-left hover:bg-gray-100 dark:hover:bg-gray-600 ${\r\n action.variant === \"danger\"\r\n ? \"text-red-600 dark:text-red-500\"\r\n : \"text-gray-700 dark:text-gray-200\"\r\n }`}\r\n >\r\n {action.icon && <span className=\"shrink-0\">{action.icon}</span>}\r\n {action.title}\r\n </button>\r\n ))}\r\n </div>,\r\n document.body,\r\n )}\r\n\r\n {/* Filter Drawer */}\r\n {filterConfig && (\r\n <FilterDrawer\r\n isOpen={showFilters}\r\n onClose={() => setShowFilters(false)}\r\n config={filterConfig}\r\n onApply={onFilterApply}\r\n />\r\n )}\r\n\r\n {isOpen && (\r\n <ImagePreview\r\n src={targetImage.src}\r\n alt={targetImage.alt}\r\n isOpen={isOpen}\r\n setIsOpen={setIsOpen}\r\n />\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default Table;\r\n","import React from \"react\";\r\nimport { X } from \"lucide-react\";\r\nimport Button from \"../Button/Button\";\r\n\r\nconst Modal = ({\r\n isOpen,\r\n onClose,\r\n icon,\r\n title,\r\n children,\r\n size = \"md\",\r\n actionButtons = [],\r\n actions,\r\n showDefaultClose = true,\r\n footerConfig = null,\r\n hideFooter = false,\r\n onFormSubmit = () => {},\r\n onCancel,\r\n loadingBtn = false,\r\n executeFunction = () => {},\r\n selectedItem = null,\r\n}) => {\r\n if (!isOpen) return null;\r\n\r\n // Size classes\r\n const sizeClasses = {\r\n sm: \"max-w-md\",\r\n md: \"max-w-lg\",\r\n lg: \"max-w-2xl\",\r\n xl: \"max-w-4xl\",\r\n full: \"max-w-full\",\r\n };\r\n\r\n return (\r\n <div className=\"fixed inset-0 z-50 flex items-center justify-center p-4\">\r\n {/* Backdrop */}\r\n <div\r\n className=\"fixed inset-0 bg-gray-500 opacity-75\"\r\n onClick={() => onClose()}\r\n ></div>\r\n\r\n {/* Modal container */}\r\n <div\r\n className={`relative bg-white rounded-lg shadow-xl w-full ${\r\n sizeClasses[size] || sizeClasses.md\r\n } max-h-[90vh] flex flex-col dark:bg-gray-800`}\r\n >\r\n {/* Header */}\r\n <div className=\"flex items-center justify-between p-4 border-b border-gray-200 dark:border-gray-700 flex-shrink-0\">\r\n <div className=\"flex items-center gap-1\">\r\n {icon && <span>{icon}</span>}\r\n <h3 className=\"text-lg font-medium text-gray-900 dark:text-white\">\r\n {title}\r\n </h3>\r\n </div>\r\n\r\n <button\r\n onClick={() => onClose()}\r\n className=\"text-gray-400 hover:text-gray-600 dark:hover:text-gray-300\"\r\n >\r\n <X className=\"w-6 h-6\" />\r\n </button>\r\n </div>\r\n\r\n {/* Content */}\r\n <div className=\"flex-1 overflow-y-auto p-4\">{children}</div>\r\n\r\n {/* Footer */}\r\n {/* {!hideFooter && (actions || footerConfig || showDefaultClose) && (\r\n <div className=\"px-4 py-3 flex justify-end gap-3 border-t border-gray-200 dark:border-gray-700 sm:px-6\">\r\n {actions}\r\n\r\n {footerConfig && (\r\n <>\r\n {footerConfig.cancelButton && (\r\n <Button\r\n onClick={() => (onCancel() || onClose())}\r\n disabled={loadingBtn}\r\n variant=\"contained\"\r\n color=\"default\"\r\n >\r\n {footerConfig.cancelText || \"Cancel\"}\r\n </Button>\r\n )}\r\n\r\n {footerConfig.submitButton && (\r\n <Button\r\n onClick={onFormSubmit}\r\n disabled={loadingBtn}\r\n variant=\"contained\"\r\n color={footerConfig.color || \"primary\"}\r\n className=\"min-w-[100px]\"\r\n >\r\n {loadingBtn ? (\r\n <div className=\"flex items-center\">\r\n <div className=\"animate-spin rounded-full h-4 w-4 border-2 border-white/30 border-t-2 border-t-white mr-2\"></div>\r\n {footerConfig.submitText || \"Submit\"}...\r\n </div>\r\n ) : (\r\n footerConfig.submitText || \"Submit\"\r\n )}\r\n </Button>\r\n )}\r\n </>\r\n )}\r\n\r\n {showDefaultClose && !actions && !footerConfig && (\r\n <Button onClick={() => onClose()} variant=\"outlined\">\r\n Close\r\n </Button>\r\n )}\r\n </div>\r\n )} */}\r\n\r\n {actionButtons.length > 0 && (\r\n <div className=\"px-4 py-3 flex justify-end gap-3 border-t border-gray-200 dark:border-gray-700 sm:px-6\">\r\n {actionButtons.map((btn) => (\r\n <Button\r\n onClick={(e) => {\r\n if (btn.type == \"submit\") {\r\n onFormSubmit(e);\r\n } else {\r\n executeFunction(\r\n () => btn?.onClick?.(e, selectedItem),\r\n (resp) => onClose?.(resp),\r\n );\r\n }\r\n }}\r\n disabled={loadingBtn || btn.disabled}\r\n variant={btn.variant || \"contained\"}\r\n color={btn.color || \"primary\"}\r\n className={`min-w-[100px] ${btn.className}`}\r\n type={btn.type || \"button\"}\r\n >\r\n {loadingBtn ? (\r\n <div className=\"flex items-center\">\r\n <div className=\"animate-spin rounded-full h-4 w-4 border-2 border-white/30 border-t-2 border-t-white mr-2\"></div>\r\n {btn.label || \"Submit\"}...\r\n </div>\r\n ) : (\r\n btn.label || \"Submit\"\r\n )}\r\n </Button>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default Modal;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport RenderFields from \"./components/RenderFields\";\r\n\r\nconst Form = ({ config, onSubmit, initialData = {} }) => {\r\n const { formClass = \"grid grid-cols-12 gap-4\", formFields = [] } =\r\n config || {};\r\n\r\n const [formData, setFormData] = useState(initialData);\r\n\r\n useEffect(() => {\r\n setFormData(initialData);\r\n }, []);\r\n\r\n const handleChange = (key, value) => {\r\n setFormData((prev) => ({ ...prev, [key]: value }));\r\n };\r\n\r\n const handleSubmit = (e) => {\r\n e.preventDefault();\r\n const form = e.target;\r\n\r\n if (!form.checkValidity()) {\r\n form.reportValidity();\r\n return;\r\n }\r\n\r\n onSubmit(formData);\r\n };\r\n\r\n return (\r\n <form\r\n id={config.title?.toLowerCase().includes(\"edit\") ? \"editForm\" : \"addForm\"}\r\n onSubmit={handleSubmit}\r\n className={formClass}\r\n noValidate={false} // enables native validation\r\n >\r\n {formFields.map((field) => (\r\n <>\r\n <RenderFields\r\n key={field.key}\r\n field={field}\r\n formData={formData}\r\n handleChange={handleChange}\r\n />\r\n </>\r\n ))}\r\n </form>\r\n );\r\n};\r\n\r\nexport default Form;\r\n","import { User } from \"lucide-react\";\r\nimport React, { useState } from \"react\";\r\nimport Chip from \"../Chip/Chip\";\r\nimport { formatDate } from \"../../lib/utils\";\r\nimport ImagePreview from \"../Table/components/ImagePreview\";\r\n\r\nexport default function Details({ data, config }) {\r\n const { fields, containerClass } = config;\r\n\r\n // image preview\r\n const [targetImage, setTargetImage] = useState(null);\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const openPreview = (image) => {\r\n setTargetImage(image);\r\n setIsOpen(true);\r\n };\r\n\r\n const DetailRow = ({ col }) => {\r\n let Icon = col?.icon;\r\n let label = col.label;\r\n let value = data[col.key];\r\n let type = col.type;\r\n let variant = col.variant || \"outline\";\r\n let color = col.defaultColor;\r\n\r\n if (type == \"chip\" && col.chipOptions.length > 0) {\r\n let chipObj = col?.chipOptions.find((obj) => obj.value == value);\r\n if (chipObj) {\r\n value = chipObj.label;\r\n color = chipObj.color;\r\n }\r\n }\r\n\r\n return (\r\n <div\r\n className={`col-span-12 flex items-center space-x-4 p-4 rounded-xl \r\n bg-gray-100 dark:bg-gray-900 ${col.blockClass}`}\r\n >\r\n {Icon && <div className=\"flex-shrink-0\">{Icon}</div>}\r\n <div className=\"flex-1 min-w-0\">\r\n <p className=\"text-sm font-medium text-gray-500 dark:text-gray-400\">\r\n {label}\r\n </p>\r\n {type == \"chip\" ? (\r\n <>\r\n <Chip\r\n label={value}\r\n variant={variant}\r\n color={color}\r\n className=\"mt-1\"\r\n />\r\n </>\r\n ) : type == \"tinyEditor\" ? (\r\n <p\r\n className=\"mt-1 text-sm text-gray-900 dark:text-white break-words\"\r\n dangerouslySetInnerHTML={{\r\n __html: value,\r\n }}\r\n ></p>\r\n ) : (\r\n <p className=\"mt-1 text-sm text-gray-900 dark:text-white break-words\">\r\n {type == \"date\" ? (\r\n <span>{formatDate(value, col.format || \"DD MMM YYYY\")}</span>\r\n ) : (\r\n value || \"N/A\"\r\n )}\r\n </p>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n const GroupRow = ({ col }) => {\r\n let title = data[col.titleKey];\r\n let subtitle = data[col.subtitleKey];\r\n let image = data[col.imageKey];\r\n let fallback_icon = data[col.fallback_icon];\r\n\r\n return (\r\n <div\r\n className={`col-span-12 flex items-center space-x-4 p-4 rounded-xl \r\n bg-gray-100 dark:bg-gray-900 \r\n ${col.blockClass}`}\r\n >\r\n {image ? (\r\n <img\r\n src={image}\r\n alt={title}\r\n onClick={() => openPreview({ src: image, alt: title })}\r\n className=\"w-16 h-16 cursor-pointer rounded-full object-cover border-2 border-gray-200 dark:border-gray-700\"\r\n />\r\n ) : fallback_icon ? (\r\n fallback_icon\r\n ) : (\r\n <div className=\"w-16 h-16 flex items-center justify-center rounded-full border-2 border-gray-300 dark:border-gray-700 bg-gray-200 dark:bg-gray-600\">\r\n <User className=\"w-8 h-8 text-gray-400\" />\r\n </div>\r\n )}\r\n\r\n <div>\r\n <h3 className=\"text-xl font-semibold text-gray-900 dark:text-white\">\r\n {title}\r\n </h3>\r\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">{subtitle}</p>\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n return (\r\n <>\r\n {isOpen && (\r\n <ImagePreview\r\n src={targetImage.src}\r\n alt={targetImage.alt}\r\n isOpen={isOpen}\r\n setIsOpen={setIsOpen}\r\n />\r\n )}\r\n\r\n <div className={`grid grid-cols-12 gap-4 ${containerClass || \"\"}`}>\r\n {fields.map((col) =>\r\n col.type == \"group\" ? (\r\n <GroupRow col={col} />\r\n ) : (\r\n <DetailRow col={col} />\r\n ),\r\n )}\r\n </div>\r\n </>\r\n );\r\n}\r\n","import React, { useEffect, useMemo, useState } from \"react\";\r\nimport { Plus, X } from \"lucide-react\";\r\nimport Table from \"./Table/Table\";\r\nimport Modal from \"./Modal/Modal\";\r\nimport Form from \"./Form/Form\";\r\nimport Button from \"./Button/Button\";\r\nimport { Icon } from \"@iconify/react\";\r\nimport { enqueueSnackbar } from \"notistack\";\r\nimport Details from \"./Details/Details\";\r\nimport PropTypes from \"prop-types\";\r\nimport { SnackbarProvider } from \"notistack\";\r\n\r\nconst CrudPage = ({ config }) => {\r\n const {\r\n title,\r\n fetchData = async () => {},\r\n isStaticData = false,\r\n tableConfig = {},\r\n modalConfig = {},\r\n filterConfig,\r\n } = config;\r\n\r\n const [loading, setLoading] = useState(true);\r\n const [formLoading, setFormLoading] = useState(false);\r\n\r\n const [listingData, setListingData] = useState([]);\r\n const [paginationData, setPaginationData] = useState(null);\r\n const [serverSidePaginationData, setServerSidePaginationData] = useState({\r\n search: \"\",\r\n rows_per_page: 50,\r\n current_page: 1,\r\n });\r\n const [filterData, setFilterData] = useState({});\r\n const [changeFilterData, setChangeFilterData] = useState(false);\r\n\r\n const [showAdd, setShowAdd] = useState(false);\r\n const [showEdit, setShowEdit] = useState(false);\r\n const [showDelete, setShowDelete] = useState(false);\r\n const [showView, setShowView] = useState(false);\r\n const [selectedItem, setSelectedItem] = useState(null);\r\n\r\n const handleMenuAction = (action, item) => {\r\n if (action === \"edit\") {\r\n setSelectedItem(item);\r\n setShowEdit(true);\r\n } else if (action === \"view\") {\r\n setSelectedItem(item);\r\n setShowView(true);\r\n } else if (action === \"delete\") {\r\n setSelectedItem(item);\r\n setShowDelete(true);\r\n }\r\n };\r\n\r\n const executeAction = async (\r\n action,\r\n onSuccess,\r\n success_message = \"\",\r\n error_message = \"\",\r\n ) => {\r\n setFormLoading(true);\r\n\r\n try {\r\n const resp = await action?.();\r\n if (success_message || resp.message) {\r\n enqueueSnackbar(success_message || resp.message, {\r\n variant: \"success\",\r\n });\r\n }\r\n onSuccess?.(resp);\r\n } catch (error) {\r\n if (error_message || error.message) {\r\n enqueueSnackbar(error_message || error.message, { variant: \"error\" });\r\n }\r\n } finally {\r\n setFormLoading(false);\r\n }\r\n };\r\n\r\n const handleAddResult = (resp) => {\r\n let newObj = resp.newObject;\r\n if (isStaticData) {\r\n setListingData((prev) => [newObj, ...prev]);\r\n setPaginationData((prev) => ({\r\n ...prev,\r\n current_page: 1,\r\n }));\r\n } else {\r\n setServerSidePaginationData((prev) => ({\r\n ...prev,\r\n current_page: 1,\r\n }));\r\n if (serverSidePaginationData.current_page == 1) {\r\n handleGetListing();\r\n }\r\n }\r\n setShowAdd(false);\r\n };\r\n\r\n const handleEditResult = (resp) => {\r\n let updatedObj = resp.newObject;\r\n let targetObj = resp.targetObject;\r\n if (isStaticData) {\r\n setListingData((prev) =>\r\n prev.map((item) =>\r\n item.id === targetObj.id ? { ...item, ...updatedObj } : item,\r\n ),\r\n );\r\n } else {\r\n handleGetListing();\r\n }\r\n setShowEdit(false);\r\n };\r\n\r\n const handleDeleteResult = (resp) => {\r\n if (!resp) {\r\n setShowDelete(false);\r\n setSelectedItem(null);\r\n return;\r\n }\r\n\r\n if (isStaticData) {\r\n setListingData((prev) =>\r\n prev.filter((item) => item.id !== resp.targetObject.id),\r\n );\r\n } else {\r\n if (\r\n listingData.length == 1 &&\r\n serverSidePaginationData.current_page > 1\r\n ) {\r\n setServerSidePaginationData((prev) => ({\r\n ...prev,\r\n current_page: prev.current_page - 1,\r\n }));\r\n } else {\r\n handleGetListing();\r\n }\r\n }\r\n setShowDelete(false);\r\n setSelectedItem(null);\r\n };\r\n\r\n const handleAddFormSubmit = (formData) =>\r\n executeAction(\r\n () => modalConfig?.addModal?.handleSubmit?.(formData),\r\n handleAddResult,\r\n );\r\n\r\n const handleEditFormSubmit = (formData) =>\r\n executeAction(\r\n () => modalConfig?.editModal?.handleSubmit?.(formData, selectedItem),\r\n handleEditResult,\r\n );\r\n\r\n const handleDeleteConfirm = () =>\r\n executeAction(\r\n () => modalConfig?.deleteModal?.action?.(selectedItem),\r\n handleDeleteResult,\r\n );\r\n\r\n const handleGetListing = async () => {\r\n setLoading(true);\r\n\r\n fetchData?.({ ...serverSidePaginationData, ...filterData })\r\n .then((resp) => {\r\n setListingData(resp.data);\r\n setPaginationData(resp.pagination);\r\n })\r\n .catch((error) => {\r\n enqueueSnackbar(error.message, { variant: \"error\" });\r\n })\r\n .finally(() => {\r\n setLoading(false);\r\n });\r\n };\r\n\r\n const handleFilterData = (data) => {\r\n setFilterData((prev) => ({\r\n ...data,\r\n }));\r\n if (tableConfig?.filter?.useServerSideFilters) {\r\n setChangeFilterData((prev) => !prev);\r\n }\r\n };\r\n\r\n const filterByMatchingFields = (data, filters) => {\r\n return data.filter((item) =>\r\n Object.entries(filters).every(([key, value]) => item[key] === value),\r\n );\r\n };\r\n\r\n const filteredData = useMemo(() => {\r\n if (tableConfig?.filter?.useServerSideFilters) return data;\r\n return filterByMatchingFields(listingData, filterData);\r\n }, [listingData, filterData]);\r\n\r\n useEffect(() => {\r\n handleGetListing();\r\n }, [\r\n serverSidePaginationData.search,\r\n serverSidePaginationData.rows_per_page,\r\n serverSidePaginationData.current_page,\r\n changeFilterData,\r\n ]);\r\n\r\n return (\r\n <SnackbarProvider\r\n maxSnack={3}\r\n anchorOrigin={{\r\n vertical: \"bottom\",\r\n horizontal: \"right\",\r\n }}\r\n autoHideDuration={3000}\r\n action={(snackbarKey) => (\r\n <button\r\n onClick={() => {\r\n window.dispatchEvent(\r\n new CustomEvent(\"closeSnackbar\", { detail: snackbarKey }),\r\n );\r\n }}\r\n className=\"p-1 hover:bg-white/20 rounded-full transition-colors duration-200 text-white flex items-center justify-center\"\r\n >\r\n <X className=\"h-4 w-4\" />\r\n </button>\r\n )}\r\n >\r\n <div>\r\n {/* Header */}\r\n <div className=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 mb-6\">\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 mt-2\">\r\n {config?.description}\r\n </p>\r\n </div>\r\n <div className=\"flex items-center space-x-3\">\r\n <Button\r\n onClick={() => setShowAdd(true)}\r\n variant=\"contained\"\r\n color=\"primary\"\r\n >\r\n <Plus className=\"w-4 h-4 mr-2\" />\r\n {config.buttonText || \"Add New\"}\r\n </Button>\r\n </div>\r\n </div>\r\n\r\n {/* Table */}\r\n <Table\r\n config={{\r\n ...tableConfig,\r\n pagination: {\r\n ...tableConfig.pagination,\r\n ...paginationData,\r\n },\r\n data: filteredData,\r\n setServerSidePaginationData: setServerSidePaginationData,\r\n onMenuAction: handleMenuAction,\r\n filterConfig,\r\n onFilterApply: handleFilterData,\r\n loading,\r\n }}\r\n />\r\n\r\n {/* Add Modal */}\r\n <Modal\r\n isOpen={showAdd}\r\n onClose={() => setShowAdd(false)}\r\n icon={modalConfig.addModal?.icon}\r\n title={modalConfig.addModal?.title || \"Add New\"}\r\n size={modalConfig.addModal?.size || \"md\"}\r\n onFormSubmit={() =>\r\n document.querySelector(\"#addForm\")?.requestSubmit()\r\n }\r\n loadingBtn={formLoading}\r\n actionButtons={modalConfig.addModal.actionButtons}\r\n >\r\n <Form\r\n config={modalConfig?.addModal || []}\r\n onSubmit={handleAddFormSubmit}\r\n initialData={{}}\r\n loading={formLoading}\r\n />\r\n </Modal>\r\n\r\n {/* Edit Modal */}\r\n <Modal\r\n isOpen={showEdit}\r\n onClose={() => setShowEdit(false)}\r\n icon={modalConfig.editModal?.icon}\r\n title={modalConfig.editModal?.title || \"Edit\"}\r\n size={modalConfig.editModal?.size || \"md\"}\r\n onFormSubmit={() =>\r\n document.querySelector(\"#editForm\")?.requestSubmit()\r\n }\r\n actionButtons={modalConfig.editModal.actionButtons}\r\n loadingBtn={formLoading}\r\n >\r\n <Form\r\n config={modalConfig.editModal || []}\r\n onSubmit={handleEditFormSubmit}\r\n initialData={selectedItem}\r\n loading={formLoading}\r\n />\r\n </Modal>\r\n\r\n {/* Delete Modal */}\r\n {showDelete && (\r\n <Modal\r\n isOpen={showDelete}\r\n onClose={(resp) => {\r\n handleDeleteResult(resp);\r\n }}\r\n icon={\r\n modalConfig.deleteModal?.icon || (\r\n <Icon icon=\"ph:warning-bold\" className=\"w-6 h-6 text-red-500\" />\r\n )\r\n }\r\n title={modalConfig.deleteModal?.title || \"Confirm Delete\"}\r\n size={modalConfig.deleteModal?.size || \"md\"}\r\n loading={formLoading}\r\n actionButtons={modalConfig.deleteModal.actionButtons}\r\n executeFunction={executeAction}\r\n selectedItem={selectedItem}\r\n >\r\n <div className=\"flex items-center space-x-2 py-3\">\r\n <div>\r\n <p className=\"text-md text-gray-700 dark:text-white\">\r\n {modalConfig.deleteModal?.confirmText ||\r\n \"Are you sure you want to delete this item?\"}\r\n </p>\r\n {modalConfig.deleteModal?.referenceKey && (\r\n <p className=\"text-md font-semibold text-gray-700 dark:text-white\">\r\n {selectedItem[modalConfig.deleteModal?.referenceKey]}\r\n </p>\r\n )}\r\n </div>\r\n </div>\r\n </Modal>\r\n )}\r\n\r\n {/* View Detail Modal */}\r\n {modalConfig.viewModal && (\r\n <Modal\r\n isOpen={showView}\r\n onClose={() => {\r\n setShowView(false);\r\n setSelectedItem(null);\r\n }}\r\n icon={modalConfig.viewModal?.icon}\r\n title={modalConfig.viewModal?.title || \"View Details\"}\r\n size={modalConfig.viewModal?.size || \"lg\"}\r\n footerConfig={modalConfig?.viewModal.footer}\r\n >\r\n {modalConfig.viewModal?.component ? (\r\n <modalConfig.viewModal.component data={selectedItem} />\r\n ) : (\r\n <Details\r\n data={selectedItem}\r\n config={modalConfig.viewModal || {}}\r\n />\r\n )}\r\n </Modal>\r\n )}\r\n </div>\r\n </SnackbarProvider>\r\n );\r\n};\r\n\r\nconst optionType = PropTypes.shape({\r\n value: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.number,\r\n PropTypes.bool,\r\n ]).isRequired,\r\n label: PropTypes.string.isRequired,\r\n color: PropTypes.string,\r\n});\r\n\r\nconst actionButtonType = PropTypes.shape({\r\n type: PropTypes.string.isRequired,\r\n label: PropTypes.string.isRequired,\r\n color: PropTypes.string,\r\n variant: PropTypes.string,\r\n onClick: PropTypes.func,\r\n});\r\n\r\nconst menuActionType = PropTypes.shape({\r\n title: PropTypes.string.isRequired,\r\n type: PropTypes.string.isRequired,\r\n variant: PropTypes.string,\r\n icon: PropTypes.node,\r\n});\r\n\r\nconst tableHeadType = PropTypes.shape({\r\n key: PropTypes.string.isRequired,\r\n title: PropTypes.string,\r\n type: PropTypes.string,\r\n imageKey: PropTypes.string,\r\n titleKey: PropTypes.string,\r\n subtitleKey: PropTypes.string,\r\n onClickDetails: PropTypes.bool,\r\n variant: PropTypes.string,\r\n chipOptions: PropTypes.arrayOf(optionType),\r\n defaultColor: PropTypes.string,\r\n className: PropTypes.string,\r\n format: PropTypes.string,\r\n menuList: PropTypes.arrayOf(menuActionType),\r\n});\r\n\r\nconst formFieldType = PropTypes.shape({\r\n key: PropTypes.string.isRequired,\r\n label: PropTypes.string,\r\n type: PropTypes.string.isRequired,\r\n required: PropTypes.bool,\r\n minLength: PropTypes.number,\r\n parentClass: PropTypes.string,\r\n search: PropTypes.bool,\r\n multiple: PropTypes.bool,\r\n dropdownMaxHeight: PropTypes.string,\r\n dragDrop: PropTypes.bool,\r\n countriesList: PropTypes.bool,\r\n defaultCountry: PropTypes.string,\r\n placeholder: PropTypes.string,\r\n rows: PropTypes.number,\r\n text: PropTypes.string,\r\n editorKey: PropTypes.string,\r\n options: PropTypes.arrayOf(optionType),\r\n});\r\n\r\nconst viewFieldType = PropTypes.shape({\r\n key: PropTypes.string,\r\n label: PropTypes.string,\r\n type: PropTypes.string,\r\n imageKey: PropTypes.string,\r\n titleKey: PropTypes.string,\r\n subtitleKey: PropTypes.string,\r\n blockClass: PropTypes.string,\r\n icon: PropTypes.node,\r\n variant: PropTypes.string,\r\n chipOptions: PropTypes.arrayOf(optionType),\r\n defaultColor: PropTypes.string,\r\n className: PropTypes.string,\r\n format: PropTypes.string,\r\n});\r\n\r\nCrudPage.propTypes = {\r\n config: PropTypes.shape({\r\n title: PropTypes.string.isRequired,\r\n description: PropTypes.string,\r\n buttonText: PropTypes.string,\r\n fetchData: PropTypes.func.isRequired,\r\n isStaticData: PropTypes.bool,\r\n\r\n /* ================= TABLE CONFIG ================= */\r\n\r\n tableConfig: PropTypes.shape({\r\n table_head: PropTypes.arrayOf(tableHeadType).isRequired,\r\n\r\n search: PropTypes.shape({\r\n enabled: PropTypes.bool,\r\n useServerSideSearch: PropTypes.bool,\r\n searchKeys: PropTypes.arrayOf(PropTypes.string),\r\n }),\r\n\r\n pagination: PropTypes.shape({\r\n enabled: PropTypes.bool,\r\n useServerSidePagination: PropTypes.bool,\r\n }),\r\n\r\n filter: PropTypes.shape({\r\n enabled: PropTypes.bool,\r\n useServerSideFilters: PropTypes.bool,\r\n }),\r\n }).isRequired,\r\n\r\n /* ================= MODAL CONFIG ================= */\r\n\r\n modalConfig: PropTypes.shape({\r\n addModal: PropTypes.shape({\r\n title: PropTypes.string.isRequired,\r\n size: PropTypes.string,\r\n formClass: PropTypes.string,\r\n formFields: PropTypes.arrayOf(formFieldType),\r\n handleSubmit: PropTypes.func.isRequired,\r\n actionButtons: PropTypes.arrayOf(actionButtonType),\r\n }),\r\n\r\n editModal: PropTypes.shape({\r\n title: PropTypes.string.isRequired,\r\n size: PropTypes.string,\r\n formClass: PropTypes.string,\r\n formFields: PropTypes.arrayOf(formFieldType),\r\n handleSubmit: PropTypes.func.isRequired,\r\n actionButtons: PropTypes.arrayOf(actionButtonType),\r\n }),\r\n\r\n deleteModal: PropTypes.shape({\r\n title: PropTypes.string.isRequired,\r\n size: PropTypes.string,\r\n confirmText: PropTypes.string,\r\n referenceKey: PropTypes.string,\r\n actionButtons: PropTypes.arrayOf(actionButtonType),\r\n }),\r\n\r\n viewModal: PropTypes.shape({\r\n title: PropTypes.string.isRequired,\r\n size: PropTypes.string,\r\n\r\n // 👇 This covers your commented code:\r\n component: PropTypes.elementType, // for custom component like TeamMemberDetail\r\n\r\n fields: PropTypes.arrayOf(viewFieldType),\r\n\r\n footer: PropTypes.shape({\r\n cancelButton: PropTypes.bool,\r\n cancelText: PropTypes.string,\r\n }),\r\n }),\r\n }),\r\n\r\n /* ================= FILTER CONFIG ================= */\r\n\r\n filterConfig: PropTypes.shape({\r\n fields: PropTypes.arrayOf(formFieldType),\r\n }),\r\n }).isRequired,\r\n};\r\n\r\nexport default CrudPage;\r\n","import React from \"react\";\r\nimport CrudPage from \"./components/CrudPage\";\r\nimport \"./index.css\";\r\n\r\nexport default function Crud(props) {\r\n return (\r\n <>\r\n <CrudPage config={props.config} />\r\n </>\r\n );\r\n}\r\n"],"names":["REACT_ELEMENT_TYPE","REACT_FRAGMENT_TYPE","jsxProd","type","config","maybeKey","key","propName","reactJsxRuntime_production","getComponentNameFromType","REACT_CLIENT_REFERENCE","REACT_PROFILER_TYPE","REACT_STRICT_MODE_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_ACTIVITY_TYPE","REACT_PORTAL_TYPE","REACT_CONTEXT_TYPE","REACT_CONSUMER_TYPE","REACT_FORWARD_REF_TYPE","innerType","REACT_MEMO_TYPE","REACT_LAZY_TYPE","testStringCoercion","value","checkKeyStringCoercion","JSCompiler_inline_result","JSCompiler_temp_const","JSCompiler_inline_result$jscomp$0","getTaskName","name","getOwner","dispatcher","ReactSharedInternals","UnknownOwner","hasValidKey","hasOwnProperty","getter","defineKeyPropWarningGetter","props","displayName","warnAboutAccessingKey","specialPropKeyWarningShown","elementRefGetterWithDeprecationWarning","componentName","didWarnAboutElementRef","ReactElement","owner","debugStack","debugTask","refProp","jsxDEVImpl","isStaticChildren","children","isArrayImpl","validateChildKeys","keys","k","didWarnAboutKeySpread","node","isValidElement","object","React","require$$0","createTask","callStackForError","unknownOwnerDebugStack","unknownOwnerDebugTask","reactJsxRuntime_development","trackActualOwner","jsxRuntimeModule","require$$1","formatDate","dateString","format","date","pad","n","map","token","searchLocalData","data","searchTerm","searchKeys","lowerSearchTerm","extractValues","obj","item","valuesToSearch","val","Button","className","variant","color","size","fullWidth","ref","baseStyles","sizes","colorVariants","colorStyles","_a","sizeStyles","combinedClassName","jsx","InputLabel","label","required","Fragment","jsxs","Select","options","onChange","placeholder","disabled","search","parentClass","multiple","dropdownMaxHeight","open","setOpen","useState","setSearchTerm","showAboveState","setShowAboveState","dropdownRef","useRef","searchInputRef","normalize","normalizedValue","filteredOptions","option","isSelected","optionValue","normalized","useEffect","handleClickOutside","event","rect","spaceBelow","handleOptionClick","finalValue","exists","newValues","v","selectedLabels","opt","ChevronDown","Search","e","Check","Switch","text","radioOptions","idx","countries","PhoneInput","countriesList","defaultCountry","find_country_with_code","selectedCountry","setSelectedCountry","fullNumber","setFullNumber","match","c","a","b","handleNumberChange","input","handleCountrySelect","country","filteredCountries","handleInputChange","formatted","TextArea","ImagePicker","accept","id","dragDrop","image","setImage","isDragging","setIsDragging","inputRef","handleFileChange","files","file","preview","handleDragOver","handleDragLeave","handleDrop","Icon","Input","onKeyDown","showPassword","setShowPassword","handleKeyDown","prev","TinyEditor","editorKey","height","inline","plugins","toolbar","menubar","fontFamily","initConfig","imageUploadHandler","defaultPlugins","defaultToolbar","handleImageUpload","blobInfo","resolve","reject","url","error","Editor","content","Checkbox","multiSelect","isChecked","handleSingleChange","handleMultipleChange","checked","newValue","index","RenderFields","field","formData","handleChange","rows","inputClass","minLength","finalPlaceholder","baseClass","imgObj","FilterDrawer","isOpen","onClose","onApply","filters","setFilters","handleApply","handleReset","X","BADGE_COLORS","BADGE_VARIANTS","Chip","colorConfig","variantKey","variantClasses","TableSkeleton","columns","_","rowIndex","colIndex","ImagePreview","src","alt","setIsOpen","closePreview","handleEsc","Table","table_head","loading","filter","pagination","emptyMessage","onMenuAction","setServerSidePaginationData","onFilterApply","filterConfig","activeMenu","setActiveMenu","menuList","setMenuList","menuPosition","setMenuPosition","showFilters","setShowFilters","targetImage","setTargetImage","filteredData","useMemo","currentPage","setCurrentPage","pageSize","setPageSize","totalRecords","setTotalRecords","totalPages","paginatedData","start","menuRef","buttonRefs","searchTimeoutRef","handleSearchChange","handleActionClick","action","handleMenuToggle","itemId","menu_list","button","menuWidth","menuHeight","viewportWidth","viewportHeight","left","top","calculateRowNumber","openPreview","renderAvatar","imageSrc","imageAlt","fallback_icon","User","renderGroupCell","row","col","handleRenderChip","chipObj","handleRenderCellValue","el","EllipsisVertical","handleColumnClick","isColumnClickable","handleScroll","Filter","newLimit","newPage","ChevronLeft","ChevronRight","createPortal","i","d","Modal","icon","title","actionButtons","actions","showDefaultClose","footerConfig","hideFooter","onFormSubmit","onCancel","loadingBtn","executeFunction","selectedItem","sizeClasses","btn","resp","Form","onSubmit","initialData","formClass","formFields","setFormData","handleSubmit","form","Details","fields","containerClass","DetailRow","GroupRow","subtitle","CrudPage","fetchData","isStaticData","tableConfig","modalConfig","setLoading","formLoading","setFormLoading","listingData","setListingData","paginationData","setPaginationData","serverSidePaginationData","filterData","setFilterData","changeFilterData","setChangeFilterData","showAdd","setShowAdd","showEdit","setShowEdit","showDelete","setShowDelete","showView","setShowView","setSelectedItem","handleMenuAction","executeAction","onSuccess","success_message","error_message","enqueueSnackbar","handleAddResult","newObj","handleGetListing","handleEditResult","updatedObj","targetObj","handleDeleteResult","handleAddFormSubmit","_b","handleEditFormSubmit","handleFilterData","filterByMatchingFields","SnackbarProvider","snackbarKey","Plus","_c","_d","_e","_f","_g","_h","_i","_j","_k","_l","_m","_n","_o","_p","optionType","PropTypes","actionButtonType","menuActionType","tableHeadType","formFieldType","viewFieldType","Crud"],"mappings":"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","x_google_ignoreList":[0,1,2]}