react-admin-crud-manager 1.2.6 → 1.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../src/lib/utils.ts","../src/lib/crudClasses.ts","../src/components/Button/Button.tsx","../src/components/Form/components/InputLabel.tsx","../src/data/countries.ts","../src/components/Form/components/Select.tsx","../src/components/Form/components/Switch.tsx","../src/components/Form/components/PhoneInput.tsx","../src/components/Form/components/TextArea.tsx","../node_modules/tslib/tslib.es6.mjs","../node_modules/normalize-wheel/src/UserAgent_DEPRECATED.js","../node_modules/normalize-wheel/src/ExecutionEnvironment.js","../node_modules/normalize-wheel/src/isEventSupported.js","../node_modules/normalize-wheel/src/normalizeWheel.js","../node_modules/normalize-wheel/index.js","../node_modules/react-easy-crop/index.module.mjs","../src/components/Form/components/ImageCropperModal.tsx","../src/components/Form/components/ImagePicker.tsx","../src/components/Form/components/Input.tsx","../src/components/Form/components/TinyEditor.tsx","../src/components/Form/components/Checkbox.tsx","../src/components/Form/components/AudioPicker.tsx","../src/components/Form/components/MultiImagePicker.tsx","../src/components/Table/components/ImagePreview.tsx","../src/components/Details/components/GroupRow.tsx","../src/components/Details/components/CardGroup.tsx","../src/components/Chip/Chip.tsx","../src/components/Details/components/DetailRow.tsx","../src/components/Form/components/Radio.tsx","../src/components/Form/components/VideoPicker.tsx","../src/components/Form/components/RenderFields.tsx","../src/components/Filter/FilterDrawer.tsx","../src/components/Table/components/TableSkeleton.tsx","../src/components/Table/components/SortDropdown.tsx","../src/components/Table/utils/sortUtils.ts","../src/components/Table/Table.tsx","../src/components/Modal/Modal.tsx","../src/components/Form/Form.tsx","../src/components/Details/Details.tsx","../src/components/CrudPage.tsx","../src/OptionalSnackbarProvider.tsx","../src/index.tsx"],"sourcesContent":["// ======= Format Date : Jan 15, 2024 =======\r\n\r\nexport const formatDate = (\r\n dateString: string | Date | null | undefined,\r\n format: string = \"DD MMM YYYY\",\r\n): string => {\r\n if (!dateString) return \"N/A\";\r\n\r\n const date = new Date(dateString);\r\n if (isNaN(date.getTime())) return \"Invalid Date\";\r\n\r\n const pad = (n: number): string => String(n).padStart(2, \"0\");\r\n\r\n const map: Record<string, string | number> = {\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) => String(map[token]),\r\n );\r\n};\r\n\r\n// =========== Local Search function ===========\r\nexport const searchLocalData = <T extends Record<string, any>>(\r\n data: T[],\r\n searchTerm: string | undefined | null,\r\n searchKeys: string[] = [],\r\n): T[] => {\r\n if (!searchTerm?.trim()) return data;\r\n\r\n const lowerSearchTerm = searchTerm.toLowerCase();\r\n\r\n const extractValues = (obj: any): string[] => {\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: string[] = [];\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","type ClassValue = string | null | undefined | false;\r\n\r\nexport const joinClasses = (...classes: ClassValue[]) =>\r\n classes.filter(Boolean).join(\" \");\r\n\r\nexport const crudClasses = {\r\n crudPage: {\r\n root: \"crud_page\",\r\n deleteContent: \"crud_page_delete_content\",\r\n },\r\n button: {\r\n root: \"crud_button\",\r\n },\r\n chip: {\r\n root: \"crud_chip\",\r\n },\r\n spinner: {\r\n root: \"crud_spinner\",\r\n },\r\n modal: {\r\n root: \"crud_modal\",\r\n overlay: \"crud_modal_overlay\",\r\n container: \"crud_modal_container\",\r\n header: \"crud_modal_header\",\r\n title: \"crud_modal_title\",\r\n closeButton: \"crud_modal_close_button\",\r\n body: \"crud_modal_body\",\r\n footer: \"crud_modal_footer\",\r\n actionButton: \"crud_modal_action_button\",\r\n loadingIndicator: \"crud_modal_loading_indicator\",\r\n },\r\n table: {\r\n root: \"crud_table\",\r\n toolbar: \"crud_table_toolbar\",\r\n searchField: \"crud_table_search_field\",\r\n searchInput: \"crud_table_search_input\",\r\n container: \"crud_table_container\",\r\n element: \"crud_table_element\",\r\n head: \"crud_table_head\",\r\n headRow: \"crud_table_head_row\",\r\n headCell: \"crud_table_head_cell\",\r\n body: \"crud_table_body\",\r\n row: \"crud_table_row\",\r\n cell: \"crud_table_cell\",\r\n noData: \"crud_table_no_data\",\r\n actionButton: \"crud_table_action_button\",\r\n menu: \"crud_table_menu\",\r\n menuItem: \"crud_table_menu_item\",\r\n pagination: \"crud_table_pagination\",\r\n },\r\n tableSkeleton: {\r\n root: \"crud_table_skeleton\",\r\n table: \"crud_table_skeleton_table\",\r\n },\r\n sortDropdown: {\r\n root: \"crud_sort_dropdown\",\r\n trigger: \"crud_sort_dropdown_trigger\",\r\n menu: \"crud_sort_dropdown_menu\",\r\n item: \"crud_sort_dropdown_item\",\r\n },\r\n imagePreview: {\r\n root: \"crud_image_preview\",\r\n container: \"crud_image_preview_container\",\r\n image: \"crud_image_preview_image\",\r\n },\r\n filterDrawer: {\r\n overlay: \"crud_filter_overlay\",\r\n panel: \"crud_filter_panel\",\r\n header: \"crud_filter_header\",\r\n body: \"crud_filter_body\",\r\n footer: \"crud_filter_footer\",\r\n },\r\n form: {\r\n root: \"crud_form\",\r\n loading: \"crud_form_loading\",\r\n },\r\n field: {\r\n wrapper: \"crud_field_wrapper\",\r\n label: \"crud_field_label\",\r\n input: \"crud_field_input\",\r\n error: \"crud_field_error\",\r\n },\r\n mediaPicker: {\r\n image: \"crud_media_image_picker\",\r\n multiImage: \"crud_media_multi_image_picker\",\r\n audio: \"crud_media_audio_picker\",\r\n video: \"crud_media_video_picker\",\r\n dropzone: \"crud_media_dropzone\",\r\n cropModal: \"crud_media_crop_modal\",\r\n },\r\n details: {\r\n root: \"crud_details\",\r\n container: \"crud_details_container\",\r\n row: \"crud_details_row\",\r\n },\r\n} as const;\r\n","import React from \"react\";\r\nimport { crudClasses, joinClasses } from \"../../lib/crudClasses\";\r\n\r\ninterface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n className?: string;\r\n variant?: string;\r\n color?: string;\r\n size?: string;\r\n fullWidth?: boolean;\r\n children: React.ReactNode;\r\n}\r\n\r\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\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: Record<string, string> = {\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: Record<string, Record<string, string>> = {\r\n primary: {\r\n contained:\r\n \"bg-primary text-white hover:bg-primary-600 focus:ring-primary-500 shadow-sm\",\r\n outlined:\r\n \"border border-primary bg-transparent text-primary hover:bg-primary-50 focus:ring-primary-500\",\r\n text: \"bg-transparent text-primary hover:bg-primary-50 focus:ring-primary-500\",\r\n },\r\n success: {\r\n contained:\r\n \"bg-green-600 text-white hover:bg-green-700 focus:ring-green-500 shadow-sm\",\r\n outlined:\r\n \"border border-green-600 bg-transparent text-green-600 hover:bg-green-50 focus:ring-green-500\",\r\n text: \"bg-transparent text-green-600 hover:bg-green-50 focus:ring-green-500\",\r\n },\r\n error: {\r\n contained:\r\n \"bg-red-600 text-white hover:bg-red-700 focus:ring-red-500 shadow-sm\",\r\n outlined:\r\n \"border border-red-600 bg-transparent text-red-600 hover:bg-red-50 focus:ring-red-500\",\r\n text: \"bg-transparent text-red-600 hover:bg-red-50 focus:ring-red-500\",\r\n },\r\n default: {\r\n contained:\r\n \"border bg-gray-200 text-gray-800 hover:bg-gray-300 focus:ring-gray-300 shadow-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-100 dark:hover:bg-gray-600 dark:focus:ring-gray-600\",\r\n outlined:\r\n \"border border-gray-300 bg-transparent text-gray-700 hover:bg-gray-100 focus:ring-gray-300 dark:border-gray-600 dark:text-gray-200 dark:hover:bg-gray-700 dark:focus:ring-gray-500\",\r\n text: \"bg-transparent text-gray-700 hover:bg-gray-100 focus:ring-gray-300 dark:text-gray-200 dark:hover:bg-gray-700 dark:focus:ring-gray-500\",\r\n },\r\n };\r\n\r\n const colorStyles =\r\n colorVariants[color]?.[variant] || colorVariants.default.contained;\r\n const sizeStyles = sizes[size] || sizes.default;\r\n\r\n const combinedClassName = joinClasses(\r\n crudClasses.button.root,\r\n baseStyles,\r\n colorStyles,\r\n sizeStyles,\r\n fullWidth ? \"w-full\" : \"\",\r\n className,\r\n );\r\n\r\n return (\r\n <button\r\n ref={ref}\r\n type={props.type || \"button\"}\r\n className={combinedClassName}\r\n {...props}\r\n >\r\n {children}\r\n </button>\r\n );\r\n },\r\n);\r\n\r\nButton.displayName = \"Button\";\r\n\r\nexport default Button;\r\n","import { Info } from \"lucide-react\";\r\nimport React from \"react\";\r\nimport { crudClasses, joinClasses } from \"../../../lib/crudClasses\";\r\n\r\ninterface InputLabelProps {\r\n label: React.ReactNode;\r\n required?: boolean;\r\n infoText?: string;\r\n}\r\n\r\nexport default function InputLabel({\r\n label,\r\n required = false,\r\n infoText = \"\",\r\n}: InputLabelProps) {\r\n return (\r\n <>\r\n <label\r\n className={joinClasses(\r\n crudClasses.field.label,\r\n \"flex text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\",\r\n )}\r\n >\r\n {label}\r\n {required && <span className=\"ml-1\">*</span>}\r\n\r\n {infoText && (\r\n <span className=\"ml-2 relative group inline-flex items-center cursor-pointer\">\r\n <Info className=\"w-4 h-4 text-gray-500 dark:text-gray-400\" />\r\n\r\n <span\r\n className=\"absolute left-1/2 top-full mt-2\r\n w-max max-w-xs bg-white text-black dark:bg-black dark:text-white text-xs\r\n rounded px-2 py-1 opacity-0 shadow-lg\r\n group-hover:opacity-100 transition-opacity\r\n duration-200 pointer-events-none z-50\"\r\n >\r\n {infoText}\r\n </span>\r\n </span>\r\n )}\r\n </label>\r\n </>\r\n );\r\n}\r\n","export interface CountryInterface {\r\n label: string;\r\n code: string;\r\n phone: string;\r\n pattern: string;\r\n mask: string;\r\n}\r\n\r\nexport const countries: CountryInterface[] = [\r\n {\r\n label: \"Afghanistan\",\r\n code: \"AF\",\r\n phone: \"93\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Aland Islands\",\r\n code: \"AX\",\r\n phone: \"358\",\r\n pattern: \"^[0-9]{6,10}$\",\r\n mask: \"### ### ### ##\",\r\n },\r\n {\r\n label: \"Albania\",\r\n code: \"AL\",\r\n phone: \"355\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Algeria\",\r\n code: \"DZ\",\r\n phone: \"213\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"American Samoa\",\r\n code: \"AS\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Andorra\",\r\n code: \"AD\",\r\n phone: \"376\",\r\n pattern: \"^[0-9]{6,9}$\",\r\n mask: \"### ###\",\r\n },\r\n {\r\n label: \"Angola\",\r\n code: \"AO\",\r\n phone: \"244\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Anguilla\",\r\n code: \"AI\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Antarctica\",\r\n code: \"AQ\",\r\n phone: \"672\",\r\n pattern: \"^[0-9]{6,11}$\",\r\n mask: \"## #### ####\",\r\n },\r\n {\r\n label: \"Antigua and Barbuda\",\r\n code: \"AG\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Argentina\",\r\n code: \"AR\",\r\n phone: \"54\",\r\n pattern: \"^[0-9]{10,11}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Armenia\",\r\n code: \"AM\",\r\n phone: \"374\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"Aruba\",\r\n code: \"AW\",\r\n phone: \"297\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"### ####\",\r\n },\r\n {\r\n label: \"Australia\",\r\n code: \"AU\",\r\n phone: \"61\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Austria\",\r\n code: \"AT\",\r\n phone: \"43\",\r\n pattern: \"^[0-9]{10,12}$\",\r\n mask: \"#### ######\",\r\n },\r\n {\r\n label: \"Azerbaijan\",\r\n code: \"AZ\",\r\n phone: \"994\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ## ##\",\r\n },\r\n {\r\n label: \"Bahrain\",\r\n code: \"BH\",\r\n phone: \"973\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Bangladesh\",\r\n code: \"BD\",\r\n phone: \"880\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"### ### ####\",\r\n },\r\n {\r\n label: \"Barbados\",\r\n code: \"BB\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Belarus\",\r\n code: \"BY\",\r\n phone: \"375\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ## ##\",\r\n },\r\n {\r\n label: \"Belgium\",\r\n code: \"BE\",\r\n phone: \"32\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ## ## ##\",\r\n },\r\n {\r\n label: \"Belize\",\r\n code: \"BZ\",\r\n phone: \"501\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"### ####\",\r\n },\r\n {\r\n label: \"Benin\",\r\n code: \"BJ\",\r\n phone: \"229\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ## ####\",\r\n },\r\n {\r\n label: \"Bermuda\",\r\n code: \"BM\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Bhutan\",\r\n code: \"BT\",\r\n phone: \"975\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"Bolivia\",\r\n code: \"BO\",\r\n phone: \"591\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"### ### ##\",\r\n },\r\n {\r\n label: \"Bonaire, Sint Eustatius and Saba\",\r\n code: \"BQ\",\r\n phone: \"599\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"### ####\",\r\n },\r\n {\r\n label: \"Bosnia and Herzegovina\",\r\n code: \"BA\",\r\n phone: \"387\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"Botswana\",\r\n code: \"BW\",\r\n phone: \"267\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"Bouvet Island\",\r\n code: \"BV\",\r\n phone: \"0055\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Brazil\",\r\n code: \"BR\",\r\n phone: \"55\",\r\n pattern: \"^[0-9]{10,11}$\",\r\n mask: \"(##) #####-####\",\r\n },\r\n {\r\n label: \"British Indian Ocean Territory\",\r\n code: \"IO\",\r\n phone: \"246\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"### ####\",\r\n },\r\n {\r\n label: \"Brunei\",\r\n code: \"BN\",\r\n phone: \"673\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"### ####\",\r\n },\r\n {\r\n label: \"Bulgaria\",\r\n code: \"BG\",\r\n phone: \"359\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Burkina Faso\",\r\n code: \"BF\",\r\n phone: \"226\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ## ####\",\r\n },\r\n {\r\n label: \"Burundi\",\r\n code: \"BI\",\r\n phone: \"257\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ## ####\",\r\n },\r\n {\r\n label: \"Cambodia\",\r\n code: \"KH\",\r\n phone: \"855\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"Cameroon\",\r\n code: \"CM\",\r\n phone: \"237\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"#### ## ##\",\r\n },\r\n {\r\n label: \"Canada\",\r\n code: \"CA\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Cape Verde\",\r\n code: \"CV\",\r\n phone: \"238\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"### ####\",\r\n },\r\n {\r\n label: \"Cayman Islands\",\r\n code: \"KY\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Central African Republic\",\r\n code: \"CF\",\r\n phone: \"236\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ## ####\",\r\n },\r\n {\r\n label: \"Chad\",\r\n code: \"TD\",\r\n phone: \"235\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ## ## ##\",\r\n },\r\n {\r\n label: \"Chile\",\r\n code: \"CL\",\r\n phone: \"56\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## #### ###\",\r\n },\r\n {\r\n label: \"China\",\r\n code: \"CN\",\r\n phone: \"86\",\r\n pattern: \"^[0-9]{11}$\",\r\n mask: \"### #### ####\",\r\n },\r\n {\r\n label: \"Christmas Island\",\r\n code: \"CX\",\r\n phone: \"61\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Cocos (Keeling) Islands\",\r\n code: \"CC\",\r\n phone: \"61\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Colombia\",\r\n code: \"CO\",\r\n phone: \"57\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"### ### ####\",\r\n },\r\n {\r\n label: \"Comoros\",\r\n code: \"KM\",\r\n phone: \"269\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"## ## ###\",\r\n },\r\n {\r\n label: \"Congo\",\r\n code: \"CG\",\r\n phone: \"242\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Cook Islands\",\r\n code: \"CK\",\r\n phone: \"682\",\r\n pattern: \"^[0-9]{5}$\",\r\n mask: \"#####\",\r\n },\r\n {\r\n label: \"Costa Rica\",\r\n code: \"CR\",\r\n phone: \"506\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Croatia\",\r\n code: \"HR\",\r\n phone: \"385\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Cuba\",\r\n code: \"CU\",\r\n phone: \"53\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"Curaçao\",\r\n code: \"CW\",\r\n phone: \"599\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"### ####\",\r\n },\r\n {\r\n label: \"Cyprus\",\r\n code: \"CY\",\r\n phone: \"357\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"Czech Republic\",\r\n code: \"CZ\",\r\n phone: \"420\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Democratic Republic of the Congo\",\r\n code: \"CD\",\r\n phone: \"243\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Denmark\",\r\n code: \"DK\",\r\n phone: \"45\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ## ## ##\",\r\n },\r\n {\r\n label: \"Djibouti\",\r\n code: \"DJ\",\r\n phone: \"253\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ## ## ##\",\r\n },\r\n {\r\n label: \"Dominica\",\r\n code: \"DM\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Dominican Republic\",\r\n code: \"DO\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Ecuador\",\r\n code: \"EC\",\r\n phone: \"593\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Egypt\",\r\n code: \"EG\",\r\n phone: \"20\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"### ### ####\",\r\n },\r\n {\r\n label: \"El Salvador\",\r\n code: \"SV\",\r\n phone: \"503\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Equatorial Guinea\",\r\n code: \"GQ\",\r\n phone: \"240\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Eritrea\",\r\n code: \"ER\",\r\n phone: \"291\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"## ### ##\",\r\n },\r\n {\r\n label: \"Estonia\",\r\n code: \"EE\",\r\n phone: \"372\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Eswatini\",\r\n code: \"SZ\",\r\n phone: \"268\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Ethiopia\",\r\n code: \"ET\",\r\n phone: \"251\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Falkland Islands\",\r\n code: \"FK\",\r\n phone: \"500\",\r\n pattern: \"^[0-9]{5}$\",\r\n mask: \"#####\",\r\n },\r\n {\r\n label: \"Faroe Islands\",\r\n code: \"FO\",\r\n phone: \"298\",\r\n pattern: \"^[0-9]{6}$\",\r\n mask: \"### ###\",\r\n },\r\n {\r\n label: \"Fiji Islands\",\r\n code: \"FJ\",\r\n phone: \"679\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"### ####\",\r\n },\r\n {\r\n label: \"Finland\",\r\n code: \"FI\",\r\n phone: \"358\",\r\n pattern: \"^[0-9]{6,10}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"France\",\r\n code: \"FR\",\r\n phone: \"33\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ## ## ## ##\",\r\n },\r\n {\r\n label: \"French Guiana\",\r\n code: \"GF\",\r\n phone: \"594\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"##### #####\",\r\n },\r\n {\r\n label: \"French Polynesia\",\r\n code: \"PF\",\r\n phone: \"689\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ## ## ##\",\r\n },\r\n {\r\n label: \"French Southern Territories\",\r\n code: \"TF\",\r\n phone: \"262\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"##### #####\",\r\n },\r\n {\r\n label: \"Gabon\",\r\n code: \"GA\",\r\n phone: \"241\",\r\n pattern: \"^[0-9]{7,8}$\",\r\n mask: \"## ## ####\",\r\n },\r\n {\r\n label: \"Georgia\",\r\n code: \"GE\",\r\n phone: \"995\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ## ## ##\",\r\n },\r\n {\r\n label: \"Germany\",\r\n code: \"DE\",\r\n phone: \"49\",\r\n pattern: \"^[0-9]{10,11}$\",\r\n mask: \"#### ######\",\r\n },\r\n {\r\n label: \"Ghana\",\r\n code: \"GH\",\r\n phone: \"233\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Gibraltar\",\r\n code: \"GI\",\r\n phone: \"350\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Greece\",\r\n code: \"GR\",\r\n phone: \"30\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"### ### ####\",\r\n },\r\n {\r\n label: \"Greenland\",\r\n code: \"GL\",\r\n phone: \"299\",\r\n pattern: \"^[0-9]{6}$\",\r\n mask: \"## ## ##\",\r\n },\r\n {\r\n label: \"Grenada\",\r\n code: \"GD\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Guadeloupe\",\r\n code: \"GP\",\r\n phone: \"590\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"##### #####\",\r\n },\r\n {\r\n label: \"Guam\",\r\n code: \"GU\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Guatemala\",\r\n code: \"GT\",\r\n phone: \"502\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Guernsey\",\r\n code: \"GG\",\r\n phone: \"44\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"#### ######\",\r\n },\r\n {\r\n label: \"Guinea\",\r\n code: \"GN\",\r\n phone: \"224\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Guinea-Bissau\",\r\n code: \"GW\",\r\n phone: \"245\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Guyana\",\r\n code: \"GY\",\r\n phone: \"592\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"### ####\",\r\n },\r\n {\r\n label: \"Haiti\",\r\n code: \"HT\",\r\n phone: \"509\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Heard Island and McDonald Islands\",\r\n code: \"HM\",\r\n phone: \"672\",\r\n pattern: \"^[0-9]{6,11}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"Honduras\",\r\n code: \"HN\",\r\n phone: \"504\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Hong Kong S.A.R.\",\r\n code: \"HK\",\r\n phone: \"852\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Hungary\",\r\n code: \"HU\",\r\n phone: \"36\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Iceland\",\r\n code: \"IS\",\r\n phone: \"354\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"### ####\",\r\n },\r\n {\r\n label: \"India\",\r\n code: \"IN\",\r\n phone: \"91\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"##### #####\",\r\n },\r\n {\r\n label: \"Indonesia\",\r\n code: \"ID\",\r\n phone: \"62\",\r\n pattern: \"^[0-9]{9,11}$\",\r\n mask: \"### #### ####\",\r\n },\r\n {\r\n label: \"Iran\",\r\n code: \"IR\",\r\n phone: \"98\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"### ### ####\",\r\n },\r\n {\r\n label: \"Iraq\",\r\n code: \"IQ\",\r\n phone: \"964\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"### ### ####\",\r\n },\r\n {\r\n label: \"Ireland\",\r\n code: \"IE\",\r\n phone: \"353\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Israel\",\r\n code: \"IL\",\r\n phone: \"972\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Italy\",\r\n code: \"IT\",\r\n phone: \"39\",\r\n pattern: \"^[0-9]{10,11}$\",\r\n mask: \"### ### ####\",\r\n },\r\n {\r\n label: \"Ivory Coast\",\r\n code: \"CI\",\r\n phone: \"225\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"## ## ## ## ##\",\r\n },\r\n {\r\n label: \"Jamaica\",\r\n code: \"JM\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Japan\",\r\n code: \"JP\",\r\n phone: \"81\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"## #### ####\",\r\n },\r\n {\r\n label: \"Jersey\",\r\n code: \"JE\",\r\n phone: \"44\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"#### ######\",\r\n },\r\n {\r\n label: \"Jordan\",\r\n code: \"JO\",\r\n phone: \"962\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## #### ####\",\r\n },\r\n {\r\n label: \"Kazakhstan\",\r\n code: \"KZ\",\r\n phone: \"7\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"### ### ## ##\",\r\n },\r\n {\r\n label: \"Kenya\",\r\n code: \"KE\",\r\n phone: \"254\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Kiribati\",\r\n code: \"KI\",\r\n phone: \"686\",\r\n pattern: \"^[0-9]{5,8}$\",\r\n mask: \"## ###\",\r\n },\r\n {\r\n label: \"Kosovo\",\r\n code: \"XK\",\r\n phone: \"383\",\r\n pattern: \"^[0-9]{8,9}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"Kuwait\",\r\n code: \"KW\",\r\n phone: \"965\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Kyrgyzstan\",\r\n code: \"KG\",\r\n phone: \"996\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Laos\",\r\n code: \"LA\",\r\n phone: \"856\",\r\n pattern: \"^[0-9]{9,10}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"Latvia\",\r\n code: \"LV\",\r\n phone: \"371\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"Lebanon\",\r\n code: \"LB\",\r\n phone: \"961\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"Lesotho\",\r\n code: \"LS\",\r\n phone: \"266\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Liberia\",\r\n code: \"LR\",\r\n phone: \"231\",\r\n pattern: \"^[0-9]{7,8}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"Libya\",\r\n code: \"LY\",\r\n phone: \"218\",\r\n pattern: \"^[0-9]{9,10}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Liechtenstein\",\r\n code: \"LI\",\r\n phone: \"423\",\r\n pattern: \"^[0-9]{7,9}$\",\r\n mask: \"### ####\",\r\n },\r\n {\r\n label: \"Lithuania\",\r\n code: \"LT\",\r\n phone: \"370\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"### ### ##\",\r\n },\r\n {\r\n label: \"Luxembourg\",\r\n code: \"LU\",\r\n phone: \"352\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Macau S.A.R.\",\r\n code: \"MO\",\r\n phone: \"853\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Madagascar\",\r\n code: \"MG\",\r\n phone: \"261\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ## #####\",\r\n },\r\n {\r\n label: \"Malawi\",\r\n code: \"MW\",\r\n phone: \"265\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Malaysia\",\r\n code: \"MY\",\r\n phone: \"60\",\r\n pattern: \"^[0-9]{9,10}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Maldives\",\r\n code: \"MV\",\r\n phone: \"960\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"### ####\",\r\n },\r\n {\r\n label: \"Mali\",\r\n code: \"ML\",\r\n phone: \"223\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ## ####\",\r\n },\r\n {\r\n label: \"Malta\",\r\n code: \"MT\",\r\n phone: \"356\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Man (Isle of)\",\r\n code: \"IM\",\r\n phone: \"44\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"#### ######\",\r\n },\r\n {\r\n label: \"Marshall Islands\",\r\n code: \"MH\",\r\n phone: \"692\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"### ####\",\r\n },\r\n {\r\n label: \"Martinique\",\r\n code: \"MQ\",\r\n phone: \"596\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"##### #####\",\r\n },\r\n {\r\n label: \"Mauritania\",\r\n code: \"MR\",\r\n phone: \"222\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ## ####\",\r\n },\r\n {\r\n label: \"Mauritius\",\r\n code: \"MU\",\r\n phone: \"230\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Mayotte\",\r\n code: \"YT\",\r\n phone: \"262\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"##### #####\",\r\n },\r\n {\r\n label: \"Mexico\",\r\n code: \"MX\",\r\n phone: \"52\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"### ### ####\",\r\n },\r\n {\r\n label: \"Micronesia\",\r\n code: \"FM\",\r\n phone: \"691\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"### ####\",\r\n },\r\n {\r\n label: \"Moldova\",\r\n code: \"MD\",\r\n phone: \"373\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Monaco\",\r\n code: \"MC\",\r\n phone: \"377\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ## ## ## ##\",\r\n },\r\n {\r\n label: \"Mongolia\",\r\n code: \"MN\",\r\n phone: \"976\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ## ####\",\r\n },\r\n {\r\n label: \"Montenegro\",\r\n code: \"ME\",\r\n phone: \"382\",\r\n pattern: \"^[0-9]{8,9}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"Montserrat\",\r\n code: \"MS\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Morocco\",\r\n code: \"MA\",\r\n phone: \"212\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## #### ###\",\r\n },\r\n {\r\n label: \"Mozambique\",\r\n code: \"MZ\",\r\n phone: \"258\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"Myanmar\",\r\n code: \"MM\",\r\n phone: \"95\",\r\n pattern: \"^[0-9]{9,10}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"Namibia\",\r\n code: \"NA\",\r\n phone: \"264\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Nauru\",\r\n code: \"NR\",\r\n phone: \"674\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"### ####\",\r\n },\r\n {\r\n label: \"Nepal\",\r\n code: \"NP\",\r\n phone: \"977\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"### #### ###\",\r\n },\r\n {\r\n label: \"Netherlands\",\r\n code: \"NL\",\r\n phone: \"31\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"New Caledonia\",\r\n code: \"NC\",\r\n phone: \"687\",\r\n pattern: \"^[0-9]{6}$\",\r\n mask: \"## ####\",\r\n },\r\n {\r\n label: \"New Zealand\",\r\n code: \"NZ\",\r\n phone: \"64\",\r\n pattern: \"^[0-9]{9,10}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Nicaragua\",\r\n code: \"NI\",\r\n phone: \"505\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Niger\",\r\n code: \"NE\",\r\n phone: \"227\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ## ####\",\r\n },\r\n {\r\n label: \"Nigeria\",\r\n code: \"NG\",\r\n phone: \"234\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"### ### ####\",\r\n },\r\n {\r\n label: \"Niue\",\r\n code: \"NU\",\r\n phone: \"683\",\r\n pattern: \"^[0-9]{4}$\",\r\n mask: \"####\",\r\n },\r\n {\r\n label: \"Norfolk Island\",\r\n code: \"NF\",\r\n phone: \"672\",\r\n pattern: \"^[0-9]{6,11}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"North Korea\",\r\n code: \"KP\",\r\n phone: \"850\",\r\n pattern: \"^[0-9]{8,10}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"North Macedonia\",\r\n code: \"MK\",\r\n phone: \"389\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"Northern Mariana Islands\",\r\n code: \"MP\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Norway\",\r\n code: \"NO\",\r\n phone: \"47\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"### ## ###\",\r\n },\r\n {\r\n label: \"Oman\",\r\n code: \"OM\",\r\n phone: \"968\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Pakistan\",\r\n code: \"PK\",\r\n phone: \"92\",\r\n pattern: \"^[0-9]{10,11}$\",\r\n mask: \"### #### ###\",\r\n },\r\n {\r\n label: \"Palau\",\r\n code: \"PW\",\r\n phone: \"680\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"### ####\",\r\n },\r\n {\r\n label: \"Palestinian Territory Occupied\",\r\n code: \"PS\",\r\n phone: \"970\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Panama\",\r\n code: \"PA\",\r\n phone: \"507\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Papua New Guinea\",\r\n code: \"PG\",\r\n phone: \"675\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"### ## ###\",\r\n },\r\n {\r\n label: \"Paraguay\",\r\n code: \"PY\",\r\n phone: \"595\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Peru\",\r\n code: \"PE\",\r\n phone: \"51\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Philippines\",\r\n code: \"PH\",\r\n phone: \"63\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"### ### ####\",\r\n },\r\n {\r\n label: \"Pitcairn Island\",\r\n code: \"PN\",\r\n phone: \"870\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Poland\",\r\n code: \"PL\",\r\n phone: \"48\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Portugal\",\r\n code: \"PT\",\r\n phone: \"351\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Puerto Rico\",\r\n code: \"PR\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Qatar\",\r\n code: \"QA\",\r\n phone: \"974\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Reunion\",\r\n code: \"RE\",\r\n phone: \"262\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"##### #####\",\r\n },\r\n {\r\n label: \"Romania\",\r\n code: \"RO\",\r\n phone: \"40\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Russia\",\r\n code: \"RU\",\r\n phone: \"7\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"### ### ## ##\",\r\n },\r\n {\r\n label: \"Rwanda\",\r\n code: \"RW\",\r\n phone: \"250\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Saint Helena\",\r\n code: \"SH\",\r\n phone: \"290\",\r\n pattern: \"^[0-9]{4}$\",\r\n mask: \"####\",\r\n },\r\n {\r\n label: \"Saint Kitts and Nevis\",\r\n code: \"KN\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Saint Lucia\",\r\n code: \"LC\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Saint Pierre and Miquelon\",\r\n code: \"PM\",\r\n phone: \"508\",\r\n pattern: \"^[0-9]{6}$\",\r\n mask: \"## ###\",\r\n },\r\n {\r\n label: \"Saint Vincent and the Grenadines\",\r\n code: \"VC\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Saint-Barthelemy\",\r\n code: \"BL\",\r\n phone: \"590\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"##### #####\",\r\n },\r\n {\r\n label: \"Saint-Martin (French part)\",\r\n code: \"MF\",\r\n phone: \"590\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"##### #####\",\r\n },\r\n {\r\n label: \"Samoa\",\r\n code: \"WS\",\r\n phone: \"685\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"## ####\",\r\n },\r\n {\r\n label: \"San Marino\",\r\n code: \"SM\",\r\n phone: \"378\",\r\n pattern: \"^[0-9]{10,12}$\",\r\n mask: \"#### ######\",\r\n },\r\n {\r\n label: \"Sao Tome and Principe\",\r\n code: \"ST\",\r\n phone: \"239\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"### ####\",\r\n },\r\n {\r\n label: \"Saudi Arabia\",\r\n code: \"SA\",\r\n phone: \"966\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ####\",\r\n },\r\n {\r\n label: \"Senegal\",\r\n code: \"SN\",\r\n phone: \"221\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Serbia\",\r\n code: \"RS\",\r\n phone: \"381\",\r\n pattern: \"^[0-9]{8,9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Seychelles\",\r\n code: \"SC\",\r\n phone: \"248\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"### ####\",\r\n },\r\n {\r\n label: \"Sierra Leone\",\r\n code: \"SL\",\r\n phone: \"232\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ######\",\r\n },\r\n {\r\n label: \"Singapore\",\r\n code: \"SG\",\r\n phone: \"65\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Sint Maarten (Dutch part)\",\r\n code: \"SX\",\r\n phone: \"1721\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Slovakia\",\r\n code: \"SK\",\r\n phone: \"421\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Slovenia\",\r\n code: \"SI\",\r\n phone: \"386\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"Solomon Islands\",\r\n code: \"SB\",\r\n phone: \"677\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"##### ##\",\r\n },\r\n {\r\n label: \"Somalia\",\r\n code: \"SO\",\r\n phone: \"252\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"South Africa\",\r\n code: \"ZA\",\r\n phone: \"27\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"South Georgia\",\r\n code: \"GS\",\r\n phone: \"500\",\r\n pattern: \"^[0-9]{5}$\",\r\n mask: \"#####\",\r\n },\r\n {\r\n label: \"South Korea\",\r\n code: \"KR\",\r\n phone: \"82\",\r\n pattern: \"^[0-9]{9,10}$\",\r\n mask: \"## #### ####\",\r\n },\r\n {\r\n label: \"South Sudan\",\r\n code: \"SS\",\r\n phone: \"211\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Spain\",\r\n code: \"ES\",\r\n phone: \"34\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Sri Lanka\",\r\n code: \"LK\",\r\n phone: \"94\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Sudan\",\r\n code: \"SD\",\r\n phone: \"249\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Suriname\",\r\n code: \"SR\",\r\n phone: \"597\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"### ####\",\r\n },\r\n {\r\n label: \"Svalbard and Jan Mayen Islands\",\r\n code: \"SJ\",\r\n phone: \"47\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"### ## ###\",\r\n },\r\n {\r\n label: \"Sweden\",\r\n code: \"SE\",\r\n phone: \"46\",\r\n pattern: \"^[0-9]{9,10}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Switzerland\",\r\n code: \"CH\",\r\n phone: \"41\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Syria\",\r\n code: \"SY\",\r\n phone: \"963\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## #### ###\",\r\n },\r\n {\r\n label: \"Taiwan\",\r\n code: \"TW\",\r\n phone: \"886\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Tajikistan\",\r\n code: \"TJ\",\r\n phone: \"992\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ## ####\",\r\n },\r\n {\r\n label: \"Tanzania\",\r\n code: \"TZ\",\r\n phone: \"255\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Thailand\",\r\n code: \"TH\",\r\n phone: \"66\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"The Bahamas\",\r\n code: \"BS\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"The Gambia\",\r\n code: \"GM\",\r\n phone: \"220\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"### ####\",\r\n },\r\n {\r\n label: \"Timor-Leste\",\r\n code: \"TL\",\r\n phone: \"670\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Togo\",\r\n code: \"TG\",\r\n phone: \"228\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ## ####\",\r\n },\r\n {\r\n label: \"Tokelau\",\r\n code: \"TK\",\r\n phone: \"690\",\r\n pattern: \"^[0-9]{4}$\",\r\n mask: \"####\",\r\n },\r\n {\r\n label: \"Tonga\",\r\n code: \"TO\",\r\n phone: \"676\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"##### ##\",\r\n },\r\n {\r\n label: \"Trinidad and Tobago\",\r\n code: \"TT\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Tunisia\",\r\n code: \"TN\",\r\n phone: \"216\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"Turkey\",\r\n code: \"TR\",\r\n phone: \"90\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"### ### ####\",\r\n },\r\n {\r\n label: \"Turkmenistan\",\r\n code: \"TM\",\r\n phone: \"993\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## #### ##\",\r\n },\r\n {\r\n label: \"Turks and Caicos Islands\",\r\n code: \"TC\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Tuvalu\",\r\n code: \"TV\",\r\n phone: \"688\",\r\n pattern: \"^[0-9]{5}$\",\r\n mask: \"#####\",\r\n },\r\n {\r\n label: \"Uganda\",\r\n code: \"UG\",\r\n phone: \"256\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Ukraine\",\r\n code: \"UA\",\r\n phone: \"380\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ## ##\",\r\n },\r\n {\r\n label: \"United Arab Emirates\",\r\n code: \"AE\",\r\n phone: \"971\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"United Kingdom\",\r\n code: \"GB\",\r\n phone: \"44\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"#### ######\",\r\n },\r\n {\r\n label: \"United States\",\r\n code: \"US\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"United States Minor Outlying Islands\",\r\n code: \"UM\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Uruguay\",\r\n code: \"UY\",\r\n phone: \"598\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"Uzbekistan\",\r\n code: \"UZ\",\r\n phone: \"998\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ## ##\",\r\n },\r\n {\r\n label: \"Vanuatu\",\r\n code: \"VU\",\r\n phone: \"678\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"##### ##\",\r\n },\r\n {\r\n label: \"Vatican City State (Holy See)\",\r\n code: \"VA\",\r\n phone: \"379\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"## #### ####\",\r\n },\r\n {\r\n label: \"Venezuela\",\r\n code: \"VE\",\r\n phone: \"58\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"### ### ####\",\r\n },\r\n {\r\n label: \"Vietnam\",\r\n code: \"VN\",\r\n phone: \"84\",\r\n pattern: \"^[0-9]{9,10}$\",\r\n mask: \"## #### ###\",\r\n },\r\n {\r\n label: \"Virgin Islands (British)\",\r\n code: \"VG\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Virgin Islands (US)\",\r\n code: \"VI\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Wallis and Futuna Islands\",\r\n code: \"WF\",\r\n phone: \"681\",\r\n pattern: \"^[0-9]{6}$\",\r\n mask: \"## ####\",\r\n },\r\n {\r\n label: \"Western Sahara\",\r\n code: \"EH\",\r\n phone: \"212\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## #### ###\",\r\n },\r\n {\r\n label: \"Yemen\",\r\n code: \"YE\",\r\n phone: \"967\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Zambia\",\r\n code: \"ZM\",\r\n phone: \"260\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Zimbabwe\",\r\n code: \"ZW\",\r\n phone: \"263\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n];\r\n","import React, { useState, useEffect, useRef } from \"react\";\r\nimport { ChevronDown, Search, Check } from \"lucide-react\";\r\nimport { createPortal } from \"react-dom\";\r\nimport InputLabel from \"./InputLabel\";\r\nimport { countries } from \"../../../data/countries\";\r\nimport { crudClasses, joinClasses } from \"../../../lib/crudClasses\";\r\n\r\ninterface SelectOption {\r\n label: string;\r\n value: any;\r\n code?: string;\r\n}\r\n\r\ninterface SelectProps {\r\n options?:\r\n | SelectOption[]\r\n | ((\r\n formData: Record<string, any>,\r\n ) => Promise<SelectOption[]> | SelectOption[]);\r\n value: any;\r\n defaultValue?: any;\r\n onChange: (value: any) => void;\r\n placeholder?: string;\r\n className?: string;\r\n disabled?: boolean;\r\n search?: boolean;\r\n label?: React.ReactNode;\r\n required?: boolean;\r\n name: string;\r\n parentClass?: string;\r\n multiple?: boolean;\r\n dropdownMaxHeight?: string | number;\r\n formData: Record<string, any>;\r\n dependencyKey?: string;\r\n countriesList?: boolean;\r\n errorMessage?: string;\r\n}\r\n\r\nconst Select = ({\r\n options = [],\r\n value = \"\",\r\n defaultValue = \"\",\r\n onChange,\r\n placeholder = \"Select option\",\r\n className = \"\",\r\n disabled = false,\r\n search = false,\r\n label = \"\",\r\n required = false,\r\n name = \"\",\r\n parentClass = \"\",\r\n multiple = false,\r\n dropdownMaxHeight = \"\",\r\n formData = {},\r\n countriesList = false,\r\n dependencyKey = \"\",\r\n errorMessage = \"\",\r\n}: SelectProps) => {\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<HTMLDivElement | null>(null);\r\n const optionsPanelRef = useRef<HTMLDivElement | null>(null);\r\n const searchInputRef = useRef<HTMLInputElement | null>(null);\r\n const [normalizedOptions, setNormalizedOptions] = useState<SelectOption[]>(\r\n [],\r\n );\r\n const [dropdownPosition, setDropdownPosition] = useState({\r\n top: 0,\r\n left: 0,\r\n width: 0,\r\n });\r\n\r\n const dropdownPortalTarget =\r\n typeof document !== \"undefined\"\r\n ? (dropdownRef.current?.closest(\".racm-root\") as HTMLElement | null) ||\r\n document.body\r\n : null;\r\n\r\n const initialVal = value || value === false ? value : defaultValue;\r\n\r\n const normalize = (val: any) => {\r\n if (val === null || val === undefined || val === \"\") return \"\";\r\n return typeof val === \"boolean\" ? String(val) : String(val ?? \"\");\r\n };\r\n\r\n const getCountrieslist = () => {\r\n const list = countries.map((obj) => ({\r\n value: obj.label,\r\n label: obj.label,\r\n code: obj.code,\r\n }));\r\n return list;\r\n };\r\n\r\n useEffect(\r\n () => {\r\n const loadOptions = async () => {\r\n if (countriesList == true) {\r\n setNormalizedOptions(getCountrieslist());\r\n } else if (typeof options === \"function\") {\r\n const result = await options(formData);\r\n setNormalizedOptions(result || []);\r\n } else {\r\n setNormalizedOptions(options || []);\r\n }\r\n };\r\n\r\n loadOptions();\r\n },\r\n dependencyKey ? [options, formData?.[dependencyKey]] : [options],\r\n );\r\n\r\n const normalizedValue = multiple\r\n ? (initialVal || []).map(normalize)\r\n : normalize(initialVal);\r\n\r\n const filteredOptions = normalizedOptions.filter((option) =>\r\n option.label.toLowerCase().includes(searchTerm.toLowerCase()),\r\n );\r\n\r\n const isSelected = (optionValue: any) => {\r\n const normalized = normalize(optionValue);\r\n if (multiple) {\r\n return (normalizedValue as string[]).includes(normalized);\r\n }\r\n return normalized === normalizedValue;\r\n };\r\n\r\n useEffect(() => {\r\n const handleClickOutside = (event: MouseEvent) => {\r\n if (\r\n dropdownRef.current &&\r\n !dropdownRef.current.contains(event.target as Node) &&\r\n !optionsPanelRef.current?.contains(event.target as Node)\r\n ) {\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) return;\r\n\r\n const updateDropdownPosition = () => {\r\n if (!dropdownRef.current) return;\r\n\r\n const rect = dropdownRef.current.getBoundingClientRect();\r\n const viewportHeight = window.innerHeight;\r\n const spaceBelow = viewportHeight - rect.bottom;\r\n const maxDropdownHeight =\r\n typeof dropdownMaxHeight === \"number\" ? dropdownMaxHeight : 200;\r\n const shouldShowAbove = spaceBelow < maxDropdownHeight;\r\n\r\n setShowAboveState(shouldShowAbove);\r\n setDropdownPosition({\r\n top: shouldShowAbove ? rect.top - 4 : rect.bottom + 4,\r\n left: rect.left,\r\n width: rect.width,\r\n });\r\n };\r\n\r\n updateDropdownPosition();\r\n window.addEventListener(\"resize\", updateDropdownPosition);\r\n window.addEventListener(\"scroll\", updateDropdownPosition, true);\r\n\r\n return () => {\r\n window.removeEventListener(\"resize\", updateDropdownPosition);\r\n window.removeEventListener(\"scroll\", updateDropdownPosition, true);\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: any) => {\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 as string[]).includes(\r\n normalize(optionValue),\r\n );\r\n\r\n let newValues: any[];\r\n if (exists) {\r\n newValues = (Array.isArray(value) ? value : []).filter(\r\n (v) => normalize(v) !== normalize(optionValue),\r\n );\r\n } else {\r\n newValues = [...(Array.isArray(value) ? value : []), finalValue];\r\n }\r\n\r\n onChange?.(newValues);\r\n } else {\r\n onChange?.(finalValue);\r\n setOpen(false);\r\n }\r\n\r\n setSearchTerm(\"\");\r\n };\r\n\r\n const selectedLabels = multiple\r\n ? normalizedOptions\r\n .filter((opt) => isSelected(opt.value))\r\n .map((opt) => opt.label)\r\n .join(\", \")\r\n : normalizedOptions.find((opt) => isSelected(opt.value))?.label;\r\n\r\n useEffect(() => {\r\n if (initialVal || initialVal === false) {\r\n setTimeout(() => {\r\n onChange?.(initialVal);\r\n }, 100);\r\n }\r\n }, []);\r\n\r\n return (\r\n <div\r\n key={name}\r\n className={joinClasses(\r\n crudClasses.field.wrapper,\r\n parentClass || \"col-span-12\",\r\n )}\r\n >\r\n <InputLabel label={label} required={required} />\r\n\r\n <div\r\n className={joinClasses(crudClasses.field.input, \"relative\", className)}\r\n ref={dropdownRef}\r\n >\r\n <select\r\n name=\"hidden_select_for_validation\"\r\n value={\r\n multiple\r\n ? selectedLabels\r\n ? selectedLabels.split(\", \")\r\n : []\r\n : selectedLabels || \"\"\r\n }\r\n required={required}\r\n multiple={multiple}\r\n id={`field-${name}`}\r\n className=\"absolute opacity-0 right-1/2 top-[80%] -translate-x-1/2 -translate-y-1/2 pointer-events-none h-[10px]\"\r\n onChange={() => {}}\r\n >\r\n {multiple ? (\r\n selectedLabels?.split(\", \").map((label) => (\r\n <option key={label} value={label}>\r\n {label}\r\n </option>\r\n ))\r\n ) : (\r\n <option hidden value={selectedLabels}>\r\n {selectedLabels}\r\n </option>\r\n )}\r\n </select>\r\n <button\r\n type=\"button\"\r\n onClick={() => !disabled && setOpen(!open)}\r\n disabled={disabled}\r\n className={`w-full h-10 px-3 border border-gray-300 dark:border-gray-600 rounded-md text-left text-sm flex items-center justify-between \r\n ${\r\n !selectedLabels\r\n ? \"text-gray-500 dark:text-gray-400\"\r\n : \"dark:text-white\"\r\n } \r\n ${disabled ? \"opacity-50 cursor-not-allowed\" : \"dark:bg-gray-700\"}\r\n ${errorMessage ? \"border-red-500\" : \"\"}`}\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 dropdownPortalTarget &&\r\n createPortal(\r\n <div\r\n ref={optionsPanelRef}\r\n className=\"fixed z-50 border rounded-md bg-white dark:bg-gray-700 shadow-lg\"\r\n style={{\r\n top: dropdownPosition.top,\r\n left: dropdownPosition.left,\r\n width: dropdownPosition.width,\r\n transform: showAboveState ? \"translateY(-100%)\" : undefined,\r\n }}\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 <div className=\"flex gap-2 items-center\">\r\n {countriesList && option?.code && (\r\n <img\r\n src={`https://flagcdn.com/w20/${option?.code.toLowerCase()}.png`}\r\n alt={option.code}\r\n className=\"w-5 h-3 object-cover\"\r\n />\r\n )}\r\n <span>{option.label}</span>\r\n </div>\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 dropdownPortalTarget,\r\n )}\r\n </div>\r\n {errorMessage && (\r\n <span\r\n className={joinClasses(\r\n crudClasses.field.error,\r\n \"text-red-500 text-xs mt-1\",\r\n )}\r\n >\r\n {errorMessage}\r\n </span>\r\n )}\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\nimport { crudClasses, joinClasses } from \"../../../lib/crudClasses\";\r\n\r\ninterface SwitchProps {\r\n label?: React.ReactNode;\r\n required?: boolean;\r\n parentClass?: string;\r\n className?: string;\r\n value: boolean;\r\n onChange: (checked: boolean) => void;\r\n disabled?: boolean;\r\n name: string;\r\n errorMessage?: string;\r\n}\r\n\r\nconst Switch = React.forwardRef<HTMLInputElement, SwitchProps>(\r\n (\r\n {\r\n label,\r\n required,\r\n parentClass = \"col-span-12\",\r\n className = \"\",\r\n value = false,\r\n onChange,\r\n disabled = false,\r\n errorMessage = \"\",\r\n name,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n return (\r\n <div\r\n className={joinClasses(\r\n crudClasses.field.wrapper,\r\n \"flex justify-between\",\r\n parentClass,\r\n )}\r\n >\r\n {label && <InputLabel label={label} required={required} />}\r\n\r\n <label className=\"relative inline-flex items-center cursor-pointer\">\r\n <input\r\n type=\"checkbox\"\r\n ref={ref}\r\n id={`field-${name}`}\r\n className={joinClasses(crudClasses.field.input, \"sr-only peer\")}\r\n checked={value}\r\n onChange={(e) => onChange?.(e.target.checked)}\r\n disabled={disabled}\r\n {...props}\r\n />\r\n\r\n <div\r\n className={`\r\n w-11 h-6 bg-gray-200 peer-focus:outline-none\r\n rounded-full peer dark:bg-gray-700\r\n peer-checked:bg-primary-600\r\n peer-disabled:opacity-50 peer-disabled:cursor-not-allowed\r\n transition-colors duration-200\r\n ${errorMessage ? \"border-red-500\" : \"\"}\r\n ${className}\r\n `}\r\n ></div>\r\n\r\n <div\r\n className=\"\r\n absolute left-1 top-1\r\n w-4 h-4 bg-white rounded-full\r\n transition-transform duration-200\r\n peer-checked:translate-x-5\r\n \"\r\n ></div>\r\n </label>\r\n {errorMessage && (\r\n <span\r\n className={joinClasses(\r\n crudClasses.field.error,\r\n \"text-red-500 text-xs mt-1\",\r\n )}\r\n >\r\n {errorMessage}\r\n </span>\r\n )}\r\n </div>\r\n );\r\n },\r\n);\r\n\r\nSwitch.displayName = \"Switch\";\r\n\r\nexport { Switch };\r\n","import React, { useState, useEffect, useRef } from \"react\";\r\nimport { countries, CountryInterface } from \"../../../data/countries\";\r\nimport { ChevronDown, Search } from \"lucide-react\";\r\nimport { createPortal } from \"react-dom\";\r\nimport InputLabel from \"./InputLabel\";\r\nimport { crudClasses, joinClasses } from \"../../../lib/crudClasses\";\r\n\r\ninterface PhoneInputProps {\r\n label?: string;\r\n value: string;\r\n name: string;\r\n parentClass?: string;\r\n onChange: (value: string) => void;\r\n disabled?: boolean;\r\n required?: boolean;\r\n placeholder?: string;\r\n search?: boolean;\r\n countriesList?: boolean;\r\n defaultCountry?: string;\r\n errorMessage?: string;\r\n}\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 errorMessage = \"\",\r\n}: PhoneInputProps) {\r\n const find_country_with_code = (countryCode: string) => {\r\n return (countries as CountryInterface[]).find(\r\n (obj) => obj.code == countryCode,\r\n );\r\n };\r\n\r\n const [selectedCountry, setSelectedCountry] = useState<CountryInterface>(\r\n find_country_with_code(defaultCountry) ||\r\n (countries as CountryInterface[])[0],\r\n );\r\n const [fullNumber, setFullNumber] = useState(\"\");\r\n const [localValue, setLocalValue] = useState(\"\");\r\n const [open, setOpen] = useState(false);\r\n const [searchTerm, setSearchTerm] = useState(\"\");\r\n const dropdownRef = useRef<HTMLDivElement | null>(null);\r\n const optionsPanelRef = useRef<HTMLDivElement | null>(null);\r\n const [dropdownPosition, setDropdownPosition] = useState({\r\n top: 0,\r\n left: 0,\r\n width: 0,\r\n });\r\n\r\n const dropdownPortalTarget =\r\n typeof document !== \"undefined\"\r\n ? (dropdownRef.current?.closest(\".racm-root\") as HTMLElement | null) ||\r\n document.body\r\n : null;\r\n\r\n // Apply mask to phone number\r\n const applyMask = (digits: string, mask: string): string => {\r\n let result = \"\";\r\n let digitIndex = 0;\r\n\r\n for (let i = 0; i < mask.length && digitIndex < digits.length; i++) {\r\n if (mask[i] === \"#\") {\r\n result += digits[digitIndex];\r\n digitIndex++;\r\n } else {\r\n result += mask[i];\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n // Handle input change\r\n const handleNumberChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const rawValue = e.target.value;\r\n const digits = rawValue.replace(/\\D/g, \"\");\r\n\r\n if (countriesList && selectedCountry?.mask) {\r\n // Apply mask\r\n const maskedValue = applyMask(digits, selectedCountry.mask);\r\n setLocalValue(maskedValue);\r\n onChange?.(\"+\" + selectedCountry.phone + \" \" + maskedValue);\r\n\r\n // Update parent with unmasked value\r\n const unmaskedValue = maskedValue.replace(/\\D/g, \"\");\r\n setFullNumber(unmaskedValue);\r\n } else {\r\n // No mask, just update with digits\r\n setLocalValue(digits);\r\n setFullNumber(digits);\r\n if (selectedCountry && onChange) {\r\n onChange(\"+\" + selectedCountry.phone + \" \" + digits);\r\n } else {\r\n onChange?.(digits);\r\n }\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (typeof value === \"string\" && value.startsWith(\"+\")) {\r\n const match = (countries as CountryInterface[])\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 let rawValue = value.replace(\"+\" + match.phone, \"\").replaceAll(\" \", \"\");\r\n setFullNumber(rawValue);\r\n setLocalValue(applyMask(rawValue, match.mask));\r\n return;\r\n }\r\n }\r\n setFullNumber(value || \"\");\r\n setLocalValue(value || \"\");\r\n }, []);\r\n\r\n const handleCountrySelect = (country: CountryInterface) => {\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 useEffect(() => {\r\n const handleClickOutside = (e: MouseEvent) => {\r\n if (\r\n dropdownRef.current &&\r\n !dropdownRef.current.contains(e.target as Node) &&\r\n !optionsPanelRef.current?.contains(e.target as Node)\r\n )\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 useEffect(() => {\r\n if (!open || !dropdownRef.current) return;\r\n\r\n const updateDropdownPosition = () => {\r\n if (!dropdownRef.current) return;\r\n\r\n const rect = dropdownRef.current.getBoundingClientRect();\r\n setDropdownPosition({\r\n top: rect.bottom + 4,\r\n left: rect.left,\r\n width: rect.width,\r\n });\r\n };\r\n\r\n updateDropdownPosition();\r\n window.addEventListener(\"resize\", updateDropdownPosition);\r\n window.addEventListener(\"scroll\", updateDropdownPosition, true);\r\n\r\n return () => {\r\n window.removeEventListener(\"resize\", updateDropdownPosition);\r\n window.removeEventListener(\"scroll\", updateDropdownPosition, true);\r\n };\r\n }, [open]);\r\n\r\n const filteredCountries = (countries as CountryInterface[]).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: React.ChangeEvent<HTMLInputElement>) => {\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\r\n key={name}\r\n className={joinClasses(\r\n crudClasses.field.wrapper,\r\n parentClass || \"col-span-12\",\r\n )}\r\n >\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\r\n key={name}\r\n className={joinClasses(\r\n crudClasses.field.wrapper,\r\n parentClass || \"col-span-12\",\r\n )}\r\n >\r\n <InputLabel label={label} required={required} />\r\n <div className=\"relative \" ref={dropdownRef}>\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 ${errorMessage ? \"border-red-500\" : \"\"}`}\r\n >\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 {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 <input\r\n type=\"tel\"\r\n value={localValue}\r\n onChange={handleNumberChange}\r\n required={required}\r\n id={`field-${name}`}\r\n disabled={disabled || !selectedCountry}\r\n placeholder={\r\n !selectedCountry\r\n ? \"Select a country\"\r\n : placeholder || \"Enter phone number\"\r\n }\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 // pattern={selectedCountry?.pattern}\r\n />\r\n\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 onChange={() => {}}\r\n />\r\n </div>\r\n\r\n {open &&\r\n dropdownPortalTarget &&\r\n createPortal(\r\n <div\r\n ref={optionsPanelRef}\r\n className=\"fixed 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 style={{\r\n top: dropdownPosition.top,\r\n left: dropdownPosition.left,\r\n width: dropdownPosition.width,\r\n }}\r\n >\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 dropdownPortalTarget,\r\n )}\r\n </div>\r\n {errorMessage && (\r\n <span\r\n className={joinClasses(\r\n crudClasses.field.error,\r\n \"text-red-500 text-xs mt-1\",\r\n )}\r\n >\r\n {errorMessage}\r\n </span>\r\n )}\r\n </div>\r\n </>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport InputLabel from \"./InputLabel\";\r\nimport { crudClasses, joinClasses } from \"../../../lib/crudClasses\";\r\n\r\ninterface TextAreaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\r\n label?: React.ReactNode;\r\n required?: boolean;\r\n parentClass?: string;\r\n className?: string;\r\n errorMessage?: string;\r\n name: string;\r\n}\r\n\r\nconst TextArea = React.forwardRef<HTMLTextAreaElement, TextAreaProps>(\r\n (\r\n { className = \"\", label, required, errorMessage = \"\", name, ...props },\r\n ref,\r\n ) => {\r\n const combinedClassName = joinClasses(\r\n crudClasses.field.input,\r\n \"placeholder-gray-400 dark:placeholder-gray-400\",\r\n errorMessage ? \"border-red-500\" : \"\",\r\n className,\r\n );\r\n\r\n return (\r\n <>\r\n <div\r\n key={name}\r\n className={joinClasses(\r\n crudClasses.field.wrapper,\r\n props.parentClass || \"col-span-12\",\r\n )}\r\n >\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 id={`field-${name}`}\r\n required={required}\r\n {...props}\r\n />\r\n {errorMessage && (\r\n <span\r\n className={joinClasses(\r\n crudClasses.field.error,\r\n \"text-red-500 text-xs mt-1\",\r\n )}\r\n >\r\n {errorMessage}\r\n </span>\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","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","/**\n * Copyright 2004-present Facebook. All Rights Reserved.\n *\n * @providesModule UserAgent_DEPRECATED\n */\n\n/**\n * Provides entirely client-side User Agent and OS detection. You should prefer\n * the non-deprecated UserAgent module when possible, which exposes our\n * authoritative server-side PHP-based detection to the client.\n *\n * Usage is straightforward:\n *\n * if (UserAgent_DEPRECATED.ie()) {\n * // IE\n * }\n *\n * You can also do version checks:\n *\n * if (UserAgent_DEPRECATED.ie() >= 7) {\n * // IE7 or better\n * }\n *\n * The browser functions will return NaN if the browser does not match, so\n * you can also do version compares the other way:\n *\n * if (UserAgent_DEPRECATED.ie() < 7) {\n * // IE6 or worse\n * }\n *\n * Note that the version is a float and may include a minor version number,\n * so you should always use range operators to perform comparisons, not\n * strict equality.\n *\n * **Note:** You should **strongly** prefer capability detection to browser\n * version detection where it's reasonable:\n *\n * http://www.quirksmode.org/js/support.html\n *\n * Further, we have a large number of mature wrapper functions and classes\n * which abstract away many browser irregularities. Check the documentation,\n * grep for things, or ask on javascript@lists.facebook.com before writing yet\n * another copy of \"event || window.event\".\n *\n */\n\nvar _populated = false;\n\n// Browsers\nvar _ie, _firefox, _opera, _webkit, _chrome;\n\n// Actual IE browser for compatibility mode\nvar _ie_real_version;\n\n// Platforms\nvar _osx, _windows, _linux, _android;\n\n// Architectures\nvar _win64;\n\n// Devices\nvar _iphone, _ipad, _native;\n\nvar _mobile;\n\nfunction _populate() {\n if (_populated) {\n return;\n }\n\n _populated = true;\n\n // To work around buggy JS libraries that can't handle multi-digit\n // version numbers, Opera 10's user agent string claims it's Opera\n // 9, then later includes a Version/X.Y field:\n //\n // Opera/9.80 (foo) Presto/2.2.15 Version/10.10\n var uas = navigator.userAgent;\n var agent = /(?:MSIE.(\\d+\\.\\d+))|(?:(?:Firefox|GranParadiso|Iceweasel).(\\d+\\.\\d+))|(?:Opera(?:.+Version.|.)(\\d+\\.\\d+))|(?:AppleWebKit.(\\d+(?:\\.\\d+)?))|(?:Trident\\/\\d+\\.\\d+.*rv:(\\d+\\.\\d+))/.exec(uas);\n var os = /(Mac OS X)|(Windows)|(Linux)/.exec(uas);\n\n _iphone = /\\b(iPhone|iP[ao]d)/.exec(uas);\n _ipad = /\\b(iP[ao]d)/.exec(uas);\n _android = /Android/i.exec(uas);\n _native = /FBAN\\/\\w+;/i.exec(uas);\n _mobile = /Mobile/i.exec(uas);\n\n // Note that the IE team blog would have you believe you should be checking\n // for 'Win64; x64'. But MSDN then reveals that you can actually be coming\n // from either x64 or ia64; so ultimately, you should just check for Win64\n // as in indicator of whether you're in 64-bit IE. 32-bit IE on 64-bit\n // Windows will send 'WOW64' instead.\n _win64 = !!(/Win64/.exec(uas));\n\n if (agent) {\n _ie = agent[1] ? parseFloat(agent[1]) : (\n agent[5] ? parseFloat(agent[5]) : NaN);\n // IE compatibility mode\n if (_ie && document && document.documentMode) {\n _ie = document.documentMode;\n }\n // grab the \"true\" ie version from the trident token if available\n var trident = /(?:Trident\\/(\\d+.\\d+))/.exec(uas);\n _ie_real_version = trident ? parseFloat(trident[1]) + 4 : _ie;\n\n _firefox = agent[2] ? parseFloat(agent[2]) : NaN;\n _opera = agent[3] ? parseFloat(agent[3]) : NaN;\n _webkit = agent[4] ? parseFloat(agent[4]) : NaN;\n if (_webkit) {\n // We do not add the regexp to the above test, because it will always\n // match 'safari' only since 'AppleWebKit' appears before 'Chrome' in\n // the userAgent string.\n agent = /(?:Chrome\\/(\\d+\\.\\d+))/.exec(uas);\n _chrome = agent && agent[1] ? parseFloat(agent[1]) : NaN;\n } else {\n _chrome = NaN;\n }\n } else {\n _ie = _firefox = _opera = _chrome = _webkit = NaN;\n }\n\n if (os) {\n if (os[1]) {\n // Detect OS X version. If no version number matches, set _osx to true.\n // Version examples: 10, 10_6_1, 10.7\n // Parses version number as a float, taking only first two sets of\n // digits. If only one set of digits is found, returns just the major\n // version number.\n var ver = /(?:Mac OS X (\\d+(?:[._]\\d+)?))/.exec(uas);\n\n _osx = ver ? parseFloat(ver[1].replace('_', '.')) : true;\n } else {\n _osx = false;\n }\n _windows = !!os[2];\n _linux = !!os[3];\n } else {\n _osx = _windows = _linux = false;\n }\n}\n\nvar UserAgent_DEPRECATED = {\n\n /**\n * Check if the UA is Internet Explorer.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n ie: function() {\n return _populate() || _ie;\n },\n\n /**\n * Check if we're in Internet Explorer compatibility mode.\n *\n * @return bool true if in compatibility mode, false if\n * not compatibility mode or not ie\n */\n ieCompatibilityMode: function() {\n return _populate() || (_ie_real_version > _ie);\n },\n\n\n /**\n * Whether the browser is 64-bit IE. Really, this is kind of weak sauce; we\n * only need this because Skype can't handle 64-bit IE yet. We need to remove\n * this when we don't need it -- tracked by #601957.\n */\n ie64: function() {\n return UserAgent_DEPRECATED.ie() && _win64;\n },\n\n /**\n * Check if the UA is Firefox.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n firefox: function() {\n return _populate() || _firefox;\n },\n\n\n /**\n * Check if the UA is Opera.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n opera: function() {\n return _populate() || _opera;\n },\n\n\n /**\n * Check if the UA is WebKit.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n webkit: function() {\n return _populate() || _webkit;\n },\n\n /**\n * For Push\n * WILL BE REMOVED VERY SOON. Use UserAgent_DEPRECATED.webkit\n */\n safari: function() {\n return UserAgent_DEPRECATED.webkit();\n },\n\n /**\n * Check if the UA is a Chrome browser.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n chrome : function() {\n return _populate() || _chrome;\n },\n\n\n /**\n * Check if the user is running Windows.\n *\n * @return bool `true' if the user's OS is Windows.\n */\n windows: function() {\n return _populate() || _windows;\n },\n\n\n /**\n * Check if the user is running Mac OS X.\n *\n * @return float|bool Returns a float if a version number is detected,\n * otherwise true/false.\n */\n osx: function() {\n return _populate() || _osx;\n },\n\n /**\n * Check if the user is running Linux.\n *\n * @return bool `true' if the user's OS is some flavor of Linux.\n */\n linux: function() {\n return _populate() || _linux;\n },\n\n /**\n * Check if the user is running on an iPhone or iPod platform.\n *\n * @return bool `true' if the user is running some flavor of the\n * iPhone OS.\n */\n iphone: function() {\n return _populate() || _iphone;\n },\n\n mobile: function() {\n return _populate() || (_iphone || _ipad || _android || _mobile);\n },\n\n nativeApp: function() {\n // webviews inside of the native apps\n return _populate() || _native;\n },\n\n android: function() {\n return _populate() || _android;\n },\n\n ipad: function() {\n return _populate() || _ipad;\n }\n};\n\nmodule.exports = UserAgent_DEPRECATED;\n","/**\n * Copyright (c) 2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ExecutionEnvironment\n */\n\n/*jslint evil: true */\n\n'use strict';\n\nvar canUseDOM = !!(\n typeof window !== 'undefined' &&\n window.document &&\n window.document.createElement\n);\n\n/**\n * Simple, lightweight module assisting with the detection and context of\n * Worker. Helps avoid circular dependencies and allows code to reason about\n * whether or not they are in a Worker, even if they never include the main\n * `ReactWorker` dependency.\n */\nvar ExecutionEnvironment = {\n\n canUseDOM: canUseDOM,\n\n canUseWorkers: typeof Worker !== 'undefined',\n\n canUseEventListeners:\n canUseDOM && !!(window.addEventListener || window.attachEvent),\n\n canUseViewport: canUseDOM && !!window.screen,\n\n isInWorker: !canUseDOM // For now, this is true - might change in the future.\n\n};\n\nmodule.exports = ExecutionEnvironment;\n","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule isEventSupported\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar useHasFeature;\nif (ExecutionEnvironment.canUseDOM) {\n useHasFeature =\n document.implementation &&\n document.implementation.hasFeature &&\n // always returns true in newer browsers as per the standard.\n // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n document.implementation.hasFeature('', '') !== true;\n}\n\n/**\n * Checks if an event is supported in the current execution environment.\n *\n * NOTE: This will not work correctly for non-generic events such as `change`,\n * `reset`, `load`, `error`, and `select`.\n *\n * Borrows from Modernizr.\n *\n * @param {string} eventNameSuffix Event name, e.g. \"click\".\n * @param {?boolean} capture Check if the capture phase is supported.\n * @return {boolean} True if the event is supported.\n * @internal\n * @license Modernizr 3.0.0pre (Custom Build) | MIT\n */\nfunction isEventSupported(eventNameSuffix, capture) {\n if (!ExecutionEnvironment.canUseDOM ||\n capture && !('addEventListener' in document)) {\n return false;\n }\n\n var eventName = 'on' + eventNameSuffix;\n var isSupported = eventName in document;\n\n if (!isSupported) {\n var element = document.createElement('div');\n element.setAttribute(eventName, 'return;');\n isSupported = typeof element[eventName] === 'function';\n }\n\n if (!isSupported && useHasFeature && eventNameSuffix === 'wheel') {\n // This is the only way to test support for the `wheel` event in IE9+.\n isSupported = document.implementation.hasFeature('Events.wheel', '3.0');\n }\n\n return isSupported;\n}\n\nmodule.exports = isEventSupported;\n","/**\n * Copyright (c) 2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule normalizeWheel\n * @typechecks\n */\n\n'use strict';\n\nvar UserAgent_DEPRECATED = require('./UserAgent_DEPRECATED');\n\nvar isEventSupported = require('./isEventSupported');\n\n\n// Reasonable defaults\nvar PIXEL_STEP = 10;\nvar LINE_HEIGHT = 40;\nvar PAGE_HEIGHT = 800;\n\n/**\n * Mouse wheel (and 2-finger trackpad) support on the web sucks. It is\n * complicated, thus this doc is long and (hopefully) detailed enough to answer\n * your questions.\n *\n * If you need to react to the mouse wheel in a predictable way, this code is\n * like your bestest friend. * hugs *\n *\n * As of today, there are 4 DOM event types you can listen to:\n *\n * 'wheel' -- Chrome(31+), FF(17+), IE(9+)\n * 'mousewheel' -- Chrome, IE(6+), Opera, Safari\n * 'MozMousePixelScroll' -- FF(3.5 only!) (2010-2013) -- don't bother!\n * 'DOMMouseScroll' -- FF(0.9.7+) since 2003\n *\n * So what to do? The is the best:\n *\n * normalizeWheel.getEventType();\n *\n * In your event callback, use this code to get sane interpretation of the\n * deltas. This code will return an object with properties:\n *\n * spinX -- normalized spin speed (use for zoom) - x plane\n * spinY -- \" - y plane\n * pixelX -- normalized distance (to pixels) - x plane\n * pixelY -- \" - y plane\n *\n * Wheel values are provided by the browser assuming you are using the wheel to\n * scroll a web page by a number of lines or pixels (or pages). Values can vary\n * significantly on different platforms and browsers, forgetting that you can\n * scroll at different speeds. Some devices (like trackpads) emit more events\n * at smaller increments with fine granularity, and some emit massive jumps with\n * linear speed or acceleration.\n *\n * This code does its best to normalize the deltas for you:\n *\n * - spin is trying to normalize how far the wheel was spun (or trackpad\n * dragged). This is super useful for zoom support where you want to\n * throw away the chunky scroll steps on the PC and make those equal to\n * the slow and smooth tiny steps on the Mac. Key data: This code tries to\n * resolve a single slow step on a wheel to 1.\n *\n * - pixel is normalizing the desired scroll delta in pixel units. You'll\n * get the crazy differences between browsers, but at least it'll be in\n * pixels!\n *\n * - positive value indicates scrolling DOWN/RIGHT, negative UP/LEFT. This\n * should translate to positive value zooming IN, negative zooming OUT.\n * This matches the newer 'wheel' event.\n *\n * Why are there spinX, spinY (or pixels)?\n *\n * - spinX is a 2-finger side drag on the trackpad, and a shift + wheel turn\n * with a mouse. It results in side-scrolling in the browser by default.\n *\n * - spinY is what you expect -- it's the classic axis of a mouse wheel.\n *\n * - I dropped spinZ/pixelZ. It is supported by the DOM 3 'wheel' event and\n * probably is by browsers in conjunction with fancy 3D controllers .. but\n * you know.\n *\n * Implementation info:\n *\n * Examples of 'wheel' event if you scroll slowly (down) by one step with an\n * average mouse:\n *\n * OS X + Chrome (mouse) - 4 pixel delta (wheelDelta -120)\n * OS X + Safari (mouse) - N/A pixel delta (wheelDelta -12)\n * OS X + Firefox (mouse) - 0.1 line delta (wheelDelta N/A)\n * Win8 + Chrome (mouse) - 100 pixel delta (wheelDelta -120)\n * Win8 + Firefox (mouse) - 3 line delta (wheelDelta -120)\n *\n * On the trackpad:\n *\n * OS X + Chrome (trackpad) - 2 pixel delta (wheelDelta -6)\n * OS X + Firefox (trackpad) - 1 pixel delta (wheelDelta N/A)\n *\n * On other/older browsers.. it's more complicated as there can be multiple and\n * also missing delta values.\n *\n * The 'wheel' event is more standard:\n *\n * http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents\n *\n * The basics is that it includes a unit, deltaMode (pixels, lines, pages), and\n * deltaX, deltaY and deltaZ. Some browsers provide other values to maintain\n * backward compatibility with older events. Those other values help us\n * better normalize spin speed. Example of what the browsers provide:\n *\n * | event.wheelDelta | event.detail\n * ------------------+------------------+--------------\n * Safari v5/OS X | -120 | 0\n * Safari v5/Win7 | -120 | 0\n * Chrome v17/OS X | -120 | 0\n * Chrome v17/Win7 | -120 | 0\n * IE9/Win7 | -120 | undefined\n * Firefox v4/OS X | undefined | 1\n * Firefox v4/Win7 | undefined | 3\n *\n */\nfunction normalizeWheel(/*object*/ event) /*object*/ {\n var sX = 0, sY = 0, // spinX, spinY\n pX = 0, pY = 0; // pixelX, pixelY\n\n // Legacy\n if ('detail' in event) { sY = event.detail; }\n if ('wheelDelta' in event) { sY = -event.wheelDelta / 120; }\n if ('wheelDeltaY' in event) { sY = -event.wheelDeltaY / 120; }\n if ('wheelDeltaX' in event) { sX = -event.wheelDeltaX / 120; }\n\n // side scrolling on FF with DOMMouseScroll\n if ( 'axis' in event && event.axis === event.HORIZONTAL_AXIS ) {\n sX = sY;\n sY = 0;\n }\n\n pX = sX * PIXEL_STEP;\n pY = sY * PIXEL_STEP;\n\n if ('deltaY' in event) { pY = event.deltaY; }\n if ('deltaX' in event) { pX = event.deltaX; }\n\n if ((pX || pY) && event.deltaMode) {\n if (event.deltaMode == 1) { // delta in LINE units\n pX *= LINE_HEIGHT;\n pY *= LINE_HEIGHT;\n } else { // delta in PAGE units\n pX *= PAGE_HEIGHT;\n pY *= PAGE_HEIGHT;\n }\n }\n\n // Fall-back if spin cannot be determined\n if (pX && !sX) { sX = (pX < 1) ? -1 : 1; }\n if (pY && !sY) { sY = (pY < 1) ? -1 : 1; }\n\n return { spinX : sX,\n spinY : sY,\n pixelX : pX,\n pixelY : pY };\n}\n\n\n/**\n * The best combination if you prefer spinX + spinY normalization. It favors\n * the older DOMMouseScroll for Firefox, as FF does not include wheelDelta with\n * 'wheel' event, making spin speed determination impossible.\n */\nnormalizeWheel.getEventType = function() /*string*/ {\n return (UserAgent_DEPRECATED.firefox())\n ? 'DOMMouseScroll'\n : (isEventSupported('wheel'))\n ? 'wheel'\n : 'mousewheel';\n};\n\nmodule.exports = normalizeWheel;\n","module.exports = require('./src/normalizeWheel.js');\n","import { __assign, __extends } from 'tslib';\nimport * as React from 'react';\nimport normalizeWheel from 'normalize-wheel';\n\n/**\r\n * Compute the dimension of the crop area based on media size,\r\n * aspect ratio and optionally rotation\r\n */\nfunction getCropSize(mediaWidth, mediaHeight, containerWidth, containerHeight, aspect, rotation) {\n if (rotation === void 0) {\n rotation = 0;\n }\n var _a = rotateSize(mediaWidth, mediaHeight, rotation),\n width = _a.width,\n height = _a.height;\n var fittingWidth = Math.min(width, containerWidth);\n var fittingHeight = Math.min(height, containerHeight);\n if (fittingWidth > fittingHeight * aspect) {\n return {\n width: fittingHeight * aspect,\n height: fittingHeight\n };\n }\n return {\n width: fittingWidth,\n height: fittingWidth / aspect\n };\n}\n/**\r\n * Compute media zoom.\r\n * We fit the media into the container with \"max-width: 100%; max-height: 100%;\"\r\n */\nfunction getMediaZoom(mediaSize) {\n // Take the axis with more pixels to improve accuracy\n return mediaSize.width > mediaSize.height ? mediaSize.width / mediaSize.naturalWidth : mediaSize.height / mediaSize.naturalHeight;\n}\n/**\r\n * Ensure a new media position stays in the crop area.\r\n */\nfunction restrictPosition(position, mediaSize, cropSize, zoom, rotation) {\n if (rotation === void 0) {\n rotation = 0;\n }\n var _a = rotateSize(mediaSize.width, mediaSize.height, rotation),\n width = _a.width,\n height = _a.height;\n return {\n x: restrictPositionCoord(position.x, width, cropSize.width, zoom),\n y: restrictPositionCoord(position.y, height, cropSize.height, zoom)\n };\n}\nfunction restrictPositionCoord(position, mediaSize, cropSize, zoom) {\n var maxPosition = mediaSize * zoom / 2 - cropSize / 2;\n return clamp(position, -maxPosition, maxPosition);\n}\nfunction getDistanceBetweenPoints(pointA, pointB) {\n return Math.sqrt(Math.pow(pointA.y - pointB.y, 2) + Math.pow(pointA.x - pointB.x, 2));\n}\nfunction getRotationBetweenPoints(pointA, pointB) {\n return Math.atan2(pointB.y - pointA.y, pointB.x - pointA.x) * 180 / Math.PI;\n}\n/**\r\n * Compute the output cropped area of the media in percentages and pixels.\r\n * x/y are the top-left coordinates on the src media\r\n */\nfunction computeCroppedArea(crop, mediaSize, cropSize, aspect, zoom, rotation, restrictPosition) {\n if (rotation === void 0) {\n rotation = 0;\n }\n if (restrictPosition === void 0) {\n restrictPosition = true;\n }\n // if the media is rotated by the user, we cannot limit the position anymore\n // as it might need to be negative.\n var limitAreaFn = restrictPosition ? limitArea : noOp;\n var mediaBBoxSize = rotateSize(mediaSize.width, mediaSize.height, rotation);\n var mediaNaturalBBoxSize = rotateSize(mediaSize.naturalWidth, mediaSize.naturalHeight, rotation);\n // calculate the crop area in percentages\n // in the rotated space\n var croppedAreaPercentages = {\n x: limitAreaFn(100, ((mediaBBoxSize.width - cropSize.width / zoom) / 2 - crop.x / zoom) / mediaBBoxSize.width * 100),\n y: limitAreaFn(100, ((mediaBBoxSize.height - cropSize.height / zoom) / 2 - crop.y / zoom) / mediaBBoxSize.height * 100),\n width: limitAreaFn(100, cropSize.width / mediaBBoxSize.width * 100 / zoom),\n height: limitAreaFn(100, cropSize.height / mediaBBoxSize.height * 100 / zoom)\n };\n // we compute the pixels size naively\n var widthInPixels = Math.round(limitAreaFn(mediaNaturalBBoxSize.width, croppedAreaPercentages.width * mediaNaturalBBoxSize.width / 100));\n var heightInPixels = Math.round(limitAreaFn(mediaNaturalBBoxSize.height, croppedAreaPercentages.height * mediaNaturalBBoxSize.height / 100));\n var isImgWiderThanHigh = mediaNaturalBBoxSize.width >= mediaNaturalBBoxSize.height * aspect;\n // then we ensure the width and height exactly match the aspect (to avoid rounding approximations)\n // if the media is wider than high, when zoom is 0, the crop height will be equals to image height\n // thus we want to compute the width from the height and aspect for accuracy.\n // Otherwise, we compute the height from width and aspect.\n var sizePixels = isImgWiderThanHigh ? {\n width: Math.round(heightInPixels * aspect),\n height: heightInPixels\n } : {\n width: widthInPixels,\n height: Math.round(widthInPixels / aspect)\n };\n var croppedAreaPixels = __assign(__assign({}, sizePixels), {\n x: Math.round(limitAreaFn(mediaNaturalBBoxSize.width - sizePixels.width, croppedAreaPercentages.x * mediaNaturalBBoxSize.width / 100)),\n y: Math.round(limitAreaFn(mediaNaturalBBoxSize.height - sizePixels.height, croppedAreaPercentages.y * mediaNaturalBBoxSize.height / 100))\n });\n return {\n croppedAreaPercentages: croppedAreaPercentages,\n croppedAreaPixels: croppedAreaPixels\n };\n}\n/**\r\n * Ensure the returned value is between 0 and max\r\n */\nfunction limitArea(max, value) {\n return Math.min(max, Math.max(0, value));\n}\nfunction noOp(_max, value) {\n return value;\n}\n/**\r\n * Compute crop and zoom from the croppedAreaPercentages.\r\n */\nfunction getInitialCropFromCroppedAreaPercentages(croppedAreaPercentages, mediaSize, rotation, cropSize, minZoom, maxZoom) {\n var mediaBBoxSize = rotateSize(mediaSize.width, mediaSize.height, rotation);\n // This is the inverse process of computeCroppedArea\n var zoom = clamp(cropSize.width / mediaBBoxSize.width * (100 / croppedAreaPercentages.width), minZoom, maxZoom);\n var crop = {\n x: zoom * mediaBBoxSize.width / 2 - cropSize.width / 2 - mediaBBoxSize.width * zoom * (croppedAreaPercentages.x / 100),\n y: zoom * mediaBBoxSize.height / 2 - cropSize.height / 2 - mediaBBoxSize.height * zoom * (croppedAreaPercentages.y / 100)\n };\n return {\n crop: crop,\n zoom: zoom\n };\n}\n/**\r\n * Compute zoom from the croppedAreaPixels\r\n */\nfunction getZoomFromCroppedAreaPixels(croppedAreaPixels, mediaSize, cropSize) {\n var mediaZoom = getMediaZoom(mediaSize);\n return cropSize.height > cropSize.width ? cropSize.height / (croppedAreaPixels.height * mediaZoom) : cropSize.width / (croppedAreaPixels.width * mediaZoom);\n}\n/**\r\n * Compute crop and zoom from the croppedAreaPixels\r\n */\nfunction getInitialCropFromCroppedAreaPixels(croppedAreaPixels, mediaSize, rotation, cropSize, minZoom, maxZoom) {\n if (rotation === void 0) {\n rotation = 0;\n }\n var mediaNaturalBBoxSize = rotateSize(mediaSize.naturalWidth, mediaSize.naturalHeight, rotation);\n var zoom = clamp(getZoomFromCroppedAreaPixels(croppedAreaPixels, mediaSize, cropSize), minZoom, maxZoom);\n var cropZoom = cropSize.height > cropSize.width ? cropSize.height / croppedAreaPixels.height : cropSize.width / croppedAreaPixels.width;\n var crop = {\n x: ((mediaNaturalBBoxSize.width - croppedAreaPixels.width) / 2 - croppedAreaPixels.x) * cropZoom,\n y: ((mediaNaturalBBoxSize.height - croppedAreaPixels.height) / 2 - croppedAreaPixels.y) * cropZoom\n };\n return {\n crop: crop,\n zoom: zoom\n };\n}\n/**\r\n * Return the point that is the center of point a and b\r\n */\nfunction getCenter(a, b) {\n return {\n x: (b.x + a.x) / 2,\n y: (b.y + a.y) / 2\n };\n}\nfunction getRadianAngle(degreeValue) {\n return degreeValue * Math.PI / 180;\n}\n/**\r\n * Returns the new bounding area of a rotated rectangle.\r\n */\nfunction rotateSize(width, height, rotation) {\n var rotRad = getRadianAngle(rotation);\n return {\n width: Math.abs(Math.cos(rotRad) * width) + Math.abs(Math.sin(rotRad) * height),\n height: Math.abs(Math.sin(rotRad) * width) + Math.abs(Math.cos(rotRad) * height)\n };\n}\n/**\r\n * Clamp value between min and max\r\n */\nfunction clamp(value, min, max) {\n return Math.min(Math.max(value, min), max);\n}\n/**\r\n * Combine multiple class names into a single string.\r\n */\nfunction classNames() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return args.filter(function (value) {\n if (typeof value === 'string' && value.length > 0) {\n return true;\n }\n return false;\n }).join(' ').trim();\n}\n\nvar css_248z = \".reactEasyCrop_Container {\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n overflow: hidden;\\n user-select: none;\\n touch-action: none;\\n cursor: move;\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n}\\n\\n.reactEasyCrop_Image,\\n.reactEasyCrop_Video {\\n will-change: transform; /* this improves performances and prevent painting issues on iOS Chrome */\\n}\\n\\n.reactEasyCrop_Contain {\\n max-width: 100%;\\n max-height: 100%;\\n margin: auto;\\n position: absolute;\\n top: 0;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n}\\n.reactEasyCrop_Cover_Horizontal {\\n width: 100%;\\n height: auto;\\n}\\n.reactEasyCrop_Cover_Vertical {\\n width: auto;\\n height: 100%;\\n}\\n\\n.reactEasyCrop_CropArea {\\n position: absolute;\\n left: 50%;\\n top: 50%;\\n transform: translate(-50%, -50%);\\n border: 1px solid rgba(255, 255, 255, 0.5);\\n box-sizing: border-box;\\n box-shadow: 0 0 0 9999em;\\n color: rgba(0, 0, 0, 0.5);\\n overflow: hidden;\\n}\\n\\n.reactEasyCrop_CropAreaRound {\\n border-radius: 50%;\\n}\\n\\n.reactEasyCrop_CropAreaGrid::before {\\n content: ' ';\\n box-sizing: border-box;\\n position: absolute;\\n border: 1px solid rgba(255, 255, 255, 0.5);\\n top: 0;\\n bottom: 0;\\n left: 33.33%;\\n right: 33.33%;\\n border-top: 0;\\n border-bottom: 0;\\n}\\n\\n.reactEasyCrop_CropAreaGrid::after {\\n content: ' ';\\n box-sizing: border-box;\\n position: absolute;\\n border: 1px solid rgba(255, 255, 255, 0.5);\\n top: 33.33%;\\n bottom: 33.33%;\\n left: 0;\\n right: 0;\\n border-left: 0;\\n border-right: 0;\\n}\\n\";\n\nvar MIN_ZOOM = 1;\nvar MAX_ZOOM = 3;\nvar KEYBOARD_STEP = 1;\nvar Cropper = /** @class */function (_super) {\n __extends(Cropper, _super);\n function Cropper() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.cropperRef = React.createRef();\n _this.imageRef = React.createRef();\n _this.videoRef = React.createRef();\n _this.containerPosition = {\n x: 0,\n y: 0\n };\n _this.containerRef = null;\n _this.styleRef = null;\n _this.containerRect = null;\n _this.mediaSize = {\n width: 0,\n height: 0,\n naturalWidth: 0,\n naturalHeight: 0\n };\n _this.dragStartPosition = {\n x: 0,\n y: 0\n };\n _this.dragStartCrop = {\n x: 0,\n y: 0\n };\n _this.gestureZoomStart = 0;\n _this.gestureRotationStart = 0;\n _this.isTouching = false;\n _this.lastPinchDistance = 0;\n _this.lastPinchRotation = 0;\n _this.rafDragTimeout = null;\n _this.rafPinchTimeout = null;\n _this.wheelTimer = null;\n _this.currentDoc = typeof document !== 'undefined' ? document : null;\n _this.currentWindow = typeof window !== 'undefined' ? window : null;\n _this.resizeObserver = null;\n _this.previousCropSize = null;\n _this.isInitialized = false;\n _this.state = {\n cropSize: null,\n hasWheelJustStarted: false,\n mediaObjectFit: undefined\n };\n _this.initResizeObserver = function () {\n if (typeof window.ResizeObserver === 'undefined' || !_this.containerRef) {\n return;\n }\n var isFirstResize = true;\n _this.resizeObserver = new window.ResizeObserver(function (entries) {\n if (isFirstResize) {\n isFirstResize = false; // observe() is called on mount, we don't want to trigger a recompute on mount\n return;\n }\n _this.computeSizes();\n });\n _this.resizeObserver.observe(_this.containerRef);\n };\n // this is to prevent Safari on iOS >= 10 to zoom the page\n _this.preventZoomSafari = function (e) {\n return e.preventDefault();\n };\n _this.cleanEvents = function () {\n if (!_this.currentDoc) return;\n _this.currentDoc.removeEventListener('mousemove', _this.onMouseMove);\n _this.currentDoc.removeEventListener('mouseup', _this.onDragStopped);\n _this.currentDoc.removeEventListener('touchmove', _this.onTouchMove);\n _this.currentDoc.removeEventListener('touchend', _this.onDragStopped);\n _this.currentDoc.removeEventListener('gesturechange', _this.onGestureChange);\n _this.currentDoc.removeEventListener('gestureend', _this.onGestureEnd);\n _this.currentDoc.removeEventListener('scroll', _this.onScroll);\n };\n _this.clearScrollEvent = function () {\n if (_this.containerRef) _this.containerRef.removeEventListener('wheel', _this.onWheel);\n if (_this.wheelTimer) {\n clearTimeout(_this.wheelTimer);\n }\n };\n _this.onMediaLoad = function () {\n var cropSize = _this.computeSizes();\n if (cropSize) {\n _this.previousCropSize = cropSize;\n _this.emitCropData();\n _this.setInitialCrop(cropSize);\n _this.isInitialized = true;\n }\n if (_this.props.onMediaLoaded) {\n _this.props.onMediaLoaded(_this.mediaSize);\n }\n };\n _this.setInitialCrop = function (cropSize) {\n if (_this.props.initialCroppedAreaPercentages) {\n var _a = getInitialCropFromCroppedAreaPercentages(_this.props.initialCroppedAreaPercentages, _this.mediaSize, _this.props.rotation, cropSize, _this.props.minZoom, _this.props.maxZoom),\n crop = _a.crop,\n zoom = _a.zoom;\n _this.props.onCropChange(crop);\n _this.props.onZoomChange && _this.props.onZoomChange(zoom);\n } else if (_this.props.initialCroppedAreaPixels) {\n var _b = getInitialCropFromCroppedAreaPixels(_this.props.initialCroppedAreaPixels, _this.mediaSize, _this.props.rotation, cropSize, _this.props.minZoom, _this.props.maxZoom),\n crop = _b.crop,\n zoom = _b.zoom;\n _this.props.onCropChange(crop);\n _this.props.onZoomChange && _this.props.onZoomChange(zoom);\n }\n };\n _this.computeSizes = function () {\n var _a, _b, _c, _d, _e, _f;\n var mediaRef = _this.imageRef.current || _this.videoRef.current;\n if (mediaRef && _this.containerRef) {\n _this.containerRect = _this.containerRef.getBoundingClientRect();\n _this.saveContainerPosition();\n var containerAspect = _this.containerRect.width / _this.containerRect.height;\n var naturalWidth = ((_a = _this.imageRef.current) === null || _a === void 0 ? void 0 : _a.naturalWidth) || ((_b = _this.videoRef.current) === null || _b === void 0 ? void 0 : _b.videoWidth) || 0;\n var naturalHeight = ((_c = _this.imageRef.current) === null || _c === void 0 ? void 0 : _c.naturalHeight) || ((_d = _this.videoRef.current) === null || _d === void 0 ? void 0 : _d.videoHeight) || 0;\n var isMediaScaledDown = mediaRef.offsetWidth < naturalWidth || mediaRef.offsetHeight < naturalHeight;\n var mediaAspect = naturalWidth / naturalHeight;\n // We do not rely on the offsetWidth/offsetHeight if the media is scaled down\n // as the values they report are rounded. That will result in precision losses\n // when calculating zoom. We use the fact that the media is positionned relative\n // to the container. That allows us to use the container's dimensions\n // and natural aspect ratio of the media to calculate accurate media size.\n // However, for this to work, the container should not be rotated\n var renderedMediaSize = void 0;\n if (isMediaScaledDown) {\n switch (_this.state.mediaObjectFit) {\n default:\n case 'contain':\n renderedMediaSize = containerAspect > mediaAspect ? {\n width: _this.containerRect.height * mediaAspect,\n height: _this.containerRect.height\n } : {\n width: _this.containerRect.width,\n height: _this.containerRect.width / mediaAspect\n };\n break;\n case 'horizontal-cover':\n renderedMediaSize = {\n width: _this.containerRect.width,\n height: _this.containerRect.width / mediaAspect\n };\n break;\n case 'vertical-cover':\n renderedMediaSize = {\n width: _this.containerRect.height * mediaAspect,\n height: _this.containerRect.height\n };\n break;\n }\n } else {\n renderedMediaSize = {\n width: mediaRef.offsetWidth,\n height: mediaRef.offsetHeight\n };\n }\n _this.mediaSize = __assign(__assign({}, renderedMediaSize), {\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight\n });\n // set media size in the parent\n if (_this.props.setMediaSize) {\n _this.props.setMediaSize(_this.mediaSize);\n }\n var cropSize = _this.props.cropSize ? _this.props.cropSize : getCropSize(_this.mediaSize.width, _this.mediaSize.height, _this.containerRect.width, _this.containerRect.height, _this.props.aspect, _this.props.rotation);\n if (((_e = _this.state.cropSize) === null || _e === void 0 ? void 0 : _e.height) !== cropSize.height || ((_f = _this.state.cropSize) === null || _f === void 0 ? void 0 : _f.width) !== cropSize.width) {\n _this.props.onCropSizeChange && _this.props.onCropSizeChange(cropSize);\n }\n _this.setState({\n cropSize: cropSize\n }, _this.recomputeCropPosition);\n // pass crop size to parent\n if (_this.props.setCropSize) {\n _this.props.setCropSize(cropSize);\n }\n return cropSize;\n }\n };\n _this.saveContainerPosition = function () {\n if (_this.containerRef) {\n var bounds = _this.containerRef.getBoundingClientRect();\n _this.containerPosition = {\n x: bounds.left,\n y: bounds.top\n };\n }\n };\n _this.onMouseDown = function (e) {\n if (!_this.currentDoc) return;\n e.preventDefault();\n _this.currentDoc.addEventListener('mousemove', _this.onMouseMove);\n _this.currentDoc.addEventListener('mouseup', _this.onDragStopped);\n _this.saveContainerPosition();\n _this.onDragStart(Cropper.getMousePoint(e));\n };\n _this.onMouseMove = function (e) {\n return _this.onDrag(Cropper.getMousePoint(e));\n };\n _this.onScroll = function (e) {\n if (!_this.currentDoc) return;\n e.preventDefault();\n _this.saveContainerPosition();\n };\n _this.onTouchStart = function (e) {\n if (!_this.currentDoc) return;\n _this.isTouching = true;\n if (_this.props.onTouchRequest && !_this.props.onTouchRequest(e)) {\n return;\n }\n _this.currentDoc.addEventListener('touchmove', _this.onTouchMove, {\n passive: false\n }); // iOS 11 now defaults to passive: true\n _this.currentDoc.addEventListener('touchend', _this.onDragStopped);\n _this.saveContainerPosition();\n if (e.touches.length === 2) {\n _this.onPinchStart(e);\n } else if (e.touches.length === 1) {\n _this.onDragStart(Cropper.getTouchPoint(e.touches[0]));\n }\n };\n _this.onTouchMove = function (e) {\n // Prevent whole page from scrolling on iOS.\n e.preventDefault();\n if (e.touches.length === 2) {\n _this.onPinchMove(e);\n } else if (e.touches.length === 1) {\n _this.onDrag(Cropper.getTouchPoint(e.touches[0]));\n }\n };\n _this.onGestureStart = function (e) {\n if (!_this.currentDoc) return;\n e.preventDefault();\n _this.currentDoc.addEventListener('gesturechange', _this.onGestureChange);\n _this.currentDoc.addEventListener('gestureend', _this.onGestureEnd);\n _this.gestureZoomStart = _this.props.zoom;\n _this.gestureRotationStart = _this.props.rotation;\n };\n _this.onGestureChange = function (e) {\n e.preventDefault();\n if (_this.isTouching) {\n // this is to avoid conflict between gesture and touch events\n return;\n }\n var point = Cropper.getMousePoint(e);\n var newZoom = _this.gestureZoomStart - 1 + e.scale;\n _this.setNewZoom(newZoom, point, {\n shouldUpdatePosition: true\n });\n if (_this.props.onRotationChange) {\n var newRotation = _this.gestureRotationStart + e.rotation;\n _this.props.onRotationChange(newRotation);\n }\n };\n _this.onGestureEnd = function (e) {\n _this.cleanEvents();\n };\n _this.onDragStart = function (_a) {\n var _b, _c;\n var x = _a.x,\n y = _a.y;\n _this.dragStartPosition = {\n x: x,\n y: y\n };\n _this.dragStartCrop = __assign({}, _this.props.crop);\n (_c = (_b = _this.props).onInteractionStart) === null || _c === void 0 ? void 0 : _c.call(_b);\n };\n _this.onDrag = function (_a) {\n var x = _a.x,\n y = _a.y;\n if (!_this.currentWindow) return;\n if (_this.rafDragTimeout) _this.currentWindow.cancelAnimationFrame(_this.rafDragTimeout);\n _this.rafDragTimeout = _this.currentWindow.requestAnimationFrame(function () {\n if (!_this.state.cropSize) return;\n if (x === undefined || y === undefined) return;\n var offsetX = x - _this.dragStartPosition.x;\n var offsetY = y - _this.dragStartPosition.y;\n var requestedPosition = {\n x: _this.dragStartCrop.x + offsetX,\n y: _this.dragStartCrop.y + offsetY\n };\n var newPosition = _this.props.restrictPosition ? restrictPosition(requestedPosition, _this.mediaSize, _this.state.cropSize, _this.props.zoom, _this.props.rotation) : requestedPosition;\n _this.props.onCropChange(newPosition);\n });\n };\n _this.onDragStopped = function () {\n var _a, _b;\n _this.isTouching = false;\n _this.cleanEvents();\n _this.emitCropData();\n (_b = (_a = _this.props).onInteractionEnd) === null || _b === void 0 ? void 0 : _b.call(_a);\n };\n _this.onWheel = function (e) {\n if (!_this.currentWindow) return;\n if (_this.props.onWheelRequest && !_this.props.onWheelRequest(e)) {\n return;\n }\n e.preventDefault();\n var point = Cropper.getMousePoint(e);\n var pixelY = normalizeWheel(e).pixelY;\n var newZoom = _this.props.zoom - pixelY * _this.props.zoomSpeed / 200;\n _this.setNewZoom(newZoom, point, {\n shouldUpdatePosition: true\n });\n if (!_this.state.hasWheelJustStarted) {\n _this.setState({\n hasWheelJustStarted: true\n }, function () {\n var _a, _b;\n return (_b = (_a = _this.props).onInteractionStart) === null || _b === void 0 ? void 0 : _b.call(_a);\n });\n }\n if (_this.wheelTimer) {\n clearTimeout(_this.wheelTimer);\n }\n _this.wheelTimer = _this.currentWindow.setTimeout(function () {\n return _this.setState({\n hasWheelJustStarted: false\n }, function () {\n var _a, _b;\n return (_b = (_a = _this.props).onInteractionEnd) === null || _b === void 0 ? void 0 : _b.call(_a);\n });\n }, 250);\n };\n _this.getPointOnContainer = function (_a, containerTopLeft) {\n var x = _a.x,\n y = _a.y;\n if (!_this.containerRect) {\n throw new Error('The Cropper is not mounted');\n }\n return {\n x: _this.containerRect.width / 2 - (x - containerTopLeft.x),\n y: _this.containerRect.height / 2 - (y - containerTopLeft.y)\n };\n };\n _this.getPointOnMedia = function (_a) {\n var x = _a.x,\n y = _a.y;\n var _b = _this.props,\n crop = _b.crop,\n zoom = _b.zoom;\n return {\n x: (x + crop.x) / zoom,\n y: (y + crop.y) / zoom\n };\n };\n _this.setNewZoom = function (zoom, point, _a) {\n var _b = _a === void 0 ? {} : _a,\n _c = _b.shouldUpdatePosition,\n shouldUpdatePosition = _c === void 0 ? true : _c;\n if (!_this.state.cropSize || !_this.props.onZoomChange) return;\n var newZoom = clamp(zoom, _this.props.minZoom, _this.props.maxZoom);\n if (shouldUpdatePosition) {\n var zoomPoint = _this.getPointOnContainer(point, _this.containerPosition);\n var zoomTarget = _this.getPointOnMedia(zoomPoint);\n var requestedPosition = {\n x: zoomTarget.x * newZoom - zoomPoint.x,\n y: zoomTarget.y * newZoom - zoomPoint.y\n };\n var newPosition = _this.props.restrictPosition ? restrictPosition(requestedPosition, _this.mediaSize, _this.state.cropSize, newZoom, _this.props.rotation) : requestedPosition;\n _this.props.onCropChange(newPosition);\n }\n _this.props.onZoomChange(newZoom);\n };\n _this.getCropData = function () {\n if (!_this.state.cropSize) {\n return null;\n }\n // this is to ensure the crop is correctly restricted after a zoom back (https://github.com/ValentinH/react-easy-crop/issues/6)\n var restrictedPosition = _this.props.restrictPosition ? restrictPosition(_this.props.crop, _this.mediaSize, _this.state.cropSize, _this.props.zoom, _this.props.rotation) : _this.props.crop;\n return computeCroppedArea(restrictedPosition, _this.mediaSize, _this.state.cropSize, _this.getAspect(), _this.props.zoom, _this.props.rotation, _this.props.restrictPosition);\n };\n _this.emitCropData = function () {\n var cropData = _this.getCropData();\n if (!cropData) return;\n var croppedAreaPercentages = cropData.croppedAreaPercentages,\n croppedAreaPixels = cropData.croppedAreaPixels;\n if (_this.props.onCropComplete) {\n _this.props.onCropComplete(croppedAreaPercentages, croppedAreaPixels);\n }\n if (_this.props.onCropAreaChange) {\n _this.props.onCropAreaChange(croppedAreaPercentages, croppedAreaPixels);\n }\n };\n _this.emitCropAreaChange = function () {\n var cropData = _this.getCropData();\n if (!cropData) return;\n var croppedAreaPercentages = cropData.croppedAreaPercentages,\n croppedAreaPixels = cropData.croppedAreaPixels;\n if (_this.props.onCropAreaChange) {\n _this.props.onCropAreaChange(croppedAreaPercentages, croppedAreaPixels);\n }\n };\n _this.recomputeCropPosition = function () {\n var _a, _b;\n if (!_this.state.cropSize) return;\n var adjustedCrop = _this.props.crop;\n // Only scale if we're initialized and this is a legitimate resize\n if (_this.isInitialized && ((_a = _this.previousCropSize) === null || _a === void 0 ? void 0 : _a.width) && ((_b = _this.previousCropSize) === null || _b === void 0 ? void 0 : _b.height)) {\n var sizeChanged = Math.abs(_this.previousCropSize.width - _this.state.cropSize.width) > 1e-6 || Math.abs(_this.previousCropSize.height - _this.state.cropSize.height) > 1e-6;\n if (sizeChanged) {\n var scaleX = _this.state.cropSize.width / _this.previousCropSize.width;\n var scaleY = _this.state.cropSize.height / _this.previousCropSize.height;\n adjustedCrop = {\n x: _this.props.crop.x * scaleX,\n y: _this.props.crop.y * scaleY\n };\n }\n }\n var newPosition = _this.props.restrictPosition ? restrictPosition(adjustedCrop, _this.mediaSize, _this.state.cropSize, _this.props.zoom, _this.props.rotation) : adjustedCrop;\n _this.previousCropSize = _this.state.cropSize;\n _this.props.onCropChange(newPosition);\n _this.emitCropData();\n };\n _this.onKeyDown = function (event) {\n var _a, _b;\n var _c = _this.props,\n crop = _c.crop,\n onCropChange = _c.onCropChange,\n keyboardStep = _c.keyboardStep,\n zoom = _c.zoom,\n rotation = _c.rotation;\n var step = keyboardStep;\n if (!_this.state.cropSize) return;\n // if the shift key is pressed, reduce the step to allow finer control\n if (event.shiftKey) {\n step *= 0.2;\n }\n var newCrop = __assign({}, crop);\n switch (event.key) {\n case 'ArrowUp':\n newCrop.y -= step;\n event.preventDefault();\n break;\n case 'ArrowDown':\n newCrop.y += step;\n event.preventDefault();\n break;\n case 'ArrowLeft':\n newCrop.x -= step;\n event.preventDefault();\n break;\n case 'ArrowRight':\n newCrop.x += step;\n event.preventDefault();\n break;\n default:\n return;\n }\n if (_this.props.restrictPosition) {\n newCrop = restrictPosition(newCrop, _this.mediaSize, _this.state.cropSize, zoom, rotation);\n }\n if (!event.repeat) {\n (_b = (_a = _this.props).onInteractionStart) === null || _b === void 0 ? void 0 : _b.call(_a);\n }\n onCropChange(newCrop);\n };\n _this.onKeyUp = function (event) {\n var _a, _b;\n switch (event.key) {\n case 'ArrowUp':\n case 'ArrowDown':\n case 'ArrowLeft':\n case 'ArrowRight':\n event.preventDefault();\n break;\n default:\n return;\n }\n _this.emitCropData();\n (_b = (_a = _this.props).onInteractionEnd) === null || _b === void 0 ? void 0 : _b.call(_a);\n };\n return _this;\n }\n Cropper.prototype.componentDidMount = function () {\n if (!this.currentDoc || !this.currentWindow) return;\n if (this.containerRef) {\n if (this.containerRef.ownerDocument) {\n this.currentDoc = this.containerRef.ownerDocument;\n }\n if (this.currentDoc.defaultView) {\n this.currentWindow = this.currentDoc.defaultView;\n }\n this.initResizeObserver();\n // only add window resize listener if ResizeObserver is not supported. Otherwise, it would be redundant\n if (typeof window.ResizeObserver === 'undefined') {\n this.currentWindow.addEventListener('resize', this.computeSizes);\n }\n this.props.zoomWithScroll && this.containerRef.addEventListener('wheel', this.onWheel, {\n passive: false\n });\n this.containerRef.addEventListener('gesturestart', this.onGestureStart);\n }\n this.currentDoc.addEventListener('scroll', this.onScroll);\n if (!this.props.disableAutomaticStylesInjection) {\n this.styleRef = this.currentDoc.createElement('style');\n this.styleRef.setAttribute('type', 'text/css');\n if (this.props.nonce) {\n this.styleRef.setAttribute('nonce', this.props.nonce);\n }\n this.styleRef.innerHTML = css_248z;\n this.currentDoc.head.appendChild(this.styleRef);\n }\n // when rendered via SSR, the image can already be loaded and its onLoad callback will never be called\n if (this.imageRef.current && this.imageRef.current.complete) {\n this.onMediaLoad();\n }\n // set image and video refs in the parent if the callbacks exist\n if (this.props.setImageRef) {\n this.props.setImageRef(this.imageRef);\n }\n if (this.props.setVideoRef) {\n this.props.setVideoRef(this.videoRef);\n }\n if (this.props.setCropperRef) {\n this.props.setCropperRef(this.cropperRef);\n }\n };\n Cropper.prototype.componentWillUnmount = function () {\n var _a, _b;\n if (!this.currentDoc || !this.currentWindow) return;\n if (typeof window.ResizeObserver === 'undefined') {\n this.currentWindow.removeEventListener('resize', this.computeSizes);\n }\n (_a = this.resizeObserver) === null || _a === void 0 ? void 0 : _a.disconnect();\n if (this.containerRef) {\n this.containerRef.removeEventListener('gesturestart', this.preventZoomSafari);\n }\n if (this.styleRef) {\n (_b = this.styleRef.parentNode) === null || _b === void 0 ? void 0 : _b.removeChild(this.styleRef);\n }\n this.cleanEvents();\n this.props.zoomWithScroll && this.clearScrollEvent();\n };\n Cropper.prototype.componentDidUpdate = function (prevProps) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j;\n if (prevProps.rotation !== this.props.rotation) {\n this.computeSizes();\n this.recomputeCropPosition();\n } else if (prevProps.aspect !== this.props.aspect) {\n this.computeSizes();\n } else if (prevProps.objectFit !== this.props.objectFit) {\n this.computeSizes();\n } else if (prevProps.zoom !== this.props.zoom) {\n this.recomputeCropPosition();\n } else if (((_a = prevProps.cropSize) === null || _a === void 0 ? void 0 : _a.height) !== ((_b = this.props.cropSize) === null || _b === void 0 ? void 0 : _b.height) || ((_c = prevProps.cropSize) === null || _c === void 0 ? void 0 : _c.width) !== ((_d = this.props.cropSize) === null || _d === void 0 ? void 0 : _d.width)) {\n this.computeSizes();\n } else if (((_e = prevProps.crop) === null || _e === void 0 ? void 0 : _e.x) !== ((_f = this.props.crop) === null || _f === void 0 ? void 0 : _f.x) || ((_g = prevProps.crop) === null || _g === void 0 ? void 0 : _g.y) !== ((_h = this.props.crop) === null || _h === void 0 ? void 0 : _h.y)) {\n this.emitCropAreaChange();\n }\n if (prevProps.zoomWithScroll !== this.props.zoomWithScroll && this.containerRef) {\n this.props.zoomWithScroll ? this.containerRef.addEventListener('wheel', this.onWheel, {\n passive: false\n }) : this.clearScrollEvent();\n }\n if (prevProps.video !== this.props.video) {\n (_j = this.videoRef.current) === null || _j === void 0 ? void 0 : _j.load();\n }\n var objectFit = this.getObjectFit();\n if (objectFit !== this.state.mediaObjectFit) {\n this.setState({\n mediaObjectFit: objectFit\n }, this.computeSizes);\n }\n };\n Cropper.prototype.getAspect = function () {\n var _a = this.props,\n cropSize = _a.cropSize,\n aspect = _a.aspect;\n if (cropSize) {\n return cropSize.width / cropSize.height;\n }\n return aspect;\n };\n Cropper.prototype.getObjectFit = function () {\n var _a, _b, _c, _d;\n if (this.props.objectFit === 'cover') {\n var mediaRef = this.imageRef.current || this.videoRef.current;\n if (mediaRef && this.containerRef) {\n this.containerRect = this.containerRef.getBoundingClientRect();\n var containerAspect = this.containerRect.width / this.containerRect.height;\n var naturalWidth = ((_a = this.imageRef.current) === null || _a === void 0 ? void 0 : _a.naturalWidth) || ((_b = this.videoRef.current) === null || _b === void 0 ? void 0 : _b.videoWidth) || 0;\n var naturalHeight = ((_c = this.imageRef.current) === null || _c === void 0 ? void 0 : _c.naturalHeight) || ((_d = this.videoRef.current) === null || _d === void 0 ? void 0 : _d.videoHeight) || 0;\n var mediaAspect = naturalWidth / naturalHeight;\n return mediaAspect < containerAspect ? 'horizontal-cover' : 'vertical-cover';\n }\n return 'horizontal-cover';\n }\n return this.props.objectFit;\n };\n Cropper.prototype.onPinchStart = function (e) {\n var pointA = Cropper.getTouchPoint(e.touches[0]);\n var pointB = Cropper.getTouchPoint(e.touches[1]);\n this.lastPinchDistance = getDistanceBetweenPoints(pointA, pointB);\n this.lastPinchRotation = getRotationBetweenPoints(pointA, pointB);\n this.onDragStart(getCenter(pointA, pointB));\n };\n Cropper.prototype.onPinchMove = function (e) {\n var _this = this;\n if (!this.currentDoc || !this.currentWindow) return;\n var pointA = Cropper.getTouchPoint(e.touches[0]);\n var pointB = Cropper.getTouchPoint(e.touches[1]);\n var center = getCenter(pointA, pointB);\n this.onDrag(center);\n if (this.rafPinchTimeout) this.currentWindow.cancelAnimationFrame(this.rafPinchTimeout);\n this.rafPinchTimeout = this.currentWindow.requestAnimationFrame(function () {\n var distance = getDistanceBetweenPoints(pointA, pointB);\n var newZoom = _this.props.zoom * (distance / _this.lastPinchDistance);\n _this.setNewZoom(newZoom, center, {\n shouldUpdatePosition: false\n });\n _this.lastPinchDistance = distance;\n var rotation = getRotationBetweenPoints(pointA, pointB);\n var newRotation = _this.props.rotation + (rotation - _this.lastPinchRotation);\n _this.props.onRotationChange && _this.props.onRotationChange(newRotation);\n _this.lastPinchRotation = rotation;\n });\n };\n Cropper.prototype.render = function () {\n var _this = this;\n var _a;\n var _b = this.props,\n image = _b.image,\n video = _b.video,\n mediaProps = _b.mediaProps,\n cropperProps = _b.cropperProps,\n transform = _b.transform,\n _c = _b.crop,\n x = _c.x,\n y = _c.y,\n rotation = _b.rotation,\n zoom = _b.zoom,\n cropShape = _b.cropShape,\n showGrid = _b.showGrid,\n roundCropAreaPixels = _b.roundCropAreaPixels,\n _d = _b.style,\n containerStyle = _d.containerStyle,\n cropAreaStyle = _d.cropAreaStyle,\n mediaStyle = _d.mediaStyle,\n _e = _b.classes,\n containerClassName = _e.containerClassName,\n cropAreaClassName = _e.cropAreaClassName,\n mediaClassName = _e.mediaClassName;\n var objectFit = (_a = this.state.mediaObjectFit) !== null && _a !== void 0 ? _a : this.getObjectFit();\n return React.createElement(\"div\", {\n onMouseDown: this.onMouseDown,\n onTouchStart: this.onTouchStart,\n ref: function ref(el) {\n return _this.containerRef = el;\n },\n \"data-testid\": \"container\",\n style: containerStyle,\n className: classNames('reactEasyCrop_Container', containerClassName)\n }, image ? React.createElement(\"img\", __assign({\n alt: \"\",\n className: classNames('reactEasyCrop_Image', objectFit === 'contain' && 'reactEasyCrop_Contain', objectFit === 'horizontal-cover' && 'reactEasyCrop_Cover_Horizontal', objectFit === 'vertical-cover' && 'reactEasyCrop_Cover_Vertical', mediaClassName)\n }, mediaProps, {\n src: image,\n ref: this.imageRef,\n style: __assign(__assign({}, mediaStyle), {\n transform: transform || \"translate(\".concat(x, \"px, \").concat(y, \"px) rotate(\").concat(rotation, \"deg) scale(\").concat(zoom, \")\")\n }),\n onLoad: this.onMediaLoad\n })) : video && React.createElement(\"video\", __assign({\n autoPlay: true,\n playsInline: true,\n loop: true,\n muted: true,\n className: classNames('reactEasyCrop_Video', objectFit === 'contain' && 'reactEasyCrop_Contain', objectFit === 'horizontal-cover' && 'reactEasyCrop_Cover_Horizontal', objectFit === 'vertical-cover' && 'reactEasyCrop_Cover_Vertical', mediaClassName)\n }, mediaProps, {\n ref: this.videoRef,\n onLoadedMetadata: this.onMediaLoad,\n style: __assign(__assign({}, mediaStyle), {\n transform: transform || \"translate(\".concat(x, \"px, \").concat(y, \"px) rotate(\").concat(rotation, \"deg) scale(\").concat(zoom, \")\")\n }),\n controls: false\n }), (Array.isArray(video) ? video : [{\n src: video\n }]).map(function (item) {\n return React.createElement(\"source\", __assign({\n key: item.src\n }, item));\n })), this.state.cropSize && React.createElement(\"div\", __assign({\n ref: this.cropperRef,\n style: __assign(__assign({}, cropAreaStyle), {\n width: roundCropAreaPixels ? Math.round(this.state.cropSize.width) : this.state.cropSize.width,\n height: roundCropAreaPixels ? Math.round(this.state.cropSize.height) : this.state.cropSize.height\n }),\n tabIndex: 0,\n onKeyDown: this.onKeyDown,\n onKeyUp: this.onKeyUp,\n \"data-testid\": \"cropper\",\n className: classNames('reactEasyCrop_CropArea', cropShape === 'round' && 'reactEasyCrop_CropAreaRound', showGrid && 'reactEasyCrop_CropAreaGrid', cropAreaClassName)\n }, cropperProps)));\n };\n Cropper.defaultProps = {\n zoom: 1,\n rotation: 0,\n aspect: 4 / 3,\n maxZoom: MAX_ZOOM,\n minZoom: MIN_ZOOM,\n cropShape: 'rect',\n objectFit: 'contain',\n showGrid: true,\n style: {},\n classes: {},\n mediaProps: {},\n cropperProps: {},\n zoomSpeed: 1,\n restrictPosition: true,\n zoomWithScroll: true,\n keyboardStep: KEYBOARD_STEP\n };\n Cropper.getMousePoint = function (e) {\n return {\n x: Number(e.clientX),\n y: Number(e.clientY)\n };\n };\n Cropper.getTouchPoint = function (touch) {\n return {\n x: Number(touch.clientX),\n y: Number(touch.clientY)\n };\n };\n return Cropper;\n}(React.Component);\n\nexport { Cropper as default, getInitialCropFromCroppedAreaPercentages, getInitialCropFromCroppedAreaPixels };\n//# sourceMappingURL=index.module.mjs.map\n","import React, { useCallback, useEffect, useState } from \"react\";\r\nimport { Icon } from \"@iconify/react\";\r\nimport Cropper from \"react-easy-crop\";\r\nimport type { Area } from \"react-easy-crop\";\r\nimport Button from \"../../Button/Button\";\r\nimport { crudClasses, joinClasses } from \"../../../lib/crudClasses\";\r\n\r\nconst ButtonComponent = Button as React.ComponentType<any>;\r\n\r\nconst createImage = (url: string): Promise<HTMLImageElement> =>\r\n new Promise((resolve, reject) => {\r\n const image = new Image();\r\n image.addEventListener(\"load\", () => resolve(image));\r\n image.addEventListener(\"error\", (error) => reject(error));\r\n image.setAttribute(\"crossOrigin\", \"anonymous\");\r\n image.src = url;\r\n });\r\n\r\nconst getRadianAngle = (degreeValue: number) => {\r\n return (degreeValue * Math.PI) / 180;\r\n};\r\n\r\nconst rotateSize = (width: number, height: number, rotation: number) => {\r\n const rotRad = getRadianAngle(rotation);\r\n return {\r\n width:\r\n Math.abs(Math.cos(rotRad) * width) + Math.abs(Math.sin(rotRad) * height),\r\n height:\r\n Math.abs(Math.sin(rotRad) * width) + Math.abs(Math.cos(rotRad) * height),\r\n };\r\n};\r\n\r\nconst getCroppedImageBlob = async (\r\n imageSrc: string,\r\n pixelCrop: Area,\r\n fileType = \"image/jpeg\",\r\n rotation = 0,\r\n): Promise<Blob> => {\r\n const image = await createImage(imageSrc);\r\n const canvas = document.createElement(\"canvas\");\r\n const ctx = canvas.getContext(\"2d\");\r\n\r\n if (!ctx) {\r\n throw new Error(\"Canvas context is not available\");\r\n }\r\n\r\n const rotRad = getRadianAngle(rotation);\r\n const { width: bBoxWidth, height: bBoxHeight } = rotateSize(\r\n image.width,\r\n image.height,\r\n rotation,\r\n );\r\n\r\n canvas.width = bBoxWidth;\r\n canvas.height = bBoxHeight;\r\n\r\n ctx.translate(bBoxWidth / 2, bBoxHeight / 2);\r\n ctx.rotate(rotRad);\r\n ctx.translate(-image.width / 2, -image.height / 2);\r\n ctx.drawImage(image, 0, 0);\r\n\r\n const croppedCanvas = document.createElement(\"canvas\");\r\n const croppedCtx = croppedCanvas.getContext(\"2d\");\r\n\r\n if (!croppedCtx) {\r\n throw new Error(\"Canvas context is not available\");\r\n }\r\n\r\n croppedCanvas.width = pixelCrop.width;\r\n croppedCanvas.height = pixelCrop.height;\r\n\r\n croppedCtx.drawImage(\r\n canvas,\r\n pixelCrop.x,\r\n pixelCrop.y,\r\n pixelCrop.width,\r\n pixelCrop.height,\r\n 0,\r\n 0,\r\n pixelCrop.width,\r\n pixelCrop.height,\r\n );\r\n\r\n return new Promise((resolve, reject) => {\r\n croppedCanvas.toBlob(\r\n (blob) => {\r\n if (!blob) {\r\n reject(new Error(\"Image cropping failed\"));\r\n return;\r\n }\r\n resolve(blob);\r\n },\r\n fileType,\r\n 0.95,\r\n );\r\n });\r\n};\r\n\r\ninterface ImageCropperModalProps {\r\n isOpen: boolean;\r\n imageSrc: string;\r\n fileType?: string;\r\n fileName?: string;\r\n aspect?: number;\r\n title?: string;\r\n onClose: () => void;\r\n onApply: (file: File) => void;\r\n}\r\n\r\nconst ImageCropperModal = ({\r\n isOpen,\r\n imageSrc,\r\n fileType = \"image/jpeg\",\r\n fileName = \"cropped-image\",\r\n aspect = 1 / 1,\r\n title = \"Crop Image\",\r\n onClose,\r\n onApply,\r\n}: ImageCropperModalProps) => {\r\n const [crop, setCrop] = useState({ x: 0, y: 0 });\r\n const [zoom, setZoom] = useState(1);\r\n const [croppedAreaPixels, setCroppedAreaPixels] = useState<Area | null>(null);\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n setCrop({ x: 0, y: 0 });\r\n setZoom(1);\r\n setCroppedAreaPixels(null);\r\n }\r\n }, [isOpen]);\r\n\r\n const onCropComplete = useCallback((_area: Area, croppedPixels: Area) => {\r\n setCroppedAreaPixels(croppedPixels);\r\n }, []);\r\n\r\n const handleApply = async () => {\r\n if (!imageSrc || !croppedAreaPixels) {\r\n return;\r\n }\r\n\r\n try {\r\n const blob = await getCroppedImageBlob(\r\n imageSrc,\r\n croppedAreaPixels,\r\n fileType,\r\n );\r\n const fileExtension =\r\n fileType?.split(\"/\")?.[1]?.replace(\"jpeg\", \"jpg\") || \"jpg\";\r\n const croppedFile = new File([blob], `${fileName}.${fileExtension}`, {\r\n type: fileType,\r\n });\r\n onApply?.(croppedFile);\r\n } catch {\r\n onClose?.();\r\n }\r\n };\r\n\r\n if (!isOpen) {\r\n return null;\r\n }\r\n\r\n return (\r\n <div\r\n className={joinClasses(\r\n crudClasses.mediaPicker.cropModal,\r\n \"fixed inset-0 z-50 flex items-center justify-center p-4\",\r\n )}\r\n >\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 <div className=\"relative bg-white rounded-lg shadow-xl w-full max-w-2xl max-h-[90vh] flex flex-col dark:bg-gray-800\">\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 <h3 className=\"text-lg font-medium text-gray-900 dark:text-white\">\r\n {title}\r\n </h3>\r\n <button\r\n type=\"button\"\r\n onClick={onClose}\r\n className=\"text-gray-400 hover:text-gray-600 dark:hover:text-gray-300\"\r\n aria-label=\"Close crop modal\"\r\n >\r\n <Icon icon=\"mdi:close\" className=\"w-6 h-6\" />\r\n </button>\r\n </div>\r\n\r\n <div className=\"p-4 space-y-4\">\r\n <div className=\"relative h-72 w-full bg-gray-900 rounded-md overflow-hidden\">\r\n {imageSrc && (\r\n <Cropper\r\n image={imageSrc}\r\n crop={crop}\r\n zoom={zoom}\r\n aspect={aspect}\r\n onCropChange={setCrop}\r\n onZoomChange={setZoom}\r\n onCropComplete={onCropComplete}\r\n />\r\n )}\r\n </div>\r\n\r\n <div className=\"space-y-2\">\r\n <label className=\"text-sm text-gray-700 dark:text-gray-300\">\r\n Zoom\r\n </label>\r\n <input\r\n type=\"range\"\r\n min={1}\r\n max={3}\r\n step={0.1}\r\n value={zoom}\r\n onChange={(event) => setZoom(Number(event.target.value))}\r\n className=\"w-full\"\r\n />\r\n </div>\r\n </div>\r\n\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 <ButtonComponent\r\n type=\"button\"\r\n onClick={onClose}\r\n variant=\"outlined\"\r\n color=\"default\"\r\n >\r\n Cancel\r\n </ButtonComponent>\r\n <ButtonComponent\r\n type=\"button\"\r\n onClick={handleApply}\r\n variant=\"contained\"\r\n color=\"primary\"\r\n >\r\n Apply Crop\r\n </ButtonComponent>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ImageCropperModal;\r\n","import { Icon } from \"@iconify/react\";\r\nimport React, { useState, useEffect, useRef } from \"react\";\r\nimport InputLabel from \"./InputLabel\";\r\nimport Button from \"../../Button/Button\";\r\nimport ImageCropperModal from \"./ImageCropperModal\";\r\nimport { crudClasses, joinClasses } from \"../../../lib/crudClasses\";\r\n\r\nconst ButtonComponent = Button as React.ComponentType<any>;\r\n\r\nconst revokeBlobUrl = (url?: string) => {\r\n if (typeof url === \"string\" && url.startsWith(\"blob:\")) {\r\n URL.revokeObjectURL(url);\r\n }\r\n};\r\n\r\ntype ImageValue = File | { file?: File; preview?: string } | string | null;\r\n\r\ninterface ImagePickerProps {\r\n label?: string;\r\n value: ImageValue;\r\n onChange: (file: File | null) => void;\r\n required?: boolean;\r\n accept?: string;\r\n aspect?: number | string;\r\n id: string;\r\n dragDrop?: boolean;\r\n cropImage?: boolean;\r\n name: string;\r\n parentClass?: string;\r\n errorMessage?: string;\r\n}\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 aspect = \"1\",\r\n id,\r\n dragDrop = false,\r\n cropImage = false,\r\n name = \"\",\r\n parentClass = \"\",\r\n errorMessage = \"\",\r\n}: ImagePickerProps) => {\r\n const [image, setImage] = useState<ImageValue>(value);\r\n const [isDragging, setIsDragging] = useState(false);\r\n const [cropModalOpen, setCropModalOpen] = useState(false);\r\n const [cropSource, setCropSource] = useState(\"\");\r\n const [selectedFileType, setSelectedFileType] = useState(\"image/jpeg\");\r\n const [selectedFileName, setSelectedFileName] = useState(\"cropped-image\");\r\n\r\n const inputRef = useRef<HTMLInputElement | null>(null);\r\n const sourceUrlRef = useRef(\"\");\r\n const previewUrlRef = useRef(\"\");\r\n\r\n useEffect(() => {\r\n if (value instanceof File) {\r\n const preview = URL.createObjectURL(value);\r\n revokeBlobUrl(previewUrlRef.current);\r\n previewUrlRef.current = preview;\r\n setImage({ file: value, preview });\r\n } else if (value && typeof value === \"object\" && \"preview\" in value) {\r\n setImage(value);\r\n } else {\r\n setImage(value);\r\n }\r\n }, [value]);\r\n\r\n useEffect(() => {\r\n return () => {\r\n revokeBlobUrl(previewUrlRef.current);\r\n revokeBlobUrl(sourceUrlRef.current);\r\n };\r\n }, []);\r\n\r\n const closeCropModal = () => {\r\n setCropModalOpen(false);\r\n revokeBlobUrl(sourceUrlRef.current);\r\n sourceUrlRef.current = \"\";\r\n setCropSource(\"\");\r\n\r\n if (inputRef.current) {\r\n inputRef.current.value = \"\";\r\n }\r\n };\r\n\r\n const handleCroppedImage = (croppedFile: File) => {\r\n const preview = URL.createObjectURL(croppedFile);\r\n revokeBlobUrl(previewUrlRef.current);\r\n previewUrlRef.current = preview;\r\n\r\n setImage({ file: croppedFile, preview });\r\n onChange?.(croppedFile);\r\n closeCropModal();\r\n };\r\n\r\n const handleFileChange = (files: FileList | null) => {\r\n if (!files || files.length === 0) {\r\n return;\r\n }\r\n\r\n const file = files[0];\r\n\r\n if (cropImage) {\r\n const source = URL.createObjectURL(file);\r\n revokeBlobUrl(sourceUrlRef.current);\r\n sourceUrlRef.current = source;\r\n setCropSource(source);\r\n setSelectedFileType(file.type || \"image/jpeg\");\r\n setSelectedFileName(\r\n (file.name || \"cropped-image\").replace(/\\.[^/.]+$/, \"\"),\r\n );\r\n setCropModalOpen(true);\r\n return;\r\n }\r\n\r\n const preview = URL.createObjectURL(file);\r\n\r\n revokeBlobUrl(previewUrlRef.current);\r\n previewUrlRef.current = preview;\r\n\r\n setImage({ file, preview });\r\n onChange?.(file);\r\n };\r\n\r\n const removeImage = (e?: React.MouseEvent<HTMLButtonElement>) => {\r\n if (e) {\r\n e.stopPropagation();\r\n }\r\n\r\n revokeBlobUrl(previewUrlRef.current);\r\n previewUrlRef.current = \"\";\r\n\r\n setImage(null);\r\n onChange?.(null);\r\n\r\n if (inputRef.current) {\r\n inputRef.current.value = \"\";\r\n }\r\n };\r\n\r\n const handleDragOver = (e: React.DragEvent<HTMLDivElement>) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(true);\r\n };\r\n\r\n const handleDragLeave = (e: React.DragEvent<HTMLDivElement>) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(false);\r\n };\r\n\r\n const handleDrop = (e: React.DragEvent<HTMLDivElement>) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(false);\r\n if (e.dataTransfer?.files?.[0]?.type?.includes(\"image/\")) {\r\n handleFileChange(e.dataTransfer.files);\r\n }\r\n };\r\n\r\n const handleButtonClick = () => {\r\n inputRef.current?.click();\r\n };\r\n\r\n const imagePreview =\r\n image && typeof image === \"object\" && \"preview\" in image\r\n ? image.preview\r\n : typeof image === \"string\"\r\n ? image\r\n : \"\";\r\n\r\n return (\r\n <>\r\n <div\r\n key={name}\r\n className={joinClasses(\r\n crudClasses.mediaPicker.image,\r\n crudClasses.field.wrapper,\r\n parentClass || \"col-span-12\",\r\n )}\r\n >\r\n <InputLabel label={label} required={required} />\r\n <div\r\n className={joinClasses(\r\n crudClasses.mediaPicker.dropzone,\r\n \"relative rounded-md p-2 transition-all\",\r\n isDragging\r\n ? \"border-2 border-dashed border-blue-500 bg-blue-50 dark:bg-blue-900/20\"\r\n : \"border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-800\",\r\n errorMessage ? \"border-red-500\" : \"\",\r\n )}\r\n onDragOver={handleDragOver}\r\n onDragLeave={handleDragLeave}\r\n onDrop={handleDrop}\r\n id={`field-${name}`}\r\n >\r\n <input\r\n ref={inputRef}\r\n id={id}\r\n type=\"file\"\r\n accept={accept}\r\n onChange={(e) => handleFileChange(e.target.files)}\r\n required={required && !image}\r\n className=\"absolute opacity-0 right-[50%] top-[80%] -translate-y-1/2 pointer-events-none h-[10px]\"\r\n />\r\n\r\n <div\r\n className={`flex items-center space-x-4 transition-all ${\r\n isDragging ? \"opacity-50\" : \"\"\r\n }`}\r\n >\r\n {image ? (\r\n <div className=\"relative group\">\r\n <img\r\n src={imagePreview}\r\n alt=\"preview\"\r\n className=\"object-cover w-20 h-20 rounded-full shadow-md\"\r\n />\r\n {!required && (\r\n <button\r\n type=\"button\"\r\n onClick={removeImage}\r\n className=\"absolute top-0 -right-2 bg-red-500 text-white rounded-full p-1 shadow-lg hover:bg-red-600 transition-colors focus:outline-none focus:ring-2 focus:ring-red-500 focus:ring-offset-2\"\r\n aria-label=\"Remove image\"\r\n >\r\n <Icon icon=\"mdi:close\" className=\"w-3 h-3\" />\r\n </button>\r\n )}\r\n </div>\r\n ) : (\r\n <div className=\"rounded-full bg-gray-100 dark:bg-gray-700 h-20 w-20 flex items-center justify-center\">\r\n <Icon\r\n icon=\"ri:image-add-fill\"\r\n className=\"text-gray-400 w-10 h-10\"\r\n />\r\n </div>\r\n )}\r\n\r\n <div className=\"flex flex-col items-center space-y-1\">\r\n <ButtonComponent\r\n type=\"button\"\r\n onClick={handleButtonClick}\r\n variant=\"outlined\"\r\n color=\"default\"\r\n >\r\n {image ? \"Change Image\" : \"Select Image\"}\r\n </ButtonComponent>\r\n\r\n {dragDrop && !image && (\r\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">\r\n or drag and drop\r\n </p>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {dragDrop && isDragging && (\r\n <div className=\"absolute inset-0 flex items-center justify-center pointer-events-none bg-blue-500/10 rounded-md\">\r\n <span className=\"text-blue-600 dark:text-blue-400 font-semibold text-lg\">\r\n Drop image here\r\n </span>\r\n </div>\r\n )}\r\n </div>\r\n {errorMessage && (\r\n <span\r\n className={joinClasses(\r\n crudClasses.field.error,\r\n \"text-red-500 text-xs mt-1\",\r\n )}\r\n >\r\n {errorMessage}\r\n </span>\r\n )}\r\n </div>\r\n\r\n <ImageCropperModal\r\n isOpen={cropModalOpen}\r\n imageSrc={cropSource}\r\n fileType={selectedFileType}\r\n fileName={selectedFileName}\r\n onClose={closeCropModal}\r\n onApply={handleCroppedImage}\r\n aspect={Number(aspect)}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport default ImagePicker;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { Icon } from \"@iconify/react\";\r\nimport InputLabel from \"./InputLabel\";\r\nimport { crudClasses, joinClasses } from \"../../../lib/crudClasses\";\r\n\r\ninterface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {\r\n label?: string;\r\n value: any;\r\n required: boolean;\r\n parentClass?: string;\r\n className?: string;\r\n type: string;\r\n onKeyDown?: (e: React.KeyboardEvent<HTMLInputElement>) => void;\r\n negativeNumberAllow?: boolean;\r\n defaultValue?: any;\r\n field: Record<string, any>;\r\n onChange: (value: any) => void;\r\n mask?: string;\r\n maskApplyOnValue?: boolean;\r\n errorMessage?: string;\r\n}\r\n\r\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\r\n (\r\n {\r\n label,\r\n value,\r\n name,\r\n required,\r\n parentClass = \"\",\r\n className = \"\",\r\n type = \"text\",\r\n onKeyDown,\r\n negativeNumberAllow = true,\r\n defaultValue = \"\",\r\n field = {},\r\n onChange,\r\n mask = \"\",\r\n errorMessage = \"\",\r\n maskApplyOnValue = true,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const [showPassword, setShowPassword] = useState(false);\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\r\n if (type === \"number\") {\r\n const blockedKeys = [\"e\", \"E\", \"+\"];\r\n\r\n if (blockedKeys.includes(e.key)) {\r\n e.preventDefault();\r\n return;\r\n }\r\n\r\n if (negativeNumberAllow == false && e.key === \"-\") {\r\n e.preventDefault();\r\n return;\r\n }\r\n\r\n if ([\"ArrowUp\", \"ArrowDown\"].includes(e.key)) {\r\n e.preventDefault();\r\n return;\r\n }\r\n }\r\n\r\n onKeyDown?.(e);\r\n };\r\n\r\n const combinedClassName = joinClasses(\r\n crudClasses.field.input,\r\n \"h-10 placeholder-gray-400 dark:placeholder-gray-400\",\r\n type === \"password\" ? \"pr-10\" : \"\",\r\n type === \"number\" ? \"no-spinner\" : \"\",\r\n className,\r\n errorMessage ? \"border-red-500\" : \"\",\r\n );\r\n\r\n function applyMask(rawValue: any, maskValue: string) {\r\n if (!rawValue) return rawValue;\r\n const cleanValue = String(rawValue).replace(/[^a-zA-Z0-9]/g, \"\");\r\n let result = \"\";\r\n let valueIndex = 0;\r\n\r\n for (\r\n let i = 0;\r\n i < maskValue?.length && valueIndex < cleanValue.length;\r\n i++\r\n ) {\r\n const maskChar = maskValue[i];\r\n const valueChar = cleanValue[valueIndex];\r\n\r\n if (maskChar === \"9\") {\r\n if (/\\d/.test(valueChar)) {\r\n result += valueChar;\r\n valueIndex++;\r\n } else {\r\n valueIndex++;\r\n i--;\r\n }\r\n } else if (maskChar === \"A\") {\r\n if (/[a-zA-Z]/.test(valueChar)) {\r\n result += valueChar;\r\n valueIndex++;\r\n } else {\r\n valueIndex++;\r\n i--;\r\n }\r\n } else if (maskChar === \"X\") {\r\n if (/[a-zA-Z0-9]/.test(valueChar)) {\r\n result += valueChar;\r\n valueIndex++;\r\n } else {\r\n valueIndex++;\r\n i--;\r\n }\r\n } else if (maskChar === \"*\") {\r\n result += valueChar;\r\n valueIndex++;\r\n } else {\r\n result += maskChar;\r\n\r\n if (valueChar === maskChar) {\r\n valueIndex++;\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n useEffect(() => {\r\n if (defaultValue) {\r\n const localValue = value || defaultValue;\r\n setTimeout(() => {\r\n onChange?.(localValue);\r\n }, 100);\r\n }\r\n }, [defaultValue]);\r\n\r\n return (\r\n <>\r\n <div\r\n key={name}\r\n className={joinClasses(\r\n crudClasses.field.wrapper,\r\n parentClass || \"col-span-12\",\r\n )}\r\n >\r\n <InputLabel\r\n label={label}\r\n required={required}\r\n infoText={field?.infoText}\r\n />\r\n <div className=\"relative\">\r\n <input\r\n type={type === \"password\" && showPassword ? \"text\" : type}\r\n ref={ref}\r\n id={`field-${name}`}\r\n required={required}\r\n onKeyDown={handleKeyDown}\r\n className={combinedClassName}\r\n value={mask ? applyMask(value, mask) : value}\r\n onChange={(e) => {\r\n mask && maskApplyOnValue\r\n ? onChange(applyMask(e.target.value, mask))\r\n : onChange(e.target.value);\r\n }}\r\n {...props}\r\n />\r\n\r\n {errorMessage && (\r\n <span\r\n className={joinClasses(\r\n crudClasses.field.error,\r\n \"text-red-500 text-xs mt-1\",\r\n )}\r\n >\r\n {errorMessage}\r\n </span>\r\n )}\r\n\r\n {type === \"password\" && (\r\n <button\r\n type=\"button\"\r\n tabIndex={-1}\r\n onClick={() => setShowPassword((prev) => !prev)}\r\n className=\"absolute inset-y-0 right-3 flex items-center text-gray-400 hover:text-gray-600 dark:text-gray-400 dark:hover:text-gray-200\"\r\n >\r\n <Icon\r\n icon={\r\n showPassword ? \"mdi:eye-outline\" : \"mdi:eye-off-outline\"\r\n }\r\n className=\"w-5 h-5\"\r\n />\r\n </button>\r\n )}\r\n </div>\r\n </div>\r\n </>\r\n );\r\n },\r\n);\r\n\r\nInput.displayName = \"Input\";\r\n\r\nexport { Input };\r\n","import { Editor } from \"@tinymce/tinymce-react\";\r\nimport InputLabel from \"./InputLabel\";\r\nimport { crudClasses, joinClasses } from \"../../../lib/crudClasses\";\r\n\r\ninterface TinyEditorProps {\r\n editorKey: string;\r\n value: string;\r\n name: string;\r\n onChange: (content: string) => void;\r\n label?: string;\r\n required?: boolean;\r\n placeholder?: string;\r\n parentClass?: string;\r\n height?: number;\r\n inline?: boolean;\r\n disabled?: boolean;\r\n plugins?: string[];\r\n toolbar?: string;\r\n menubar?: boolean;\r\n fontFamily?: string;\r\n initConfig?: Record<string, any>;\r\n errorMessage?: string;\r\n imageUploadHandler?: (blobInfo: any) => Promise<string>;\r\n}\r\n\r\nconst TinyEditor = ({\r\n editorKey = \"\",\r\n value = \"\",\r\n name = \"\",\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,\r\n errorMessage = \"\",\r\n}: TinyEditorProps) => {\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 const handleImageUpload = (blobInfo: any) => {\r\n return new Promise<string>((resolve, reject) => {\r\n if (!imageUploadHandler) {\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\r\n className={joinClasses(crudClasses.field.wrapper, parentClass)}\r\n id={`field-${name}`}\r\n >\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 border: ${errorMessage ? \"1px solid blue\" : \"\"};\r\n }\r\n `,\r\n ...initConfig,\r\n }}\r\n onEditorChange={(content) => {\r\n onChange?.(content);\r\n }}\r\n />\r\n {errorMessage && (\r\n <span\r\n className={joinClasses(\r\n crudClasses.field.error,\r\n \"text-red-500 text-xs mt-1\",\r\n )}\r\n >\r\n {errorMessage}\r\n </span>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default TinyEditor;\r\n","import React, { useEffect } from \"react\";\r\nimport InputLabel from \"./InputLabel\";\r\nimport { crudClasses, joinClasses } from \"../../../lib/crudClasses\";\r\n\r\ninterface CheckboxOption {\r\n label: string;\r\n value: any;\r\n disabled?: boolean;\r\n}\r\n\r\ninterface CheckboxProps {\r\n name: string;\r\n label?: string;\r\n options: CheckboxOption[];\r\n value: any;\r\n onChange: (value: any, name?: string) => void;\r\n disabled?: boolean;\r\n required?: boolean;\r\n parentClass?: string;\r\n className?: string;\r\n multiSelect?: boolean;\r\n errorMessage?: string;\r\n}\r\n\r\nconst Checkbox = ({\r\n name = \"\",\r\n label = \"\",\r\n options = [],\r\n value = null,\r\n onChange,\r\n disabled = false,\r\n required = false,\r\n parentClass = \"col-span-12\",\r\n className = \"\",\r\n errorMessage = \"\",\r\n multiSelect = false,\r\n}: CheckboxProps) => {\r\n const multiple = Array.isArray(options) && options.length > 0;\r\n\r\n const isChecked = (optionValue?: any) => {\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 const handleSingleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n onChange?.(e.target.checked, name);\r\n };\r\n\r\n const handleMultipleChange = (optionValue: any, checked: boolean) => {\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 } 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 useEffect(() => {\r\n let initialVal;\r\n\r\n if (multiple) {\r\n if (multiSelect) {\r\n // Ensure array for multiselect\r\n initialVal = Array.isArray(value) ? value : [];\r\n } else {\r\n // Single select from multiple options\r\n initialVal = value || \"\";\r\n }\r\n } else {\r\n // Single checkbox\r\n initialVal = Boolean(value);\r\n }\r\n\r\n setTimeout(() => {\r\n onChange?.(initialVal, name);\r\n }, 100);\r\n }, []);\r\n\r\n if (multiple) {\r\n return (\r\n <>\r\n <div className={joinClasses(crudClasses.field.wrapper, 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 id={`field-${name}`}\r\n value={opt.value}\r\n checked={isChecked(opt.value)}\r\n disabled={disabled || Boolean(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={joinClasses(\r\n crudClasses.field.input,\r\n \"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\",\r\n className,\r\n )}\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 {errorMessage && (\r\n <span\r\n className={joinClasses(\r\n crudClasses.field.error,\r\n \"text-red-500 text-xs mt-1\",\r\n )}\r\n >\r\n {errorMessage}\r\n </span>\r\n )}\r\n </div>\r\n </>\r\n );\r\n }\r\n\r\n return (\r\n <div\r\n className={joinClasses(\r\n crudClasses.field.wrapper,\r\n \"flex items-center\",\r\n parentClass,\r\n )}\r\n >\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={joinClasses(\r\n crudClasses.field.input,\r\n \"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\",\r\n className,\r\n )}\r\n />\r\n {label && (\r\n <label\r\n htmlFor={name}\r\n className=\"ml-2 text-sm text-gray-700 dark:text-gray-200 select-none\"\r\n >\r\n {label}\r\n </label>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default Checkbox;\r\n","import { Icon } from \"@iconify/react\";\r\nimport React, { useState, useEffect, useRef } from \"react\";\r\nimport InputLabel from \"./InputLabel\";\r\nimport Button from \"../../Button/Button\";\r\nimport { enqueueSnackbar } from \"notistack\";\r\nimport { crudClasses, joinClasses } from \"../../../lib/crudClasses\";\r\n\r\nconst ButtonComponent = Button as React.ComponentType<any>;\r\n\r\ntype MediaValue = File | { file?: File; preview?: string } | string | null;\r\n\r\ninterface AudioPickerProps {\r\n label?: string;\r\n value: MediaValue;\r\n onChange: (file: File | null) => void;\r\n required?: boolean;\r\n accept?: string;\r\n id: string;\r\n dragDrop?: boolean;\r\n name: string;\r\n parentClass?: string;\r\n maxSize?: number;\r\n errorMessage?: string;\r\n}\r\n\r\nconst AudioPicker = ({\r\n label = \"\",\r\n value = null,\r\n onChange,\r\n required = false,\r\n accept = \"audio/*\",\r\n id,\r\n dragDrop = false,\r\n name = \"\",\r\n parentClass = \"\",\r\n errorMessage = \"\",\r\n maxSize = 0,\r\n}: AudioPickerProps) => {\r\n const [audio, setAudio] = useState<{ file?: File; preview?: string } | null>(\r\n null,\r\n );\r\n const [isDragging, setIsDragging] = useState(false);\r\n const inputRef = useRef<HTMLInputElement | null>(null);\r\n\r\n const maxSizeBytes = maxSize * 1024 * 1024;\r\n\r\n useEffect(() => {\r\n if (!value) {\r\n cleanupAudio();\r\n setAudio(null);\r\n return;\r\n }\r\n\r\n if (value instanceof File) {\r\n const preview = URL.createObjectURL(value);\r\n setAudio({ file: value, preview });\r\n\r\n return () => {\r\n URL.revokeObjectURL(preview);\r\n };\r\n } else if (typeof value === \"string\") {\r\n setAudio({ preview: value });\r\n } else if (value?.preview) {\r\n setAudio(value);\r\n }\r\n }, [value]);\r\n\r\n const cleanupAudio = () => {\r\n if (audio?.preview && audio.preview.startsWith(\"blob:\")) {\r\n URL.revokeObjectURL(audio.preview);\r\n }\r\n };\r\n\r\n const handleFileChange = (files: FileList | null) => {\r\n if (!files || files.length === 0) {\r\n return;\r\n }\r\n const file = files[0];\r\n\r\n if (maxSizeBytes && file.size > maxSizeBytes) {\r\n enqueueSnackbar(\r\n `Audio is too large. Maximum allowed size is ${maxSize} MB`,\r\n { variant: \"warning\" },\r\n );\r\n return;\r\n }\r\n\r\n const preview = URL.createObjectURL(file);\r\n\r\n cleanupAudio();\r\n setAudio({ file, preview });\r\n onChange?.(file);\r\n };\r\n\r\n const removeAudio = (e?: React.MouseEvent<HTMLButtonElement>) => {\r\n if (e) {\r\n e.stopPropagation();\r\n }\r\n\r\n cleanupAudio();\r\n setAudio(null);\r\n onChange?.(null);\r\n\r\n if (inputRef.current) {\r\n inputRef.current.value = \"\";\r\n }\r\n };\r\n\r\n const handleDragOver = (e: React.DragEvent<HTMLDivElement>) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(true);\r\n };\r\n\r\n const handleDragLeave = (e: React.DragEvent<HTMLDivElement>) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(false);\r\n };\r\n\r\n const handleDrop = (e: React.DragEvent<HTMLDivElement>) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(false);\r\n if (e.dataTransfer?.files?.[0]?.type?.includes(\"audio/\")) {\r\n handleFileChange(e.dataTransfer.files);\r\n }\r\n };\r\n\r\n const handleButtonClick = () => {\r\n inputRef.current?.click();\r\n };\r\n\r\n return (\r\n <div\r\n key={name}\r\n className={joinClasses(\r\n crudClasses.mediaPicker.audio,\r\n crudClasses.field.wrapper,\r\n parentClass || \"col-span-12\",\r\n )}\r\n >\r\n <InputLabel label={label} required={required} />\r\n\r\n <div\r\n className={joinClasses(\r\n crudClasses.mediaPicker.dropzone,\r\n \"relative rounded-lg p-2 transition-all\",\r\n isDragging\r\n ? \"border-2 border-dashed border-blue-500 bg-blue-50 dark:bg-blue-900/20\"\r\n : \"border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-800\",\r\n errorMessage ? \"border-red-500\" : \"\",\r\n )}\r\n onDragOver={handleDragOver}\r\n onDragLeave={handleDragLeave}\r\n onDrop={handleDrop}\r\n id={`field-${name}`}\r\n >\r\n <input\r\n ref={inputRef}\r\n id={id}\r\n type=\"file\"\r\n accept={accept}\r\n onChange={(e) => handleFileChange(e.target.files)}\r\n required={required && !audio}\r\n className=\"absolute opacity-0 right-[50%] top-[80%] -translate-y-1/2 pointer-events-none h-[10px]\"\r\n />\r\n\r\n <div\r\n className={`flex items-center space-x-4 transition-all ${\r\n isDragging ? \"opacity-50\" : \"\"\r\n }`}\r\n >\r\n {audio ? (\r\n <div className=\"flex items-center space-x-4\">\r\n <div className=\"relative w-full\">\r\n {!required && (\r\n <button\r\n type=\"button\"\r\n onClick={removeAudio}\r\n className=\"absolute top-0 -right-2 bg-red-500 text-white rounded-full p-1 shadow-lg hover:bg-red-600 transition-colors z-10 focus:outline-none focus:ring-2 focus:ring-red-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800\"\r\n aria-label=\"Remove audio\"\r\n >\r\n <Icon icon=\"mdi:close\" className=\"w-3 h-3\" />\r\n </button>\r\n )}\r\n\r\n <audio\r\n key={audio.preview}\r\n src={audio.preview}\r\n controls\r\n controlsList=\"nodownload\"\r\n />\r\n </div>\r\n <ButtonComponent type=\"button\" onClick={handleButtonClick}>\r\n <span>Change Audio File</span>\r\n </ButtonComponent>\r\n </div>\r\n ) : (\r\n <div className=\"flex items-center justify-center space-x-4\">\r\n <div className=\"rounded-full bg-gray-100 dark:bg-gray-700 h-20 w-20 flex items-center justify-center\">\r\n <Icon icon=\"mdi:music\" className=\"text-gray-400 w-10 h-10\" />\r\n </div>\r\n <div className=\"flex flex-col items-center space-y-1\">\r\n <ButtonComponent\r\n type=\"button\"\r\n onClick={handleButtonClick}\r\n variant=\"outlined\"\r\n >\r\n <span>Choose Audio File</span>\r\n </ButtonComponent>\r\n\r\n {dragDrop && (\r\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">\r\n or drag and drop your audio file here\r\n </p>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {dragDrop && isDragging && !audio && (\r\n <div className=\"absolute inset-0 flex items-center justify-center pointer-events-none bg-blue-500/10 rounded-lg\">\r\n <span className=\"text-blue-600 dark:text-blue-400 font-semibold text-lg bg-white dark:bg-gray-800 px-4 py-2 rounded-lg shadow-lg\">\r\n Drop audio here\r\n </span>\r\n </div>\r\n )}\r\n </div>\r\n {errorMessage && (\r\n <span\r\n className={joinClasses(\r\n crudClasses.field.error,\r\n \"text-red-500 text-xs mt-1\",\r\n )}\r\n >\r\n {errorMessage}\r\n </span>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default AudioPicker;\r\n","import React, { useEffect, useRef, useState } from \"react\";\r\nimport { Icon } from \"@iconify/react\";\r\nimport InputLabel from \"./InputLabel\";\r\nimport ImageCropperModal from \"./ImageCropperModal\";\r\nimport Button from \"../../Button/Button\";\r\nimport { crudClasses, joinClasses } from \"../../../lib/crudClasses\";\r\n\r\nconst ButtonComponent = Button as React.ComponentType<any>;\r\n\r\ntype ImageValueItem = File | { file?: File; preview?: string } | string;\r\n\r\ninterface GalleryItem {\r\n id: string;\r\n file: File | null;\r\n preview: string;\r\n createdBlobUrl?: string;\r\n}\r\n\r\ninterface MultiImagePickerProps {\r\n label?: string;\r\n value: ImageValueItem[];\r\n onChange: (files: ImageValueItem[]) => void;\r\n required?: boolean;\r\n accept?: string;\r\n aspect?: number | string;\r\n id: string;\r\n dragDrop?: boolean;\r\n cropImage?: boolean;\r\n name: string;\r\n parentClass?: string;\r\n maxImages?: number;\r\n errorMessage?: string;\r\n}\r\n\r\nconst toGalleryItem = (item: ImageValueItem): GalleryItem | null => {\r\n if (!item) {\r\n return null;\r\n }\r\n\r\n if (item instanceof File) {\r\n const preview = URL.createObjectURL(item);\r\n return {\r\n id: `${Date.now()}-${Math.random()}`,\r\n file: item,\r\n preview,\r\n createdBlobUrl: preview,\r\n };\r\n }\r\n\r\n if (typeof item === \"string\") {\r\n return {\r\n id: `${Date.now()}-${Math.random()}`,\r\n file: null,\r\n preview: item,\r\n };\r\n }\r\n\r\n if (typeof item === \"object\") {\r\n if (item.preview) {\r\n return {\r\n id: `${Date.now()}-${Math.random()}`,\r\n file: item.file || null,\r\n preview: item.preview,\r\n };\r\n }\r\n if (item.file) {\r\n const preview = URL.createObjectURL(item.file);\r\n return {\r\n id: `${Date.now()}-${Math.random()}`,\r\n file: item.file,\r\n preview,\r\n createdBlobUrl: preview,\r\n };\r\n }\r\n }\r\n\r\n return null;\r\n};\r\n\r\nconst MultiImagePicker = ({\r\n label = \"\",\r\n value = [],\r\n onChange,\r\n required = false,\r\n accept = \"image/*\",\r\n aspect = \"1\",\r\n id,\r\n dragDrop = false,\r\n cropImage = false,\r\n name = \"\",\r\n parentClass = \"\",\r\n maxImages,\r\n errorMessage = \"\",\r\n}: MultiImagePickerProps) => {\r\n const [images, setImages] = useState<GalleryItem[]>([]);\r\n const [isDragging, setIsDragging] = useState(false);\r\n const [cropModalOpen, setCropModalOpen] = useState(false);\r\n const [cropSource, setCropSource] = useState(\"\");\r\n const [selectedFileType, setSelectedFileType] = useState(\"image/jpeg\");\r\n const [selectedFileName, setSelectedFileName] = useState(\"cropped-image\");\r\n const [cropTargetId, setCropTargetId] = useState<string | null>(null);\r\n\r\n const inputRef = useRef<HTMLInputElement | null>(null);\r\n const replaceInputRef = useRef<HTMLInputElement | null>(null);\r\n const cropSourceUrlRef = useRef(\"\");\r\n const imagesRef = useRef<GalleryItem[]>([]);\r\n\r\n useEffect(() => {\r\n imagesRef.current = images;\r\n }, [images]);\r\n\r\n useEffect(() => {\r\n return () => {\r\n imagesRef.current.forEach((img) => {\r\n if (img.createdBlobUrl) {\r\n URL.revokeObjectURL(img.createdBlobUrl);\r\n }\r\n });\r\n if (cropSourceUrlRef.current) {\r\n URL.revokeObjectURL(cropSourceUrlRef.current);\r\n }\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!Array.isArray(value)) {\r\n setImages([]);\r\n return;\r\n }\r\n\r\n const nextItems = value\r\n .map((item) => toGalleryItem(item))\r\n .filter(Boolean) as GalleryItem[];\r\n\r\n setImages((prev) => {\r\n prev.forEach((img) => {\r\n if (img.createdBlobUrl) {\r\n URL.revokeObjectURL(img.createdBlobUrl);\r\n }\r\n });\r\n return nextItems;\r\n });\r\n }, [value]);\r\n\r\n const remainingSlots =\r\n typeof maxImages === \"number\" && maxImages > 0\r\n ? Math.max(maxImages - images.length, 0)\r\n : Number.POSITIVE_INFINITY;\r\n\r\n const closeCropModal = () => {\r\n setCropModalOpen(false);\r\n if (cropSourceUrlRef.current) {\r\n URL.revokeObjectURL(cropSourceUrlRef.current);\r\n cropSourceUrlRef.current = \"\";\r\n }\r\n setCropSource(\"\");\r\n setCropTargetId(null);\r\n\r\n if (inputRef.current) {\r\n inputRef.current.value = \"\";\r\n }\r\n };\r\n\r\n const openCropModal = (item: GalleryItem) => {\r\n setCropSource(item.preview);\r\n setSelectedFileType(item.file?.type || \"image/jpeg\");\r\n setSelectedFileName(\r\n (item.file?.name || \"cropped-image\").replace(/\\.[^/.]+$/, \"\"),\r\n );\r\n setCropTargetId(item.id);\r\n setCropModalOpen(true);\r\n };\r\n\r\n const handleCroppedImage = (croppedFile: File) => {\r\n const preview = URL.createObjectURL(croppedFile);\r\n\r\n setImages((prev) => {\r\n const next = prev.map((img) => {\r\n if (img.id !== cropTargetId) {\r\n return img;\r\n }\r\n\r\n if (img.createdBlobUrl) {\r\n URL.revokeObjectURL(img.createdBlobUrl);\r\n }\r\n\r\n return {\r\n ...img,\r\n file: croppedFile,\r\n preview,\r\n createdBlobUrl: preview,\r\n };\r\n });\r\n\r\n onChange?.(\r\n next.map((img) => {\r\n if (img.file) {\r\n return img.file;\r\n }\r\n return img.preview;\r\n }),\r\n );\r\n\r\n return next;\r\n });\r\n\r\n closeCropModal();\r\n };\r\n\r\n const addFiles = (files: FileList | null) => {\r\n if (!files || files.length === 0 || remainingSlots === 0) {\r\n return;\r\n }\r\n\r\n const selected = Array.from(files)\r\n .filter((file) => file.type.includes(\"image/\"))\r\n .slice(0, remainingSlots);\r\n\r\n if (selected.length === 0) {\r\n return;\r\n }\r\n\r\n const mapped: GalleryItem[] = selected.map((file) => {\r\n const preview = URL.createObjectURL(file);\r\n return {\r\n id: `${Date.now()}-${Math.random()}`,\r\n file,\r\n preview,\r\n createdBlobUrl: preview,\r\n };\r\n });\r\n\r\n setImages((prev) => {\r\n const next = [...prev, ...mapped];\r\n onChange?.(\r\n next.map((img) => {\r\n if (img.file) {\r\n return img.file;\r\n }\r\n return img.preview;\r\n }),\r\n );\r\n return next;\r\n });\r\n\r\n if (inputRef.current) {\r\n inputRef.current.value = \"\";\r\n }\r\n };\r\n\r\n const removeImage = (idToRemove: string) => {\r\n setImages((prev) => {\r\n const target = prev.find((img) => img.id === idToRemove);\r\n if (target?.createdBlobUrl) {\r\n URL.revokeObjectURL(target.createdBlobUrl);\r\n }\r\n const next = prev.filter((img) => img.id !== idToRemove);\r\n onChange?.(\r\n next.map((img) => {\r\n if (img.file) {\r\n return img.file;\r\n }\r\n return img.preview;\r\n }),\r\n );\r\n return next;\r\n });\r\n\r\n if (inputRef.current) {\r\n inputRef.current.value = \"\";\r\n }\r\n };\r\n\r\n const handleReplaceClick = (idToReplace: string) => {\r\n setCropTargetId(idToReplace);\r\n replaceInputRef.current?.click();\r\n };\r\n\r\n const handleReplaceImage = (files: FileList | null) => {\r\n if (!files || files.length === 0 || !cropTargetId) {\r\n return;\r\n }\r\n\r\n const file = Array.from(files).find((item) => item.type.includes(\"image/\"));\r\n if (!file) {\r\n return;\r\n }\r\n\r\n const preview = URL.createObjectURL(file);\r\n\r\n setImages((prev) => {\r\n const next = prev.map((img) => {\r\n if (img.id !== cropTargetId) {\r\n return img;\r\n }\r\n\r\n if (img.createdBlobUrl) {\r\n URL.revokeObjectURL(img.createdBlobUrl);\r\n }\r\n\r\n return {\r\n ...img,\r\n file,\r\n preview,\r\n createdBlobUrl: preview,\r\n };\r\n });\r\n\r\n onChange?.(\r\n next.map((img) => {\r\n if (img.file) {\r\n return img.file;\r\n }\r\n return img.preview;\r\n }),\r\n );\r\n\r\n return next;\r\n });\r\n\r\n setCropTargetId(null);\r\n if (replaceInputRef.current) {\r\n replaceInputRef.current.value = \"\";\r\n }\r\n };\r\n\r\n const handleDragOver = (e: React.DragEvent<HTMLDivElement>) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(true);\r\n };\r\n\r\n const handleDragLeave = (e: React.DragEvent<HTMLDivElement>) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(false);\r\n };\r\n\r\n const handleDrop = (e: React.DragEvent<HTMLDivElement>) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(false);\r\n addFiles(e.dataTransfer?.files || null);\r\n };\r\n\r\n const handleButtonClick = () => {\r\n inputRef.current?.click();\r\n };\r\n\r\n const canSelectMore =\r\n typeof maxImages === \"number\" && maxImages > 0\r\n ? images.length < maxImages\r\n : true;\r\n\r\n return (\r\n <>\r\n <div\r\n key={name}\r\n className={joinClasses(\r\n crudClasses.mediaPicker.multiImage,\r\n crudClasses.field.wrapper,\r\n parentClass || \"col-span-12\",\r\n )}\r\n >\r\n <InputLabel label={label} required={required} />\r\n <div\r\n className={joinClasses(\r\n crudClasses.mediaPicker.dropzone,\r\n \"relative rounded-md p-2 transition-all\",\r\n isDragging\r\n ? \"border-2 border-dashed border-blue-500 bg-blue-50 dark:bg-blue-900/20\"\r\n : \"border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-800\",\r\n errorMessage ? \"border-red-500\" : \"\",\r\n )}\r\n onDragOver={handleDragOver}\r\n onDragLeave={handleDragLeave}\r\n onDrop={handleDrop}\r\n id={`field-${name}`}\r\n >\r\n <input\r\n ref={inputRef}\r\n id={id}\r\n type=\"file\"\r\n accept={accept}\r\n multiple\r\n onChange={(e) => addFiles(e.target.files)}\r\n required={required && images.length === 0}\r\n className=\"absolute opacity-0 pointer-events-none h-1 w-1\"\r\n />\r\n <input\r\n ref={replaceInputRef}\r\n type=\"file\"\r\n accept={accept}\r\n onChange={(e) => handleReplaceImage(e.target.files)}\r\n className=\"absolute opacity-0 pointer-events-none h-1 w-1\"\r\n />\r\n\r\n {images.length === 0 ? (\r\n <div className=\"flex items-center space-x-4\">\r\n <div className=\"rounded-full bg-gray-100 dark:bg-gray-700 h-20 w-20 flex items-center justify-center\">\r\n <Icon\r\n icon=\"ri:multi-image-fill\"\r\n className=\"text-gray-400 w-10 h-10\"\r\n />\r\n </div>\r\n <div className=\"flex flex-col items-center space-y-1\">\r\n <ButtonComponent\r\n type=\"button\"\r\n onClick={handleButtonClick}\r\n variant=\"outlined\"\r\n color=\"default\"\r\n >\r\n <span className=\"text-sm font-medium\">Choose Images</span>\r\n </ButtonComponent>\r\n\r\n {dragDrop && (\r\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">\r\n or drag and drop your images here\r\n </p>\r\n )}\r\n </div>\r\n </div>\r\n ) : (\r\n <>\r\n <div className=\"flex items-center justify-between gap-2 mb-3\">\r\n <ButtonComponent\r\n type=\"button\"\r\n onClick={handleButtonClick}\r\n disabled={!canSelectMore}\r\n variant=\"outlined\"\r\n color=\"default\"\r\n >\r\n <span className=\"text-sm font-medium\">Upload Images</span>\r\n </ButtonComponent>\r\n\r\n <span className=\"text-xs text-gray-500 dark:text-gray-400\">\r\n {maxImages\r\n ? `${images.length}/${maxImages}`\r\n : `${images.length} selected`}\r\n </span>\r\n </div>\r\n\r\n <div className=\"grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 gap-3\">\r\n {images.map((img) => (\r\n <div\r\n key={img.id}\r\n className=\"relative group rounded-md overflow-hidden border border-gray-200 dark:border-gray-700\"\r\n >\r\n <img\r\n src={img.preview}\r\n alt=\"preview\"\r\n className=\"w-full h-28 object-cover\"\r\n />\r\n <div className=\"absolute top-2 right-2 flex items-center gap-1.5 opacity-100 sm:opacity-0 sm:group-hover:opacity-100 transition-opacity\">\r\n <button\r\n type=\"button\"\r\n onClick={() => handleReplaceClick(img.id)}\r\n className=\"w-7 h-7 rounded-full bg-white/90 text-gray-800 hover:bg-white flex items-center justify-center shadow\"\r\n aria-label=\"Replace image\"\r\n >\r\n <Icon icon=\"solar:refresh-bold\" className=\"w-4 h-4\" />\r\n </button>\r\n {cropImage && (\r\n <button\r\n type=\"button\"\r\n onClick={() => openCropModal(img)}\r\n className=\"w-7 h-7 rounded-full bg-white/90 text-gray-800 hover:bg-white flex items-center justify-center shadow\"\r\n aria-label=\"Crop image\"\r\n >\r\n <Icon icon=\"solar:crop-bold\" className=\"w-4 h-4\" />\r\n </button>\r\n )}\r\n <button\r\n type=\"button\"\r\n onClick={() => removeImage(img.id)}\r\n className=\"w-7 h-7 rounded-full bg-red-500/95 text-white hover:bg-red-600 flex items-center justify-center shadow\"\r\n aria-label=\"Delete image\"\r\n >\r\n <Icon\r\n icon=\"solar:trash-bin-trash-bold\"\r\n className=\"w-4 h-4\"\r\n />\r\n </button>\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </>\r\n )}\r\n\r\n {dragDrop && isDragging && images.length === 0 && (\r\n <div className=\"absolute inset-0 flex items-center justify-center pointer-events-none bg-blue-500/10 rounded-lg\">\r\n <span className=\"text-blue-600 dark:text-blue-400 font-semibold text-lg bg-white dark:bg-gray-800 px-4 py-2 rounded-lg shadow-lg\">\r\n Drop images here\r\n </span>\r\n </div>\r\n )}\r\n </div>\r\n {errorMessage && (\r\n <span\r\n className={joinClasses(\r\n crudClasses.field.error,\r\n \"text-red-500 text-xs mt-1\",\r\n )}\r\n >\r\n {errorMessage}\r\n </span>\r\n )}\r\n </div>\r\n\r\n <ImageCropperModal\r\n isOpen={cropModalOpen}\r\n imageSrc={cropSource}\r\n fileType={selectedFileType}\r\n fileName={selectedFileName}\r\n onClose={closeCropModal}\r\n onApply={handleCroppedImage}\r\n aspect={Number(aspect)}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport default MultiImagePicker;\r\n","import { useEffect } from \"react\";\r\nimport { X } from \"lucide-react\";\r\nimport { crudClasses, joinClasses } from \"../../../lib/crudClasses\";\r\n\r\ninterface ImagePreviewProps {\r\n src: string;\r\n alt?: string;\r\n isOpen: boolean;\r\n setIsOpen: (value: boolean) => void;\r\n}\r\n\r\nconst ImagePreview = ({\r\n src,\r\n alt = \"preview\",\r\n isOpen,\r\n setIsOpen,\r\n}: ImagePreviewProps) => {\r\n const closePreview = () => setIsOpen(false);\r\n\r\n useEffect(() => {\r\n const handleEsc = (e: KeyboardEvent) => {\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 <div\r\n className={joinClasses(\r\n crudClasses.imagePreview.root,\r\n \"fixed inset-0 z-50 flex items-center justify-center bg-black/70 dark:bg-black/80 backdrop-blur-sm animate-in fade-in duration-200\",\r\n )}\r\n onClick={closePreview}\r\n >\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 <div\r\n className={joinClasses(\r\n crudClasses.imagePreview.container,\r\n \"max-w-5xl w-full px-4 transform transition-all duration-200 scale-95 animate-in zoom-in-95\",\r\n )}\r\n onClick={(e) => e.stopPropagation()}\r\n >\r\n <img\r\n src={src}\r\n alt={alt}\r\n className={joinClasses(\r\n crudClasses.imagePreview.image,\r\n \"w-full max-h-[90vh] object-contain rounded-xl\",\r\n )}\r\n />\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default ImagePreview;\r\n","import { User } from \"lucide-react\";\r\nimport { useState } from \"react\";\r\nimport ImagePreview from \"../../Table/components/ImagePreview\";\r\nimport { crudClasses, joinClasses } from \"../../../lib/crudClasses\";\r\n\r\ninterface GroupRowProps {\r\n col: Record<string, any>;\r\n data: Record<string, any>;\r\n uiVariant?: \"default\" | \"card\" | \"split\";\r\n styleConfig?: {\r\n rowClass?: string;\r\n groupClass?: string;\r\n labelClass?: string;\r\n valueClass?: string;\r\n iconClass?: string;\r\n };\r\n}\r\n\r\nconst GroupRow = ({\r\n col,\r\n data,\r\n uiVariant = \"default\",\r\n styleConfig = {},\r\n}: GroupRowProps) => {\r\n const title = data[col.titleKey];\r\n const subtitle = data[col.subtitleKey];\r\n const image = data[col.imageKey];\r\n const fallback_icon = col.fallback_icon;\r\n\r\n const [targetImage, setTargetImage] = useState<{\r\n src: string;\r\n alt: string;\r\n } | null>(null);\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const openPreview = (img: { src: any; alt: string }) => {\r\n let imageObj = img;\r\n if (img && img.src instanceof File) {\r\n imageObj = { ...img, src: URL.createObjectURL(img.src) };\r\n }\r\n setTargetImage(imageObj as { src: string; alt: string });\r\n setIsOpen(true);\r\n };\r\n\r\n const renderAvatar = (size: \"sm\" | \"md\" | \"lg\") => {\r\n const sizeMap = {\r\n sm: { img: \"w-8 h-8\", wrap: \"w-8 h-8\", icon: \"w-4 h-4\" },\r\n md: { img: \"w-12 h-12\", wrap: \"w-12 h-12\", icon: \"w-6 h-6\" },\r\n lg: { img: \"w-16 h-16\", wrap: \"w-16 h-16\", icon: \"w-8 h-8\" },\r\n };\r\n const s = sizeMap[size];\r\n if (image) {\r\n return (\r\n <img\r\n src={image instanceof File ? URL.createObjectURL(image) : image}\r\n alt={title}\r\n onClick={() => openPreview({ src: image, alt: title })}\r\n className={`${s.img} cursor-pointer rounded-full object-cover border-2 border-white dark:border-gray-700 shadow flex-shrink-0`}\r\n />\r\n );\r\n }\r\n if (fallback_icon) {\r\n return fallback_icon instanceof Function\r\n ? fallback_icon(data)\r\n : fallback_icon;\r\n }\r\n return (\r\n <div\r\n className={`${s.wrap} flex items-center justify-center rounded-full border-2 border-gray-300 dark:border-gray-600 bg-gray-200 dark:bg-gray-600 flex-shrink-0`}\r\n >\r\n <User className={`${s.icon} text-gray-400`} />\r\n </div>\r\n );\r\n };\r\n\r\n // ── CARD variant ──────────────────────────────────────────────────────────────\r\n // Full-width profile banner card with gradient + decorative circle\r\n if (uiVariant === \"card\") {\r\n return (\r\n <>\r\n {isOpen && targetImage && (\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 <div\r\n className={joinClasses(\r\n crudClasses.details.row,\r\n \"col-span-12 relative overflow-hidden rounded-xl bg-gradient-to-r from-primary/10 via-primary/5 to-transparent dark:from-primary/20 dark:via-primary/10 border border-primary/20 dark:border-primary/30 p-5 flex items-center gap-4\",\r\n styleConfig.rowClass || \"\",\r\n styleConfig.groupClass || \"\",\r\n col.blockClass || \"\",\r\n )}\r\n >\r\n {/* Decorative background circle */}\r\n <div className=\"pointer-events-none absolute -right-6 -top-6 w-32 h-32 rounded-full bg-primary/8 dark:bg-primary/12\" />\r\n <div className=\"pointer-events-none absolute -right-2 -bottom-4 w-20 h-20 rounded-full bg-primary/5\" />\r\n {renderAvatar(\"lg\")}\r\n <div className=\"min-w-0 z-10\">\r\n <h3\r\n className={`text-lg font-bold text-gray-900 dark:text-white truncate ${styleConfig.valueClass || \"\"}`}\r\n >\r\n {title}\r\n </h3>\r\n <p\r\n className={`text-sm text-primary/70 dark:text-primary/60 font-medium truncate ${styleConfig.labelClass || \"\"}`}\r\n >\r\n {subtitle}\r\n </p>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n }\r\n\r\n // ── SPLIT variant ─────────────────────────────────────────────────────────────\r\n // Header row: full-width soft gradient banner before the property rows\r\n if (uiVariant === \"split\") {\r\n return (\r\n <>\r\n {isOpen && targetImage && (\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 <div\r\n className={joinClasses(\r\n crudClasses.details.row,\r\n \"flex items-center gap-3 px-5 py-4 bg-gradient-to-r from-primary/8 via-primary/4 to-transparent dark:from-primary/15 dark:via-primary/8\",\r\n styleConfig.rowClass || \"\",\r\n styleConfig.groupClass || \"\",\r\n col.blockClass || \"\",\r\n )}\r\n >\r\n {renderAvatar(\"md\")}\r\n <div className=\"min-w-0\">\r\n <h3\r\n className={`text-base font-bold text-gray-900 dark:text-white truncate ${styleConfig.valueClass || \"\"}`}\r\n >\r\n {title}\r\n </h3>\r\n <p\r\n className={`text-xs font-semibold text-primary/70 dark:text-primary/60 truncate ${styleConfig.labelClass || \"\"}`}\r\n >\r\n {subtitle}\r\n </p>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n }\r\n\r\n // ── DEFAULT variant ───────────────────────────────────────────────────────────\r\n return (\r\n <>\r\n {isOpen && targetImage && (\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 <div\r\n className={joinClasses(\r\n crudClasses.details.row,\r\n \"col-span-12 flex items-center space-x-4 p-4 rounded-xl bg-gray-100 dark:bg-gray-900\",\r\n styleConfig.rowClass || \"\",\r\n styleConfig.groupClass || \"\",\r\n col.blockClass || \"\",\r\n )}\r\n >\r\n {renderAvatar(\"lg\")}\r\n <div>\r\n <h3\r\n className={`text-xl font-semibold text-gray-900 dark:text-white ${styleConfig.valueClass || \"\"}`}\r\n >\r\n {title}\r\n </h3>\r\n <p\r\n className={`text-sm text-gray-500 dark:text-gray-400 ${styleConfig.labelClass || \"\"}`}\r\n >\r\n {subtitle}\r\n </p>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default GroupRow;\r\n","import { User } from \"lucide-react\";\r\nimport { useState } from \"react\";\r\nimport ImagePreview from \"../../Table/components/ImagePreview\";\r\nimport { crudClasses, joinClasses } from \"../../../lib/crudClasses\";\r\n\r\ninterface CardGroupProps {\r\n col: Record<string, any>;\r\n data: Record<string, any>;\r\n uiVariant?: \"default\" | \"card\" | \"split\";\r\n styleConfig?: {\r\n rowClass?: string;\r\n cardGroupClass?: string;\r\n labelClass?: string;\r\n valueClass?: string;\r\n iconClass?: string;\r\n };\r\n}\r\n\r\nconst CardGroup = ({\r\n col,\r\n data,\r\n uiVariant = \"default\",\r\n styleConfig = {},\r\n}: CardGroupProps) => {\r\n const title = data[col.titleKey];\r\n const subtitle = data[col.subtitleKey];\r\n const image = data[col.imageKey];\r\n const label = col.label;\r\n const Icon = col?.icon;\r\n const fallback_icon = col.fallback_icon;\r\n\r\n const [targetImage, setTargetImage] = useState<{\r\n src: string;\r\n alt: string;\r\n } | null>(null);\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const openPreview = (img: { src: any; alt: string }) => {\r\n let imageObj = img;\r\n if (img && img.src instanceof File) {\r\n imageObj = { ...img, src: URL.createObjectURL(img.src) };\r\n }\r\n setTargetImage(imageObj as { src: string; alt: string });\r\n setIsOpen(true);\r\n };\r\n\r\n const renderMiniAvatar = () => {\r\n if (image) {\r\n return (\r\n <img\r\n src={image instanceof File ? URL.createObjectURL(image) : image}\r\n alt={title}\r\n onClick={() => openPreview({ src: image, alt: title })}\r\n className=\"w-8 h-8 cursor-pointer rounded-full object-cover border-2 border-gray-200 dark:border-gray-700 flex-shrink-0\"\r\n />\r\n );\r\n }\r\n if (fallback_icon) {\r\n return fallback_icon instanceof Function\r\n ? fallback_icon(data)\r\n : fallback_icon;\r\n }\r\n return (\r\n <div className=\"w-8 h-8 flex items-center justify-center rounded-full border-2 border-gray-300 dark:border-gray-700 bg-gray-200 dark:bg-gray-600 flex-shrink-0\">\r\n <User className=\"w-5 h-5 text-gray-400\" />\r\n </div>\r\n );\r\n };\r\n\r\n // ── CARD variant ──────────────────────────────────────────────────────────────\r\n // Standalone card: icon badge top-left, label, then inline mini avatar + name\r\n if (uiVariant === \"card\") {\r\n return (\r\n <>\r\n {isOpen && targetImage && (\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 <div\r\n className={joinClasses(\r\n crudClasses.details.row,\r\n col.blockClass || \"col-span-6\",\r\n \"group bg-white dark:bg-gray-800 rounded-xl border border-gray-100 dark:border-gray-700/60 shadow-sm hover:shadow-md hover:-translate-y-0.5 transition-all duration-200 p-4 flex flex-col gap-2.5\",\r\n styleConfig.rowClass || \"\",\r\n styleConfig.cardGroupClass || \"\",\r\n )}\r\n >\r\n {Icon && (\r\n <div\r\n className={`w-8 h-8 rounded-lg bg-primary/10 dark:bg-primary/20 flex items-center justify-center text-primary flex-shrink-0 [&>svg]:w-4 [&>svg]:h-4 ${styleConfig.iconClass || \"\"}`}\r\n >\r\n {Icon}\r\n </div>\r\n )}\r\n <p\r\n className={`text-xs font-semibold uppercase tracking-wider text-gray-400 dark:text-gray-500 leading-none ${styleConfig.labelClass || \"\"}`}\r\n >\r\n {label}\r\n </p>\r\n <div className=\"flex items-center gap-2 mt-auto\">\r\n {renderMiniAvatar()}\r\n <div className=\"min-w-0\">\r\n <p\r\n className={`text-sm font-semibold text-gray-800 dark:text-gray-100 truncate ${styleConfig.valueClass || \"\"}`}\r\n >\r\n {title}\r\n </p>\r\n {subtitle && (\r\n <p className=\"text-xs text-gray-400 dark:text-gray-500 truncate\">\r\n {subtitle}\r\n </p>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n }\r\n\r\n // ── SPLIT variant ─────────────────────────────────────────────────────────────\r\n // Property-sheet row: left label band | right value band with mini avatar\r\n if (uiVariant === \"split\") {\r\n return (\r\n <>\r\n {isOpen && targetImage && (\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 <div\r\n className={joinClasses(\r\n crudClasses.details.row,\r\n \"flex items-stretch min-h-[52px]\",\r\n styleConfig.rowClass || \"\",\r\n styleConfig.cardGroupClass || \"\",\r\n col.blockClass || \"\",\r\n )}\r\n >\r\n {/* Label band */}\r\n <div className=\"w-[42%] flex-shrink-0 flex items-center gap-2 px-4 py-3 bg-gray-50 dark:bg-gray-800/80 border-r border-gray-200 dark:border-gray-700\">\r\n {Icon && (\r\n <span\r\n className={`text-primary/60 dark:text-primary/50 flex-shrink-0 [&>svg]:w-3.5 [&>svg]:h-3.5 ${styleConfig.iconClass || \"\"}`}\r\n >\r\n {Icon}\r\n </span>\r\n )}\r\n <p\r\n className={`text-xs font-semibold uppercase tracking-wide text-gray-500 dark:text-gray-400 leading-tight ${styleConfig.labelClass || \"\"}`}\r\n >\r\n {label}\r\n </p>\r\n </div>\r\n {/* Value band with mini avatar */}\r\n <div className=\"flex-1 flex items-center gap-2.5 px-4 py-3 bg-white dark:bg-gray-900\">\r\n {renderMiniAvatar()}\r\n <div className=\"min-w-0\">\r\n <p\r\n className={`text-sm text-gray-800 dark:text-gray-100 break-words ${styleConfig.valueClass || \"\"}`}\r\n >\r\n {title}\r\n </p>\r\n {subtitle && (\r\n <p className=\"text-xs text-gray-400 dark:text-gray-500 truncate\">\r\n {subtitle}\r\n </p>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n }\r\n\r\n // ── DEFAULT variant ───────────────────────────────────────────────────────────\r\n return (\r\n <>\r\n {isOpen && targetImage && (\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 <div\r\n className={joinClasses(\r\n crudClasses.details.row,\r\n \"col-span-12 flex items-center space-x-4 p-4 rounded-xl bg-gray-100 dark:bg-gray-900\",\r\n styleConfig.rowClass || \"\",\r\n styleConfig.cardGroupClass || \"\",\r\n col.blockClass || \"\",\r\n )}\r\n >\r\n {Icon && (\r\n <div className={`flex-shrink-0 ${styleConfig.iconClass || \"\"}`}>\r\n {Icon}\r\n </div>\r\n )}\r\n <div className=\"flex-1 min-w-0\">\r\n <p\r\n className={`text-sm font-medium text-gray-500 dark:text-gray-400 ${styleConfig.labelClass || \"\"}`}\r\n >\r\n {label}\r\n </p>\r\n <div className=\"flex items-center mt-1\">\r\n {renderMiniAvatar()}\r\n <div className=\"ml-2\">\r\n <p\r\n className={`mb-0 text-sm text-gray-900 dark:text-white break-words ${styleConfig.valueClass || \"\"}`}\r\n >\r\n {title}\r\n </p>\r\n <p\r\n className={`text-xs text-gray-500 dark:text-gray-400 ${styleConfig.labelClass || \"\"}`}\r\n >\r\n {subtitle}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\nexport default CardGroup;\r\n","import { crudClasses, joinClasses } from \"../../lib/crudClasses\";\r\n\r\nconst BADGE_COLORS: Record<string, { bg: string; border: string }> = {\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: Record<string, string> = {\r\n contained: \"bg\",\r\n outline: \"border !bg-transparent\",\r\n soft: \"bg opacity-90\",\r\n};\r\n\r\ninterface ChipProps {\r\n label: string;\r\n variant?: string;\r\n color?: string;\r\n className?: string;\r\n}\r\n\r\nconst Chip = ({\r\n label,\r\n variant = \"contained\",\r\n color = \"green\",\r\n className = \"\",\r\n}: ChipProps) => {\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={joinClasses(\r\n crudClasses.chip.root,\r\n \"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 >\r\n {label}\r\n </span>\r\n );\r\n};\r\n\r\nexport default Chip;\r\n","import { useState } from \"react\";\r\nimport Chip from \"../../Chip/Chip\";\r\nimport { formatDate } from \"../../../lib/utils\";\r\nimport ImagePreview from \"../../Table/components/ImagePreview\";\r\nimport { crudClasses, joinClasses } from \"../../../lib/crudClasses\";\r\n\r\ninterface DetailRowProps {\r\n col: Record<string, any>;\r\n data: Record<string, any>;\r\n uiVariant?: \"default\" | \"card\" | \"split\";\r\n styleConfig?: {\r\n rowClass?: string;\r\n labelClass?: string;\r\n valueClass?: string;\r\n iconClass?: string;\r\n mediaGridClass?: string;\r\n };\r\n}\r\n\r\nconst DetailRow = ({\r\n col,\r\n data,\r\n uiVariant = \"default\",\r\n styleConfig = {},\r\n}: DetailRowProps) => {\r\n const [targetImage, setTargetImage] = useState<{\r\n src: string;\r\n alt: string;\r\n } | null>(null);\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const Icon = col?.icon;\r\n const label = col.label;\r\n let value = data[col.key];\r\n const type = col.type;\r\n const variant = col.variant || \"outline\";\r\n let color = col.defaultColor;\r\n\r\n if (type === \"chip\" && col.chipOptions?.length > 0) {\r\n const chipObj = col?.chipOptions.find((obj: any) => 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 const getImageSource = (image: any): string => {\r\n if (!image) return \"\";\r\n if (typeof image === \"string\") return image;\r\n if (image instanceof File) return URL.createObjectURL(image);\r\n if (typeof image === \"object\") {\r\n if (typeof image.preview === \"string\") return image.preview;\r\n if (typeof image.src === \"string\") return image.src;\r\n if (image.src instanceof File) return URL.createObjectURL(image.src);\r\n if (image.file instanceof File) return URL.createObjectURL(image.file);\r\n }\r\n return \"\";\r\n };\r\n\r\n const openPreview = (src: string, alt: string) => {\r\n setTargetImage({ src, alt });\r\n setIsOpen(true);\r\n };\r\n\r\n const renderValue = (\r\n wrapClass = \"text-sm text-gray-900 dark:text-white break-words\",\r\n ) => {\r\n if (type === \"chip\") {\r\n return (\r\n <Chip label={value} variant={variant} color={color} className=\"mt-1\" />\r\n );\r\n }\r\n if (type === \"tinyEditor\") {\r\n return (\r\n <p\r\n className={`${wrapClass} ${styleConfig.valueClass || \"\"}`}\r\n dangerouslySetInnerHTML={{ __html: value }}\r\n />\r\n );\r\n }\r\n if (type === \"video\") {\r\n return value ? (\r\n <video\r\n key={value instanceof File ? URL.createObjectURL(value) : value}\r\n controls\r\n src={value instanceof File ? URL.createObjectURL(value) : value}\r\n onClick={(e) => e.stopPropagation()}\r\n className=\"shadow-sm mt-1 w-full max-w-xs max-h-[250px] rounded-md \"\r\n />\r\n ) : (\r\n <p className=\"text-sm text-gray-400\">N/A</p>\r\n );\r\n }\r\n if (type === \"audio\") {\r\n return value ? (\r\n <audio\r\n key={value instanceof File ? URL.createObjectURL(value) : value}\r\n controls\r\n src={value instanceof File ? URL.createObjectURL(value) : value}\r\n onClick={(e) => e.stopPropagation()}\r\n className=\"shadow-sm rounded-full mt-1 w-full max-w-xs\"\r\n />\r\n ) : (\r\n <p className=\"text-sm text-gray-400\">N/A</p>\r\n );\r\n }\r\n if (type === \"multiImage\") {\r\n return Array.isArray(value) && value.length > 0 ? (\r\n <div\r\n className={`mt-1 grid grid-cols-3 sm:grid-cols-4 gap-2 ${styleConfig.mediaGridClass || \"\"}`}\r\n >\r\n {value.map((img: any, idx: number) => {\r\n const src = getImageSource(img);\r\n if (!src) return null;\r\n return (\r\n <button\r\n key={`${src}-${idx}`}\r\n type=\"button\"\r\n onClick={() => openPreview(src, `Gallery ${idx + 1}`)}\r\n className=\"w-full h-16 rounded-lg overflow-hidden border border-gray-200 dark:border-gray-700 hover:border-primary/50 transition-colors\"\r\n >\r\n <img\r\n src={src}\r\n alt={`gallery-${idx + 1}`}\r\n className=\"w-full h-full object-cover\"\r\n />\r\n </button>\r\n );\r\n })}\r\n </div>\r\n ) : (\r\n <p className=\"text-sm text-gray-400\">N/A</p>\r\n );\r\n }\r\n return (\r\n <p className={`${wrapClass} ${styleConfig.valueClass || \"\"}`}>\r\n {type === \"date\" ? (\r\n <span>{formatDate(value, col.format || \"DD MMM YYYY\")}</span>\r\n ) : (\r\n <span>{value || \"N/A\"}</span>\r\n )}\r\n </p>\r\n );\r\n };\r\n\r\n // ── CARD variant ─────────────────────────────────────────────────────────────\r\n // Standalone elevated card per field — icon badge top-left, label, bold value\r\n if (uiVariant === \"card\") {\r\n return (\r\n <>\r\n <div\r\n className={joinClasses(\r\n crudClasses.details.row,\r\n col.blockClass || \"col-span-6\",\r\n \"group bg-white dark:bg-gray-800 rounded-xl border border-gray-100 dark:border-gray-700/60 shadow-sm hover:shadow-md hover:-translate-y-0.5 transition-all duration-200 p-4 flex flex-col gap-2.5\",\r\n styleConfig.rowClass || \"\",\r\n )}\r\n >\r\n {Icon && (\r\n <div\r\n className={`w-8 h-8 rounded-lg bg-primary/10 dark:bg-primary/20 flex items-center justify-center text-primary flex-shrink-0 [&>svg]:w-4 [&>svg]:h-4 ${styleConfig.iconClass || \"\"}`}\r\n >\r\n {Icon}\r\n </div>\r\n )}\r\n <p\r\n className={`text-xs font-semibold uppercase tracking-wider text-gray-400 dark:text-gray-500 leading-none ${styleConfig.labelClass || \"\"}`}\r\n >\r\n {label}\r\n </p>\r\n <div className=\"mt-auto\">\r\n {renderValue(\r\n \"text-sm font-semibold text-gray-800 dark:text-gray-100 break-words leading-snug\",\r\n )}\r\n </div>\r\n </div>\r\n {isOpen && targetImage && (\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\n // ── SPLIT variant ─────────────────────────────────────────────────────────────\r\n // Property-sheet row: left=muted label band | right=white value band\r\n if (uiVariant === \"split\") {\r\n return (\r\n <>\r\n <div\r\n className={joinClasses(\r\n crudClasses.details.row,\r\n \"flex items-stretch min-h-[52px]\",\r\n styleConfig.rowClass || \"\",\r\n col.blockClass || \"\",\r\n )}\r\n >\r\n {/* Label band */}\r\n <div className=\"w-[42%] flex-shrink-0 flex items-center gap-2 px-4 py-3 bg-gray-50 dark:bg-gray-800/80 border-r border-gray-200 dark:border-gray-700\">\r\n {Icon && (\r\n <span\r\n className={`text-primary/60 dark:text-primary/50 flex-shrink-0 [&>svg]:w-3.5 [&>svg]:h-3.5 ${styleConfig.iconClass || \"\"}`}\r\n >\r\n {Icon}\r\n </span>\r\n )}\r\n <p\r\n className={`text-xs font-semibold uppercase tracking-wide text-gray-500 dark:text-gray-400 leading-tight ${styleConfig.labelClass || \"\"}`}\r\n >\r\n {label}\r\n </p>\r\n </div>\r\n {/* Value band */}\r\n <div className=\"flex-1 flex items-center px-4 py-3 bg-white dark:bg-gray-900\">\r\n {renderValue(\r\n \"text-sm text-gray-800 dark:text-gray-100 break-words\",\r\n )}\r\n </div>\r\n </div>\r\n {isOpen && targetImage && (\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\n // ── DEFAULT variant ───────────────────────────────────────────────────────────\r\n return (\r\n <>\r\n <div\r\n className={joinClasses(\r\n crudClasses.details.row,\r\n \"col-span-12 flex items-center space-x-4 p-4 rounded-xl bg-gray-100 dark:bg-gray-900\",\r\n styleConfig.rowClass || \"\",\r\n col.blockClass || \"\",\r\n )}\r\n >\r\n {Icon && (\r\n <div className={`flex-shrink-0 ${styleConfig.iconClass || \"\"}`}>\r\n {Icon}\r\n </div>\r\n )}\r\n <div className=\"flex-1 min-w-0\">\r\n <p\r\n className={`text-sm font-medium text-gray-500 dark:text-gray-400 ${styleConfig.labelClass || \"\"}`}\r\n >\r\n {label}\r\n </p>\r\n {renderValue(\r\n \"mt-1 text-sm text-gray-900 dark:text-white break-words\",\r\n )}\r\n </div>\r\n </div>\r\n {isOpen && targetImage && (\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 DetailRow;\r\n","import { crudClasses, joinClasses } from \"../../../lib/crudClasses\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\ninterface RadioOption {\r\n label: string;\r\n value: any;\r\n}\r\n\r\ninterface RadioProps {\r\n value: any;\r\n onChange: (value: any) => void;\r\n text?: string;\r\n options: RadioOption[];\r\n label?: string;\r\n required?: boolean;\r\n name: string;\r\n disabled?: boolean;\r\n parentClass?: string;\r\n errorMessage?: string;\r\n}\r\n\r\nconst Radio = ({\r\n value = true,\r\n onChange,\r\n text,\r\n options = [],\r\n label,\r\n required,\r\n name = \"\",\r\n disabled = false,\r\n parentClass = \"\",\r\n errorMessage = \"\",\r\n}: RadioProps) => {\r\n const radioOptions: RadioOption[] =\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\r\n key={name}\r\n className={joinClasses(\r\n crudClasses.field.wrapper,\r\n parentClass || \"col-span-12\",\r\n )}\r\n >\r\n <InputLabel label={label} required={required} />\r\n <div\r\n 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 ${errorMessage ? \"border-red-500\" : \"\"}`}\r\n >\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 <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={String(opt.value)}\r\n disabled={disabled}\r\n id={`field-${name}`}\r\n checked={value === opt.value}\r\n onChange={() => onChange?.(opt.value)}\r\n className={joinClasses(\r\n crudClasses.field.input,\r\n \"w-4 h-4 border-gray-300 cursor-pointer\",\r\n )}\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 {errorMessage && (\r\n <span\r\n className={joinClasses(\r\n crudClasses.field.error,\r\n \"text-red-500 text-xs mt-1\",\r\n )}\r\n >\r\n {errorMessage}\r\n </span>\r\n )}\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default Radio;\r\n","import { Icon } from \"@iconify/react\";\r\nimport React, { useState, useEffect, useRef } from \"react\";\r\nimport InputLabel from \"./InputLabel\";\r\nimport Button from \"../../Button/Button\";\r\nimport { enqueueSnackbar } from \"notistack\";\r\nimport { crudClasses, joinClasses } from \"../../../lib/crudClasses\";\r\n\r\nconst ButtonComponent = Button as React.ComponentType<any>;\r\n\r\ntype MediaValue = File | { file?: File; preview?: string } | string | null;\r\n\r\ninterface VideoPickerProps {\r\n label: string;\r\n value: MediaValue;\r\n onChange: (file: File | null) => void;\r\n required?: boolean;\r\n accept?: string;\r\n id: string;\r\n dragDrop?: boolean;\r\n name: string;\r\n parentClass?: string;\r\n maxSize?: number;\r\n errorMessage?: string;\r\n}\r\n\r\nconst VideoPicker = ({\r\n label = \"\",\r\n value = null,\r\n onChange,\r\n required = false,\r\n accept = \"video/*\",\r\n id,\r\n dragDrop = false,\r\n name = \"\",\r\n parentClass = \"\",\r\n maxSize = 0,\r\n errorMessage = \"\",\r\n}: VideoPickerProps) => {\r\n const [video, setVideo] = useState<{ file?: File; preview?: string } | null>(\r\n null,\r\n );\r\n const [isDragging, setIsDragging] = useState(false);\r\n const inputRef = useRef<HTMLInputElement | null>(null);\r\n\r\n const maxSizeBytes = maxSize * 1024 * 1024;\r\n\r\n useEffect(() => {\r\n if (!value) {\r\n cleanupVideo();\r\n setVideo(null);\r\n return;\r\n }\r\n\r\n if (value instanceof File) {\r\n const preview = URL.createObjectURL(value);\r\n setVideo({ file: value, preview });\r\n\r\n return () => {\r\n URL.revokeObjectURL(preview);\r\n };\r\n } else if (typeof value === \"string\") {\r\n setVideo({ preview: value });\r\n } else if (value?.preview) {\r\n setVideo(value);\r\n }\r\n }, [value]);\r\n\r\n const cleanupVideo = () => {\r\n if (video?.preview && video.preview.startsWith(\"blob:\")) {\r\n URL.revokeObjectURL(video.preview);\r\n }\r\n };\r\n\r\n const handleFileChange = (files: FileList | null) => {\r\n if (!files || files.length === 0) return;\r\n\r\n const file = files[0];\r\n\r\n if (maxSizeBytes && file.size > maxSizeBytes) {\r\n enqueueSnackbar(\r\n `File is too large. Maximum allowed size is ${maxSize} MB`,\r\n {\r\n variant: \"warning\",\r\n },\r\n );\r\n return;\r\n }\r\n\r\n const preview = URL.createObjectURL(file);\r\n cleanupVideo();\r\n setVideo({ file, preview });\r\n onChange?.(file);\r\n };\r\n const removeVideo = (e?: React.MouseEvent<HTMLButtonElement>) => {\r\n if (e) e.stopPropagation();\r\n cleanupVideo();\r\n setVideo(null);\r\n onChange?.(null);\r\n if (inputRef.current) inputRef.current.value = \"\";\r\n };\r\n\r\n const handleDragOver = (e: React.DragEvent<HTMLDivElement>) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(true);\r\n };\r\n\r\n const handleDragLeave = (e: React.DragEvent<HTMLDivElement>) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(false);\r\n };\r\n\r\n const handleDrop = (e: React.DragEvent<HTMLDivElement>) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(false);\r\n if (e.dataTransfer?.files?.[0]?.type?.includes(\"video/\")) {\r\n handleFileChange(e.dataTransfer.files);\r\n }\r\n };\r\n\r\n const handleButtonClick = () => {\r\n inputRef.current?.click();\r\n };\r\n\r\n return (\r\n <div\r\n key={name}\r\n className={joinClasses(\r\n crudClasses.mediaPicker.video,\r\n crudClasses.field.wrapper,\r\n parentClass || \"col-span-12\",\r\n )}\r\n >\r\n <InputLabel label={label} required={required} />\r\n <div\r\n className={joinClasses(\r\n crudClasses.mediaPicker.dropzone,\r\n \"relative rounded-lg p-2 transition-all\",\r\n isDragging\r\n ? \"border-2 border-dashed border-blue-500 bg-blue-50 dark:bg-blue-900/20\"\r\n : \"border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-800\",\r\n errorMessage ? \"border-red-500\" : \"\",\r\n )}\r\n onDragOver={handleDragOver}\r\n onDragLeave={handleDragLeave}\r\n onDrop={handleDrop}\r\n id={`field-${name}`}\r\n >\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 && !video}\r\n className=\"absolute opacity-0 pointer-events-none h-[10px]\"\r\n />\r\n\r\n <div\r\n className={`flex items-center space-x-4 transition-all ${\r\n isDragging ? \"opacity-50\" : \"\"\r\n }`}\r\n >\r\n {video ? (\r\n <div className=\"flex items-center space-x-4\">\r\n <div className=\"relative\">\r\n {!required && (\r\n <button\r\n type=\"button\"\r\n onClick={removeVideo}\r\n className=\"absolute -top-2 -right-2 bg-red-500 text-white rounded-full p-1 shadow hover:bg-red-600 z-10\"\r\n >\r\n <Icon icon=\"mdi:close\" className=\"w-3 h-3\" />\r\n </button>\r\n )}\r\n <video\r\n key={video.preview}\r\n src={video.preview}\r\n controls\r\n controlsList=\"nodownload\"\r\n className=\"w-[260px] h-[150px] rounded-md object-cover\"\r\n />\r\n </div>\r\n <ButtonComponent type=\"button\" onClick={handleButtonClick}>\r\n Change Video File\r\n </ButtonComponent>\r\n </div>\r\n ) : (\r\n <div className=\"flex items-center justify-center space-x-4\">\r\n <div className=\"rounded-full bg-gray-100 dark:bg-gray-700 h-20 w-20 flex items-center justify-center\">\r\n <Icon icon=\"mdi:video\" className=\"text-gray-400 w-10 h-10\" />\r\n </div>\r\n\r\n <div className=\"flex flex-col items-center space-y-1\">\r\n <ButtonComponent\r\n type=\"button\"\r\n onClick={handleButtonClick}\r\n variant=\"outlined\"\r\n >\r\n Choose Video File\r\n </ButtonComponent>\r\n\r\n {dragDrop && (\r\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">\r\n or drag and drop your video here\r\n </p>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {dragDrop && isDragging && !video && (\r\n <div className=\"absolute inset-0 flex items-center justify-center pointer-events-none bg-blue-500/10 rounded-lg\">\r\n <span className=\"text-blue-600 dark:text-blue-400 font-semibold text-lg bg-white dark:bg-gray-800 px-4 py-2 rounded-lg shadow-lg\">\r\n Drop video here\r\n </span>\r\n </div>\r\n )}\r\n </div>\r\n {errorMessage && (\r\n <span\r\n className={joinClasses(\r\n crudClasses.field.error,\r\n \"text-red-500 text-xs mt-1\",\r\n )}\r\n >\r\n {errorMessage}\r\n </span>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default VideoPicker;\r\n","import Select from \"./Select\";\r\nimport { Switch } from \"./Switch\";\r\nimport PhoneInput from \"./PhoneInput\";\r\nimport { TextArea } from \"./TextArea\";\r\nimport ImagePicker from \"./ImagePicker\";\r\nimport { Input } from \"./Input\";\r\nimport TinyEditor from \"./TinyEditor\";\r\nimport Checkbox from \"./Checkbox\";\r\nimport AudioPicker from \"./AudioPicker\";\r\nimport MultiImagePicker from \"./MultiImagePicker\";\r\nimport GroupRow from \"../../Details/components/GroupRow\";\r\nimport CardGroup from \"../../Details/components/CardGroup\";\r\nimport DetailRow from \"../../Details/components/DetailRow\";\r\nimport Radio from \"./Radio\";\r\nimport VideoPicker from \"./VideoPicker\";\r\n\r\ninterface FieldConfig {\r\n key: string;\r\n label?: string;\r\n type?: string;\r\n options?: any[];\r\n placeholder?: string;\r\n rows?: number;\r\n inputClass?: string;\r\n search?: boolean;\r\n accept?: string;\r\n text?: string;\r\n required?: boolean;\r\n minLength?: number;\r\n dragDrop?: boolean;\r\n parentClass?: string;\r\n countriesList?: boolean;\r\n defaultCountry?: string;\r\n multiple?: boolean;\r\n dropdownMaxHeight?: number;\r\n editorKey?: string;\r\n fontFamily?: string;\r\n disabled?: boolean;\r\n negativeNumberAllow?: boolean;\r\n defaultValue?: any;\r\n renderCondition?: (formData: Record<string, any>) => boolean;\r\n pattern?: string;\r\n renderType?: string;\r\n cropImage?: boolean;\r\n aspectRatio?: number;\r\n dependencyKey?: string;\r\n mask?: string;\r\n maskApplyOnValue?: boolean;\r\n maxSize?: number;\r\n [key: string]: any;\r\n}\r\n\r\ninterface RenderFieldsProps {\r\n field: FieldConfig;\r\n errorMessage?: string;\r\n formData: Record<string, any>;\r\n handleChange: (key: string, value: any) => void;\r\n}\r\n\r\nconst RenderFields = ({\r\n field,\r\n formData,\r\n handleChange,\r\n errorMessage,\r\n}: RenderFieldsProps) => {\r\n const {\r\n key,\r\n label,\r\n type,\r\n options,\r\n placeholder,\r\n rows,\r\n inputClass,\r\n search,\r\n accept,\r\n text,\r\n required = false,\r\n minLength,\r\n dragDrop,\r\n parentClass,\r\n countriesList,\r\n defaultCountry,\r\n multiple,\r\n dropdownMaxHeight,\r\n editorKey,\r\n fontFamily,\r\n disabled,\r\n negativeNumberAllow,\r\n defaultValue,\r\n renderCondition,\r\n pattern,\r\n renderType,\r\n cropImage,\r\n aspectRatio,\r\n dependencyKey,\r\n mask,\r\n maskApplyOnValue,\r\n maxSize,\r\n } = field;\r\n\r\n let value = formData?.[key];\r\n if (value === undefined || value === null) {\r\n value = \"\";\r\n }\r\n\r\n const finalPlaceholder =\r\n placeholder || (type === \"select\" ? `Select ${label}` : `Enter ${label}`);\r\n\r\n const baseClass =\r\n \"w-full px-3 py-2 rounded-md border border-gray-300 dark:border-gray-600 text-sm focus:outline-none focus:ring-1 focus:ring-blue-200 bg-white text-black dark:bg-gray-700 dark:text-white\";\r\n\r\n if (renderCondition && typeof renderCondition === \"function\") {\r\n const shouldRender = renderCondition(formData);\r\n if (!shouldRender) {\r\n return null;\r\n }\r\n }\r\n\r\n if (renderType && renderType == \"details\") {\r\n switch (type) {\r\n case \"group\":\r\n return <GroupRow col={field} data={formData} />;\r\n case \"cardGroup\":\r\n return <CardGroup col={field} data={formData} />;\r\n default:\r\n return <DetailRow col={field} data={formData} />;\r\n }\r\n }\r\n\r\n switch (type) {\r\n case \"select\":\r\n return (\r\n <Select\r\n options={options || []}\r\n value={value}\r\n formData={formData}\r\n dependencyKey={dependencyKey}\r\n onChange={(val) => handleChange(key, val)}\r\n placeholder={finalPlaceholder}\r\n className={inputClass || \"\"}\r\n search={search}\r\n required={required}\r\n defaultValue={defaultValue}\r\n label={label || \"\"}\r\n name={key}\r\n countriesList={countriesList}\r\n disabled={disabled}\r\n parentClass={parentClass || \"\"}\r\n multiple={multiple}\r\n dropdownMaxHeight={dropdownMaxHeight}\r\n errorMessage={errorMessage}\r\n />\r\n );\r\n\r\n case \"checkbox\":\r\n return (\r\n <>\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 errorMessage={errorMessage}\r\n />\r\n </>\r\n );\r\n\r\n case \"radio\":\r\n return (\r\n <Radio\r\n value={value}\r\n onChange={(val) => handleChange(key, val)}\r\n text={text}\r\n options={options || []}\r\n label={label || \"\"}\r\n required={required}\r\n name={key}\r\n disabled={disabled}\r\n parentClass={parentClass || \"\"}\r\n errorMessage={errorMessage}\r\n />\r\n );\r\n\r\n case \"switch\":\r\n return (\r\n <Switch\r\n value={Boolean(value)}\r\n onChange={(val) => handleChange(key, val)}\r\n label={label || \"\"}\r\n required={required}\r\n name={key}\r\n disabled={disabled}\r\n className=\"\"\r\n parentClass={parentClass || \"\"}\r\n errorMessage={errorMessage}\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 errorMessage={errorMessage}\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 errorMessage={errorMessage}\r\n />\r\n );\r\n\r\n case \"image\":\r\n case \"multiImage\":\r\n if (multiple || type === \"multiImage\") {\r\n return (\r\n <MultiImagePicker\r\n value={Array.isArray(value) ? value : []}\r\n onChange={(imgList) => handleChange(key, imgList)}\r\n required={required}\r\n accept={accept || \"image/*\"}\r\n aspect={aspectRatio}\r\n id={`file-${key}`}\r\n dragDrop={dragDrop}\r\n cropImage={cropImage}\r\n label={label || \"\"}\r\n name={key}\r\n parentClass={parentClass || \"\"}\r\n maxImages={field.maxImages}\r\n errorMessage={errorMessage}\r\n />\r\n );\r\n }\r\n\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 aspect={aspectRatio}\r\n id={`file-${key}`}\r\n dragDrop={dragDrop}\r\n cropImage={cropImage}\r\n label={label || \"\"}\r\n name={key}\r\n parentClass={parentClass || \"\"}\r\n errorMessage={errorMessage}\r\n />\r\n );\r\n\r\n case \"audio\":\r\n return (\r\n <AudioPicker\r\n value={value}\r\n onChange={(audio) => handleChange(key, audio)}\r\n required={required}\r\n accept={accept || \"audio/*\"}\r\n id={`file-${key}`}\r\n dragDrop={dragDrop}\r\n label={label || \"\"}\r\n name={key}\r\n parentClass={parentClass || \"\"}\r\n maxSize={maxSize}\r\n errorMessage={errorMessage}\r\n />\r\n );\r\n case \"video\":\r\n return (\r\n <VideoPicker\r\n value={value}\r\n onChange={(video) => handleChange(key, video)}\r\n required={required}\r\n accept={accept || \"video/*\"}\r\n id={`file-${key}`}\r\n dragDrop={dragDrop}\r\n label={label || \"\"}\r\n name={key}\r\n maxSize={maxSize}\r\n parentClass={parentClass || \"\"}\r\n errorMessage={errorMessage}\r\n />\r\n );\r\n\r\n case \"tinyEditor\":\r\n return (\r\n <TinyEditor\r\n value={value}\r\n name={key}\r\n onChange={(newValue) => handleChange(key, newValue)}\r\n required={required}\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 errorMessage={errorMessage}\r\n />\r\n );\r\n\r\n default:\r\n return (\r\n <Input\r\n field={field}\r\n type={type || \"text\"}\r\n defaultValue={defaultValue}\r\n value={value}\r\n onChange={(updatedValue) => handleChange(key, updatedValue)}\r\n placeholder={finalPlaceholder}\r\n className={`${baseClass} ${inputClass || \"\"}`}\r\n required={required}\r\n name={key}\r\n minLength={minLength}\r\n label={label || \"\"}\r\n negativeNumberAllow={negativeNumberAllow}\r\n parentClass={parentClass || \"\"}\r\n disabled={disabled}\r\n pattern={pattern}\r\n mask={mask}\r\n errorMessage={errorMessage}\r\n maskApplyOnValue={maskApplyOnValue}\r\n />\r\n );\r\n }\r\n};\r\n\r\nexport default RenderFields;\r\n","import React, { useState } from \"react\";\r\nimport { X } from \"lucide-react\";\r\nimport Button from \"../Button/Button\";\r\nimport RenderFields from \"../Form/components/RenderFields\";\r\nimport { crudClasses, joinClasses } from \"../../lib/crudClasses\";\r\nimport { FormField } from \"../../types/crudtypes\";\r\n\r\ninterface FilterConfig {\r\n component: React.ComponentType<{\r\n filters: Record<string, any>;\r\n onFilterChange: (key: string, value: any) => void;\r\n }>;\r\n fields: Array<FormField>;\r\n}\r\n\r\ninterface FilterDrawerProps {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n config: FilterConfig;\r\n onApply: (filters: Record<string, any>) => void;\r\n}\r\n\r\nconst FilterDrawer = ({\r\n isOpen,\r\n onClose,\r\n config,\r\n onApply,\r\n}: FilterDrawerProps) => {\r\n const [filters, setFilters] = useState<Record<string, any>>({});\r\n\r\n const handleChange = (key: string, value: any) => {\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 const DynamicComponent = config?.component;\r\n\r\n return (\r\n <>\r\n <div\r\n className={joinClasses(\r\n crudClasses.filterDrawer.overlay,\r\n \"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 <div\r\n className={joinClasses(\r\n crudClasses.filterDrawer.panel,\r\n \"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 transform transition-transform duration-300 ease-in-out\",\r\n isOpen ? \"translate-x-0\" : \"translate-x-full\",\r\n )}\r\n >\r\n <div\r\n className={joinClasses(\r\n crudClasses.filterDrawer.header,\r\n \"flex items-center justify-between px-4 py-3 border-b border-gray-200 dark:border-gray-700\",\r\n )}\r\n >\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 {isOpen && (\r\n <div\r\n className={joinClasses(\r\n crudClasses.filterDrawer.body,\r\n \"flex-1 overflow-y-auto px-4 py-3\",\r\n )}\r\n >\r\n {DynamicComponent ? (\r\n <DynamicComponent\r\n filters={filters}\r\n onFilterChange={handleChange}\r\n />\r\n ) : (\r\n <div className=\"space-y-4\">\r\n {config?.fields?.map((field) => (\r\n <RenderFields\r\n key={field.key}\r\n field={field}\r\n formData={filters}\r\n handleChange={handleChange}\r\n />\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n\r\n <div\r\n className={joinClasses(\r\n crudClasses.filterDrawer.footer,\r\n \"flex gap-2 px-4 py-3 border-t border-gray-200 dark:border-gray-700\",\r\n )}\r\n >\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 { crudClasses, joinClasses } from \"../../../lib/crudClasses\";\r\n\r\ninterface TableSkeletonProps {\r\n rows: number;\r\n columns: number;\r\n}\r\n\r\nconst TableSkeleton = ({ rows = 5, columns = 5 }: TableSkeletonProps) => {\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\r\n className={joinClasses(\r\n crudClasses.tableSkeleton.root,\r\n crudClasses.tableSkeleton.table,\r\n \"w-full border-collapse\",\r\n )}\r\n >\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, useRef, useState } from \"react\";\r\nimport { ArrowUpDown } from \"lucide-react\";\r\nimport { crudClasses, joinClasses } from \"../../../lib/crudClasses\";\r\n\r\ninterface SortOption {\r\n value: string;\r\n label: string;\r\n [key: string]: any;\r\n}\r\n\r\ninterface SortDropdownProps {\r\n options: SortOption[];\r\n value: string;\r\n onChange: (value: string, option: SortOption | null) => void;\r\n clearLabel?: string;\r\n}\r\n\r\nconst SortDropdown = ({\r\n options = [],\r\n value = \"\",\r\n onChange,\r\n clearLabel = \"\",\r\n}: SortDropdownProps) => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const sortRef = useRef<HTMLDivElement | null>(null);\r\n const isSortApplied = Boolean(value);\r\n\r\n useEffect(() => {\r\n const handleClickOutside = (e: MouseEvent) => {\r\n if (sortRef.current && !sortRef.current.contains(e.target as Node)) {\r\n setIsOpen(false);\r\n }\r\n };\r\n\r\n document.addEventListener(\"click\", handleClickOutside);\r\n return () => document.removeEventListener(\"click\", handleClickOutside);\r\n }, []);\r\n\r\n const handleSelect = (selectedValue: string) => {\r\n const selectedOption = options.find((opt) => opt.value === selectedValue);\r\n onChange(selectedValue, selectedOption || null);\r\n setIsOpen(false);\r\n };\r\n\r\n if (!options?.length) return null;\r\n\r\n return (\r\n <div\r\n className={joinClasses(crudClasses.sortDropdown.root, \"relative\")}\r\n ref={sortRef}\r\n >\r\n <button\r\n type=\"button\"\r\n onClick={() => setIsOpen((prev) => !prev)}\r\n className={joinClasses(\r\n crudClasses.sortDropdown.trigger,\r\n \"relative inline-flex items-center justify-center h-[36px] w-[36px] rounded-md border border-gray-300 dark:border-gray-600 bg-gray-50 dark:bg-gray-700 text-gray-700 dark:text-gray-200 hover:bg-gray-100 dark:hover:bg-gray-600 transition\",\r\n )}\r\n aria-label=\"Open sort options\"\r\n >\r\n <ArrowUpDown className=\"w-4 h-4\" />\r\n {isSortApplied && (\r\n <span className=\"absolute top-1 right-1 w-2 h-2 bg-red-500 rounded-full\"></span>\r\n )}\r\n </button>\r\n\r\n {isOpen && (\r\n <div\r\n className={joinClasses(\r\n crudClasses.sortDropdown.menu,\r\n \"absolute right-0 mt-2 z-20 min-w-[220px] max-h-[260px] overflow-auto rounded-md border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-800 shadow-lg\",\r\n )}\r\n >\r\n {Boolean(clearLabel?.trim()) && (\r\n <button\r\n type=\"button\"\r\n onClick={() => handleSelect(\"\")}\r\n className={joinClasses(\r\n crudClasses.sortDropdown.item,\r\n \"w-full text-left px-3 py-2 text-sm transition hover:bg-gray-100 dark:hover:bg-gray-700\",\r\n !value\r\n ? \"bg-gray-100 dark:bg-gray-700 text-gray-900 dark:text-white\"\r\n : \"text-gray-700 dark:text-gray-200\",\r\n )}\r\n >\r\n {clearLabel}\r\n </button>\r\n )}\r\n\r\n {options.map((option) => (\r\n <button\r\n key={option.value}\r\n type=\"button\"\r\n onClick={() => handleSelect(option.value)}\r\n className={joinClasses(\r\n crudClasses.sortDropdown.item,\r\n \"w-full text-left px-3 py-2 text-sm transition hover:bg-gray-100 dark:hover:bg-gray-700\",\r\n value === option.value\r\n ? \"bg-gray-100 dark:bg-gray-700 text-gray-900 dark:text-white\"\r\n : \"text-gray-700 dark:text-gray-200\",\r\n )}\r\n >\r\n {option.label}\r\n </button>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default SortDropdown;\r\n","interface SortOption {\r\n value: string;\r\n label: string;\r\n key: string;\r\n order: \"asc\" | \"desc\";\r\n type?: string;\r\n}\r\n\r\ninterface FieldRule {\r\n key?: string;\r\n type?: string;\r\n label?: string;\r\n}\r\n\r\ninterface SortChangePayload {\r\n value: string;\r\n option: SortOption | null;\r\n key: string;\r\n order: string;\r\n type: string;\r\n}\r\n\r\ninterface SortConfig {\r\n enabled?: boolean;\r\n useServerSideSorting?: boolean;\r\n options?: SortOption[];\r\n fields?: (string | FieldRule)[];\r\n defaultValue?: string;\r\n autoGenerate?: boolean;\r\n clearLabel?: string;\r\n onChange?: ((payload: SortChangePayload) => void) | null;\r\n}\r\n\r\ninterface NormalizedSortConfig {\r\n enabled: boolean;\r\n useServerSideSorting: boolean;\r\n options: SortOption[];\r\n fields: (string | FieldRule)[];\r\n defaultValue: string;\r\n autoGenerate: boolean;\r\n clearLabel: string;\r\n onChange: ((payload: SortChangePayload) => void) | null;\r\n}\r\n\r\ninterface TableColumn {\r\n key: string;\r\n type?: string;\r\n title?: string;\r\n sortKey?: string;\r\n sortType?: string;\r\n sortLabel?: string;\r\n titleKey?: string;\r\n chipOptions?: Array<{ value: any; label: string }>;\r\n}\r\n\r\nconst BASE_SORT_CONFIG: NormalizedSortConfig = {\r\n enabled: false,\r\n useServerSideSorting: false,\r\n options: [],\r\n fields: [],\r\n defaultValue: \"\",\r\n autoGenerate: true,\r\n clearLabel: \"\",\r\n onChange: null,\r\n};\r\n\r\nexport const normalizeSortConfig = (\r\n sortConfig: boolean | SortConfig | null | undefined,\r\n): NormalizedSortConfig => {\r\n if (sortConfig === true) {\r\n return { ...BASE_SORT_CONFIG, enabled: true };\r\n }\r\n\r\n if (!sortConfig || typeof sortConfig !== \"object\") {\r\n return BASE_SORT_CONFIG;\r\n }\r\n\r\n return {\r\n ...BASE_SORT_CONFIG,\r\n ...sortConfig,\r\n enabled: sortConfig.enabled ?? true,\r\n autoGenerate: sortConfig.autoGenerate ?? true,\r\n };\r\n};\r\n\r\nexport const getSortableColumns = (\r\n tableHead: TableColumn[] = [],\r\n): TableColumn[] => {\r\n return tableHead.filter((col) => {\r\n const blockedTypes = [\"menu_actions\", \"index\", \"audio\", \"avatar\"];\r\n if (col.type && blockedTypes.includes(col.type)) return false;\r\n\r\n const effectiveKey =\r\n col.sortKey || (col.type === \"group\" ? col.titleKey : col.key);\r\n return Boolean(effectiveKey);\r\n });\r\n};\r\n\r\nconst detectSortType = (col: TableColumn): string => {\r\n if (col.sortType) return col.sortType;\r\n if (col.type === \"date\") return \"date\";\r\n if (col.type === \"number\") return \"number\";\r\n\r\n const sortKeyName = String(\r\n col.sortKey || (col.type === \"group\" ? col.titleKey : col.key) || \"\",\r\n ).toLowerCase();\r\n\r\n const isPhoneLike = [\"phone\", \"mobile\", \"contact\", \"tel\", \"whatsapp\"].some(\r\n (keyword) => sortKeyName.includes(keyword),\r\n );\r\n\r\n if (isPhoneLike) return \"phone\";\r\n\r\n if (Array.isArray(col.chipOptions) && col.chipOptions.length > 0) {\r\n const allBoolean = col.chipOptions.every(\r\n (opt) => typeof opt.value === \"boolean\",\r\n );\r\n\r\n if (allBoolean) return \"boolean\";\r\n }\r\n\r\n return \"string\";\r\n};\r\n\r\nexport const buildDefaultSortOptions = (\r\n columns: TableColumn[] = [],\r\n): SortOption[] => {\r\n return columns.flatMap((col) => {\r\n const key = col.sortKey || (col.type === \"group\" ? col.titleKey : col.key);\r\n const label = col.sortLabel || col.title || key;\r\n const type = detectSortType(col);\r\n\r\n if (!key) return [];\r\n\r\n if (type === \"number\") {\r\n return [\r\n {\r\n value: `${key}_asc`,\r\n label: `${label} (Low-High)`,\r\n key,\r\n order: \"asc\" as const,\r\n type,\r\n },\r\n {\r\n value: `${key}_desc`,\r\n label: `${label} (High-Low)`,\r\n key,\r\n order: \"desc\" as const,\r\n type,\r\n },\r\n ];\r\n }\r\n\r\n if (type === \"phone\") {\r\n return [\r\n {\r\n value: `${key}_asc`,\r\n label: `${label} (0-9)`,\r\n key,\r\n order: \"asc\" as const,\r\n type,\r\n },\r\n {\r\n value: `${key}_desc`,\r\n label: `${label} (9-0)`,\r\n key,\r\n order: \"desc\" as const,\r\n type,\r\n },\r\n ];\r\n }\r\n\r\n if (type === \"date\") {\r\n return [\r\n {\r\n value: `${key}_desc`,\r\n label: `${label} (Newest First)`,\r\n key,\r\n order: \"desc\" as const,\r\n type,\r\n },\r\n {\r\n value: `${key}_asc`,\r\n label: `${label} (Oldest First)`,\r\n key,\r\n order: \"asc\" as const,\r\n type,\r\n },\r\n ];\r\n }\r\n\r\n if (type === \"boolean\") {\r\n return [\r\n {\r\n value: `${key}_desc`,\r\n label: `${label} (True First)`,\r\n key,\r\n order: \"desc\" as const,\r\n type,\r\n },\r\n {\r\n value: `${key}_asc`,\r\n label: `${label} (False First)`,\r\n key,\r\n order: \"asc\" as const,\r\n type,\r\n },\r\n ];\r\n }\r\n\r\n return [\r\n {\r\n value: `${key}_asc`,\r\n label: `${label} (A-Z)`,\r\n key,\r\n order: \"asc\" as const,\r\n type,\r\n },\r\n {\r\n value: `${key}_desc`,\r\n label: `${label} (Z-A)`,\r\n key,\r\n order: \"desc\" as const,\r\n type,\r\n },\r\n ];\r\n });\r\n};\r\n\r\nexport const getNormalizedSortOptions = (\r\n normalizedSortConfig: NormalizedSortConfig,\r\n sortableColumns: TableColumn[] = [],\r\n): SortOption[] => {\r\n const hasExplicitOptions =\r\n Array.isArray(normalizedSortConfig.options) &&\r\n normalizedSortConfig.options.length > 0;\r\n\r\n if (hasExplicitOptions) {\r\n return normalizedSortConfig.options.map((option) => ({\r\n ...option,\r\n type: option.type || \"string\",\r\n order: (option.order === \"desc\" ? \"desc\" : \"asc\") as \"asc\" | \"desc\",\r\n }));\r\n }\r\n\r\n const fieldRules = Array.isArray(normalizedSortConfig.fields)\r\n ? normalizedSortConfig.fields\r\n : [];\r\n\r\n if (fieldRules.length > 0) {\r\n const fieldColumns: TableColumn[] = fieldRules\r\n .map((field) => {\r\n const fieldKey = typeof field === \"string\" ? field : field.key;\r\n const targetCol = sortableColumns.find(\r\n (col) =>\r\n col.key === fieldKey ||\r\n col.sortKey === fieldKey ||\r\n (col.type === \"group\" && col.titleKey === fieldKey),\r\n );\r\n\r\n if (!targetCol) return null;\r\n\r\n return {\r\n ...targetCol,\r\n sortKey:\r\n typeof field === \"object\" && field.key\r\n ? field.key\r\n : targetCol.sortKey,\r\n sortType:\r\n typeof field === \"object\" && field.type\r\n ? field.type\r\n : targetCol.sortType,\r\n sortLabel:\r\n typeof field === \"object\" && field.label\r\n ? field.label\r\n : targetCol.sortLabel,\r\n } as TableColumn;\r\n })\r\n .filter((col) => col !== null) as TableColumn[];\r\n\r\n return buildDefaultSortOptions(fieldColumns);\r\n }\r\n\r\n if (!normalizedSortConfig.autoGenerate) return [];\r\n return buildDefaultSortOptions(sortableColumns);\r\n};\r\n\r\nexport const sortTableData = (\r\n filteredData: any[] = [],\r\n sortBy: string = \"\",\r\n normalizedSortConfig: NormalizedSortConfig | null,\r\n normalizedSortOptions: SortOption[] = [],\r\n): any[] => {\r\n if (\r\n !normalizedSortConfig?.enabled ||\r\n !sortBy ||\r\n normalizedSortConfig?.useServerSideSorting\r\n ) {\r\n return filteredData;\r\n }\r\n\r\n const selectedOption = normalizedSortOptions?.find(\r\n (opt) => opt.value === sortBy,\r\n );\r\n if (!selectedOption?.key) {\r\n return filteredData;\r\n }\r\n\r\n const direction = selectedOption.order === \"desc\" ? \"desc\" : \"asc\";\r\n const sortKey = selectedOption.key;\r\n const sortType = selectedOption.type || \"string\";\r\n\r\n const normalizePhone = (value: any): string =>\r\n String(value ?? \"\")\r\n .replace(/[^\\d]/g, \"\")\r\n .trim();\r\n\r\n return [...filteredData].sort((a, b) => {\r\n const aValue = a?.[sortKey];\r\n const bValue = b?.[sortKey];\r\n\r\n if (aValue == null && bValue == null) return 0;\r\n if (aValue == null) return direction === \"asc\" ? 1 : -1;\r\n if (bValue == null) return direction === \"asc\" ? -1 : 1;\r\n\r\n let comparison = 0;\r\n\r\n if (sortType === \"number\") {\r\n comparison = Number(aValue) - Number(bValue);\r\n } else if (sortType === \"phone\") {\r\n comparison = normalizePhone(aValue).localeCompare(\r\n normalizePhone(bValue),\r\n undefined,\r\n {\r\n numeric: true,\r\n },\r\n );\r\n } else if (sortType === \"date\") {\r\n comparison = new Date(aValue).getTime() - new Date(bValue).getTime();\r\n } else if (sortType === \"boolean\") {\r\n comparison = Number(Boolean(aValue)) - Number(Boolean(bValue));\r\n } else {\r\n comparison = String(aValue).localeCompare(String(bValue));\r\n }\r\n\r\n return direction === \"asc\" ? comparison : -comparison;\r\n });\r\n};\r\n","import React, { useState, useMemo, useRef, useEffect } from \"react\";\r\nimport {\r\n ChevronLeft,\r\n ChevronRight,\r\n Search,\r\n EllipsisVertical,\r\n Filter,\r\n User,\r\n Music,\r\n Plus,\r\n Download,\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\nimport SortDropdown from \"./components/SortDropdown\";\r\nimport {\r\n normalizeSortConfig,\r\n getSortableColumns,\r\n getNormalizedSortOptions,\r\n sortTableData,\r\n} from \"./utils/sortUtils\";\r\nimport { crudClasses, joinClasses } from \"../../lib/crudClasses\";\r\n\r\ninterface TableProps {\r\n config: Record<string, any>;\r\n setShowAdd: (value: boolean) => void;\r\n title: string;\r\n buttonText?: string;\r\n description?: string;\r\n showAddButton?: boolean;\r\n}\r\n\r\ninterface CSVField {\r\n label: string;\r\n key: string;\r\n}\r\n\r\nconst Table = ({\r\n config,\r\n setShowAdd,\r\n title,\r\n buttonText,\r\n description,\r\n showAddButton,\r\n}: TableProps) => {\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 sort = { enabled: false },\r\n pagination = {\r\n enabled: false,\r\n rows_per_page: 10,\r\n useServerSidePagination: false,\r\n },\r\n exportCSV = {\r\n enabled: false,\r\n fileName: \"\",\r\n fields: [],\r\n },\r\n emptyMessage = \"No data available\",\r\n onMenuAction,\r\n setServerSidePaginationData = () => {},\r\n onFilterApply,\r\n filterConfig = null,\r\n rowClick = null,\r\n } = config;\r\n\r\n const [searchTerm, setSearchTerm] = useState(\"\");\r\n const [activeMenu, setActiveMenu] = useState<any>(null);\r\n const [menuList, setMenuList] = useState<any[]>([]);\r\n const [menuPosition, setMenuPosition] = useState({ top: 0, left: 0 });\r\n const [showFilters, setShowFilters] = useState(false);\r\n const [appliedFilters, setAppliedFilters] = useState<Record<string, any>>({});\r\n\r\n const normalizedSortConfig = useMemo(() => normalizeSortConfig(sort), [sort]);\r\n\r\n const sortableColumns = useMemo(\r\n () => getSortableColumns(table_head),\r\n [table_head],\r\n );\r\n\r\n const normalizedSortOptions = useMemo(() => {\r\n return getNormalizedSortOptions(normalizedSortConfig, sortableColumns);\r\n }, [normalizedSortConfig, sortableColumns]);\r\n\r\n const [sortBy, setSortBy] = useState(\r\n normalizedSortConfig?.defaultValue || \"\",\r\n );\r\n\r\n const [targetImage, setTargetImage] = useState<{\r\n src: string;\r\n alt: string;\r\n } | null>(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 sortedData = useMemo(() => {\r\n return sortTableData(\r\n filteredData,\r\n sortBy,\r\n normalizedSortConfig,\r\n normalizedSortOptions,\r\n );\r\n }, [filteredData, sortBy, normalizedSortConfig, normalizedSortOptions]);\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 sortedData;\r\n const start = (currentPage - 1) * pageSize;\r\n return sortedData.slice(start, start + pageSize);\r\n }, [sortedData, currentPage, pageSize, pagination.useServerSidePagination]);\r\n\r\n const menuRef = useRef<HTMLDivElement | null>(null);\r\n const tableScopeRef = useRef<HTMLDivElement | null>(null);\r\n const buttonRefs = useRef<Record<string, HTMLButtonElement | null>>({});\r\n const searchTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n\r\n const menuPortalTarget =\r\n typeof document !== \"undefined\"\r\n ? (tableScopeRef.current?.closest(\".racm-root\") as HTMLElement | null) ||\r\n document.body\r\n : null;\r\n\r\n const handleSearchChange = (value: string) => {\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: Record<string, any>) => ({\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 handleSortChange = (value: string, selectedOption: any = null) => {\r\n setSortBy(value);\r\n setCurrentPage(1);\r\n\r\n const payload = {\r\n value,\r\n option: selectedOption,\r\n key: selectedOption?.key || \"\",\r\n order: selectedOption?.order || \"\",\r\n type: selectedOption?.type || \"\",\r\n };\r\n\r\n if (typeof normalizedSortConfig?.onChange === \"function\") {\r\n normalizedSortConfig.onChange(payload);\r\n }\r\n };\r\n\r\n const handleActionClick = (action: any, item: any, e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n setActiveMenu(null);\r\n onMenuAction?.(action.type, item);\r\n };\r\n\r\n const handleMenuToggle = (\r\n itemId: any,\r\n e: React.MouseEvent<HTMLButtonElement>,\r\n menu_list: any[],\r\n ) => {\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: number) => {\r\n return (currentPage - 1) * pageSize + index + 1;\r\n };\r\n\r\n const openPreview = (image: any) => {\r\n let imageObj = image;\r\n if (imageObj && imageObj.src instanceof File) {\r\n imageObj = { ...imageObj, src: URL.createObjectURL(imageObj.src) };\r\n }\r\n setTargetImage(imageObj);\r\n setIsOpen(true);\r\n };\r\n\r\n const getImageSource = (image: any): string => {\r\n if (!image) return \"\";\r\n\r\n if (typeof image === \"string\") {\r\n return image;\r\n }\r\n\r\n if (image instanceof File) {\r\n return URL.createObjectURL(image);\r\n }\r\n\r\n if (typeof image === \"object\") {\r\n if (typeof image.preview === \"string\") {\r\n return image.preview;\r\n }\r\n if (typeof image.src === \"string\") {\r\n return image.src;\r\n }\r\n if (image.src instanceof File) {\r\n return URL.createObjectURL(image.src);\r\n }\r\n if (image.file instanceof File) {\r\n return URL.createObjectURL(image.file);\r\n }\r\n }\r\n\r\n return \"\";\r\n };\r\n\r\n const renderMultiImageCell = (value: any, col: any) => {\r\n const images = Array.isArray(value) ? value : [];\r\n\r\n if (images.length === 0) {\r\n return <span className={col.className || \"\"}>N/A</span>;\r\n }\r\n\r\n const maxPreview = col.maxPreview || 3;\r\n const visibleImages = images.slice(0, maxPreview);\r\n const remaining = images.length - visibleImages.length;\r\n\r\n return (\r\n <div className=\"flex items-center\">\r\n <div className=\"flex -space-x-2\">\r\n {visibleImages.map((image: any, idx: number) => {\r\n const src = getImageSource(image);\r\n if (!src) return null;\r\n\r\n return (\r\n <button\r\n key={`${src}-${idx}`}\r\n type=\"button\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n openPreview({ src, alt: `Gallery ${idx + 1}` });\r\n }}\r\n className=\"w-8 h-8 rounded-full border-2 border-white dark:border-gray-800 overflow-hidden\"\r\n >\r\n <img\r\n src={src}\r\n alt={`gallery-${idx + 1}`}\r\n className=\"w-full h-full object-cover\"\r\n />\r\n </button>\r\n );\r\n })}\r\n </div>\r\n\r\n {remaining > 0 && (\r\n <span className=\"ml-2 text-xs font-medium text-gray-600 dark:text-gray-300\">\r\n +{remaining}\r\n </span>\r\n )}\r\n </div>\r\n );\r\n };\r\n\r\n const renderAvatar = (\r\n imageSrc: any,\r\n imageAlt: string,\r\n className: string,\r\n fallback_icon: any = null,\r\n row: any = null,\r\n ) => {\r\n return (\r\n <>\r\n {imageSrc ? (\r\n <img\r\n src={\r\n imageSrc instanceof File\r\n ? URL.createObjectURL(imageSrc)\r\n : imageSrc\r\n }\r\n alt={imageAlt || \"Avatar\"}\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n openPreview({ src: imageSrc, alt: imageAlt });\r\n }}\r\n className={`w-10 h-10 cursor-pointer shrink-0 rounded-full object-cover border border-gray-200 dark:border-gray-700 ${className || \"\"}`}\r\n />\r\n ) : (\r\n <>\r\n {fallback_icon ? (\r\n typeof fallback_icon === \"function\" ? (\r\n fallback_icon(row)\r\n ) : (\r\n fallback_icon\r\n )\r\n ) : (\r\n <div\r\n className={`w-10 h-10 flex items-center shrink-0 justify-center rounded-full border border-gray-300 dark:border-gray-700 bg-gray-200 dark:bg-gray-600 ${className || \"\"}`}\r\n >\r\n <User className=\"w-6 h-6 text-gray-400 dark:text-gray-400\" />\r\n </div>\r\n )}\r\n </>\r\n )}\r\n </>\r\n );\r\n };\r\n\r\n const renderAudio = (audioSrc: any, className: string) => {\r\n return (\r\n <>\r\n {audioSrc ? (\r\n <audio\r\n key={\r\n audioSrc instanceof File\r\n ? URL.createObjectURL(audioSrc)\r\n : audioSrc\r\n }\r\n controls\r\n src={\r\n audioSrc instanceof File\r\n ? URL.createObjectURL(audioSrc)\r\n : audioSrc\r\n }\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n }}\r\n className={`w-64 cursor-pointer ${className || \"\"}`}\r\n />\r\n ) : (\r\n <>\r\n <div\r\n className={`w-12 h-12 flex items-center shrink-0 justify-center rounded-full border border-gray-300 dark:border-gray-700 bg-gray-200 dark:bg-gray-600 ${className || \"\"}`}\r\n >\r\n <Music className=\"w-6 h-6 text-gray-400 dark:text-gray-400\" />\r\n </div>\r\n </>\r\n )}\r\n </>\r\n );\r\n };\r\n\r\n const renderGroupCell = (row: any, col: any) => {\r\n return (\r\n <div className={`flex items-center space-x-4 ${col.className || \"\"}`}>\r\n {col.imageKey\r\n ? renderAvatar(\r\n row[col.imageKey],\r\n row[col.titleKey],\r\n \"group-avatar\",\r\n col.fallback_icon,\r\n row,\r\n )\r\n : \"\"}\r\n <div>\r\n <p className=\"font-medium text-gray-900 dark:text-white group-title\">\r\n {row[col.titleKey] || \"\"}\r\n </p>\r\n <p className=\"text-sm text-gray-500 dark:text-gray-400 group-sub-title\">\r\n {row[col.subtitleKey] || \"\"}\r\n </p>\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n const handleRenderChip = (value: any, col: any) => {\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 const chipObj = col?.chipOptions.find((obj: any) => 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: any, row: any, index: number) => {\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) => {\r\n buttonRefs.current[row.id || row._id] = el;\r\n }}\r\n onClick={(e) =>\r\n handleMenuToggle(row.id || row._id, e, col.menuList)\r\n }\r\n className={joinClasses(\r\n crudClasses.table.actionButton,\r\n \"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 >\r\n <EllipsisVertical className=\"h-4 w-4\" />\r\n </button>\r\n </div>\r\n );\r\n } else if (col.type === \"index\") {\r\n return (\r\n <span className={col.className || \"\"}>{calculateRowNumber(index)}</span>\r\n );\r\n } else if (col.type === \"group\") {\r\n return renderGroupCell(row, col);\r\n } else if (col.type === \"chip\") {\r\n return <>{handleRenderChip(value, col)}</>;\r\n } else if (col.type === \"date\") {\r\n return (\r\n <span className={col.className || \"\"}>\r\n {formatDate(value, col.format || \"DD MMM YYYY\")}\r\n </span>\r\n );\r\n } else if (col.type === \"avatar\") {\r\n return (\r\n <>\r\n <div className=\"min-w-[40px]\">\r\n {renderAvatar(\r\n value,\r\n col.alt,\r\n col.className,\r\n col.fallback_icon,\r\n row,\r\n )}\r\n </div>\r\n </>\r\n );\r\n } else if (col.type === \"audio\") {\r\n return <>{renderAudio(value, col.className)}</>;\r\n } else if (col.type === \"multiImage\") {\r\n return <>{renderMultiImageCell(value, col)}</>;\r\n } else {\r\n return <span className={col.className || \"\"}>{value || \"N/A\"}</span>;\r\n }\r\n };\r\n\r\n const handleRowClick = (row: any) => {\r\n if (typeof rowClick === \"function\") {\r\n return rowClick(row);\r\n }\r\n if (rowClick) {\r\n return onMenuAction?.(\"view\", row);\r\n }\r\n };\r\n\r\n const handleColumnClick = (col: any, row: any) => {\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 const isRowClickable = () => rowClick || typeof rowClick === \"function\";\r\n const isColumnClickable = (col: any) =>\r\n col.onClickDetails || typeof col.handleClick === \"function\";\r\n\r\n const handleExportCSV = () => {\r\n if (!data?.length || !exportCSV?.fields?.length) return;\r\n\r\n // Create headers\r\n const headers = exportCSV.fields.map((field: CSVField) => field.label);\r\n\r\n // Create rows\r\n const rows = paginatedData.map((row: Record<string, any>) =>\r\n exportCSV.fields.map((field: CSVField) => {\r\n const value = row?.[field.key];\r\n return `\"${value !== undefined && value !== null ? value : \"\"}\"`;\r\n }),\r\n );\r\n\r\n const csvContent = [\r\n headers.join(\",\"),\r\n ...rows.map((r) => r.join(\",\")),\r\n ].join(\"\\n\");\r\n\r\n // Filename\r\n const now = new Date();\r\n const defaultName = `export-${formatDate(now, \"YYYY-MM-DD_HH-mm-ss\")}.csv`;\r\n const finalName = exportCSV.fileName || defaultName;\r\n\r\n // Create blob\r\n const blob = new Blob([csvContent], { type: \"text/csv;charset=utf-8;\" });\r\n\r\n // Download file\r\n const link = document.createElement(\"a\");\r\n const url = URL.createObjectURL(blob);\r\n\r\n link.href = url;\r\n link.download = finalName;\r\n\r\n document.body.appendChild(link);\r\n link.click();\r\n\r\n document.body.removeChild(link);\r\n URL.revokeObjectURL(url);\r\n };\r\n\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: MouseEvent) => {\r\n if (menuRef.current && !menuRef.current.contains(e.target as Node)) {\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 : sortedData.length,\r\n );\r\n\r\n if (\r\n sortedData.length <= pageSize * (currentPage - 1) &&\r\n !pagination?.useServerSidePagination\r\n ) {\r\n setCurrentPage((prev) => prev - 1 || 1);\r\n }\r\n }, [\r\n sortedData.length,\r\n pagination.total_records,\r\n pagination?.useServerSidePagination,\r\n ]);\r\n\r\n useEffect(() => {\r\n if (!normalizedSortConfig?.enabled) {\r\n setSortBy(\"\");\r\n return;\r\n }\r\n\r\n const hasMatchingDefault = normalizedSortOptions.some(\r\n (opt: any) => opt.value === normalizedSortConfig.defaultValue,\r\n );\r\n\r\n if (hasMatchingDefault) {\r\n setSortBy(normalizedSortConfig.defaultValue);\r\n return;\r\n }\r\n\r\n setSortBy(\"\");\r\n }, [normalizedSortConfig, normalizedSortOptions]);\r\n\r\n useEffect(() => {\r\n if (\r\n !normalizedSortConfig?.enabled ||\r\n !normalizedSortConfig?.useServerSideSorting\r\n ) {\r\n return;\r\n }\r\n\r\n const selectedOption = normalizedSortOptions?.find(\r\n (opt: any) => opt.value === sortBy,\r\n );\r\n\r\n setServerSidePaginationData((prev: Record<string, any>) => ({\r\n ...prev,\r\n current_page: 1,\r\n sort_by: selectedOption?.key || \"\",\r\n sort_order: selectedOption?.order || \"\",\r\n }));\r\n }, [\r\n sortBy,\r\n normalizedSortConfig?.enabled,\r\n normalizedSortConfig?.useServerSideSorting,\r\n normalizedSortOptions,\r\n setServerSidePaginationData,\r\n ]);\r\n\r\n return (\r\n <div ref={tableScopeRef}>\r\n {loading ? (\r\n <TableSkeleton rows={6} columns={6} />\r\n ) : (\r\n <>\r\n <div\r\n className={joinClasses(\r\n crudClasses.table.toolbar,\r\n \"flex flex-col lg:!flex-row lg:!justify-between gap-4 mb-3\",\r\n )}\r\n >\r\n <div className=\"table-heading\">\r\n <h1>{title}</h1>\r\n <p>{description}</p>\r\n </div>\r\n <div className=\"flex flex-col justify-end items-stretch lg:!items-end gap-2 w-full lg:!w-auto\">\r\n {showAddButton && (\r\n <Button\r\n onClick={() => setShowAdd(true)}\r\n variant=\"contained\"\r\n color=\"primary\"\r\n >\r\n <Plus className=\"w-4 h-4 mr-2\" />\r\n {buttonText || \"Add New\"}\r\n </Button>\r\n )}\r\n <div className=\"flex flex-col sm:!flex-row sm:!flex-wrap justify-end items-stretch sm:!items-center gap-2 w-full\">\r\n {search.enabled && (\r\n <div className=\"w-full sm:!w-auto\">\r\n <div\r\n className={joinClasses(\r\n crudClasses.table.searchField,\r\n \"table-search-field\",\r\n )}\r\n >\r\n <Search className=\"search-icon\" />\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={crudClasses.table.searchInput}\r\n />\r\n </div>\r\n </div>\r\n )}\r\n\r\n {(normalizedSortConfig?.enabled &&\r\n normalizedSortOptions?.length > 0) ||\r\n (filterConfig && filter.enabled) ||\r\n (exportCSV && exportCSV.enabled) ? (\r\n <div className=\"flex items-center justify-end gap-2 w-full sm:!w-auto\">\r\n {filterConfig && filter.enabled && (\r\n <div className=\"filter-button-wrapper\">\r\n <Button\r\n onClick={() => setShowFilters(true)}\r\n variant=\"contained\"\r\n className=\"w-full sm:!w-auto\"\r\n >\r\n <Filter className=\"w-4 h-4 mr-2\" />\r\n Filters\r\n </Button>\r\n {Object.keys(appliedFilters).length > 0 && (\r\n <span className=\"red-dot\"></span>\r\n )}\r\n </div>\r\n )}\r\n {exportCSV && exportCSV.enabled && (\r\n <div className=\"filter-button-wrapper\">\r\n <Button\r\n onClick={() => handleExportCSV()}\r\n variant=\"contained\"\r\n className=\"w-full sm:!w-auto\"\r\n >\r\n <Download className=\"w-4 h-4 mr-2\" />\r\n Export CSV\r\n </Button>\r\n </div>\r\n )}\r\n {normalizedSortConfig?.enabled &&\r\n normalizedSortOptions?.length > 0 && (\r\n <SortDropdown\r\n options={normalizedSortOptions}\r\n value={sortBy}\r\n onChange={handleSortChange}\r\n clearLabel={normalizedSortConfig?.clearLabel}\r\n />\r\n )}\r\n </div>\r\n ) : null}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div\r\n className={joinClasses(\r\n crudClasses.table.root,\r\n crudClasses.table.container,\r\n \"table-container\",\r\n )}\r\n >\r\n <div className=\"overflow-x-auto\">\r\n <table className={crudClasses.table.element}>\r\n <thead className={crudClasses.table.head}>\r\n <tr className={crudClasses.table.headRow}>\r\n {table_head.map((col: any) => (\r\n <th\r\n key={col.key}\r\n className={joinClasses(\r\n crudClasses.table.headCell,\r\n \"table-head-data\",\r\n col.headClass || \"\",\r\n )}\r\n >\r\n {col.title}\r\n </th>\r\n ))}\r\n </tr>\r\n </thead>\r\n\r\n <tbody className={crudClasses.table.body}>\r\n {paginatedData.length === 0 ? (\r\n <tr>\r\n <td\r\n colSpan={table_head.length}\r\n className={joinClasses(\r\n crudClasses.table.noData,\r\n \"no-data-message\",\r\n )}\r\n >\r\n {emptyMessage}\r\n </td>\r\n </tr>\r\n ) : (\r\n paginatedData.map((row: any, index: number) => (\r\n <tr\r\n key={row.id || row._id || index}\r\n className={joinClasses(\r\n crudClasses.table.row,\r\n \"table-row\",\r\n isRowClickable() ? \"cursor-pointer\" : \"\",\r\n )}\r\n onClick={() => {\r\n isRowClickable() && handleRowClick(row);\r\n }}\r\n >\r\n {table_head.map((col: any) => (\r\n <td\r\n key={col.key}\r\n className={joinClasses(\r\n crudClasses.table.cell,\r\n \"table-data\",\r\n col.type == \"audio\" ? \"\" : \"max-w-[300px]\",\r\n \"truncate\",\r\n isColumnClickable(col) ? \"cursor-pointer\" : \"\",\r\n )}\r\n title={String(row[col.key] ?? \"\")}\r\n onClick={(e) => {\r\n if (isColumnClickable(col)) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n handleColumnClick(col, row);\r\n }\r\n }}\r\n >\r\n {col.render\r\n ? col.render(row, index)\r\n : handleRenderCellValue(col, row, index)}\r\n </td>\r\n ))}\r\n </tr>\r\n ))\r\n )}\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n {pagination?.enabled && sortedData.length > 0 && (\r\n <div\r\n className={joinClasses(\r\n crudClasses.table.pagination,\r\n \"pagination-wrapper\",\r\n )}\r\n >\r\n <span>\r\n Showing {(currentPage - 1) * pageSize + 1} to{\" \"}\r\n {Math.min(currentPage * pageSize, totalRecords)} of{\" \"}\r\n {totalRecords} results\r\n </span>\r\n\r\n <div className=\"flex items-center gap-4\">\r\n <div className=\"flex items-center gap-2\">\r\n <span>Rows per page:</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(\r\n (prev: Record<string, any>) => ({\r\n ...prev,\r\n current_page: 1,\r\n rows_per_page: newLimit,\r\n }),\r\n );\r\n }\r\n }}\r\n className=\"rows-number-select\"\r\n >\r\n {[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 <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(\r\n (prev: Record<string, any>) => ({\r\n ...prev,\r\n current_page: newPage,\r\n }),\r\n );\r\n }\r\n }\r\n }}\r\n disabled={currentPage === 1}\r\n className=\"arrow-icons\"\r\n >\r\n <ChevronLeft className=\"h-4 w-4\" />\r\n </button>\r\n\r\n <span>\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(\r\n (prev: Record<string, any>) => ({\r\n ...prev,\r\n current_page: newPage,\r\n }),\r\n );\r\n }\r\n }\r\n }}\r\n disabled={currentPage === totalPages}\r\n className=\"arrow-icons\"\r\n >\r\n <ChevronRight className=\"h-4 w-4\" />\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n </>\r\n )}\r\n\r\n {activeMenu &&\r\n menuPortalTarget &&\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={joinClasses(\r\n crudClasses.table.menu,\r\n \"w-48 bg-white dark:bg-gray-700 rounded-md shadow-lg border border-gray-200 dark:border-gray-600\",\r\n )}\r\n >\r\n {menuList.map((action: any, i: number) => (\r\n <button\r\n key={i}\r\n onClick={(e) =>\r\n handleActionClick(\r\n action,\r\n data.find(\r\n (d: any) => d.id === activeMenu || d._id == activeMenu,\r\n ),\r\n e,\r\n )\r\n }\r\n className={joinClasses(\r\n crudClasses.table.menuItem,\r\n \"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 menuPortalTarget,\r\n )}\r\n\r\n {filterConfig && showFilters && (\r\n <FilterDrawer\r\n isOpen={showFilters}\r\n onClose={() => setShowFilters(false)}\r\n config={filterConfig}\r\n onApply={(filters) => {\r\n setAppliedFilters(filters);\r\n onFilterApply?.(filters);\r\n }}\r\n />\r\n )}\r\n\r\n {isOpen && targetImage && (\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 </div>\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\nimport { ActionButton } from \"../../types/crudtypes\";\r\nimport { crudClasses, joinClasses } from \"../../lib/crudClasses\";\r\n\r\ninterface ModalProps {\r\n isOpen: boolean;\r\n onClose: (resp?: any) => void;\r\n icon?: React.ReactNode;\r\n title: React.ReactNode;\r\n children: React.ReactNode;\r\n size?: string;\r\n actionButtons?: ActionButton[];\r\n footerConfig?: any;\r\n onFormSubmit?: (e?: any) => void;\r\n onCancel?: () => void;\r\n loadingBtn?: boolean;\r\n loading?: boolean;\r\n executeFunction?: (...args: any[]) => void;\r\n selectedItem?: any;\r\n classNames?: {\r\n overlay?: string;\r\n container?: string;\r\n header?: string;\r\n title?: string;\r\n body?: string;\r\n footer?: string;\r\n closeButton?: string;\r\n };\r\n}\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 onFormSubmit = () => {},\r\n loadingBtn = false,\r\n executeFunction = () => {},\r\n selectedItem = null,\r\n footerConfig,\r\n classNames,\r\n}: ModalProps) => {\r\n if (!isOpen) return null;\r\n\r\n const sizeClasses: Record<string, string> = {\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 const shouldShowFooter =\r\n actionButtons.length > 0 || Boolean(footerConfig?.cancelButton);\r\n\r\n return (\r\n <div\r\n className={joinClasses(\r\n crudClasses.modal.root,\r\n \"fixed inset-0 z-50 flex items-center justify-center p-4\",\r\n )}\r\n >\r\n <div\r\n className={joinClasses(\r\n crudClasses.modal.overlay,\r\n \"fixed inset-0 bg-gray-500 opacity-75\",\r\n classNames?.overlay,\r\n )}\r\n // onClick={() => onClose()}\r\n ></div>\r\n\r\n <div\r\n className={joinClasses(\r\n crudClasses.modal.container,\r\n \"relative bg-white rounded-lg shadow-xl w-full max-h-[90vh] flex flex-col dark:bg-gray-800\",\r\n sizeClasses[size] || sizeClasses.md,\r\n classNames?.container,\r\n )}\r\n >\r\n <div\r\n className={joinClasses(\r\n crudClasses.modal.header,\r\n \"flex items-center justify-between p-4 border-b border-gray-200 dark:border-gray-700 flex-shrink-0\",\r\n classNames?.header,\r\n )}\r\n >\r\n <div className=\"flex items-center gap-1\">\r\n {icon && <span>{icon}</span>}\r\n <h3\r\n className={joinClasses(\r\n crudClasses.modal.title,\r\n \"text-lg font-medium text-gray-900 dark:text-white\",\r\n classNames?.title,\r\n )}\r\n >\r\n {title}\r\n </h3>\r\n </div>\r\n\r\n <button\r\n onClick={() => onClose()}\r\n className={joinClasses(\r\n crudClasses.modal.closeButton,\r\n \"text-gray-400 hover:text-gray-600 dark:hover:text-gray-300\",\r\n classNames?.closeButton,\r\n )}\r\n >\r\n <X className=\"w-6 h-6\" />\r\n </button>\r\n </div>\r\n\r\n <div\r\n className={joinClasses(\r\n crudClasses.modal.body,\r\n \"flex-1 overflow-y-auto p-4\",\r\n classNames?.body,\r\n )}\r\n >\r\n {children}\r\n </div>\r\n\r\n {shouldShowFooter && (\r\n <div\r\n className={joinClasses(\r\n crudClasses.modal.footer,\r\n \"px-4 py-3 flex justify-end gap-3 border-t border-gray-200 dark:border-gray-700 sm:!px-6\",\r\n classNames?.footer,\r\n )}\r\n >\r\n {footerConfig?.cancelButton && (\r\n <Button\r\n onClick={() => onClose()}\r\n variant=\"outlined\"\r\n color=\"default\"\r\n className={joinClasses(\r\n crudClasses.modal.actionButton,\r\n \"min-w-[100px]\",\r\n )}\r\n type=\"button\"\r\n >\r\n {footerConfig?.cancelText || \"Cancel\"}\r\n </Button>\r\n )}\r\n {actionButtons.map((btn, index) => (\r\n <Button\r\n key={`${btn.label || \"action\"}-${index}`}\r\n onClick={(e) => {\r\n if (btn.type == \"submit\") {\r\n onFormSubmit(e);\r\n } else {\r\n executeFunction(\r\n () => Promise.resolve(btn?.onClick?.(e, selectedItem)),\r\n (resp: any) => 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={joinClasses(\r\n crudClasses.modal.actionButton,\r\n \"min-w-[100px]\",\r\n btn.className || \"\",\r\n )}\r\n type={(btn.type as \"button\" | \"submit\" | \"reset\") || \"button\"}\r\n >\r\n {loadingBtn ? (\r\n <div\r\n className={joinClasses(\r\n crudClasses.modal.loadingIndicator,\r\n \"flex items-center\",\r\n )}\r\n >\r\n <div className=\"animate-spin rounded-full h-4 w-4 border-2 border-white/30 border-t-2 border-t-white mr-2\"></div>\r\n {btn.label || \"Submit\"}...\r\n </div>\r\n ) : (\r\n btn.label || \"Submit\"\r\n )}\r\n </Button>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default Modal;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport RenderFields from \"./components/RenderFields\";\r\nimport { enqueueSnackbar } from \"notistack\";\r\nimport { crudClasses, joinClasses } from \"../../lib/crudClasses\";\r\n\r\ninterface FormField {\r\n key: string;\r\n [key: string]: any;\r\n}\r\n\r\ninterface FormConfig {\r\n formClass?: string;\r\n formFields?: FormField[];\r\n}\r\n\r\ninterface FormProps {\r\n config: FormConfig;\r\n onSubmit: (data: Record<string, any>) => void;\r\n initialData: Record<string, any> | null;\r\n fetchRowDetails?: (\r\n item: Record<string, any>,\r\n ) => Promise<{ data: Record<string, any> }>;\r\n type: \"add\" | \"edit\" | string;\r\n loading?: boolean;\r\n}\r\n\r\nconst Form: React.FC<FormProps> = ({\r\n config,\r\n onSubmit,\r\n initialData,\r\n fetchRowDetails,\r\n type,\r\n}) => {\r\n const safeInitialData = initialData || {};\r\n\r\n const { formClass = \"grid grid-cols-12 gap-4\", formFields = [] } =\r\n config || {};\r\n\r\n const [formData, setFormData] =\r\n useState<Record<string, any>>(safeInitialData);\r\n const [dataLoading, setDataLoading] = useState<boolean>(true);\r\n const [errors, setErrors] = useState<Record<string, string>>({});\r\n\r\n const handleGetDetails = async (): Promise<void> => {\r\n fetchRowDetails?.(safeInitialData)\r\n .then((resp) => {\r\n setFormData(resp.data);\r\n })\r\n .catch((error: Error) => {\r\n enqueueSnackbar(error.message, { variant: \"error\" });\r\n })\r\n .finally(() => {\r\n setDataLoading(false);\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n if (fetchRowDetails instanceof Function) {\r\n handleGetDetails();\r\n } else {\r\n setFormData(safeInitialData);\r\n setDataLoading(false);\r\n }\r\n }, []);\r\n\r\n const handleChange = (key: string, value: any): void => {\r\n setFormData((prev) => ({ ...prev, [key]: value }));\r\n setErrors((prev) => ({\r\n ...prev,\r\n [key]: \"\",\r\n }));\r\n };\r\n\r\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>): void => {\r\n e.preventDefault();\r\n const form = e.currentTarget;\r\n\r\n if (!form.checkValidity()) {\r\n form.reportValidity();\r\n return;\r\n }\r\n\r\n const newErrors: Record<string, string> = {};\r\n let firstInvalidFocused = false;\r\n\r\n for (const field of formFields) {\r\n const value = formData[field.key] || \"\";\r\n if (field.customValidation) {\r\n const isValid = field.customValidation(value);\r\n if (isValid !== false) {\r\n newErrors[field.key] = isValid;\r\n if (!firstInvalidFocused) {\r\n const input = form.querySelector(\r\n `[id=\"field-${field.key}\"]`,\r\n ) as HTMLElement | null;\r\n input?.focus();\r\n firstInvalidFocused = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n setErrors(newErrors);\r\n\r\n if (Object.keys(newErrors).length > 0) return;\r\n\r\n onSubmit(formData);\r\n };\r\n\r\n if (dataLoading) {\r\n return (\r\n <div\r\n className={joinClasses(\r\n crudClasses.form.loading,\r\n \"flex items-center justify-center h-64\",\r\n )}\r\n >\r\n <div\r\n className=\"rounded-full border-4 border-blue-500 border-t-gray-200 animate-spin w-8 h-8\"\r\n style={{\r\n borderTopColor: \"border-primary-500\",\r\n }}\r\n />\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <form\r\n id={\r\n type === \"add\"\r\n ? \"addForm\"\r\n : type === \"edit\"\r\n ? \"editForm\"\r\n : \"defaultForm\"\r\n }\r\n onSubmit={handleSubmit}\r\n className={joinClasses(crudClasses.form.root, formClass)}\r\n noValidate={false}\r\n >\r\n {formFields.map((field) => (\r\n <RenderFields\r\n key={field.key}\r\n field={field}\r\n formData={formData}\r\n errorMessage={errors[field.key] || \"\"}\r\n handleChange={handleChange}\r\n />\r\n ))}\r\n </form>\r\n );\r\n};\r\n\r\nexport default Form;\r\n","import { useEffect, useState } from \"react\";\r\nimport DetailRow from \"./components/DetailRow\";\r\nimport CardGroup from \"./components/CardGroup\";\r\nimport GroupRow from \"./components/GroupRow\";\r\nimport { enqueueSnackbar } from \"notistack\";\r\nimport { crudClasses, joinClasses } from \"../../lib/crudClasses\";\r\n\r\ninterface DetailsProps {\r\n data: Record<string, any> | null;\r\n config: {\r\n fields?: Array<Record<string, any>>;\r\n containerClass?: string;\r\n variant?: \"default\" | \"card\" | \"split\";\r\n styles?: {\r\n containerClass?: string;\r\n rowClass?: string;\r\n groupClass?: string;\r\n cardGroupClass?: string;\r\n labelClass?: string;\r\n valueClass?: string;\r\n iconClass?: string;\r\n mediaGridClass?: string;\r\n };\r\n };\r\n fetchRowDetails?: (\r\n payload: Record<string, any>,\r\n ) => Promise<{ data: Record<string, any> }>;\r\n}\r\n\r\nexport default function Details({\r\n data,\r\n config,\r\n fetchRowDetails,\r\n}: DetailsProps) {\r\n const {\r\n fields = [],\r\n containerClass,\r\n variant = \"default\",\r\n styles = {},\r\n } = config || {};\r\n\r\n const safeData = data || {};\r\n\r\n const [detailsData, setDetailsData] = useState<Record<string, any>>(safeData);\r\n\r\n const [dataLoading, setDataLoading] = useState(true);\r\n\r\n const handleGetDetails = async () => {\r\n fetchRowDetails?.(safeData)\r\n .then((resp) => {\r\n setDetailsData(resp.data);\r\n })\r\n .catch((error: Error) => {\r\n enqueueSnackbar(error.message, { variant: \"error\" });\r\n })\r\n .finally(() => {\r\n setDataLoading(false);\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n if (fetchRowDetails instanceof Function) {\r\n handleGetDetails();\r\n } else {\r\n setDetailsData(safeData);\r\n setDataLoading(false);\r\n }\r\n }, []);\r\n\r\n if (dataLoading) {\r\n return (\r\n <div\r\n className={joinClasses(\r\n crudClasses.form.loading,\r\n \"flex items-center justify-center h-64\",\r\n )}\r\n >\r\n <div\r\n className=\"rounded-full border-4 border-blue-500 border-t-gray-200 animate-spin w-8 h-8\"\r\n style={{\r\n borderTopColor: \"border-primary-500\",\r\n }}\r\n />\r\n </div>\r\n );\r\n }\r\n\r\n const variantContainerClass: Record<string, string> = {\r\n default: \"grid grid-cols-12 gap-4\",\r\n // card: each field is a standalone elevated card in a 12-col grid\r\n card: \"grid grid-cols-12 gap-3\",\r\n // split: clean property-sheet — bordered box, rows divided by hairlines\r\n split:\r\n \"rounded-xl border border-gray-200 dark:border-gray-700 overflow-hidden divide-y divide-gray-100 dark:divide-gray-800\",\r\n };\r\n\r\n return (\r\n <>\r\n <div\r\n className={joinClasses(\r\n crudClasses.details.root,\r\n crudClasses.details.container,\r\n variantContainerClass[variant] || variantContainerClass.default,\r\n containerClass || \"\",\r\n styles.containerClass || \"\",\r\n )}\r\n >\r\n {fields.map((col) => {\r\n if (\r\n col.renderCondition &&\r\n typeof col.renderCondition === \"function\"\r\n ) {\r\n const shouldRender = col.renderCondition(detailsData);\r\n if (!shouldRender) {\r\n return null;\r\n }\r\n }\r\n return col.type == \"group\" ? (\r\n <GroupRow\r\n key={col.key || col.titleKey}\r\n col={col}\r\n data={detailsData}\r\n uiVariant={variant}\r\n styleConfig={styles}\r\n />\r\n ) : col.type == \"cardGroup\" ? (\r\n <CardGroup\r\n key={col.key || col.titleKey}\r\n col={col}\r\n data={detailsData}\r\n uiVariant={variant}\r\n styleConfig={styles}\r\n />\r\n ) : (\r\n <DetailRow\r\n key={col.key || col.label}\r\n col={col}\r\n data={detailsData}\r\n uiVariant={variant}\r\n styleConfig={styles}\r\n />\r\n );\r\n })}\r\n </div>\r\n </>\r\n );\r\n}\r\n","import React, { useEffect, useMemo, useState } from \"react\";\r\nimport Table from \"./Table/Table\";\r\nimport Modal from \"./Modal/Modal\";\r\nimport Form from \"./Form/Form\";\r\nimport { Icon } from \"@iconify/react\";\r\nimport { enqueueSnackbar } from \"notistack\";\r\nimport Details from \"./Details/Details\";\r\nimport type {\r\n CrudPageProps,\r\n ServerSidePaginationData,\r\n} from \"../types/crudtypes\";\r\nimport { crudClasses, joinClasses } from \"../lib/crudClasses\";\r\n\r\nconst CrudPage: React.FC<CrudPageProps> = ({ config }) => {\r\n const {\r\n title,\r\n fetchData,\r\n fetchRowDetails,\r\n isStaticData = false,\r\n tableConfig,\r\n modalConfig,\r\n filterConfig,\r\n } = config;\r\n\r\n const [loading, setLoading] = useState<boolean>(true);\r\n const [formLoading, setFormLoading] = useState<boolean>(false);\r\n const [listingData, setListingData] = useState<Record<string, any>[]>([]);\r\n const [paginationData, setPaginationData] = useState<any>(null);\r\n const [serverSidePaginationData, setServerSidePaginationData] =\r\n useState<ServerSidePaginationData>({\r\n search: \"\",\r\n rows_per_page: 50,\r\n current_page: 1,\r\n sort_by: \"\",\r\n sort_order: \"\",\r\n });\r\n const [filterData, setFilterData] = useState<Record<string, any>>({});\r\n const [changeFilterData, setChangeFilterData] = useState<boolean>(false);\r\n const [showAdd, setShowAdd] = useState<boolean>(false);\r\n const [showEdit, setShowEdit] = useState<boolean>(false);\r\n const [showDelete, setShowDelete] = useState<boolean>(false);\r\n const [showView, setShowView] = useState<boolean>(false);\r\n const [selectedItem, setSelectedItem] = useState<Record<string, any> | null>(\r\n null,\r\n );\r\n\r\n const handleMenuAction = (action: string, item: any): void => {\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: (() => Promise<any>) | null,\r\n onSuccess?: (resp: any) => void,\r\n success_message: string = \"\",\r\n error_message: string = \"\",\r\n ): Promise<void> => {\r\n setFormLoading(true);\r\n\r\n try {\r\n if (!action) return;\r\n const resp = await action();\r\n if (success_message || resp?.message) {\r\n enqueueSnackbar(success_message || resp.message || \"Success\", {\r\n variant: \"success\" as const,\r\n });\r\n }\r\n onSuccess?.(resp);\r\n } catch (error: any) {\r\n if (error_message || error?.message) {\r\n enqueueSnackbar(error_message || error.message || \"Error occurred\", {\r\n variant: \"error\" as const,\r\n });\r\n }\r\n } finally {\r\n setFormLoading(false);\r\n }\r\n };\r\n\r\n const handleAddResult = (resp: { newObject: any }): void => {\r\n const newObj = resp.newObject;\r\n if (isStaticData) {\r\n setListingData((prev) => [newObj, ...prev]);\r\n setPaginationData((prev: any) => ({\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 newObject: any;\r\n targetObject: any;\r\n }): void => {\r\n const { newObject: updatedObj, targetObject } = resp;\r\n if (isStaticData) {\r\n setListingData((prev) =>\r\n prev.map((item) =>\r\n item.id === targetObject.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: { targetObject: any } | null): void => {\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: Record<string, any>): Promise<void> =>\r\n executeAction(\r\n () =>\r\n modalConfig?.addModal?.handleSubmit\r\n ? modalConfig.addModal.handleSubmit(formData)\r\n : Promise.resolve({ newObject: null }),\r\n handleAddResult,\r\n );\r\n\r\n const handleEditFormSubmit = (formData: Record<string, any>): Promise<void> =>\r\n executeAction(\r\n () =>\r\n modalConfig?.editModal?.handleSubmit\r\n ? modalConfig.editModal.handleSubmit(formData, selectedItem)\r\n : Promise.resolve({ newObject: null, targetObject: null }),\r\n handleEditResult,\r\n );\r\n\r\n const handleGetListing = async (): Promise<void> => {\r\n setLoading(true);\r\n\r\n try {\r\n const resp = await fetchData({\r\n ...serverSidePaginationData,\r\n ...filterData,\r\n });\r\n setListingData(resp.data || []);\r\n setPaginationData(resp.pagination || null);\r\n } catch (error: any) {\r\n enqueueSnackbar(error.message || \"Failed to fetch data\", {\r\n variant: \"error\",\r\n });\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const handleFilterData = (data: Record<string, any>): void => {\r\n setFilterData((prev) => ({ ...data }));\r\n if (tableConfig?.filter?.useServerSideFilters) {\r\n setChangeFilterData((prev) => !prev);\r\n }\r\n };\r\n\r\n const filterByMatchingFields = (\r\n data: any[],\r\n filters: Record<string, any>,\r\n ): any[] => {\r\n return data.filter((item) =>\r\n Object.entries(filters).every(([key, value]) => item[key] === value),\r\n );\r\n };\r\n\r\n const filteredData = useMemo(() => {\r\n if (tableConfig?.filter?.useServerSideFilters) return listingData;\r\n return filterByMatchingFields(listingData, filterData);\r\n }, [listingData, filterData, tableConfig?.filter?.useServerSideFilters]);\r\n\r\n const ViewComponent = modalConfig?.viewModal?.component;\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 serverSidePaginationData.sort_by,\r\n serverSidePaginationData.sort_order,\r\n changeFilterData,\r\n ]);\r\n\r\n return (\r\n <div className={crudClasses.crudPage.root}>\r\n <Table\r\n title={title}\r\n setShowAdd={setShowAdd}\r\n description={config.description}\r\n buttonText={config.buttonText}\r\n showAddButton={!!modalConfig?.addModal}\r\n config={{\r\n ...tableConfig,\r\n pagination: {\r\n ...tableConfig.pagination,\r\n ...paginationData,\r\n },\r\n data: filteredData,\r\n setServerSidePaginationData: setServerSidePaginationData,\r\n onMenuAction: handleMenuAction,\r\n filterConfig,\r\n onFilterApply: handleFilterData,\r\n loading,\r\n }}\r\n />\r\n\r\n {showAdd && (\r\n <Modal\r\n isOpen={showAdd}\r\n onClose={() => {\r\n if (!formLoading) {\r\n setShowAdd(false);\r\n }\r\n }}\r\n icon={modalConfig?.addModal?.icon}\r\n title={modalConfig?.addModal?.title || \"Add New\"}\r\n size={modalConfig?.addModal?.size || \"md\"}\r\n onFormSubmit={() =>\r\n document.querySelector<HTMLFormElement>(\"#addForm\")?.requestSubmit()\r\n }\r\n loadingBtn={formLoading}\r\n actionButtons={modalConfig?.addModal?.actionButtons || []}\r\n >\r\n <Form\r\n config={modalConfig?.addModal || {}}\r\n onSubmit={handleAddFormSubmit}\r\n initialData={{}}\r\n type=\"add\"\r\n loading={formLoading}\r\n />\r\n </Modal>\r\n )}\r\n\r\n {/* Edit Modal */}\r\n {showEdit && (\r\n <Modal\r\n isOpen={showEdit}\r\n onClose={() => {\r\n if (!formLoading) {\r\n setShowEdit(false);\r\n }\r\n }}\r\n icon={modalConfig?.editModal?.icon}\r\n title={modalConfig?.editModal?.title || \"Edit\"}\r\n size={modalConfig?.editModal?.size || \"md\"}\r\n onFormSubmit={() =>\r\n document\r\n .querySelector<HTMLFormElement>(\"#editForm\")\r\n ?.requestSubmit()\r\n }\r\n actionButtons={modalConfig?.editModal?.actionButtons || []}\r\n loadingBtn={formLoading}\r\n >\r\n <Form\r\n config={modalConfig?.editModal || {}}\r\n onSubmit={handleEditFormSubmit}\r\n initialData={selectedItem}\r\n type=\"edit\"\r\n loading={formLoading}\r\n fetchRowDetails={fetchRowDetails}\r\n />\r\n </Modal>\r\n )}\r\n\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\r\n className={joinClasses(\r\n crudClasses.crudPage.deleteContent,\r\n \"flex items-center space-x-2 py-3\",\r\n )}\r\n >\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 classNames={modalConfig?.viewModal?.modalClassNames}\r\n >\r\n {ViewComponent ? (\r\n <ViewComponent data={selectedItem} />\r\n ) : (\r\n <Details\r\n data={selectedItem}\r\n fetchRowDetails={fetchRowDetails}\r\n config={modalConfig?.viewModal || {}}\r\n />\r\n )}\r\n </Modal>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default CrudPage;\r\n","import React from \"react\";\r\nimport { SnackbarProvider, useSnackbar, type SnackbarKey } from \"notistack\";\r\nimport { X } from \"lucide-react\";\r\n\r\ninterface InnerCheckProps {\r\n children: React.ReactNode;\r\n}\r\n\r\nfunction InnerCheck({ children }: InnerCheckProps) {\r\n useSnackbar(); // If this works, provider exists\r\n return children;\r\n}\r\n\r\ninterface OptionalSnackbarProviderProps {\r\n children: React.ReactNode;\r\n}\r\n\r\nexport default function OptionalSnackbarProvider({ \r\n children \r\n}: OptionalSnackbarProviderProps) {\r\n try {\r\n return <InnerCheck>{children}</InnerCheck>;\r\n } catch (error) {\r\n return (\r\n <SnackbarProvider\r\n anchorOrigin={{\r\n vertical: \"bottom\",\r\n horizontal: \"right\",\r\n }}\r\n action={(snackbarKey: SnackbarKey) => (\r\n <button\r\n onClick={() => {\r\n window.dispatchEvent(\r\n new CustomEvent(\"closeSnackbar\", { detail: snackbarKey }),\r\n );\r\n }}\r\n className=\"p-1 hover:bg-white/20 rounded-full transition-colors duration-200 text-white flex items-center justify-center\"\r\n >\r\n <X className=\"h-4 w-4\" />\r\n </button>\r\n )}\r\n maxSnack={3}\r\n autoHideDuration={3000}\r\n >\r\n {children}\r\n </SnackbarProvider>\r\n );\r\n }\r\n}\r\n","import React, { useEffect } from \"react\";\r\nimport libraryStyles from \"./index.css?inline\";\r\nimport CrudPage from \"./components/CrudPage\";\r\nimport OptionalSnackbarProvider from \"./OptionalSnackbarProvider\";\r\nimport { type CrudPageProps } from \"./types/crudtypes\";\r\n\r\nconst injectStyles = () => {\r\n if (typeof document === \"undefined\") return;\r\n if (document.getElementById(\"react-admin-crud-manager-styles\")) return;\r\n\r\n const style = document.createElement(\"style\");\r\n style.id = \"react-admin-crud-manager-styles\";\r\n style.textContent = libraryStyles;\r\n document.head.appendChild(style);\r\n};\r\n\r\nexport default function Crud({ config }: CrudPageProps) {\r\n useEffect(() => {\r\n injectStyles();\r\n }, []);\r\n\r\n return (\r\n <div className=\"racm-root\">\r\n <OptionalSnackbarProvider>\r\n <CrudPage config={config} />\r\n </OptionalSnackbarProvider>\r\n </div>\r\n );\r\n}\r\n"],"names":["formatDate","dateString","format","date","pad","n","map","token","searchLocalData","data","searchTerm","searchKeys","lowerSearchTerm","extractValues","obj","item","valuesToSearch","key","val","joinClasses","classes","crudClasses","Button","React","className","variant","color","size","fullWidth","children","props","ref","baseStyles","sizes","colorVariants","colorStyles","_a","sizeStyles","combinedClassName","jsx","InputLabel","label","required","infoText","Fragment","jsxs","Info","countries","Select","options","value","defaultValue","onChange","placeholder","disabled","search","name","parentClass","multiple","dropdownMaxHeight","formData","countriesList","dependencyKey","errorMessage","open","setOpen","useState","setSearchTerm","showAboveState","setShowAboveState","dropdownRef","useRef","optionsPanelRef","searchInputRef","normalizedOptions","setNormalizedOptions","dropdownPosition","setDropdownPosition","dropdownPortalTarget","initialVal","normalize","getCountrieslist","useEffect","result","normalizedValue","filteredOptions","option","isSelected","optionValue","normalized","handleClickOutside","event","updateDropdownPosition","rect","shouldShowAbove","handleOptionClick","finalValue","exists","newValues","v","selectedLabels","opt","_b","ChevronDown","createPortal","Search","e","Check","Switch","PhoneInput","defaultCountry","find_country_with_code","countryCode","selectedCountry","setSelectedCountry","fullNumber","setFullNumber","localValue","setLocalValue","applyMask","digits","mask","digitIndex","i","handleNumberChange","maskedValue","unmaskedValue","match","c","a","b","rawValue","handleCountrySelect","country","filteredCountries","handleInputChange","input","formatted","TextArea","extendStatics","d","p","__extends","__","__assign","t","s","_populated","_ie","_firefox","_opera","_webkit","_chrome","_ie_real_version","_osx","_windows","_linux","_android","_win64","_iphone","_ipad","_native","_mobile","_populate","uas","agent","os","trident","ver","UserAgent_DEPRECATED","UserAgent_DEPRECATED_1","canUseDOM","ExecutionEnvironment","ExecutionEnvironment_1","require$$0","useHasFeature","isEventSupported","eventNameSuffix","capture","eventName","isSupported","element","isEventSupported_1","require$$1","PIXEL_STEP","LINE_HEIGHT","PAGE_HEIGHT","normalizeWheel","sX","sY","pX","pY","normalizeWheel_1","getCropSize","mediaWidth","mediaHeight","containerWidth","containerHeight","aspect","rotation","rotateSize","width","height","fittingWidth","fittingHeight","getMediaZoom","mediaSize","restrictPosition","position","cropSize","zoom","restrictPositionCoord","maxPosition","clamp","getDistanceBetweenPoints","pointA","pointB","getRotationBetweenPoints","computeCroppedArea","crop","limitAreaFn","limitArea","noOp","mediaBBoxSize","mediaNaturalBBoxSize","croppedAreaPercentages","widthInPixels","heightInPixels","isImgWiderThanHigh","sizePixels","croppedAreaPixels","max","_max","getInitialCropFromCroppedAreaPercentages","minZoom","maxZoom","getZoomFromCroppedAreaPixels","mediaZoom","getInitialCropFromCroppedAreaPixels","cropZoom","getCenter","getRadianAngle","degreeValue","rotRad","min","classNames","args","_i","css_248z","MIN_ZOOM","MAX_ZOOM","KEYBOARD_STEP","Cropper","_super","_this","isFirstResize","entries","_c","_d","_e","_f","mediaRef","containerAspect","naturalWidth","naturalHeight","isMediaScaledDown","mediaAspect","renderedMediaSize","bounds","point","newZoom","newRotation","x","y","offsetX","offsetY","requestedPosition","newPosition","pixelY","containerTopLeft","shouldUpdatePosition","zoomPoint","zoomTarget","restrictedPosition","cropData","adjustedCrop","sizeChanged","scaleX","scaleY","onCropChange","keyboardStep","step","newCrop","prevProps","_g","_h","_j","objectFit","center","distance","image","video","mediaProps","cropperProps","transform","cropShape","showGrid","roundCropAreaPixels","containerStyle","cropAreaStyle","mediaStyle","containerClassName","cropAreaClassName","mediaClassName","el","touch","ButtonComponent","createImage","url","resolve","reject","error","getCroppedImageBlob","imageSrc","pixelCrop","fileType","canvas","ctx","bBoxWidth","bBoxHeight","croppedCanvas","croppedCtx","blob","ImageCropperModal","isOpen","fileName","title","onClose","onApply","setCrop","setZoom","setCroppedAreaPixels","onCropComplete","useCallback","_area","croppedPixels","handleApply","fileExtension","croppedFile","Icon","revokeBlobUrl","ImagePicker","accept","id","dragDrop","cropImage","setImage","isDragging","setIsDragging","cropModalOpen","setCropModalOpen","cropSource","setCropSource","selectedFileType","setSelectedFileType","selectedFileName","setSelectedFileName","inputRef","sourceUrlRef","previewUrlRef","preview","closeCropModal","handleCroppedImage","handleFileChange","files","file","source","removeImage","handleDragOver","handleDragLeave","handleDrop","handleButtonClick","imagePreview","Input","type","onKeyDown","negativeNumberAllow","field","maskApplyOnValue","showPassword","setShowPassword","handleKeyDown","maskValue","cleanValue","valueIndex","maskChar","valueChar","prev","TinyEditor","editorKey","inline","plugins","toolbar","menubar","fontFamily","initConfig","imageUploadHandler","defaultPlugins","defaultToolbar","handleImageUpload","blobInfo","Editor","content","Checkbox","multiSelect","isChecked","handleSingleChange","handleMultipleChange","checked","newValue","index","idx","AudioPicker","maxSize","audio","setAudio","maxSizeBytes","cleanupAudio","enqueueSnackbar","removeAudio","toGalleryItem","MultiImagePicker","maxImages","images","setImages","cropTargetId","setCropTargetId","replaceInputRef","cropSourceUrlRef","imagesRef","img","nextItems","remainingSlots","openCropModal","next","addFiles","selected","mapped","idToRemove","target","handleReplaceClick","idToReplace","handleReplaceImage","canSelectMore","ImagePreview","src","alt","setIsOpen","closePreview","handleEsc","X","GroupRow","col","uiVariant","styleConfig","subtitle","fallback_icon","targetImage","setTargetImage","openPreview","imageObj","renderAvatar","User","CardGroup","renderMiniAvatar","BADGE_COLORS","BADGE_VARIANTS","Chip","colorConfig","variantKey","variantClasses","DetailRow","chipObj","getImageSource","renderValue","wrapClass","Radio","text","radioOptions","VideoPicker","setVideo","cleanupVideo","removeVideo","RenderFields","handleChange","rows","inputClass","minLength","renderCondition","pattern","renderType","aspectRatio","finalPlaceholder","baseClass","imgList","imgObj","updatedValue","FilterDrawer","config","filters","setFilters","handleReset","DynamicComponent","TableSkeleton","columns","_","rowIndex","colIndex","SortDropdown","clearLabel","sortRef","isSortApplied","handleSelect","selectedValue","selectedOption","ArrowUpDown","BASE_SORT_CONFIG","normalizeSortConfig","sortConfig","getSortableColumns","tableHead","blockedTypes","detectSortType","sortKeyName","keyword","buildDefaultSortOptions","getNormalizedSortOptions","normalizedSortConfig","sortableColumns","fieldRules","fieldColumns","fieldKey","targetCol","sortTableData","filteredData","sortBy","normalizedSortOptions","direction","sortKey","sortType","normalizePhone","aValue","bValue","comparison","Table","setShowAdd","buttonText","description","showAddButton","table_head","loading","filter","sort","pagination","exportCSV","emptyMessage","onMenuAction","setServerSidePaginationData","onFilterApply","filterConfig","rowClick","activeMenu","setActiveMenu","menuList","setMenuList","menuPosition","setMenuPosition","showFilters","setShowFilters","appliedFilters","setAppliedFilters","useMemo","setSortBy","sortedData","currentPage","setCurrentPage","pageSize","setPageSize","totalRecords","setTotalRecords","totalPages","paginatedData","start","menuRef","tableScopeRef","buttonRefs","searchTimeoutRef","menuPortalTarget","handleSearchChange","handleSortChange","payload","handleActionClick","action","handleMenuToggle","itemId","menu_list","button","menuWidth","menuHeight","viewportWidth","viewportHeight","left","top","calculateRowNumber","renderMultiImageCell","maxPreview","visibleImages","remaining","imageAlt","row","renderAudio","audioSrc","Music","renderGroupCell","handleRenderChip","handleRenderCellValue","EllipsisVertical","handleRowClick","handleColumnClick","isRowClickable","isColumnClickable","handleExportCSV","headers","csvContent","r","defaultName","finalName","link","handleScroll","Plus","Filter","Download","newLimit","newPage","ChevronLeft","ChevronRight","Modal","icon","actionButtons","onFormSubmit","loadingBtn","executeFunction","selectedItem","footerConfig","sizeClasses","shouldShowFooter","btn","resp","Form","onSubmit","initialData","fetchRowDetails","safeInitialData","formClass","formFields","setFormData","dataLoading","setDataLoading","errors","setErrors","handleGetDetails","handleSubmit","form","newErrors","firstInvalidFocused","isValid","Details","fields","containerClass","styles","safeData","detailsData","setDetailsData","variantContainerClass","CrudPage","fetchData","isStaticData","tableConfig","modalConfig","setLoading","formLoading","setFormLoading","listingData","setListingData","paginationData","setPaginationData","serverSidePaginationData","filterData","setFilterData","changeFilterData","setChangeFilterData","showAdd","showEdit","setShowEdit","showDelete","setShowDelete","showView","setShowView","setSelectedItem","handleMenuAction","executeAction","onSuccess","success_message","error_message","handleAddResult","newObj","handleGetListing","handleEditResult","updatedObj","targetObject","handleDeleteResult","handleAddFormSubmit","handleEditFormSubmit","handleFilterData","filterByMatchingFields","ViewComponent","_k","_l","_m","_n","_o","_p","_q","_r","_s","_t","_u","_v","InnerCheck","useSnackbar","OptionalSnackbarProvider","SnackbarProvider","snackbarKey","injectStyles","style","libraryStyles","Crud"],"mappings":"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","x_google_ignoreList":[9,10,11,12,13,14,15]}
1
+ {"version":3,"file":"index.es.js","sources":["../src/lib/utils.ts","../src/lib/crudClasses.ts","../src/components/Button/Button.tsx","../src/components/Form/components/InputLabel.tsx","../src/data/countries.ts","../src/components/Form/components/Select.tsx","../src/components/Form/components/Switch.tsx","../src/components/Form/components/PhoneInput.tsx","../src/components/Form/components/TextArea.tsx","../node_modules/tslib/tslib.es6.mjs","../node_modules/normalize-wheel/src/UserAgent_DEPRECATED.js","../node_modules/normalize-wheel/src/ExecutionEnvironment.js","../node_modules/normalize-wheel/src/isEventSupported.js","../node_modules/normalize-wheel/src/normalizeWheel.js","../node_modules/normalize-wheel/index.js","../node_modules/react-easy-crop/index.module.mjs","../src/components/Form/components/ImageCropperModal.tsx","../src/components/Form/components/ImagePicker.tsx","../src/components/Form/components/Input.tsx","../src/components/Form/components/TinyEditor.tsx","../src/components/Form/components/Checkbox.tsx","../src/components/Form/components/AudioPicker.tsx","../src/components/Form/components/MultiImagePicker.tsx","../src/components/Table/components/ImagePreview.tsx","../src/components/Details/components/GroupRow.tsx","../src/components/Details/components/CardGroup.tsx","../src/components/Chip/Chip.tsx","../src/components/Details/components/DetailRow.tsx","../src/components/Form/components/Radio.tsx","../src/components/Form/components/VideoPicker.tsx","../src/components/Form/components/RenderFields.tsx","../src/components/Filter/FilterDrawer.tsx","../src/components/Table/components/TableSkeleton.tsx","../src/components/Table/components/SortDropdown.tsx","../src/components/Table/utils/sortUtils.ts","../src/components/Table/Table.tsx","../src/components/Modal/Modal.tsx","../src/components/Form/Form.tsx","../src/components/Details/Details.tsx","../src/components/CrudPage.tsx","../src/OptionalSnackbarProvider.tsx","../src/index.tsx"],"sourcesContent":["// ======= Format Date : Jan 15, 2024 =======\r\n\r\nexport const formatDate = (\r\n dateString: string | Date | null | undefined,\r\n format: string = \"DD MMM YYYY\",\r\n): string => {\r\n if (!dateString) return \"N/A\";\r\n\r\n const date = new Date(dateString);\r\n if (isNaN(date.getTime())) return \"Invalid Date\";\r\n\r\n const pad = (n: number): string => String(n).padStart(2, \"0\");\r\n\r\n const map: Record<string, string | number> = {\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) => String(map[token]),\r\n );\r\n};\r\n\r\n// =========== Local Search function ===========\r\nexport const searchLocalData = <T extends Record<string, any>>(\r\n data: T[],\r\n searchTerm: string | undefined | null,\r\n searchKeys: string[] = [],\r\n): T[] => {\r\n if (!searchTerm?.trim()) return data;\r\n\r\n const lowerSearchTerm = searchTerm.toLowerCase();\r\n\r\n const extractValues = (obj: any): string[] => {\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: string[] = [];\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","type ClassValue = string | null | undefined | false;\r\n\r\nexport const joinClasses = (...classes: ClassValue[]) =>\r\n classes.filter(Boolean).join(\" \");\r\n\r\nexport const crudClasses = {\r\n crudPage: {\r\n root: \"crud_page\",\r\n deleteContent: \"crud_page_delete_content\",\r\n },\r\n button: {\r\n root: \"crud_button\",\r\n },\r\n chip: {\r\n root: \"crud_chip\",\r\n },\r\n spinner: {\r\n root: \"crud_spinner\",\r\n },\r\n modal: {\r\n root: \"crud_modal\",\r\n overlay: \"crud_modal_overlay\",\r\n container: \"crud_modal_container\",\r\n header: \"crud_modal_header\",\r\n title: \"crud_modal_title\",\r\n closeButton: \"crud_modal_close_button\",\r\n body: \"crud_modal_body\",\r\n footer: \"crud_modal_footer\",\r\n actionButton: \"crud_modal_action_button\",\r\n loadingIndicator: \"crud_modal_loading_indicator\",\r\n },\r\n table: {\r\n root: \"crud_table\",\r\n toolbar: \"crud_table_toolbar\",\r\n searchField: \"crud_table_search_field\",\r\n searchInput: \"crud_table_search_input\",\r\n container: \"crud_table_container\",\r\n element: \"crud_table_element\",\r\n head: \"crud_table_head\",\r\n headRow: \"crud_table_head_row\",\r\n headCell: \"crud_table_head_cell\",\r\n body: \"crud_table_body\",\r\n row: \"crud_table_row\",\r\n cell: \"crud_table_cell\",\r\n noData: \"crud_table_no_data\",\r\n actionButton: \"crud_table_action_button\",\r\n menu: \"crud_table_menu\",\r\n menuItem: \"crud_table_menu_item\",\r\n pagination: \"crud_table_pagination\",\r\n },\r\n tableSkeleton: {\r\n root: \"crud_table_skeleton\",\r\n table: \"crud_table_skeleton_table\",\r\n },\r\n sortDropdown: {\r\n root: \"crud_sort_dropdown\",\r\n trigger: \"crud_sort_dropdown_trigger\",\r\n menu: \"crud_sort_dropdown_menu\",\r\n item: \"crud_sort_dropdown_item\",\r\n },\r\n imagePreview: {\r\n root: \"crud_image_preview\",\r\n container: \"crud_image_preview_container\",\r\n image: \"crud_image_preview_image\",\r\n },\r\n filterDrawer: {\r\n overlay: \"crud_filter_overlay\",\r\n panel: \"crud_filter_panel\",\r\n header: \"crud_filter_header\",\r\n body: \"crud_filter_body\",\r\n footer: \"crud_filter_footer\",\r\n },\r\n form: {\r\n root: \"crud_form\",\r\n loading: \"crud_form_loading\",\r\n },\r\n field: {\r\n wrapper: \"crud_field_wrapper\",\r\n label: \"crud_field_label\",\r\n input: \"crud_field_input\",\r\n error: \"crud_field_error\",\r\n },\r\n mediaPicker: {\r\n image: \"crud_media_image_picker\",\r\n multiImage: \"crud_media_multi_image_picker\",\r\n audio: \"crud_media_audio_picker\",\r\n video: \"crud_media_video_picker\",\r\n dropzone: \"crud_media_dropzone\",\r\n cropModal: \"crud_media_crop_modal\",\r\n },\r\n details: {\r\n root: \"crud_details\",\r\n container: \"crud_details_container\",\r\n row: \"crud_details_row\",\r\n },\r\n} as const;\r\n","import React from \"react\";\r\nimport { crudClasses, joinClasses } from \"../../lib/crudClasses\";\r\n\r\ninterface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n className?: string;\r\n variant?: string;\r\n color?: string;\r\n size?: string;\r\n fullWidth?: boolean;\r\n children: React.ReactNode;\r\n}\r\n\r\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\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: Record<string, string> = {\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: Record<string, Record<string, string>> = {\r\n primary: {\r\n contained:\r\n \"bg-primary text-white hover:bg-primary-600 focus:ring-primary-500 shadow-sm\",\r\n outlined:\r\n \"border border-primary bg-transparent text-primary hover:bg-primary-50 focus:ring-primary-500\",\r\n text: \"bg-transparent text-primary hover:bg-primary-50 focus:ring-primary-500\",\r\n },\r\n success: {\r\n contained:\r\n \"bg-green-600 text-white hover:bg-green-700 focus:ring-green-500 shadow-sm\",\r\n outlined:\r\n \"border border-green-600 bg-transparent text-green-600 hover:bg-green-50 focus:ring-green-500\",\r\n text: \"bg-transparent text-green-600 hover:bg-green-50 focus:ring-green-500\",\r\n },\r\n error: {\r\n contained:\r\n \"bg-red-600 text-white hover:bg-red-700 focus:ring-red-500 shadow-sm\",\r\n outlined:\r\n \"border border-red-600 bg-transparent text-red-600 hover:bg-red-50 focus:ring-red-500\",\r\n text: \"bg-transparent text-red-600 hover:bg-red-50 focus:ring-red-500\",\r\n },\r\n default: {\r\n contained:\r\n \"border bg-gray-200 text-gray-800 hover:bg-gray-300 focus:ring-gray-300 shadow-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-100 dark:hover:bg-gray-600 dark:focus:ring-gray-600\",\r\n outlined:\r\n \"border border-gray-300 bg-transparent text-gray-700 hover:bg-gray-100 focus:ring-gray-300 dark:border-gray-600 dark:text-gray-200 dark:hover:bg-gray-700 dark:focus:ring-gray-500\",\r\n text: \"bg-transparent text-gray-700 hover:bg-gray-100 focus:ring-gray-300 dark:text-gray-200 dark:hover:bg-gray-700 dark:focus:ring-gray-500\",\r\n },\r\n };\r\n\r\n const colorStyles =\r\n colorVariants[color]?.[variant] || colorVariants.default.contained;\r\n const sizeStyles = sizes[size] || sizes.default;\r\n\r\n const combinedClassName = joinClasses(\r\n crudClasses.button.root,\r\n baseStyles,\r\n colorStyles,\r\n sizeStyles,\r\n fullWidth ? \"w-full\" : \"\",\r\n className,\r\n );\r\n\r\n return (\r\n <button\r\n ref={ref}\r\n type={props.type || \"button\"}\r\n className={combinedClassName}\r\n {...props}\r\n >\r\n {children}\r\n </button>\r\n );\r\n },\r\n);\r\n\r\nButton.displayName = \"Button\";\r\n\r\nexport default Button;\r\n","import { Info } from \"lucide-react\";\r\nimport React from \"react\";\r\nimport { crudClasses, joinClasses } from \"../../../lib/crudClasses\";\r\n\r\ninterface InputLabelProps {\r\n label: React.ReactNode;\r\n required?: boolean;\r\n infoText?: string;\r\n}\r\n\r\nexport default function InputLabel({\r\n label,\r\n required = false,\r\n infoText = \"\",\r\n}: InputLabelProps) {\r\n return (\r\n <>\r\n <label\r\n className={joinClasses(\r\n crudClasses.field.label,\r\n \"flex text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\",\r\n )}\r\n >\r\n {label}\r\n {required && <span className=\"ml-1\">*</span>}\r\n\r\n {infoText && (\r\n <span className=\"ml-2 relative group inline-flex items-center cursor-pointer\">\r\n <Info className=\"w-4 h-4 text-gray-500 dark:text-gray-400\" />\r\n\r\n <span\r\n className=\"absolute left-1/2 top-full mt-2\r\n w-max max-w-xs bg-white text-black dark:bg-black dark:text-white text-xs\r\n rounded px-2 py-1 opacity-0 shadow-lg\r\n group-hover:opacity-100 transition-opacity\r\n duration-200 pointer-events-none z-50\"\r\n >\r\n {infoText}\r\n </span>\r\n </span>\r\n )}\r\n </label>\r\n </>\r\n );\r\n}\r\n","export interface CountryInterface {\r\n label: string;\r\n code: string;\r\n phone: string;\r\n pattern: string;\r\n mask: string;\r\n}\r\n\r\nexport const countries: CountryInterface[] = [\r\n {\r\n label: \"Afghanistan\",\r\n code: \"AF\",\r\n phone: \"93\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Aland Islands\",\r\n code: \"AX\",\r\n phone: \"358\",\r\n pattern: \"^[0-9]{6,10}$\",\r\n mask: \"### ### ### ##\",\r\n },\r\n {\r\n label: \"Albania\",\r\n code: \"AL\",\r\n phone: \"355\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Algeria\",\r\n code: \"DZ\",\r\n phone: \"213\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"American Samoa\",\r\n code: \"AS\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Andorra\",\r\n code: \"AD\",\r\n phone: \"376\",\r\n pattern: \"^[0-9]{6,9}$\",\r\n mask: \"### ###\",\r\n },\r\n {\r\n label: \"Angola\",\r\n code: \"AO\",\r\n phone: \"244\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Anguilla\",\r\n code: \"AI\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Antarctica\",\r\n code: \"AQ\",\r\n phone: \"672\",\r\n pattern: \"^[0-9]{6,11}$\",\r\n mask: \"## #### ####\",\r\n },\r\n {\r\n label: \"Antigua and Barbuda\",\r\n code: \"AG\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Argentina\",\r\n code: \"AR\",\r\n phone: \"54\",\r\n pattern: \"^[0-9]{10,11}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Armenia\",\r\n code: \"AM\",\r\n phone: \"374\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"Aruba\",\r\n code: \"AW\",\r\n phone: \"297\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"### ####\",\r\n },\r\n {\r\n label: \"Australia\",\r\n code: \"AU\",\r\n phone: \"61\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Austria\",\r\n code: \"AT\",\r\n phone: \"43\",\r\n pattern: \"^[0-9]{10,12}$\",\r\n mask: \"#### ######\",\r\n },\r\n {\r\n label: \"Azerbaijan\",\r\n code: \"AZ\",\r\n phone: \"994\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ## ##\",\r\n },\r\n {\r\n label: \"Bahrain\",\r\n code: \"BH\",\r\n phone: \"973\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Bangladesh\",\r\n code: \"BD\",\r\n phone: \"880\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"### ### ####\",\r\n },\r\n {\r\n label: \"Barbados\",\r\n code: \"BB\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Belarus\",\r\n code: \"BY\",\r\n phone: \"375\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ## ##\",\r\n },\r\n {\r\n label: \"Belgium\",\r\n code: \"BE\",\r\n phone: \"32\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ## ## ##\",\r\n },\r\n {\r\n label: \"Belize\",\r\n code: \"BZ\",\r\n phone: \"501\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"### ####\",\r\n },\r\n {\r\n label: \"Benin\",\r\n code: \"BJ\",\r\n phone: \"229\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ## ####\",\r\n },\r\n {\r\n label: \"Bermuda\",\r\n code: \"BM\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Bhutan\",\r\n code: \"BT\",\r\n phone: \"975\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"Bolivia\",\r\n code: \"BO\",\r\n phone: \"591\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"### ### ##\",\r\n },\r\n {\r\n label: \"Bonaire, Sint Eustatius and Saba\",\r\n code: \"BQ\",\r\n phone: \"599\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"### ####\",\r\n },\r\n {\r\n label: \"Bosnia and Herzegovina\",\r\n code: \"BA\",\r\n phone: \"387\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"Botswana\",\r\n code: \"BW\",\r\n phone: \"267\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"Bouvet Island\",\r\n code: \"BV\",\r\n phone: \"0055\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Brazil\",\r\n code: \"BR\",\r\n phone: \"55\",\r\n pattern: \"^[0-9]{10,11}$\",\r\n mask: \"(##) #####-####\",\r\n },\r\n {\r\n label: \"British Indian Ocean Territory\",\r\n code: \"IO\",\r\n phone: \"246\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"### ####\",\r\n },\r\n {\r\n label: \"Brunei\",\r\n code: \"BN\",\r\n phone: \"673\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"### ####\",\r\n },\r\n {\r\n label: \"Bulgaria\",\r\n code: \"BG\",\r\n phone: \"359\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Burkina Faso\",\r\n code: \"BF\",\r\n phone: \"226\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ## ####\",\r\n },\r\n {\r\n label: \"Burundi\",\r\n code: \"BI\",\r\n phone: \"257\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ## ####\",\r\n },\r\n {\r\n label: \"Cambodia\",\r\n code: \"KH\",\r\n phone: \"855\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"Cameroon\",\r\n code: \"CM\",\r\n phone: \"237\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"#### ## ##\",\r\n },\r\n {\r\n label: \"Canada\",\r\n code: \"CA\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Cape Verde\",\r\n code: \"CV\",\r\n phone: \"238\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"### ####\",\r\n },\r\n {\r\n label: \"Cayman Islands\",\r\n code: \"KY\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Central African Republic\",\r\n code: \"CF\",\r\n phone: \"236\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ## ####\",\r\n },\r\n {\r\n label: \"Chad\",\r\n code: \"TD\",\r\n phone: \"235\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ## ## ##\",\r\n },\r\n {\r\n label: \"Chile\",\r\n code: \"CL\",\r\n phone: \"56\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## #### ###\",\r\n },\r\n {\r\n label: \"China\",\r\n code: \"CN\",\r\n phone: \"86\",\r\n pattern: \"^[0-9]{11}$\",\r\n mask: \"### #### ####\",\r\n },\r\n {\r\n label: \"Christmas Island\",\r\n code: \"CX\",\r\n phone: \"61\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Cocos (Keeling) Islands\",\r\n code: \"CC\",\r\n phone: \"61\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Colombia\",\r\n code: \"CO\",\r\n phone: \"57\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"### ### ####\",\r\n },\r\n {\r\n label: \"Comoros\",\r\n code: \"KM\",\r\n phone: \"269\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"## ## ###\",\r\n },\r\n {\r\n label: \"Congo\",\r\n code: \"CG\",\r\n phone: \"242\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Cook Islands\",\r\n code: \"CK\",\r\n phone: \"682\",\r\n pattern: \"^[0-9]{5}$\",\r\n mask: \"#####\",\r\n },\r\n {\r\n label: \"Costa Rica\",\r\n code: \"CR\",\r\n phone: \"506\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Croatia\",\r\n code: \"HR\",\r\n phone: \"385\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Cuba\",\r\n code: \"CU\",\r\n phone: \"53\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"Curaçao\",\r\n code: \"CW\",\r\n phone: \"599\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"### ####\",\r\n },\r\n {\r\n label: \"Cyprus\",\r\n code: \"CY\",\r\n phone: \"357\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"Czech Republic\",\r\n code: \"CZ\",\r\n phone: \"420\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Democratic Republic of the Congo\",\r\n code: \"CD\",\r\n phone: \"243\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Denmark\",\r\n code: \"DK\",\r\n phone: \"45\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ## ## ##\",\r\n },\r\n {\r\n label: \"Djibouti\",\r\n code: \"DJ\",\r\n phone: \"253\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ## ## ##\",\r\n },\r\n {\r\n label: \"Dominica\",\r\n code: \"DM\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Dominican Republic\",\r\n code: \"DO\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Ecuador\",\r\n code: \"EC\",\r\n phone: \"593\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Egypt\",\r\n code: \"EG\",\r\n phone: \"20\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"### ### ####\",\r\n },\r\n {\r\n label: \"El Salvador\",\r\n code: \"SV\",\r\n phone: \"503\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Equatorial Guinea\",\r\n code: \"GQ\",\r\n phone: \"240\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Eritrea\",\r\n code: \"ER\",\r\n phone: \"291\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"## ### ##\",\r\n },\r\n {\r\n label: \"Estonia\",\r\n code: \"EE\",\r\n phone: \"372\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Eswatini\",\r\n code: \"SZ\",\r\n phone: \"268\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Ethiopia\",\r\n code: \"ET\",\r\n phone: \"251\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Falkland Islands\",\r\n code: \"FK\",\r\n phone: \"500\",\r\n pattern: \"^[0-9]{5}$\",\r\n mask: \"#####\",\r\n },\r\n {\r\n label: \"Faroe Islands\",\r\n code: \"FO\",\r\n phone: \"298\",\r\n pattern: \"^[0-9]{6}$\",\r\n mask: \"### ###\",\r\n },\r\n {\r\n label: \"Fiji Islands\",\r\n code: \"FJ\",\r\n phone: \"679\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"### ####\",\r\n },\r\n {\r\n label: \"Finland\",\r\n code: \"FI\",\r\n phone: \"358\",\r\n pattern: \"^[0-9]{6,10}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"France\",\r\n code: \"FR\",\r\n phone: \"33\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ## ## ## ##\",\r\n },\r\n {\r\n label: \"French Guiana\",\r\n code: \"GF\",\r\n phone: \"594\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"##### #####\",\r\n },\r\n {\r\n label: \"French Polynesia\",\r\n code: \"PF\",\r\n phone: \"689\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ## ## ##\",\r\n },\r\n {\r\n label: \"French Southern Territories\",\r\n code: \"TF\",\r\n phone: \"262\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"##### #####\",\r\n },\r\n {\r\n label: \"Gabon\",\r\n code: \"GA\",\r\n phone: \"241\",\r\n pattern: \"^[0-9]{7,8}$\",\r\n mask: \"## ## ####\",\r\n },\r\n {\r\n label: \"Georgia\",\r\n code: \"GE\",\r\n phone: \"995\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ## ## ##\",\r\n },\r\n {\r\n label: \"Germany\",\r\n code: \"DE\",\r\n phone: \"49\",\r\n pattern: \"^[0-9]{10,11}$\",\r\n mask: \"#### ######\",\r\n },\r\n {\r\n label: \"Ghana\",\r\n code: \"GH\",\r\n phone: \"233\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Gibraltar\",\r\n code: \"GI\",\r\n phone: \"350\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Greece\",\r\n code: \"GR\",\r\n phone: \"30\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"### ### ####\",\r\n },\r\n {\r\n label: \"Greenland\",\r\n code: \"GL\",\r\n phone: \"299\",\r\n pattern: \"^[0-9]{6}$\",\r\n mask: \"## ## ##\",\r\n },\r\n {\r\n label: \"Grenada\",\r\n code: \"GD\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Guadeloupe\",\r\n code: \"GP\",\r\n phone: \"590\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"##### #####\",\r\n },\r\n {\r\n label: \"Guam\",\r\n code: \"GU\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Guatemala\",\r\n code: \"GT\",\r\n phone: \"502\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Guernsey\",\r\n code: \"GG\",\r\n phone: \"44\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"#### ######\",\r\n },\r\n {\r\n label: \"Guinea\",\r\n code: \"GN\",\r\n phone: \"224\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Guinea-Bissau\",\r\n code: \"GW\",\r\n phone: \"245\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Guyana\",\r\n code: \"GY\",\r\n phone: \"592\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"### ####\",\r\n },\r\n {\r\n label: \"Haiti\",\r\n code: \"HT\",\r\n phone: \"509\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Heard Island and McDonald Islands\",\r\n code: \"HM\",\r\n phone: \"672\",\r\n pattern: \"^[0-9]{6,11}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"Honduras\",\r\n code: \"HN\",\r\n phone: \"504\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Hong Kong S.A.R.\",\r\n code: \"HK\",\r\n phone: \"852\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Hungary\",\r\n code: \"HU\",\r\n phone: \"36\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Iceland\",\r\n code: \"IS\",\r\n phone: \"354\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"### ####\",\r\n },\r\n {\r\n label: \"India\",\r\n code: \"IN\",\r\n phone: \"91\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"##### #####\",\r\n },\r\n {\r\n label: \"Indonesia\",\r\n code: \"ID\",\r\n phone: \"62\",\r\n pattern: \"^[0-9]{9,11}$\",\r\n mask: \"### #### ####\",\r\n },\r\n {\r\n label: \"Iran\",\r\n code: \"IR\",\r\n phone: \"98\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"### ### ####\",\r\n },\r\n {\r\n label: \"Iraq\",\r\n code: \"IQ\",\r\n phone: \"964\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"### ### ####\",\r\n },\r\n {\r\n label: \"Ireland\",\r\n code: \"IE\",\r\n phone: \"353\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Israel\",\r\n code: \"IL\",\r\n phone: \"972\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Italy\",\r\n code: \"IT\",\r\n phone: \"39\",\r\n pattern: \"^[0-9]{10,11}$\",\r\n mask: \"### ### ####\",\r\n },\r\n {\r\n label: \"Ivory Coast\",\r\n code: \"CI\",\r\n phone: \"225\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"## ## ## ## ##\",\r\n },\r\n {\r\n label: \"Jamaica\",\r\n code: \"JM\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Japan\",\r\n code: \"JP\",\r\n phone: \"81\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"## #### ####\",\r\n },\r\n {\r\n label: \"Jersey\",\r\n code: \"JE\",\r\n phone: \"44\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"#### ######\",\r\n },\r\n {\r\n label: \"Jordan\",\r\n code: \"JO\",\r\n phone: \"962\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## #### ####\",\r\n },\r\n {\r\n label: \"Kazakhstan\",\r\n code: \"KZ\",\r\n phone: \"7\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"### ### ## ##\",\r\n },\r\n {\r\n label: \"Kenya\",\r\n code: \"KE\",\r\n phone: \"254\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Kiribati\",\r\n code: \"KI\",\r\n phone: \"686\",\r\n pattern: \"^[0-9]{5,8}$\",\r\n mask: \"## ###\",\r\n },\r\n {\r\n label: \"Kosovo\",\r\n code: \"XK\",\r\n phone: \"383\",\r\n pattern: \"^[0-9]{8,9}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"Kuwait\",\r\n code: \"KW\",\r\n phone: \"965\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Kyrgyzstan\",\r\n code: \"KG\",\r\n phone: \"996\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Laos\",\r\n code: \"LA\",\r\n phone: \"856\",\r\n pattern: \"^[0-9]{9,10}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"Latvia\",\r\n code: \"LV\",\r\n phone: \"371\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"Lebanon\",\r\n code: \"LB\",\r\n phone: \"961\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"Lesotho\",\r\n code: \"LS\",\r\n phone: \"266\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Liberia\",\r\n code: \"LR\",\r\n phone: \"231\",\r\n pattern: \"^[0-9]{7,8}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"Libya\",\r\n code: \"LY\",\r\n phone: \"218\",\r\n pattern: \"^[0-9]{9,10}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Liechtenstein\",\r\n code: \"LI\",\r\n phone: \"423\",\r\n pattern: \"^[0-9]{7,9}$\",\r\n mask: \"### ####\",\r\n },\r\n {\r\n label: \"Lithuania\",\r\n code: \"LT\",\r\n phone: \"370\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"### ### ##\",\r\n },\r\n {\r\n label: \"Luxembourg\",\r\n code: \"LU\",\r\n phone: \"352\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Macau S.A.R.\",\r\n code: \"MO\",\r\n phone: \"853\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Madagascar\",\r\n code: \"MG\",\r\n phone: \"261\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ## #####\",\r\n },\r\n {\r\n label: \"Malawi\",\r\n code: \"MW\",\r\n phone: \"265\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Malaysia\",\r\n code: \"MY\",\r\n phone: \"60\",\r\n pattern: \"^[0-9]{9,10}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Maldives\",\r\n code: \"MV\",\r\n phone: \"960\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"### ####\",\r\n },\r\n {\r\n label: \"Mali\",\r\n code: \"ML\",\r\n phone: \"223\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ## ####\",\r\n },\r\n {\r\n label: \"Malta\",\r\n code: \"MT\",\r\n phone: \"356\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Man (Isle of)\",\r\n code: \"IM\",\r\n phone: \"44\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"#### ######\",\r\n },\r\n {\r\n label: \"Marshall Islands\",\r\n code: \"MH\",\r\n phone: \"692\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"### ####\",\r\n },\r\n {\r\n label: \"Martinique\",\r\n code: \"MQ\",\r\n phone: \"596\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"##### #####\",\r\n },\r\n {\r\n label: \"Mauritania\",\r\n code: \"MR\",\r\n phone: \"222\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ## ####\",\r\n },\r\n {\r\n label: \"Mauritius\",\r\n code: \"MU\",\r\n phone: \"230\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Mayotte\",\r\n code: \"YT\",\r\n phone: \"262\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"##### #####\",\r\n },\r\n {\r\n label: \"Mexico\",\r\n code: \"MX\",\r\n phone: \"52\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"### ### ####\",\r\n },\r\n {\r\n label: \"Micronesia\",\r\n code: \"FM\",\r\n phone: \"691\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"### ####\",\r\n },\r\n {\r\n label: \"Moldova\",\r\n code: \"MD\",\r\n phone: \"373\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Monaco\",\r\n code: \"MC\",\r\n phone: \"377\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ## ## ## ##\",\r\n },\r\n {\r\n label: \"Mongolia\",\r\n code: \"MN\",\r\n phone: \"976\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ## ####\",\r\n },\r\n {\r\n label: \"Montenegro\",\r\n code: \"ME\",\r\n phone: \"382\",\r\n pattern: \"^[0-9]{8,9}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"Montserrat\",\r\n code: \"MS\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Morocco\",\r\n code: \"MA\",\r\n phone: \"212\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## #### ###\",\r\n },\r\n {\r\n label: \"Mozambique\",\r\n code: \"MZ\",\r\n phone: \"258\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"Myanmar\",\r\n code: \"MM\",\r\n phone: \"95\",\r\n pattern: \"^[0-9]{9,10}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"Namibia\",\r\n code: \"NA\",\r\n phone: \"264\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Nauru\",\r\n code: \"NR\",\r\n phone: \"674\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"### ####\",\r\n },\r\n {\r\n label: \"Nepal\",\r\n code: \"NP\",\r\n phone: \"977\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"### #### ###\",\r\n },\r\n {\r\n label: \"Netherlands\",\r\n code: \"NL\",\r\n phone: \"31\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"New Caledonia\",\r\n code: \"NC\",\r\n phone: \"687\",\r\n pattern: \"^[0-9]{6}$\",\r\n mask: \"## ####\",\r\n },\r\n {\r\n label: \"New Zealand\",\r\n code: \"NZ\",\r\n phone: \"64\",\r\n pattern: \"^[0-9]{9,10}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Nicaragua\",\r\n code: \"NI\",\r\n phone: \"505\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Niger\",\r\n code: \"NE\",\r\n phone: \"227\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ## ####\",\r\n },\r\n {\r\n label: \"Nigeria\",\r\n code: \"NG\",\r\n phone: \"234\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"### ### ####\",\r\n },\r\n {\r\n label: \"Niue\",\r\n code: \"NU\",\r\n phone: \"683\",\r\n pattern: \"^[0-9]{4}$\",\r\n mask: \"####\",\r\n },\r\n {\r\n label: \"Norfolk Island\",\r\n code: \"NF\",\r\n phone: \"672\",\r\n pattern: \"^[0-9]{6,11}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"North Korea\",\r\n code: \"KP\",\r\n phone: \"850\",\r\n pattern: \"^[0-9]{8,10}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"North Macedonia\",\r\n code: \"MK\",\r\n phone: \"389\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"Northern Mariana Islands\",\r\n code: \"MP\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Norway\",\r\n code: \"NO\",\r\n phone: \"47\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"### ## ###\",\r\n },\r\n {\r\n label: \"Oman\",\r\n code: \"OM\",\r\n phone: \"968\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Pakistan\",\r\n code: \"PK\",\r\n phone: \"92\",\r\n pattern: \"^[0-9]{10,11}$\",\r\n mask: \"### #### ###\",\r\n },\r\n {\r\n label: \"Palau\",\r\n code: \"PW\",\r\n phone: \"680\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"### ####\",\r\n },\r\n {\r\n label: \"Palestinian Territory Occupied\",\r\n code: \"PS\",\r\n phone: \"970\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Panama\",\r\n code: \"PA\",\r\n phone: \"507\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Papua New Guinea\",\r\n code: \"PG\",\r\n phone: \"675\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"### ## ###\",\r\n },\r\n {\r\n label: \"Paraguay\",\r\n code: \"PY\",\r\n phone: \"595\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Peru\",\r\n code: \"PE\",\r\n phone: \"51\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Philippines\",\r\n code: \"PH\",\r\n phone: \"63\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"### ### ####\",\r\n },\r\n {\r\n label: \"Pitcairn Island\",\r\n code: \"PN\",\r\n phone: \"870\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Poland\",\r\n code: \"PL\",\r\n phone: \"48\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Portugal\",\r\n code: \"PT\",\r\n phone: \"351\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Puerto Rico\",\r\n code: \"PR\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Qatar\",\r\n code: \"QA\",\r\n phone: \"974\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Reunion\",\r\n code: \"RE\",\r\n phone: \"262\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"##### #####\",\r\n },\r\n {\r\n label: \"Romania\",\r\n code: \"RO\",\r\n phone: \"40\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Russia\",\r\n code: \"RU\",\r\n phone: \"7\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"### ### ## ##\",\r\n },\r\n {\r\n label: \"Rwanda\",\r\n code: \"RW\",\r\n phone: \"250\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Saint Helena\",\r\n code: \"SH\",\r\n phone: \"290\",\r\n pattern: \"^[0-9]{4}$\",\r\n mask: \"####\",\r\n },\r\n {\r\n label: \"Saint Kitts and Nevis\",\r\n code: \"KN\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Saint Lucia\",\r\n code: \"LC\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Saint Pierre and Miquelon\",\r\n code: \"PM\",\r\n phone: \"508\",\r\n pattern: \"^[0-9]{6}$\",\r\n mask: \"## ###\",\r\n },\r\n {\r\n label: \"Saint Vincent and the Grenadines\",\r\n code: \"VC\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Saint-Barthelemy\",\r\n code: \"BL\",\r\n phone: \"590\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"##### #####\",\r\n },\r\n {\r\n label: \"Saint-Martin (French part)\",\r\n code: \"MF\",\r\n phone: \"590\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"##### #####\",\r\n },\r\n {\r\n label: \"Samoa\",\r\n code: \"WS\",\r\n phone: \"685\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"## ####\",\r\n },\r\n {\r\n label: \"San Marino\",\r\n code: \"SM\",\r\n phone: \"378\",\r\n pattern: \"^[0-9]{10,12}$\",\r\n mask: \"#### ######\",\r\n },\r\n {\r\n label: \"Sao Tome and Principe\",\r\n code: \"ST\",\r\n phone: \"239\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"### ####\",\r\n },\r\n {\r\n label: \"Saudi Arabia\",\r\n code: \"SA\",\r\n phone: \"966\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ####\",\r\n },\r\n {\r\n label: \"Senegal\",\r\n code: \"SN\",\r\n phone: \"221\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Serbia\",\r\n code: \"RS\",\r\n phone: \"381\",\r\n pattern: \"^[0-9]{8,9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Seychelles\",\r\n code: \"SC\",\r\n phone: \"248\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"### ####\",\r\n },\r\n {\r\n label: \"Sierra Leone\",\r\n code: \"SL\",\r\n phone: \"232\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ######\",\r\n },\r\n {\r\n label: \"Singapore\",\r\n code: \"SG\",\r\n phone: \"65\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Sint Maarten (Dutch part)\",\r\n code: \"SX\",\r\n phone: \"1721\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Slovakia\",\r\n code: \"SK\",\r\n phone: \"421\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Slovenia\",\r\n code: \"SI\",\r\n phone: \"386\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"Solomon Islands\",\r\n code: \"SB\",\r\n phone: \"677\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"##### ##\",\r\n },\r\n {\r\n label: \"Somalia\",\r\n code: \"SO\",\r\n phone: \"252\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"South Africa\",\r\n code: \"ZA\",\r\n phone: \"27\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"South Georgia\",\r\n code: \"GS\",\r\n phone: \"500\",\r\n pattern: \"^[0-9]{5}$\",\r\n mask: \"#####\",\r\n },\r\n {\r\n label: \"South Korea\",\r\n code: \"KR\",\r\n phone: \"82\",\r\n pattern: \"^[0-9]{9,10}$\",\r\n mask: \"## #### ####\",\r\n },\r\n {\r\n label: \"South Sudan\",\r\n code: \"SS\",\r\n phone: \"211\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Spain\",\r\n code: \"ES\",\r\n phone: \"34\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Sri Lanka\",\r\n code: \"LK\",\r\n phone: \"94\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Sudan\",\r\n code: \"SD\",\r\n phone: \"249\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Suriname\",\r\n code: \"SR\",\r\n phone: \"597\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"### ####\",\r\n },\r\n {\r\n label: \"Svalbard and Jan Mayen Islands\",\r\n code: \"SJ\",\r\n phone: \"47\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"### ## ###\",\r\n },\r\n {\r\n label: \"Sweden\",\r\n code: \"SE\",\r\n phone: \"46\",\r\n pattern: \"^[0-9]{9,10}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Switzerland\",\r\n code: \"CH\",\r\n phone: \"41\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Syria\",\r\n code: \"SY\",\r\n phone: \"963\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## #### ###\",\r\n },\r\n {\r\n label: \"Taiwan\",\r\n code: \"TW\",\r\n phone: \"886\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Tajikistan\",\r\n code: \"TJ\",\r\n phone: \"992\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ## ####\",\r\n },\r\n {\r\n label: \"Tanzania\",\r\n code: \"TZ\",\r\n phone: \"255\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Thailand\",\r\n code: \"TH\",\r\n phone: \"66\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"The Bahamas\",\r\n code: \"BS\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"The Gambia\",\r\n code: \"GM\",\r\n phone: \"220\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"### ####\",\r\n },\r\n {\r\n label: \"Timor-Leste\",\r\n code: \"TL\",\r\n phone: \"670\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"#### ####\",\r\n },\r\n {\r\n label: \"Togo\",\r\n code: \"TG\",\r\n phone: \"228\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ## ####\",\r\n },\r\n {\r\n label: \"Tokelau\",\r\n code: \"TK\",\r\n phone: \"690\",\r\n pattern: \"^[0-9]{4}$\",\r\n mask: \"####\",\r\n },\r\n {\r\n label: \"Tonga\",\r\n code: \"TO\",\r\n phone: \"676\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"##### ##\",\r\n },\r\n {\r\n label: \"Trinidad and Tobago\",\r\n code: \"TT\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Tunisia\",\r\n code: \"TN\",\r\n phone: \"216\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"Turkey\",\r\n code: \"TR\",\r\n phone: \"90\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"### ### ####\",\r\n },\r\n {\r\n label: \"Turkmenistan\",\r\n code: \"TM\",\r\n phone: \"993\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## #### ##\",\r\n },\r\n {\r\n label: \"Turks and Caicos Islands\",\r\n code: \"TC\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Tuvalu\",\r\n code: \"TV\",\r\n phone: \"688\",\r\n pattern: \"^[0-9]{5}$\",\r\n mask: \"#####\",\r\n },\r\n {\r\n label: \"Uganda\",\r\n code: \"UG\",\r\n phone: \"256\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Ukraine\",\r\n code: \"UA\",\r\n phone: \"380\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ## ##\",\r\n },\r\n {\r\n label: \"United Arab Emirates\",\r\n code: \"AE\",\r\n phone: \"971\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"United Kingdom\",\r\n code: \"GB\",\r\n phone: \"44\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"#### ######\",\r\n },\r\n {\r\n label: \"United States\",\r\n code: \"US\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"United States Minor Outlying Islands\",\r\n code: \"UM\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Uruguay\",\r\n code: \"UY\",\r\n phone: \"598\",\r\n pattern: \"^[0-9]{8}$\",\r\n mask: \"## ### ###\",\r\n },\r\n {\r\n label: \"Uzbekistan\",\r\n code: \"UZ\",\r\n phone: \"998\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ## ##\",\r\n },\r\n {\r\n label: \"Vanuatu\",\r\n code: \"VU\",\r\n phone: \"678\",\r\n pattern: \"^[0-9]{7}$\",\r\n mask: \"##### ##\",\r\n },\r\n {\r\n label: \"Vatican City State (Holy See)\",\r\n code: \"VA\",\r\n phone: \"379\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"## #### ####\",\r\n },\r\n {\r\n label: \"Venezuela\",\r\n code: \"VE\",\r\n phone: \"58\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"### ### ####\",\r\n },\r\n {\r\n label: \"Vietnam\",\r\n code: \"VN\",\r\n phone: \"84\",\r\n pattern: \"^[0-9]{9,10}$\",\r\n mask: \"## #### ###\",\r\n },\r\n {\r\n label: \"Virgin Islands (British)\",\r\n code: \"VG\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Virgin Islands (US)\",\r\n code: \"VI\",\r\n phone: \"1\",\r\n pattern: \"^[0-9]{10}$\",\r\n mask: \"(###) ###-####\",\r\n },\r\n {\r\n label: \"Wallis and Futuna Islands\",\r\n code: \"WF\",\r\n phone: \"681\",\r\n pattern: \"^[0-9]{6}$\",\r\n mask: \"## ####\",\r\n },\r\n {\r\n label: \"Western Sahara\",\r\n code: \"EH\",\r\n phone: \"212\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## #### ###\",\r\n },\r\n {\r\n label: \"Yemen\",\r\n code: \"YE\",\r\n phone: \"967\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"### ### ###\",\r\n },\r\n {\r\n label: \"Zambia\",\r\n code: \"ZM\",\r\n phone: \"260\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n {\r\n label: \"Zimbabwe\",\r\n code: \"ZW\",\r\n phone: \"263\",\r\n pattern: \"^[0-9]{9}$\",\r\n mask: \"## ### ####\",\r\n },\r\n];\r\n","import React, { useState, useEffect, useRef } from \"react\";\r\nimport { ChevronDown, Search, Check } from \"lucide-react\";\r\nimport { createPortal } from \"react-dom\";\r\nimport InputLabel from \"./InputLabel\";\r\nimport { countries } from \"../../../data/countries\";\r\nimport { crudClasses, joinClasses } from \"../../../lib/crudClasses\";\r\n\r\ninterface SelectOption {\r\n label: string;\r\n value: any;\r\n code?: string;\r\n}\r\n\r\ninterface SelectProps {\r\n options?:\r\n | SelectOption[]\r\n | ((\r\n formData: Record<string, any>,\r\n ) => Promise<SelectOption[]> | SelectOption[]);\r\n value: any;\r\n defaultValue?: any;\r\n onChange: (value: any) => void;\r\n placeholder?: string;\r\n className?: string;\r\n disabled?: boolean;\r\n search?: boolean;\r\n label?: React.ReactNode;\r\n required?: boolean;\r\n name: string;\r\n parentClass?: string;\r\n multiple?: boolean;\r\n dropdownMaxHeight?: string | number;\r\n formData: Record<string, any>;\r\n dependencyKey?: string;\r\n countriesList?: boolean;\r\n errorMessage?: string;\r\n}\r\n\r\nconst Select = ({\r\n options = [],\r\n value = \"\",\r\n defaultValue = \"\",\r\n onChange,\r\n placeholder = \"Select option\",\r\n className = \"\",\r\n disabled = false,\r\n search = false,\r\n label = \"\",\r\n required = false,\r\n name = \"\",\r\n parentClass = \"\",\r\n multiple = false,\r\n dropdownMaxHeight = \"\",\r\n formData = {},\r\n countriesList = false,\r\n dependencyKey = \"\",\r\n errorMessage = \"\",\r\n}: SelectProps) => {\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<HTMLDivElement | null>(null);\r\n const optionsPanelRef = useRef<HTMLDivElement | null>(null);\r\n const searchInputRef = useRef<HTMLInputElement | null>(null);\r\n const [normalizedOptions, setNormalizedOptions] = useState<SelectOption[]>(\r\n [],\r\n );\r\n const [dropdownPosition, setDropdownPosition] = useState({\r\n top: 0,\r\n left: 0,\r\n width: 0,\r\n });\r\n\r\n const dropdownPortalTarget =\r\n typeof document !== \"undefined\"\r\n ? (dropdownRef.current?.closest(\".racm-root\") as HTMLElement | null) ||\r\n document.body\r\n : null;\r\n\r\n const initialVal = value || value === false ? value : defaultValue;\r\n\r\n const normalize = (val: any) => {\r\n if (val === null || val === undefined || val === \"\") return \"\";\r\n return typeof val === \"boolean\" ? String(val) : String(val ?? \"\");\r\n };\r\n\r\n const getCountrieslist = () => {\r\n const list = countries.map((obj) => ({\r\n value: obj.label,\r\n label: obj.label,\r\n code: obj.code,\r\n }));\r\n return list;\r\n };\r\n\r\n useEffect(\r\n () => {\r\n const loadOptions = async () => {\r\n if (countriesList == true) {\r\n setNormalizedOptions(getCountrieslist());\r\n } else if (typeof options === \"function\") {\r\n const result = await options(formData);\r\n setNormalizedOptions(result || []);\r\n } else {\r\n setNormalizedOptions(options || []);\r\n }\r\n };\r\n\r\n loadOptions();\r\n },\r\n dependencyKey ? [options, formData?.[dependencyKey]] : [options],\r\n );\r\n\r\n const normalizedValue = multiple\r\n ? (initialVal || []).map(normalize)\r\n : normalize(initialVal);\r\n\r\n const filteredOptions = normalizedOptions.filter((option) =>\r\n option.label.toLowerCase().includes(searchTerm.toLowerCase()),\r\n );\r\n\r\n const isSelected = (optionValue: any) => {\r\n const normalized = normalize(optionValue);\r\n if (multiple) {\r\n return (normalizedValue as string[]).includes(normalized);\r\n }\r\n return normalized === normalizedValue;\r\n };\r\n\r\n useEffect(() => {\r\n const handleClickOutside = (event: MouseEvent) => {\r\n if (\r\n dropdownRef.current &&\r\n !dropdownRef.current.contains(event.target as Node) &&\r\n !optionsPanelRef.current?.contains(event.target as Node)\r\n ) {\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) return;\r\n\r\n const updateDropdownPosition = () => {\r\n if (!dropdownRef.current) return;\r\n\r\n const rect = dropdownRef.current.getBoundingClientRect();\r\n const viewportHeight = window.innerHeight;\r\n const spaceBelow = viewportHeight - rect.bottom;\r\n const maxDropdownHeight =\r\n typeof dropdownMaxHeight === \"number\" ? dropdownMaxHeight : 200;\r\n const shouldShowAbove = spaceBelow < maxDropdownHeight;\r\n\r\n setShowAboveState(shouldShowAbove);\r\n setDropdownPosition({\r\n top: shouldShowAbove ? rect.top - 4 : rect.bottom + 4,\r\n left: rect.left,\r\n width: rect.width,\r\n });\r\n };\r\n\r\n updateDropdownPosition();\r\n window.addEventListener(\"resize\", updateDropdownPosition);\r\n window.addEventListener(\"scroll\", updateDropdownPosition, true);\r\n\r\n return () => {\r\n window.removeEventListener(\"resize\", updateDropdownPosition);\r\n window.removeEventListener(\"scroll\", updateDropdownPosition, true);\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: any) => {\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 as string[]).includes(\r\n normalize(optionValue),\r\n );\r\n\r\n let newValues: any[];\r\n if (exists) {\r\n newValues = (Array.isArray(value) ? value : []).filter(\r\n (v) => normalize(v) !== normalize(optionValue),\r\n );\r\n } else {\r\n newValues = [...(Array.isArray(value) ? value : []), finalValue];\r\n }\r\n\r\n onChange?.(newValues);\r\n } else {\r\n onChange?.(finalValue);\r\n setOpen(false);\r\n }\r\n\r\n setSearchTerm(\"\");\r\n };\r\n\r\n const selectedLabels = multiple\r\n ? normalizedOptions\r\n .filter((opt) => isSelected(opt.value))\r\n .map((opt) => opt.label)\r\n .join(\", \")\r\n : normalizedOptions.find((opt) => isSelected(opt.value))?.label;\r\n\r\n useEffect(() => {\r\n if (initialVal || initialVal === false) {\r\n setTimeout(() => {\r\n onChange?.(initialVal);\r\n }, 100);\r\n }\r\n }, []);\r\n\r\n return (\r\n <div\r\n key={name}\r\n className={joinClasses(\r\n crudClasses.field.wrapper,\r\n parentClass || \"col-span-12\",\r\n )}\r\n >\r\n <InputLabel label={label} required={required} />\r\n\r\n <div\r\n className={joinClasses(crudClasses.field.input, \"relative\", className)}\r\n ref={dropdownRef}\r\n >\r\n <select\r\n name=\"hidden_select_for_validation\"\r\n value={\r\n multiple\r\n ? selectedLabels\r\n ? selectedLabels.split(\", \")\r\n : []\r\n : selectedLabels || \"\"\r\n }\r\n required={required}\r\n multiple={multiple}\r\n id={`field-${name}`}\r\n className=\"absolute opacity-0 right-1/2 top-[80%] -translate-x-1/2 -translate-y-1/2 pointer-events-none h-[10px]\"\r\n onChange={() => {}}\r\n >\r\n {multiple ? (\r\n selectedLabels?.split(\", \").map((label) => (\r\n <option key={label} value={label}>\r\n {label}\r\n </option>\r\n ))\r\n ) : (\r\n <option hidden value={selectedLabels}>\r\n {selectedLabels}\r\n </option>\r\n )}\r\n </select>\r\n <button\r\n type=\"button\"\r\n onClick={() => !disabled && setOpen(!open)}\r\n disabled={disabled}\r\n className={`w-full h-10 px-3 border border-gray-300 dark:border-gray-600 rounded-md text-left text-sm flex items-center justify-between \r\n ${\r\n !selectedLabels\r\n ? \"text-gray-500 dark:text-gray-400\"\r\n : \"dark:text-white\"\r\n } \r\n ${disabled ? \"opacity-50 cursor-not-allowed\" : \"dark:bg-gray-700\"}\r\n ${errorMessage ? \"border-red-500\" : \"\"}`}\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 dropdownPortalTarget &&\r\n createPortal(\r\n <div\r\n ref={optionsPanelRef}\r\n className=\"fixed z-50 border rounded-md bg-white dark:bg-gray-700 shadow-lg\"\r\n style={{\r\n top: dropdownPosition.top,\r\n left: dropdownPosition.left,\r\n width: dropdownPosition.width,\r\n transform: showAboveState ? \"translateY(-100%)\" : undefined,\r\n }}\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 <div className=\"flex gap-2 items-center\">\r\n {countriesList && option?.code && (\r\n <img\r\n src={`https://flagcdn.com/w20/${option?.code.toLowerCase()}.png`}\r\n alt={option.code}\r\n className=\"w-5 h-3 object-cover\"\r\n />\r\n )}\r\n <span>{option.label}</span>\r\n </div>\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 dropdownPortalTarget,\r\n )}\r\n </div>\r\n {errorMessage && (\r\n <span\r\n className={joinClasses(\r\n crudClasses.field.error,\r\n \"text-red-500 text-xs mt-1\",\r\n )}\r\n >\r\n {errorMessage}\r\n </span>\r\n )}\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\nimport { crudClasses, joinClasses } from \"../../../lib/crudClasses\";\r\n\r\ninterface SwitchProps {\r\n label?: React.ReactNode;\r\n required?: boolean;\r\n parentClass?: string;\r\n className?: string;\r\n value: boolean;\r\n onChange: (checked: boolean) => void;\r\n disabled?: boolean;\r\n name: string;\r\n errorMessage?: string;\r\n}\r\n\r\nconst Switch = React.forwardRef<HTMLInputElement, SwitchProps>(\r\n (\r\n {\r\n label,\r\n required,\r\n parentClass = \"col-span-12\",\r\n className = \"\",\r\n value = false,\r\n onChange,\r\n disabled = false,\r\n errorMessage = \"\",\r\n name,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n return (\r\n <div\r\n className={joinClasses(\r\n crudClasses.field.wrapper,\r\n \"flex justify-between\",\r\n parentClass,\r\n )}\r\n >\r\n {label && <InputLabel label={label} required={required} />}\r\n\r\n <label className=\"relative inline-flex items-center cursor-pointer\">\r\n <input\r\n type=\"checkbox\"\r\n ref={ref}\r\n id={`field-${name}`}\r\n className={joinClasses(crudClasses.field.input, \"sr-only peer\")}\r\n checked={value}\r\n onChange={(e) => onChange?.(e.target.checked)}\r\n disabled={disabled}\r\n {...props}\r\n />\r\n\r\n <div\r\n className={`\r\n w-11 h-6 bg-gray-200 peer-focus:outline-none\r\n rounded-full peer dark:bg-gray-700\r\n peer-checked:bg-primary-600\r\n peer-disabled:opacity-50 peer-disabled:cursor-not-allowed\r\n transition-colors duration-200\r\n ${errorMessage ? \"border-red-500\" : \"\"}\r\n ${className}\r\n `}\r\n ></div>\r\n\r\n <div\r\n className=\"\r\n absolute left-1 top-1\r\n w-4 h-4 bg-white rounded-full\r\n transition-transform duration-200\r\n peer-checked:translate-x-5\r\n \"\r\n ></div>\r\n </label>\r\n {errorMessage && (\r\n <span\r\n className={joinClasses(\r\n crudClasses.field.error,\r\n \"text-red-500 text-xs mt-1\",\r\n )}\r\n >\r\n {errorMessage}\r\n </span>\r\n )}\r\n </div>\r\n );\r\n },\r\n);\r\n\r\nSwitch.displayName = \"Switch\";\r\n\r\nexport { Switch };\r\n","import React, { useState, useEffect, useRef } from \"react\";\r\nimport { countries, CountryInterface } from \"../../../data/countries\";\r\nimport { ChevronDown, Search } from \"lucide-react\";\r\nimport { createPortal } from \"react-dom\";\r\nimport InputLabel from \"./InputLabel\";\r\nimport { crudClasses, joinClasses } from \"../../../lib/crudClasses\";\r\n\r\ninterface PhoneInputProps {\r\n label?: string;\r\n value: string;\r\n name: string;\r\n parentClass?: string;\r\n onChange: (value: string) => void;\r\n disabled?: boolean;\r\n required?: boolean;\r\n placeholder?: string;\r\n search?: boolean;\r\n countriesList?: boolean;\r\n defaultCountry?: string;\r\n errorMessage?: string;\r\n}\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 errorMessage = \"\",\r\n}: PhoneInputProps) {\r\n const find_country_with_code = (countryCode: string) => {\r\n return (countries as CountryInterface[]).find(\r\n (obj) => obj.code == countryCode,\r\n );\r\n };\r\n\r\n const [selectedCountry, setSelectedCountry] = useState<CountryInterface>(\r\n find_country_with_code(defaultCountry) ||\r\n (countries as CountryInterface[])[0],\r\n );\r\n const [fullNumber, setFullNumber] = useState(\"\");\r\n const [localValue, setLocalValue] = useState(\"\");\r\n const [open, setOpen] = useState(false);\r\n const [searchTerm, setSearchTerm] = useState(\"\");\r\n const dropdownRef = useRef<HTMLDivElement | null>(null);\r\n const optionsPanelRef = useRef<HTMLDivElement | null>(null);\r\n const [dropdownPosition, setDropdownPosition] = useState({\r\n top: 0,\r\n left: 0,\r\n width: 0,\r\n });\r\n\r\n const dropdownPortalTarget =\r\n typeof document !== \"undefined\"\r\n ? (dropdownRef.current?.closest(\".racm-root\") as HTMLElement | null) ||\r\n document.body\r\n : null;\r\n\r\n // Apply mask to phone number\r\n const applyMask = (digits: string, mask: string): string => {\r\n let result = \"\";\r\n let digitIndex = 0;\r\n\r\n for (let i = 0; i < mask.length && digitIndex < digits.length; i++) {\r\n if (mask[i] === \"#\") {\r\n result += digits[digitIndex];\r\n digitIndex++;\r\n } else {\r\n result += mask[i];\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n // Handle input change\r\n const handleNumberChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const rawValue = e.target.value;\r\n const digits = rawValue.replace(/\\D/g, \"\");\r\n\r\n if (countriesList && selectedCountry?.mask) {\r\n // Apply mask\r\n const maskedValue = applyMask(digits, selectedCountry.mask);\r\n setLocalValue(maskedValue);\r\n onChange?.(\"+\" + selectedCountry.phone + \" \" + maskedValue);\r\n\r\n // Update parent with unmasked value\r\n const unmaskedValue = maskedValue.replace(/\\D/g, \"\");\r\n setFullNumber(unmaskedValue);\r\n } else {\r\n // No mask, just update with digits\r\n setLocalValue(digits);\r\n setFullNumber(digits);\r\n if (selectedCountry && onChange) {\r\n onChange(\"+\" + selectedCountry.phone + \" \" + digits);\r\n } else {\r\n onChange?.(digits);\r\n }\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (typeof value === \"string\" && value.startsWith(\"+\")) {\r\n const match = (countries as CountryInterface[])\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 let rawValue = value.replace(\"+\" + match.phone, \"\").replaceAll(\" \", \"\");\r\n setFullNumber(rawValue);\r\n setLocalValue(applyMask(rawValue, match.mask));\r\n return;\r\n }\r\n }\r\n setFullNumber(value || \"\");\r\n setLocalValue(value || \"\");\r\n }, []);\r\n\r\n const handleCountrySelect = (country: CountryInterface) => {\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 useEffect(() => {\r\n const handleClickOutside = (e: MouseEvent) => {\r\n if (\r\n dropdownRef.current &&\r\n !dropdownRef.current.contains(e.target as Node) &&\r\n !optionsPanelRef.current?.contains(e.target as Node)\r\n )\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 useEffect(() => {\r\n if (!open || !dropdownRef.current) return;\r\n\r\n const updateDropdownPosition = () => {\r\n if (!dropdownRef.current) return;\r\n\r\n const rect = dropdownRef.current.getBoundingClientRect();\r\n setDropdownPosition({\r\n top: rect.bottom + 4,\r\n left: rect.left,\r\n width: rect.width,\r\n });\r\n };\r\n\r\n updateDropdownPosition();\r\n window.addEventListener(\"resize\", updateDropdownPosition);\r\n window.addEventListener(\"scroll\", updateDropdownPosition, true);\r\n\r\n return () => {\r\n window.removeEventListener(\"resize\", updateDropdownPosition);\r\n window.removeEventListener(\"scroll\", updateDropdownPosition, true);\r\n };\r\n }, [open]);\r\n\r\n const filteredCountries = (countries as CountryInterface[]).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: React.ChangeEvent<HTMLInputElement>) => {\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\r\n key={name}\r\n className={joinClasses(\r\n crudClasses.field.wrapper,\r\n parentClass || \"col-span-12\",\r\n )}\r\n >\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\r\n key={name}\r\n className={joinClasses(\r\n crudClasses.field.wrapper,\r\n parentClass || \"col-span-12\",\r\n )}\r\n >\r\n <InputLabel label={label} required={required} />\r\n <div className=\"relative \" ref={dropdownRef}>\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 ${errorMessage ? \"border-red-500\" : \"\"}`}\r\n >\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 {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 <input\r\n type=\"tel\"\r\n value={localValue}\r\n onChange={handleNumberChange}\r\n required={required}\r\n id={`field-${name}`}\r\n disabled={disabled || !selectedCountry}\r\n placeholder={\r\n !selectedCountry\r\n ? \"Select a country\"\r\n : placeholder || \"Enter phone number\"\r\n }\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 // pattern={selectedCountry?.pattern}\r\n />\r\n\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 onChange={() => {}}\r\n />\r\n </div>\r\n\r\n {open &&\r\n dropdownPortalTarget &&\r\n createPortal(\r\n <div\r\n ref={optionsPanelRef}\r\n className=\"fixed 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 style={{\r\n top: dropdownPosition.top,\r\n left: dropdownPosition.left,\r\n width: dropdownPosition.width,\r\n }}\r\n >\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 dropdownPortalTarget,\r\n )}\r\n </div>\r\n {errorMessage && (\r\n <span\r\n className={joinClasses(\r\n crudClasses.field.error,\r\n \"text-red-500 text-xs mt-1\",\r\n )}\r\n >\r\n {errorMessage}\r\n </span>\r\n )}\r\n </div>\r\n </>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport InputLabel from \"./InputLabel\";\r\nimport { crudClasses, joinClasses } from \"../../../lib/crudClasses\";\r\n\r\ninterface TextAreaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\r\n label?: React.ReactNode;\r\n required?: boolean;\r\n parentClass?: string;\r\n className?: string;\r\n errorMessage?: string;\r\n name: string;\r\n}\r\n\r\nconst TextArea = React.forwardRef<HTMLTextAreaElement, TextAreaProps>(\r\n (\r\n { className = \"\", label, required, errorMessage = \"\", name, ...props },\r\n ref,\r\n ) => {\r\n const combinedClassName = joinClasses(\r\n crudClasses.field.input,\r\n \"placeholder-gray-400 dark:placeholder-gray-400\",\r\n errorMessage ? \"border-red-500\" : \"\",\r\n className,\r\n );\r\n\r\n return (\r\n <>\r\n <div\r\n key={name}\r\n className={joinClasses(\r\n crudClasses.field.wrapper,\r\n props.parentClass || \"col-span-12\",\r\n )}\r\n >\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 id={`field-${name}`}\r\n required={required}\r\n {...props}\r\n />\r\n {errorMessage && (\r\n <span\r\n className={joinClasses(\r\n crudClasses.field.error,\r\n \"text-red-500 text-xs mt-1\",\r\n )}\r\n >\r\n {errorMessage}\r\n </span>\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","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","/**\n * Copyright 2004-present Facebook. All Rights Reserved.\n *\n * @providesModule UserAgent_DEPRECATED\n */\n\n/**\n * Provides entirely client-side User Agent and OS detection. You should prefer\n * the non-deprecated UserAgent module when possible, which exposes our\n * authoritative server-side PHP-based detection to the client.\n *\n * Usage is straightforward:\n *\n * if (UserAgent_DEPRECATED.ie()) {\n * // IE\n * }\n *\n * You can also do version checks:\n *\n * if (UserAgent_DEPRECATED.ie() >= 7) {\n * // IE7 or better\n * }\n *\n * The browser functions will return NaN if the browser does not match, so\n * you can also do version compares the other way:\n *\n * if (UserAgent_DEPRECATED.ie() < 7) {\n * // IE6 or worse\n * }\n *\n * Note that the version is a float and may include a minor version number,\n * so you should always use range operators to perform comparisons, not\n * strict equality.\n *\n * **Note:** You should **strongly** prefer capability detection to browser\n * version detection where it's reasonable:\n *\n * http://www.quirksmode.org/js/support.html\n *\n * Further, we have a large number of mature wrapper functions and classes\n * which abstract away many browser irregularities. Check the documentation,\n * grep for things, or ask on javascript@lists.facebook.com before writing yet\n * another copy of \"event || window.event\".\n *\n */\n\nvar _populated = false;\n\n// Browsers\nvar _ie, _firefox, _opera, _webkit, _chrome;\n\n// Actual IE browser for compatibility mode\nvar _ie_real_version;\n\n// Platforms\nvar _osx, _windows, _linux, _android;\n\n// Architectures\nvar _win64;\n\n// Devices\nvar _iphone, _ipad, _native;\n\nvar _mobile;\n\nfunction _populate() {\n if (_populated) {\n return;\n }\n\n _populated = true;\n\n // To work around buggy JS libraries that can't handle multi-digit\n // version numbers, Opera 10's user agent string claims it's Opera\n // 9, then later includes a Version/X.Y field:\n //\n // Opera/9.80 (foo) Presto/2.2.15 Version/10.10\n var uas = navigator.userAgent;\n var agent = /(?:MSIE.(\\d+\\.\\d+))|(?:(?:Firefox|GranParadiso|Iceweasel).(\\d+\\.\\d+))|(?:Opera(?:.+Version.|.)(\\d+\\.\\d+))|(?:AppleWebKit.(\\d+(?:\\.\\d+)?))|(?:Trident\\/\\d+\\.\\d+.*rv:(\\d+\\.\\d+))/.exec(uas);\n var os = /(Mac OS X)|(Windows)|(Linux)/.exec(uas);\n\n _iphone = /\\b(iPhone|iP[ao]d)/.exec(uas);\n _ipad = /\\b(iP[ao]d)/.exec(uas);\n _android = /Android/i.exec(uas);\n _native = /FBAN\\/\\w+;/i.exec(uas);\n _mobile = /Mobile/i.exec(uas);\n\n // Note that the IE team blog would have you believe you should be checking\n // for 'Win64; x64'. But MSDN then reveals that you can actually be coming\n // from either x64 or ia64; so ultimately, you should just check for Win64\n // as in indicator of whether you're in 64-bit IE. 32-bit IE on 64-bit\n // Windows will send 'WOW64' instead.\n _win64 = !!(/Win64/.exec(uas));\n\n if (agent) {\n _ie = agent[1] ? parseFloat(agent[1]) : (\n agent[5] ? parseFloat(agent[5]) : NaN);\n // IE compatibility mode\n if (_ie && document && document.documentMode) {\n _ie = document.documentMode;\n }\n // grab the \"true\" ie version from the trident token if available\n var trident = /(?:Trident\\/(\\d+.\\d+))/.exec(uas);\n _ie_real_version = trident ? parseFloat(trident[1]) + 4 : _ie;\n\n _firefox = agent[2] ? parseFloat(agent[2]) : NaN;\n _opera = agent[3] ? parseFloat(agent[3]) : NaN;\n _webkit = agent[4] ? parseFloat(agent[4]) : NaN;\n if (_webkit) {\n // We do not add the regexp to the above test, because it will always\n // match 'safari' only since 'AppleWebKit' appears before 'Chrome' in\n // the userAgent string.\n agent = /(?:Chrome\\/(\\d+\\.\\d+))/.exec(uas);\n _chrome = agent && agent[1] ? parseFloat(agent[1]) : NaN;\n } else {\n _chrome = NaN;\n }\n } else {\n _ie = _firefox = _opera = _chrome = _webkit = NaN;\n }\n\n if (os) {\n if (os[1]) {\n // Detect OS X version. If no version number matches, set _osx to true.\n // Version examples: 10, 10_6_1, 10.7\n // Parses version number as a float, taking only first two sets of\n // digits. If only one set of digits is found, returns just the major\n // version number.\n var ver = /(?:Mac OS X (\\d+(?:[._]\\d+)?))/.exec(uas);\n\n _osx = ver ? parseFloat(ver[1].replace('_', '.')) : true;\n } else {\n _osx = false;\n }\n _windows = !!os[2];\n _linux = !!os[3];\n } else {\n _osx = _windows = _linux = false;\n }\n}\n\nvar UserAgent_DEPRECATED = {\n\n /**\n * Check if the UA is Internet Explorer.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n ie: function() {\n return _populate() || _ie;\n },\n\n /**\n * Check if we're in Internet Explorer compatibility mode.\n *\n * @return bool true if in compatibility mode, false if\n * not compatibility mode or not ie\n */\n ieCompatibilityMode: function() {\n return _populate() || (_ie_real_version > _ie);\n },\n\n\n /**\n * Whether the browser is 64-bit IE. Really, this is kind of weak sauce; we\n * only need this because Skype can't handle 64-bit IE yet. We need to remove\n * this when we don't need it -- tracked by #601957.\n */\n ie64: function() {\n return UserAgent_DEPRECATED.ie() && _win64;\n },\n\n /**\n * Check if the UA is Firefox.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n firefox: function() {\n return _populate() || _firefox;\n },\n\n\n /**\n * Check if the UA is Opera.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n opera: function() {\n return _populate() || _opera;\n },\n\n\n /**\n * Check if the UA is WebKit.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n webkit: function() {\n return _populate() || _webkit;\n },\n\n /**\n * For Push\n * WILL BE REMOVED VERY SOON. Use UserAgent_DEPRECATED.webkit\n */\n safari: function() {\n return UserAgent_DEPRECATED.webkit();\n },\n\n /**\n * Check if the UA is a Chrome browser.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n chrome : function() {\n return _populate() || _chrome;\n },\n\n\n /**\n * Check if the user is running Windows.\n *\n * @return bool `true' if the user's OS is Windows.\n */\n windows: function() {\n return _populate() || _windows;\n },\n\n\n /**\n * Check if the user is running Mac OS X.\n *\n * @return float|bool Returns a float if a version number is detected,\n * otherwise true/false.\n */\n osx: function() {\n return _populate() || _osx;\n },\n\n /**\n * Check if the user is running Linux.\n *\n * @return bool `true' if the user's OS is some flavor of Linux.\n */\n linux: function() {\n return _populate() || _linux;\n },\n\n /**\n * Check if the user is running on an iPhone or iPod platform.\n *\n * @return bool `true' if the user is running some flavor of the\n * iPhone OS.\n */\n iphone: function() {\n return _populate() || _iphone;\n },\n\n mobile: function() {\n return _populate() || (_iphone || _ipad || _android || _mobile);\n },\n\n nativeApp: function() {\n // webviews inside of the native apps\n return _populate() || _native;\n },\n\n android: function() {\n return _populate() || _android;\n },\n\n ipad: function() {\n return _populate() || _ipad;\n }\n};\n\nmodule.exports = UserAgent_DEPRECATED;\n","/**\n * Copyright (c) 2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ExecutionEnvironment\n */\n\n/*jslint evil: true */\n\n'use strict';\n\nvar canUseDOM = !!(\n typeof window !== 'undefined' &&\n window.document &&\n window.document.createElement\n);\n\n/**\n * Simple, lightweight module assisting with the detection and context of\n * Worker. Helps avoid circular dependencies and allows code to reason about\n * whether or not they are in a Worker, even if they never include the main\n * `ReactWorker` dependency.\n */\nvar ExecutionEnvironment = {\n\n canUseDOM: canUseDOM,\n\n canUseWorkers: typeof Worker !== 'undefined',\n\n canUseEventListeners:\n canUseDOM && !!(window.addEventListener || window.attachEvent),\n\n canUseViewport: canUseDOM && !!window.screen,\n\n isInWorker: !canUseDOM // For now, this is true - might change in the future.\n\n};\n\nmodule.exports = ExecutionEnvironment;\n","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule isEventSupported\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar useHasFeature;\nif (ExecutionEnvironment.canUseDOM) {\n useHasFeature =\n document.implementation &&\n document.implementation.hasFeature &&\n // always returns true in newer browsers as per the standard.\n // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n document.implementation.hasFeature('', '') !== true;\n}\n\n/**\n * Checks if an event is supported in the current execution environment.\n *\n * NOTE: This will not work correctly for non-generic events such as `change`,\n * `reset`, `load`, `error`, and `select`.\n *\n * Borrows from Modernizr.\n *\n * @param {string} eventNameSuffix Event name, e.g. \"click\".\n * @param {?boolean} capture Check if the capture phase is supported.\n * @return {boolean} True if the event is supported.\n * @internal\n * @license Modernizr 3.0.0pre (Custom Build) | MIT\n */\nfunction isEventSupported(eventNameSuffix, capture) {\n if (!ExecutionEnvironment.canUseDOM ||\n capture && !('addEventListener' in document)) {\n return false;\n }\n\n var eventName = 'on' + eventNameSuffix;\n var isSupported = eventName in document;\n\n if (!isSupported) {\n var element = document.createElement('div');\n element.setAttribute(eventName, 'return;');\n isSupported = typeof element[eventName] === 'function';\n }\n\n if (!isSupported && useHasFeature && eventNameSuffix === 'wheel') {\n // This is the only way to test support for the `wheel` event in IE9+.\n isSupported = document.implementation.hasFeature('Events.wheel', '3.0');\n }\n\n return isSupported;\n}\n\nmodule.exports = isEventSupported;\n","/**\n * Copyright (c) 2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule normalizeWheel\n * @typechecks\n */\n\n'use strict';\n\nvar UserAgent_DEPRECATED = require('./UserAgent_DEPRECATED');\n\nvar isEventSupported = require('./isEventSupported');\n\n\n// Reasonable defaults\nvar PIXEL_STEP = 10;\nvar LINE_HEIGHT = 40;\nvar PAGE_HEIGHT = 800;\n\n/**\n * Mouse wheel (and 2-finger trackpad) support on the web sucks. It is\n * complicated, thus this doc is long and (hopefully) detailed enough to answer\n * your questions.\n *\n * If you need to react to the mouse wheel in a predictable way, this code is\n * like your bestest friend. * hugs *\n *\n * As of today, there are 4 DOM event types you can listen to:\n *\n * 'wheel' -- Chrome(31+), FF(17+), IE(9+)\n * 'mousewheel' -- Chrome, IE(6+), Opera, Safari\n * 'MozMousePixelScroll' -- FF(3.5 only!) (2010-2013) -- don't bother!\n * 'DOMMouseScroll' -- FF(0.9.7+) since 2003\n *\n * So what to do? The is the best:\n *\n * normalizeWheel.getEventType();\n *\n * In your event callback, use this code to get sane interpretation of the\n * deltas. This code will return an object with properties:\n *\n * spinX -- normalized spin speed (use for zoom) - x plane\n * spinY -- \" - y plane\n * pixelX -- normalized distance (to pixels) - x plane\n * pixelY -- \" - y plane\n *\n * Wheel values are provided by the browser assuming you are using the wheel to\n * scroll a web page by a number of lines or pixels (or pages). Values can vary\n * significantly on different platforms and browsers, forgetting that you can\n * scroll at different speeds. Some devices (like trackpads) emit more events\n * at smaller increments with fine granularity, and some emit massive jumps with\n * linear speed or acceleration.\n *\n * This code does its best to normalize the deltas for you:\n *\n * - spin is trying to normalize how far the wheel was spun (or trackpad\n * dragged). This is super useful for zoom support where you want to\n * throw away the chunky scroll steps on the PC and make those equal to\n * the slow and smooth tiny steps on the Mac. Key data: This code tries to\n * resolve a single slow step on a wheel to 1.\n *\n * - pixel is normalizing the desired scroll delta in pixel units. You'll\n * get the crazy differences between browsers, but at least it'll be in\n * pixels!\n *\n * - positive value indicates scrolling DOWN/RIGHT, negative UP/LEFT. This\n * should translate to positive value zooming IN, negative zooming OUT.\n * This matches the newer 'wheel' event.\n *\n * Why are there spinX, spinY (or pixels)?\n *\n * - spinX is a 2-finger side drag on the trackpad, and a shift + wheel turn\n * with a mouse. It results in side-scrolling in the browser by default.\n *\n * - spinY is what you expect -- it's the classic axis of a mouse wheel.\n *\n * - I dropped spinZ/pixelZ. It is supported by the DOM 3 'wheel' event and\n * probably is by browsers in conjunction with fancy 3D controllers .. but\n * you know.\n *\n * Implementation info:\n *\n * Examples of 'wheel' event if you scroll slowly (down) by one step with an\n * average mouse:\n *\n * OS X + Chrome (mouse) - 4 pixel delta (wheelDelta -120)\n * OS X + Safari (mouse) - N/A pixel delta (wheelDelta -12)\n * OS X + Firefox (mouse) - 0.1 line delta (wheelDelta N/A)\n * Win8 + Chrome (mouse) - 100 pixel delta (wheelDelta -120)\n * Win8 + Firefox (mouse) - 3 line delta (wheelDelta -120)\n *\n * On the trackpad:\n *\n * OS X + Chrome (trackpad) - 2 pixel delta (wheelDelta -6)\n * OS X + Firefox (trackpad) - 1 pixel delta (wheelDelta N/A)\n *\n * On other/older browsers.. it's more complicated as there can be multiple and\n * also missing delta values.\n *\n * The 'wheel' event is more standard:\n *\n * http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents\n *\n * The basics is that it includes a unit, deltaMode (pixels, lines, pages), and\n * deltaX, deltaY and deltaZ. Some browsers provide other values to maintain\n * backward compatibility with older events. Those other values help us\n * better normalize spin speed. Example of what the browsers provide:\n *\n * | event.wheelDelta | event.detail\n * ------------------+------------------+--------------\n * Safari v5/OS X | -120 | 0\n * Safari v5/Win7 | -120 | 0\n * Chrome v17/OS X | -120 | 0\n * Chrome v17/Win7 | -120 | 0\n * IE9/Win7 | -120 | undefined\n * Firefox v4/OS X | undefined | 1\n * Firefox v4/Win7 | undefined | 3\n *\n */\nfunction normalizeWheel(/*object*/ event) /*object*/ {\n var sX = 0, sY = 0, // spinX, spinY\n pX = 0, pY = 0; // pixelX, pixelY\n\n // Legacy\n if ('detail' in event) { sY = event.detail; }\n if ('wheelDelta' in event) { sY = -event.wheelDelta / 120; }\n if ('wheelDeltaY' in event) { sY = -event.wheelDeltaY / 120; }\n if ('wheelDeltaX' in event) { sX = -event.wheelDeltaX / 120; }\n\n // side scrolling on FF with DOMMouseScroll\n if ( 'axis' in event && event.axis === event.HORIZONTAL_AXIS ) {\n sX = sY;\n sY = 0;\n }\n\n pX = sX * PIXEL_STEP;\n pY = sY * PIXEL_STEP;\n\n if ('deltaY' in event) { pY = event.deltaY; }\n if ('deltaX' in event) { pX = event.deltaX; }\n\n if ((pX || pY) && event.deltaMode) {\n if (event.deltaMode == 1) { // delta in LINE units\n pX *= LINE_HEIGHT;\n pY *= LINE_HEIGHT;\n } else { // delta in PAGE units\n pX *= PAGE_HEIGHT;\n pY *= PAGE_HEIGHT;\n }\n }\n\n // Fall-back if spin cannot be determined\n if (pX && !sX) { sX = (pX < 1) ? -1 : 1; }\n if (pY && !sY) { sY = (pY < 1) ? -1 : 1; }\n\n return { spinX : sX,\n spinY : sY,\n pixelX : pX,\n pixelY : pY };\n}\n\n\n/**\n * The best combination if you prefer spinX + spinY normalization. It favors\n * the older DOMMouseScroll for Firefox, as FF does not include wheelDelta with\n * 'wheel' event, making spin speed determination impossible.\n */\nnormalizeWheel.getEventType = function() /*string*/ {\n return (UserAgent_DEPRECATED.firefox())\n ? 'DOMMouseScroll'\n : (isEventSupported('wheel'))\n ? 'wheel'\n : 'mousewheel';\n};\n\nmodule.exports = normalizeWheel;\n","module.exports = require('./src/normalizeWheel.js');\n","import { __assign, __extends } from 'tslib';\nimport * as React from 'react';\nimport normalizeWheel from 'normalize-wheel';\n\n/**\r\n * Compute the dimension of the crop area based on media size,\r\n * aspect ratio and optionally rotation\r\n */\nfunction getCropSize(mediaWidth, mediaHeight, containerWidth, containerHeight, aspect, rotation) {\n if (rotation === void 0) {\n rotation = 0;\n }\n var _a = rotateSize(mediaWidth, mediaHeight, rotation),\n width = _a.width,\n height = _a.height;\n var fittingWidth = Math.min(width, containerWidth);\n var fittingHeight = Math.min(height, containerHeight);\n if (fittingWidth > fittingHeight * aspect) {\n return {\n width: fittingHeight * aspect,\n height: fittingHeight\n };\n }\n return {\n width: fittingWidth,\n height: fittingWidth / aspect\n };\n}\n/**\r\n * Compute media zoom.\r\n * We fit the media into the container with \"max-width: 100%; max-height: 100%;\"\r\n */\nfunction getMediaZoom(mediaSize) {\n // Take the axis with more pixels to improve accuracy\n return mediaSize.width > mediaSize.height ? mediaSize.width / mediaSize.naturalWidth : mediaSize.height / mediaSize.naturalHeight;\n}\n/**\r\n * Ensure a new media position stays in the crop area.\r\n */\nfunction restrictPosition(position, mediaSize, cropSize, zoom, rotation) {\n if (rotation === void 0) {\n rotation = 0;\n }\n var _a = rotateSize(mediaSize.width, mediaSize.height, rotation),\n width = _a.width,\n height = _a.height;\n return {\n x: restrictPositionCoord(position.x, width, cropSize.width, zoom),\n y: restrictPositionCoord(position.y, height, cropSize.height, zoom)\n };\n}\nfunction restrictPositionCoord(position, mediaSize, cropSize, zoom) {\n var maxPosition = mediaSize * zoom / 2 - cropSize / 2;\n return clamp(position, -maxPosition, maxPosition);\n}\nfunction getDistanceBetweenPoints(pointA, pointB) {\n return Math.sqrt(Math.pow(pointA.y - pointB.y, 2) + Math.pow(pointA.x - pointB.x, 2));\n}\nfunction getRotationBetweenPoints(pointA, pointB) {\n return Math.atan2(pointB.y - pointA.y, pointB.x - pointA.x) * 180 / Math.PI;\n}\n/**\r\n * Compute the output cropped area of the media in percentages and pixels.\r\n * x/y are the top-left coordinates on the src media\r\n */\nfunction computeCroppedArea(crop, mediaSize, cropSize, aspect, zoom, rotation, restrictPosition) {\n if (rotation === void 0) {\n rotation = 0;\n }\n if (restrictPosition === void 0) {\n restrictPosition = true;\n }\n // if the media is rotated by the user, we cannot limit the position anymore\n // as it might need to be negative.\n var limitAreaFn = restrictPosition ? limitArea : noOp;\n var mediaBBoxSize = rotateSize(mediaSize.width, mediaSize.height, rotation);\n var mediaNaturalBBoxSize = rotateSize(mediaSize.naturalWidth, mediaSize.naturalHeight, rotation);\n // calculate the crop area in percentages\n // in the rotated space\n var croppedAreaPercentages = {\n x: limitAreaFn(100, ((mediaBBoxSize.width - cropSize.width / zoom) / 2 - crop.x / zoom) / mediaBBoxSize.width * 100),\n y: limitAreaFn(100, ((mediaBBoxSize.height - cropSize.height / zoom) / 2 - crop.y / zoom) / mediaBBoxSize.height * 100),\n width: limitAreaFn(100, cropSize.width / mediaBBoxSize.width * 100 / zoom),\n height: limitAreaFn(100, cropSize.height / mediaBBoxSize.height * 100 / zoom)\n };\n // we compute the pixels size naively\n var widthInPixels = Math.round(limitAreaFn(mediaNaturalBBoxSize.width, croppedAreaPercentages.width * mediaNaturalBBoxSize.width / 100));\n var heightInPixels = Math.round(limitAreaFn(mediaNaturalBBoxSize.height, croppedAreaPercentages.height * mediaNaturalBBoxSize.height / 100));\n var isImgWiderThanHigh = mediaNaturalBBoxSize.width >= mediaNaturalBBoxSize.height * aspect;\n // then we ensure the width and height exactly match the aspect (to avoid rounding approximations)\n // if the media is wider than high, when zoom is 0, the crop height will be equals to image height\n // thus we want to compute the width from the height and aspect for accuracy.\n // Otherwise, we compute the height from width and aspect.\n var sizePixels = isImgWiderThanHigh ? {\n width: Math.round(heightInPixels * aspect),\n height: heightInPixels\n } : {\n width: widthInPixels,\n height: Math.round(widthInPixels / aspect)\n };\n var croppedAreaPixels = __assign(__assign({}, sizePixels), {\n x: Math.round(limitAreaFn(mediaNaturalBBoxSize.width - sizePixels.width, croppedAreaPercentages.x * mediaNaturalBBoxSize.width / 100)),\n y: Math.round(limitAreaFn(mediaNaturalBBoxSize.height - sizePixels.height, croppedAreaPercentages.y * mediaNaturalBBoxSize.height / 100))\n });\n return {\n croppedAreaPercentages: croppedAreaPercentages,\n croppedAreaPixels: croppedAreaPixels\n };\n}\n/**\r\n * Ensure the returned value is between 0 and max\r\n */\nfunction limitArea(max, value) {\n return Math.min(max, Math.max(0, value));\n}\nfunction noOp(_max, value) {\n return value;\n}\n/**\r\n * Compute crop and zoom from the croppedAreaPercentages.\r\n */\nfunction getInitialCropFromCroppedAreaPercentages(croppedAreaPercentages, mediaSize, rotation, cropSize, minZoom, maxZoom) {\n var mediaBBoxSize = rotateSize(mediaSize.width, mediaSize.height, rotation);\n // This is the inverse process of computeCroppedArea\n var zoom = clamp(cropSize.width / mediaBBoxSize.width * (100 / croppedAreaPercentages.width), minZoom, maxZoom);\n var crop = {\n x: zoom * mediaBBoxSize.width / 2 - cropSize.width / 2 - mediaBBoxSize.width * zoom * (croppedAreaPercentages.x / 100),\n y: zoom * mediaBBoxSize.height / 2 - cropSize.height / 2 - mediaBBoxSize.height * zoom * (croppedAreaPercentages.y / 100)\n };\n return {\n crop: crop,\n zoom: zoom\n };\n}\n/**\r\n * Compute zoom from the croppedAreaPixels\r\n */\nfunction getZoomFromCroppedAreaPixels(croppedAreaPixels, mediaSize, cropSize) {\n var mediaZoom = getMediaZoom(mediaSize);\n return cropSize.height > cropSize.width ? cropSize.height / (croppedAreaPixels.height * mediaZoom) : cropSize.width / (croppedAreaPixels.width * mediaZoom);\n}\n/**\r\n * Compute crop and zoom from the croppedAreaPixels\r\n */\nfunction getInitialCropFromCroppedAreaPixels(croppedAreaPixels, mediaSize, rotation, cropSize, minZoom, maxZoom) {\n if (rotation === void 0) {\n rotation = 0;\n }\n var mediaNaturalBBoxSize = rotateSize(mediaSize.naturalWidth, mediaSize.naturalHeight, rotation);\n var zoom = clamp(getZoomFromCroppedAreaPixels(croppedAreaPixels, mediaSize, cropSize), minZoom, maxZoom);\n var cropZoom = cropSize.height > cropSize.width ? cropSize.height / croppedAreaPixels.height : cropSize.width / croppedAreaPixels.width;\n var crop = {\n x: ((mediaNaturalBBoxSize.width - croppedAreaPixels.width) / 2 - croppedAreaPixels.x) * cropZoom,\n y: ((mediaNaturalBBoxSize.height - croppedAreaPixels.height) / 2 - croppedAreaPixels.y) * cropZoom\n };\n return {\n crop: crop,\n zoom: zoom\n };\n}\n/**\r\n * Return the point that is the center of point a and b\r\n */\nfunction getCenter(a, b) {\n return {\n x: (b.x + a.x) / 2,\n y: (b.y + a.y) / 2\n };\n}\nfunction getRadianAngle(degreeValue) {\n return degreeValue * Math.PI / 180;\n}\n/**\r\n * Returns the new bounding area of a rotated rectangle.\r\n */\nfunction rotateSize(width, height, rotation) {\n var rotRad = getRadianAngle(rotation);\n return {\n width: Math.abs(Math.cos(rotRad) * width) + Math.abs(Math.sin(rotRad) * height),\n height: Math.abs(Math.sin(rotRad) * width) + Math.abs(Math.cos(rotRad) * height)\n };\n}\n/**\r\n * Clamp value between min and max\r\n */\nfunction clamp(value, min, max) {\n return Math.min(Math.max(value, min), max);\n}\n/**\r\n * Combine multiple class names into a single string.\r\n */\nfunction classNames() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return args.filter(function (value) {\n if (typeof value === 'string' && value.length > 0) {\n return true;\n }\n return false;\n }).join(' ').trim();\n}\n\nvar css_248z = \".reactEasyCrop_Container {\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n overflow: hidden;\\n user-select: none;\\n touch-action: none;\\n cursor: move;\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n}\\n\\n.reactEasyCrop_Image,\\n.reactEasyCrop_Video {\\n will-change: transform; /* this improves performances and prevent painting issues on iOS Chrome */\\n}\\n\\n.reactEasyCrop_Contain {\\n max-width: 100%;\\n max-height: 100%;\\n margin: auto;\\n position: absolute;\\n top: 0;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n}\\n.reactEasyCrop_Cover_Horizontal {\\n width: 100%;\\n height: auto;\\n}\\n.reactEasyCrop_Cover_Vertical {\\n width: auto;\\n height: 100%;\\n}\\n\\n.reactEasyCrop_CropArea {\\n position: absolute;\\n left: 50%;\\n top: 50%;\\n transform: translate(-50%, -50%);\\n border: 1px solid rgba(255, 255, 255, 0.5);\\n box-sizing: border-box;\\n box-shadow: 0 0 0 9999em;\\n color: rgba(0, 0, 0, 0.5);\\n overflow: hidden;\\n}\\n\\n.reactEasyCrop_CropAreaRound {\\n border-radius: 50%;\\n}\\n\\n.reactEasyCrop_CropAreaGrid::before {\\n content: ' ';\\n box-sizing: border-box;\\n position: absolute;\\n border: 1px solid rgba(255, 255, 255, 0.5);\\n top: 0;\\n bottom: 0;\\n left: 33.33%;\\n right: 33.33%;\\n border-top: 0;\\n border-bottom: 0;\\n}\\n\\n.reactEasyCrop_CropAreaGrid::after {\\n content: ' ';\\n box-sizing: border-box;\\n position: absolute;\\n border: 1px solid rgba(255, 255, 255, 0.5);\\n top: 33.33%;\\n bottom: 33.33%;\\n left: 0;\\n right: 0;\\n border-left: 0;\\n border-right: 0;\\n}\\n\";\n\nvar MIN_ZOOM = 1;\nvar MAX_ZOOM = 3;\nvar KEYBOARD_STEP = 1;\nvar Cropper = /** @class */function (_super) {\n __extends(Cropper, _super);\n function Cropper() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.cropperRef = React.createRef();\n _this.imageRef = React.createRef();\n _this.videoRef = React.createRef();\n _this.containerPosition = {\n x: 0,\n y: 0\n };\n _this.containerRef = null;\n _this.styleRef = null;\n _this.containerRect = null;\n _this.mediaSize = {\n width: 0,\n height: 0,\n naturalWidth: 0,\n naturalHeight: 0\n };\n _this.dragStartPosition = {\n x: 0,\n y: 0\n };\n _this.dragStartCrop = {\n x: 0,\n y: 0\n };\n _this.gestureZoomStart = 0;\n _this.gestureRotationStart = 0;\n _this.isTouching = false;\n _this.lastPinchDistance = 0;\n _this.lastPinchRotation = 0;\n _this.rafDragTimeout = null;\n _this.rafPinchTimeout = null;\n _this.wheelTimer = null;\n _this.currentDoc = typeof document !== 'undefined' ? document : null;\n _this.currentWindow = typeof window !== 'undefined' ? window : null;\n _this.resizeObserver = null;\n _this.previousCropSize = null;\n _this.isInitialized = false;\n _this.state = {\n cropSize: null,\n hasWheelJustStarted: false,\n mediaObjectFit: undefined\n };\n _this.initResizeObserver = function () {\n if (typeof window.ResizeObserver === 'undefined' || !_this.containerRef) {\n return;\n }\n var isFirstResize = true;\n _this.resizeObserver = new window.ResizeObserver(function (entries) {\n if (isFirstResize) {\n isFirstResize = false; // observe() is called on mount, we don't want to trigger a recompute on mount\n return;\n }\n _this.computeSizes();\n });\n _this.resizeObserver.observe(_this.containerRef);\n };\n // this is to prevent Safari on iOS >= 10 to zoom the page\n _this.preventZoomSafari = function (e) {\n return e.preventDefault();\n };\n _this.cleanEvents = function () {\n if (!_this.currentDoc) return;\n _this.currentDoc.removeEventListener('mousemove', _this.onMouseMove);\n _this.currentDoc.removeEventListener('mouseup', _this.onDragStopped);\n _this.currentDoc.removeEventListener('touchmove', _this.onTouchMove);\n _this.currentDoc.removeEventListener('touchend', _this.onDragStopped);\n _this.currentDoc.removeEventListener('gesturechange', _this.onGestureChange);\n _this.currentDoc.removeEventListener('gestureend', _this.onGestureEnd);\n _this.currentDoc.removeEventListener('scroll', _this.onScroll);\n };\n _this.clearScrollEvent = function () {\n if (_this.containerRef) _this.containerRef.removeEventListener('wheel', _this.onWheel);\n if (_this.wheelTimer) {\n clearTimeout(_this.wheelTimer);\n }\n };\n _this.onMediaLoad = function () {\n var cropSize = _this.computeSizes();\n if (cropSize) {\n _this.previousCropSize = cropSize;\n _this.emitCropData();\n _this.setInitialCrop(cropSize);\n _this.isInitialized = true;\n }\n if (_this.props.onMediaLoaded) {\n _this.props.onMediaLoaded(_this.mediaSize);\n }\n };\n _this.setInitialCrop = function (cropSize) {\n if (_this.props.initialCroppedAreaPercentages) {\n var _a = getInitialCropFromCroppedAreaPercentages(_this.props.initialCroppedAreaPercentages, _this.mediaSize, _this.props.rotation, cropSize, _this.props.minZoom, _this.props.maxZoom),\n crop = _a.crop,\n zoom = _a.zoom;\n _this.props.onCropChange(crop);\n _this.props.onZoomChange && _this.props.onZoomChange(zoom);\n } else if (_this.props.initialCroppedAreaPixels) {\n var _b = getInitialCropFromCroppedAreaPixels(_this.props.initialCroppedAreaPixels, _this.mediaSize, _this.props.rotation, cropSize, _this.props.minZoom, _this.props.maxZoom),\n crop = _b.crop,\n zoom = _b.zoom;\n _this.props.onCropChange(crop);\n _this.props.onZoomChange && _this.props.onZoomChange(zoom);\n }\n };\n _this.computeSizes = function () {\n var _a, _b, _c, _d, _e, _f;\n var mediaRef = _this.imageRef.current || _this.videoRef.current;\n if (mediaRef && _this.containerRef) {\n _this.containerRect = _this.containerRef.getBoundingClientRect();\n _this.saveContainerPosition();\n var containerAspect = _this.containerRect.width / _this.containerRect.height;\n var naturalWidth = ((_a = _this.imageRef.current) === null || _a === void 0 ? void 0 : _a.naturalWidth) || ((_b = _this.videoRef.current) === null || _b === void 0 ? void 0 : _b.videoWidth) || 0;\n var naturalHeight = ((_c = _this.imageRef.current) === null || _c === void 0 ? void 0 : _c.naturalHeight) || ((_d = _this.videoRef.current) === null || _d === void 0 ? void 0 : _d.videoHeight) || 0;\n var isMediaScaledDown = mediaRef.offsetWidth < naturalWidth || mediaRef.offsetHeight < naturalHeight;\n var mediaAspect = naturalWidth / naturalHeight;\n // We do not rely on the offsetWidth/offsetHeight if the media is scaled down\n // as the values they report are rounded. That will result in precision losses\n // when calculating zoom. We use the fact that the media is positionned relative\n // to the container. That allows us to use the container's dimensions\n // and natural aspect ratio of the media to calculate accurate media size.\n // However, for this to work, the container should not be rotated\n var renderedMediaSize = void 0;\n if (isMediaScaledDown) {\n switch (_this.state.mediaObjectFit) {\n default:\n case 'contain':\n renderedMediaSize = containerAspect > mediaAspect ? {\n width: _this.containerRect.height * mediaAspect,\n height: _this.containerRect.height\n } : {\n width: _this.containerRect.width,\n height: _this.containerRect.width / mediaAspect\n };\n break;\n case 'horizontal-cover':\n renderedMediaSize = {\n width: _this.containerRect.width,\n height: _this.containerRect.width / mediaAspect\n };\n break;\n case 'vertical-cover':\n renderedMediaSize = {\n width: _this.containerRect.height * mediaAspect,\n height: _this.containerRect.height\n };\n break;\n }\n } else {\n renderedMediaSize = {\n width: mediaRef.offsetWidth,\n height: mediaRef.offsetHeight\n };\n }\n _this.mediaSize = __assign(__assign({}, renderedMediaSize), {\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight\n });\n // set media size in the parent\n if (_this.props.setMediaSize) {\n _this.props.setMediaSize(_this.mediaSize);\n }\n var cropSize = _this.props.cropSize ? _this.props.cropSize : getCropSize(_this.mediaSize.width, _this.mediaSize.height, _this.containerRect.width, _this.containerRect.height, _this.props.aspect, _this.props.rotation);\n if (((_e = _this.state.cropSize) === null || _e === void 0 ? void 0 : _e.height) !== cropSize.height || ((_f = _this.state.cropSize) === null || _f === void 0 ? void 0 : _f.width) !== cropSize.width) {\n _this.props.onCropSizeChange && _this.props.onCropSizeChange(cropSize);\n }\n _this.setState({\n cropSize: cropSize\n }, _this.recomputeCropPosition);\n // pass crop size to parent\n if (_this.props.setCropSize) {\n _this.props.setCropSize(cropSize);\n }\n return cropSize;\n }\n };\n _this.saveContainerPosition = function () {\n if (_this.containerRef) {\n var bounds = _this.containerRef.getBoundingClientRect();\n _this.containerPosition = {\n x: bounds.left,\n y: bounds.top\n };\n }\n };\n _this.onMouseDown = function (e) {\n if (!_this.currentDoc) return;\n e.preventDefault();\n _this.currentDoc.addEventListener('mousemove', _this.onMouseMove);\n _this.currentDoc.addEventListener('mouseup', _this.onDragStopped);\n _this.saveContainerPosition();\n _this.onDragStart(Cropper.getMousePoint(e));\n };\n _this.onMouseMove = function (e) {\n return _this.onDrag(Cropper.getMousePoint(e));\n };\n _this.onScroll = function (e) {\n if (!_this.currentDoc) return;\n e.preventDefault();\n _this.saveContainerPosition();\n };\n _this.onTouchStart = function (e) {\n if (!_this.currentDoc) return;\n _this.isTouching = true;\n if (_this.props.onTouchRequest && !_this.props.onTouchRequest(e)) {\n return;\n }\n _this.currentDoc.addEventListener('touchmove', _this.onTouchMove, {\n passive: false\n }); // iOS 11 now defaults to passive: true\n _this.currentDoc.addEventListener('touchend', _this.onDragStopped);\n _this.saveContainerPosition();\n if (e.touches.length === 2) {\n _this.onPinchStart(e);\n } else if (e.touches.length === 1) {\n _this.onDragStart(Cropper.getTouchPoint(e.touches[0]));\n }\n };\n _this.onTouchMove = function (e) {\n // Prevent whole page from scrolling on iOS.\n e.preventDefault();\n if (e.touches.length === 2) {\n _this.onPinchMove(e);\n } else if (e.touches.length === 1) {\n _this.onDrag(Cropper.getTouchPoint(e.touches[0]));\n }\n };\n _this.onGestureStart = function (e) {\n if (!_this.currentDoc) return;\n e.preventDefault();\n _this.currentDoc.addEventListener('gesturechange', _this.onGestureChange);\n _this.currentDoc.addEventListener('gestureend', _this.onGestureEnd);\n _this.gestureZoomStart = _this.props.zoom;\n _this.gestureRotationStart = _this.props.rotation;\n };\n _this.onGestureChange = function (e) {\n e.preventDefault();\n if (_this.isTouching) {\n // this is to avoid conflict between gesture and touch events\n return;\n }\n var point = Cropper.getMousePoint(e);\n var newZoom = _this.gestureZoomStart - 1 + e.scale;\n _this.setNewZoom(newZoom, point, {\n shouldUpdatePosition: true\n });\n if (_this.props.onRotationChange) {\n var newRotation = _this.gestureRotationStart + e.rotation;\n _this.props.onRotationChange(newRotation);\n }\n };\n _this.onGestureEnd = function (e) {\n _this.cleanEvents();\n };\n _this.onDragStart = function (_a) {\n var _b, _c;\n var x = _a.x,\n y = _a.y;\n _this.dragStartPosition = {\n x: x,\n y: y\n };\n _this.dragStartCrop = __assign({}, _this.props.crop);\n (_c = (_b = _this.props).onInteractionStart) === null || _c === void 0 ? void 0 : _c.call(_b);\n };\n _this.onDrag = function (_a) {\n var x = _a.x,\n y = _a.y;\n if (!_this.currentWindow) return;\n if (_this.rafDragTimeout) _this.currentWindow.cancelAnimationFrame(_this.rafDragTimeout);\n _this.rafDragTimeout = _this.currentWindow.requestAnimationFrame(function () {\n if (!_this.state.cropSize) return;\n if (x === undefined || y === undefined) return;\n var offsetX = x - _this.dragStartPosition.x;\n var offsetY = y - _this.dragStartPosition.y;\n var requestedPosition = {\n x: _this.dragStartCrop.x + offsetX,\n y: _this.dragStartCrop.y + offsetY\n };\n var newPosition = _this.props.restrictPosition ? restrictPosition(requestedPosition, _this.mediaSize, _this.state.cropSize, _this.props.zoom, _this.props.rotation) : requestedPosition;\n _this.props.onCropChange(newPosition);\n });\n };\n _this.onDragStopped = function () {\n var _a, _b;\n _this.isTouching = false;\n _this.cleanEvents();\n _this.emitCropData();\n (_b = (_a = _this.props).onInteractionEnd) === null || _b === void 0 ? void 0 : _b.call(_a);\n };\n _this.onWheel = function (e) {\n if (!_this.currentWindow) return;\n if (_this.props.onWheelRequest && !_this.props.onWheelRequest(e)) {\n return;\n }\n e.preventDefault();\n var point = Cropper.getMousePoint(e);\n var pixelY = normalizeWheel(e).pixelY;\n var newZoom = _this.props.zoom - pixelY * _this.props.zoomSpeed / 200;\n _this.setNewZoom(newZoom, point, {\n shouldUpdatePosition: true\n });\n if (!_this.state.hasWheelJustStarted) {\n _this.setState({\n hasWheelJustStarted: true\n }, function () {\n var _a, _b;\n return (_b = (_a = _this.props).onInteractionStart) === null || _b === void 0 ? void 0 : _b.call(_a);\n });\n }\n if (_this.wheelTimer) {\n clearTimeout(_this.wheelTimer);\n }\n _this.wheelTimer = _this.currentWindow.setTimeout(function () {\n return _this.setState({\n hasWheelJustStarted: false\n }, function () {\n var _a, _b;\n return (_b = (_a = _this.props).onInteractionEnd) === null || _b === void 0 ? void 0 : _b.call(_a);\n });\n }, 250);\n };\n _this.getPointOnContainer = function (_a, containerTopLeft) {\n var x = _a.x,\n y = _a.y;\n if (!_this.containerRect) {\n throw new Error('The Cropper is not mounted');\n }\n return {\n x: _this.containerRect.width / 2 - (x - containerTopLeft.x),\n y: _this.containerRect.height / 2 - (y - containerTopLeft.y)\n };\n };\n _this.getPointOnMedia = function (_a) {\n var x = _a.x,\n y = _a.y;\n var _b = _this.props,\n crop = _b.crop,\n zoom = _b.zoom;\n return {\n x: (x + crop.x) / zoom,\n y: (y + crop.y) / zoom\n };\n };\n _this.setNewZoom = function (zoom, point, _a) {\n var _b = _a === void 0 ? {} : _a,\n _c = _b.shouldUpdatePosition,\n shouldUpdatePosition = _c === void 0 ? true : _c;\n if (!_this.state.cropSize || !_this.props.onZoomChange) return;\n var newZoom = clamp(zoom, _this.props.minZoom, _this.props.maxZoom);\n if (shouldUpdatePosition) {\n var zoomPoint = _this.getPointOnContainer(point, _this.containerPosition);\n var zoomTarget = _this.getPointOnMedia(zoomPoint);\n var requestedPosition = {\n x: zoomTarget.x * newZoom - zoomPoint.x,\n y: zoomTarget.y * newZoom - zoomPoint.y\n };\n var newPosition = _this.props.restrictPosition ? restrictPosition(requestedPosition, _this.mediaSize, _this.state.cropSize, newZoom, _this.props.rotation) : requestedPosition;\n _this.props.onCropChange(newPosition);\n }\n _this.props.onZoomChange(newZoom);\n };\n _this.getCropData = function () {\n if (!_this.state.cropSize) {\n return null;\n }\n // this is to ensure the crop is correctly restricted after a zoom back (https://github.com/ValentinH/react-easy-crop/issues/6)\n var restrictedPosition = _this.props.restrictPosition ? restrictPosition(_this.props.crop, _this.mediaSize, _this.state.cropSize, _this.props.zoom, _this.props.rotation) : _this.props.crop;\n return computeCroppedArea(restrictedPosition, _this.mediaSize, _this.state.cropSize, _this.getAspect(), _this.props.zoom, _this.props.rotation, _this.props.restrictPosition);\n };\n _this.emitCropData = function () {\n var cropData = _this.getCropData();\n if (!cropData) return;\n var croppedAreaPercentages = cropData.croppedAreaPercentages,\n croppedAreaPixels = cropData.croppedAreaPixels;\n if (_this.props.onCropComplete) {\n _this.props.onCropComplete(croppedAreaPercentages, croppedAreaPixels);\n }\n if (_this.props.onCropAreaChange) {\n _this.props.onCropAreaChange(croppedAreaPercentages, croppedAreaPixels);\n }\n };\n _this.emitCropAreaChange = function () {\n var cropData = _this.getCropData();\n if (!cropData) return;\n var croppedAreaPercentages = cropData.croppedAreaPercentages,\n croppedAreaPixels = cropData.croppedAreaPixels;\n if (_this.props.onCropAreaChange) {\n _this.props.onCropAreaChange(croppedAreaPercentages, croppedAreaPixels);\n }\n };\n _this.recomputeCropPosition = function () {\n var _a, _b;\n if (!_this.state.cropSize) return;\n var adjustedCrop = _this.props.crop;\n // Only scale if we're initialized and this is a legitimate resize\n if (_this.isInitialized && ((_a = _this.previousCropSize) === null || _a === void 0 ? void 0 : _a.width) && ((_b = _this.previousCropSize) === null || _b === void 0 ? void 0 : _b.height)) {\n var sizeChanged = Math.abs(_this.previousCropSize.width - _this.state.cropSize.width) > 1e-6 || Math.abs(_this.previousCropSize.height - _this.state.cropSize.height) > 1e-6;\n if (sizeChanged) {\n var scaleX = _this.state.cropSize.width / _this.previousCropSize.width;\n var scaleY = _this.state.cropSize.height / _this.previousCropSize.height;\n adjustedCrop = {\n x: _this.props.crop.x * scaleX,\n y: _this.props.crop.y * scaleY\n };\n }\n }\n var newPosition = _this.props.restrictPosition ? restrictPosition(adjustedCrop, _this.mediaSize, _this.state.cropSize, _this.props.zoom, _this.props.rotation) : adjustedCrop;\n _this.previousCropSize = _this.state.cropSize;\n _this.props.onCropChange(newPosition);\n _this.emitCropData();\n };\n _this.onKeyDown = function (event) {\n var _a, _b;\n var _c = _this.props,\n crop = _c.crop,\n onCropChange = _c.onCropChange,\n keyboardStep = _c.keyboardStep,\n zoom = _c.zoom,\n rotation = _c.rotation;\n var step = keyboardStep;\n if (!_this.state.cropSize) return;\n // if the shift key is pressed, reduce the step to allow finer control\n if (event.shiftKey) {\n step *= 0.2;\n }\n var newCrop = __assign({}, crop);\n switch (event.key) {\n case 'ArrowUp':\n newCrop.y -= step;\n event.preventDefault();\n break;\n case 'ArrowDown':\n newCrop.y += step;\n event.preventDefault();\n break;\n case 'ArrowLeft':\n newCrop.x -= step;\n event.preventDefault();\n break;\n case 'ArrowRight':\n newCrop.x += step;\n event.preventDefault();\n break;\n default:\n return;\n }\n if (_this.props.restrictPosition) {\n newCrop = restrictPosition(newCrop, _this.mediaSize, _this.state.cropSize, zoom, rotation);\n }\n if (!event.repeat) {\n (_b = (_a = _this.props).onInteractionStart) === null || _b === void 0 ? void 0 : _b.call(_a);\n }\n onCropChange(newCrop);\n };\n _this.onKeyUp = function (event) {\n var _a, _b;\n switch (event.key) {\n case 'ArrowUp':\n case 'ArrowDown':\n case 'ArrowLeft':\n case 'ArrowRight':\n event.preventDefault();\n break;\n default:\n return;\n }\n _this.emitCropData();\n (_b = (_a = _this.props).onInteractionEnd) === null || _b === void 0 ? void 0 : _b.call(_a);\n };\n return _this;\n }\n Cropper.prototype.componentDidMount = function () {\n if (!this.currentDoc || !this.currentWindow) return;\n if (this.containerRef) {\n if (this.containerRef.ownerDocument) {\n this.currentDoc = this.containerRef.ownerDocument;\n }\n if (this.currentDoc.defaultView) {\n this.currentWindow = this.currentDoc.defaultView;\n }\n this.initResizeObserver();\n // only add window resize listener if ResizeObserver is not supported. Otherwise, it would be redundant\n if (typeof window.ResizeObserver === 'undefined') {\n this.currentWindow.addEventListener('resize', this.computeSizes);\n }\n this.props.zoomWithScroll && this.containerRef.addEventListener('wheel', this.onWheel, {\n passive: false\n });\n this.containerRef.addEventListener('gesturestart', this.onGestureStart);\n }\n this.currentDoc.addEventListener('scroll', this.onScroll);\n if (!this.props.disableAutomaticStylesInjection) {\n this.styleRef = this.currentDoc.createElement('style');\n this.styleRef.setAttribute('type', 'text/css');\n if (this.props.nonce) {\n this.styleRef.setAttribute('nonce', this.props.nonce);\n }\n this.styleRef.innerHTML = css_248z;\n this.currentDoc.head.appendChild(this.styleRef);\n }\n // when rendered via SSR, the image can already be loaded and its onLoad callback will never be called\n if (this.imageRef.current && this.imageRef.current.complete) {\n this.onMediaLoad();\n }\n // set image and video refs in the parent if the callbacks exist\n if (this.props.setImageRef) {\n this.props.setImageRef(this.imageRef);\n }\n if (this.props.setVideoRef) {\n this.props.setVideoRef(this.videoRef);\n }\n if (this.props.setCropperRef) {\n this.props.setCropperRef(this.cropperRef);\n }\n };\n Cropper.prototype.componentWillUnmount = function () {\n var _a, _b;\n if (!this.currentDoc || !this.currentWindow) return;\n if (typeof window.ResizeObserver === 'undefined') {\n this.currentWindow.removeEventListener('resize', this.computeSizes);\n }\n (_a = this.resizeObserver) === null || _a === void 0 ? void 0 : _a.disconnect();\n if (this.containerRef) {\n this.containerRef.removeEventListener('gesturestart', this.preventZoomSafari);\n }\n if (this.styleRef) {\n (_b = this.styleRef.parentNode) === null || _b === void 0 ? void 0 : _b.removeChild(this.styleRef);\n }\n this.cleanEvents();\n this.props.zoomWithScroll && this.clearScrollEvent();\n };\n Cropper.prototype.componentDidUpdate = function (prevProps) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j;\n if (prevProps.rotation !== this.props.rotation) {\n this.computeSizes();\n this.recomputeCropPosition();\n } else if (prevProps.aspect !== this.props.aspect) {\n this.computeSizes();\n } else if (prevProps.objectFit !== this.props.objectFit) {\n this.computeSizes();\n } else if (prevProps.zoom !== this.props.zoom) {\n this.recomputeCropPosition();\n } else if (((_a = prevProps.cropSize) === null || _a === void 0 ? void 0 : _a.height) !== ((_b = this.props.cropSize) === null || _b === void 0 ? void 0 : _b.height) || ((_c = prevProps.cropSize) === null || _c === void 0 ? void 0 : _c.width) !== ((_d = this.props.cropSize) === null || _d === void 0 ? void 0 : _d.width)) {\n this.computeSizes();\n } else if (((_e = prevProps.crop) === null || _e === void 0 ? void 0 : _e.x) !== ((_f = this.props.crop) === null || _f === void 0 ? void 0 : _f.x) || ((_g = prevProps.crop) === null || _g === void 0 ? void 0 : _g.y) !== ((_h = this.props.crop) === null || _h === void 0 ? void 0 : _h.y)) {\n this.emitCropAreaChange();\n }\n if (prevProps.zoomWithScroll !== this.props.zoomWithScroll && this.containerRef) {\n this.props.zoomWithScroll ? this.containerRef.addEventListener('wheel', this.onWheel, {\n passive: false\n }) : this.clearScrollEvent();\n }\n if (prevProps.video !== this.props.video) {\n (_j = this.videoRef.current) === null || _j === void 0 ? void 0 : _j.load();\n }\n var objectFit = this.getObjectFit();\n if (objectFit !== this.state.mediaObjectFit) {\n this.setState({\n mediaObjectFit: objectFit\n }, this.computeSizes);\n }\n };\n Cropper.prototype.getAspect = function () {\n var _a = this.props,\n cropSize = _a.cropSize,\n aspect = _a.aspect;\n if (cropSize) {\n return cropSize.width / cropSize.height;\n }\n return aspect;\n };\n Cropper.prototype.getObjectFit = function () {\n var _a, _b, _c, _d;\n if (this.props.objectFit === 'cover') {\n var mediaRef = this.imageRef.current || this.videoRef.current;\n if (mediaRef && this.containerRef) {\n this.containerRect = this.containerRef.getBoundingClientRect();\n var containerAspect = this.containerRect.width / this.containerRect.height;\n var naturalWidth = ((_a = this.imageRef.current) === null || _a === void 0 ? void 0 : _a.naturalWidth) || ((_b = this.videoRef.current) === null || _b === void 0 ? void 0 : _b.videoWidth) || 0;\n var naturalHeight = ((_c = this.imageRef.current) === null || _c === void 0 ? void 0 : _c.naturalHeight) || ((_d = this.videoRef.current) === null || _d === void 0 ? void 0 : _d.videoHeight) || 0;\n var mediaAspect = naturalWidth / naturalHeight;\n return mediaAspect < containerAspect ? 'horizontal-cover' : 'vertical-cover';\n }\n return 'horizontal-cover';\n }\n return this.props.objectFit;\n };\n Cropper.prototype.onPinchStart = function (e) {\n var pointA = Cropper.getTouchPoint(e.touches[0]);\n var pointB = Cropper.getTouchPoint(e.touches[1]);\n this.lastPinchDistance = getDistanceBetweenPoints(pointA, pointB);\n this.lastPinchRotation = getRotationBetweenPoints(pointA, pointB);\n this.onDragStart(getCenter(pointA, pointB));\n };\n Cropper.prototype.onPinchMove = function (e) {\n var _this = this;\n if (!this.currentDoc || !this.currentWindow) return;\n var pointA = Cropper.getTouchPoint(e.touches[0]);\n var pointB = Cropper.getTouchPoint(e.touches[1]);\n var center = getCenter(pointA, pointB);\n this.onDrag(center);\n if (this.rafPinchTimeout) this.currentWindow.cancelAnimationFrame(this.rafPinchTimeout);\n this.rafPinchTimeout = this.currentWindow.requestAnimationFrame(function () {\n var distance = getDistanceBetweenPoints(pointA, pointB);\n var newZoom = _this.props.zoom * (distance / _this.lastPinchDistance);\n _this.setNewZoom(newZoom, center, {\n shouldUpdatePosition: false\n });\n _this.lastPinchDistance = distance;\n var rotation = getRotationBetweenPoints(pointA, pointB);\n var newRotation = _this.props.rotation + (rotation - _this.lastPinchRotation);\n _this.props.onRotationChange && _this.props.onRotationChange(newRotation);\n _this.lastPinchRotation = rotation;\n });\n };\n Cropper.prototype.render = function () {\n var _this = this;\n var _a;\n var _b = this.props,\n image = _b.image,\n video = _b.video,\n mediaProps = _b.mediaProps,\n cropperProps = _b.cropperProps,\n transform = _b.transform,\n _c = _b.crop,\n x = _c.x,\n y = _c.y,\n rotation = _b.rotation,\n zoom = _b.zoom,\n cropShape = _b.cropShape,\n showGrid = _b.showGrid,\n roundCropAreaPixels = _b.roundCropAreaPixels,\n _d = _b.style,\n containerStyle = _d.containerStyle,\n cropAreaStyle = _d.cropAreaStyle,\n mediaStyle = _d.mediaStyle,\n _e = _b.classes,\n containerClassName = _e.containerClassName,\n cropAreaClassName = _e.cropAreaClassName,\n mediaClassName = _e.mediaClassName;\n var objectFit = (_a = this.state.mediaObjectFit) !== null && _a !== void 0 ? _a : this.getObjectFit();\n return React.createElement(\"div\", {\n onMouseDown: this.onMouseDown,\n onTouchStart: this.onTouchStart,\n ref: function ref(el) {\n return _this.containerRef = el;\n },\n \"data-testid\": \"container\",\n style: containerStyle,\n className: classNames('reactEasyCrop_Container', containerClassName)\n }, image ? React.createElement(\"img\", __assign({\n alt: \"\",\n className: classNames('reactEasyCrop_Image', objectFit === 'contain' && 'reactEasyCrop_Contain', objectFit === 'horizontal-cover' && 'reactEasyCrop_Cover_Horizontal', objectFit === 'vertical-cover' && 'reactEasyCrop_Cover_Vertical', mediaClassName)\n }, mediaProps, {\n src: image,\n ref: this.imageRef,\n style: __assign(__assign({}, mediaStyle), {\n transform: transform || \"translate(\".concat(x, \"px, \").concat(y, \"px) rotate(\").concat(rotation, \"deg) scale(\").concat(zoom, \")\")\n }),\n onLoad: this.onMediaLoad\n })) : video && React.createElement(\"video\", __assign({\n autoPlay: true,\n playsInline: true,\n loop: true,\n muted: true,\n className: classNames('reactEasyCrop_Video', objectFit === 'contain' && 'reactEasyCrop_Contain', objectFit === 'horizontal-cover' && 'reactEasyCrop_Cover_Horizontal', objectFit === 'vertical-cover' && 'reactEasyCrop_Cover_Vertical', mediaClassName)\n }, mediaProps, {\n ref: this.videoRef,\n onLoadedMetadata: this.onMediaLoad,\n style: __assign(__assign({}, mediaStyle), {\n transform: transform || \"translate(\".concat(x, \"px, \").concat(y, \"px) rotate(\").concat(rotation, \"deg) scale(\").concat(zoom, \")\")\n }),\n controls: false\n }), (Array.isArray(video) ? video : [{\n src: video\n }]).map(function (item) {\n return React.createElement(\"source\", __assign({\n key: item.src\n }, item));\n })), this.state.cropSize && React.createElement(\"div\", __assign({\n ref: this.cropperRef,\n style: __assign(__assign({}, cropAreaStyle), {\n width: roundCropAreaPixels ? Math.round(this.state.cropSize.width) : this.state.cropSize.width,\n height: roundCropAreaPixels ? Math.round(this.state.cropSize.height) : this.state.cropSize.height\n }),\n tabIndex: 0,\n onKeyDown: this.onKeyDown,\n onKeyUp: this.onKeyUp,\n \"data-testid\": \"cropper\",\n className: classNames('reactEasyCrop_CropArea', cropShape === 'round' && 'reactEasyCrop_CropAreaRound', showGrid && 'reactEasyCrop_CropAreaGrid', cropAreaClassName)\n }, cropperProps)));\n };\n Cropper.defaultProps = {\n zoom: 1,\n rotation: 0,\n aspect: 4 / 3,\n maxZoom: MAX_ZOOM,\n minZoom: MIN_ZOOM,\n cropShape: 'rect',\n objectFit: 'contain',\n showGrid: true,\n style: {},\n classes: {},\n mediaProps: {},\n cropperProps: {},\n zoomSpeed: 1,\n restrictPosition: true,\n zoomWithScroll: true,\n keyboardStep: KEYBOARD_STEP\n };\n Cropper.getMousePoint = function (e) {\n return {\n x: Number(e.clientX),\n y: Number(e.clientY)\n };\n };\n Cropper.getTouchPoint = function (touch) {\n return {\n x: Number(touch.clientX),\n y: Number(touch.clientY)\n };\n };\n return Cropper;\n}(React.Component);\n\nexport { Cropper as default, getInitialCropFromCroppedAreaPercentages, getInitialCropFromCroppedAreaPixels };\n//# sourceMappingURL=index.module.mjs.map\n","import React, { useCallback, useEffect, useState } from \"react\";\r\nimport { Icon } from \"@iconify/react\";\r\nimport Cropper from \"react-easy-crop\";\r\nimport type { Area } from \"react-easy-crop\";\r\nimport Button from \"../../Button/Button\";\r\nimport { crudClasses, joinClasses } from \"../../../lib/crudClasses\";\r\n\r\nconst ButtonComponent = Button as React.ComponentType<any>;\r\n\r\nconst createImage = (url: string): Promise<HTMLImageElement> =>\r\n new Promise((resolve, reject) => {\r\n const image = new Image();\r\n image.addEventListener(\"load\", () => resolve(image));\r\n image.addEventListener(\"error\", (error) => reject(error));\r\n image.setAttribute(\"crossOrigin\", \"anonymous\");\r\n image.src = url;\r\n });\r\n\r\nconst getRadianAngle = (degreeValue: number) => {\r\n return (degreeValue * Math.PI) / 180;\r\n};\r\n\r\nconst rotateSize = (width: number, height: number, rotation: number) => {\r\n const rotRad = getRadianAngle(rotation);\r\n return {\r\n width:\r\n Math.abs(Math.cos(rotRad) * width) + Math.abs(Math.sin(rotRad) * height),\r\n height:\r\n Math.abs(Math.sin(rotRad) * width) + Math.abs(Math.cos(rotRad) * height),\r\n };\r\n};\r\n\r\nconst getCroppedImageBlob = async (\r\n imageSrc: string,\r\n pixelCrop: Area,\r\n fileType = \"image/jpeg\",\r\n rotation = 0,\r\n): Promise<Blob> => {\r\n const image = await createImage(imageSrc);\r\n const canvas = document.createElement(\"canvas\");\r\n const ctx = canvas.getContext(\"2d\");\r\n\r\n if (!ctx) {\r\n throw new Error(\"Canvas context is not available\");\r\n }\r\n\r\n const rotRad = getRadianAngle(rotation);\r\n const { width: bBoxWidth, height: bBoxHeight } = rotateSize(\r\n image.width,\r\n image.height,\r\n rotation,\r\n );\r\n\r\n canvas.width = bBoxWidth;\r\n canvas.height = bBoxHeight;\r\n\r\n ctx.translate(bBoxWidth / 2, bBoxHeight / 2);\r\n ctx.rotate(rotRad);\r\n ctx.translate(-image.width / 2, -image.height / 2);\r\n ctx.drawImage(image, 0, 0);\r\n\r\n const croppedCanvas = document.createElement(\"canvas\");\r\n const croppedCtx = croppedCanvas.getContext(\"2d\");\r\n\r\n if (!croppedCtx) {\r\n throw new Error(\"Canvas context is not available\");\r\n }\r\n\r\n croppedCanvas.width = pixelCrop.width;\r\n croppedCanvas.height = pixelCrop.height;\r\n\r\n croppedCtx.drawImage(\r\n canvas,\r\n pixelCrop.x,\r\n pixelCrop.y,\r\n pixelCrop.width,\r\n pixelCrop.height,\r\n 0,\r\n 0,\r\n pixelCrop.width,\r\n pixelCrop.height,\r\n );\r\n\r\n return new Promise((resolve, reject) => {\r\n croppedCanvas.toBlob(\r\n (blob) => {\r\n if (!blob) {\r\n reject(new Error(\"Image cropping failed\"));\r\n return;\r\n }\r\n resolve(blob);\r\n },\r\n fileType,\r\n 0.95,\r\n );\r\n });\r\n};\r\n\r\ninterface ImageCropperModalProps {\r\n isOpen: boolean;\r\n imageSrc: string;\r\n fileType?: string;\r\n fileName?: string;\r\n aspect?: number;\r\n title?: string;\r\n onClose: () => void;\r\n onApply: (file: File) => void;\r\n}\r\n\r\nconst ImageCropperModal = ({\r\n isOpen,\r\n imageSrc,\r\n fileType = \"image/jpeg\",\r\n fileName = \"cropped-image\",\r\n aspect = 1 / 1,\r\n title = \"Crop Image\",\r\n onClose,\r\n onApply,\r\n}: ImageCropperModalProps) => {\r\n const [crop, setCrop] = useState({ x: 0, y: 0 });\r\n const [zoom, setZoom] = useState(1);\r\n const [croppedAreaPixels, setCroppedAreaPixels] = useState<Area | null>(null);\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n setCrop({ x: 0, y: 0 });\r\n setZoom(1);\r\n setCroppedAreaPixels(null);\r\n }\r\n }, [isOpen]);\r\n\r\n const onCropComplete = useCallback((_area: Area, croppedPixels: Area) => {\r\n setCroppedAreaPixels(croppedPixels);\r\n }, []);\r\n\r\n const handleApply = async () => {\r\n if (!imageSrc || !croppedAreaPixels) {\r\n return;\r\n }\r\n\r\n try {\r\n const blob = await getCroppedImageBlob(\r\n imageSrc,\r\n croppedAreaPixels,\r\n fileType,\r\n );\r\n const fileExtension =\r\n fileType?.split(\"/\")?.[1]?.replace(\"jpeg\", \"jpg\") || \"jpg\";\r\n const croppedFile = new File([blob], `${fileName}.${fileExtension}`, {\r\n type: fileType,\r\n });\r\n onApply?.(croppedFile);\r\n } catch {\r\n onClose?.();\r\n }\r\n };\r\n\r\n if (!isOpen) {\r\n return null;\r\n }\r\n\r\n return (\r\n <div\r\n className={joinClasses(\r\n crudClasses.mediaPicker.cropModal,\r\n \"fixed inset-0 z-50 flex items-center justify-center p-4\",\r\n )}\r\n >\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 <div className=\"relative bg-white rounded-lg shadow-xl w-full max-w-2xl max-h-[90vh] flex flex-col dark:bg-gray-800\">\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 <h3 className=\"text-lg font-medium text-gray-900 dark:text-white\">\r\n {title}\r\n </h3>\r\n <button\r\n type=\"button\"\r\n onClick={onClose}\r\n className=\"text-gray-400 hover:text-gray-600 dark:hover:text-gray-300\"\r\n aria-label=\"Close crop modal\"\r\n >\r\n <Icon icon=\"mdi:close\" className=\"w-6 h-6\" />\r\n </button>\r\n </div>\r\n\r\n <div className=\"p-4 space-y-4\">\r\n <div className=\"relative h-72 w-full bg-gray-900 rounded-md overflow-hidden\">\r\n {imageSrc && (\r\n <Cropper\r\n image={imageSrc}\r\n crop={crop}\r\n zoom={zoom}\r\n aspect={aspect}\r\n onCropChange={setCrop}\r\n onZoomChange={setZoom}\r\n onCropComplete={onCropComplete}\r\n />\r\n )}\r\n </div>\r\n\r\n <div className=\"space-y-2\">\r\n <label className=\"text-sm text-gray-700 dark:text-gray-300\">\r\n Zoom\r\n </label>\r\n <input\r\n type=\"range\"\r\n min={1}\r\n max={3}\r\n step={0.1}\r\n value={zoom}\r\n onChange={(event) => setZoom(Number(event.target.value))}\r\n className=\"w-full\"\r\n />\r\n </div>\r\n </div>\r\n\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 <ButtonComponent\r\n type=\"button\"\r\n onClick={onClose}\r\n variant=\"outlined\"\r\n color=\"default\"\r\n >\r\n Cancel\r\n </ButtonComponent>\r\n <ButtonComponent\r\n type=\"button\"\r\n onClick={handleApply}\r\n variant=\"contained\"\r\n color=\"primary\"\r\n >\r\n Apply Crop\r\n </ButtonComponent>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ImageCropperModal;\r\n","import { Icon } from \"@iconify/react\";\r\nimport React, { useState, useEffect, useRef } from \"react\";\r\nimport InputLabel from \"./InputLabel\";\r\nimport Button from \"../../Button/Button\";\r\nimport ImageCropperModal from \"./ImageCropperModal\";\r\nimport { crudClasses, joinClasses } from \"../../../lib/crudClasses\";\r\n\r\nconst ButtonComponent = Button as React.ComponentType<any>;\r\n\r\nconst revokeBlobUrl = (url?: string) => {\r\n if (typeof url === \"string\" && url.startsWith(\"blob:\")) {\r\n URL.revokeObjectURL(url);\r\n }\r\n};\r\n\r\ntype ImageValue = File | { file?: File; preview?: string } | string | null;\r\n\r\ninterface ImagePickerProps {\r\n label?: string;\r\n value: ImageValue;\r\n onChange: (file: File | null) => void;\r\n required?: boolean;\r\n accept?: string;\r\n aspect?: number | string;\r\n id: string;\r\n dragDrop?: boolean;\r\n cropImage?: boolean;\r\n name: string;\r\n parentClass?: string;\r\n errorMessage?: string;\r\n}\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 aspect = \"1\",\r\n id,\r\n dragDrop = false,\r\n cropImage = false,\r\n name = \"\",\r\n parentClass = \"\",\r\n errorMessage = \"\",\r\n}: ImagePickerProps) => {\r\n const [image, setImage] = useState<ImageValue>(value);\r\n const [isDragging, setIsDragging] = useState(false);\r\n const [cropModalOpen, setCropModalOpen] = useState(false);\r\n const [cropSource, setCropSource] = useState(\"\");\r\n const [selectedFileType, setSelectedFileType] = useState(\"image/jpeg\");\r\n const [selectedFileName, setSelectedFileName] = useState(\"cropped-image\");\r\n\r\n const inputRef = useRef<HTMLInputElement | null>(null);\r\n const sourceUrlRef = useRef(\"\");\r\n const previewUrlRef = useRef(\"\");\r\n\r\n useEffect(() => {\r\n if (value instanceof File) {\r\n const preview = URL.createObjectURL(value);\r\n revokeBlobUrl(previewUrlRef.current);\r\n previewUrlRef.current = preview;\r\n setImage({ file: value, preview });\r\n } else if (value && typeof value === \"object\" && \"preview\" in value) {\r\n setImage(value);\r\n } else {\r\n setImage(value);\r\n }\r\n }, [value]);\r\n\r\n useEffect(() => {\r\n return () => {\r\n revokeBlobUrl(previewUrlRef.current);\r\n revokeBlobUrl(sourceUrlRef.current);\r\n };\r\n }, []);\r\n\r\n const closeCropModal = () => {\r\n setCropModalOpen(false);\r\n revokeBlobUrl(sourceUrlRef.current);\r\n sourceUrlRef.current = \"\";\r\n setCropSource(\"\");\r\n\r\n if (inputRef.current) {\r\n inputRef.current.value = \"\";\r\n }\r\n };\r\n\r\n const handleCroppedImage = (croppedFile: File) => {\r\n const preview = URL.createObjectURL(croppedFile);\r\n revokeBlobUrl(previewUrlRef.current);\r\n previewUrlRef.current = preview;\r\n\r\n setImage({ file: croppedFile, preview });\r\n onChange?.(croppedFile);\r\n closeCropModal();\r\n };\r\n\r\n const handleFileChange = (files: FileList | null) => {\r\n if (!files || files.length === 0) {\r\n return;\r\n }\r\n\r\n const file = files[0];\r\n\r\n if (cropImage) {\r\n const source = URL.createObjectURL(file);\r\n revokeBlobUrl(sourceUrlRef.current);\r\n sourceUrlRef.current = source;\r\n setCropSource(source);\r\n setSelectedFileType(file.type || \"image/jpeg\");\r\n setSelectedFileName(\r\n (file.name || \"cropped-image\").replace(/\\.[^/.]+$/, \"\"),\r\n );\r\n setCropModalOpen(true);\r\n return;\r\n }\r\n\r\n const preview = URL.createObjectURL(file);\r\n\r\n revokeBlobUrl(previewUrlRef.current);\r\n previewUrlRef.current = preview;\r\n\r\n setImage({ file, preview });\r\n onChange?.(file);\r\n };\r\n\r\n const removeImage = (e?: React.MouseEvent<HTMLButtonElement>) => {\r\n if (e) {\r\n e.stopPropagation();\r\n }\r\n\r\n revokeBlobUrl(previewUrlRef.current);\r\n previewUrlRef.current = \"\";\r\n\r\n setImage(null);\r\n onChange?.(null);\r\n\r\n if (inputRef.current) {\r\n inputRef.current.value = \"\";\r\n }\r\n };\r\n\r\n const handleDragOver = (e: React.DragEvent<HTMLDivElement>) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(true);\r\n };\r\n\r\n const handleDragLeave = (e: React.DragEvent<HTMLDivElement>) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(false);\r\n };\r\n\r\n const handleDrop = (e: React.DragEvent<HTMLDivElement>) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(false);\r\n if (e.dataTransfer?.files?.[0]?.type?.includes(\"image/\")) {\r\n handleFileChange(e.dataTransfer.files);\r\n }\r\n };\r\n\r\n const handleButtonClick = () => {\r\n inputRef.current?.click();\r\n };\r\n\r\n const imagePreview =\r\n image && typeof image === \"object\" && \"preview\" in image\r\n ? image.preview\r\n : typeof image === \"string\"\r\n ? image\r\n : \"\";\r\n\r\n return (\r\n <>\r\n <div\r\n key={name}\r\n className={joinClasses(\r\n crudClasses.mediaPicker.image,\r\n crudClasses.field.wrapper,\r\n parentClass || \"col-span-12\",\r\n )}\r\n >\r\n <InputLabel label={label} required={required} />\r\n <div\r\n className={joinClasses(\r\n crudClasses.mediaPicker.dropzone,\r\n \"relative rounded-md p-2 transition-all\",\r\n isDragging\r\n ? \"border-2 border-dashed border-blue-500 bg-blue-50 dark:bg-blue-900/20\"\r\n : \"border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-800\",\r\n errorMessage ? \"border-red-500\" : \"\",\r\n )}\r\n onDragOver={handleDragOver}\r\n onDragLeave={handleDragLeave}\r\n onDrop={handleDrop}\r\n id={`field-${name}`}\r\n >\r\n <input\r\n ref={inputRef}\r\n id={id}\r\n type=\"file\"\r\n accept={accept}\r\n onChange={(e) => handleFileChange(e.target.files)}\r\n required={required && !image}\r\n className=\"absolute opacity-0 right-[50%] top-[80%] -translate-y-1/2 pointer-events-none h-[10px]\"\r\n />\r\n\r\n <div\r\n className={`flex items-center space-x-4 transition-all ${\r\n isDragging ? \"opacity-50\" : \"\"\r\n }`}\r\n >\r\n {image ? (\r\n <div className=\"relative group\">\r\n <img\r\n src={imagePreview}\r\n alt=\"preview\"\r\n className=\"object-cover w-20 h-20 rounded-full shadow-md\"\r\n />\r\n {!required && (\r\n <button\r\n type=\"button\"\r\n onClick={removeImage}\r\n className=\"absolute top-0 -right-2 bg-red-500 text-white rounded-full p-1 shadow-lg hover:bg-red-600 transition-colors focus:outline-none focus:ring-2 focus:ring-red-500 focus:ring-offset-2\"\r\n aria-label=\"Remove image\"\r\n >\r\n <Icon icon=\"mdi:close\" className=\"w-3 h-3\" />\r\n </button>\r\n )}\r\n </div>\r\n ) : (\r\n <div className=\"rounded-full bg-gray-100 dark:bg-gray-700 h-20 w-20 flex items-center justify-center\">\r\n <Icon\r\n icon=\"ri:image-add-fill\"\r\n className=\"text-gray-400 w-10 h-10\"\r\n />\r\n </div>\r\n )}\r\n\r\n <div className=\"flex flex-col items-center space-y-1\">\r\n <ButtonComponent\r\n type=\"button\"\r\n onClick={handleButtonClick}\r\n variant=\"outlined\"\r\n color=\"default\"\r\n >\r\n {image ? \"Change Image\" : \"Select Image\"}\r\n </ButtonComponent>\r\n\r\n {dragDrop && !image && (\r\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">\r\n or drag and drop\r\n </p>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {dragDrop && isDragging && (\r\n <div className=\"absolute inset-0 flex items-center justify-center pointer-events-none bg-blue-500/10 rounded-md\">\r\n <span className=\"text-blue-600 dark:text-blue-400 font-semibold text-lg\">\r\n Drop image here\r\n </span>\r\n </div>\r\n )}\r\n </div>\r\n {errorMessage && (\r\n <span\r\n className={joinClasses(\r\n crudClasses.field.error,\r\n \"text-red-500 text-xs mt-1\",\r\n )}\r\n >\r\n {errorMessage}\r\n </span>\r\n )}\r\n </div>\r\n\r\n <ImageCropperModal\r\n isOpen={cropModalOpen}\r\n imageSrc={cropSource}\r\n fileType={selectedFileType}\r\n fileName={selectedFileName}\r\n onClose={closeCropModal}\r\n onApply={handleCroppedImage}\r\n aspect={Number(aspect)}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport default ImagePicker;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { Icon } from \"@iconify/react\";\r\nimport InputLabel from \"./InputLabel\";\r\nimport { crudClasses, joinClasses } from \"../../../lib/crudClasses\";\r\n\r\ninterface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {\r\n label?: string;\r\n value: any;\r\n required: boolean;\r\n parentClass?: string;\r\n className?: string;\r\n type: string;\r\n onKeyDown?: (e: React.KeyboardEvent<HTMLInputElement>) => void;\r\n negativeNumberAllow?: boolean;\r\n defaultValue?: any;\r\n field: Record<string, any>;\r\n onChange: (value: any) => void;\r\n mask?: string;\r\n maskApplyOnValue?: boolean;\r\n errorMessage?: string;\r\n}\r\n\r\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\r\n (\r\n {\r\n label,\r\n value,\r\n name,\r\n required,\r\n parentClass = \"\",\r\n className = \"\",\r\n type = \"text\",\r\n onKeyDown,\r\n negativeNumberAllow = true,\r\n defaultValue = \"\",\r\n field = {},\r\n onChange,\r\n mask = \"\",\r\n errorMessage = \"\",\r\n maskApplyOnValue = true,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const [showPassword, setShowPassword] = useState(false);\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\r\n if (type === \"number\") {\r\n const blockedKeys = [\"e\", \"E\", \"+\"];\r\n\r\n if (blockedKeys.includes(e.key)) {\r\n e.preventDefault();\r\n return;\r\n }\r\n\r\n if (negativeNumberAllow == false && e.key === \"-\") {\r\n e.preventDefault();\r\n return;\r\n }\r\n\r\n if ([\"ArrowUp\", \"ArrowDown\"].includes(e.key)) {\r\n e.preventDefault();\r\n return;\r\n }\r\n }\r\n\r\n onKeyDown?.(e);\r\n };\r\n\r\n const combinedClassName = joinClasses(\r\n crudClasses.field.input,\r\n \"h-10 placeholder-gray-400 dark:placeholder-gray-400\",\r\n type === \"password\" ? \"pr-10\" : \"\",\r\n type === \"number\" ? \"no-spinner\" : \"\",\r\n className,\r\n errorMessage ? \"border-red-500\" : \"\",\r\n );\r\n\r\n function applyMask(rawValue: any, maskValue: string) {\r\n if (!rawValue) return rawValue;\r\n const cleanValue = String(rawValue).replace(/[^a-zA-Z0-9]/g, \"\");\r\n let result = \"\";\r\n let valueIndex = 0;\r\n\r\n for (\r\n let i = 0;\r\n i < maskValue?.length && valueIndex < cleanValue.length;\r\n i++\r\n ) {\r\n const maskChar = maskValue[i];\r\n const valueChar = cleanValue[valueIndex];\r\n\r\n if (maskChar === \"9\") {\r\n if (/\\d/.test(valueChar)) {\r\n result += valueChar;\r\n valueIndex++;\r\n } else {\r\n valueIndex++;\r\n i--;\r\n }\r\n } else if (maskChar === \"A\") {\r\n if (/[a-zA-Z]/.test(valueChar)) {\r\n result += valueChar;\r\n valueIndex++;\r\n } else {\r\n valueIndex++;\r\n i--;\r\n }\r\n } else if (maskChar === \"X\") {\r\n if (/[a-zA-Z0-9]/.test(valueChar)) {\r\n result += valueChar;\r\n valueIndex++;\r\n } else {\r\n valueIndex++;\r\n i--;\r\n }\r\n } else if (maskChar === \"*\") {\r\n result += valueChar;\r\n valueIndex++;\r\n } else {\r\n result += maskChar;\r\n\r\n if (valueChar === maskChar) {\r\n valueIndex++;\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n useEffect(() => {\r\n if (defaultValue) {\r\n const localValue = value || defaultValue;\r\n setTimeout(() => {\r\n onChange?.(localValue);\r\n }, 100);\r\n }\r\n }, [defaultValue]);\r\n\r\n return (\r\n <>\r\n <div\r\n key={name}\r\n className={joinClasses(\r\n crudClasses.field.wrapper,\r\n parentClass || \"col-span-12\",\r\n )}\r\n >\r\n <InputLabel\r\n label={label}\r\n required={required}\r\n infoText={field?.infoText}\r\n />\r\n <div className=\"relative\">\r\n <input\r\n type={type === \"password\" && showPassword ? \"text\" : type}\r\n ref={ref}\r\n id={`field-${name}`}\r\n required={required}\r\n onKeyDown={handleKeyDown}\r\n className={combinedClassName}\r\n value={mask ? applyMask(value, mask) : value}\r\n onChange={(e) => {\r\n mask && maskApplyOnValue\r\n ? onChange(applyMask(e.target.value, mask))\r\n : onChange(e.target.value);\r\n }}\r\n {...props}\r\n />\r\n\r\n {errorMessage && (\r\n <span\r\n className={joinClasses(\r\n crudClasses.field.error,\r\n \"text-red-500 text-xs mt-1\",\r\n )}\r\n >\r\n {errorMessage}\r\n </span>\r\n )}\r\n\r\n {type === \"password\" && (\r\n <button\r\n type=\"button\"\r\n tabIndex={-1}\r\n onClick={() => setShowPassword((prev) => !prev)}\r\n className=\"absolute inset-y-0 right-3 flex items-center text-gray-400 hover:text-gray-600 dark:text-gray-400 dark:hover:text-gray-200\"\r\n >\r\n <Icon\r\n icon={\r\n showPassword ? \"mdi:eye-outline\" : \"mdi:eye-off-outline\"\r\n }\r\n className=\"w-5 h-5\"\r\n />\r\n </button>\r\n )}\r\n </div>\r\n </div>\r\n </>\r\n );\r\n },\r\n);\r\n\r\nInput.displayName = \"Input\";\r\n\r\nexport { Input };\r\n","import { Editor } from \"@tinymce/tinymce-react\";\r\nimport InputLabel from \"./InputLabel\";\r\nimport { crudClasses, joinClasses } from \"../../../lib/crudClasses\";\r\n\r\ninterface TinyEditorProps {\r\n editorKey: string;\r\n value: string;\r\n name: string;\r\n onChange: (content: string) => void;\r\n label?: string;\r\n required?: boolean;\r\n placeholder?: string;\r\n parentClass?: string;\r\n height?: number;\r\n inline?: boolean;\r\n disabled?: boolean;\r\n plugins?: string[];\r\n toolbar?: string;\r\n menubar?: boolean;\r\n fontFamily?: string;\r\n initConfig?: Record<string, any>;\r\n errorMessage?: string;\r\n imageUploadHandler?: (blobInfo: any) => Promise<string>;\r\n}\r\n\r\nconst TinyEditor = ({\r\n editorKey = \"\",\r\n value = \"\",\r\n name = \"\",\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,\r\n errorMessage = \"\",\r\n}: TinyEditorProps) => {\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 const handleImageUpload = (blobInfo: any) => {\r\n return new Promise<string>((resolve, reject) => {\r\n if (!imageUploadHandler) {\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\r\n className={joinClasses(crudClasses.field.wrapper, parentClass)}\r\n id={`field-${name}`}\r\n >\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 border: ${errorMessage ? \"1px solid blue\" : \"\"};\r\n }\r\n `,\r\n ...initConfig,\r\n }}\r\n onEditorChange={(content) => {\r\n onChange?.(content);\r\n }}\r\n />\r\n {errorMessage && (\r\n <span\r\n className={joinClasses(\r\n crudClasses.field.error,\r\n \"text-red-500 text-xs mt-1\",\r\n )}\r\n >\r\n {errorMessage}\r\n </span>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default TinyEditor;\r\n","import React, { useEffect } from \"react\";\r\nimport InputLabel from \"./InputLabel\";\r\nimport { crudClasses, joinClasses } from \"../../../lib/crudClasses\";\r\n\r\ninterface CheckboxOption {\r\n label: string;\r\n value: any;\r\n disabled?: boolean;\r\n}\r\n\r\ninterface CheckboxProps {\r\n name: string;\r\n label?: string;\r\n options: CheckboxOption[];\r\n value: any;\r\n onChange: (value: any, name?: string) => void;\r\n disabled?: boolean;\r\n required?: boolean;\r\n parentClass?: string;\r\n className?: string;\r\n multiSelect?: boolean;\r\n errorMessage?: string;\r\n}\r\n\r\nconst Checkbox = ({\r\n name = \"\",\r\n label = \"\",\r\n options = [],\r\n value = null,\r\n onChange,\r\n disabled = false,\r\n required = false,\r\n parentClass = \"col-span-12\",\r\n className = \"\",\r\n errorMessage = \"\",\r\n multiSelect = false,\r\n}: CheckboxProps) => {\r\n const multiple = Array.isArray(options) && options.length > 0;\r\n\r\n const isChecked = (optionValue?: any) => {\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 const handleSingleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n onChange?.(e.target.checked, name);\r\n };\r\n\r\n const handleMultipleChange = (optionValue: any, checked: boolean) => {\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 } 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 useEffect(() => {\r\n let initialVal;\r\n\r\n if (multiple) {\r\n if (multiSelect) {\r\n // Ensure array for multiselect\r\n initialVal = Array.isArray(value) ? value : [];\r\n } else {\r\n // Single select from multiple options\r\n initialVal = value || \"\";\r\n }\r\n } else {\r\n // Single checkbox\r\n initialVal = Boolean(value);\r\n }\r\n\r\n setTimeout(() => {\r\n onChange?.(initialVal, name);\r\n }, 100);\r\n }, []);\r\n\r\n if (multiple) {\r\n return (\r\n <>\r\n <div className={joinClasses(crudClasses.field.wrapper, 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 id={`field-${name}`}\r\n value={opt.value}\r\n checked={isChecked(opt.value)}\r\n disabled={disabled || Boolean(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={joinClasses(\r\n crudClasses.field.input,\r\n \"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\",\r\n className,\r\n )}\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 {errorMessage && (\r\n <span\r\n className={joinClasses(\r\n crudClasses.field.error,\r\n \"text-red-500 text-xs mt-1\",\r\n )}\r\n >\r\n {errorMessage}\r\n </span>\r\n )}\r\n </div>\r\n </>\r\n );\r\n }\r\n\r\n return (\r\n <div\r\n className={joinClasses(\r\n crudClasses.field.wrapper,\r\n \"flex items-center\",\r\n parentClass,\r\n )}\r\n >\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={joinClasses(\r\n crudClasses.field.input,\r\n \"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\",\r\n className,\r\n )}\r\n />\r\n {label && (\r\n <label\r\n htmlFor={name}\r\n className=\"ml-2 text-sm text-gray-700 dark:text-gray-200 select-none\"\r\n >\r\n {label}\r\n </label>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default Checkbox;\r\n","import { Icon } from \"@iconify/react\";\r\nimport React, { useState, useEffect, useRef } from \"react\";\r\nimport InputLabel from \"./InputLabel\";\r\nimport Button from \"../../Button/Button\";\r\nimport { enqueueSnackbar } from \"notistack\";\r\nimport { crudClasses, joinClasses } from \"../../../lib/crudClasses\";\r\n\r\nconst ButtonComponent = Button as React.ComponentType<any>;\r\n\r\ntype MediaValue = File | { file?: File; preview?: string } | string | null;\r\n\r\ninterface AudioPickerProps {\r\n label?: string;\r\n value: MediaValue;\r\n onChange: (file: File | null) => void;\r\n required?: boolean;\r\n accept?: string;\r\n id: string;\r\n dragDrop?: boolean;\r\n name: string;\r\n parentClass?: string;\r\n maxSize?: number;\r\n errorMessage?: string;\r\n}\r\n\r\nconst AudioPicker = ({\r\n label = \"\",\r\n value = null,\r\n onChange,\r\n required = false,\r\n accept = \"audio/*\",\r\n id,\r\n dragDrop = false,\r\n name = \"\",\r\n parentClass = \"\",\r\n errorMessage = \"\",\r\n maxSize = 0,\r\n}: AudioPickerProps) => {\r\n const [audio, setAudio] = useState<{ file?: File; preview?: string } | null>(\r\n null,\r\n );\r\n const [isDragging, setIsDragging] = useState(false);\r\n const inputRef = useRef<HTMLInputElement | null>(null);\r\n\r\n const maxSizeBytes = maxSize * 1024 * 1024;\r\n\r\n useEffect(() => {\r\n if (!value) {\r\n cleanupAudio();\r\n setAudio(null);\r\n return;\r\n }\r\n\r\n if (value instanceof File) {\r\n const preview = URL.createObjectURL(value);\r\n setAudio({ file: value, preview });\r\n\r\n return () => {\r\n URL.revokeObjectURL(preview);\r\n };\r\n } else if (typeof value === \"string\") {\r\n setAudio({ preview: value });\r\n } else if (value?.preview) {\r\n setAudio(value);\r\n }\r\n }, [value]);\r\n\r\n const cleanupAudio = () => {\r\n if (audio?.preview && audio.preview.startsWith(\"blob:\")) {\r\n URL.revokeObjectURL(audio.preview);\r\n }\r\n };\r\n\r\n const handleFileChange = (files: FileList | null) => {\r\n if (!files || files.length === 0) {\r\n return;\r\n }\r\n const file = files[0];\r\n\r\n if (maxSizeBytes && file.size > maxSizeBytes) {\r\n enqueueSnackbar(\r\n `Audio is too large. Maximum allowed size is ${maxSize} MB`,\r\n { variant: \"warning\" },\r\n );\r\n return;\r\n }\r\n\r\n const preview = URL.createObjectURL(file);\r\n\r\n cleanupAudio();\r\n setAudio({ file, preview });\r\n onChange?.(file);\r\n };\r\n\r\n const removeAudio = (e?: React.MouseEvent<HTMLButtonElement>) => {\r\n if (e) {\r\n e.stopPropagation();\r\n }\r\n\r\n cleanupAudio();\r\n setAudio(null);\r\n onChange?.(null);\r\n\r\n if (inputRef.current) {\r\n inputRef.current.value = \"\";\r\n }\r\n };\r\n\r\n const handleDragOver = (e: React.DragEvent<HTMLDivElement>) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(true);\r\n };\r\n\r\n const handleDragLeave = (e: React.DragEvent<HTMLDivElement>) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(false);\r\n };\r\n\r\n const handleDrop = (e: React.DragEvent<HTMLDivElement>) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(false);\r\n if (e.dataTransfer?.files?.[0]?.type?.includes(\"audio/\")) {\r\n handleFileChange(e.dataTransfer.files);\r\n }\r\n };\r\n\r\n const handleButtonClick = () => {\r\n inputRef.current?.click();\r\n };\r\n\r\n return (\r\n <div\r\n key={name}\r\n className={joinClasses(\r\n crudClasses.mediaPicker.audio,\r\n crudClasses.field.wrapper,\r\n parentClass || \"col-span-12\",\r\n )}\r\n >\r\n <InputLabel label={label} required={required} />\r\n\r\n <div\r\n className={joinClasses(\r\n crudClasses.mediaPicker.dropzone,\r\n \"relative rounded-lg p-2 transition-all\",\r\n isDragging\r\n ? \"border-2 border-dashed border-blue-500 bg-blue-50 dark:bg-blue-900/20\"\r\n : \"border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-800\",\r\n errorMessage ? \"border-red-500\" : \"\",\r\n )}\r\n onDragOver={handleDragOver}\r\n onDragLeave={handleDragLeave}\r\n onDrop={handleDrop}\r\n id={`field-${name}`}\r\n >\r\n <input\r\n ref={inputRef}\r\n id={id}\r\n type=\"file\"\r\n accept={accept}\r\n onChange={(e) => handleFileChange(e.target.files)}\r\n required={required && !audio}\r\n className=\"absolute opacity-0 right-[50%] top-[80%] -translate-y-1/2 pointer-events-none h-[10px]\"\r\n />\r\n\r\n <div\r\n className={`flex items-center space-x-4 transition-all ${\r\n isDragging ? \"opacity-50\" : \"\"\r\n }`}\r\n >\r\n {audio ? (\r\n <div className=\"flex items-center space-x-4\">\r\n <div className=\"relative w-full\">\r\n {!required && (\r\n <button\r\n type=\"button\"\r\n onClick={removeAudio}\r\n className=\"absolute top-0 -right-2 bg-red-500 text-white rounded-full p-1 shadow-lg hover:bg-red-600 transition-colors z-10 focus:outline-none focus:ring-2 focus:ring-red-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800\"\r\n aria-label=\"Remove audio\"\r\n >\r\n <Icon icon=\"mdi:close\" className=\"w-3 h-3\" />\r\n </button>\r\n )}\r\n\r\n <audio\r\n key={audio.preview}\r\n src={audio.preview}\r\n controls\r\n controlsList=\"nodownload\"\r\n />\r\n </div>\r\n <ButtonComponent type=\"button\" onClick={handleButtonClick}>\r\n <span>Change Audio File</span>\r\n </ButtonComponent>\r\n </div>\r\n ) : (\r\n <div className=\"flex items-center justify-center space-x-4\">\r\n <div className=\"rounded-full bg-gray-100 dark:bg-gray-700 h-20 w-20 flex items-center justify-center\">\r\n <Icon icon=\"mdi:music\" className=\"text-gray-400 w-10 h-10\" />\r\n </div>\r\n <div className=\"flex flex-col items-center space-y-1\">\r\n <ButtonComponent\r\n type=\"button\"\r\n onClick={handleButtonClick}\r\n variant=\"outlined\"\r\n >\r\n <span>Choose Audio File</span>\r\n </ButtonComponent>\r\n\r\n {dragDrop && (\r\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">\r\n or drag and drop your audio file here\r\n </p>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {dragDrop && isDragging && !audio && (\r\n <div className=\"absolute inset-0 flex items-center justify-center pointer-events-none bg-blue-500/10 rounded-lg\">\r\n <span className=\"text-blue-600 dark:text-blue-400 font-semibold text-lg bg-white dark:bg-gray-800 px-4 py-2 rounded-lg shadow-lg\">\r\n Drop audio here\r\n </span>\r\n </div>\r\n )}\r\n </div>\r\n {errorMessage && (\r\n <span\r\n className={joinClasses(\r\n crudClasses.field.error,\r\n \"text-red-500 text-xs mt-1\",\r\n )}\r\n >\r\n {errorMessage}\r\n </span>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default AudioPicker;\r\n","import React, { useEffect, useRef, useState } from \"react\";\r\nimport { Icon } from \"@iconify/react\";\r\nimport InputLabel from \"./InputLabel\";\r\nimport ImageCropperModal from \"./ImageCropperModal\";\r\nimport Button from \"../../Button/Button\";\r\nimport { crudClasses, joinClasses } from \"../../../lib/crudClasses\";\r\n\r\nconst ButtonComponent = Button as React.ComponentType<any>;\r\n\r\ntype ImageValueItem = File | { file?: File; preview?: string } | string;\r\n\r\ninterface GalleryItem {\r\n id: string;\r\n file: File | null;\r\n preview: string;\r\n createdBlobUrl?: string;\r\n}\r\n\r\ninterface MultiImagePickerProps {\r\n label?: string;\r\n value: ImageValueItem[];\r\n onChange: (files: ImageValueItem[]) => void;\r\n required?: boolean;\r\n accept?: string;\r\n aspect?: number | string;\r\n id: string;\r\n dragDrop?: boolean;\r\n cropImage?: boolean;\r\n name: string;\r\n parentClass?: string;\r\n maxImages?: number;\r\n errorMessage?: string;\r\n}\r\n\r\nconst toGalleryItem = (item: ImageValueItem): GalleryItem | null => {\r\n if (!item) {\r\n return null;\r\n }\r\n\r\n if (item instanceof File) {\r\n const preview = URL.createObjectURL(item);\r\n return {\r\n id: `${Date.now()}-${Math.random()}`,\r\n file: item,\r\n preview,\r\n createdBlobUrl: preview,\r\n };\r\n }\r\n\r\n if (typeof item === \"string\") {\r\n return {\r\n id: `${Date.now()}-${Math.random()}`,\r\n file: null,\r\n preview: item,\r\n };\r\n }\r\n\r\n if (typeof item === \"object\") {\r\n if (item.preview) {\r\n return {\r\n id: `${Date.now()}-${Math.random()}`,\r\n file: item.file || null,\r\n preview: item.preview,\r\n };\r\n }\r\n if (item.file) {\r\n const preview = URL.createObjectURL(item.file);\r\n return {\r\n id: `${Date.now()}-${Math.random()}`,\r\n file: item.file,\r\n preview,\r\n createdBlobUrl: preview,\r\n };\r\n }\r\n }\r\n\r\n return null;\r\n};\r\n\r\nconst MultiImagePicker = ({\r\n label = \"\",\r\n value = [],\r\n onChange,\r\n required = false,\r\n accept = \"image/*\",\r\n aspect = \"1\",\r\n id,\r\n dragDrop = false,\r\n cropImage = false,\r\n name = \"\",\r\n parentClass = \"\",\r\n maxImages,\r\n errorMessage = \"\",\r\n}: MultiImagePickerProps) => {\r\n const [images, setImages] = useState<GalleryItem[]>([]);\r\n const [isDragging, setIsDragging] = useState(false);\r\n const [cropModalOpen, setCropModalOpen] = useState(false);\r\n const [cropSource, setCropSource] = useState(\"\");\r\n const [selectedFileType, setSelectedFileType] = useState(\"image/jpeg\");\r\n const [selectedFileName, setSelectedFileName] = useState(\"cropped-image\");\r\n const [cropTargetId, setCropTargetId] = useState<string | null>(null);\r\n\r\n const inputRef = useRef<HTMLInputElement | null>(null);\r\n const replaceInputRef = useRef<HTMLInputElement | null>(null);\r\n const cropSourceUrlRef = useRef(\"\");\r\n const imagesRef = useRef<GalleryItem[]>([]);\r\n\r\n useEffect(() => {\r\n imagesRef.current = images;\r\n }, [images]);\r\n\r\n useEffect(() => {\r\n return () => {\r\n imagesRef.current.forEach((img) => {\r\n if (img.createdBlobUrl) {\r\n URL.revokeObjectURL(img.createdBlobUrl);\r\n }\r\n });\r\n if (cropSourceUrlRef.current) {\r\n URL.revokeObjectURL(cropSourceUrlRef.current);\r\n }\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!Array.isArray(value)) {\r\n setImages([]);\r\n return;\r\n }\r\n\r\n const nextItems = value\r\n .map((item) => toGalleryItem(item))\r\n .filter(Boolean) as GalleryItem[];\r\n\r\n setImages((prev) => {\r\n prev.forEach((img) => {\r\n if (img.createdBlobUrl) {\r\n URL.revokeObjectURL(img.createdBlobUrl);\r\n }\r\n });\r\n return nextItems;\r\n });\r\n }, [value]);\r\n\r\n const remainingSlots =\r\n typeof maxImages === \"number\" && maxImages > 0\r\n ? Math.max(maxImages - images.length, 0)\r\n : Number.POSITIVE_INFINITY;\r\n\r\n const closeCropModal = () => {\r\n setCropModalOpen(false);\r\n if (cropSourceUrlRef.current) {\r\n URL.revokeObjectURL(cropSourceUrlRef.current);\r\n cropSourceUrlRef.current = \"\";\r\n }\r\n setCropSource(\"\");\r\n setCropTargetId(null);\r\n\r\n if (inputRef.current) {\r\n inputRef.current.value = \"\";\r\n }\r\n };\r\n\r\n const openCropModal = (item: GalleryItem) => {\r\n setCropSource(item.preview);\r\n setSelectedFileType(item.file?.type || \"image/jpeg\");\r\n setSelectedFileName(\r\n (item.file?.name || \"cropped-image\").replace(/\\.[^/.]+$/, \"\"),\r\n );\r\n setCropTargetId(item.id);\r\n setCropModalOpen(true);\r\n };\r\n\r\n const handleCroppedImage = (croppedFile: File) => {\r\n const preview = URL.createObjectURL(croppedFile);\r\n\r\n setImages((prev) => {\r\n const next = prev.map((img) => {\r\n if (img.id !== cropTargetId) {\r\n return img;\r\n }\r\n\r\n if (img.createdBlobUrl) {\r\n URL.revokeObjectURL(img.createdBlobUrl);\r\n }\r\n\r\n return {\r\n ...img,\r\n file: croppedFile,\r\n preview,\r\n createdBlobUrl: preview,\r\n };\r\n });\r\n\r\n onChange?.(\r\n next.map((img) => {\r\n if (img.file) {\r\n return img.file;\r\n }\r\n return img.preview;\r\n }),\r\n );\r\n\r\n return next;\r\n });\r\n\r\n closeCropModal();\r\n };\r\n\r\n const addFiles = (files: FileList | null) => {\r\n if (!files || files.length === 0 || remainingSlots === 0) {\r\n return;\r\n }\r\n\r\n const selected = Array.from(files)\r\n .filter((file) => file.type.includes(\"image/\"))\r\n .slice(0, remainingSlots);\r\n\r\n if (selected.length === 0) {\r\n return;\r\n }\r\n\r\n const mapped: GalleryItem[] = selected.map((file) => {\r\n const preview = URL.createObjectURL(file);\r\n return {\r\n id: `${Date.now()}-${Math.random()}`,\r\n file,\r\n preview,\r\n createdBlobUrl: preview,\r\n };\r\n });\r\n\r\n setImages((prev) => {\r\n const next = [...prev, ...mapped];\r\n onChange?.(\r\n next.map((img) => {\r\n if (img.file) {\r\n return img.file;\r\n }\r\n return img.preview;\r\n }),\r\n );\r\n return next;\r\n });\r\n\r\n if (inputRef.current) {\r\n inputRef.current.value = \"\";\r\n }\r\n };\r\n\r\n const removeImage = (idToRemove: string) => {\r\n setImages((prev) => {\r\n const target = prev.find((img) => img.id === idToRemove);\r\n if (target?.createdBlobUrl) {\r\n URL.revokeObjectURL(target.createdBlobUrl);\r\n }\r\n const next = prev.filter((img) => img.id !== idToRemove);\r\n onChange?.(\r\n next.map((img) => {\r\n if (img.file) {\r\n return img.file;\r\n }\r\n return img.preview;\r\n }),\r\n );\r\n return next;\r\n });\r\n\r\n if (inputRef.current) {\r\n inputRef.current.value = \"\";\r\n }\r\n };\r\n\r\n const handleReplaceClick = (idToReplace: string) => {\r\n setCropTargetId(idToReplace);\r\n replaceInputRef.current?.click();\r\n };\r\n\r\n const handleReplaceImage = (files: FileList | null) => {\r\n if (!files || files.length === 0 || !cropTargetId) {\r\n return;\r\n }\r\n\r\n const file = Array.from(files).find((item) => item.type.includes(\"image/\"));\r\n if (!file) {\r\n return;\r\n }\r\n\r\n const preview = URL.createObjectURL(file);\r\n\r\n setImages((prev) => {\r\n const next = prev.map((img) => {\r\n if (img.id !== cropTargetId) {\r\n return img;\r\n }\r\n\r\n if (img.createdBlobUrl) {\r\n URL.revokeObjectURL(img.createdBlobUrl);\r\n }\r\n\r\n return {\r\n ...img,\r\n file,\r\n preview,\r\n createdBlobUrl: preview,\r\n };\r\n });\r\n\r\n onChange?.(\r\n next.map((img) => {\r\n if (img.file) {\r\n return img.file;\r\n }\r\n return img.preview;\r\n }),\r\n );\r\n\r\n return next;\r\n });\r\n\r\n setCropTargetId(null);\r\n if (replaceInputRef.current) {\r\n replaceInputRef.current.value = \"\";\r\n }\r\n };\r\n\r\n const handleDragOver = (e: React.DragEvent<HTMLDivElement>) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(true);\r\n };\r\n\r\n const handleDragLeave = (e: React.DragEvent<HTMLDivElement>) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(false);\r\n };\r\n\r\n const handleDrop = (e: React.DragEvent<HTMLDivElement>) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(false);\r\n addFiles(e.dataTransfer?.files || null);\r\n };\r\n\r\n const handleButtonClick = () => {\r\n inputRef.current?.click();\r\n };\r\n\r\n const canSelectMore =\r\n typeof maxImages === \"number\" && maxImages > 0\r\n ? images.length < maxImages\r\n : true;\r\n\r\n return (\r\n <>\r\n <div\r\n key={name}\r\n className={joinClasses(\r\n crudClasses.mediaPicker.multiImage,\r\n crudClasses.field.wrapper,\r\n parentClass || \"col-span-12\",\r\n )}\r\n >\r\n <InputLabel label={label} required={required} />\r\n <div\r\n className={joinClasses(\r\n crudClasses.mediaPicker.dropzone,\r\n \"relative rounded-md p-2 transition-all\",\r\n isDragging\r\n ? \"border-2 border-dashed border-blue-500 bg-blue-50 dark:bg-blue-900/20\"\r\n : \"border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-800\",\r\n errorMessage ? \"border-red-500\" : \"\",\r\n )}\r\n onDragOver={handleDragOver}\r\n onDragLeave={handleDragLeave}\r\n onDrop={handleDrop}\r\n id={`field-${name}`}\r\n >\r\n <input\r\n ref={inputRef}\r\n id={id}\r\n type=\"file\"\r\n accept={accept}\r\n multiple\r\n onChange={(e) => addFiles(e.target.files)}\r\n required={required && images.length === 0}\r\n className=\"absolute opacity-0 pointer-events-none h-1 w-1\"\r\n />\r\n <input\r\n ref={replaceInputRef}\r\n type=\"file\"\r\n accept={accept}\r\n onChange={(e) => handleReplaceImage(e.target.files)}\r\n className=\"absolute opacity-0 pointer-events-none h-1 w-1\"\r\n />\r\n\r\n {images.length === 0 ? (\r\n <div className=\"flex items-center space-x-4\">\r\n <div className=\"rounded-full bg-gray-100 dark:bg-gray-700 h-20 w-20 flex items-center justify-center\">\r\n <Icon\r\n icon=\"ri:multi-image-fill\"\r\n className=\"text-gray-400 w-10 h-10\"\r\n />\r\n </div>\r\n <div className=\"flex flex-col items-center space-y-1\">\r\n <ButtonComponent\r\n type=\"button\"\r\n onClick={handleButtonClick}\r\n variant=\"outlined\"\r\n color=\"default\"\r\n >\r\n <span className=\"text-sm font-medium\">Choose Images</span>\r\n </ButtonComponent>\r\n\r\n {dragDrop && (\r\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">\r\n or drag and drop your images here\r\n </p>\r\n )}\r\n </div>\r\n </div>\r\n ) : (\r\n <>\r\n <div className=\"flex items-center justify-between gap-2 mb-3\">\r\n <ButtonComponent\r\n type=\"button\"\r\n onClick={handleButtonClick}\r\n disabled={!canSelectMore}\r\n variant=\"outlined\"\r\n color=\"default\"\r\n >\r\n <span className=\"text-sm font-medium\">Upload Images</span>\r\n </ButtonComponent>\r\n\r\n <span className=\"text-xs text-gray-500 dark:text-gray-400\">\r\n {maxImages\r\n ? `${images.length}/${maxImages}`\r\n : `${images.length} selected`}\r\n </span>\r\n </div>\r\n\r\n <div className=\"grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 gap-3\">\r\n {images.map((img) => (\r\n <div\r\n key={img.id}\r\n className=\"relative group rounded-md overflow-hidden border border-gray-200 dark:border-gray-700\"\r\n >\r\n <img\r\n src={img.preview}\r\n alt=\"preview\"\r\n className=\"w-full h-28 object-cover\"\r\n />\r\n <div className=\"absolute top-2 right-2 flex items-center gap-1.5 opacity-100 sm:opacity-0 sm:group-hover:opacity-100 transition-opacity\">\r\n <button\r\n type=\"button\"\r\n onClick={() => handleReplaceClick(img.id)}\r\n className=\"w-7 h-7 rounded-full bg-white/90 text-gray-800 hover:bg-white flex items-center justify-center shadow\"\r\n aria-label=\"Replace image\"\r\n >\r\n <Icon icon=\"solar:refresh-bold\" className=\"w-4 h-4\" />\r\n </button>\r\n {cropImage && (\r\n <button\r\n type=\"button\"\r\n onClick={() => openCropModal(img)}\r\n className=\"w-7 h-7 rounded-full bg-white/90 text-gray-800 hover:bg-white flex items-center justify-center shadow\"\r\n aria-label=\"Crop image\"\r\n >\r\n <Icon icon=\"solar:crop-bold\" className=\"w-4 h-4\" />\r\n </button>\r\n )}\r\n <button\r\n type=\"button\"\r\n onClick={() => removeImage(img.id)}\r\n className=\"w-7 h-7 rounded-full bg-red-500/95 text-white hover:bg-red-600 flex items-center justify-center shadow\"\r\n aria-label=\"Delete image\"\r\n >\r\n <Icon\r\n icon=\"solar:trash-bin-trash-bold\"\r\n className=\"w-4 h-4\"\r\n />\r\n </button>\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </>\r\n )}\r\n\r\n {dragDrop && isDragging && images.length === 0 && (\r\n <div className=\"absolute inset-0 flex items-center justify-center pointer-events-none bg-blue-500/10 rounded-lg\">\r\n <span className=\"text-blue-600 dark:text-blue-400 font-semibold text-lg bg-white dark:bg-gray-800 px-4 py-2 rounded-lg shadow-lg\">\r\n Drop images here\r\n </span>\r\n </div>\r\n )}\r\n </div>\r\n {errorMessage && (\r\n <span\r\n className={joinClasses(\r\n crudClasses.field.error,\r\n \"text-red-500 text-xs mt-1\",\r\n )}\r\n >\r\n {errorMessage}\r\n </span>\r\n )}\r\n </div>\r\n\r\n <ImageCropperModal\r\n isOpen={cropModalOpen}\r\n imageSrc={cropSource}\r\n fileType={selectedFileType}\r\n fileName={selectedFileName}\r\n onClose={closeCropModal}\r\n onApply={handleCroppedImage}\r\n aspect={Number(aspect)}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport default MultiImagePicker;\r\n","import { useEffect } from \"react\";\r\nimport { X } from \"lucide-react\";\r\nimport { crudClasses, joinClasses } from \"../../../lib/crudClasses\";\r\n\r\ninterface ImagePreviewProps {\r\n src: string;\r\n alt?: string;\r\n isOpen: boolean;\r\n setIsOpen: (value: boolean) => void;\r\n}\r\n\r\nconst ImagePreview = ({\r\n src,\r\n alt = \"preview\",\r\n isOpen,\r\n setIsOpen,\r\n}: ImagePreviewProps) => {\r\n const closePreview = () => setIsOpen(false);\r\n\r\n useEffect(() => {\r\n const handleEsc = (e: KeyboardEvent) => {\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 <div\r\n className={joinClasses(\r\n crudClasses.imagePreview.root,\r\n \"fixed inset-0 z-50 flex items-center justify-center bg-black/70 dark:bg-black/80 backdrop-blur-sm animate-in fade-in duration-200\",\r\n )}\r\n onClick={closePreview}\r\n >\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 <div\r\n className={joinClasses(\r\n crudClasses.imagePreview.container,\r\n \"max-w-5xl w-full px-4 transform transition-all duration-200 scale-95 animate-in zoom-in-95\",\r\n )}\r\n onClick={(e) => e.stopPropagation()}\r\n >\r\n <img\r\n src={src}\r\n alt={alt}\r\n className={joinClasses(\r\n crudClasses.imagePreview.image,\r\n \"w-full max-h-[90vh] object-contain rounded-xl\",\r\n )}\r\n />\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default ImagePreview;\r\n","import { User } from \"lucide-react\";\r\nimport { useState } from \"react\";\r\nimport ImagePreview from \"../../Table/components/ImagePreview\";\r\nimport { crudClasses, joinClasses } from \"../../../lib/crudClasses\";\r\n\r\ninterface GroupRowProps {\r\n col: Record<string, any>;\r\n data: Record<string, any>;\r\n uiVariant?: \"default\" | \"card\" | \"split\";\r\n styleConfig?: {\r\n rowClass?: string;\r\n groupClass?: string;\r\n labelClass?: string;\r\n valueClass?: string;\r\n iconClass?: string;\r\n };\r\n}\r\n\r\nconst GroupRow = ({\r\n col,\r\n data,\r\n uiVariant = \"default\",\r\n styleConfig = {},\r\n}: GroupRowProps) => {\r\n const title = data[col.titleKey];\r\n const subtitle = data[col.subtitleKey];\r\n const image = data[col.imageKey];\r\n const fallback_icon = col.fallback_icon;\r\n\r\n const [targetImage, setTargetImage] = useState<{\r\n src: string;\r\n alt: string;\r\n } | null>(null);\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const openPreview = (img: { src: any; alt: string }) => {\r\n let imageObj = img;\r\n if (img && img.src instanceof File) {\r\n imageObj = { ...img, src: URL.createObjectURL(img.src) };\r\n }\r\n setTargetImage(imageObj as { src: string; alt: string });\r\n setIsOpen(true);\r\n };\r\n\r\n const renderAvatar = (size: \"sm\" | \"md\" | \"lg\") => {\r\n const sizeMap = {\r\n sm: { img: \"w-8 h-8\", wrap: \"w-8 h-8\", icon: \"w-4 h-4\" },\r\n md: { img: \"w-12 h-12\", wrap: \"w-12 h-12\", icon: \"w-6 h-6\" },\r\n lg: { img: \"w-16 h-16\", wrap: \"w-16 h-16\", icon: \"w-8 h-8\" },\r\n };\r\n const s = sizeMap[size];\r\n if (image) {\r\n return (\r\n <img\r\n src={image instanceof File ? URL.createObjectURL(image) : image}\r\n alt={title}\r\n onClick={() => openPreview({ src: image, alt: title })}\r\n className={`${s.img} cursor-pointer rounded-full object-cover border-2 border-white dark:border-gray-700 shadow flex-shrink-0`}\r\n />\r\n );\r\n }\r\n if (fallback_icon) {\r\n return fallback_icon instanceof Function\r\n ? fallback_icon(data)\r\n : fallback_icon;\r\n }\r\n return (\r\n <div\r\n className={`${s.wrap} flex items-center justify-center rounded-full border-2 border-gray-300 dark:border-gray-600 bg-gray-200 dark:bg-gray-600 flex-shrink-0`}\r\n >\r\n <User className={`${s.icon} text-gray-400`} />\r\n </div>\r\n );\r\n };\r\n\r\n // ── CARD variant ──────────────────────────────────────────────────────────────\r\n // Full-width profile banner card with gradient + decorative circle\r\n if (uiVariant === \"card\") {\r\n return (\r\n <>\r\n {isOpen && targetImage && (\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 <div\r\n className={joinClasses(\r\n crudClasses.details.row,\r\n \"col-span-12 relative overflow-hidden rounded-xl bg-gradient-to-r from-primary/10 via-primary/5 to-transparent dark:from-primary/20 dark:via-primary/10 border border-primary/20 dark:border-primary/30 p-5 flex items-center gap-4\",\r\n styleConfig.rowClass || \"\",\r\n styleConfig.groupClass || \"\",\r\n col.blockClass || \"\",\r\n )}\r\n >\r\n {/* Decorative background circle */}\r\n <div className=\"pointer-events-none absolute -right-6 -top-6 w-32 h-32 rounded-full bg-primary/8 dark:bg-primary/12\" />\r\n <div className=\"pointer-events-none absolute -right-2 -bottom-4 w-20 h-20 rounded-full bg-primary/5\" />\r\n {renderAvatar(\"lg\")}\r\n <div className=\"min-w-0 z-10\">\r\n <h3\r\n className={`text-lg font-bold text-gray-900 dark:text-white truncate ${styleConfig.valueClass || \"\"}`}\r\n >\r\n {title}\r\n </h3>\r\n <p\r\n className={`text-sm text-primary/70 dark:text-primary/60 font-medium truncate ${styleConfig.labelClass || \"\"}`}\r\n >\r\n {subtitle}\r\n </p>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n }\r\n\r\n // ── SPLIT variant ─────────────────────────────────────────────────────────────\r\n // Header row: full-width soft gradient banner before the property rows\r\n if (uiVariant === \"split\") {\r\n return (\r\n <>\r\n {isOpen && targetImage && (\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 <div\r\n className={joinClasses(\r\n crudClasses.details.row,\r\n \"flex items-center gap-3 px-5 py-4 bg-gradient-to-r from-primary/8 via-primary/4 to-transparent dark:from-primary/15 dark:via-primary/8\",\r\n styleConfig.rowClass || \"\",\r\n styleConfig.groupClass || \"\",\r\n col.blockClass || \"\",\r\n )}\r\n >\r\n {renderAvatar(\"md\")}\r\n <div className=\"min-w-0\">\r\n <h3\r\n className={`text-base font-bold text-gray-900 dark:text-white truncate ${styleConfig.valueClass || \"\"}`}\r\n >\r\n {title}\r\n </h3>\r\n <p\r\n className={`text-xs font-semibold text-primary/70 dark:text-primary/60 truncate ${styleConfig.labelClass || \"\"}`}\r\n >\r\n {subtitle}\r\n </p>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n }\r\n\r\n // ── DEFAULT variant ───────────────────────────────────────────────────────────\r\n return (\r\n <>\r\n {isOpen && targetImage && (\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 <div\r\n className={joinClasses(\r\n crudClasses.details.row,\r\n \"col-span-12 flex items-center space-x-4 p-4 rounded-xl bg-gray-100 dark:bg-gray-900\",\r\n styleConfig.rowClass || \"\",\r\n styleConfig.groupClass || \"\",\r\n col.blockClass || \"\",\r\n )}\r\n >\r\n {renderAvatar(\"lg\")}\r\n <div>\r\n <h3\r\n className={`text-xl font-semibold text-gray-900 dark:text-white ${styleConfig.valueClass || \"\"}`}\r\n >\r\n {title}\r\n </h3>\r\n <p\r\n className={`text-sm text-gray-500 dark:text-gray-400 ${styleConfig.labelClass || \"\"}`}\r\n >\r\n {subtitle}\r\n </p>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default GroupRow;\r\n","import { User } from \"lucide-react\";\r\nimport { useState } from \"react\";\r\nimport ImagePreview from \"../../Table/components/ImagePreview\";\r\nimport { crudClasses, joinClasses } from \"../../../lib/crudClasses\";\r\n\r\ninterface CardGroupProps {\r\n col: Record<string, any>;\r\n data: Record<string, any>;\r\n uiVariant?: \"default\" | \"card\" | \"split\";\r\n styleConfig?: {\r\n rowClass?: string;\r\n cardGroupClass?: string;\r\n labelClass?: string;\r\n valueClass?: string;\r\n iconClass?: string;\r\n };\r\n}\r\n\r\nconst CardGroup = ({\r\n col,\r\n data,\r\n uiVariant = \"default\",\r\n styleConfig = {},\r\n}: CardGroupProps) => {\r\n const title = data[col.titleKey];\r\n const subtitle = data[col.subtitleKey];\r\n const image = data[col.imageKey];\r\n const label = col.label;\r\n const Icon = col?.icon;\r\n const fallback_icon = col.fallback_icon;\r\n\r\n const [targetImage, setTargetImage] = useState<{\r\n src: string;\r\n alt: string;\r\n } | null>(null);\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const openPreview = (img: { src: any; alt: string }) => {\r\n let imageObj = img;\r\n if (img && img.src instanceof File) {\r\n imageObj = { ...img, src: URL.createObjectURL(img.src) };\r\n }\r\n setTargetImage(imageObj as { src: string; alt: string });\r\n setIsOpen(true);\r\n };\r\n\r\n const renderMiniAvatar = () => {\r\n if (image) {\r\n return (\r\n <img\r\n src={image instanceof File ? URL.createObjectURL(image) : image}\r\n alt={title}\r\n onClick={() => openPreview({ src: image, alt: title })}\r\n className=\"w-8 h-8 cursor-pointer rounded-full object-cover border-2 border-gray-200 dark:border-gray-700 flex-shrink-0\"\r\n />\r\n );\r\n }\r\n if (fallback_icon) {\r\n return fallback_icon instanceof Function\r\n ? fallback_icon(data)\r\n : fallback_icon;\r\n }\r\n return (\r\n <div className=\"w-8 h-8 flex items-center justify-center rounded-full border-2 border-gray-300 dark:border-gray-700 bg-gray-200 dark:bg-gray-600 flex-shrink-0\">\r\n <User className=\"w-5 h-5 text-gray-400\" />\r\n </div>\r\n );\r\n };\r\n\r\n // ── CARD variant ──────────────────────────────────────────────────────────────\r\n // Standalone card: icon badge top-left, label, then inline mini avatar + name\r\n if (uiVariant === \"card\") {\r\n return (\r\n <>\r\n {isOpen && targetImage && (\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 <div\r\n className={joinClasses(\r\n crudClasses.details.row,\r\n col.blockClass || \"col-span-6\",\r\n \"group bg-white dark:bg-gray-800 rounded-xl border border-gray-100 dark:border-gray-700/60 shadow-sm hover:shadow-md hover:-translate-y-0.5 transition-all duration-200 p-4 flex flex-col gap-2.5\",\r\n styleConfig.rowClass || \"\",\r\n styleConfig.cardGroupClass || \"\",\r\n )}\r\n >\r\n {Icon && (\r\n <div\r\n className={`w-8 h-8 rounded-lg bg-primary/10 dark:bg-primary/20 flex items-center justify-center text-primary flex-shrink-0 [&>svg]:w-4 [&>svg]:h-4 ${styleConfig.iconClass || \"\"}`}\r\n >\r\n {Icon}\r\n </div>\r\n )}\r\n <p\r\n className={`text-xs font-semibold uppercase tracking-wider text-gray-400 dark:text-gray-500 leading-none ${styleConfig.labelClass || \"\"}`}\r\n >\r\n {label}\r\n </p>\r\n <div className=\"flex items-center gap-2 mt-auto\">\r\n {renderMiniAvatar()}\r\n <div className=\"min-w-0\">\r\n <p\r\n className={`text-sm font-semibold text-gray-800 dark:text-gray-100 truncate ${styleConfig.valueClass || \"\"}`}\r\n >\r\n {title}\r\n </p>\r\n {subtitle && (\r\n <p className=\"text-xs text-gray-400 dark:text-gray-500 truncate\">\r\n {subtitle}\r\n </p>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n }\r\n\r\n // ── SPLIT variant ─────────────────────────────────────────────────────────────\r\n // Property-sheet row: left label band | right value band with mini avatar\r\n if (uiVariant === \"split\") {\r\n return (\r\n <>\r\n {isOpen && targetImage && (\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 <div\r\n className={joinClasses(\r\n crudClasses.details.row,\r\n \"flex items-stretch min-h-[52px]\",\r\n styleConfig.rowClass || \"\",\r\n styleConfig.cardGroupClass || \"\",\r\n col.blockClass || \"\",\r\n )}\r\n >\r\n {/* Label band */}\r\n <div className=\"w-[42%] flex-shrink-0 flex items-center gap-2 px-4 py-3 bg-gray-50 dark:bg-gray-800/80 border-r border-gray-200 dark:border-gray-700\">\r\n {Icon && (\r\n <span\r\n className={`text-primary/60 dark:text-primary/50 flex-shrink-0 [&>svg]:w-3.5 [&>svg]:h-3.5 ${styleConfig.iconClass || \"\"}`}\r\n >\r\n {Icon}\r\n </span>\r\n )}\r\n <p\r\n className={`text-xs font-semibold uppercase tracking-wide text-gray-500 dark:text-gray-400 leading-tight ${styleConfig.labelClass || \"\"}`}\r\n >\r\n {label}\r\n </p>\r\n </div>\r\n {/* Value band with mini avatar */}\r\n <div className=\"flex-1 flex items-center gap-2.5 px-4 py-3 bg-white dark:bg-gray-900\">\r\n {renderMiniAvatar()}\r\n <div className=\"min-w-0\">\r\n <p\r\n className={`text-sm text-gray-800 dark:text-gray-100 break-words ${styleConfig.valueClass || \"\"}`}\r\n >\r\n {title}\r\n </p>\r\n {subtitle && (\r\n <p className=\"text-xs text-gray-400 dark:text-gray-500 truncate\">\r\n {subtitle}\r\n </p>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n }\r\n\r\n // ── DEFAULT variant ───────────────────────────────────────────────────────────\r\n return (\r\n <>\r\n {isOpen && targetImage && (\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 <div\r\n className={joinClasses(\r\n crudClasses.details.row,\r\n \"col-span-12 flex items-center space-x-4 p-4 rounded-xl bg-gray-100 dark:bg-gray-900\",\r\n styleConfig.rowClass || \"\",\r\n styleConfig.cardGroupClass || \"\",\r\n col.blockClass || \"\",\r\n )}\r\n >\r\n {Icon && (\r\n <div className={`flex-shrink-0 ${styleConfig.iconClass || \"\"}`}>\r\n {Icon}\r\n </div>\r\n )}\r\n <div className=\"flex-1 min-w-0\">\r\n <p\r\n className={`text-sm font-medium text-gray-500 dark:text-gray-400 ${styleConfig.labelClass || \"\"}`}\r\n >\r\n {label}\r\n </p>\r\n <div className=\"flex items-center mt-1\">\r\n {renderMiniAvatar()}\r\n <div className=\"ml-2\">\r\n <p\r\n className={`mb-0 text-sm text-gray-900 dark:text-white break-words ${styleConfig.valueClass || \"\"}`}\r\n >\r\n {title}\r\n </p>\r\n <p\r\n className={`text-xs text-gray-500 dark:text-gray-400 ${styleConfig.labelClass || \"\"}`}\r\n >\r\n {subtitle}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\nexport default CardGroup;\r\n","import { crudClasses, joinClasses } from \"../../lib/crudClasses\";\r\n\r\nconst BADGE_COLORS: Record<string, { bg: string; border: string }> = {\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: Record<string, string> = {\r\n contained: \"bg\",\r\n outline: \"border !bg-transparent\",\r\n soft: \"bg opacity-90\",\r\n};\r\n\r\ninterface ChipProps {\r\n label: string;\r\n variant?: string;\r\n color?: string;\r\n className?: string;\r\n}\r\n\r\nconst Chip = ({\r\n label,\r\n variant = \"contained\",\r\n color = \"green\",\r\n className = \"\",\r\n}: ChipProps) => {\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={joinClasses(\r\n crudClasses.chip.root,\r\n \"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 >\r\n {label}\r\n </span>\r\n );\r\n};\r\n\r\nexport default Chip;\r\n","import { useState } from \"react\";\r\nimport Chip from \"../../Chip/Chip\";\r\nimport { formatDate } from \"../../../lib/utils\";\r\nimport ImagePreview from \"../../Table/components/ImagePreview\";\r\nimport { crudClasses, joinClasses } from \"../../../lib/crudClasses\";\r\n\r\ninterface DetailRowProps {\r\n col: Record<string, any>;\r\n data: Record<string, any>;\r\n uiVariant?: \"default\" | \"card\" | \"split\";\r\n styleConfig?: {\r\n rowClass?: string;\r\n labelClass?: string;\r\n valueClass?: string;\r\n iconClass?: string;\r\n mediaGridClass?: string;\r\n };\r\n}\r\n\r\nconst DetailRow = ({\r\n col,\r\n data,\r\n uiVariant = \"default\",\r\n styleConfig = {},\r\n}: DetailRowProps) => {\r\n const [targetImage, setTargetImage] = useState<{\r\n src: string;\r\n alt: string;\r\n } | null>(null);\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const Icon = col?.icon;\r\n const label = col.label;\r\n let value = data[col.key];\r\n const type = col.type;\r\n const variant = col.variant || \"outline\";\r\n let color = col.defaultColor;\r\n\r\n if (type === \"chip\" && col.chipOptions?.length > 0) {\r\n const chipObj = col?.chipOptions.find((obj: any) => 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 const getImageSource = (image: any): string => {\r\n if (!image) return \"\";\r\n if (typeof image === \"string\") return image;\r\n if (image instanceof File) return URL.createObjectURL(image);\r\n if (typeof image === \"object\") {\r\n if (typeof image.preview === \"string\") return image.preview;\r\n if (typeof image.src === \"string\") return image.src;\r\n if (image.src instanceof File) return URL.createObjectURL(image.src);\r\n if (image.file instanceof File) return URL.createObjectURL(image.file);\r\n }\r\n return \"\";\r\n };\r\n\r\n const openPreview = (src: string, alt: string) => {\r\n setTargetImage({ src, alt });\r\n setIsOpen(true);\r\n };\r\n\r\n const renderValue = (\r\n wrapClass = \"text-sm text-gray-900 dark:text-white break-words\",\r\n ) => {\r\n if (type === \"chip\") {\r\n return (\r\n <Chip label={value} variant={variant} color={color} className=\"mt-1\" />\r\n );\r\n }\r\n if (type === \"tinyEditor\") {\r\n return (\r\n <p\r\n className={`${wrapClass} ${styleConfig.valueClass || \"\"}`}\r\n dangerouslySetInnerHTML={{ __html: value }}\r\n />\r\n );\r\n }\r\n if (type === \"video\") {\r\n return value ? (\r\n <video\r\n key={value instanceof File ? URL.createObjectURL(value) : value}\r\n controls\r\n src={value instanceof File ? URL.createObjectURL(value) : value}\r\n onClick={(e) => e.stopPropagation()}\r\n className=\"shadow-sm mt-1 w-full max-w-xs max-h-[250px] rounded-md \"\r\n />\r\n ) : (\r\n <p className=\"text-sm text-gray-400\">N/A</p>\r\n );\r\n }\r\n if (type === \"audio\") {\r\n return value ? (\r\n <audio\r\n key={value instanceof File ? URL.createObjectURL(value) : value}\r\n controls\r\n src={value instanceof File ? URL.createObjectURL(value) : value}\r\n onClick={(e) => e.stopPropagation()}\r\n className=\"shadow-sm rounded-full mt-1 w-full max-w-xs\"\r\n />\r\n ) : (\r\n <p className=\"text-sm text-gray-400\">N/A</p>\r\n );\r\n }\r\n if (type === \"multiImage\") {\r\n return Array.isArray(value) && value.length > 0 ? (\r\n <div\r\n className={`mt-1 grid grid-cols-3 sm:grid-cols-4 gap-2 ${styleConfig.mediaGridClass || \"\"}`}\r\n >\r\n {value.map((img: any, idx: number) => {\r\n const src = getImageSource(img);\r\n if (!src) return null;\r\n return (\r\n <button\r\n key={`${src}-${idx}`}\r\n type=\"button\"\r\n onClick={() => openPreview(src, `Gallery ${idx + 1}`)}\r\n className=\"w-full h-16 rounded-lg overflow-hidden border border-gray-200 dark:border-gray-700 hover:border-primary/50 transition-colors\"\r\n >\r\n <img\r\n src={src}\r\n alt={`gallery-${idx + 1}`}\r\n className=\"w-full h-full object-cover\"\r\n />\r\n </button>\r\n );\r\n })}\r\n </div>\r\n ) : (\r\n <p className=\"text-sm text-gray-400\">N/A</p>\r\n );\r\n }\r\n return (\r\n <p className={`${wrapClass} ${styleConfig.valueClass || \"\"}`}>\r\n {type === \"date\" ? (\r\n <span>{formatDate(value, col.format || \"DD MMM YYYY\")}</span>\r\n ) : (\r\n <span>{value || \"N/A\"}</span>\r\n )}\r\n </p>\r\n );\r\n };\r\n\r\n // ── CARD variant ─────────────────────────────────────────────────────────────\r\n // Standalone elevated card per field — icon badge top-left, label, bold value\r\n if (uiVariant === \"card\") {\r\n return (\r\n <>\r\n <div\r\n className={joinClasses(\r\n crudClasses.details.row,\r\n col.blockClass || \"col-span-6\",\r\n \"group bg-white dark:bg-gray-800 rounded-xl border border-gray-100 dark:border-gray-700/60 shadow-sm hover:shadow-md hover:-translate-y-0.5 transition-all duration-200 p-4 flex flex-col gap-2.5\",\r\n styleConfig.rowClass || \"\",\r\n )}\r\n >\r\n {Icon && (\r\n <div\r\n className={`w-8 h-8 rounded-lg bg-primary/10 dark:bg-primary/20 flex items-center justify-center text-primary flex-shrink-0 [&>svg]:w-4 [&>svg]:h-4 ${styleConfig.iconClass || \"\"}`}\r\n >\r\n {Icon}\r\n </div>\r\n )}\r\n <p\r\n className={`text-xs font-semibold uppercase tracking-wider text-gray-400 dark:text-gray-500 leading-none ${styleConfig.labelClass || \"\"}`}\r\n >\r\n {label}\r\n </p>\r\n <div className=\"mt-auto\">\r\n {renderValue(\r\n \"text-sm font-semibold text-gray-800 dark:text-gray-100 break-words leading-snug\",\r\n )}\r\n </div>\r\n </div>\r\n {isOpen && targetImage && (\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\n // ── SPLIT variant ─────────────────────────────────────────────────────────────\r\n // Property-sheet row: left=muted label band | right=white value band\r\n if (uiVariant === \"split\") {\r\n return (\r\n <>\r\n <div\r\n className={joinClasses(\r\n crudClasses.details.row,\r\n \"flex items-stretch min-h-[52px]\",\r\n styleConfig.rowClass || \"\",\r\n col.blockClass || \"\",\r\n )}\r\n >\r\n {/* Label band */}\r\n <div className=\"w-[42%] flex-shrink-0 flex items-center gap-2 px-4 py-3 bg-gray-50 dark:bg-gray-800/80 border-r border-gray-200 dark:border-gray-700\">\r\n {Icon && (\r\n <span\r\n className={`text-primary/60 dark:text-primary/50 flex-shrink-0 [&>svg]:w-3.5 [&>svg]:h-3.5 ${styleConfig.iconClass || \"\"}`}\r\n >\r\n {Icon}\r\n </span>\r\n )}\r\n <p\r\n className={`text-xs font-semibold uppercase tracking-wide text-gray-500 dark:text-gray-400 leading-tight ${styleConfig.labelClass || \"\"}`}\r\n >\r\n {label}\r\n </p>\r\n </div>\r\n {/* Value band */}\r\n <div className=\"flex-1 flex items-center px-4 py-3 bg-white dark:bg-gray-900\">\r\n {renderValue(\r\n \"text-sm text-gray-800 dark:text-gray-100 break-words\",\r\n )}\r\n </div>\r\n </div>\r\n {isOpen && targetImage && (\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\n // ── DEFAULT variant ───────────────────────────────────────────────────────────\r\n return (\r\n <>\r\n <div\r\n className={joinClasses(\r\n crudClasses.details.row,\r\n \"col-span-12 flex items-center space-x-4 p-4 rounded-xl bg-gray-100 dark:bg-gray-900\",\r\n styleConfig.rowClass || \"\",\r\n col.blockClass || \"\",\r\n )}\r\n >\r\n {Icon && (\r\n <div className={`flex-shrink-0 ${styleConfig.iconClass || \"\"}`}>\r\n {Icon}\r\n </div>\r\n )}\r\n <div className=\"flex-1 min-w-0\">\r\n <p\r\n className={`text-sm font-medium text-gray-500 dark:text-gray-400 ${styleConfig.labelClass || \"\"}`}\r\n >\r\n {label}\r\n </p>\r\n {renderValue(\r\n \"mt-1 text-sm text-gray-900 dark:text-white break-words\",\r\n )}\r\n </div>\r\n </div>\r\n {isOpen && targetImage && (\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 DetailRow;\r\n","import { crudClasses, joinClasses } from \"../../../lib/crudClasses\";\r\nimport InputLabel from \"./InputLabel\";\r\n\r\ninterface RadioOption {\r\n label: string;\r\n value: any;\r\n}\r\n\r\ninterface RadioProps {\r\n value: any;\r\n onChange: (value: any) => void;\r\n text?: string;\r\n options: RadioOption[];\r\n label?: string;\r\n required?: boolean;\r\n name: string;\r\n disabled?: boolean;\r\n parentClass?: string;\r\n errorMessage?: string;\r\n}\r\n\r\nconst Radio = ({\r\n value = true,\r\n onChange,\r\n text,\r\n options = [],\r\n label,\r\n required,\r\n name = \"\",\r\n disabled = false,\r\n parentClass = \"\",\r\n errorMessage = \"\",\r\n}: RadioProps) => {\r\n const radioOptions: RadioOption[] =\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\r\n key={name}\r\n className={joinClasses(\r\n crudClasses.field.wrapper,\r\n parentClass || \"col-span-12\",\r\n )}\r\n >\r\n <InputLabel label={label} required={required} />\r\n <div\r\n 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 ${errorMessage ? \"border-red-500\" : \"\"}`}\r\n >\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 <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={String(opt.value)}\r\n disabled={disabled}\r\n id={`field-${name}`}\r\n checked={value === opt.value}\r\n onChange={() => onChange?.(opt.value)}\r\n className={joinClasses(\r\n crudClasses.field.input,\r\n \"w-4 h-4 border-gray-300 cursor-pointer\",\r\n )}\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 {errorMessage && (\r\n <span\r\n className={joinClasses(\r\n crudClasses.field.error,\r\n \"text-red-500 text-xs mt-1\",\r\n )}\r\n >\r\n {errorMessage}\r\n </span>\r\n )}\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default Radio;\r\n","import { Icon } from \"@iconify/react\";\r\nimport React, { useState, useEffect, useRef } from \"react\";\r\nimport InputLabel from \"./InputLabel\";\r\nimport Button from \"../../Button/Button\";\r\nimport { enqueueSnackbar } from \"notistack\";\r\nimport { crudClasses, joinClasses } from \"../../../lib/crudClasses\";\r\n\r\nconst ButtonComponent = Button as React.ComponentType<any>;\r\n\r\ntype MediaValue = File | { file?: File; preview?: string } | string | null;\r\n\r\ninterface VideoPickerProps {\r\n label: string;\r\n value: MediaValue;\r\n onChange: (file: File | null) => void;\r\n required?: boolean;\r\n accept?: string;\r\n id: string;\r\n dragDrop?: boolean;\r\n name: string;\r\n parentClass?: string;\r\n maxSize?: number;\r\n errorMessage?: string;\r\n}\r\n\r\nconst VideoPicker = ({\r\n label = \"\",\r\n value = null,\r\n onChange,\r\n required = false,\r\n accept = \"video/*\",\r\n id,\r\n dragDrop = false,\r\n name = \"\",\r\n parentClass = \"\",\r\n maxSize = 0,\r\n errorMessage = \"\",\r\n}: VideoPickerProps) => {\r\n const [video, setVideo] = useState<{ file?: File; preview?: string } | null>(\r\n null,\r\n );\r\n const [isDragging, setIsDragging] = useState(false);\r\n const inputRef = useRef<HTMLInputElement | null>(null);\r\n\r\n const maxSizeBytes = maxSize * 1024 * 1024;\r\n\r\n useEffect(() => {\r\n if (!value) {\r\n cleanupVideo();\r\n setVideo(null);\r\n return;\r\n }\r\n\r\n if (value instanceof File) {\r\n const preview = URL.createObjectURL(value);\r\n setVideo({ file: value, preview });\r\n\r\n return () => {\r\n URL.revokeObjectURL(preview);\r\n };\r\n } else if (typeof value === \"string\") {\r\n setVideo({ preview: value });\r\n } else if (value?.preview) {\r\n setVideo(value);\r\n }\r\n }, [value]);\r\n\r\n const cleanupVideo = () => {\r\n if (video?.preview && video.preview.startsWith(\"blob:\")) {\r\n URL.revokeObjectURL(video.preview);\r\n }\r\n };\r\n\r\n const handleFileChange = (files: FileList | null) => {\r\n if (!files || files.length === 0) return;\r\n\r\n const file = files[0];\r\n\r\n if (maxSizeBytes && file.size > maxSizeBytes) {\r\n enqueueSnackbar(\r\n `File is too large. Maximum allowed size is ${maxSize} MB`,\r\n {\r\n variant: \"warning\",\r\n },\r\n );\r\n return;\r\n }\r\n\r\n const preview = URL.createObjectURL(file);\r\n cleanupVideo();\r\n setVideo({ file, preview });\r\n onChange?.(file);\r\n };\r\n const removeVideo = (e?: React.MouseEvent<HTMLButtonElement>) => {\r\n if (e) e.stopPropagation();\r\n cleanupVideo();\r\n setVideo(null);\r\n onChange?.(null);\r\n if (inputRef.current) inputRef.current.value = \"\";\r\n };\r\n\r\n const handleDragOver = (e: React.DragEvent<HTMLDivElement>) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(true);\r\n };\r\n\r\n const handleDragLeave = (e: React.DragEvent<HTMLDivElement>) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(false);\r\n };\r\n\r\n const handleDrop = (e: React.DragEvent<HTMLDivElement>) => {\r\n if (!dragDrop) return;\r\n e.preventDefault();\r\n setIsDragging(false);\r\n if (e.dataTransfer?.files?.[0]?.type?.includes(\"video/\")) {\r\n handleFileChange(e.dataTransfer.files);\r\n }\r\n };\r\n\r\n const handleButtonClick = () => {\r\n inputRef.current?.click();\r\n };\r\n\r\n return (\r\n <div\r\n key={name}\r\n className={joinClasses(\r\n crudClasses.mediaPicker.video,\r\n crudClasses.field.wrapper,\r\n parentClass || \"col-span-12\",\r\n )}\r\n >\r\n <InputLabel label={label} required={required} />\r\n <div\r\n className={joinClasses(\r\n crudClasses.mediaPicker.dropzone,\r\n \"relative rounded-lg p-2 transition-all\",\r\n isDragging\r\n ? \"border-2 border-dashed border-blue-500 bg-blue-50 dark:bg-blue-900/20\"\r\n : \"border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-800\",\r\n errorMessage ? \"border-red-500\" : \"\",\r\n )}\r\n onDragOver={handleDragOver}\r\n onDragLeave={handleDragLeave}\r\n onDrop={handleDrop}\r\n id={`field-${name}`}\r\n >\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 && !video}\r\n className=\"absolute opacity-0 pointer-events-none h-[10px]\"\r\n />\r\n\r\n <div\r\n className={`flex items-center space-x-4 transition-all ${\r\n isDragging ? \"opacity-50\" : \"\"\r\n }`}\r\n >\r\n {video ? (\r\n <div className=\"flex items-center space-x-4\">\r\n <div className=\"relative\">\r\n {!required && (\r\n <button\r\n type=\"button\"\r\n onClick={removeVideo}\r\n className=\"absolute -top-2 -right-2 bg-red-500 text-white rounded-full p-1 shadow hover:bg-red-600 z-10\"\r\n >\r\n <Icon icon=\"mdi:close\" className=\"w-3 h-3\" />\r\n </button>\r\n )}\r\n <video\r\n key={video.preview}\r\n src={video.preview}\r\n controls\r\n controlsList=\"nodownload\"\r\n className=\"w-[260px] h-[150px] rounded-md object-cover\"\r\n />\r\n </div>\r\n <ButtonComponent type=\"button\" onClick={handleButtonClick}>\r\n Change Video File\r\n </ButtonComponent>\r\n </div>\r\n ) : (\r\n <div className=\"flex items-center justify-center space-x-4\">\r\n <div className=\"rounded-full bg-gray-100 dark:bg-gray-700 h-20 w-20 flex items-center justify-center\">\r\n <Icon icon=\"mdi:video\" className=\"text-gray-400 w-10 h-10\" />\r\n </div>\r\n\r\n <div className=\"flex flex-col items-center space-y-1\">\r\n <ButtonComponent\r\n type=\"button\"\r\n onClick={handleButtonClick}\r\n variant=\"outlined\"\r\n >\r\n Choose Video File\r\n </ButtonComponent>\r\n\r\n {dragDrop && (\r\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">\r\n or drag and drop your video here\r\n </p>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {dragDrop && isDragging && !video && (\r\n <div className=\"absolute inset-0 flex items-center justify-center pointer-events-none bg-blue-500/10 rounded-lg\">\r\n <span className=\"text-blue-600 dark:text-blue-400 font-semibold text-lg bg-white dark:bg-gray-800 px-4 py-2 rounded-lg shadow-lg\">\r\n Drop video here\r\n </span>\r\n </div>\r\n )}\r\n </div>\r\n {errorMessage && (\r\n <span\r\n className={joinClasses(\r\n crudClasses.field.error,\r\n \"text-red-500 text-xs mt-1\",\r\n )}\r\n >\r\n {errorMessage}\r\n </span>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default VideoPicker;\r\n","import Select from \"./Select\";\r\nimport { Switch } from \"./Switch\";\r\nimport PhoneInput from \"./PhoneInput\";\r\nimport { TextArea } from \"./TextArea\";\r\nimport ImagePicker from \"./ImagePicker\";\r\nimport { Input } from \"./Input\";\r\nimport TinyEditor from \"./TinyEditor\";\r\nimport Checkbox from \"./Checkbox\";\r\nimport AudioPicker from \"./AudioPicker\";\r\nimport MultiImagePicker from \"./MultiImagePicker\";\r\nimport GroupRow from \"../../Details/components/GroupRow\";\r\nimport CardGroup from \"../../Details/components/CardGroup\";\r\nimport DetailRow from \"../../Details/components/DetailRow\";\r\nimport Radio from \"./Radio\";\r\nimport VideoPicker from \"./VideoPicker\";\r\n\r\ninterface FieldConfig {\r\n key: string;\r\n label?: string;\r\n type?: string;\r\n options?: any[];\r\n placeholder?: string;\r\n rows?: number;\r\n inputClass?: string;\r\n search?: boolean;\r\n accept?: string;\r\n text?: string;\r\n required?: boolean;\r\n minLength?: number;\r\n dragDrop?: boolean;\r\n parentClass?: string;\r\n countriesList?: boolean;\r\n defaultCountry?: string;\r\n multiple?: boolean;\r\n dropdownMaxHeight?: number;\r\n editorKey?: string;\r\n fontFamily?: string;\r\n disabled?: boolean;\r\n negativeNumberAllow?: boolean;\r\n defaultValue?: any;\r\n renderCondition?: (formData: Record<string, any>) => boolean;\r\n pattern?: string;\r\n renderType?: string;\r\n cropImage?: boolean;\r\n aspectRatio?: number;\r\n dependencyKey?: string;\r\n mask?: string;\r\n maskApplyOnValue?: boolean;\r\n maxSize?: number;\r\n [key: string]: any;\r\n}\r\n\r\ninterface RenderFieldsProps {\r\n field: FieldConfig;\r\n errorMessage?: string;\r\n formData: Record<string, any>;\r\n handleChange: (key: string, value: any) => void;\r\n}\r\n\r\nconst RenderFields = ({\r\n field,\r\n formData,\r\n handleChange,\r\n errorMessage,\r\n}: RenderFieldsProps) => {\r\n const {\r\n key,\r\n label,\r\n type,\r\n options,\r\n placeholder,\r\n rows,\r\n inputClass,\r\n search,\r\n accept,\r\n text,\r\n required = false,\r\n minLength,\r\n dragDrop,\r\n parentClass,\r\n countriesList,\r\n defaultCountry,\r\n multiple,\r\n dropdownMaxHeight,\r\n editorKey,\r\n fontFamily,\r\n disabled,\r\n negativeNumberAllow,\r\n defaultValue,\r\n renderCondition,\r\n pattern,\r\n renderType,\r\n cropImage,\r\n aspectRatio,\r\n dependencyKey,\r\n mask,\r\n maskApplyOnValue,\r\n maxSize,\r\n } = field;\r\n\r\n let value = formData?.[key];\r\n if (value === undefined || value === null) {\r\n value = \"\";\r\n }\r\n\r\n const finalPlaceholder =\r\n placeholder || (type === \"select\" ? `Select ${label}` : `Enter ${label}`);\r\n\r\n const baseClass =\r\n \"w-full px-3 py-2 rounded-md border border-gray-300 dark:border-gray-600 text-sm focus:outline-none focus:ring-1 focus:ring-blue-200 bg-white text-black dark:bg-gray-700 dark:text-white\";\r\n\r\n if (renderCondition && typeof renderCondition === \"function\") {\r\n const shouldRender = renderCondition(formData);\r\n if (!shouldRender) {\r\n return null;\r\n }\r\n }\r\n\r\n if (renderType && renderType == \"details\") {\r\n switch (type) {\r\n case \"group\":\r\n return <GroupRow col={field} data={formData} />;\r\n case \"cardGroup\":\r\n return <CardGroup col={field} data={formData} />;\r\n default:\r\n return <DetailRow col={field} data={formData} />;\r\n }\r\n }\r\n\r\n switch (type) {\r\n case \"select\":\r\n return (\r\n <Select\r\n options={options || []}\r\n value={value}\r\n formData={formData}\r\n dependencyKey={dependencyKey}\r\n onChange={(val) => handleChange(key, val)}\r\n placeholder={finalPlaceholder}\r\n className={inputClass || \"\"}\r\n search={search}\r\n required={required}\r\n defaultValue={defaultValue}\r\n label={label || \"\"}\r\n name={key}\r\n countriesList={countriesList}\r\n disabled={disabled}\r\n parentClass={parentClass || \"\"}\r\n multiple={multiple}\r\n dropdownMaxHeight={dropdownMaxHeight}\r\n errorMessage={errorMessage}\r\n />\r\n );\r\n\r\n case \"checkbox\":\r\n return (\r\n <>\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 errorMessage={errorMessage}\r\n />\r\n </>\r\n );\r\n\r\n case \"radio\":\r\n return (\r\n <Radio\r\n value={value}\r\n onChange={(val) => handleChange(key, val)}\r\n text={text}\r\n options={options || []}\r\n label={label || \"\"}\r\n required={required}\r\n name={key}\r\n disabled={disabled}\r\n parentClass={parentClass || \"\"}\r\n errorMessage={errorMessage}\r\n />\r\n );\r\n\r\n case \"switch\":\r\n return (\r\n <Switch\r\n value={Boolean(value)}\r\n onChange={(val) => handleChange(key, val)}\r\n label={label || \"\"}\r\n required={required}\r\n name={key}\r\n disabled={disabled}\r\n className=\"\"\r\n parentClass={parentClass || \"\"}\r\n errorMessage={errorMessage}\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 errorMessage={errorMessage}\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 errorMessage={errorMessage}\r\n />\r\n );\r\n\r\n case \"image\":\r\n case \"multiImage\":\r\n if (multiple || type === \"multiImage\") {\r\n return (\r\n <MultiImagePicker\r\n value={Array.isArray(value) ? value : []}\r\n onChange={(imgList) => handleChange(key, imgList)}\r\n required={required}\r\n accept={accept || \"image/*\"}\r\n aspect={aspectRatio}\r\n id={`file-${key}`}\r\n dragDrop={dragDrop}\r\n cropImage={cropImage}\r\n label={label || \"\"}\r\n name={key}\r\n parentClass={parentClass || \"\"}\r\n maxImages={field.maxImages}\r\n errorMessage={errorMessage}\r\n />\r\n );\r\n }\r\n\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 aspect={aspectRatio}\r\n id={`file-${key}`}\r\n dragDrop={dragDrop}\r\n cropImage={cropImage}\r\n label={label || \"\"}\r\n name={key}\r\n parentClass={parentClass || \"\"}\r\n errorMessage={errorMessage}\r\n />\r\n );\r\n\r\n case \"audio\":\r\n return (\r\n <AudioPicker\r\n value={value}\r\n onChange={(audio) => handleChange(key, audio)}\r\n required={required}\r\n accept={accept || \"audio/*\"}\r\n id={`file-${key}`}\r\n dragDrop={dragDrop}\r\n label={label || \"\"}\r\n name={key}\r\n parentClass={parentClass || \"\"}\r\n maxSize={maxSize}\r\n errorMessage={errorMessage}\r\n />\r\n );\r\n case \"video\":\r\n return (\r\n <VideoPicker\r\n value={value}\r\n onChange={(video) => handleChange(key, video)}\r\n required={required}\r\n accept={accept || \"video/*\"}\r\n id={`file-${key}`}\r\n dragDrop={dragDrop}\r\n label={label || \"\"}\r\n name={key}\r\n maxSize={maxSize}\r\n parentClass={parentClass || \"\"}\r\n errorMessage={errorMessage}\r\n />\r\n );\r\n\r\n case \"tinyEditor\":\r\n return (\r\n <TinyEditor\r\n value={value}\r\n name={key}\r\n onChange={(newValue) => handleChange(key, newValue)}\r\n required={required}\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 errorMessage={errorMessage}\r\n />\r\n );\r\n\r\n default:\r\n return (\r\n <Input\r\n field={field}\r\n type={type || \"text\"}\r\n defaultValue={defaultValue}\r\n value={value}\r\n onChange={(updatedValue) => handleChange(key, updatedValue)}\r\n placeholder={finalPlaceholder}\r\n className={`${baseClass} ${inputClass || \"\"}`}\r\n required={required}\r\n name={key}\r\n minLength={minLength}\r\n label={label || \"\"}\r\n negativeNumberAllow={negativeNumberAllow}\r\n parentClass={parentClass || \"\"}\r\n disabled={disabled}\r\n pattern={pattern}\r\n mask={mask}\r\n errorMessage={errorMessage}\r\n maskApplyOnValue={maskApplyOnValue}\r\n />\r\n );\r\n }\r\n};\r\n\r\nexport default RenderFields;\r\n","import React, { useState } from \"react\";\r\nimport { X } from \"lucide-react\";\r\nimport Button from \"../Button/Button\";\r\nimport RenderFields from \"../Form/components/RenderFields\";\r\nimport { crudClasses, joinClasses } from \"../../lib/crudClasses\";\r\nimport { FormField } from \"../../types/crudtypes\";\r\n\r\ninterface FilterConfig {\r\n component: React.ComponentType<{\r\n filters: Record<string, any>;\r\n onFilterChange: (key: string, value: any) => void;\r\n }>;\r\n fields: Array<FormField>;\r\n}\r\n\r\ninterface FilterDrawerProps {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n config: FilterConfig;\r\n onApply: (filters: Record<string, any>) => void;\r\n}\r\n\r\nconst FilterDrawer = ({\r\n isOpen,\r\n onClose,\r\n config,\r\n onApply,\r\n}: FilterDrawerProps) => {\r\n const [filters, setFilters] = useState<Record<string, any>>({});\r\n\r\n const handleChange = (key: string, value: any) => {\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 const DynamicComponent = config?.component;\r\n\r\n return (\r\n <>\r\n <div\r\n className={joinClasses(\r\n crudClasses.filterDrawer.overlay,\r\n \"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 <div\r\n className={joinClasses(\r\n crudClasses.filterDrawer.panel,\r\n \"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 transform transition-all duration-300 ease-in-out\",\r\n isOpen ? \"opacity-100 translate-x-0\" : \"opacity-0 translate-x-full\",\r\n )}\r\n >\r\n <div\r\n className={joinClasses(\r\n crudClasses.filterDrawer.header,\r\n \"flex items-center justify-between px-4 py-3 border-b border-gray-200 dark:border-gray-700\",\r\n )}\r\n >\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 {isOpen && (\r\n <div\r\n className={joinClasses(\r\n crudClasses.filterDrawer.body,\r\n \"flex-1 overflow-y-auto px-4 py-3\",\r\n )}\r\n >\r\n {DynamicComponent ? (\r\n <DynamicComponent\r\n filters={filters}\r\n onFilterChange={handleChange}\r\n />\r\n ) : (\r\n <div className=\"space-y-4\">\r\n {config?.fields?.map((field) => (\r\n <RenderFields\r\n key={field.key}\r\n field={field}\r\n formData={filters}\r\n handleChange={handleChange}\r\n />\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n\r\n <div\r\n className={joinClasses(\r\n crudClasses.filterDrawer.footer,\r\n \"flex gap-2 px-4 py-3 border-t border-gray-200 dark:border-gray-700\",\r\n )}\r\n >\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 { crudClasses, joinClasses } from \"../../../lib/crudClasses\";\r\n\r\ninterface TableSkeletonProps {\r\n rows: number;\r\n columns: number;\r\n}\r\n\r\nconst TableSkeleton = ({ rows = 5, columns = 5 }: TableSkeletonProps) => {\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\r\n className={joinClasses(\r\n crudClasses.tableSkeleton.root,\r\n crudClasses.tableSkeleton.table,\r\n \"w-full border-collapse\",\r\n )}\r\n >\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, useRef, useState } from \"react\";\r\nimport { ArrowUpDown } from \"lucide-react\";\r\nimport { crudClasses, joinClasses } from \"../../../lib/crudClasses\";\r\n\r\ninterface SortOption {\r\n value: string;\r\n label: string;\r\n [key: string]: any;\r\n}\r\n\r\ninterface SortDropdownProps {\r\n options: SortOption[];\r\n value: string;\r\n onChange: (value: string, option: SortOption | null) => void;\r\n clearLabel?: string;\r\n}\r\n\r\nconst SortDropdown = ({\r\n options = [],\r\n value = \"\",\r\n onChange,\r\n clearLabel = \"\",\r\n}: SortDropdownProps) => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const sortRef = useRef<HTMLDivElement | null>(null);\r\n const isSortApplied = Boolean(value);\r\n\r\n useEffect(() => {\r\n const handleClickOutside = (e: MouseEvent) => {\r\n if (sortRef.current && !sortRef.current.contains(e.target as Node)) {\r\n setIsOpen(false);\r\n }\r\n };\r\n\r\n document.addEventListener(\"click\", handleClickOutside);\r\n return () => document.removeEventListener(\"click\", handleClickOutside);\r\n }, []);\r\n\r\n const handleSelect = (selectedValue: string) => {\r\n const selectedOption = options.find((opt) => opt.value === selectedValue);\r\n onChange(selectedValue, selectedOption || null);\r\n setIsOpen(false);\r\n };\r\n\r\n if (!options?.length) return null;\r\n\r\n return (\r\n <div\r\n className={joinClasses(crudClasses.sortDropdown.root, \"relative\")}\r\n ref={sortRef}\r\n >\r\n <button\r\n type=\"button\"\r\n onClick={() => setIsOpen((prev) => !prev)}\r\n className={joinClasses(\r\n crudClasses.sortDropdown.trigger,\r\n \"relative inline-flex items-center justify-center h-[36px] w-[36px] rounded-md border border-gray-300 dark:border-gray-600 bg-gray-50 dark:bg-gray-700 text-gray-700 dark:text-gray-200 hover:bg-gray-100 dark:hover:bg-gray-600 transition\",\r\n )}\r\n aria-label=\"Open sort options\"\r\n >\r\n <ArrowUpDown className=\"w-4 h-4\" />\r\n {isSortApplied && (\r\n <span className=\"absolute top-1 right-1 w-2 h-2 bg-red-500 rounded-full\"></span>\r\n )}\r\n </button>\r\n\r\n {isOpen && (\r\n <div\r\n className={joinClasses(\r\n crudClasses.sortDropdown.menu,\r\n \"absolute right-0 mt-2 z-20 min-w-[220px] max-h-[260px] overflow-auto rounded-md border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-800 shadow-lg\",\r\n )}\r\n >\r\n {Boolean(clearLabel?.trim()) && (\r\n <button\r\n type=\"button\"\r\n onClick={() => handleSelect(\"\")}\r\n className={joinClasses(\r\n crudClasses.sortDropdown.item,\r\n \"w-full text-left px-3 py-2 text-sm transition hover:bg-gray-100 dark:hover:bg-gray-700\",\r\n !value\r\n ? \"bg-gray-100 dark:bg-gray-700 text-gray-900 dark:text-white\"\r\n : \"text-gray-700 dark:text-gray-200\",\r\n )}\r\n >\r\n {clearLabel}\r\n </button>\r\n )}\r\n\r\n {options.map((option) => (\r\n <button\r\n key={option.value}\r\n type=\"button\"\r\n onClick={() => handleSelect(option.value)}\r\n className={joinClasses(\r\n crudClasses.sortDropdown.item,\r\n \"w-full text-left px-3 py-2 text-sm transition hover:bg-gray-100 dark:hover:bg-gray-700\",\r\n value === option.value\r\n ? \"bg-gray-100 dark:bg-gray-700 text-gray-900 dark:text-white\"\r\n : \"text-gray-700 dark:text-gray-200\",\r\n )}\r\n >\r\n {option.label}\r\n </button>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default SortDropdown;\r\n","interface SortOption {\r\n value: string;\r\n label: string;\r\n key: string;\r\n order: \"asc\" | \"desc\";\r\n type?: string;\r\n}\r\n\r\ninterface FieldRule {\r\n key?: string;\r\n type?: string;\r\n label?: string;\r\n}\r\n\r\ninterface SortChangePayload {\r\n value: string;\r\n option: SortOption | null;\r\n key: string;\r\n order: string;\r\n type: string;\r\n}\r\n\r\ninterface SortConfig {\r\n enabled?: boolean;\r\n useServerSideSorting?: boolean;\r\n options?: SortOption[];\r\n fields?: (string | FieldRule)[];\r\n defaultValue?: string;\r\n autoGenerate?: boolean;\r\n clearLabel?: string;\r\n onChange?: ((payload: SortChangePayload) => void) | null;\r\n}\r\n\r\ninterface NormalizedSortConfig {\r\n enabled: boolean;\r\n useServerSideSorting: boolean;\r\n options: SortOption[];\r\n fields: (string | FieldRule)[];\r\n defaultValue: string;\r\n autoGenerate: boolean;\r\n clearLabel: string;\r\n onChange: ((payload: SortChangePayload) => void) | null;\r\n}\r\n\r\ninterface TableColumn {\r\n key: string;\r\n type?: string;\r\n title?: string;\r\n sortKey?: string;\r\n sortType?: string;\r\n sortLabel?: string;\r\n titleKey?: string;\r\n chipOptions?: Array<{ value: any; label: string }>;\r\n}\r\n\r\nconst BASE_SORT_CONFIG: NormalizedSortConfig = {\r\n enabled: false,\r\n useServerSideSorting: false,\r\n options: [],\r\n fields: [],\r\n defaultValue: \"\",\r\n autoGenerate: true,\r\n clearLabel: \"\",\r\n onChange: null,\r\n};\r\n\r\nexport const normalizeSortConfig = (\r\n sortConfig: boolean | SortConfig | null | undefined,\r\n): NormalizedSortConfig => {\r\n if (sortConfig === true) {\r\n return { ...BASE_SORT_CONFIG, enabled: true };\r\n }\r\n\r\n if (!sortConfig || typeof sortConfig !== \"object\") {\r\n return BASE_SORT_CONFIG;\r\n }\r\n\r\n return {\r\n ...BASE_SORT_CONFIG,\r\n ...sortConfig,\r\n enabled: sortConfig.enabled ?? true,\r\n autoGenerate: sortConfig.autoGenerate ?? true,\r\n };\r\n};\r\n\r\nexport const getSortableColumns = (\r\n tableHead: TableColumn[] = [],\r\n): TableColumn[] => {\r\n return tableHead.filter((col) => {\r\n const blockedTypes = [\"menu_actions\", \"index\", \"audio\", \"avatar\"];\r\n if (col.type && blockedTypes.includes(col.type)) return false;\r\n\r\n const effectiveKey =\r\n col.sortKey || (col.type === \"group\" ? col.titleKey : col.key);\r\n return Boolean(effectiveKey);\r\n });\r\n};\r\n\r\nconst detectSortType = (col: TableColumn): string => {\r\n if (col.sortType) return col.sortType;\r\n if (col.type === \"date\") return \"date\";\r\n if (col.type === \"number\") return \"number\";\r\n\r\n const sortKeyName = String(\r\n col.sortKey || (col.type === \"group\" ? col.titleKey : col.key) || \"\",\r\n ).toLowerCase();\r\n\r\n const isPhoneLike = [\"phone\", \"mobile\", \"contact\", \"tel\", \"whatsapp\"].some(\r\n (keyword) => sortKeyName.includes(keyword),\r\n );\r\n\r\n if (isPhoneLike) return \"phone\";\r\n\r\n if (Array.isArray(col.chipOptions) && col.chipOptions.length > 0) {\r\n const allBoolean = col.chipOptions.every(\r\n (opt) => typeof opt.value === \"boolean\",\r\n );\r\n\r\n if (allBoolean) return \"boolean\";\r\n }\r\n\r\n return \"string\";\r\n};\r\n\r\nexport const buildDefaultSortOptions = (\r\n columns: TableColumn[] = [],\r\n): SortOption[] => {\r\n return columns.flatMap((col) => {\r\n const key = col.sortKey || (col.type === \"group\" ? col.titleKey : col.key);\r\n const label = col.sortLabel || col.title || key;\r\n const type = detectSortType(col);\r\n\r\n if (!key) return [];\r\n\r\n if (type === \"number\") {\r\n return [\r\n {\r\n value: `${key}_asc`,\r\n label: `${label} (Low-High)`,\r\n key,\r\n order: \"asc\" as const,\r\n type,\r\n },\r\n {\r\n value: `${key}_desc`,\r\n label: `${label} (High-Low)`,\r\n key,\r\n order: \"desc\" as const,\r\n type,\r\n },\r\n ];\r\n }\r\n\r\n if (type === \"phone\") {\r\n return [\r\n {\r\n value: `${key}_asc`,\r\n label: `${label} (0-9)`,\r\n key,\r\n order: \"asc\" as const,\r\n type,\r\n },\r\n {\r\n value: `${key}_desc`,\r\n label: `${label} (9-0)`,\r\n key,\r\n order: \"desc\" as const,\r\n type,\r\n },\r\n ];\r\n }\r\n\r\n if (type === \"date\") {\r\n return [\r\n {\r\n value: `${key}_desc`,\r\n label: `${label} (Newest First)`,\r\n key,\r\n order: \"desc\" as const,\r\n type,\r\n },\r\n {\r\n value: `${key}_asc`,\r\n label: `${label} (Oldest First)`,\r\n key,\r\n order: \"asc\" as const,\r\n type,\r\n },\r\n ];\r\n }\r\n\r\n if (type === \"boolean\") {\r\n return [\r\n {\r\n value: `${key}_desc`,\r\n label: `${label} (True First)`,\r\n key,\r\n order: \"desc\" as const,\r\n type,\r\n },\r\n {\r\n value: `${key}_asc`,\r\n label: `${label} (False First)`,\r\n key,\r\n order: \"asc\" as const,\r\n type,\r\n },\r\n ];\r\n }\r\n\r\n return [\r\n {\r\n value: `${key}_asc`,\r\n label: `${label} (A-Z)`,\r\n key,\r\n order: \"asc\" as const,\r\n type,\r\n },\r\n {\r\n value: `${key}_desc`,\r\n label: `${label} (Z-A)`,\r\n key,\r\n order: \"desc\" as const,\r\n type,\r\n },\r\n ];\r\n });\r\n};\r\n\r\nexport const getNormalizedSortOptions = (\r\n normalizedSortConfig: NormalizedSortConfig,\r\n sortableColumns: TableColumn[] = [],\r\n): SortOption[] => {\r\n const hasExplicitOptions =\r\n Array.isArray(normalizedSortConfig.options) &&\r\n normalizedSortConfig.options.length > 0;\r\n\r\n if (hasExplicitOptions) {\r\n return normalizedSortConfig.options.map((option) => ({\r\n ...option,\r\n type: option.type || \"string\",\r\n order: (option.order === \"desc\" ? \"desc\" : \"asc\") as \"asc\" | \"desc\",\r\n }));\r\n }\r\n\r\n const fieldRules = Array.isArray(normalizedSortConfig.fields)\r\n ? normalizedSortConfig.fields\r\n : [];\r\n\r\n if (fieldRules.length > 0) {\r\n const fieldColumns: TableColumn[] = fieldRules\r\n .map((field) => {\r\n const fieldKey = typeof field === \"string\" ? field : field.key;\r\n const targetCol = sortableColumns.find(\r\n (col) =>\r\n col.key === fieldKey ||\r\n col.sortKey === fieldKey ||\r\n (col.type === \"group\" && col.titleKey === fieldKey),\r\n );\r\n\r\n if (!targetCol) return null;\r\n\r\n return {\r\n ...targetCol,\r\n sortKey:\r\n typeof field === \"object\" && field.key\r\n ? field.key\r\n : targetCol.sortKey,\r\n sortType:\r\n typeof field === \"object\" && field.type\r\n ? field.type\r\n : targetCol.sortType,\r\n sortLabel:\r\n typeof field === \"object\" && field.label\r\n ? field.label\r\n : targetCol.sortLabel,\r\n } as TableColumn;\r\n })\r\n .filter((col) => col !== null) as TableColumn[];\r\n\r\n return buildDefaultSortOptions(fieldColumns);\r\n }\r\n\r\n if (!normalizedSortConfig.autoGenerate) return [];\r\n return buildDefaultSortOptions(sortableColumns);\r\n};\r\n\r\nexport const sortTableData = (\r\n filteredData: any[] = [],\r\n sortBy: string = \"\",\r\n normalizedSortConfig: NormalizedSortConfig | null,\r\n normalizedSortOptions: SortOption[] = [],\r\n): any[] => {\r\n if (\r\n !normalizedSortConfig?.enabled ||\r\n !sortBy ||\r\n normalizedSortConfig?.useServerSideSorting\r\n ) {\r\n return filteredData;\r\n }\r\n\r\n const selectedOption = normalizedSortOptions?.find(\r\n (opt) => opt.value === sortBy,\r\n );\r\n if (!selectedOption?.key) {\r\n return filteredData;\r\n }\r\n\r\n const direction = selectedOption.order === \"desc\" ? \"desc\" : \"asc\";\r\n const sortKey = selectedOption.key;\r\n const sortType = selectedOption.type || \"string\";\r\n\r\n const normalizePhone = (value: any): string =>\r\n String(value ?? \"\")\r\n .replace(/[^\\d]/g, \"\")\r\n .trim();\r\n\r\n return [...filteredData].sort((a, b) => {\r\n const aValue = a?.[sortKey];\r\n const bValue = b?.[sortKey];\r\n\r\n if (aValue == null && bValue == null) return 0;\r\n if (aValue == null) return direction === \"asc\" ? 1 : -1;\r\n if (bValue == null) return direction === \"asc\" ? -1 : 1;\r\n\r\n let comparison = 0;\r\n\r\n if (sortType === \"number\") {\r\n comparison = Number(aValue) - Number(bValue);\r\n } else if (sortType === \"phone\") {\r\n comparison = normalizePhone(aValue).localeCompare(\r\n normalizePhone(bValue),\r\n undefined,\r\n {\r\n numeric: true,\r\n },\r\n );\r\n } else if (sortType === \"date\") {\r\n comparison = new Date(aValue).getTime() - new Date(bValue).getTime();\r\n } else if (sortType === \"boolean\") {\r\n comparison = Number(Boolean(aValue)) - Number(Boolean(bValue));\r\n } else {\r\n comparison = String(aValue).localeCompare(String(bValue));\r\n }\r\n\r\n return direction === \"asc\" ? comparison : -comparison;\r\n });\r\n};\r\n","import React, { useState, useMemo, useRef, useEffect } from \"react\";\r\nimport {\r\n ChevronLeft,\r\n ChevronRight,\r\n Search,\r\n EllipsisVertical,\r\n Filter,\r\n User,\r\n Music,\r\n Plus,\r\n Download,\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\nimport SortDropdown from \"./components/SortDropdown\";\r\nimport {\r\n normalizeSortConfig,\r\n getSortableColumns,\r\n getNormalizedSortOptions,\r\n sortTableData,\r\n} from \"./utils/sortUtils\";\r\nimport { crudClasses, joinClasses } from \"../../lib/crudClasses\";\r\n\r\ninterface TableProps {\r\n config: Record<string, any>;\r\n setShowAdd: (value: boolean) => void;\r\n title: string;\r\n buttonText?: string;\r\n description?: string;\r\n showAddButton?: boolean;\r\n}\r\n\r\ninterface CSVField {\r\n label: string;\r\n key: string;\r\n}\r\n\r\nconst Table = ({\r\n config,\r\n setShowAdd,\r\n title,\r\n buttonText,\r\n description,\r\n showAddButton,\r\n}: TableProps) => {\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 sort = { enabled: false },\r\n pagination = {\r\n enabled: false,\r\n rows_per_page: 10,\r\n useServerSidePagination: false,\r\n },\r\n exportCSV = {\r\n enabled: false,\r\n fileName: \"\",\r\n fields: [],\r\n },\r\n emptyMessage = \"No data available\",\r\n onMenuAction,\r\n setServerSidePaginationData = () => {},\r\n onFilterApply,\r\n filterConfig = null,\r\n rowClick = null,\r\n } = config;\r\n\r\n const [searchTerm, setSearchTerm] = useState(\"\");\r\n const [activeMenu, setActiveMenu] = useState<any>(null);\r\n const [menuList, setMenuList] = useState<any[]>([]);\r\n const [menuPosition, setMenuPosition] = useState({ top: 0, left: 0 });\r\n const [showFilters, setShowFilters] = useState(false);\r\n const [appliedFilters, setAppliedFilters] = useState<Record<string, any>>({});\r\n\r\n const normalizedSortConfig = useMemo(() => normalizeSortConfig(sort), [sort]);\r\n\r\n const sortableColumns = useMemo(\r\n () => getSortableColumns(table_head),\r\n [table_head],\r\n );\r\n\r\n const normalizedSortOptions = useMemo(() => {\r\n return getNormalizedSortOptions(normalizedSortConfig, sortableColumns);\r\n }, [normalizedSortConfig, sortableColumns]);\r\n\r\n const [sortBy, setSortBy] = useState(\r\n normalizedSortConfig?.defaultValue || \"\",\r\n );\r\n\r\n const [targetImage, setTargetImage] = useState<{\r\n src: string;\r\n alt: string;\r\n } | null>(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 sortedData = useMemo(() => {\r\n return sortTableData(\r\n filteredData,\r\n sortBy,\r\n normalizedSortConfig,\r\n normalizedSortOptions,\r\n );\r\n }, [filteredData, sortBy, normalizedSortConfig, normalizedSortOptions]);\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 sortedData;\r\n const start = (currentPage - 1) * pageSize;\r\n return sortedData.slice(start, start + pageSize);\r\n }, [sortedData, currentPage, pageSize, pagination.useServerSidePagination]);\r\n\r\n const menuRef = useRef<HTMLDivElement | null>(null);\r\n const tableScopeRef = useRef<HTMLDivElement | null>(null);\r\n const buttonRefs = useRef<Record<string, HTMLButtonElement | null>>({});\r\n const searchTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n\r\n const menuPortalTarget =\r\n typeof document !== \"undefined\"\r\n ? (tableScopeRef.current?.closest(\".racm-root\") as HTMLElement | null) ||\r\n document.body\r\n : null;\r\n\r\n const handleSearchChange = (value: string) => {\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: Record<string, any>) => ({\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 handleSortChange = (value: string, selectedOption: any = null) => {\r\n setSortBy(value);\r\n setCurrentPage(1);\r\n\r\n const payload = {\r\n value,\r\n option: selectedOption,\r\n key: selectedOption?.key || \"\",\r\n order: selectedOption?.order || \"\",\r\n type: selectedOption?.type || \"\",\r\n };\r\n\r\n if (typeof normalizedSortConfig?.onChange === \"function\") {\r\n normalizedSortConfig.onChange(payload);\r\n }\r\n };\r\n\r\n const handleActionClick = (action: any, item: any, e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n setActiveMenu(null);\r\n onMenuAction?.(action.type, item);\r\n };\r\n\r\n const handleMenuToggle = (\r\n itemId: any,\r\n e: React.MouseEvent<HTMLButtonElement>,\r\n menu_list: any[],\r\n ) => {\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: number) => {\r\n return (currentPage - 1) * pageSize + index + 1;\r\n };\r\n\r\n const openPreview = (image: any) => {\r\n let imageObj = image;\r\n if (imageObj && imageObj.src instanceof File) {\r\n imageObj = { ...imageObj, src: URL.createObjectURL(imageObj.src) };\r\n }\r\n setTargetImage(imageObj);\r\n setIsOpen(true);\r\n };\r\n\r\n const getImageSource = (image: any): string => {\r\n if (!image) return \"\";\r\n\r\n if (typeof image === \"string\") {\r\n return image;\r\n }\r\n\r\n if (image instanceof File) {\r\n return URL.createObjectURL(image);\r\n }\r\n\r\n if (typeof image === \"object\") {\r\n if (typeof image.preview === \"string\") {\r\n return image.preview;\r\n }\r\n if (typeof image.src === \"string\") {\r\n return image.src;\r\n }\r\n if (image.src instanceof File) {\r\n return URL.createObjectURL(image.src);\r\n }\r\n if (image.file instanceof File) {\r\n return URL.createObjectURL(image.file);\r\n }\r\n }\r\n\r\n return \"\";\r\n };\r\n\r\n const renderMultiImageCell = (value: any, col: any) => {\r\n const images = Array.isArray(value) ? value : [];\r\n\r\n if (images.length === 0) {\r\n return <span className={col.className || \"\"}>N/A</span>;\r\n }\r\n\r\n const maxPreview = col.maxPreview || 3;\r\n const visibleImages = images.slice(0, maxPreview);\r\n const remaining = images.length - visibleImages.length;\r\n\r\n return (\r\n <div className=\"flex items-center\">\r\n <div className=\"flex -space-x-2\">\r\n {visibleImages.map((image: any, idx: number) => {\r\n const src = getImageSource(image);\r\n if (!src) return null;\r\n\r\n return (\r\n <button\r\n key={`${src}-${idx}`}\r\n type=\"button\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n openPreview({ src, alt: `Gallery ${idx + 1}` });\r\n }}\r\n className=\"w-8 h-8 rounded-full border-2 border-white dark:border-gray-800 overflow-hidden\"\r\n >\r\n <img\r\n src={src}\r\n alt={`gallery-${idx + 1}`}\r\n className=\"w-full h-full object-cover\"\r\n />\r\n </button>\r\n );\r\n })}\r\n </div>\r\n\r\n {remaining > 0 && (\r\n <span className=\"ml-2 text-xs font-medium text-gray-600 dark:text-gray-300\">\r\n +{remaining}\r\n </span>\r\n )}\r\n </div>\r\n );\r\n };\r\n\r\n const renderAvatar = (\r\n imageSrc: any,\r\n imageAlt: string,\r\n className: string,\r\n fallback_icon: any = null,\r\n row: any = null,\r\n ) => {\r\n return (\r\n <>\r\n {imageSrc ? (\r\n <img\r\n src={\r\n imageSrc instanceof File\r\n ? URL.createObjectURL(imageSrc)\r\n : imageSrc\r\n }\r\n alt={imageAlt || \"Avatar\"}\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n openPreview({ src: imageSrc, alt: imageAlt });\r\n }}\r\n className={`w-10 h-10 cursor-pointer shrink-0 rounded-full object-cover border border-gray-200 dark:border-gray-700 ${className || \"\"}`}\r\n />\r\n ) : (\r\n <>\r\n {fallback_icon ? (\r\n typeof fallback_icon === \"function\" ? (\r\n fallback_icon(row)\r\n ) : (\r\n fallback_icon\r\n )\r\n ) : (\r\n <div\r\n className={`w-10 h-10 flex items-center shrink-0 justify-center rounded-full border border-gray-300 dark:border-gray-700 bg-gray-200 dark:bg-gray-600 ${className || \"\"}`}\r\n >\r\n <User className=\"w-6 h-6 text-gray-400 dark:text-gray-400\" />\r\n </div>\r\n )}\r\n </>\r\n )}\r\n </>\r\n );\r\n };\r\n\r\n const renderAudio = (audioSrc: any, className: string) => {\r\n return (\r\n <>\r\n {audioSrc ? (\r\n <audio\r\n key={\r\n audioSrc instanceof File\r\n ? URL.createObjectURL(audioSrc)\r\n : audioSrc\r\n }\r\n controls\r\n src={\r\n audioSrc instanceof File\r\n ? URL.createObjectURL(audioSrc)\r\n : audioSrc\r\n }\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n }}\r\n className={`w-64 cursor-pointer ${className || \"\"}`}\r\n />\r\n ) : (\r\n <>\r\n <div\r\n className={`w-12 h-12 flex items-center shrink-0 justify-center rounded-full border border-gray-300 dark:border-gray-700 bg-gray-200 dark:bg-gray-600 ${className || \"\"}`}\r\n >\r\n <Music className=\"w-6 h-6 text-gray-400 dark:text-gray-400\" />\r\n </div>\r\n </>\r\n )}\r\n </>\r\n );\r\n };\r\n\r\n const renderGroupCell = (row: any, col: any) => {\r\n return (\r\n <div className={`flex items-center space-x-4 ${col.className || \"\"}`}>\r\n {col.imageKey\r\n ? renderAvatar(\r\n row[col.imageKey],\r\n row[col.titleKey],\r\n \"group-avatar\",\r\n col.fallback_icon,\r\n row,\r\n )\r\n : \"\"}\r\n <div>\r\n <p className=\"font-medium text-gray-900 dark:text-white group-title\">\r\n {row[col.titleKey] || \"\"}\r\n </p>\r\n <p className=\"text-sm text-gray-500 dark:text-gray-400 group-sub-title\">\r\n {row[col.subtitleKey] || \"\"}\r\n </p>\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n const handleRenderChip = (value: any, col: any) => {\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 const chipObj = col?.chipOptions.find((obj: any) => 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: any, row: any, index: number) => {\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) => {\r\n buttonRefs.current[row.id || row._id] = el;\r\n }}\r\n onClick={(e) =>\r\n handleMenuToggle(row.id || row._id, e, col.menuList)\r\n }\r\n className={joinClasses(\r\n crudClasses.table.actionButton,\r\n \"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 >\r\n <EllipsisVertical className=\"h-4 w-4\" />\r\n </button>\r\n </div>\r\n );\r\n } else if (col.type === \"index\") {\r\n return (\r\n <span className={col.className || \"\"}>{calculateRowNumber(index)}</span>\r\n );\r\n } else if (col.type === \"group\") {\r\n return renderGroupCell(row, col);\r\n } else if (col.type === \"chip\") {\r\n return <>{handleRenderChip(value, col)}</>;\r\n } else if (col.type === \"date\") {\r\n return (\r\n <span className={col.className || \"\"}>\r\n {formatDate(value, col.format || \"DD MMM YYYY\")}\r\n </span>\r\n );\r\n } else if (col.type === \"avatar\") {\r\n return (\r\n <>\r\n <div className=\"min-w-[40px]\">\r\n {renderAvatar(\r\n value,\r\n col.alt,\r\n col.className,\r\n col.fallback_icon,\r\n row,\r\n )}\r\n </div>\r\n </>\r\n );\r\n } else if (col.type === \"audio\") {\r\n return <>{renderAudio(value, col.className)}</>;\r\n } else if (col.type === \"multiImage\") {\r\n return <>{renderMultiImageCell(value, col)}</>;\r\n } else {\r\n return <span className={col.className || \"\"}>{value || \"N/A\"}</span>;\r\n }\r\n };\r\n\r\n const handleRowClick = (row: any) => {\r\n if (typeof rowClick === \"function\") {\r\n return rowClick(row);\r\n }\r\n if (rowClick) {\r\n return onMenuAction?.(\"view\", row);\r\n }\r\n };\r\n\r\n const handleColumnClick = (col: any, row: any) => {\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 const isRowClickable = () => rowClick || typeof rowClick === \"function\";\r\n const isColumnClickable = (col: any) =>\r\n col.onClickDetails || typeof col.handleClick === \"function\";\r\n\r\n const handleExportCSV = () => {\r\n if (!data?.length || !exportCSV?.fields?.length) return;\r\n\r\n // Create headers\r\n const headers = exportCSV.fields.map((field: CSVField) => field.label);\r\n\r\n // Create rows\r\n const rows = paginatedData.map((row: Record<string, any>) =>\r\n exportCSV.fields.map((field: CSVField) => {\r\n const value = row?.[field.key];\r\n return `\"${value !== undefined && value !== null ? value : \"\"}\"`;\r\n }),\r\n );\r\n\r\n const csvContent = [\r\n headers.join(\",\"),\r\n ...rows.map((r) => r.join(\",\")),\r\n ].join(\"\\n\");\r\n\r\n // Filename\r\n const now = new Date();\r\n const defaultName = `export-${formatDate(now, \"YYYY-MM-DD_HH-mm-ss\")}.csv`;\r\n const finalName = exportCSV.fileName || defaultName;\r\n\r\n // Create blob\r\n const blob = new Blob([csvContent], { type: \"text/csv;charset=utf-8;\" });\r\n\r\n // Download file\r\n const link = document.createElement(\"a\");\r\n const url = URL.createObjectURL(blob);\r\n\r\n link.href = url;\r\n link.download = finalName;\r\n\r\n document.body.appendChild(link);\r\n link.click();\r\n\r\n document.body.removeChild(link);\r\n URL.revokeObjectURL(url);\r\n };\r\n\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: MouseEvent) => {\r\n if (menuRef.current && !menuRef.current.contains(e.target as Node)) {\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 : sortedData.length,\r\n );\r\n\r\n if (\r\n sortedData.length <= pageSize * (currentPage - 1) &&\r\n !pagination?.useServerSidePagination\r\n ) {\r\n setCurrentPage((prev) => prev - 1 || 1);\r\n }\r\n }, [\r\n sortedData.length,\r\n pagination.total_records,\r\n pagination?.useServerSidePagination,\r\n ]);\r\n\r\n useEffect(() => {\r\n if (!normalizedSortConfig?.enabled) {\r\n setSortBy(\"\");\r\n return;\r\n }\r\n\r\n const hasMatchingDefault = normalizedSortOptions.some(\r\n (opt: any) => opt.value === normalizedSortConfig.defaultValue,\r\n );\r\n\r\n if (hasMatchingDefault) {\r\n setSortBy(normalizedSortConfig.defaultValue);\r\n return;\r\n }\r\n\r\n setSortBy(\"\");\r\n }, [normalizedSortConfig, normalizedSortOptions]);\r\n\r\n useEffect(() => {\r\n if (\r\n !normalizedSortConfig?.enabled ||\r\n !normalizedSortConfig?.useServerSideSorting\r\n ) {\r\n return;\r\n }\r\n\r\n const selectedOption = normalizedSortOptions?.find(\r\n (opt: any) => opt.value === sortBy,\r\n );\r\n\r\n setServerSidePaginationData((prev: Record<string, any>) => ({\r\n ...prev,\r\n current_page: 1,\r\n sort_by: selectedOption?.key || \"\",\r\n sort_order: selectedOption?.order || \"\",\r\n }));\r\n }, [\r\n sortBy,\r\n normalizedSortConfig?.enabled,\r\n normalizedSortConfig?.useServerSideSorting,\r\n normalizedSortOptions,\r\n setServerSidePaginationData,\r\n ]);\r\n\r\n return (\r\n <div ref={tableScopeRef}>\r\n {loading ? (\r\n <TableSkeleton rows={6} columns={6} />\r\n ) : (\r\n <>\r\n <div\r\n className={joinClasses(\r\n crudClasses.table.toolbar,\r\n \"flex flex-col lg:!flex-row lg:!justify-between gap-4 mb-3\",\r\n )}\r\n >\r\n <div className=\"table-heading\">\r\n <h1>{title}</h1>\r\n <p>{description}</p>\r\n </div>\r\n <div className=\"flex flex-col justify-end items-stretch lg:!items-end gap-2 w-full lg:!w-auto\">\r\n {showAddButton && (\r\n <Button\r\n onClick={() => setShowAdd(true)}\r\n variant=\"contained\"\r\n color=\"primary\"\r\n >\r\n <Plus className=\"w-4 h-4 mr-2\" />\r\n {buttonText || \"Add New\"}\r\n </Button>\r\n )}\r\n <div className=\"flex flex-col sm:!flex-row sm:!flex-wrap justify-end items-stretch sm:!items-center gap-2 w-full\">\r\n {search.enabled && (\r\n <div className=\"w-full sm:!w-auto\">\r\n <div\r\n className={joinClasses(\r\n crudClasses.table.searchField,\r\n \"table-search-field\",\r\n )}\r\n >\r\n <Search className=\"search-icon\" />\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={crudClasses.table.searchInput}\r\n />\r\n </div>\r\n </div>\r\n )}\r\n\r\n {(normalizedSortConfig?.enabled &&\r\n normalizedSortOptions?.length > 0) ||\r\n (filterConfig && filter.enabled) ||\r\n (exportCSV && exportCSV.enabled) ? (\r\n <div className=\"flex items-center justify-end gap-2 w-full sm:!w-auto\">\r\n {filterConfig && filter.enabled && (\r\n <div className=\"filter-button-wrapper\">\r\n <Button\r\n onClick={() => setShowFilters(true)}\r\n variant=\"contained\"\r\n className=\"w-full sm:!w-auto\"\r\n >\r\n <Filter className=\"w-4 h-4 mr-2\" />\r\n Filters\r\n </Button>\r\n {Object.keys(appliedFilters).length > 0 && (\r\n <span className=\"red-dot\"></span>\r\n )}\r\n </div>\r\n )}\r\n {exportCSV && exportCSV.enabled && (\r\n <div className=\"filter-button-wrapper\">\r\n <Button\r\n onClick={() => handleExportCSV()}\r\n variant=\"contained\"\r\n className=\"w-full sm:!w-auto\"\r\n >\r\n <Download className=\"w-4 h-4 mr-2\" />\r\n Export CSV\r\n </Button>\r\n </div>\r\n )}\r\n {normalizedSortConfig?.enabled &&\r\n normalizedSortOptions?.length > 0 && (\r\n <SortDropdown\r\n options={normalizedSortOptions}\r\n value={sortBy}\r\n onChange={handleSortChange}\r\n clearLabel={normalizedSortConfig?.clearLabel}\r\n />\r\n )}\r\n </div>\r\n ) : null}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div\r\n className={joinClasses(\r\n crudClasses.table.root,\r\n crudClasses.table.container,\r\n \"table-container\",\r\n )}\r\n >\r\n <div className=\"overflow-x-auto\">\r\n <table className={crudClasses.table.element}>\r\n <thead className={crudClasses.table.head}>\r\n <tr className={crudClasses.table.headRow}>\r\n {table_head.map((col: any) => (\r\n <th\r\n key={col.key}\r\n className={joinClasses(\r\n crudClasses.table.headCell,\r\n \"table-head-data\",\r\n col.headClass || \"\",\r\n )}\r\n >\r\n {col.title}\r\n </th>\r\n ))}\r\n </tr>\r\n </thead>\r\n\r\n <tbody className={crudClasses.table.body}>\r\n {paginatedData.length === 0 ? (\r\n <tr>\r\n <td\r\n colSpan={table_head.length}\r\n className={joinClasses(\r\n crudClasses.table.noData,\r\n \"no-data-message\",\r\n )}\r\n >\r\n {emptyMessage}\r\n </td>\r\n </tr>\r\n ) : (\r\n paginatedData.map((row: any, index: number) => (\r\n <tr\r\n key={row.id || row._id || index}\r\n className={joinClasses(\r\n crudClasses.table.row,\r\n \"table-row\",\r\n isRowClickable() ? \"cursor-pointer\" : \"\",\r\n )}\r\n onClick={() => {\r\n isRowClickable() && handleRowClick(row);\r\n }}\r\n >\r\n {table_head.map((col: any) => (\r\n <td\r\n key={col.key}\r\n className={joinClasses(\r\n crudClasses.table.cell,\r\n \"table-data\",\r\n col.type == \"audio\" ? \"\" : \"max-w-[300px]\",\r\n \"truncate\",\r\n isColumnClickable(col) ? \"cursor-pointer\" : \"\",\r\n )}\r\n title={String(row[col.key] ?? \"\")}\r\n onClick={(e) => {\r\n if (isColumnClickable(col)) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n handleColumnClick(col, row);\r\n }\r\n }}\r\n >\r\n {col.render\r\n ? col.render(row, index)\r\n : handleRenderCellValue(col, row, index)}\r\n </td>\r\n ))}\r\n </tr>\r\n ))\r\n )}\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n {pagination?.enabled && sortedData.length > 0 && (\r\n <div\r\n className={joinClasses(\r\n crudClasses.table.pagination,\r\n \"pagination-wrapper\",\r\n )}\r\n >\r\n <span>\r\n Showing {(currentPage - 1) * pageSize + 1} to{\" \"}\r\n {Math.min(currentPage * pageSize, totalRecords)} of{\" \"}\r\n {totalRecords} results\r\n </span>\r\n\r\n <div className=\"flex items-center gap-4\">\r\n <div className=\"flex items-center gap-2\">\r\n <span>Rows per page:</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(\r\n (prev: Record<string, any>) => ({\r\n ...prev,\r\n current_page: 1,\r\n rows_per_page: newLimit,\r\n }),\r\n );\r\n }\r\n }}\r\n className=\"rows-number-select\"\r\n >\r\n {[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 <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(\r\n (prev: Record<string, any>) => ({\r\n ...prev,\r\n current_page: newPage,\r\n }),\r\n );\r\n }\r\n }\r\n }}\r\n disabled={currentPage === 1}\r\n className=\"arrow-icons\"\r\n >\r\n <ChevronLeft className=\"h-4 w-4\" />\r\n </button>\r\n\r\n <span>\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(\r\n (prev: Record<string, any>) => ({\r\n ...prev,\r\n current_page: newPage,\r\n }),\r\n );\r\n }\r\n }\r\n }}\r\n disabled={currentPage === totalPages}\r\n className=\"arrow-icons\"\r\n >\r\n <ChevronRight className=\"h-4 w-4\" />\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n </>\r\n )}\r\n\r\n {activeMenu &&\r\n menuPortalTarget &&\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={joinClasses(\r\n crudClasses.table.menu,\r\n \"w-48 bg-white dark:bg-gray-700 rounded-md shadow-lg border border-gray-200 dark:border-gray-600\",\r\n )}\r\n >\r\n {menuList.map((action: any, i: number) => (\r\n <button\r\n key={i}\r\n onClick={(e) =>\r\n handleActionClick(\r\n action,\r\n data.find(\r\n (d: any) => d.id === activeMenu || d._id == activeMenu,\r\n ),\r\n e,\r\n )\r\n }\r\n className={joinClasses(\r\n crudClasses.table.menuItem,\r\n \"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 menuPortalTarget,\r\n )}\r\n\r\n {filterConfig && (\r\n <FilterDrawer\r\n isOpen={showFilters}\r\n onClose={() => setShowFilters(false)}\r\n config={filterConfig}\r\n onApply={(filters) => {\r\n setAppliedFilters(filters);\r\n onFilterApply?.(filters);\r\n }}\r\n />\r\n )}\r\n\r\n {isOpen && targetImage && (\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 </div>\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\nimport { ActionButton } from \"../../types/crudtypes\";\r\nimport { crudClasses, joinClasses } from \"../../lib/crudClasses\";\r\n\r\ninterface ModalProps {\r\n isOpen: boolean;\r\n onClose: (resp?: any) => void;\r\n icon?: React.ReactNode;\r\n title: React.ReactNode;\r\n children: React.ReactNode;\r\n size?: string;\r\n actionButtons?: ActionButton[];\r\n footerConfig?: any;\r\n onFormSubmit?: (e?: any) => void;\r\n onCancel?: () => void;\r\n loadingBtn?: boolean;\r\n loading?: boolean;\r\n executeFunction?: (...args: any[]) => void;\r\n selectedItem?: any;\r\n classNames?: {\r\n overlay?: string;\r\n container?: string;\r\n header?: string;\r\n title?: string;\r\n body?: string;\r\n footer?: string;\r\n closeButton?: string;\r\n };\r\n}\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 onFormSubmit = () => {},\r\n loadingBtn = false,\r\n executeFunction = () => {},\r\n selectedItem = null,\r\n footerConfig,\r\n classNames,\r\n}: ModalProps) => {\r\n if (!isOpen) return null;\r\n\r\n const sizeClasses: Record<string, string> = {\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 const shouldShowFooter =\r\n actionButtons.length > 0 || Boolean(footerConfig?.cancelButton);\r\n\r\n return (\r\n <div\r\n className={joinClasses(\r\n crudClasses.modal.root,\r\n \"fixed inset-0 z-50 flex items-center justify-center p-4\",\r\n )}\r\n >\r\n <div\r\n className={joinClasses(\r\n crudClasses.modal.overlay,\r\n \"fixed inset-0 bg-gray-500 opacity-75\",\r\n classNames?.overlay,\r\n )}\r\n // onClick={() => onClose()}\r\n ></div>\r\n\r\n <div\r\n className={joinClasses(\r\n crudClasses.modal.container,\r\n \"relative bg-white rounded-lg shadow-xl w-full max-h-[90vh] flex flex-col dark:bg-gray-800\",\r\n sizeClasses[size] || sizeClasses.md,\r\n classNames?.container,\r\n )}\r\n >\r\n <div\r\n className={joinClasses(\r\n crudClasses.modal.header,\r\n \"flex items-center justify-between p-4 border-b border-gray-200 dark:border-gray-700 flex-shrink-0\",\r\n classNames?.header,\r\n )}\r\n >\r\n <div className=\"flex items-center gap-1\">\r\n {icon && <span>{icon}</span>}\r\n <h3\r\n className={joinClasses(\r\n crudClasses.modal.title,\r\n \"text-lg font-medium text-gray-900 dark:text-white\",\r\n classNames?.title,\r\n )}\r\n >\r\n {title}\r\n </h3>\r\n </div>\r\n\r\n <button\r\n onClick={() => onClose()}\r\n className={joinClasses(\r\n crudClasses.modal.closeButton,\r\n \"text-gray-400 hover:text-gray-600 dark:hover:text-gray-300\",\r\n classNames?.closeButton,\r\n )}\r\n >\r\n <X className=\"w-6 h-6\" />\r\n </button>\r\n </div>\r\n\r\n <div\r\n className={joinClasses(\r\n crudClasses.modal.body,\r\n \"flex-1 overflow-y-auto p-4\",\r\n classNames?.body,\r\n )}\r\n >\r\n {children}\r\n </div>\r\n\r\n {shouldShowFooter && (\r\n <div\r\n className={joinClasses(\r\n crudClasses.modal.footer,\r\n \"px-4 py-3 flex justify-end gap-3 border-t border-gray-200 dark:border-gray-700 sm:!px-6\",\r\n classNames?.footer,\r\n )}\r\n >\r\n {footerConfig?.cancelButton && (\r\n <Button\r\n onClick={() => onClose()}\r\n variant=\"outlined\"\r\n color=\"default\"\r\n className={joinClasses(\r\n crudClasses.modal.actionButton,\r\n \"min-w-[100px]\",\r\n )}\r\n type=\"button\"\r\n >\r\n {footerConfig?.cancelText || \"Cancel\"}\r\n </Button>\r\n )}\r\n {actionButtons.map((btn, index) => (\r\n <Button\r\n key={`${btn.label || \"action\"}-${index}`}\r\n onClick={(e) => {\r\n if (btn.type == \"submit\") {\r\n onFormSubmit(e);\r\n } else {\r\n executeFunction(\r\n () => Promise.resolve(btn?.onClick?.(e, selectedItem)),\r\n (resp: any) => 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={joinClasses(\r\n crudClasses.modal.actionButton,\r\n \"min-w-[100px]\",\r\n btn.className || \"\",\r\n )}\r\n type={(btn.type as \"button\" | \"submit\" | \"reset\") || \"button\"}\r\n >\r\n {loadingBtn ? (\r\n <div\r\n className={joinClasses(\r\n crudClasses.modal.loadingIndicator,\r\n \"flex items-center\",\r\n )}\r\n >\r\n <div className=\"animate-spin rounded-full h-4 w-4 border-2 border-white/30 border-t-2 border-t-white mr-2\"></div>\r\n {btn.label || \"Submit\"}...\r\n </div>\r\n ) : (\r\n btn.label || \"Submit\"\r\n )}\r\n </Button>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default Modal;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport RenderFields from \"./components/RenderFields\";\r\nimport { enqueueSnackbar } from \"notistack\";\r\nimport { crudClasses, joinClasses } from \"../../lib/crudClasses\";\r\n\r\ninterface FormField {\r\n key: string;\r\n [key: string]: any;\r\n}\r\n\r\ninterface FormConfig {\r\n formClass?: string;\r\n formFields?: FormField[];\r\n}\r\n\r\ninterface FormProps {\r\n config: FormConfig;\r\n onSubmit: (data: Record<string, any>) => void;\r\n initialData: Record<string, any> | null;\r\n fetchRowDetails?: (\r\n item: Record<string, any>,\r\n ) => Promise<{ data: Record<string, any> }>;\r\n type: \"add\" | \"edit\" | string;\r\n loading?: boolean;\r\n}\r\n\r\nconst Form: React.FC<FormProps> = ({\r\n config,\r\n onSubmit,\r\n initialData,\r\n fetchRowDetails,\r\n type,\r\n}) => {\r\n const safeInitialData = initialData || {};\r\n\r\n const { formClass = \"grid grid-cols-12 gap-4\", formFields = [] } =\r\n config || {};\r\n\r\n const [formData, setFormData] =\r\n useState<Record<string, any>>(safeInitialData);\r\n const [dataLoading, setDataLoading] = useState<boolean>(true);\r\n const [errors, setErrors] = useState<Record<string, string>>({});\r\n\r\n const handleGetDetails = async (): Promise<void> => {\r\n fetchRowDetails?.(safeInitialData)\r\n .then((resp) => {\r\n setFormData(resp.data);\r\n })\r\n .catch((error: Error) => {\r\n enqueueSnackbar(error.message, { variant: \"error\" });\r\n })\r\n .finally(() => {\r\n setDataLoading(false);\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n if (fetchRowDetails instanceof Function) {\r\n handleGetDetails();\r\n } else {\r\n setFormData(safeInitialData);\r\n setDataLoading(false);\r\n }\r\n }, []);\r\n\r\n const handleChange = (key: string, value: any): void => {\r\n setFormData((prev) => ({ ...prev, [key]: value }));\r\n setErrors((prev) => ({\r\n ...prev,\r\n [key]: \"\",\r\n }));\r\n };\r\n\r\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>): void => {\r\n e.preventDefault();\r\n const form = e.currentTarget;\r\n\r\n if (!form.checkValidity()) {\r\n form.reportValidity();\r\n return;\r\n }\r\n\r\n const newErrors: Record<string, string> = {};\r\n let firstInvalidFocused = false;\r\n\r\n for (const field of formFields) {\r\n const value = formData[field.key] || \"\";\r\n if (field.customValidation) {\r\n const isValid = field.customValidation(value);\r\n if (isValid !== false) {\r\n newErrors[field.key] = isValid;\r\n if (!firstInvalidFocused) {\r\n const input = form.querySelector(\r\n `[id=\"field-${field.key}\"]`,\r\n ) as HTMLElement | null;\r\n input?.focus();\r\n firstInvalidFocused = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n setErrors(newErrors);\r\n\r\n if (Object.keys(newErrors).length > 0) return;\r\n\r\n onSubmit(formData);\r\n };\r\n\r\n if (dataLoading) {\r\n return (\r\n <div\r\n className={joinClasses(\r\n crudClasses.form.loading,\r\n \"flex items-center justify-center h-64\",\r\n )}\r\n >\r\n <div\r\n className=\"rounded-full border-4 border-blue-500 border-t-gray-200 animate-spin w-8 h-8\"\r\n style={{\r\n borderTopColor: \"border-primary-500\",\r\n }}\r\n />\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <form\r\n id={\r\n type === \"add\"\r\n ? \"addForm\"\r\n : type === \"edit\"\r\n ? \"editForm\"\r\n : \"defaultForm\"\r\n }\r\n onSubmit={handleSubmit}\r\n className={joinClasses(crudClasses.form.root, formClass)}\r\n noValidate={false}\r\n >\r\n {formFields.map((field) => (\r\n <RenderFields\r\n key={field.key}\r\n field={field}\r\n formData={formData}\r\n errorMessage={errors[field.key] || \"\"}\r\n handleChange={handleChange}\r\n />\r\n ))}\r\n </form>\r\n );\r\n};\r\n\r\nexport default Form;\r\n","import { useEffect, useState } from \"react\";\r\nimport DetailRow from \"./components/DetailRow\";\r\nimport CardGroup from \"./components/CardGroup\";\r\nimport GroupRow from \"./components/GroupRow\";\r\nimport { enqueueSnackbar } from \"notistack\";\r\nimport { crudClasses, joinClasses } from \"../../lib/crudClasses\";\r\n\r\ninterface DetailsProps {\r\n data: Record<string, any> | null;\r\n config: {\r\n fields?: Array<Record<string, any>>;\r\n containerClass?: string;\r\n variant?: \"default\" | \"card\" | \"split\";\r\n styles?: {\r\n containerClass?: string;\r\n rowClass?: string;\r\n groupClass?: string;\r\n cardGroupClass?: string;\r\n labelClass?: string;\r\n valueClass?: string;\r\n iconClass?: string;\r\n mediaGridClass?: string;\r\n };\r\n };\r\n fetchRowDetails?: (\r\n payload: Record<string, any>,\r\n ) => Promise<{ data: Record<string, any> }>;\r\n}\r\n\r\nexport default function Details({\r\n data,\r\n config,\r\n fetchRowDetails,\r\n}: DetailsProps) {\r\n const {\r\n fields = [],\r\n containerClass,\r\n variant = \"default\",\r\n styles = {},\r\n } = config || {};\r\n\r\n const safeData = data || {};\r\n\r\n const [detailsData, setDetailsData] = useState<Record<string, any>>(safeData);\r\n\r\n const [dataLoading, setDataLoading] = useState(true);\r\n\r\n const handleGetDetails = async () => {\r\n fetchRowDetails?.(safeData)\r\n .then((resp) => {\r\n setDetailsData(resp.data);\r\n })\r\n .catch((error: Error) => {\r\n enqueueSnackbar(error.message, { variant: \"error\" });\r\n })\r\n .finally(() => {\r\n setDataLoading(false);\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n if (fetchRowDetails instanceof Function) {\r\n handleGetDetails();\r\n } else {\r\n setDetailsData(safeData);\r\n setDataLoading(false);\r\n }\r\n }, []);\r\n\r\n if (dataLoading) {\r\n return (\r\n <div\r\n className={joinClasses(\r\n crudClasses.form.loading,\r\n \"flex items-center justify-center h-64\",\r\n )}\r\n >\r\n <div\r\n className=\"rounded-full border-4 border-blue-500 border-t-gray-200 animate-spin w-8 h-8\"\r\n style={{\r\n borderTopColor: \"border-primary-500\",\r\n }}\r\n />\r\n </div>\r\n );\r\n }\r\n\r\n const variantContainerClass: Record<string, string> = {\r\n default: \"grid grid-cols-12 gap-4\",\r\n // card: each field is a standalone elevated card in a 12-col grid\r\n card: \"grid grid-cols-12 gap-3\",\r\n // split: clean property-sheet — bordered box, rows divided by hairlines\r\n split:\r\n \"rounded-xl border border-gray-200 dark:border-gray-700 overflow-hidden divide-y divide-gray-100 dark:divide-gray-800\",\r\n };\r\n\r\n return (\r\n <>\r\n <div\r\n className={joinClasses(\r\n crudClasses.details.root,\r\n crudClasses.details.container,\r\n variantContainerClass[variant] || variantContainerClass.default,\r\n containerClass || \"\",\r\n styles.containerClass || \"\",\r\n )}\r\n >\r\n {fields.map((col) => {\r\n if (\r\n col.renderCondition &&\r\n typeof col.renderCondition === \"function\"\r\n ) {\r\n const shouldRender = col.renderCondition(detailsData);\r\n if (!shouldRender) {\r\n return null;\r\n }\r\n }\r\n return col.type == \"group\" ? (\r\n <GroupRow\r\n key={col.key || col.titleKey}\r\n col={col}\r\n data={detailsData}\r\n uiVariant={variant}\r\n styleConfig={styles}\r\n />\r\n ) : col.type == \"cardGroup\" ? (\r\n <CardGroup\r\n key={col.key || col.titleKey}\r\n col={col}\r\n data={detailsData}\r\n uiVariant={variant}\r\n styleConfig={styles}\r\n />\r\n ) : (\r\n <DetailRow\r\n key={col.key || col.label}\r\n col={col}\r\n data={detailsData}\r\n uiVariant={variant}\r\n styleConfig={styles}\r\n />\r\n );\r\n })}\r\n </div>\r\n </>\r\n );\r\n}\r\n","import React, { useEffect, useMemo, useState } from \"react\";\r\nimport Table from \"./Table/Table\";\r\nimport Modal from \"./Modal/Modal\";\r\nimport Form from \"./Form/Form\";\r\nimport { Icon } from \"@iconify/react\";\r\nimport { enqueueSnackbar } from \"notistack\";\r\nimport Details from \"./Details/Details\";\r\nimport type {\r\n CrudPageProps,\r\n ServerSidePaginationData,\r\n} from \"../types/crudtypes\";\r\nimport { crudClasses, joinClasses } from \"../lib/crudClasses\";\r\n\r\nconst CrudPage: React.FC<CrudPageProps> = ({ config }) => {\r\n const {\r\n title,\r\n fetchData,\r\n fetchRowDetails,\r\n isStaticData = false,\r\n tableConfig,\r\n modalConfig,\r\n filterConfig,\r\n } = config;\r\n\r\n const [loading, setLoading] = useState<boolean>(true);\r\n const [formLoading, setFormLoading] = useState<boolean>(false);\r\n const [listingData, setListingData] = useState<Record<string, any>[]>([]);\r\n const [paginationData, setPaginationData] = useState<any>(null);\r\n const [serverSidePaginationData, setServerSidePaginationData] =\r\n useState<ServerSidePaginationData>({\r\n search: \"\",\r\n rows_per_page: 50,\r\n current_page: 1,\r\n sort_by: \"\",\r\n sort_order: \"\",\r\n });\r\n const [filterData, setFilterData] = useState<Record<string, any>>({});\r\n const [changeFilterData, setChangeFilterData] = useState<boolean>(false);\r\n const [showAdd, setShowAdd] = useState<boolean>(false);\r\n const [showEdit, setShowEdit] = useState<boolean>(false);\r\n const [showDelete, setShowDelete] = useState<boolean>(false);\r\n const [showView, setShowView] = useState<boolean>(false);\r\n const [selectedItem, setSelectedItem] = useState<Record<string, any> | null>(\r\n null,\r\n );\r\n\r\n const handleMenuAction = (action: string, item: any): void => {\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: (() => Promise<any>) | null,\r\n onSuccess?: (resp: any) => void,\r\n success_message: string = \"\",\r\n error_message: string = \"\",\r\n ): Promise<void> => {\r\n setFormLoading(true);\r\n\r\n try {\r\n if (!action) return;\r\n const resp = await action();\r\n if (success_message || resp?.message) {\r\n enqueueSnackbar(success_message || resp.message || \"Success\", {\r\n variant: \"success\" as const,\r\n });\r\n }\r\n onSuccess?.(resp);\r\n } catch (error: any) {\r\n if (error_message || error?.message) {\r\n enqueueSnackbar(error_message || error.message || \"Error occurred\", {\r\n variant: \"error\" as const,\r\n });\r\n }\r\n } finally {\r\n setFormLoading(false);\r\n }\r\n };\r\n\r\n const handleAddResult = (resp: { newObject: any }): void => {\r\n const newObj = resp.newObject;\r\n if (isStaticData) {\r\n setListingData((prev) => [newObj, ...prev]);\r\n setPaginationData((prev: any) => ({\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 newObject: any;\r\n targetObject: any;\r\n }): void => {\r\n const { newObject: updatedObj, targetObject } = resp;\r\n if (isStaticData) {\r\n setListingData((prev) =>\r\n prev.map((item) =>\r\n item.id === targetObject.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: { targetObject: any } | null): void => {\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: Record<string, any>): Promise<void> =>\r\n executeAction(\r\n () =>\r\n modalConfig?.addModal?.handleSubmit\r\n ? modalConfig.addModal.handleSubmit(formData)\r\n : Promise.resolve({ newObject: null }),\r\n handleAddResult,\r\n );\r\n\r\n const handleEditFormSubmit = (formData: Record<string, any>): Promise<void> =>\r\n executeAction(\r\n () =>\r\n modalConfig?.editModal?.handleSubmit\r\n ? modalConfig.editModal.handleSubmit(formData, selectedItem)\r\n : Promise.resolve({ newObject: null, targetObject: null }),\r\n handleEditResult,\r\n );\r\n\r\n const handleGetListing = async (): Promise<void> => {\r\n setLoading(true);\r\n\r\n try {\r\n const resp = await fetchData({\r\n ...serverSidePaginationData,\r\n ...filterData,\r\n });\r\n setListingData(resp.data || []);\r\n setPaginationData(resp.pagination || null);\r\n } catch (error: any) {\r\n enqueueSnackbar(error.message || \"Failed to fetch data\", {\r\n variant: \"error\",\r\n });\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const handleFilterData = (data: Record<string, any>): void => {\r\n setFilterData((prev) => ({ ...data }));\r\n if (tableConfig?.filter?.useServerSideFilters) {\r\n setChangeFilterData((prev) => !prev);\r\n }\r\n };\r\n\r\n const filterByMatchingFields = (\r\n data: any[],\r\n filters: Record<string, any>,\r\n ): any[] => {\r\n return data.filter((item) =>\r\n Object.entries(filters).every(([key, value]) => item[key] === value),\r\n );\r\n };\r\n\r\n const filteredData = useMemo(() => {\r\n if (tableConfig?.filter?.useServerSideFilters) return listingData;\r\n return filterByMatchingFields(listingData, filterData);\r\n }, [listingData, filterData, tableConfig?.filter?.useServerSideFilters]);\r\n\r\n const ViewComponent = modalConfig?.viewModal?.component;\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 serverSidePaginationData.sort_by,\r\n serverSidePaginationData.sort_order,\r\n changeFilterData,\r\n ]);\r\n\r\n return (\r\n <div className={crudClasses.crudPage.root}>\r\n <Table\r\n title={title}\r\n setShowAdd={setShowAdd}\r\n description={config.description}\r\n buttonText={config.buttonText}\r\n showAddButton={!!modalConfig?.addModal}\r\n config={{\r\n ...tableConfig,\r\n pagination: {\r\n ...tableConfig.pagination,\r\n ...paginationData,\r\n },\r\n data: filteredData,\r\n setServerSidePaginationData: setServerSidePaginationData,\r\n onMenuAction: handleMenuAction,\r\n filterConfig,\r\n onFilterApply: handleFilterData,\r\n loading,\r\n }}\r\n />\r\n\r\n {showAdd && (\r\n <Modal\r\n isOpen={showAdd}\r\n onClose={() => {\r\n if (!formLoading) {\r\n setShowAdd(false);\r\n }\r\n }}\r\n icon={modalConfig?.addModal?.icon}\r\n title={modalConfig?.addModal?.title || \"Add New\"}\r\n size={modalConfig?.addModal?.size || \"md\"}\r\n onFormSubmit={() =>\r\n document.querySelector<HTMLFormElement>(\"#addForm\")?.requestSubmit()\r\n }\r\n loadingBtn={formLoading}\r\n actionButtons={modalConfig?.addModal?.actionButtons || []}\r\n >\r\n <Form\r\n config={modalConfig?.addModal || {}}\r\n onSubmit={handleAddFormSubmit}\r\n initialData={{}}\r\n type=\"add\"\r\n loading={formLoading}\r\n />\r\n </Modal>\r\n )}\r\n\r\n {/* Edit Modal */}\r\n {showEdit && (\r\n <Modal\r\n isOpen={showEdit}\r\n onClose={() => {\r\n if (!formLoading) {\r\n setShowEdit(false);\r\n }\r\n }}\r\n icon={modalConfig?.editModal?.icon}\r\n title={modalConfig?.editModal?.title || \"Edit\"}\r\n size={modalConfig?.editModal?.size || \"md\"}\r\n onFormSubmit={() =>\r\n document\r\n .querySelector<HTMLFormElement>(\"#editForm\")\r\n ?.requestSubmit()\r\n }\r\n actionButtons={modalConfig?.editModal?.actionButtons || []}\r\n loadingBtn={formLoading}\r\n >\r\n <Form\r\n config={modalConfig?.editModal || {}}\r\n onSubmit={handleEditFormSubmit}\r\n initialData={selectedItem}\r\n type=\"edit\"\r\n loading={formLoading}\r\n fetchRowDetails={fetchRowDetails}\r\n />\r\n </Modal>\r\n )}\r\n\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\r\n className={joinClasses(\r\n crudClasses.crudPage.deleteContent,\r\n \"flex items-center space-x-2 py-3\",\r\n )}\r\n >\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 classNames={modalConfig?.viewModal?.modalClassNames}\r\n >\r\n {ViewComponent ? (\r\n <ViewComponent data={selectedItem} />\r\n ) : (\r\n <Details\r\n data={selectedItem}\r\n fetchRowDetails={fetchRowDetails}\r\n config={modalConfig?.viewModal || {}}\r\n />\r\n )}\r\n </Modal>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default CrudPage;\r\n","import React from \"react\";\r\nimport { SnackbarProvider, useSnackbar, type SnackbarKey } from \"notistack\";\r\nimport { X } from \"lucide-react\";\r\n\r\ninterface InnerCheckProps {\r\n children: React.ReactNode;\r\n}\r\n\r\nfunction InnerCheck({ children }: InnerCheckProps) {\r\n useSnackbar(); // If this works, provider exists\r\n return children;\r\n}\r\n\r\ninterface OptionalSnackbarProviderProps {\r\n children: React.ReactNode;\r\n}\r\n\r\nexport default function OptionalSnackbarProvider({ \r\n children \r\n}: OptionalSnackbarProviderProps) {\r\n try {\r\n return <InnerCheck>{children}</InnerCheck>;\r\n } catch (error) {\r\n return (\r\n <SnackbarProvider\r\n anchorOrigin={{\r\n vertical: \"bottom\",\r\n horizontal: \"right\",\r\n }}\r\n action={(snackbarKey: SnackbarKey) => (\r\n <button\r\n onClick={() => {\r\n window.dispatchEvent(\r\n new CustomEvent(\"closeSnackbar\", { detail: snackbarKey }),\r\n );\r\n }}\r\n className=\"p-1 hover:bg-white/20 rounded-full transition-colors duration-200 text-white flex items-center justify-center\"\r\n >\r\n <X className=\"h-4 w-4\" />\r\n </button>\r\n )}\r\n maxSnack={3}\r\n autoHideDuration={3000}\r\n >\r\n {children}\r\n </SnackbarProvider>\r\n );\r\n }\r\n}\r\n","import React, { useEffect } from \"react\";\r\nimport libraryStyles from \"./index.css?inline\";\r\nimport CrudPage from \"./components/CrudPage\";\r\nimport OptionalSnackbarProvider from \"./OptionalSnackbarProvider\";\r\nimport { type CrudPageProps } from \"./types/crudtypes\";\r\n\r\nconst injectStyles = () => {\r\n if (typeof document === \"undefined\") return;\r\n if (document.getElementById(\"react-admin-crud-manager-styles\")) return;\r\n\r\n const style = document.createElement(\"style\");\r\n style.id = \"react-admin-crud-manager-styles\";\r\n style.textContent = libraryStyles;\r\n document.head.appendChild(style);\r\n};\r\n\r\nexport default function Crud({ config }: CrudPageProps) {\r\n useEffect(() => {\r\n injectStyles();\r\n }, []);\r\n\r\n return (\r\n <div className=\"racm-root\">\r\n <OptionalSnackbarProvider>\r\n <CrudPage config={config} />\r\n </OptionalSnackbarProvider>\r\n </div>\r\n );\r\n}\r\n"],"names":["formatDate","dateString","format","date","pad","n","map","token","searchLocalData","data","searchTerm","searchKeys","lowerSearchTerm","extractValues","obj","item","valuesToSearch","key","val","joinClasses","classes","crudClasses","Button","React","className","variant","color","size","fullWidth","children","props","ref","baseStyles","sizes","colorVariants","colorStyles","_a","sizeStyles","combinedClassName","jsx","InputLabel","label","required","infoText","Fragment","jsxs","Info","countries","Select","options","value","defaultValue","onChange","placeholder","disabled","search","name","parentClass","multiple","dropdownMaxHeight","formData","countriesList","dependencyKey","errorMessage","open","setOpen","useState","setSearchTerm","showAboveState","setShowAboveState","dropdownRef","useRef","optionsPanelRef","searchInputRef","normalizedOptions","setNormalizedOptions","dropdownPosition","setDropdownPosition","dropdownPortalTarget","initialVal","normalize","getCountrieslist","useEffect","result","normalizedValue","filteredOptions","option","isSelected","optionValue","normalized","handleClickOutside","event","updateDropdownPosition","rect","shouldShowAbove","handleOptionClick","finalValue","exists","newValues","v","selectedLabels","opt","_b","ChevronDown","createPortal","Search","e","Check","Switch","PhoneInput","defaultCountry","find_country_with_code","countryCode","selectedCountry","setSelectedCountry","fullNumber","setFullNumber","localValue","setLocalValue","applyMask","digits","mask","digitIndex","i","handleNumberChange","maskedValue","unmaskedValue","match","c","a","b","rawValue","handleCountrySelect","country","filteredCountries","handleInputChange","input","formatted","TextArea","extendStatics","d","p","__extends","__","__assign","t","s","_populated","_ie","_firefox","_opera","_webkit","_chrome","_ie_real_version","_osx","_windows","_linux","_android","_win64","_iphone","_ipad","_native","_mobile","_populate","uas","agent","os","trident","ver","UserAgent_DEPRECATED","UserAgent_DEPRECATED_1","canUseDOM","ExecutionEnvironment","ExecutionEnvironment_1","require$$0","useHasFeature","isEventSupported","eventNameSuffix","capture","eventName","isSupported","element","isEventSupported_1","require$$1","PIXEL_STEP","LINE_HEIGHT","PAGE_HEIGHT","normalizeWheel","sX","sY","pX","pY","normalizeWheel_1","getCropSize","mediaWidth","mediaHeight","containerWidth","containerHeight","aspect","rotation","rotateSize","width","height","fittingWidth","fittingHeight","getMediaZoom","mediaSize","restrictPosition","position","cropSize","zoom","restrictPositionCoord","maxPosition","clamp","getDistanceBetweenPoints","pointA","pointB","getRotationBetweenPoints","computeCroppedArea","crop","limitAreaFn","limitArea","noOp","mediaBBoxSize","mediaNaturalBBoxSize","croppedAreaPercentages","widthInPixels","heightInPixels","isImgWiderThanHigh","sizePixels","croppedAreaPixels","max","_max","getInitialCropFromCroppedAreaPercentages","minZoom","maxZoom","getZoomFromCroppedAreaPixels","mediaZoom","getInitialCropFromCroppedAreaPixels","cropZoom","getCenter","getRadianAngle","degreeValue","rotRad","min","classNames","args","_i","css_248z","MIN_ZOOM","MAX_ZOOM","KEYBOARD_STEP","Cropper","_super","_this","isFirstResize","entries","_c","_d","_e","_f","mediaRef","containerAspect","naturalWidth","naturalHeight","isMediaScaledDown","mediaAspect","renderedMediaSize","bounds","point","newZoom","newRotation","x","y","offsetX","offsetY","requestedPosition","newPosition","pixelY","containerTopLeft","shouldUpdatePosition","zoomPoint","zoomTarget","restrictedPosition","cropData","adjustedCrop","sizeChanged","scaleX","scaleY","onCropChange","keyboardStep","step","newCrop","prevProps","_g","_h","_j","objectFit","center","distance","image","video","mediaProps","cropperProps","transform","cropShape","showGrid","roundCropAreaPixels","containerStyle","cropAreaStyle","mediaStyle","containerClassName","cropAreaClassName","mediaClassName","el","touch","ButtonComponent","createImage","url","resolve","reject","error","getCroppedImageBlob","imageSrc","pixelCrop","fileType","canvas","ctx","bBoxWidth","bBoxHeight","croppedCanvas","croppedCtx","blob","ImageCropperModal","isOpen","fileName","title","onClose","onApply","setCrop","setZoom","setCroppedAreaPixels","onCropComplete","useCallback","_area","croppedPixels","handleApply","fileExtension","croppedFile","Icon","revokeBlobUrl","ImagePicker","accept","id","dragDrop","cropImage","setImage","isDragging","setIsDragging","cropModalOpen","setCropModalOpen","cropSource","setCropSource","selectedFileType","setSelectedFileType","selectedFileName","setSelectedFileName","inputRef","sourceUrlRef","previewUrlRef","preview","closeCropModal","handleCroppedImage","handleFileChange","files","file","source","removeImage","handleDragOver","handleDragLeave","handleDrop","handleButtonClick","imagePreview","Input","type","onKeyDown","negativeNumberAllow","field","maskApplyOnValue","showPassword","setShowPassword","handleKeyDown","maskValue","cleanValue","valueIndex","maskChar","valueChar","prev","TinyEditor","editorKey","inline","plugins","toolbar","menubar","fontFamily","initConfig","imageUploadHandler","defaultPlugins","defaultToolbar","handleImageUpload","blobInfo","Editor","content","Checkbox","multiSelect","isChecked","handleSingleChange","handleMultipleChange","checked","newValue","index","idx","AudioPicker","maxSize","audio","setAudio","maxSizeBytes","cleanupAudio","enqueueSnackbar","removeAudio","toGalleryItem","MultiImagePicker","maxImages","images","setImages","cropTargetId","setCropTargetId","replaceInputRef","cropSourceUrlRef","imagesRef","img","nextItems","remainingSlots","openCropModal","next","addFiles","selected","mapped","idToRemove","target","handleReplaceClick","idToReplace","handleReplaceImage","canSelectMore","ImagePreview","src","alt","setIsOpen","closePreview","handleEsc","X","GroupRow","col","uiVariant","styleConfig","subtitle","fallback_icon","targetImage","setTargetImage","openPreview","imageObj","renderAvatar","User","CardGroup","renderMiniAvatar","BADGE_COLORS","BADGE_VARIANTS","Chip","colorConfig","variantKey","variantClasses","DetailRow","chipObj","getImageSource","renderValue","wrapClass","Radio","text","radioOptions","VideoPicker","setVideo","cleanupVideo","removeVideo","RenderFields","handleChange","rows","inputClass","minLength","renderCondition","pattern","renderType","aspectRatio","finalPlaceholder","baseClass","imgList","imgObj","updatedValue","FilterDrawer","config","filters","setFilters","handleReset","DynamicComponent","TableSkeleton","columns","_","rowIndex","colIndex","SortDropdown","clearLabel","sortRef","isSortApplied","handleSelect","selectedValue","selectedOption","ArrowUpDown","BASE_SORT_CONFIG","normalizeSortConfig","sortConfig","getSortableColumns","tableHead","blockedTypes","detectSortType","sortKeyName","keyword","buildDefaultSortOptions","getNormalizedSortOptions","normalizedSortConfig","sortableColumns","fieldRules","fieldColumns","fieldKey","targetCol","sortTableData","filteredData","sortBy","normalizedSortOptions","direction","sortKey","sortType","normalizePhone","aValue","bValue","comparison","Table","setShowAdd","buttonText","description","showAddButton","table_head","loading","filter","sort","pagination","exportCSV","emptyMessage","onMenuAction","setServerSidePaginationData","onFilterApply","filterConfig","rowClick","activeMenu","setActiveMenu","menuList","setMenuList","menuPosition","setMenuPosition","showFilters","setShowFilters","appliedFilters","setAppliedFilters","useMemo","setSortBy","sortedData","currentPage","setCurrentPage","pageSize","setPageSize","totalRecords","setTotalRecords","totalPages","paginatedData","start","menuRef","tableScopeRef","buttonRefs","searchTimeoutRef","menuPortalTarget","handleSearchChange","handleSortChange","payload","handleActionClick","action","handleMenuToggle","itemId","menu_list","button","menuWidth","menuHeight","viewportWidth","viewportHeight","left","top","calculateRowNumber","renderMultiImageCell","maxPreview","visibleImages","remaining","imageAlt","row","renderAudio","audioSrc","Music","renderGroupCell","handleRenderChip","handleRenderCellValue","EllipsisVertical","handleRowClick","handleColumnClick","isRowClickable","isColumnClickable","handleExportCSV","headers","csvContent","r","defaultName","finalName","link","handleScroll","Plus","Filter","Download","newLimit","newPage","ChevronLeft","ChevronRight","Modal","icon","actionButtons","onFormSubmit","loadingBtn","executeFunction","selectedItem","footerConfig","sizeClasses","shouldShowFooter","btn","resp","Form","onSubmit","initialData","fetchRowDetails","safeInitialData","formClass","formFields","setFormData","dataLoading","setDataLoading","errors","setErrors","handleGetDetails","handleSubmit","form","newErrors","firstInvalidFocused","isValid","Details","fields","containerClass","styles","safeData","detailsData","setDetailsData","variantContainerClass","CrudPage","fetchData","isStaticData","tableConfig","modalConfig","setLoading","formLoading","setFormLoading","listingData","setListingData","paginationData","setPaginationData","serverSidePaginationData","filterData","setFilterData","changeFilterData","setChangeFilterData","showAdd","showEdit","setShowEdit","showDelete","setShowDelete","showView","setShowView","setSelectedItem","handleMenuAction","executeAction","onSuccess","success_message","error_message","handleAddResult","newObj","handleGetListing","handleEditResult","updatedObj","targetObject","handleDeleteResult","handleAddFormSubmit","handleEditFormSubmit","handleFilterData","filterByMatchingFields","ViewComponent","_k","_l","_m","_n","_o","_p","_q","_r","_s","_t","_u","_v","InnerCheck","useSnackbar","OptionalSnackbarProvider","SnackbarProvider","snackbarKey","injectStyles","style","libraryStyles","Crud"],"mappings":"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","x_google_ignoreList":[9,10,11,12,13,14,15]}